Use netclass values when reaching netclass entry.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/15774

(cherry picked from commit 904bdc3c66)
This commit is contained in:
Jeff Young 2023-10-01 21:01:18 +01:00
parent c3446f9c2d
commit fd98188ee4
1 changed files with 62 additions and 48 deletions

View File

@ -699,7 +699,7 @@ int BOARD_EDITOR_CONTROL::TogglePythonConsole( const TOOL_EVENT& aEvent )
// Track & via size control // Track & via size control
int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent ) int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
{ {
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings(); BOARD_DESIGN_SETTINGS& bds = getModel<BOARD>()->GetDesignSettings();
PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection(); PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
if( m_frame->ToolStackIsEmpty() if( m_frame->ToolStackIsEmpty()
@ -713,10 +713,12 @@ int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
{ {
PCB_TRACK* track = static_cast<PCB_TRACK*>( item ); PCB_TRACK* track = static_cast<PCB_TRACK*>( item );
// Note: skip first entry which is the current netclass value for( int i = 0; i < (int) bds.m_TrackWidthList.size(); ++i )
for( int i = 1; i < (int) designSettings.m_TrackWidthList.size(); ++i )
{ {
int candidate = designSettings.m_TrackWidthList[ i ]; int candidate = bds.m_NetSettings->m_DefaultNetClass->GetTrackWidth();
if( i > 0 )
candidate = bds.m_TrackWidthList[ i ];
if( candidate > track->GetWidth() ) if( candidate > track->GetWidth() )
{ {
@ -737,26 +739,26 @@ int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
if( routerTool && routerTool->IsToolActive() if( routerTool && routerTool->IsToolActive()
&& routerTool->Router()->Mode() == PNS::PNS_MODE_ROUTE_DIFF_PAIR ) && routerTool->Router()->Mode() == PNS::PNS_MODE_ROUTE_DIFF_PAIR )
{ {
int widthIndex = designSettings.GetDiffPairIndex() + 1; int widthIndex = (int) bds.GetDiffPairIndex() + 1;
// If we go past the last track width entry in the list, start over at the beginning // If we go past the last track width entry in the list, start over at the beginning
if( widthIndex >= (int) designSettings.m_DiffPairDimensionsList.size() ) if( widthIndex >= (int) bds.m_DiffPairDimensionsList.size() )
widthIndex = 0; widthIndex = 0;
designSettings.SetDiffPairIndex( widthIndex ); bds.SetDiffPairIndex( widthIndex );
designSettings.UseCustomDiffPairDimensions( false ); bds.UseCustomDiffPairDimensions( false );
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true ); m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
} }
else else
{ {
int widthIndex = designSettings.GetTrackWidthIndex(); int widthIndex = (int) bds.GetTrackWidthIndex();
if( routerTool && routerTool->IsToolActive() if( routerTool && routerTool->IsToolActive()
&& routerTool->Router()->GetState() == PNS::ROUTER::RouterState::ROUTE_TRACK && routerTool->Router()->GetState() == PNS::ROUTER::RouterState::ROUTE_TRACK
&& designSettings.m_UseConnectedTrackWidth && !designSettings.m_TempOverrideTrackWidth ) && bds.m_UseConnectedTrackWidth && !bds.m_TempOverrideTrackWidth )
{ {
designSettings.m_TempOverrideTrackWidth = true; bds.m_TempOverrideTrackWidth = true;
} }
else else
{ {
@ -764,11 +766,11 @@ int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
} }
// If we go past the last track width entry in the list, start over at the beginning // If we go past the last track width entry in the list, start over at the beginning
if( widthIndex >= (int) designSettings.m_TrackWidthList.size() ) if( widthIndex >= (int) bds.m_TrackWidthList.size() )
widthIndex = 0; widthIndex = 0;
designSettings.SetTrackWidthIndex( widthIndex ); bds.SetTrackWidthIndex( widthIndex );
designSettings.UseCustomTrackViaSize( false ); bds.UseCustomTrackViaSize( false );
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true ); m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
} }
@ -779,7 +781,7 @@ int BOARD_EDITOR_CONTROL::TrackWidthInc( const TOOL_EVENT& aEvent )
int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent ) int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
{ {
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings(); BOARD_DESIGN_SETTINGS& bds = getModel<BOARD>()->GetDesignSettings();
PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection(); PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
if( m_frame->ToolStackIsEmpty() if( m_frame->ToolStackIsEmpty()
@ -793,10 +795,12 @@ int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
{ {
PCB_TRACK* track = static_cast<PCB_TRACK*>( item ); PCB_TRACK* track = static_cast<PCB_TRACK*>( item );
// Note: skip first entry which is the current netclass value for( int i = (int) bds.m_TrackWidthList.size() - 1; i >= 0; --i )
for( int i = designSettings.m_TrackWidthList.size() - 1; i >= 1; --i )
{ {
int candidate = designSettings.m_TrackWidthList[ i ]; int candidate = bds.m_NetSettings->m_DefaultNetClass->GetTrackWidth();
if( i > 0 )
candidate = bds.m_TrackWidthList[ i ];
if( candidate < track->GetWidth() ) if( candidate < track->GetWidth() )
{ {
@ -817,26 +821,26 @@ int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
if( routerTool && routerTool->IsToolActive() if( routerTool && routerTool->IsToolActive()
&& routerTool->Router()->Mode() == PNS::PNS_MODE_ROUTE_DIFF_PAIR ) && routerTool->Router()->Mode() == PNS::PNS_MODE_ROUTE_DIFF_PAIR )
{ {
int widthIndex = designSettings.GetDiffPairIndex() - 1; int widthIndex = (int) bds.GetDiffPairIndex() - 1;
// If we get to the lowest entry start over at the highest // If we get to the lowest entry start over at the highest
if( widthIndex < 0 ) if( widthIndex < 0 )
widthIndex = designSettings.m_DiffPairDimensionsList.size() - 1; widthIndex = (int) bds.m_DiffPairDimensionsList.size() - 1;
designSettings.SetDiffPairIndex( widthIndex ); bds.SetDiffPairIndex( widthIndex );
designSettings.UseCustomDiffPairDimensions( false ); bds.UseCustomDiffPairDimensions( false );
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true ); m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
} }
else else
{ {
int widthIndex = designSettings.GetTrackWidthIndex(); int widthIndex = (int) bds.GetTrackWidthIndex();
if( routerTool && routerTool->IsToolActive() if( routerTool && routerTool->IsToolActive()
&& routerTool->Router()->GetState() == PNS::ROUTER::RouterState::ROUTE_TRACK && routerTool->Router()->GetState() == PNS::ROUTER::RouterState::ROUTE_TRACK
&& designSettings.m_UseConnectedTrackWidth && !designSettings.m_TempOverrideTrackWidth ) && bds.m_UseConnectedTrackWidth && !bds.m_TempOverrideTrackWidth )
{ {
designSettings.m_TempOverrideTrackWidth = true; bds.m_TempOverrideTrackWidth = true;
} }
else else
{ {
@ -845,10 +849,10 @@ int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
// If we get to the lowest entry start over at the highest // If we get to the lowest entry start over at the highest
if( widthIndex < 0 ) if( widthIndex < 0 )
widthIndex = designSettings.m_TrackWidthList.size() - 1; widthIndex = (int) bds.m_TrackWidthList.size() - 1;
designSettings.SetTrackWidthIndex( widthIndex ); bds.SetTrackWidthIndex( widthIndex );
designSettings.UseCustomTrackViaSize( false ); bds.UseCustomTrackViaSize( false );
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true ); m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
} }
@ -859,7 +863,7 @@ int BOARD_EDITOR_CONTROL::TrackWidthDec( const TOOL_EVENT& aEvent )
int BOARD_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent ) int BOARD_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
{ {
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings(); BOARD_DESIGN_SETTINGS& bds = getModel<BOARD>()->GetDesignSettings();
PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection(); PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
if( m_frame->ToolStackIsEmpty() if( m_frame->ToolStackIsEmpty()
@ -873,13 +877,19 @@ int BOARD_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
{ {
PCB_VIA* via = static_cast<PCB_VIA*>( item ); PCB_VIA* via = static_cast<PCB_VIA*>( item );
for( VIA_DIMENSION candidate : designSettings.m_ViasDimensionsList ) for( int i = 0; i < (int) bds.m_ViasDimensionsList.size(); ++i )
{ {
if( candidate.m_Diameter > via->GetWidth() ) VIA_DIMENSION dims( bds.m_NetSettings->m_DefaultNetClass->GetViaDiameter(),
bds.m_NetSettings->m_DefaultNetClass->GetViaDrill() );
if( i> 0 )
dims = bds.m_ViasDimensionsList[ i ];
if( dims.m_Diameter > via->GetWidth() )
{ {
commit.Modify( via ); commit.Modify( via );
via->SetWidth( candidate.m_Diameter ); via->SetWidth( dims.m_Diameter );
via->SetDrill( candidate.m_Drill ); via->SetDrill( dims.m_Drill );
break; break;
} }
} }
@ -890,14 +900,14 @@ int BOARD_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
} }
else else
{ {
int sizeIndex = designSettings.GetViaSizeIndex() + 1; int sizeIndex = (int) bds.GetViaSizeIndex() + 1;
// If we go past the last via entry in the list, start over at the beginning // If we go past the last via entry in the list, start over at the beginning
if( sizeIndex >= (int) designSettings.m_ViasDimensionsList.size() ) if( sizeIndex >= (int) bds.m_ViasDimensionsList.size() )
sizeIndex = 0; sizeIndex = 0;
designSettings.SetViaSizeIndex( sizeIndex ); bds.SetViaSizeIndex( sizeIndex );
designSettings.UseCustomTrackViaSize( false ); bds.UseCustomTrackViaSize( false );
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true ); m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
} }
@ -908,7 +918,7 @@ int BOARD_EDITOR_CONTROL::ViaSizeInc( const TOOL_EVENT& aEvent )
int BOARD_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent ) int BOARD_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent )
{ {
BOARD_DESIGN_SETTINGS& designSettings = getModel<BOARD>()->GetDesignSettings(); BOARD_DESIGN_SETTINGS& bds = getModel<BOARD>()->GetDesignSettings();
PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection(); PCB_SELECTION& selection = m_toolMgr->GetTool<PCB_SELECTION_TOOL>()->GetSelection();
if( m_frame->ToolStackIsEmpty() if( m_frame->ToolStackIsEmpty()
@ -922,15 +932,19 @@ int BOARD_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent )
{ {
PCB_VIA* via = static_cast<PCB_VIA*>( item ); PCB_VIA* via = static_cast<PCB_VIA*>( item );
for( int i = designSettings.m_ViasDimensionsList.size() - 1; i >= 0; --i ) for( int i = (int) bds.m_ViasDimensionsList.size() - 1; i >= 0; --i )
{ {
VIA_DIMENSION candidate = designSettings.m_ViasDimensionsList[ i ]; VIA_DIMENSION dims( bds.m_NetSettings->m_DefaultNetClass->GetViaDiameter(),
bds.m_NetSettings->m_DefaultNetClass->GetViaDrill() );
if( candidate.m_Diameter < via->GetWidth() ) if( i > 0 )
dims = bds.m_ViasDimensionsList[ i ];
if( dims.m_Diameter < via->GetWidth() )
{ {
commit.Modify( via ); commit.Modify( via );
via->SetWidth( candidate.m_Diameter ); via->SetWidth( dims.m_Diameter );
via->SetDrill( candidate.m_Drill ); via->SetDrill( dims.m_Drill );
break; break;
} }
} }
@ -944,17 +958,17 @@ int BOARD_EDITOR_CONTROL::ViaSizeDec( const TOOL_EVENT& aEvent )
int sizeIndex = 0; // Assume we only have a single via size entry int sizeIndex = 0; // Assume we only have a single via size entry
// If there are more, cycle through them backwards // If there are more, cycle through them backwards
if( designSettings.m_ViasDimensionsList.size() > 0 ) if( bds.m_ViasDimensionsList.size() > 0 )
{ {
sizeIndex = designSettings.GetViaSizeIndex() - 1; sizeIndex = (int) bds.GetViaSizeIndex() - 1;
// If we get to the lowest entry start over at the highest // If we get to the lowest entry start over at the highest
if( sizeIndex < 0 ) if( sizeIndex < 0 )
sizeIndex = designSettings.m_ViasDimensionsList.size() - 1; sizeIndex = (int) bds.m_ViasDimensionsList.size() - 1;
} }
designSettings.SetViaSizeIndex( sizeIndex ); bds.SetViaSizeIndex( sizeIndex );
designSettings.UseCustomTrackViaSize( false ); bds.UseCustomTrackViaSize( false );
m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true ); m_toolMgr->RunAction( PCB_ACTIONS::trackViaSizeChanged, true );
} }