From c4428ae5236fc171b796e9f6b34223ded5b992a9 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sun, 7 Aug 2011 18:02:58 +0200 Subject: [PATCH 1/3] Pcb calculator: Add track width tool --- pcb_calculator/CMakeLists.txt | 1 + pcb_calculator/UnitSelector.h | 5 + .../dialogs/pcb_calculator_frame_base.cpp | 263 +- .../dialogs/pcb_calculator_frame_base.fbp | 4216 ++++++++++++++++- .../dialogs/pcb_calculator_frame_base.h | 54 +- pcb_calculator/docs/RF_attenuators.odt | Bin 53154 -> 53201 bytes pcb_calculator/docs/tracks_width_formulas.pdf | Bin 0 -> 77669 bytes pcb_calculator/pcb_calculator.h | 26 + pcb_calculator/pcb_calculator_frame.cpp | 4 + .../tracks_width_versus_current.cpp | 202 + pcb_calculator/transline_ident.cpp | 4 +- 11 files changed, 4731 insertions(+), 44 deletions(-) create mode 100644 pcb_calculator/docs/tracks_width_formulas.pdf create mode 100644 pcb_calculator/tracks_width_versus_current.cpp diff --git a/pcb_calculator/CMakeLists.txt b/pcb_calculator/CMakeLists.txt index b33a1b5c02..26fc53ac7b 100644 --- a/pcb_calculator/CMakeLists.txt +++ b/pcb_calculator/CMakeLists.txt @@ -14,6 +14,7 @@ set(PCB_CALCULATOR_SRCS params_read_write.cpp regulators_funct.cpp transline_ident.cpp + tracks_width_versus_current.cpp UnitSelector.cpp transline/transline.cpp transline/c_microstrip.cpp diff --git a/pcb_calculator/UnitSelector.h b/pcb_calculator/UnitSelector.h index c93c5c1e25..2a44f43ef3 100644 --- a/pcb_calculator/UnitSelector.h +++ b/pcb_calculator/UnitSelector.h @@ -27,6 +27,11 @@ public: * to normalized units (meter, herz, ohm, radian ) */ virtual double GetUnitScale() = 0; + + wxString GetUnitName() + { + return GetStringSelection(); + } }; class UNIT_SELECTOR_LEN: public UNIT_SELECTOR diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp index 1106195796..5c45d027af 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp @@ -136,6 +136,228 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelRegulators->Layout(); bSizerMainReg->Fit( m_panelRegulators ); m_Notebook->AddPage( m_panelRegulators, _("Regulators"), false ); + m_panelTrackWidth = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); + wxBoxSizer* bSizerTrackWidth; + bSizerTrackWidth = new wxBoxSizer( wxHORIZONTAL ); + + wxStaticBoxSizer* sbSizerTW_Prms; + sbSizerTW_Prms = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Parameters:") ), wxVERTICAL ); + + m_staticText89 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Valid max values:\n35A for external traces and 17.5A for internal.\n400mil widths.\nMaximum temperature rise of 100°C."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText89->Wrap( -1 ); + m_staticText89->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); + + sbSizerTW_Prms->Add( m_staticText89, 0, wxALL, 5 ); + + wxFlexGridSizer* fgSizer10; + fgSizer10 = new wxFlexGridSizer( 4, 3, 0, 0 ); + fgSizer10->AddGrowableCol( 1 ); + fgSizer10->SetFlexibleDirection( wxBOTH ); + fgSizer10->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextCurrent = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Current"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextCurrent->Wrap( -1 ); + fgSizer10->Add( m_staticTextCurrent, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_TrackCurrentValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer10->Add( m_TrackCurrentValue, 0, wxALL|wxEXPAND, 5 ); + + m_staticText62 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText62->Wrap( -1 ); + fgSizer10->Add( m_staticText62, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText63 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Temperature rise"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText63->Wrap( -1 ); + fgSizer10->Add( m_staticText63, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_TrackDeltaTValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer10->Add( m_TrackDeltaTValue, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticText64 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("°C"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText64->Wrap( -1 ); + fgSizer10->Add( m_staticText64, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText65 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Cu thickness"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText65->Wrap( -1 ); + fgSizer10->Add( m_staticText65, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_TrackThicknessValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer10->Add( m_TrackThicknessValue, 0, wxALL|wxEXPAND, 5 ); + + wxArrayString m_TW_CuThickness_choiceUnitChoices; + m_TW_CuThickness_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuThickness_choiceUnitChoices, 0 ); + m_TW_CuThickness_choiceUnit->SetSelection( 0 ); + fgSizer10->Add( m_TW_CuThickness_choiceUnit, 0, wxALL|wxEXPAND, 5 ); + + m_staticText66 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Conductor length"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText66->Wrap( -1 ); + fgSizer10->Add( m_staticText66, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_TrackLengthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizer10->Add( m_TrackLengthValue, 0, wxALL|wxEXPAND, 5 ); + + wxArrayString m_TW_CuLength_choiceUnitChoices; + m_TW_CuLength_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuLength_choiceUnitChoices, 0 ); + m_TW_CuLength_choiceUnit->SetSelection( 0 ); + fgSizer10->Add( m_TW_CuLength_choiceUnit, 0, wxALL|wxEXPAND, 5 ); + + sbSizerTW_Prms->Add( fgSizer10, 1, wxEXPAND, 5 ); + + m_htmlWinFormulas = new wxHtmlWindow( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO|wxSIMPLE_BORDER ); + sbSizerTW_Prms->Add( m_htmlWinFormulas, 1, wxALL|wxEXPAND, 5 ); + + bSizerTrackWidth->Add( sbSizerTW_Prms, 1, wxALL|wxEXPAND, 5 ); + + m_buttonTW = new wxButton( m_panelTrackWidth, wxID_ANY, _(">>>"), wxDefaultPosition, wxDefaultSize, wxBU_EXACTFIT ); + bSizerTrackWidth->Add( m_buttonTW, 0, wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM, 5 ); + + wxBoxSizer* bSizeRight; + bSizeRight = new wxBoxSizer( wxVERTICAL ); + + wxStaticBoxSizer* sbSizerTW_Result; + sbSizerTW_Result = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Tracks Caracteristics (External Layers):") ), wxVERTICAL ); + + wxFlexGridSizer* fgSizerTW_Results; + fgSizerTW_Results = new wxFlexGridSizer( 5, 3, 0, 0 ); + fgSizerTW_Results->AddGrowableCol( 1 ); + fgSizerTW_Results->SetFlexibleDirection( wxBOTH ); + fgSizerTW_Results->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextWidth = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Required trace width"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextWidth->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticTextWidth, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_ExtTrackWidthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results->Add( m_ExtTrackWidthValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxArrayString m_TW_ExtTrackWidth_choiceUnitChoices; + m_TW_ExtTrackWidth_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_ExtTrackWidth_choiceUnitChoices, 0 ); + m_TW_ExtTrackWidth_choiceUnit->SetSelection( 0 ); + fgSizerTW_Results->Add( m_TW_ExtTrackWidth_choiceUnit, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticTextArea = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Cross-section area"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextArea->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticTextArea, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_ExtTrackAreaValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results->Add( m_ExtTrackAreaValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_ExtTrackAreaUnitLabel = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("mm ^ 2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_ExtTrackAreaUnitLabel->Wrap( -1 ); + fgSizerTW_Results->Add( m_ExtTrackAreaUnitLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText651 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Resistance"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText651->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText651, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_ExtTrackResistValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results->Add( m_ExtTrackResistValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticText84 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText84->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText84, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText661 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Voltage drop"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText661->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText661, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_ExtTrackVDropValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results->Add( m_ExtTrackVDropValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticText83 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText83->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText83, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText79 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Loss"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText79->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText79, 0, wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_ExtTrackLossValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results->Add( m_ExtTrackLossValue, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticText791 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText791->Wrap( -1 ); + fgSizerTW_Results->Add( m_staticText791, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + sbSizerTW_Result->Add( fgSizerTW_Results, 0, wxEXPAND, 5 ); + + bSizeRight->Add( sbSizerTW_Result, 1, wxEXPAND|wxALL, 5 ); + + wxStaticBoxSizer* sbSizerTW_Result1; + sbSizerTW_Result1 = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Tracks Caracteristics (Internal Layers):") ), wxVERTICAL ); + + wxFlexGridSizer* fgSizerTW_Results1; + fgSizerTW_Results1 = new wxFlexGridSizer( 6, 3, 0, 0 ); + fgSizerTW_Results1->AddGrowableCol( 1 ); + fgSizerTW_Results1->SetFlexibleDirection( wxBOTH ); + fgSizerTW_Results1->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + + m_staticTextWidth11 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Required trace width"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextWidth11->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticTextWidth11, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5 ); + + m_IntTrackWidthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results1->Add( m_IntTrackWidthValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + wxArrayString m_TW_IntTrackWidth_choiceUnitChoices; + m_TW_IntTrackWidth_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_IntTrackWidth_choiceUnitChoices, 0 ); + m_TW_IntTrackWidth_choiceUnit->SetSelection( 0 ); + fgSizerTW_Results1->Add( m_TW_IntTrackWidth_choiceUnit, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticTextArea1 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Cross-section area"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticTextArea1->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticTextArea1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + + m_IntTrackAreaValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results1->Add( m_IntTrackAreaValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_IntTrackAreaUnitLabel = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("mm ^ 2"), wxDefaultPosition, wxDefaultSize, 0 ); + m_IntTrackAreaUnitLabel->Wrap( -1 ); + fgSizerTW_Results1->Add( m_IntTrackAreaUnitLabel, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText6511 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Resistance"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText6511->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText6511, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_IntTrackResistValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results1->Add( m_IntTrackResistValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticText841 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Ohm"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText841->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText841, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText6611 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Voltage drop"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText6611->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText6611, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); + + m_IntTrackVDropValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results1->Add( m_IntTrackVDropValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + + m_staticText831 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Volt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText831->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText831, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_staticText792 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Loss"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText792->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText792, 0, wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL, 5 ); + + m_IntTrackLossValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + fgSizerTW_Results1->Add( m_IntTrackLossValue, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + + m_staticText7911 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Watt"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText7911->Wrap( -1 ); + fgSizerTW_Results1->Add( m_staticText7911, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + + sbSizerTW_Result1->Add( fgSizerTW_Results1, 0, wxEXPAND, 5 ); + + bSizeRight->Add( sbSizerTW_Result1, 1, wxEXPAND|wxALL, 5 ); + + bSizerTrackWidth->Add( bSizeRight, 1, wxEXPAND, 5 ); + + m_panelTrackWidth->SetSizer( bSizerTrackWidth ); + m_panelTrackWidth->Layout(); + bSizerTrackWidth->Fit( m_panelTrackWidth ); + m_Notebook->AddPage( m_panelTrackWidth, _("Track Width"), true ); m_panelTransline = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizeTransline; bSizeTransline = new wxBoxSizer( wxHORIZONTAL ); @@ -444,66 +666,69 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxStaticBoxSizer* sbMessagesSizer; sbMessagesSizer = new wxStaticBoxSizer( new wxStaticBox( m_panelTransline, wxID_ANY, _("Results:") ), wxVERTICAL ); - wxGridSizer* gSizerResults; - gSizerResults = new wxGridSizer( 7, 2, 0, 0 ); + wxFlexGridSizer* fgSizerTranslResults; + fgSizerTranslResults = new wxFlexGridSizer( 7, 2, 0, 0 ); + fgSizerTranslResults->AddGrowableCol( 1 ); + fgSizerTranslResults->SetFlexibleDirection( wxBOTH ); + fgSizerTranslResults->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); m_left_message1 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message1->Wrap( -1 ); - gSizerResults->Add( m_left_message1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_Message1 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message1->Wrap( -1 ); - gSizerResults->Add( m_Message1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizerTranslResults->Add( m_Message1, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_left_message2 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message2->Wrap( -1 ); - gSizerResults->Add( m_left_message2, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message2, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_Message2 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message2->Wrap( -1 ); - gSizerResults->Add( m_Message2, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizerTranslResults->Add( m_Message2, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_left_message3 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message3->Wrap( -1 ); - gSizerResults->Add( m_left_message3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_Message3 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message3->Wrap( -1 ); - gSizerResults->Add( m_Message3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizerTranslResults->Add( m_Message3, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_left_message4 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message4->Wrap( -1 ); - gSizerResults->Add( m_left_message4, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message4, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_Message4 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message4->Wrap( -1 ); - gSizerResults->Add( m_Message4, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizerTranslResults->Add( m_Message4, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); m_left_message5 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message5->Wrap( -1 ); - gSizerResults->Add( m_left_message5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxALIGN_RIGHT, 5 ); m_Message5 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message5->Wrap( -1 ); - gSizerResults->Add( m_Message5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + fgSizerTranslResults->Add( m_Message5, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); m_left_message6 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message6->Wrap( -1 ); - gSizerResults->Add( m_left_message6, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message6, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_Message6 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message6->Wrap( -1 ); - gSizerResults->Add( m_Message6, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); + fgSizerTranslResults->Add( m_Message6, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND, 5 ); m_left_message7 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_left_message7->Wrap( -1 ); - gSizerResults->Add( m_left_message7, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); + fgSizerTranslResults->Add( m_left_message7, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_Message7 = new wxStaticText( m_panelTransline, wxID_ANY, _("dummy"), wxDefaultPosition, wxDefaultSize, 0 ); m_Message7->Wrap( -1 ); - gSizerResults->Add( m_Message7, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); + fgSizerTranslResults->Add( m_Message7, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); - sbMessagesSizer->Add( gSizerResults, 1, wxEXPAND, 5 ); + sbMessagesSizer->Add( fgSizerTranslResults, 1, wxEXPAND, 5 ); bRightSizer->Add( sbMessagesSizer, 1, wxEXPAND|wxTOP, 5 ); @@ -722,7 +947,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow m_panelColorCode->SetSizer( bSizerPanelColorCode ); m_panelColorCode->Layout(); bSizerPanelColorCode->Fit( m_panelColorCode ); - m_Notebook->AddPage( m_panelColorCode, _("Color Code"), true ); + m_Notebook->AddPage( m_panelColorCode, _("Color Code"), false ); m_panelBoardClass = new wxPanel( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerBoardClass; bSizerBoardClass = new wxBoxSizer( wxHORIZONTAL ); @@ -798,6 +1023,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow // Connect Events m_buttonCalculate->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulatorCalcButtonClick ), NULL, this ); + m_buttonTW->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateButt ), NULL, this ); m_TranslineSelection->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this ); m_panelDisplayshape->Connect( wxEVT_PAINT, wxPaintEventHandler( PCB_CALCULATOR_FRAME_BASE::OnPaintTranslinePanel ), NULL, this ); m_button_EpsilonR->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineEpsilonR_Button ), NULL, this ); @@ -817,6 +1043,7 @@ PCB_CALCULATOR_FRAME_BASE::~PCB_CALCULATOR_FRAME_BASE() { // Disconnect Events m_buttonCalculate->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnRegulatorCalcButtonClick ), NULL, this ); + m_buttonTW->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTWCalculateButt ), NULL, this ); m_TranslineSelection->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineSelection ), NULL, this ); m_panelDisplayshape->Disconnect( wxEVT_PAINT, wxPaintEventHandler( PCB_CALCULATOR_FRAME_BASE::OnPaintTranslinePanel ), NULL, this ); m_button_EpsilonR->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( PCB_CALCULATOR_FRAME_BASE::OnTranslineEpsilonR_Button ), NULL, this ); diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp index bf10da0376..1b0b5fa43b 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp @@ -8,7 +8,7 @@ source_name 0 res - UTF-8 + ANSI connect pcb_calculator_frame_base 1000 @@ -69,7 +69,7 @@ Resizable 1 - 752,465 + 670,465 wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER Pcb Calculator @@ -371,7 +371,7 @@ - + Regulators 0 @@ -2202,6 +2202,4176 @@ + + + Track Width + 1 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_panelTrackWidth + 1 + + + protected + 1 + + + Resizable + + 1 + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxTAB_TRAVERSAL + + + + + + + + + + + + + + + + + + + + + + + + + + bSizerTrackWidth + wxHORIZONTAL + none + + 5 + wxALL|wxEXPAND + 1 + + wxID_ANY + Parameters: + + sbSizerTW_Prms + wxVERTICAL + none + + + 5 + wxALL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + ,90,92,-1,70,0 + 0 + 0 + wxID_ANY + Valid max values: 35A for external traces and 17.5A for internal. 400mil widths. Maximum temperature rise of 100°C. + + + 0 + + + 0 + + 1 + m_staticText89 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + 3 + wxBOTH + 1 + + 0 + + fgSizer10 + wxFLEX_GROWMODE_SPECIFIED + none + 4 + 0 + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Current + + + 0 + + + 0 + + 1 + m_staticTextCurrent + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_TrackCurrentValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + A + + + 0 + + + 0 + + 1 + m_staticText62 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Temperature rise + + + 0 + + + 0 + + 1 + m_staticText63 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_TrackDeltaTValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + °C + + + 0 + + + 0 + + 1 + m_staticText64 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Cu thickness + + + 0 + + + 0 + + 1 + m_staticText65 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_TrackThicknessValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_TW_CuThickness_choiceUnit + 1 + + + protected + 1 + + + Resizable + + 0 + 1 + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Conductor length + + + 0 + + + 0 + + 1 + m_staticText66 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_TrackLengthValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_TW_CuLength_choiceUnit + 1 + + + protected + 1 + + + Resizable + + 0 + 1 + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxEXPAND + 1 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_htmlWinFormulas + 1 + + + protected + 1 + + + Resizable + + 1 + + wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + wxSIMPLE_BORDER + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + >>> + + + 0 + + + 0 + + 1 + m_buttonTW + 1 + + + protected + 1 + + + Resizable + + 1 + + wxBU_EXACTFIT + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + OnTWCalculateButt + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND + 1 + + + bSizeRight + wxVERTICAL + none + + 5 + wxEXPAND|wxALL + 1 + + wxID_ANY + Tracks Caracteristics (External Layers): + + sbSizerTW_Result + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + 1 + + 0 + + fgSizerTW_Results + wxFLEX_GROWMODE_SPECIFIED + none + 5 + 0 + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Required trace width + + + 0 + + + 0 + + 1 + m_staticTextWidth + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_ExtTrackWidthValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_TW_ExtTrackWidth_choiceUnit + 1 + + + protected + 1 + + + Resizable + + 0 + 1 + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Cross-section area + + + 0 + + + 0 + + 1 + m_staticTextArea + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_ExtTrackAreaValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + mm ^ 2 + + + 0 + + + 0 + + 1 + m_ExtTrackAreaUnitLabel + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Resistance + + + 0 + + + 0 + + 1 + m_staticText651 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_ExtTrackResistValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Ohm + + + 0 + + + 0 + + 1 + m_staticText84 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Voltage drop + + + 0 + + + 0 + + 1 + m_staticText661 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_ExtTrackVDropValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Volt + + + 0 + + + 0 + + 1 + m_staticText83 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Loss + + + 0 + + + 0 + + 1 + m_staticText79 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_ExtTrackLossValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Watt + + + 0 + + + 0 + + 1 + m_staticText791 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALL + 1 + + wxID_ANY + Tracks Caracteristics (Internal Layers): + + sbSizerTW_Result1 + wxVERTICAL + none + + + 5 + wxEXPAND + 0 + + 3 + wxBOTH + 1 + + 0 + + fgSizerTW_Results1 + wxFLEX_GROWMODE_SPECIFIED + none + 6 + 0 + + 5 + wxALL|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Required trace width + + + 0 + + + 0 + + 1 + m_staticTextWidth11 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_IntTrackWidthValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + + 0 + + 1 + m_TW_IntTrackWidth_choiceUnit + 1 + + + protected + 1 + + + Resizable + + 0 + 1 + + UNIT_SELECTOR_LEN; UnitSelector.h + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Cross-section area + + + 0 + + + 0 + + 1 + m_staticTextArea1 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_IntTrackAreaValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + mm ^ 2 + + + 0 + + + 0 + + 1 + m_IntTrackAreaUnitLabel + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Resistance + + + 0 + + + 0 + + 1 + m_staticText6511 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_IntTrackResistValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Ohm + + + 0 + + + 0 + + 1 + m_staticText841 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Voltage drop + + + 0 + + + 0 + + 1 + m_staticText6611 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_IntTrackVDropValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Volt + + + 0 + + + 0 + + 1 + m_staticText831 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_RIGHT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Loss + + + 0 + + + 0 + + 1 + m_staticText792 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + + + 0 + + 0 + + 0 + + 1 + m_IntTrackLossValue + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 5 + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + 0 + + 1 + 1 + 1 + 1 + + + + + 1 + 0 + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Watt + + + 0 + + + 0 + + 1 + m_staticText7911 + 1 + + + protected + 1 + + + Resizable + + 1 + + + + 0 + + + wxFILTER_NONE + wxDefaultValidator + + + + + -1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + TransLine @@ -7531,11 +11701,15 @@ 5 wxEXPAND 1 - + 2 + wxBOTH + 1 + 0 - gSizerResults + fgSizerTranslResults + wxFLEX_GROWMODE_SPECIFIED none 7 0 @@ -7628,7 +11802,7 @@ 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND 0 1 @@ -7976,7 +12150,7 @@ 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND 0 1 @@ -8150,7 +12324,7 @@ 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND 0 1 @@ -8324,7 +12498,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND 0 1 @@ -8498,7 +12672,7 @@ 5 - wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT + wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT|wxEXPAND 0 1 @@ -8672,7 +12846,7 @@ 5 - wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL + wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxEXPAND 0 1 @@ -8770,7 +12944,7 @@ RF Attenuators 0 - + 1 1 1 @@ -8848,7 +13022,7 @@ - + wxID_ANY label @@ -11068,7 +15242,7 @@ - + 5 wxEXPAND 1 @@ -11169,11 +15343,11 @@ - + Color Code - 1 - + 0 + 1 1 1 @@ -11251,7 +15425,7 @@ - + bSizerPanelColorCode wxHORIZONTAL @@ -11346,11 +15520,11 @@ - + 5 wxEXPAND|wxLEFT 1 - + 6 wxBOTH @@ -12399,7 +16573,7 @@ - + Board Classes 0 diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.h b/pcb_calculator/dialogs/pcb_calculator_frame_base.h index 46cdda46c7..197bdfe444 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.h +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.h @@ -33,10 +33,11 @@ class UNIT_SELECTOR_RESISTOR; #include #include #include +#include +#include +#include #include #include -#include -#include #include #include #include @@ -75,6 +76,52 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame wxStaticText* m_unitsVout; wxButton* m_buttonCalculate; wxStaticText* m_RegulMessage; + wxPanel* m_panelTrackWidth; + wxStaticText* m_staticText89; + wxStaticText* m_staticTextCurrent; + wxTextCtrl* m_TrackCurrentValue; + wxStaticText* m_staticText62; + wxStaticText* m_staticText63; + wxTextCtrl* m_TrackDeltaTValue; + wxStaticText* m_staticText64; + wxStaticText* m_staticText65; + wxTextCtrl* m_TrackThicknessValue; + UNIT_SELECTOR_LEN* m_TW_CuThickness_choiceUnit; + wxStaticText* m_staticText66; + wxTextCtrl* m_TrackLengthValue; + UNIT_SELECTOR_LEN* m_TW_CuLength_choiceUnit; + wxHtmlWindow* m_htmlWinFormulas; + wxButton* m_buttonTW; + wxStaticText* m_staticTextWidth; + wxTextCtrl* m_ExtTrackWidthValue; + UNIT_SELECTOR_LEN* m_TW_ExtTrackWidth_choiceUnit; + wxStaticText* m_staticTextArea; + wxTextCtrl* m_ExtTrackAreaValue; + wxStaticText* m_ExtTrackAreaUnitLabel; + wxStaticText* m_staticText651; + wxTextCtrl* m_ExtTrackResistValue; + wxStaticText* m_staticText84; + wxStaticText* m_staticText661; + wxTextCtrl* m_ExtTrackVDropValue; + wxStaticText* m_staticText83; + wxStaticText* m_staticText79; + wxTextCtrl* m_ExtTrackLossValue; + wxStaticText* m_staticText791; + wxStaticText* m_staticTextWidth11; + wxTextCtrl* m_IntTrackWidthValue; + UNIT_SELECTOR_LEN* m_TW_IntTrackWidth_choiceUnit; + wxStaticText* m_staticTextArea1; + wxTextCtrl* m_IntTrackAreaValue; + wxStaticText* m_IntTrackAreaUnitLabel; + wxStaticText* m_staticText6511; + wxTextCtrl* m_IntTrackResistValue; + wxStaticText* m_staticText841; + wxStaticText* m_staticText6611; + wxTextCtrl* m_IntTrackVDropValue; + wxStaticText* m_staticText831; + wxStaticText* m_staticText792; + wxTextCtrl* m_IntTrackLossValue; + wxStaticText* m_staticText7911; wxPanel* m_panelTransline; wxRadioBox* m_TranslineSelection; wxPanel* m_panelDisplayshape; @@ -195,6 +242,7 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame // Virtual event handlers, overide them in your derived class virtual void OnRegulatorCalcButtonClick( wxCommandEvent& event ) { event.Skip(); } + virtual void OnTWCalculateButt( wxCommandEvent& event ) { event.Skip(); } virtual void OnTranslineSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnPaintTranslinePanel( wxPaintEvent& event ) { event.Skip(); } virtual void OnTranslineEpsilonR_Button( wxCommandEvent& event ) { event.Skip(); } @@ -212,7 +260,7 @@ class PCB_CALCULATOR_FRAME_BASE : public wxFrame public: - PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Pcb Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 752,465 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL ); + PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Pcb Calculator"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 670,465 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxFULL_REPAINT_ON_RESIZE|wxTAB_TRAVERSAL ); ~PCB_CALCULATOR_FRAME_BASE(); diff --git a/pcb_calculator/docs/RF_attenuators.odt b/pcb_calculator/docs/RF_attenuators.odt index e2ddfed01f5bf1a4f90e5deffe6cdccb5e48555b..2f15874c1092a9d2759f9e9af8b2e2420c94518f 100644 GIT binary patch delta 13908 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 delta 13940 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 m_currTransLineType ); + TW_Init(); + SetAttenuator( m_AttenuatorsSelection->GetSelection() ); ToleranceSelection( m_rbToleranceSelection->GetSelection() ); @@ -175,6 +177,8 @@ void PCB_CALCULATOR_FRAME::WriteConfig() m_Config->Write( KEYWORD_REGUL_VREF, m_RegulVrefValue->GetValue() ); m_Config->Write( KEYWORD_REGUL_VOUT, m_RegulVoutValue->GetValue() ); + TW_WriteConfig(); + for( unsigned ii = 0; ii < m_transline_list.size(); ii++ ) m_transline_list[ii]->WriteConfig( m_Config ); for( unsigned ii = 0; ii < m_attenuator_list.size(); ii++ ) diff --git a/pcb_calculator/tracks_width_versus_current.cpp b/pcb_calculator/tracks_width_versus_current.cpp new file mode 100644 index 0000000000..08ec4c5a53 --- /dev/null +++ b/pcb_calculator/tracks_width_versus_current.cpp @@ -0,0 +1,202 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 2011 jean-pierre.charras + * Copyright (C) 1992-2011 Kicad Developers, see change_log.txt for contributors. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * 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. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +/* see + * http://www.desmith.net/NMdS/Electronics/TraceWidth.html + * http://www.ultracad.com/articles/pcbtemp.pdf + * for more info + */ + +#include "wx/wx.h" +#include "wx/config.h" + +#include "pcb_calculator_frame_base.h" + +#include "pcb_calculator.h" +#include "UnitSelector.h" +#include "units_scales.h" + +extern double ReturnDoubleFromString( const wxString& TextValue ); + +// Key words to read/write some parameters in config: +#define KEYWORD_TW_CURRENT wxT( "TW_Track_Current" ) +#define KEYWORD_TW_DELTA_TC wxT( "TW_Delta_TC" ) +#define KEYWORD_TW_TRACK_COPPER_THICKNESS wxT( "TW_Track_CopperThickness" ) +#define KEYWORD_TW_TRACK_LEN wxT( "TW_Track_Len" ) +#define KEYWORD_TW_TRACK_COPPER_THICKNESS_UNIT wxT( "TW_Track_CopperThickness_Unit" ) +#define KEYWORD_TW_TRACK_LEN_UNIT wxT( "TW_Track_Len_Unit" ) +#define KEYWORD_TW_EXTTRACK_WIDTH_UNIT wxT( "TW_ExtTrack_Width_Unit" ) +#define KEYWORD_TW_INTTRACK_WIDTH_UNIT wxT( "TW_IntTrack_Width_Unit" ) + +void PCB_CALCULATOR_FRAME::TW_WriteConfig() +{ + // Save current parameters values in config: + m_Config->Write( KEYWORD_TW_EXTTRACK_WIDTH_UNIT, m_TW_ExtTrackWidth_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_INTTRACK_WIDTH_UNIT, m_TW_IntTrackWidth_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_TRACK_COPPER_THICKNESS_UNIT, + m_TW_CuThickness_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_TRACK_LEN_UNIT, m_TW_CuLength_choiceUnit->GetSelection() ); + m_Config->Write( KEYWORD_TW_CURRENT, m_TrackCurrentValue->GetValue() ); + m_Config->Write( KEYWORD_TW_DELTA_TC, m_TrackDeltaTValue->GetValue() ); + m_Config->Write( KEYWORD_TW_TRACK_COPPER_THICKNESS, m_TrackThicknessValue->GetValue() ); + m_Config->Write( KEYWORD_TW_TRACK_LEN, m_TrackLengthValue->GetValue() ); +} + + +void PCB_CALCULATOR_FRAME::OnTWCalculateButt( wxCommandEvent& event ) +{ + // Prepare parameters: + double current = ReturnDoubleFromString( m_TrackCurrentValue->GetValue() ); + double thickness = ReturnDoubleFromString( m_TrackThicknessValue->GetValue() ); + double deltaT_C = ReturnDoubleFromString( m_TrackDeltaTValue->GetValue() ); + double track_len = ReturnDoubleFromString( m_TrackLengthValue->GetValue() ); + double extTrackWidth; + double intTrackWidth; + + // Normalize units: + thickness *= m_TW_CuThickness_choiceUnit->GetUnitScale(); + track_len *= m_TW_CuLength_choiceUnit->GetUnitScale(); + extTrackWidth = TWCalculate( current, thickness, deltaT_C, false ); + intTrackWidth = TWCalculate( current, thickness, deltaT_C, true ); + + // Display values: + wxString msg; + msg.Printf( wxT( "%g" ), extTrackWidth / m_TW_ExtTrackWidth_choiceUnit->GetUnitScale() ); + m_ExtTrackWidthValue->SetValue( msg ); + msg.Printf( wxT( "%g" ), intTrackWidth / m_TW_IntTrackWidth_choiceUnit->GetUnitScale() ); + m_IntTrackWidthValue->SetValue( msg ); + + // Display areas: + double scale = m_TW_ExtTrackWidth_choiceUnit->GetUnitScale(); + double ext_area = thickness * extTrackWidth; + msg.Printf( wxT( "%g" ), ext_area / (scale * scale) ); + m_ExtTrackAreaValue->SetValue( msg ); + wxString strunit = m_TW_ExtTrackWidth_choiceUnit->GetUnitName(); + msg = strunit + wxT( " x " ) + strunit; + m_ExtTrackAreaUnitLabel->SetLabel( msg ); + scale = m_TW_IntTrackWidth_choiceUnit->GetUnitScale(); + double int_area = thickness * intTrackWidth; + msg.Printf( wxT( "%g" ), int_area / (scale * scale) ); + m_IntTrackAreaValue->SetValue( msg ); + strunit = m_TW_IntTrackWidth_choiceUnit->GetUnitName(); + msg = strunit + wxT( " x " ) + strunit; + m_IntTrackAreaUnitLabel->SetLabel( msg ); + + // Display resistance (assuming using copper ): + double rho = 1.72e-008; // In Ohms*meter + double ext_res = rho / ext_area * track_len; + msg.Printf( wxT( "%g" ), ext_res ); + m_ExtTrackResistValue->SetValue( msg ); + double int_res = rho / int_area * track_len; + msg.Printf( wxT( "%g" ), int_res ); + m_IntTrackResistValue->SetValue( msg ); + + // Display drop voltage + double ext_drop_volt = ext_res * current; + msg.Printf( wxT( "%g" ), ext_drop_volt ); + m_ExtTrackVDropValue->SetValue( msg ); + double int_drop_volt = int_res * current; + msg.Printf( wxT( "%g" ), int_drop_volt ); + m_IntTrackVDropValue->SetValue( msg ); + + // Display power loss + double loss = ext_drop_volt * current; + msg.Printf( wxT( "%g" ), loss ); + m_ExtTrackLossValue->SetValue( msg ); + loss = int_drop_volt * current; + msg.Printf( wxT( "%g" ), loss ); + m_IntTrackLossValue->SetValue( msg ); +} + + +/* calculate track width for external or internal layers + * + * Imax = 0.048 * dT^0.44 * A^0.725 for external layer + * Imax = 0.024 * dT^0.44 * A^0.725 for internal layer + * with A = area = aThickness * trackWidth ( in mils ) + * and dT = temperature rise in degree C + * Of course we want to know trackWidth + */ +double PCB_CALCULATOR_FRAME::TWCalculate( double aCurrent, double aThickness, double aDeltaT_C, + bool aUseInternalLayer ) +{ + double scale = 0.048; // We are using normalize units (sizes in meters) + + if( aUseInternalLayer ) + scale *= 0.024 / 0.048; + + // aThickness is given in normalize units (in meters) and we need mil + aThickness /= UNIT_MIL; + + /* formula is Imax = scale * dT^0.44 * A^0.725 + * or + * log(Imax) = log(scale) + 0.44*log(dT) + * +(0.725*(log(aThickness) + log(trackWidth)) + * log(trackWidth) * 0.725 = ln(Imax) - ln(scale) - 0.44*log(dT) - 0.725*log(aThickness) + */ + double dtmp = log( aCurrent ) - log( scale ) - 0.44 * log( aDeltaT_C ) - 0.725 * log( aThickness ); + dtmp /= 0.725; + double trackWidth = exp( dtmp ); + + trackWidth *= UNIT_MIL; // We are using normalize units (sizes in meters) and we have mil + return trackWidth; // in meters +} + + +void PCB_CALCULATOR_FRAME::TW_Init() +{ + int tmp; + wxString msg; + + // Read parameters values: + m_Config->Read( KEYWORD_TW_EXTTRACK_WIDTH_UNIT, &tmp, 0 ); + m_TW_ExtTrackWidth_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_INTTRACK_WIDTH_UNIT, &tmp, 0 ); + m_TW_IntTrackWidth_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_TRACK_COPPER_THICKNESS_UNIT, &tmp, 0 ); + m_TW_CuThickness_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_TRACK_LEN_UNIT, &tmp, 0 ); + m_TW_CuLength_choiceUnit->SetSelection( tmp ); + m_Config->Read( KEYWORD_TW_CURRENT, &msg, wxT( "1.0" ) ); + m_TrackCurrentValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_DELTA_TC, &msg, wxT( "10.0" ) ); + m_TrackDeltaTValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_TRACK_COPPER_THICKNESS, &msg, wxT( "0.035" ) ); + m_TrackThicknessValue->SetValue( msg ); + m_Config->Read( KEYWORD_TW_TRACK_LEN, &msg, wxT( "20" ) ); + m_TrackLengthValue->SetValue( msg ); + + // Init formulas text + m_htmlWinFormulas->AppendToPage( _( "
The formulas (from IPC 2221) are:
" ) ); + m_htmlWinFormulas->AppendToPage( _( + "
Internal traces : I = 0.024 * dT^0.44 * A^0.725
" ) ); + m_htmlWinFormulas->AppendToPage( _( + "
External traces: I = 0.048 * dT^0.44 * A^0.725
" ) ); + + m_htmlWinFormulas->AppendToPage( _( "
where:
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
I = maximum current in Amps
" ) ); + m_htmlWinFormulas->AppendToPage( _( + "
dT = temperature rise above ambient in °C
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
A = cross-sectional area in mils²
" ) ); +} diff --git a/pcb_calculator/transline_ident.cpp b/pcb_calculator/transline_ident.cpp index 637b0c4f9b..f2904b23fc 100644 --- a/pcb_calculator/transline_ident.cpp +++ b/pcb_calculator/transline_ident.cpp @@ -250,9 +250,9 @@ TRANSLINE_IDENT::TRANSLINE_IDENT( enum transline_type_id aType ) _( "MurC" ), _( "Relative Permeability of Conductor" ), 1, false ) ); - AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_S_PRM, - _( "a" ), _( "Width of Waveguide" ), 10.0, true ) ); AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_WIDTH_PRM, + _( "a" ), _( "Width of Waveguide" ), 10.0, true ) ); + AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_S_PRM, _( "b" ), _( "Height of Waveguide" ), 5.0, true ) ); AddPrm( new TRANSLINE_PRM( PRM_TYPE_PHYS, PHYS_LEN_PRM, _( "L" ), _( "Waveguide Length" ), 50.0, true ) ); From c95a15001c7303c38eac513a39b452310b1724a2 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sun, 7 Aug 2011 19:49:05 +0200 Subject: [PATCH 2/3] Pcb Calculator: fix wxWidgets 2.8 compatibility --- .../dialogs/pcb_calculator_frame_base.cpp | 22 +++++++++---------- .../dialogs/pcb_calculator_frame_base.fbp | 22 +++++++++---------- .../tracks_width_versus_current.cpp | 14 +++++------- 3 files changed, 28 insertions(+), 30 deletions(-) diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp index 5c45d027af..4a30d3e1a8 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.cpp @@ -143,11 +143,11 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow wxStaticBoxSizer* sbSizerTW_Prms; sbSizerTW_Prms = new wxStaticBoxSizer( new wxStaticBox( m_panelTrackWidth, wxID_ANY, _("Parameters:") ), wxVERTICAL ); - m_staticText89 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Valid max values:\n35A for external traces and 17.5A for internal.\n400mil widths.\nMaximum temperature rise of 100°C."), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText89 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Valid max values:\n35A for external traces and 17.5A for internal.\n400mil widths.\nMaximum temperature rise of 100°C."), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText89->Wrap( -1 ); m_staticText89->SetFont( wxFont( wxNORMAL_FONT->GetPointSize(), 70, 90, 92, false, wxEmptyString ) ); - sbSizerTW_Prms->Add( m_staticText89, 0, wxALL, 5 ); + sbSizerTW_Prms->Add( m_staticText89, 0, wxBOTTOM|wxRIGHT|wxLEFT, 5 ); wxFlexGridSizer* fgSizer10; fgSizer10 = new wxFlexGridSizer( 4, 3, 0, 0 ); @@ -160,7 +160,7 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizer10->Add( m_staticTextCurrent, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_TrackCurrentValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer10->Add( m_TrackCurrentValue, 0, wxALL|wxEXPAND, 5 ); + fgSizer10->Add( m_TrackCurrentValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); m_staticText62 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("A"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText62->Wrap( -1 ); @@ -171,9 +171,9 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizer10->Add( m_staticText63, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT, 5 ); m_TrackDeltaTValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer10->Add( m_TrackDeltaTValue, 0, wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND, 5 ); + fgSizer10->Add( m_TrackDeltaTValue, 0, wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - m_staticText64 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("°C"), wxDefaultPosition, wxDefaultSize, 0 ); + m_staticText64 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("deg C"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText64->Wrap( -1 ); fgSizer10->Add( m_staticText64, 0, wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); @@ -182,29 +182,29 @@ PCB_CALCULATOR_FRAME_BASE::PCB_CALCULATOR_FRAME_BASE( wxWindow* parent, wxWindow fgSizer10->Add( m_staticText65, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); m_TrackThicknessValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer10->Add( m_TrackThicknessValue, 0, wxALL|wxEXPAND, 5 ); + fgSizer10->Add( m_TrackThicknessValue, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL, 5 ); wxArrayString m_TW_CuThickness_choiceUnitChoices; m_TW_CuThickness_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuThickness_choiceUnitChoices, 0 ); m_TW_CuThickness_choiceUnit->SetSelection( 0 ); - fgSizer10->Add( m_TW_CuThickness_choiceUnit, 0, wxALL|wxEXPAND, 5 ); + fgSizer10->Add( m_TW_CuThickness_choiceUnit, 0, wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT, 5 ); m_staticText66 = new wxStaticText( m_panelTrackWidth, wxID_ANY, _("Conductor length"), wxDefaultPosition, wxDefaultSize, 0 ); m_staticText66->Wrap( -1 ); fgSizer10->Add( m_staticText66, 0, wxALIGN_CENTER_VERTICAL|wxALIGN_RIGHT|wxRIGHT|wxLEFT, 5 ); m_TrackLengthValue = new wxTextCtrl( m_panelTrackWidth, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); - fgSizer10->Add( m_TrackLengthValue, 0, wxALL|wxEXPAND, 5 ); + fgSizer10->Add( m_TrackLengthValue, 0, wxEXPAND|wxALL, 5 ); wxArrayString m_TW_CuLength_choiceUnitChoices; m_TW_CuLength_choiceUnit = new UNIT_SELECTOR_LEN( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_TW_CuLength_choiceUnitChoices, 0 ); m_TW_CuLength_choiceUnit->SetSelection( 0 ); - fgSizer10->Add( m_TW_CuLength_choiceUnit, 0, wxALL|wxEXPAND, 5 ); + fgSizer10->Add( m_TW_CuLength_choiceUnit, 0, wxEXPAND|wxALL, 5 ); - sbSizerTW_Prms->Add( fgSizer10, 1, wxEXPAND, 5 ); + sbSizerTW_Prms->Add( fgSizer10, 0, wxEXPAND, 5 ); m_htmlWinFormulas = new wxHtmlWindow( m_panelTrackWidth, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHW_NO_SELECTION|wxHW_SCROLLBAR_AUTO|wxSIMPLE_BORDER ); - sbSizerTW_Prms->Add( m_htmlWinFormulas, 1, wxALL|wxEXPAND, 5 ); + sbSizerTW_Prms->Add( m_htmlWinFormulas, 1, wxEXPAND|wxTOP, 5 ); bSizerTrackWidth->Add( sbSizerTW_Prms, 1, wxALL|wxEXPAND, 5 ); diff --git a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp index 1b0b5fa43b..c8385b6aa4 100644 --- a/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp +++ b/pcb_calculator/dialogs/pcb_calculator_frame_base.fbp @@ -8,7 +8,7 @@ source_name 0 res - ANSI + UTF-8 connect pcb_calculator_frame_base 1000 @@ -2303,7 +2303,7 @@ 5 - wxALL + wxBOTTOM|wxRIGHT|wxLEFT 0 1 @@ -2391,7 +2391,7 @@ 5 wxEXPAND - 1 + 0 3 wxBOTH @@ -2493,7 +2493,7 @@ 5 - wxALL|wxEXPAND + wxEXPAND|wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL 0 1 @@ -2758,7 +2758,7 @@ 5 - wxALL|wxALIGN_CENTER_VERTICAL|wxEXPAND + wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT 0 1 @@ -2876,7 +2876,7 @@ 0 0 wxID_ANY - °C + deg C 0 @@ -3023,7 +3023,7 @@ 5 - wxALL|wxEXPAND + wxEXPAND|wxTOP|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL 0 1 @@ -3114,7 +3114,7 @@ 5 - wxALL|wxEXPAND + wxEXPAND|wxALIGN_CENTER_VERTICAL|wxTOP|wxRIGHT|wxLEFT 0 1 @@ -3288,7 +3288,7 @@ 5 - wxALL|wxEXPAND + wxEXPAND|wxALL 0 1 @@ -3379,7 +3379,7 @@ 5 - wxALL|wxEXPAND + wxEXPAND|wxALL 0 1 @@ -3468,7 +3468,7 @@ 5 - wxALL|wxEXPAND + wxEXPAND|wxTOP 1 1 diff --git a/pcb_calculator/tracks_width_versus_current.cpp b/pcb_calculator/tracks_width_versus_current.cpp index 08ec4c5a53..d4893eda1e 100644 --- a/pcb_calculator/tracks_width_versus_current.cpp +++ b/pcb_calculator/tracks_width_versus_current.cpp @@ -188,15 +188,13 @@ void PCB_CALCULATOR_FRAME::TW_Init() m_TrackLengthValue->SetValue( msg ); // Init formulas text - m_htmlWinFormulas->AppendToPage( _( "
The formulas (from IPC 2221) are:
" ) ); - m_htmlWinFormulas->AppendToPage( _( - "
Internal traces : I = 0.024 * dT^0.44 * A^0.725
" ) ); - m_htmlWinFormulas->AppendToPage( _( - "
External traces: I = 0.048 * dT^0.44 * A^0.725
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
The formula (from IPC 2221) is:


" ) ); + m_htmlWinFormulas->AppendToPage( _( "
I = K * dT0.44 * (W*H)0.725
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
Internal traces : K = 0.024
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
External traces: K = 0.048
" ) ); m_htmlWinFormulas->AppendToPage( _( "
where:
" ) ); m_htmlWinFormulas->AppendToPage( _( "
I = maximum current in Amps
" ) ); - m_htmlWinFormulas->AppendToPage( _( - "
dT = temperature rise above ambient in °C
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
A = cross-sectional area in mils²
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
dT = temperature rise above ambient in \0B0 C
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
W,H = Width and Thickness in mils
" ) ); } From 4b0a9669b9f585a2142b3003c9c21c8410bb1223 Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sun, 7 Aug 2011 21:03:32 +0200 Subject: [PATCH 3/3] Pcbcalculator: minor fixes. --- pcb_calculator/CMakeLists.txt | 14 +++++++------- pcb_calculator/tracks_width_versus_current.cpp | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pcb_calculator/CMakeLists.txt b/pcb_calculator/CMakeLists.txt index 26fc53ac7b..bab8fc3e9d 100644 --- a/pcb_calculator/CMakeLists.txt +++ b/pcb_calculator/CMakeLists.txt @@ -8,25 +8,25 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR} set(PCB_CALCULATOR_SRCS attenuators.cpp board_classes_values.cpp - pcb_calculator.cpp - pcb_calculator_frame.cpp colorcode.cpp params_read_write.cpp + pcb_calculator.cpp + pcb_calculator_frame.cpp regulators_funct.cpp transline_ident.cpp tracks_width_versus_current.cpp + transline_dlg_funct.cpp UnitSelector.cpp - transline/transline.cpp + attenuators/attenuator_classes.cpp + dialogs/pcb_calculator_frame_base.cpp transline/c_microstrip.cpp - transline/microstrip.cpp transline/coplanar.cpp transline/coax.cpp + transline/microstrip.cpp transline/rectwaveguide.cpp transline/stripline.cpp + transline/transline.cpp transline/twistedpair.cpp - transline_dlg_funct.cpp - dialogs/pcb_calculator_frame_base.cpp - attenuators/attenuator_classes.cpp ) if(WIN32) diff --git a/pcb_calculator/tracks_width_versus_current.cpp b/pcb_calculator/tracks_width_versus_current.cpp index d4893eda1e..400928d66a 100644 --- a/pcb_calculator/tracks_width_versus_current.cpp +++ b/pcb_calculator/tracks_width_versus_current.cpp @@ -188,13 +188,13 @@ void PCB_CALCULATOR_FRAME::TW_Init() m_TrackLengthValue->SetValue( msg ); // Init formulas text - m_htmlWinFormulas->AppendToPage( _( "
The formula (from IPC 2221) is:


" ) ); + m_htmlWinFormulas->AppendToPage( _( "
The formula (from IPC 2221) is:
" ) ); m_htmlWinFormulas->AppendToPage( _( "
I = K * dT0.44 * (W*H)0.725
" ) ); m_htmlWinFormulas->AppendToPage( _( "
Internal traces : K = 0.024
" ) ); m_htmlWinFormulas->AppendToPage( _( "
External traces: K = 0.048
" ) ); m_htmlWinFormulas->AppendToPage( _( "
where:
" ) ); m_htmlWinFormulas->AppendToPage( _( "
I = maximum current in Amps
" ) ); - m_htmlWinFormulas->AppendToPage( _( "
dT = temperature rise above ambient in \0B0 C
" ) ); + m_htmlWinFormulas->AppendToPage( _( "
dT = temperature rise above ambient in deg C
" ) ); m_htmlWinFormulas->AppendToPage( _( "
W,H = Width and Thickness in mils
" ) ); }