diff --git a/pcbnew/dialogs/dialog_pns_settings.cpp b/pcbnew/dialogs/dialog_pns_settings.cpp index 83bd6fa26a..ebd026d925 100644 --- a/pcbnew/dialogs/dialog_pns_settings.cpp +++ b/pcbnew/dialogs/dialog_pns_settings.cpp @@ -42,12 +42,11 @@ DIALOG_PNS_SETTINGS::DIALOG_PNS_SETTINGS( wxWindow* aParent, PNS::ROUTING_SETTIN m_removeLoops->SetValue( m_settings.RemoveLoops() ); m_suggestEnding->SetValue( m_settings.SuggestFinish() ); m_smartPads->SetValue( m_settings.SmartPads() ); - m_effort->SetValue( m_settings.OptimizerEffort() ); m_smoothDragged->SetValue( m_settings.SmoothDraggedSegments() ); m_violateDrc->SetValue( m_settings.GetAllowDRCViolationsSetting() ); m_freeAngleMode->SetValue( m_settings.GetFreeAngleMode() ); m_dragToolMode->SetSelection ( m_settings.InlineDragEnabled() ? 1 : 0 ); - m_optimizeDraggedTrack->SetValue( m_settings.GetOptimizeDraggedTrack() ); + m_optimizeEntireDraggedTrack->SetValue( m_settings.GetOptimizeEntireDraggedTrack() ); m_autoPosture->SetValue( m_settings.GetAutoPosture() ); m_fixAllSegments->SetValue( m_settings.GetFixAllSegments() ); @@ -74,10 +73,9 @@ void DIALOG_PNS_SETTINGS::OnOkClick( wxCommandEvent& aEvent ) m_settings.SetRemoveLoops( m_removeLoops->GetValue() ); m_settings.SetSuggestFinish ( m_suggestEnding->GetValue() ); m_settings.SetSmartPads( m_smartPads->GetValue() ); - m_settings.SetOptimizerEffort( (PNS::PNS_OPTIMIZATION_EFFORT) m_effort->GetValue() ); m_settings.SetSmoothDraggedSegments( m_smoothDragged->GetValue() ); m_settings.SetInlineDragEnabled( m_dragToolMode->GetSelection () ? true : false ); - m_settings.SetOptimizeDraggedTrack( m_optimizeDraggedTrack->GetValue() ); + m_settings.SetOptimizeEntireDraggedTrack( m_optimizeEntireDraggedTrack->GetValue() ); m_settings.SetAutoPosture( m_autoPosture->GetValue() ); m_settings.SetFixAllSegments( m_fixAllSegments->GetValue() ); diff --git a/pcbnew/dialogs/dialog_pns_settings_base.cpp b/pcbnew/dialogs/dialog_pns_settings_base.cpp index e5449ccfbc..6104a3e5a6 100644 --- a/pcbnew/dialogs/dialog_pns_settings_base.cpp +++ b/pcbnew/dialogs/dialog_pns_settings_base.cpp @@ -83,8 +83,10 @@ DIALOG_PNS_SETTINGS_BASE::DIALOG_PNS_SETTINGS_BASE( wxWindow* parent, wxWindowID bOptions->Add( m_suggestEnding, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); - m_optimizeDraggedTrack = new wxCheckBox( bOptions->GetStaticBox(), wxID_ANY, _("Optimize track being dragged"), wxDefaultPosition, wxDefaultSize, 0 ); - bOptions->Add( m_optimizeDraggedTrack, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); + m_optimizeEntireDraggedTrack = new wxCheckBox( bOptions->GetStaticBox(), wxID_ANY, _("Optimize entire track being dragged"), wxDefaultPosition, wxDefaultSize, 0 ); + m_optimizeEntireDraggedTrack->SetToolTip( _("When enabled, the entire track will be optimized and re-routed when dragged. When disabled, only the area near the segment being dragged will be optimized.") ); + + bOptions->Add( m_optimizeEntireDraggedTrack, 0, wxTOP|wxRIGHT|wxLEFT, 5 ); m_autoPosture = new wxCheckBox( bOptions->GetStaticBox(), wxID_ANY, _("Use mouse path to set track posture"), wxDefaultPosition, wxDefaultSize, 0 ); m_autoPosture->SetToolTip( _("When enabled, the posture of tracks will be guided by how the mouse is moved from the starting location") ); @@ -96,53 +98,6 @@ DIALOG_PNS_SETTINGS_BASE::DIALOG_PNS_SETTINGS_BASE( wxWindow* parent, wxWindowID bOptions->Add( m_fixAllSegments, 0, wxALL, 5 ); - wxBoxSizer* bEffort; - bEffort = new wxBoxSizer( wxHORIZONTAL ); - - m_effortLabel = new wxStaticText( bOptions->GetStaticBox(), wxID_ANY, _("Optimizer effort:"), wxDefaultPosition, wxDefaultSize, 0 ); - m_effortLabel->Wrap( -1 ); - m_effortLabel->SetToolTip( _("Defines how much time the router shall spend optimizing the routed/shoved traces.\nMore effort means cleaner routing (but slower), less effort means faster routing but somewhat jagged traces.") ); - - bEffort->Add( m_effortLabel, 0, wxALIGN_CENTER_VERTICAL|wxBOTTOM, 20 ); - - - bEffort->Add( 5, 0, 0, wxEXPAND, 5 ); - - wxBoxSizer* bSlider; - bSlider = new wxBoxSizer( wxVERTICAL ); - - m_effort = new wxSlider( bOptions->GetStaticBox(), wxID_ANY, 1, 0, 2, wxDefaultPosition, wxDefaultSize, wxSL_AUTOTICKS|wxSL_BOTTOM|wxSL_HORIZONTAL|wxSL_TOP ); - m_effort->SetMinSize( wxSize( -1,28 ) ); - - bSlider->Add( m_effort, 1, wxEXPAND|wxTOP, 5 ); - - wxBoxSizer* bSliderLabels; - bSliderLabels = new wxBoxSizer( wxHORIZONTAL ); - - m_lowLabel = new wxStaticText( bOptions->GetStaticBox(), wxID_ANY, _("low"), wxDefaultPosition, wxDefaultSize, 0 ); - m_lowLabel->Wrap( -1 ); - m_lowLabel->SetFont( wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - - bSliderLabels->Add( m_lowLabel, 0, 0, 5 ); - - - bSliderLabels->Add( 0, 0, 1, wxEXPAND, 5 ); - - m_highLabel = new wxStaticText( bOptions->GetStaticBox(), wxID_ANY, _("high"), wxDefaultPosition, wxDefaultSize, 0 ); - m_highLabel->Wrap( -1 ); - m_highLabel->SetFont( wxFont( 8, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL, false, wxEmptyString ) ); - - bSliderLabels->Add( m_highLabel, 0, 0, 5 ); - - - bSlider->Add( bSliderLabels, 0, wxEXPAND|wxBOTTOM, 5 ); - - - bEffort->Add( bSlider, 1, wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); - - - bOptions->Add( bEffort, 0, wxEXPAND|wxALL, 5 ); - bMainSizer->Add( bOptions, 1, wxEXPAND|wxALL, 5 ); diff --git a/pcbnew/dialogs/dialog_pns_settings_base.fbp b/pcbnew/dialogs/dialog_pns_settings_base.fbp index e6264aaafd..bd6deb731c 100644 --- a/pcbnew/dialogs/dialog_pns_settings_base.fbp +++ b/pcbnew/dialogs/dialog_pns_settings_base.fbp @@ -826,7 +826,7 @@ 0 0 wxID_ANY - Optimize track being dragged + Optimize entire track being dragged 0 @@ -834,7 +834,7 @@ 0 1 - m_optimizeDraggedTrack + m_optimizeEntireDraggedTrack 1 @@ -847,7 +847,7 @@ 0 - + When enabled, the entire track will be optimized and re-routed when dragged. When disabled, only the area near the segment being dragged will be optimized. wxFILTER_NONE wxDefaultValidator @@ -985,307 +985,6 @@ - - 5 - wxEXPAND|wxALL - 0 - - - bEffort - wxHORIZONTAL - none - - 20 - wxALIGN_CENTER_VERTICAL|wxBOTTOM - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - Optimizer effort: - 0 - - 0 - - - 0 - - 1 - m_effortLabel - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - Defines how much time the router shall spend optimizing the routed/shoved traces. More effort means cleaner routing (but slower), less effort means faster routing but somewhat jagged traces. - - - - -1 - - - - 5 - wxEXPAND - 0 - - 0 - protected - 5 - - - - 5 - wxEXPAND|wxTOP|wxRIGHT|wxLEFT - 1 - - - bSlider - wxVERTICAL - none - - 5 - wxEXPAND|wxTOP - 1 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - - 0 - 0 - wxID_ANY - 2 - - 1 - - 0 - -1,-1 - 0 - -1,28 - 1 - m_effort - 1 - - - protected - 1 - - Resizable - 1 - - wxSL_AUTOTICKS|wxSL_BOTTOM|wxSL_HORIZONTAL|wxSL_TOP - - 0 - - - wxFILTER_NONE - wxDefaultValidator - - 1 - - - - - - - 5 - wxEXPAND|wxBOTTOM - 0 - - - bSliderLabels - wxHORIZONTAL - none - - 5 - - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - ,90,90,8,70,0 - 0 - 0 - wxID_ANY - low - 0 - - 0 - - - 0 - - 1 - m_lowLabel - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - 5 - wxEXPAND - 1 - - 0 - protected - 0 - - - - 5 - - 0 - - 1 - 1 - 1 - 1 - - - - - - - - 1 - 0 - 1 - - 1 - 0 - Dock - 0 - Left - 1 - - 1 - ,90,90,8,70,0 - 0 - 0 - wxID_ANY - high - 0 - - 0 - - - 0 - - 1 - m_highLabel - 1 - - - protected - 1 - - Resizable - 1 - - - - 0 - - - - - -1 - - - - - - - - diff --git a/pcbnew/dialogs/dialog_pns_settings_base.h b/pcbnew/dialogs/dialog_pns_settings_base.h index db8a83ca1b..f2b4d2ec55 100644 --- a/pcbnew/dialogs/dialog_pns_settings_base.h +++ b/pcbnew/dialogs/dialog_pns_settings_base.h @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -48,13 +47,9 @@ class DIALOG_PNS_SETTINGS_BASE : public DIALOG_SHIM wxCheckBox* m_smoothDragged; wxCheckBox* m_violateDrc; wxCheckBox* m_suggestEnding; - wxCheckBox* m_optimizeDraggedTrack; + wxCheckBox* m_optimizeEntireDraggedTrack; wxCheckBox* m_autoPosture; wxCheckBox* m_fixAllSegments; - wxStaticText* m_effortLabel; - wxSlider* m_effort; - wxStaticText* m_lowLabel; - wxStaticText* m_highLabel; wxStdDialogButtonSizer* m_stdButtons; wxButton* m_stdButtonsOK; wxButton* m_stdButtonsCancel; diff --git a/pcbnew/router/pns_dragger.cpp b/pcbnew/router/pns_dragger.cpp index 5e5844ab81..46c8c880b0 100644 --- a/pcbnew/router/pns_dragger.cpp +++ b/pcbnew/router/pns_dragger.cpp @@ -392,34 +392,36 @@ void DRAGGER::optimizeAndUpdateDraggedLine( LINE& aDragged, const LINE& aOrig, c lockV = aDragged.CLine().NearestPoint( aP ); - if( Settings().GetOptimizeDraggedTrack() ) + OPTIMIZER optimizer( m_lastNode ); + + int effort = OPTIMIZER::MERGE_SEGMENTS | OPTIMIZER::KEEP_TOPOLOGY; + + if( !Settings().GetOptimizeEntireDraggedTrack() ) + effort |= OPTIMIZER::RESTRICT_AREA; + + optimizer.SetEffortLevel( effort ); + + OPT_BOX2I affectedArea = aDragged.ChangedArea( &aOrig ); + VECTOR2I anchor( aP ); + + if( aDragged.CLine().Find( aP ) < 0 ) { - OPTIMIZER optimizer( m_lastNode ); + anchor = aDragged.CLine().NearestPoint( aP ); + } - optimizer.SetEffortLevel( OPTIMIZER::MERGE_SEGMENTS | OPTIMIZER::KEEP_TOPOLOGY ); + optimizer.SetPreserveVertex( anchor ); - OPT_BOX2I affectedArea = aDragged.ChangedArea( &aOrig ); - VECTOR2I anchor( aP ); + if( affectedArea ) + { + Dbg()->AddPoint( anchor, 3 ); + Dbg()->AddBox( *affectedArea, 2 ); + optimizer.SetRestrictArea( *affectedArea ); + optimizer.Optimize( &aDragged ); - if( aDragged.CLine().Find( aP ) < 0 ) - { - anchor = aDragged.CLine().NearestPoint( aP ); - } + OPT_BOX2I optArea = aDragged.ChangedArea( &aOrig ); - optimizer.SetPreserveVertex( anchor ); - - if( affectedArea ) - { - Dbg()->AddPoint( anchor, 3 ); - Dbg()->AddBox( *affectedArea, 2 ); - optimizer.SetRestrictArea( *affectedArea ); - optimizer.Optimize( &aDragged ); - - OPT_BOX2I optArea = aDragged.ChangedArea( &aOrig ); - - if( optArea ) - Dbg()->AddBox( *optArea, 4 ); - } + if( optArea ) + Dbg()->AddBox( *optArea, 4 ); } m_lastNode->Add( aDragged ); @@ -547,6 +549,8 @@ bool DRAGGER::dragShove( const VECTOR2I& aP ) else dragged.DragCorner( aP, m_draggedSegmentIndex ); + Dbg()->AddLine( dragged.CLine(), 5, 10000 ); + SHOVE::SHOVE_STATUS st = m_shove->ShoveLines( dragged ); if( st == SHOVE::SH_OK ) diff --git a/pcbnew/router/pns_routing_settings.cpp b/pcbnew/router/pns_routing_settings.cpp index 9324624d64..edbd105bf3 100644 --- a/pcbnew/router/pns_routing_settings.cpp +++ b/pcbnew/router/pns_routing_settings.cpp @@ -50,7 +50,7 @@ ROUTING_SETTINGS::ROUTING_SETTINGS( JSON_SETTINGS* aParent, const std::string& a m_inlineDragEnabled = false; m_snapToTracks = false; m_snapToPads = false; - m_optimizeDraggedTrack = true; + m_optimizeEntireDraggedTrack = false; m_cornerMode = CORNER_MODE::MITERED_45; m_autoPosture = true; m_fixAllSegments = true; @@ -90,7 +90,8 @@ ROUTING_SETTINGS::ROUTING_SETTINGS( JSON_SETTINGS* aParent, const std::string& a m_params.emplace_back( new PARAM( "inline_drag", &m_inlineDragEnabled, false ) ); m_params.emplace_back( new PARAM( "snap_to_tracks", &m_snapToTracks, false ) ); m_params.emplace_back( new PARAM( "snap_to_pads", &m_snapToPads, false ) ); - m_params.emplace_back( new PARAM( "optimize_dragged_track", &m_optimizeDraggedTrack, true ) ); + m_params.emplace_back( new PARAM( "optimize_dragged_track", + &m_optimizeEntireDraggedTrack, false ) ); m_params.emplace_back( new PARAM( "auto_posture", &m_autoPosture, true ) ); m_params.emplace_back( new PARAM( "fix_all_segments", &m_fixAllSegments, true ) ); diff --git a/pcbnew/router/pns_routing_settings.h b/pcbnew/router/pns_routing_settings.h index 0bf62dd240..c3a26f56c5 100644 --- a/pcbnew/router/pns_routing_settings.h +++ b/pcbnew/router/pns_routing_settings.h @@ -155,8 +155,8 @@ public: CORNER_MODE GetCornerMode() const { return m_cornerMode; } void SetCornerMode( CORNER_MODE aMode ) { m_cornerMode = aMode; } - bool GetOptimizeDraggedTrack() const { return m_optimizeDraggedTrack; } - void SetOptimizeDraggedTrack( bool aEnable ) { m_optimizeDraggedTrack = aEnable; } + bool GetOptimizeEntireDraggedTrack() const { return m_optimizeEntireDraggedTrack; } + void SetOptimizeEntireDraggedTrack( bool aEnable ) { m_optimizeEntireDraggedTrack = aEnable; } bool GetAutoPosture() const { return m_autoPosture; } void SetAutoPosture( bool aEnable ) { m_autoPosture = aEnable; } @@ -178,7 +178,7 @@ private: bool m_inlineDragEnabled; bool m_snapToTracks; bool m_snapToPads; - bool m_optimizeDraggedTrack; + bool m_optimizeEntireDraggedTrack; bool m_autoPosture; bool m_fixAllSegments;