2014-10-23 17:53:38 +00:00
|
|
|
|
/*
|
|
|
|
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
|
|
|
|
*
|
|
|
|
|
* Copyright (C) 2011-2014 Jean-Pierre Charras
|
2019-05-01 18:57:59 +00:00
|
|
|
|
* Copyright (C) 2004-2014 KiCad Developers, see AUTHORS.txt for contributors.
|
2014-10-23 17:53:38 +00:00
|
|
|
|
*
|
|
|
|
|
* This program is free software; you can redistribute it and/or
|
|
|
|
|
* modify it under the terms of the GNU General Public License
|
2019-05-01 18:57:59 +00:00
|
|
|
|
* as published by the Free Software Foundation; either version 3
|
2014-10-23 17:53:38 +00:00
|
|
|
|
* of the License, or (at your option) any later version.
|
|
|
|
|
*
|
|
|
|
|
* This program is distributed in the hope that it will be useful,
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
|
* GNU General Public License for more details.
|
|
|
|
|
*
|
2019-05-01 18:57:59 +00:00
|
|
|
|
* You should have received a copy of the GNU General Public License along
|
|
|
|
|
* with this program. If not, see <http://www.gnu.org/licenses/>.
|
2014-10-23 17:53:38 +00:00
|
|
|
|
*/
|
|
|
|
|
|
2013-05-26 04:36:44 +00:00
|
|
|
|
/**
|
|
|
|
|
* @file transline_ident.cpp
|
|
|
|
|
*/
|
|
|
|
|
#include <wx/intl.h>
|
|
|
|
|
#include <wx/arrstr.h>
|
|
|
|
|
|
2020-10-13 01:55:32 +00:00
|
|
|
|
#include <kiface_i.h>
|
2021-03-08 02:59:07 +00:00
|
|
|
|
#include <bitmaps.h>
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
// transline specific functions:
|
2020-10-13 01:55:32 +00:00
|
|
|
|
#include "transline/transline.h"
|
|
|
|
|
#include "transline/microstrip.h"
|
|
|
|
|
#include "transline/coplanar.h"
|
|
|
|
|
#include "transline/rectwaveguide.h"
|
|
|
|
|
#include "transline/coax.h"
|
|
|
|
|
#include "transline/c_microstrip.h"
|
|
|
|
|
#include "transline/stripline.h"
|
|
|
|
|
#include "transline/twistedpair.h"
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
2020-10-13 01:01:25 +00:00
|
|
|
|
#include "pcb_calculator_settings.h"
|
|
|
|
|
#include "widgets/unit_selector.h"
|
|
|
|
|
#include "transline_ident.h"
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2020-01-10 14:31:00 +00:00
|
|
|
|
* TRANSLINE_PRM
|
2013-05-26 04:36:44 +00:00
|
|
|
|
* A class to handle one parameter of transline
|
|
|
|
|
*/
|
|
|
|
|
TRANSLINE_PRM::TRANSLINE_PRM( PRM_TYPE aType, PRMS_ID aId,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
const char* aKeywordCfg,
|
|
|
|
|
const wxString& aDlgLabel,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
const wxString& aToolTip,
|
|
|
|
|
double aValue,
|
|
|
|
|
bool aConvUnit )
|
|
|
|
|
{
|
|
|
|
|
m_Type = aType;
|
|
|
|
|
m_Id = aId;
|
2020-08-24 11:35:38 +00:00
|
|
|
|
m_DlgLabel = aDlgLabel;
|
|
|
|
|
m_KeyWord = aKeywordCfg;
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_ToolTip = aToolTip;
|
|
|
|
|
m_Value = aValue;
|
|
|
|
|
m_ConvUnit = aConvUnit;
|
|
|
|
|
m_ValueCtrl = NULL;
|
|
|
|
|
m_UnitCtrl = NULL;
|
|
|
|
|
m_UnitSelection = 0;
|
2015-03-04 09:26:00 +00:00
|
|
|
|
m_NormalizedValue = 0;
|
|
|
|
|
}
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double TRANSLINE_PRM::ToUserUnit()
|
|
|
|
|
{
|
|
|
|
|
if( m_UnitCtrl && m_ConvUnit )
|
|
|
|
|
return 1.0 / ( (UNIT_SELECTOR*) m_UnitCtrl )->GetUnitScale();
|
|
|
|
|
else
|
|
|
|
|
return 1.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double TRANSLINE_PRM::FromUserUnit()
|
|
|
|
|
{
|
|
|
|
|
if( m_UnitCtrl )
|
|
|
|
|
return ( (UNIT_SELECTOR*) m_UnitCtrl )->GetUnitScale();
|
|
|
|
|
else
|
|
|
|
|
return 1.0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
2020-01-10 14:31:00 +00:00
|
|
|
|
* TRANSLINE_IDENT
|
2013-05-26 04:36:44 +00:00
|
|
|
|
* A class to handle a list of parameters of a given transline
|
2020-08-24 11:35:38 +00:00
|
|
|
|
* Important note:
|
|
|
|
|
* the first string of TRANSLINE_PRM (m_KeyWord) is a keyword in config file.
|
|
|
|
|
* it can contain only ASCII7 chars
|
|
|
|
|
* the second string of TRANSLINE_PRM (m_DlgLabel) is a string translated for dialog,
|
|
|
|
|
* so mark it for translation (m_KeyWord and m_DlgLabel are usually the same in English)
|
|
|
|
|
* and of course do not mark translatable m_DlgLabel that obviously cannot be translated,
|
|
|
|
|
* like "H" or "H_t"
|
2013-05-26 04:36:44 +00:00
|
|
|
|
*/
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
TRANSLINE_IDENT::TRANSLINE_IDENT( enum TRANSLINE_TYPE_ID aType )
|
2013-05-26 04:36:44 +00:00
|
|
|
|
{
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_Type = aType; // The type of transline handled
|
|
|
|
|
m_Icon = NULL; // An xpm icon to display in dialogs
|
|
|
|
|
m_TLine = NULL; // The TRANSLINE itself
|
|
|
|
|
m_HasPrmSelection = false; // true if selection of parameters must be enabled in dialog menu
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
// Add common prms:
|
|
|
|
|
// Default values are for FR4
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, EPSILONR_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"Er", wxT( "εr" ),
|
|
|
|
|
_( "Substrate relative permittivity (dielectric constant)" ),
|
2013-05-26 04:36:44 +00:00
|
|
|
|
4.6, false ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, TAND_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"TanD", wxT( "tan δ" ),
|
|
|
|
|
_( "Dielectric loss (dissipation factor)" ),
|
|
|
|
|
2e-2, false ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
// Default value is for copper
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, RHO_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"Rho", wxT( "ρ" ),
|
|
|
|
|
_( "Electrical resistivity or specific electrical resistance of conductor (ohm*meter)" ),
|
2013-05-26 04:36:44 +00:00
|
|
|
|
1.72e-8, false ) );
|
|
|
|
|
|
|
|
|
|
// Default value is in GHz
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_FREQUENCY, FREQUENCY_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Frequency", _( "Frequency" ),
|
|
|
|
|
_( "Frequency of the input signal" ), 1.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
2015-08-09 09:03:25 +00:00
|
|
|
|
|
2013-05-26 04:36:44 +00:00
|
|
|
|
switch( m_Type )
|
|
|
|
|
{
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case MICROSTRIP_TYPE: // microstrip
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new MICROSTRIP();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::microstrip );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Skin depth:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"H", "H", _( "Height of substrate" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_T_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"H_t", "H(top)", _( "Height of box top" ), 1e20, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, T_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"T", "T",
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Strip thickness" ), 0.035, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, ROUGH_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"Rough", _( "Roughness" ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Conductor roughness" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MUR_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel S", wxString::Format( wxT( "μ(%s)" ), _( "substrate" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of substrate" ), 1, false ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"W", "W", _( "Line width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-14 18:52:22 +00:00
|
|
|
|
"L", "L", _( "Line length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case CPW_TYPE: // coplanar waveguide
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new COPLANAR();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::cpw );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_HasPrmSelection = true;
|
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Skin depth:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"H", "H", _( "Height of substrate" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, T_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"T", "T", _( "Strip thickness" ), 0.035, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"W", "W", _( "Line width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_S_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"S", "S", _( "Gap width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Line length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case GROUNDED_CPW_TYPE: // grounded coplanar waveguide
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new GROUNDEDCOPLANAR();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::cpw_back );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_HasPrmSelection = true;
|
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Skin depth:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"H", "H", _( "Height of substrate" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, T_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"T", "T", _( "Strip thickness" ), 0.035, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"W", "W", _( "Line width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_S_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"S", "S", _( "Gap width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Line length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case RECTWAVEGUIDE_TYPE: // rectangular waveguide
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new RECTWAVEGUIDE();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::rectwaveguide );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_HasPrmSelection = true;
|
|
|
|
|
|
2018-04-23 23:27:43 +00:00
|
|
|
|
m_Messages.Add( _( "ZF(H10) = Ey / Hx:" ) );
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "TE-modes:" ) );
|
|
|
|
|
m_Messages.Add( _( "TM-modes:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MUR_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel I", wxString::Format( wxT( "μ(%s)" ), _( "insulator" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of insulator" ), 1, false ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"a", "a", _( "Width of waveguide" ), 10.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_S_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"b", "b", _( "Height of waveguide" ), 5.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Waveguide length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case COAX_TYPE: // coaxial cable
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new COAX();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::coax );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_HasPrmSelection = true;
|
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "TE-modes:" ) );
|
|
|
|
|
m_Messages.Add( _( "TM-modes:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MUR_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel I", wxString::Format( wxT( "μ(%s)" ), _( "insulator" ) ),
|
2021-02-14 18:52:22 +00:00
|
|
|
|
_( "Relative permeability (mu) of insulator" ), 1, false ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_DIAM_IN_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"Din", _( "Din" ),
|
|
|
|
|
_( "Inner diameter (conductor)" ), 1.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_DIAM_OUT_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"Dout", _( "Dout" ),
|
|
|
|
|
_( "Outer diameter (insulator)" ), 8.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Line length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case C_MICROSTRIP_TYPE: // coupled microstrip
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new C_MICROSTRIP();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::c_microstrip );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_HasPrmSelection = true;
|
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s (even):" ), wxT( "εr" ) ) );
|
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s (odd):" ), wxT( "εr" ) ) );
|
|
|
|
|
m_Messages.Add( _( "Conductor losses (even):" ) );
|
|
|
|
|
m_Messages.Add( _( "Conductor losses (odd):" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses (even):" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses (odd):" ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Skin depth:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"H", "H", _( "Height of substrate" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_T_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"H_t", "H_t", _( "Height of box top" ), 1e20, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, T_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"T", "T", _( "Strip thickness" ), 0.035, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, ROUGH_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"Rough", _( "Roughness" ),
|
|
|
|
|
_( "Conductor roughness" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"W", "W", _( "Line width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_S_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"S", "S", _( "Gap width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Line length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_E_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Zeven", _( "Zeven" ),
|
|
|
|
|
_( "Even mode impedance (lines driven by common voltages)" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_O_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Zodd", _( "Zodd" ),
|
|
|
|
|
_( "Odd mode impedance (lines driven by opposite (differential) voltages)" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Ang_l", "Ang_l",
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Electrical length" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case STRIPLINE_TYPE: // stripline
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new STRIPLINE();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::stripline );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Skin depth:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, H_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"H", "H", _( "Height of substrate" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, STRIPLINE_A_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"a", "a", _( "Distance between strip and top metal" ), 0.2,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
true ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, T_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"T", "T", _( "Strip thickness" ), 0.035, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1, false ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"W", "W", _( "Line width" ), 0.2, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Line length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case TWISTEDPAIR_TYPE: // twisted pair
|
2021-02-11 23:43:08 +00:00
|
|
|
|
m_TLine = new TWISTEDPAIR();
|
2021-05-04 02:27:54 +00:00
|
|
|
|
m_Icon = KiBitmapNew( BITMAPS::twistedpair );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
m_HasPrmSelection = true;
|
|
|
|
|
|
2021-02-15 15:59:19 +00:00
|
|
|
|
m_Messages.Add( wxString::Format( _( "Effective %s:" ), wxT( "εr" ) ) );
|
2021-02-13 16:12:52 +00:00
|
|
|
|
m_Messages.Add( _( "Conductor losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Dielectric losses:" ) );
|
|
|
|
|
m_Messages.Add( _( "Skin depth:" ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, TWISTEDPAIR_TWIST_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Twists", _( "Twists" ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Number of twists per length" ), 0.0, false ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, MURC_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"mu Rel C", wxString::Format( wxT( "μ(%s)" ), _( "conductor" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permeability (mu) of conductor" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_SUBS, TWISTEDPAIR_EPSILONR_ENV_PRM,
|
2021-02-15 15:59:19 +00:00
|
|
|
|
"ErEnv", wxString::Format( wxT( "εr(%s)" ), _( "environment" ) ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Relative permittivity of environment" ), 1,
|
2013-05-26 04:36:44 +00:00
|
|
|
|
false ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_DIAM_IN_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Din", _( "Din" ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Inner diameter (conductor)" ), 1.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_DIAM_OUT_PRM,
|
2020-08-24 11:35:38 +00:00
|
|
|
|
"Dout", _( "Dout" ),
|
2021-02-13 16:12:52 +00:00
|
|
|
|
_( "Outer diameter (insulator)" ), 8.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"L", "L", _( "Cable length" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, Z0_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Z0", "Z0", _( "Characteristic impedance" ), 50.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, DUMMY_PRM ) );
|
|
|
|
|
AddPrm( new TRANSLINE_PRM( PRM_TYPE_ELEC, ANG_L_PRM,
|
2021-02-13 16:12:52 +00:00
|
|
|
|
"Ang_l", "Ang_l", _( "Electrical length" ), 0.0, true ) );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
|
2014-03-22 08:28:39 +00:00
|
|
|
|
case END_OF_LIST_TYPE: // Not really used
|
2013-05-26 04:36:44 +00:00
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TRANSLINE_IDENT::~TRANSLINE_IDENT()
|
|
|
|
|
{
|
|
|
|
|
delete m_TLine;
|
|
|
|
|
delete m_Icon;
|
2020-01-13 01:44:19 +00:00
|
|
|
|
|
|
|
|
|
for( auto& ii : m_prms_List )
|
|
|
|
|
delete ii;
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
|
|
|
|
m_prms_List.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2020-01-13 01:44:19 +00:00
|
|
|
|
void TRANSLINE_IDENT::ReadConfig()
|
2013-05-26 04:36:44 +00:00
|
|
|
|
{
|
2020-01-13 01:44:19 +00:00
|
|
|
|
auto cfg = static_cast<PCB_CALCULATOR_SETTINGS*>( Kiface().KifaceSettings() );
|
|
|
|
|
std::string name( m_TLine->m_Name );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
2020-01-13 01:44:19 +00:00
|
|
|
|
if( cfg->m_TransLine.param_values.count( name ) )
|
|
|
|
|
{
|
|
|
|
|
wxASSERT( cfg->m_TransLine.param_units.count( name ) );
|
|
|
|
|
|
2021-02-11 23:43:08 +00:00
|
|
|
|
for( auto& p : m_prms_List )
|
2020-01-13 01:44:19 +00:00
|
|
|
|
{
|
|
|
|
|
try
|
|
|
|
|
{
|
2021-02-11 23:43:08 +00:00
|
|
|
|
p->m_Value = cfg->m_TransLine.param_values.at( name ).at( p->m_KeyWord );
|
|
|
|
|
p->m_UnitSelection = cfg->m_TransLine.param_units.at( name ).at( p->m_KeyWord );
|
2020-01-13 01:44:19 +00:00
|
|
|
|
}
|
|
|
|
|
catch( ... )
|
|
|
|
|
{}
|
|
|
|
|
}
|
|
|
|
|
}
|
2013-05-26 04:36:44 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2020-01-13 01:44:19 +00:00
|
|
|
|
void TRANSLINE_IDENT::WriteConfig()
|
2013-05-26 04:36:44 +00:00
|
|
|
|
{
|
2020-01-13 01:44:19 +00:00
|
|
|
|
auto cfg = static_cast<PCB_CALCULATOR_SETTINGS*>( Kiface().KifaceSettings() );
|
|
|
|
|
std::string name( m_TLine->m_Name );
|
2013-05-26 04:36:44 +00:00
|
|
|
|
|
2020-01-13 01:44:19 +00:00
|
|
|
|
for( auto& param : m_prms_List )
|
|
|
|
|
{
|
2020-08-07 00:09:33 +00:00
|
|
|
|
if( !std::isfinite( param->m_Value ) )
|
|
|
|
|
param->m_Value = 0;
|
|
|
|
|
|
2020-08-24 11:35:38 +00:00
|
|
|
|
cfg->m_TransLine.param_values[ name ][ param->m_KeyWord ] = param->m_Value;
|
|
|
|
|
cfg->m_TransLine.param_units[ name ][ param->m_KeyWord ] = param->m_UnitSelection;
|
2020-01-13 01:44:19 +00:00
|
|
|
|
}
|
2013-05-26 04:36:44 +00:00
|
|
|
|
}
|
|
|
|
|
|