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 @@
-
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;