From 1cf569b0bed9d959b50aa05fe7dafa8ec5567bde Mon Sep 17 00:00:00 2001 From: Jeff Young <jeff@rokeby.ie> Date: Sat, 28 Dec 2024 22:38:18 +0000 Subject: [PATCH] Firebomb teardrop curve points. See 17b0dabec364d24bab4333a9ad15cfefd852728e for the start. Fixes https://gitlab.com/kicad/code/kicad/-/issues/19403 --- common/pcb.keywords | 1 + pcbnew/board_connected_item.h | 4 +- pcbnew/board_design_settings.cpp | 12 +- .../dialogs/dialog_global_edit_teardrops.cpp | 12 +- .../dialog_global_edit_teardrops_base.cpp | 18 +- .../dialog_global_edit_teardrops_base.fbp | 177 +--- .../dialog_global_edit_teardrops_base.h | 7 +- pcbnew/dialogs/dialog_pad_properties.cpp | 16 +- pcbnew/dialogs/dialog_pad_properties.h | 1 - pcbnew/dialogs/dialog_pad_properties_base.cpp | 18 +- pcbnew/dialogs/dialog_pad_properties_base.fbp | 141 +-- pcbnew/dialogs/dialog_pad_properties_base.h | 3 - .../dialogs/dialog_track_via_properties.cpp | 9 +- pcbnew/dialogs/panel_setup_teardrops.cpp | 24 +- pcbnew/dialogs/panel_setup_teardrops_base.cpp | 65 +- pcbnew/dialogs/panel_setup_teardrops_base.fbp | 819 +++++------------- pcbnew/dialogs/panel_setup_teardrops_base.h | 15 +- .../pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp | 11 +- .../pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h | 3 +- .../kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp | 7 +- pcbnew/teardrop/teardrop_parameters.h | 16 +- pcbnew/teardrop/teardrop_utils.cpp | 2 +- 22 files changed, 293 insertions(+), 1088 deletions(-) diff --git a/common/pcb.keywords b/common/pcb.keywords index 8666c1d07e..f7b4bfdb3b 100644 --- a/common/pcb.keywords +++ b/common/pcb.keywords @@ -83,6 +83,7 @@ copperpour copper_finish crossbar curve_points +curved_edges custom outline convexhull diff --git a/pcbnew/board_connected_item.h b/pcbnew/board_connected_item.h index 59bf1a1b6d..5a45ff0fc0 100644 --- a/pcbnew/board_connected_item.h +++ b/pcbnew/board_connected_item.h @@ -211,8 +211,8 @@ public: void SetTeardropMaxWidth( int aMaxWidth ) { m_teardropParams.m_TdMaxWidth = aMaxWidth; } int GetTeardropMaxWidth() const { return m_teardropParams.m_TdMaxWidth; } - void SetTeardropCurved( bool aCurve ) { m_teardropParams.m_CurveSegCount = aCurve ? 1 : 0; } - bool GetTeardropCurved() const { return m_teardropParams.m_CurveSegCount > 0; } + void SetTeardropCurved( bool aCurve ) { m_teardropParams.m_CurvedEdges = aCurve; } + bool GetTeardropCurved() const { return m_teardropParams.m_CurvedEdges; } void SetTeardropPreferZoneConnections( bool aPrefer ) { m_teardropParams.m_TdOnPadsInZones = !aPrefer; } bool GetTeardropPreferZoneConnections() const { return !m_teardropParams.m_TdOnPadsInZones; } diff --git a/pcbnew/board_design_settings.cpp b/pcbnew/board_design_settings.cpp index 92a84df2ca..089f0d6bb1 100644 --- a/pcbnew/board_design_settings.cpp +++ b/pcbnew/board_design_settings.cpp @@ -540,7 +540,10 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std: td_prm->m_AllowUseTwoTracks = entry["td_allow_use_two_tracks"].get<bool>(); if( entry.contains( "td_curve_segcount" ) ) - td_prm->m_CurveSegCount = entry["td_curve_segcount"].get<int>(); + { + if( entry["td_curve_segcount"].get<int>() > 0 ) + td_prm->m_CurvedEdges = true; + } if( entry.contains( "td_on_pad_in_zone" ) ) td_prm->m_TdOnPadsInZones = entry["td_on_pad_in_zone"].get<bool>(); @@ -565,7 +568,7 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std: entry["td_maxheight"] = pcbIUScale.IUTomm( td_prm->m_TdMaxWidth ); entry["td_length_ratio"] = td_prm->m_BestLengthRatio; entry["td_height_ratio"] = td_prm->m_BestWidthRatio; - entry["td_curve_segcount"] = td_prm->m_CurveSegCount; + entry["td_curve_segcount"] = td_prm->m_CurvedEdges ? 1 : 0; entry["td_width_to_size_filter_ratio"] = td_prm->m_WidthtoSizeFilterRatio; entry["td_allow_use_two_tracks"] = td_prm->m_AllowUseTwoTracks; entry["td_on_pad_in_zone"] = td_prm->m_TdOnPadsInZones; @@ -607,7 +610,10 @@ BOARD_DESIGN_SETTINGS::BOARD_DESIGN_SETTINGS( JSON_SETTINGS* aParent, const std: td_prm->m_BestWidthRatio = entry["td_height_ratio"].get<double>(); if( entry.contains( "td_curve_segcount" ) ) - td_prm->m_CurveSegCount = entry["td_curve_segcount"].get<int>(); + { + if( entry["td_curve_segcount"].get<int>() > 0 ) + td_prm->m_CurvedEdges = true; + } if( entry.contains( "td_width_to_size_filter_ratio" ) ) td_prm->m_WidthtoSizeFilterRatio = entry["td_width_to_size_filter_ratio"].get<double>(); diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops.cpp b/pcbnew/dialogs/dialog_global_edit_teardrops.cpp index a7901aa469..d1012e824c 100644 --- a/pcbnew/dialogs/dialog_global_edit_teardrops.cpp +++ b/pcbnew/dialogs/dialog_global_edit_teardrops.cpp @@ -73,11 +73,6 @@ protected: { event.Enable( m_specifiedValues->GetValue() ); } - void onCurvedEdgesUpdateUi( wxUpdateUIEvent& event ) override - { - event.Enable( m_specifiedValues->GetValue() - && m_curvedEdges->GetValue() == wxCHK_CHECKED ); - } void onFilterUpdateUi( wxUpdateUIEvent& event ) override { event.Enable( !m_trackToTrack->GetValue() ); @@ -343,12 +338,7 @@ void DIALOG_GLOBAL_EDIT_TEARDROPS::setSpecifiedParams( TEARDROP_PARAMETERS* targ targetParams->m_TdMaxWidth = m_teardropMaxHeight.GetIntValue(); if( m_curvedEdges->Get3StateValue() != wxCHK_UNDETERMINED ) - { - if( m_curvedEdges->GetValue() ) - targetParams->m_CurveSegCount = 1; - else - targetParams->m_CurveSegCount = 0; - } + targetParams->m_CurvedEdges = m_curvedEdges->GetValue(); } diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp b/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp index a0a77f20e5..a2279dd113 100644 --- a/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp +++ b/pcbnew/dialogs/dialog_global_edit_teardrops_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -167,7 +167,7 @@ DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::DIALOG_GLOBAL_EDIT_TEARDROPS_BASE( wxWindow* wxBoxSizer* bSizer39; bSizer39 = new wxBoxSizer( wxHORIZONTAL ); - m_stHDRatio = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_stHDRatio = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 ); m_stHDRatio->Wrap( -1 ); m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") ); @@ -326,16 +326,6 @@ DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::DIALOG_GLOBAL_EDIT_TEARDROPS_BASE( wxWindow* bSizer44->Add( m_curvedEdges, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT, 5 ); - bSizer44->Add( 30, 0, 0, 0, 5 ); - - m_curvePointsLabel = new wxStaticText( sbAction->GetStaticBox(), wxID_ANY, _("Points:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_curvePointsLabel->Wrap( -1 ); - bSizer44->Add( m_curvePointsLabel, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_curvePointsCtrl = new wxSpinCtrl( sbAction->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 ); - bSizer44->Add( m_curvePointsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - bSizer121->Add( bSizer44, 0, wxBOTTOM|wxEXPAND|wxLEFT, 3 ); @@ -405,8 +395,6 @@ DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::DIALOG_GLOBAL_EDIT_TEARDROPS_BASE( wxWindow* m_tcMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this ); m_stMaxHeightUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this ); m_curvedEdges->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this ); - m_curvePointsLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this ); - m_curvePointsCtrl->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this ); } DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::~DIALOG_GLOBAL_EDIT_TEARDROPS_BASE() @@ -450,7 +438,5 @@ DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::~DIALOG_GLOBAL_EDIT_TEARDROPS_BASE() m_tcMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this ); m_stMaxHeightUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this ); m_curvedEdges->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onSpecifiedValuesUpdateUi ), NULL, this ); - m_curvePointsLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this ); - m_curvePointsCtrl->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_GLOBAL_EDIT_TEARDROPS_BASE::onCurvedEdgesUpdateUi ), NULL, this ); } diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp b/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp index e84db45e2f..1b32757d40 100644 --- a/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp +++ b/pcbnew/dialogs/dialog_global_edit_teardrops_base.fbp @@ -1,36 +1,34 @@ <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <wxFormBuilder_Project> - <FileVersion major="1" minor="18"/> + <FileVersion major="1" minor="17"/> <object class="Project" expanded="true"> + <property name="class_decoration">; </property> <property name="code_generation">C++</property> - <property name="cpp_class_decoration"></property> - <property name="cpp_disconnect_events">1</property> - <property name="cpp_event_generation">connect</property> - <property name="cpp_help_provider">none</property> - <property name="cpp_namespace"></property> - <property name="cpp_precompiled_header"></property> - <property name="cpp_use_array_enum">0</property> - <property name="cpp_use_enum">0</property> + <property name="disconnect_events">1</property> + <property name="disconnect_mode">source_name</property> + <property name="disconnect_php_events">0</property> + <property name="disconnect_python_events">0</property> <property name="embedded_files_path">res</property> <property name="encoding">UTF-8</property> + <property name="event_generation">connect</property> <property name="file">dialog_global_edit_teardrops_base</property> <property name="first_id">6000</property> + <property name="help_provider">none</property> + <property name="image_path_wrapper_function_name"></property> + <property name="indent_with_spaces"></property> <property name="internationalize">1</property> - <property name="lua_skip_events">1</property> - <property name="lua_ui_table">UI</property> <property name="name">dialog_global_edit_teardrops_base</property> + <property name="namespace"></property> <property name="path">.</property> - <property name="php_disconnect_events">0</property> - <property name="php_disconnect_mode">source_name</property> - <property name="php_skip_events">1</property> - <property name="python_disconnect_events">0</property> - <property name="python_disconnect_mode">source_name</property> - <property name="python_image_path_wrapper_function_name"></property> - <property name="python_indent_with_spaces"></property> - <property name="python_skip_events">1</property> + <property name="precompiled_header"></property> <property name="relative_path">1</property> + <property name="skip_lua_events">1</property> + <property name="skip_php_events">1</property> + <property name="skip_python_events">1</property> + <property name="ui_table">UI</property> + <property name="use_array_enum">0</property> + <property name="use_enum">0</property> <property name="use_microsoft_bom">0</property> - <property name="use_native_eol">0</property> <object class="Dialog" expanded="true"> <property name="aui_managed">0</property> <property name="aui_manager_style">wxAUI_MGR_DEFAULT</property> @@ -1598,7 +1596,7 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Maximum track width:</property> + <property name="label">Track width limit:</property> <property name="markup">0</property> <property name="max_size"></property> <property name="maximize_button">0</property> @@ -3121,143 +3119,6 @@ <event name="OnUpdateUI">onSpecifiedValuesUpdateUi</event> </object> </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag"></property> - <property name="proportion">0</property> - <object class="spacer" expanded="true"> - <property name="height">0</property> - <property name="permission">protected</property> - <property name="width">30</property> - </object> - </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL</property> - <property name="proportion">0</property> - <object class="wxStaticText" expanded="true"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer">0</property> - <property name="aui_name"></property> - <property name="aui_position">0</property> - <property name="aui_row">0</property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Points:</property> - <property name="markup">0</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_curvePointsLabel</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <property name="wrap">-1</property> - <event name="OnUpdateUI">onCurvedEdgesUpdateUi</event> - </object> - </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxSpinCtrl" expanded="true"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer">0</property> - <property name="aui_name"></property> - <property name="aui_position">0</property> - <property name="aui_row">0</property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="initial">5</property> - <property name="max">10</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min">3</property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_curvePointsCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style">wxSP_ARROW_KEYS</property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="value"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <event name="OnUpdateUI">onCurvedEdgesUpdateUi</event> - </object> - </object> </object> </object> </object> diff --git a/pcbnew/dialogs/dialog_global_edit_teardrops_base.h b/pcbnew/dialogs/dialog_global_edit_teardrops_base.h index 831c67ea8b..9ae15707f8 100644 --- a/pcbnew/dialogs/dialog_global_edit_teardrops_base.h +++ b/pcbnew/dialogs/dialog_global_edit_teardrops_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.2.1-0-g80c4cb6) +// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -32,12 +32,12 @@ class PCB_LAYER_BOX_SELECTOR; #include <wx/image.h> #include <wx/icon.h> #include <wx/statbmp.h> -#include <wx/spinctrl.h> #include <wx/button.h> #include <wx/dialog.h> /////////////////////////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////// /// Class DIALOG_GLOBAL_EDIT_TEARDROPS_BASE /////////////////////////////////////////////////////////////////////////////// @@ -88,8 +88,6 @@ class DIALOG_GLOBAL_EDIT_TEARDROPS_BASE : public DIALOG_SHIM wxTextCtrl* m_tcMaxHeight; wxStaticText* m_stMaxHeightUnits; wxCheckBox* m_curvedEdges; - wxStaticText* m_curvePointsLabel; - wxSpinCtrl* m_curvePointsCtrl; wxStdDialogButtonSizer* m_sdbSizer; wxButton* m_sdbSizerOK; wxButton* m_sdbSizerApply; @@ -103,7 +101,6 @@ class DIALOG_GLOBAL_EDIT_TEARDROPS_BASE : public DIALOG_SHIM virtual void OnExistingFilterSelect( wxCommandEvent& event ) { event.Skip(); } virtual void onShowBoardSetup( wxHyperlinkEvent& event ) { event.Skip(); } virtual void onSpecifiedValuesUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); } - virtual void onCurvedEdgesUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); } public: diff --git a/pcbnew/dialogs/dialog_pad_properties.cpp b/pcbnew/dialogs/dialog_pad_properties.cpp index 1076f44b52..1eb57ca179 100644 --- a/pcbnew/dialogs/dialog_pad_properties.cpp +++ b/pcbnew/dialogs/dialog_pad_properties.cpp @@ -709,8 +709,7 @@ void DIALOG_PAD_PROPERTIES::initValues() m_spTeardropLenPercent->SetValue( m_previewPad->GetTeardropParams().m_BestLengthRatio *100 ); m_spTeardropSizePercent->SetValue( m_previewPad->GetTeardropParams().m_BestWidthRatio *100 ); m_spTeardropHDPercent->SetValue( m_previewPad->GetTeardropParams().m_WidthtoSizeFilterRatio*100 ); - - m_curvedEdges->SetValue( m_previewPad->GetTeardropParams().IsCurved() ); + m_curvedEdges->SetValue( m_previewPad->GetTeardropParams().m_CurvedEdges ); switch( m_previewPad->GetLocalZoneConnection() ) { @@ -1284,12 +1283,6 @@ void DIALOG_PAD_PROPERTIES::onTeardropsUpdateUi( wxUpdateUIEvent& event ) } -void DIALOG_PAD_PROPERTIES::onTeardropCurvePointsUpdateUi( wxUpdateUIEvent& event ) -{ - event.Enable( !m_board->LegacyTeardrops() && m_curvedEdges->GetValue() ); -} - - void DIALOG_PAD_PROPERTIES::OnUpdateUINonCopperWarning( wxUpdateUIEvent& event ) { bool isOnCopperLayer = ( m_previewPad->GetLayerSet() & LSET::AllCuMask() ).any(); @@ -1739,12 +1732,7 @@ bool DIALOG_PAD_PROPERTIES::transferDataToPad( PAD* aPad ) aPad->GetTeardropParams().m_TdMaxWidth = m_teardropMaxHeightSetting.GetIntValue(); aPad->GetTeardropParams().m_BestLengthRatio = m_spTeardropLenPercent->GetValue() / 100; aPad->GetTeardropParams().m_BestWidthRatio = m_spTeardropSizePercent->GetValue() / 100; - - if( m_curvedEdges->GetValue() ) - aPad->GetTeardropParams().m_CurveSegCount = 1; - else - aPad->GetTeardropParams().m_CurveSegCount = 0; - + aPad->GetTeardropParams().m_CurvedEdges = m_curvedEdges->GetValue(); aPad->GetTeardropParams().m_WidthtoSizeFilterRatio = m_spTeardropHDPercent->GetValue() / 100; // Read pad clearances values: diff --git a/pcbnew/dialogs/dialog_pad_properties.h b/pcbnew/dialogs/dialog_pad_properties.h index c5ba10f22e..f976f67c8f 100644 --- a/pcbnew/dialogs/dialog_pad_properties.h +++ b/pcbnew/dialogs/dialog_pad_properties.h @@ -78,7 +78,6 @@ private: void OnCancel( wxCommandEvent& event ) override; void OnUpdateUI( wxUpdateUIEvent& event ) override; void onTeardropsUpdateUi( wxUpdateUIEvent& event ) override; - void onTeardropCurvePointsUpdateUi( wxUpdateUIEvent& event ) override; void OnPadstackModeChanged( wxCommandEvent& event ) override; void OnEditLayerChanged( wxCommandEvent& event ) override; diff --git a/pcbnew/dialogs/dialog_pad_properties_base.cpp b/pcbnew/dialogs/dialog_pad_properties_base.cpp index d4127e955a..2dcda5cc79 100644 --- a/pcbnew/dialogs/dialog_pad_properties_base.cpp +++ b/pcbnew/dialogs/dialog_pad_properties_base.cpp @@ -659,7 +659,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind wxBoxSizer* bSizer39; bSizer39 = new wxBoxSizer( wxHORIZONTAL ); - m_stHDRatio = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_stHDRatio = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 ); m_stHDRatio->Wrap( -1 ); m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") ); @@ -825,16 +825,6 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind bSizer44->Add( m_curvedEdges, 0, wxALIGN_CENTER_VERTICAL, 5 ); - bSizer44->Add( 45, 0, 0, 0, 5 ); - - m_curvePointsLabel = new wxStaticText( bSizerTeardrops->GetStaticBox(), wxID_ANY, _("Points:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_curvePointsLabel->Wrap( -1 ); - bSizer44->Add( m_curvePointsLabel, 0, wxALIGN_CENTER_VERTICAL, 5 ); - - m_curvePointsCtrl = new wxSpinCtrl( bSizerTeardrops->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxSP_ARROW_KEYS, 3, 10, 5 ); - bSizer44->Add( m_curvePointsCtrl, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - bSizer43->Add( bSizer44, 0, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 8 ); @@ -941,7 +931,7 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind m_connectionsPanel->SetSizer( bSizerPanelConnections ); m_connectionsPanel->Layout(); bSizerPanelConnections->Fit( m_connectionsPanel ); - m_notebook->AddPage( m_connectionsPanel, _("Connections"), false ); + m_notebook->AddPage( m_connectionsPanel, _("Connections"), true ); m_localSettingsPanel = new wxPanel( m_notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* bSizerPanelClearance; bSizerPanelClearance = new wxBoxSizer( wxVERTICAL ); @@ -1311,8 +1301,6 @@ DIALOG_PAD_PROPERTIES_BASE::DIALOG_PAD_PROPERTIES_BASE( wxWindow* parent, wxWind m_stTdMaxSize->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this ); m_tcMaxHeight->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this ); m_stMaxHeightUnits->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this ); - m_curvePointsLabel->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this ); - m_curvePointsCtrl->Connect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this ); m_ZoneConnectionChoice->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::onModify ), NULL, this ); m_ZoneCustomPadShape->Connect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::onModify ), NULL, this ); m_thermalGapCtrl->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::onModify ), NULL, this ); @@ -1400,8 +1388,6 @@ DIALOG_PAD_PROPERTIES_BASE::~DIALOG_PAD_PROPERTIES_BASE() m_stTdMaxSize->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this ); m_tcMaxHeight->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this ); m_stMaxHeightUnits->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropsUpdateUi ), NULL, this ); - m_curvePointsLabel->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this ); - m_curvePointsCtrl->Disconnect( wxEVT_UPDATE_UI, wxUpdateUIEventHandler( DIALOG_PAD_PROPERTIES_BASE::onTeardropCurvePointsUpdateUi ), NULL, this ); m_ZoneConnectionChoice->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::onModify ), NULL, this ); m_ZoneCustomPadShape->Disconnect( wxEVT_COMMAND_CHOICE_SELECTED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::onModify ), NULL, this ); m_thermalGapCtrl->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( DIALOG_PAD_PROPERTIES_BASE::onModify ), NULL, this ); diff --git a/pcbnew/dialogs/dialog_pad_properties_base.fbp b/pcbnew/dialogs/dialog_pad_properties_base.fbp index 47a4d99931..18030d7547 100644 --- a/pcbnew/dialogs/dialog_pad_properties_base.fbp +++ b/pcbnew/dialogs/dialog_pad_properties_base.fbp @@ -7243,7 +7243,7 @@ <object class="notebookpage" expanded="true"> <property name="bitmap"></property> <property name="label">Connections</property> - <property name="select">0</property> + <property name="select">1</property> <object class="wxPanel" expanded="true"> <property name="BottomDockable">1</property> <property name="LeftDockable">1</property> @@ -7809,7 +7809,7 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Maximum track width:</property> + <property name="label">Track width limit:</property> <property name="markup">0</property> <property name="max_size"></property> <property name="maximize_button">0</property> @@ -9491,143 +9491,6 @@ <property name="window_style"></property> </object> </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag"></property> - <property name="proportion">0</property> - <object class="spacer" expanded="false"> - <property name="height">0</property> - <property name="permission">protected</property> - <property name="width">45</property> - </object> - </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL</property> - <property name="proportion">0</property> - <object class="wxStaticText" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer">0</property> - <property name="aui_name"></property> - <property name="aui_position">0</property> - <property name="aui_row">0</property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Points:</property> - <property name="markup">0</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_curvePointsLabel</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <property name="wrap">-1</property> - <event name="OnUpdateUI">onTeardropCurvePointsUpdateUi</event> - </object> - </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxSpinCtrl" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer">0</property> - <property name="aui_name"></property> - <property name="aui_position">0</property> - <property name="aui_row">0</property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="initial">5</property> - <property name="max">10</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min">3</property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_curvePointsCtrl</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style">wxSP_ARROW_KEYS</property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="value"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <event name="OnUpdateUI">onTeardropCurvePointsUpdateUi</event> - </object> - </object> </object> </object> </object> diff --git a/pcbnew/dialogs/dialog_pad_properties_base.h b/pcbnew/dialogs/dialog_pad_properties_base.h index a3b59df8eb..8dd6389841 100644 --- a/pcbnew/dialogs/dialog_pad_properties_base.h +++ b/pcbnew/dialogs/dialog_pad_properties_base.h @@ -201,8 +201,6 @@ class DIALOG_PAD_PROPERTIES_BASE : public DIALOG_SHIM wxTextCtrl* m_tcMaxHeight; wxStaticText* m_stMaxHeightUnits; wxCheckBox* m_curvedEdges; - wxStaticText* m_curvePointsLabel; - wxSpinCtrl* m_curvePointsCtrl; wxStaticBoxSizer* m_sbSizerZonesSettings; wxStaticText* m_padConnectionLabel; wxChoice* m_ZoneConnectionChoice; @@ -280,7 +278,6 @@ class DIALOG_PAD_PROPERTIES_BASE : public DIALOG_SHIM virtual void onModify( wxCommandEvent& event ) { event.Skip(); } virtual void onTeardropsUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); } virtual void onModify( wxSpinDoubleEvent& event ) { event.Skip(); } - virtual void onTeardropCurvePointsUpdateUi( wxUpdateUIEvent& event ) { event.Skip(); } virtual void OnUpdateUINonCopperWarning( wxUpdateUIEvent& event ) { event.Skip(); } virtual void onChangePadMode( wxCommandEvent& event ) { event.Skip(); } virtual void OnCancel( wxCommandEvent& event ) { event.Skip(); } diff --git a/pcbnew/dialogs/dialog_track_via_properties.cpp b/pcbnew/dialogs/dialog_track_via_properties.cpp index 8b6f2a7418..e68cbce9fa 100644 --- a/pcbnew/dialogs/dialog_track_via_properties.cpp +++ b/pcbnew/dialogs/dialog_track_via_properties.cpp @@ -259,7 +259,7 @@ DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES( PCB_BASE_FRAME* aParen m_teardropLenPercent.SetDoubleValue( v->GetTeardropParams().m_BestLengthRatio*100.0 ); m_teardropWidthPercent.SetDoubleValue( v->GetTeardropParams().m_BestWidthRatio*100.0 ); m_teardropHDPercent.SetDoubleValue( v->GetTeardropParams().m_WidthtoSizeFilterRatio*100.0 ); - m_curvedEdges->SetValue( v->GetTeardropParams().IsCurved() ); + m_curvedEdges->SetValue( v->GetTeardropParams().m_CurvedEdges ); } else // check if values are the same for every selected via { @@ -789,12 +789,7 @@ bool DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow() targetParams->m_WidthtoSizeFilterRatio = m_teardropHDPercent.GetDoubleValue() / 100.0; if( m_curvedEdges->Get3StateValue() != wxCHK_UNDETERMINED ) - { - if( m_curvedEdges->GetValue() ) - targetParams->m_CurveSegCount = 1; - else - targetParams->m_CurveSegCount = 0; - } + targetParams->m_CurvedEdges = m_curvedEdges->GetValue(); if( changeLock ) v->SetLocked( setLock ); diff --git a/pcbnew/dialogs/panel_setup_teardrops.cpp b/pcbnew/dialogs/panel_setup_teardrops.cpp index 07e8e25149..08efdc908f 100644 --- a/pcbnew/dialogs/panel_setup_teardrops.cpp +++ b/pcbnew/dialogs/panel_setup_teardrops.cpp @@ -58,11 +58,7 @@ bool PANEL_SETUP_TEARDROPS::TransferDataToWindow() m_spTeardropHDPercent->SetValue( prms->m_WidthtoSizeFilterRatio*100.0 ); m_cbPreferZoneConnection->SetValue( !prms->m_TdOnPadsInZones ); m_cbTeardropsUseNextTrack->SetValue( prms->m_AllowUseTwoTracks ); - - if( prms->IsCurved() ) - m_rbCurved->SetValue( true ); - else - m_rbStraightLines->SetValue( true ); + m_cbCurvedEdges->SetValue( prms->m_CurvedEdges ); prms = prmsList->GetParameters( TARGET_RECT ); m_teardropMaxLenRect.SetValue( prms->m_TdMaxLen ); @@ -72,11 +68,7 @@ bool PANEL_SETUP_TEARDROPS::TransferDataToWindow() m_spTeardropHDPercent1->SetValue( prms->m_WidthtoSizeFilterRatio*100.0 ); m_cbPreferZoneConnection1->SetValue( !prms->m_TdOnPadsInZones ); m_cbTeardropsUseNextTrack1->SetValue( prms->m_AllowUseTwoTracks ); - - if( prms->IsCurved() ) - m_rbCurved1->SetValue( true ); - else - m_rbStraightLines1->SetValue( true ); + m_cbCurvedEdges1->SetValue( prms->m_CurvedEdges ); prms = prmsList->GetParameters( TARGET_TRACK ); m_teardropMaxLenT2T.SetValue( prms->m_TdMaxLen ); @@ -85,11 +77,7 @@ bool PANEL_SETUP_TEARDROPS::TransferDataToWindow() m_spWidthPercent2->SetValue( prms->m_BestWidthRatio *100.0 ); m_spTeardropHDPercent2->SetValue( prms->m_WidthtoSizeFilterRatio*100.0 ); m_cbTeardropsUseNextTrack2->SetValue( prms->m_AllowUseTwoTracks ); - - if( prms->IsCurved() ) - m_rbCurved2->SetValue( true ); - else - m_rbStraightLines2->SetValue( true ); + m_cbCurvedEdges2->SetValue( prms->m_CurvedEdges ); return true; } @@ -104,7 +92,7 @@ bool PANEL_SETUP_TEARDROPS::TransferDataFromWindow() prms->m_BestWidthRatio = m_spWidthPercent->GetValue() / 100.0; prms->m_TdMaxLen = m_teardropMaxLenRound.GetIntValue(); prms->m_TdMaxWidth = m_teardropMaxWidthRound.GetIntValue(); - prms->m_CurveSegCount = m_rbStraightLines->GetValue() ? 0 : 1; + prms->m_CurvedEdges = m_cbCurvedEdges->GetValue(); prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercent->GetValue() / 100.0; prms->m_TdOnPadsInZones = !m_cbPreferZoneConnection->GetValue(); prms->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack->GetValue(); @@ -114,7 +102,7 @@ bool PANEL_SETUP_TEARDROPS::TransferDataFromWindow() prms->m_BestWidthRatio = m_spWidthPercent1->GetValue() / 100.0; prms->m_TdMaxLen = m_teardropMaxLenRect.GetIntValue(); prms->m_TdMaxWidth = m_teardropMaxWidthRect.GetIntValue(); - prms->m_CurveSegCount = m_rbStraightLines1->GetValue() ? 0 : 1; + prms->m_CurvedEdges = m_cbCurvedEdges1->GetValue(); prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercent1->GetValue() / 100.0; prms->m_TdOnPadsInZones = !m_cbPreferZoneConnection1->GetValue(); prms->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack1->GetValue(); @@ -124,7 +112,7 @@ bool PANEL_SETUP_TEARDROPS::TransferDataFromWindow() prms->m_BestWidthRatio = m_spWidthPercent2->GetValue() / 100.0; prms->m_TdMaxLen = m_teardropMaxLenT2T.GetIntValue(); prms->m_TdMaxWidth = m_teardropMaxWidthT2T.GetIntValue(); - prms->m_CurveSegCount = m_rbStraightLines2->GetValue() ? 0 : 1; + prms->m_CurvedEdges = m_cbCurvedEdges2->GetValue(); prms->m_WidthtoSizeFilterRatio = m_spTeardropHDPercent2->GetValue() / 100.0; prms->m_AllowUseTwoTracks = m_cbTeardropsUseNextTrack2->GetValue(); diff --git a/pcbnew/dialogs/panel_setup_teardrops_base.cpp b/pcbnew/dialogs/panel_setup_teardrops_base.cpp index 0495cbc74e..9d2e707ccf 100644 --- a/pcbnew/dialogs/panel_setup_teardrops_base.cpp +++ b/pcbnew/dialogs/panel_setup_teardrops_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0) +// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -32,22 +32,6 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind m_bitmapTeardrop = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); bSizerLeftCol->Add( m_bitmapTeardrop, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer41; - bSizer41 = new wxBoxSizer( wxHORIZONTAL ); - - m_edgesLabel = new wxStaticText( this, wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_edgesLabel->Wrap( -1 ); - bSizer41->Add( m_edgesLabel, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_rbStraightLines = new wxRadioButton( this, wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - bSizer41->Add( m_rbStraightLines, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_rbCurved = new wxRadioButton( this, wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer41->Add( m_rbCurved, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizerLeftCol->Add( bSizer41, 0, wxEXPAND|wxBOTTOM, 4 ); - bSizerShapeColumns->Add( bSizerLeftCol, 0, wxEXPAND|wxRIGHT, 10 ); @@ -149,7 +133,7 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind gbSizer->Add( m_cbPreferZoneConnection, wxGBPosition( 1, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 40 ); - m_stHDRatio = new wxStaticText( this, wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_stHDRatio = new wxStaticText( this, wxID_ANY, _("Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 ); m_stHDRatio->Wrap( -1 ); m_stHDRatio->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") ); @@ -190,6 +174,9 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind gbSizer->Add( m_cbTeardropsUseNextTrack, wxGBPosition( 0, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 40 ); + m_cbCurvedEdges = new wxCheckBox( this, wxID_ANY, _("Curved edges"), wxDefaultPosition, wxDefaultSize, 0 ); + gbSizer->Add( m_cbCurvedEdges, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), 0, 5 ); + bSizerShapeColumns->Add( gbSizer, 0, wxEXPAND|wxLEFT, 20 ); @@ -215,22 +202,6 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind m_bitmapTeardrop1 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); bSizerLeftCol1->Add( m_bitmapTeardrop1, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer411; - bSizer411 = new wxBoxSizer( wxHORIZONTAL ); - - m_edgesLabel1 = new wxStaticText( this, wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_edgesLabel1->Wrap( -1 ); - bSizer411->Add( m_edgesLabel1, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_rbStraightLines1 = new wxRadioButton( this, wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - bSizer411->Add( m_rbStraightLines1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_rbCurved1 = new wxRadioButton( this, wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer411->Add( m_rbCurved1, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizerLeftCol1->Add( bSizer411, 0, wxEXPAND|wxBOTTOM, 4 ); - bSizerShapeColumns1->Add( bSizerLeftCol1, 0, wxEXPAND|wxRIGHT, 10 ); @@ -332,7 +303,7 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind gbSizer1->Add( m_cbPreferZoneConnection1, wxGBPosition( 1, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 40 ); - m_stHDRatio1 = new wxStaticText( this, wxID_ANY, _("Maximum track width:"), wxDefaultPosition, wxDefaultSize, 0 ); + m_stHDRatio1 = new wxStaticText( this, wxID_ANY, _("Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 ); m_stHDRatio1->Wrap( -1 ); m_stHDRatio1->SetToolTip( _("Max pad/via size to track width ratio to create a teardrop.\n100 always creates a teardrop.") ); @@ -373,6 +344,9 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind gbSizer1->Add( m_cbTeardropsUseNextTrack1, wxGBPosition( 0, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 40 ); + m_cbCurvedEdges1 = new wxCheckBox( this, wxID_ANY, _("Curved edges"), wxDefaultPosition, wxDefaultSize, 0 ); + gbSizer1->Add( m_cbCurvedEdges1, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), 0, 5 ); + bSizerShapeColumns1->Add( gbSizer1, 0, wxEXPAND|wxLEFT, 20 ); @@ -398,22 +372,6 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind m_bitmapTeardrop2 = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); bSizerLeftCol2->Add( m_bitmapTeardrop2, 1, wxALIGN_CENTER_HORIZONTAL|wxRIGHT|wxLEFT, 5 ); - wxBoxSizer* bSizer412; - bSizer412 = new wxBoxSizer( wxHORIZONTAL ); - - m_edgesLabel2 = new wxStaticText( this, wxID_ANY, _("Edges:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_edgesLabel2->Wrap( -1 ); - bSizer412->Add( m_edgesLabel2, 0, wxALIGN_CENTER_VERTICAL|wxLEFT, 5 ); - - m_rbStraightLines2 = new wxRadioButton( this, wxID_ANY, _("Straight lines"), wxDefaultPosition, wxDefaultSize, wxRB_GROUP ); - bSizer412->Add( m_rbStraightLines2, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - m_rbCurved2 = new wxRadioButton( this, wxID_ANY, _("Curved"), wxDefaultPosition, wxDefaultSize, 0 ); - bSizer412->Add( m_rbCurved2, 0, wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT, 5 ); - - - bSizerLeftCol2->Add( bSizer412, 0, wxEXPAND|wxBOTTOM, 4 ); - bSizerShapeColumns2->Add( bSizerLeftCol2, 0, wxEXPAND|wxRIGHT, 10 ); @@ -510,7 +468,7 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind m_stMaxWidth2Units->Wrap( -1 ); gbSizer2->Add( m_stMaxWidth2Units, wxGBPosition( 4, 2 ), wxGBSpan( 1, 1 ), wxALIGN_CENTER_VERTICAL, 5 ); - m_stHDRatio2 = new wxStaticText( this, wxID_ANY, _("Maximum track width"), wxDefaultPosition, wxDefaultSize, 0 ); + m_stHDRatio2 = new wxStaticText( this, wxID_ANY, _("Track width limit:"), wxDefaultPosition, wxDefaultSize, 0 ); m_stHDRatio2->Wrap( -1 ); m_stHDRatio2->SetToolTip( _("Max track width ratio to create a teardrop.\n100 always creates a teardrop.") ); @@ -551,6 +509,9 @@ PANEL_SETUP_TEARDROPS_BASE::PANEL_SETUP_TEARDROPS_BASE( wxWindow* parent, wxWind gbSizer2->Add( m_cbTeardropsUseNextTrack2, wxGBPosition( 0, 3 ), wxGBSpan( 1, 3 ), wxALIGN_CENTER_VERTICAL|wxLEFT, 40 ); + m_cbCurvedEdges2 = new wxCheckBox( this, wxID_ANY, _("Curved edges"), wxDefaultPosition, wxDefaultSize, 0 ); + gbSizer2->Add( m_cbCurvedEdges2, wxGBPosition( 6, 0 ), wxGBSpan( 1, 1 ), 0, 5 ); + bSizerShapeColumns2->Add( gbSizer2, 0, wxEXPAND|wxLEFT, 20 ); diff --git a/pcbnew/dialogs/panel_setup_teardrops_base.fbp b/pcbnew/dialogs/panel_setup_teardrops_base.fbp index 644d4fe543..80fce06171 100644 --- a/pcbnew/dialogs/panel_setup_teardrops_base.fbp +++ b/pcbnew/dialogs/panel_setup_teardrops_base.fbp @@ -265,209 +265,6 @@ <property name="window_style"></property> </object> </object> - <object class="sizeritem" expanded="true"> - <property name="border">4</property> - <property name="flag">wxEXPAND|wxBOTTOM</property> - <property name="proportion">0</property> - <object class="wxBoxSizer" expanded="true"> - <property name="minimum_size"></property> - <property name="name">bSizer41</property> - <property name="orient">wxHORIZONTAL</property> - <property name="permission">none</property> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxStaticText" expanded="true"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Edges:</property> - <property name="markup">0</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_edgesLabel</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <property name="wrap">-1</property> - </object> - </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioButton" expanded="true"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Straight lines</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_rbStraightLines</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style">wxRB_GROUP</property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="value">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - <object class="sizeritem" expanded="true"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioButton" expanded="true"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Curved</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_rbCurved</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="value">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - </object> - </object> </object> </object> <object class="sizeritem" expanded="true"> @@ -1661,7 +1458,7 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Maximum track width:</property> + <property name="label">Track width limit:</property> <property name="markup">0</property> <property name="max_size"></property> <property name="maximize_button">0</property> @@ -2026,6 +1823,74 @@ <property name="window_style"></property> </object> </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag"></property> + <property name="row">6</property> + <property name="rowspan">1</property> + <object class="wxCheckBox" expanded="true"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer"></property> + <property name="aui_name"></property> + <property name="aui_position"></property> + <property name="aui_row"></property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="checked">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Curved edges</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_cbCurvedEdges</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> </object> </object> </object> @@ -2238,209 +2103,6 @@ <property name="window_style"></property> </object> </object> - <object class="sizeritem" expanded="false"> - <property name="border">4</property> - <property name="flag">wxEXPAND|wxBOTTOM</property> - <property name="proportion">0</property> - <object class="wxBoxSizer" expanded="false"> - <property name="minimum_size"></property> - <property name="name">bSizer411</property> - <property name="orient">wxHORIZONTAL</property> - <property name="permission">none</property> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxStaticText" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Edges:</property> - <property name="markup">0</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_edgesLabel1</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <property name="wrap">-1</property> - </object> - </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioButton" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Straight lines</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_rbStraightLines1</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style">wxRB_GROUP</property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="value">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioButton" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Curved</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_rbCurved1</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="value">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - </object> - </object> </object> </object> <object class="sizeritem" expanded="false"> @@ -3634,7 +3296,7 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Maximum track width:</property> + <property name="label">Track width limit:</property> <property name="markup">0</property> <property name="max_size"></property> <property name="maximize_button">0</property> @@ -3999,6 +3661,74 @@ <property name="window_style"></property> </object> </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag"></property> + <property name="row">6</property> + <property name="rowspan">1</property> + <object class="wxCheckBox" expanded="true"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer"></property> + <property name="aui_name"></property> + <property name="aui_position"></property> + <property name="aui_row"></property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="checked">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Curved edges</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_cbCurvedEdges1</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> </object> </object> </object> @@ -4211,209 +3941,6 @@ <property name="window_style"></property> </object> </object> - <object class="sizeritem" expanded="false"> - <property name="border">4</property> - <property name="flag">wxEXPAND|wxBOTTOM</property> - <property name="proportion">0</property> - <object class="wxBoxSizer" expanded="false"> - <property name="minimum_size"></property> - <property name="name">bSizer412</property> - <property name="orient">wxHORIZONTAL</property> - <property name="permission">none</property> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxStaticText" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Edges:</property> - <property name="markup">0</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_edgesLabel2</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - <property name="wrap">-1</property> - </object> - </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioButton" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Straight lines</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_rbStraightLines2</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style">wxRB_GROUP</property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="value">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - <object class="sizeritem" expanded="false"> - <property name="border">5</property> - <property name="flag">wxALIGN_CENTER_VERTICAL|wxRIGHT|wxLEFT</property> - <property name="proportion">0</property> - <object class="wxRadioButton" expanded="false"> - <property name="BottomDockable">1</property> - <property name="LeftDockable">1</property> - <property name="RightDockable">1</property> - <property name="TopDockable">1</property> - <property name="aui_layer"></property> - <property name="aui_name"></property> - <property name="aui_position"></property> - <property name="aui_row"></property> - <property name="best_size"></property> - <property name="bg"></property> - <property name="caption"></property> - <property name="caption_visible">1</property> - <property name="center_pane">0</property> - <property name="close_button">1</property> - <property name="context_help"></property> - <property name="context_menu">1</property> - <property name="default_pane">0</property> - <property name="dock">Dock</property> - <property name="dock_fixed">0</property> - <property name="docking">Left</property> - <property name="drag_accept_files">0</property> - <property name="enabled">1</property> - <property name="fg"></property> - <property name="floatable">1</property> - <property name="font"></property> - <property name="gripper">0</property> - <property name="hidden">0</property> - <property name="id">wxID_ANY</property> - <property name="label">Curved</property> - <property name="max_size"></property> - <property name="maximize_button">0</property> - <property name="maximum_size"></property> - <property name="min_size"></property> - <property name="minimize_button">0</property> - <property name="minimum_size"></property> - <property name="moveable">1</property> - <property name="name">m_rbCurved2</property> - <property name="pane_border">1</property> - <property name="pane_position"></property> - <property name="pane_size"></property> - <property name="permission">protected</property> - <property name="pin_button">1</property> - <property name="pos"></property> - <property name="resize">Resizable</property> - <property name="show">1</property> - <property name="size"></property> - <property name="style"></property> - <property name="subclass">; ; forward_declare</property> - <property name="toolbar_pane">0</property> - <property name="tooltip"></property> - <property name="validator_data_type"></property> - <property name="validator_style">wxFILTER_NONE</property> - <property name="validator_type">wxDefaultValidator</property> - <property name="validator_variable"></property> - <property name="value">0</property> - <property name="window_extra_style"></property> - <property name="window_name"></property> - <property name="window_style"></property> - </object> - </object> - </object> - </object> </object> </object> <object class="sizeritem" expanded="false"> @@ -5539,7 +5066,7 @@ <property name="gripper">0</property> <property name="hidden">0</property> <property name="id">wxID_ANY</property> - <property name="label">Maximum track width</property> + <property name="label">Track width limit:</property> <property name="markup">0</property> <property name="max_size"></property> <property name="maximize_button">0</property> @@ -5904,6 +5431,74 @@ <property name="window_style"></property> </object> </object> + <object class="gbsizeritem" expanded="true"> + <property name="border">5</property> + <property name="colspan">1</property> + <property name="column">0</property> + <property name="flag"></property> + <property name="row">6</property> + <property name="rowspan">1</property> + <object class="wxCheckBox" expanded="true"> + <property name="BottomDockable">1</property> + <property name="LeftDockable">1</property> + <property name="RightDockable">1</property> + <property name="TopDockable">1</property> + <property name="aui_layer"></property> + <property name="aui_name"></property> + <property name="aui_position"></property> + <property name="aui_row"></property> + <property name="best_size"></property> + <property name="bg"></property> + <property name="caption"></property> + <property name="caption_visible">1</property> + <property name="center_pane">0</property> + <property name="checked">0</property> + <property name="close_button">1</property> + <property name="context_help"></property> + <property name="context_menu">1</property> + <property name="default_pane">0</property> + <property name="dock">Dock</property> + <property name="dock_fixed">0</property> + <property name="docking">Left</property> + <property name="drag_accept_files">0</property> + <property name="enabled">1</property> + <property name="fg"></property> + <property name="floatable">1</property> + <property name="font"></property> + <property name="gripper">0</property> + <property name="hidden">0</property> + <property name="id">wxID_ANY</property> + <property name="label">Curved edges</property> + <property name="max_size"></property> + <property name="maximize_button">0</property> + <property name="maximum_size"></property> + <property name="min_size"></property> + <property name="minimize_button">0</property> + <property name="minimum_size"></property> + <property name="moveable">1</property> + <property name="name">m_cbCurvedEdges2</property> + <property name="pane_border">1</property> + <property name="pane_position"></property> + <property name="pane_size"></property> + <property name="permission">protected</property> + <property name="pin_button">1</property> + <property name="pos"></property> + <property name="resize">Resizable</property> + <property name="show">1</property> + <property name="size"></property> + <property name="style"></property> + <property name="subclass">; ; forward_declare</property> + <property name="toolbar_pane">0</property> + <property name="tooltip"></property> + <property name="validator_data_type"></property> + <property name="validator_style">wxFILTER_NONE</property> + <property name="validator_type">wxDefaultValidator</property> + <property name="validator_variable"></property> + <property name="window_extra_style"></property> + <property name="window_name"></property> + <property name="window_style"></property> + </object> + </object> </object> </object> </object> diff --git a/pcbnew/dialogs/panel_setup_teardrops_base.h b/pcbnew/dialogs/panel_setup_teardrops_base.h index 83e4333d3b..52aa1d1946 100644 --- a/pcbnew/dialogs/panel_setup_teardrops_base.h +++ b/pcbnew/dialogs/panel_setup_teardrops_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf0) +// C++ code generated with wxFormBuilder (version 4.0.0-0-g0efcecf) // http://www.wxformbuilder.org/ // // PLEASE DO *NOT* EDIT THIS FILE! @@ -21,7 +21,6 @@ #include <wx/image.h> #include <wx/icon.h> #include <wx/statbmp.h> -#include <wx/radiobut.h> #include <wx/sizer.h> #include <wx/spinctrl.h> #include <wx/textctrl.h> @@ -43,9 +42,6 @@ class PANEL_SETUP_TEARDROPS_BASE : public wxPanel wxStaticText* m_roundShapesLabel; wxStaticLine* m_staticline1; wxStaticBitmap* m_bitmapTeardrop; - wxStaticText* m_edgesLabel; - wxRadioButton* m_rbStraightLines; - wxRadioButton* m_rbCurved; wxStaticText* m_stLenPercentLabel; wxSpinCtrlDouble* m_spLenPercent; wxStaticText* m_stMaxLen; @@ -60,12 +56,10 @@ class PANEL_SETUP_TEARDROPS_BASE : public wxPanel wxStaticText* m_stHDRatio; wxSpinCtrlDouble* m_spTeardropHDPercent; wxCheckBox* m_cbTeardropsUseNextTrack; + wxCheckBox* m_cbCurvedEdges; wxStaticText* m_rectShapesLabel; wxStaticLine* m_staticline2; wxStaticBitmap* m_bitmapTeardrop1; - wxStaticText* m_edgesLabel1; - wxRadioButton* m_rbStraightLines1; - wxRadioButton* m_rbCurved1; wxStaticText* m_stLenPercent1Label; wxSpinCtrlDouble* m_spLenPercent1; wxStaticText* m_stMaxLen1; @@ -80,12 +74,10 @@ class PANEL_SETUP_TEARDROPS_BASE : public wxPanel wxStaticText* m_stHDRatio1; wxSpinCtrlDouble* m_spTeardropHDPercent1; wxCheckBox* m_cbTeardropsUseNextTrack1; + wxCheckBox* m_cbCurvedEdges1; wxStaticText* m_tracksLabel; wxStaticLine* m_staticline3; wxStaticBitmap* m_bitmapTeardrop2; - wxStaticText* m_edgesLabel2; - wxRadioButton* m_rbStraightLines2; - wxRadioButton* m_rbCurved2; wxStaticText* m_stLenPercent2Label; wxSpinCtrlDouble* m_spLenPercent2; wxStaticText* m_stMaxLen2; @@ -99,6 +91,7 @@ class PANEL_SETUP_TEARDROPS_BASE : public wxPanel wxStaticText* m_stHDRatio2; wxSpinCtrlDouble* m_spTeardropHDPercent2; wxCheckBox* m_cbTeardropsUseNextTrack2; + wxCheckBox* m_cbCurvedEdges2; public: diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp index bae3b1135f..0856ea89cf 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.cpp @@ -731,7 +731,7 @@ bool isDefaultTeardropParameters( const TEARDROP_PARAMETERS& tdParams ) && tdParams.m_TdMaxLen == defaults.m_TdMaxLen && tdParams.m_BestWidthRatio == defaults.m_BestWidthRatio && tdParams.m_TdMaxWidth == defaults.m_TdMaxWidth - && tdParams.m_CurveSegCount == defaults.m_CurveSegCount + && tdParams.m_CurvedEdges == defaults.m_CurvedEdges && tdParams.m_WidthtoSizeFilterRatio == defaults.m_WidthtoSizeFilterRatio && tdParams.m_AllowUseTwoTracks == defaults.m_AllowUseTwoTracks && tdParams.m_TdOnPadsInZones == defaults.m_TdOnPadsInZones; @@ -741,12 +741,15 @@ bool isDefaultTeardropParameters( const TEARDROP_PARAMETERS& tdParams ) void PCB_IO_KICAD_SEXPR::formatTeardropParameters( const TEARDROP_PARAMETERS& tdParams ) const { m_out->Print( "(teardrops (best_length_ratio %s) (max_length %s) (best_width_ratio %s) " - "(max_width %s) (curve_points %d) (filter_ratio %s)", + "(max_width %s)", FormatDouble2Str( tdParams.m_BestLengthRatio ).c_str(), formatInternalUnits( tdParams.m_TdMaxLen ).c_str(), FormatDouble2Str( tdParams.m_BestWidthRatio ).c_str(), - formatInternalUnits( tdParams.m_TdMaxWidth ).c_str(), - tdParams.m_CurveSegCount, + formatInternalUnits( tdParams.m_TdMaxWidth ).c_str() ); + + KICAD_FORMAT::FormatBool( m_out, "curved_edges", tdParams.m_CurvedEdges ); + + m_out->Print( "filter_ratio %s )", FormatDouble2Str( tdParams.m_WidthtoSizeFilterRatio ).c_str() ); KICAD_FORMAT::FormatBool( m_out, "enabled", tdParams.m_Enabled ); diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h index 4de6af764f..d4a3ea452c 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr.h @@ -170,7 +170,8 @@ class PCB_IO_KICAD_SEXPR; // forward decl //#define SEXPR_BOARD_FILE_VERSION 20241009 // Evolve placement rule areas file format //#define SEXPR_BOARD_FILE_VERSION 20241010 // Graphic shapes can have soldermask layer and margin //#define SEXPR_BOARD_FILE_VERSION 20241030 // Dimension arrow directions, suppress_zeroes normalization -#define SEXPR_BOARD_FILE_VERSION 20241129 // Normalise keep_text_aligned and fill properties +//#define SEXPR_BOARD_FILE_VERSION 20241129 // Normalise keep_text_aligned and fill properties +#define SEXPR_BOARD_FILE_VERSION 20241228 // Convert teardrop curve points to bool #define BOARD_FILE_HOST_VERSION 20200825 ///< Earlier files than this include the host tag diff --git a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp index 65d3dd12e9..49dd329995 100644 --- a/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp +++ b/pcbnew/pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.cpp @@ -479,11 +479,16 @@ void PCB_IO_KICAD_SEXPR_PARSER::parseTEARDROP_PARAMETERS( TEARDROP_PARAMETERS* t NeedRIGHT(); break; + // Legacy token case T_curve_points: - tdParams->m_CurveSegCount = parseInt( "teardrop curve points count" ); + tdParams->m_CurvedEdges = parseInt( "teardrop curve points count" ) > 0; NeedRIGHT(); break; + case T_curved_edges: + tdParams->m_CurvedEdges = parseMaybeAbsentBool( true ); + break; + case T_filter_ratio: tdParams->m_WidthtoSizeFilterRatio = parseDouble( "teardrop filter ratio" ); NeedRIGHT(); diff --git a/pcbnew/teardrop/teardrop_parameters.h b/pcbnew/teardrop/teardrop_parameters.h index 80054f9d87..3ec1bda259 100644 --- a/pcbnew/teardrop/teardrop_parameters.h +++ b/pcbnew/teardrop/teardrop_parameters.h @@ -53,7 +53,7 @@ public: m_BestLengthRatio( 0.5), m_BestWidthRatio( 1.0 ), m_WidthtoSizeFilterRatio( 0.9 ), - m_CurveSegCount( 0 ), + m_CurvedEdges( false ), m_Enabled( false ), m_AllowUseTwoTracks( true ), m_TdOnPadsInZones( false ) @@ -81,16 +81,6 @@ public: m_BestWidthRatio = aHeightRatio; } - /** - * Set the teardrop curved or straight - */ - void SetTeardropCurvedPrm( int aCurveSegCount = 0 ) - { - m_CurveSegCount = aCurveSegCount; - } - - bool IsCurved() const { return m_CurveSegCount > 0; } - bool operator== ( const TEARDROP_PARAMETERS& aOther ) const { return m_Enabled == aOther.m_Enabled && @@ -99,7 +89,7 @@ public: m_TdMaxWidth == aOther.m_TdMaxWidth && m_BestLengthRatio == aOther.m_BestLengthRatio && m_BestWidthRatio == aOther.m_BestWidthRatio && - m_CurveSegCount == aOther.m_CurveSegCount && + m_CurvedEdges == aOther.m_CurvedEdges && m_WidthtoSizeFilterRatio == aOther.m_WidthtoSizeFilterRatio && m_TdOnPadsInZones == aOther.m_TdOnPadsInZones; } @@ -122,7 +112,7 @@ public: /// 1.0 (100 %) always creates a teardrop, 0.0 (0%) never create a teardrop double m_WidthtoSizeFilterRatio; /// True if the teardrop should be curved - int m_CurveSegCount; + bool m_CurvedEdges; /// Flag to enable teardrops bool m_Enabled; diff --git a/pcbnew/teardrop/teardrop_utils.cpp b/pcbnew/teardrop/teardrop_utils.cpp index 9cceceefbe..69a5fd6bde 100644 --- a/pcbnew/teardrop/teardrop_utils.cpp +++ b/pcbnew/teardrop/teardrop_utils.cpp @@ -736,7 +736,7 @@ bool TEARDROP_MANAGER::computeTeardropPolygon( const TEARDROP_PARAMETERS& aParam computeAnchorPoints( aParams, aTrack->GetLayer(), aOther, aOtherPos, pts ); - if( !aParams.IsCurved() ) + if( !aParams.m_CurvedEdges ) { aCorners = pts; return true;