Broaden reset-sizes-after-layer-switch algorithm.
Fixes https://gitlab.com/kicad/code/kicad/issues/12576
This commit is contained in:
parent
6927e75eae
commit
40ad5b6de3
|
@ -655,10 +655,13 @@ void ROUTER_TOOL::switchLayerOnViaPlacement()
|
||||||
m_router->SwitchLayer( *newLayer );
|
m_router->SwitchLayer( *newLayer );
|
||||||
m_lastTargetLayer = *newLayer;
|
m_lastTargetLayer = *newLayer;
|
||||||
|
|
||||||
// NB: track and diff-pair values may have changed if layer-specific rules are in play
|
updateSizesAfterLayerSwitch( ToLAYER_ID( *newLayer ) );
|
||||||
|
}
|
||||||
|
|
||||||
PCB_LAYER_ID targetLayer = ToLAYER_ID( *newLayer );
|
|
||||||
std::vector<int> nets = m_router->GetCurrentNets();
|
void ROUTER_TOOL::updateSizesAfterLayerSwitch( PCB_LAYER_ID targetLayer )
|
||||||
|
{
|
||||||
|
std::vector<int> nets = m_router->GetCurrentNets();
|
||||||
|
|
||||||
PNS::SIZES_SETTINGS sizes = m_router->Sizes();
|
PNS::SIZES_SETTINGS sizes = m_router->Sizes();
|
||||||
BOARD_DESIGN_SETTINGS& bds = board()->GetDesignSettings();
|
BOARD_DESIGN_SETTINGS& bds = board()->GetDesignSettings();
|
||||||
|
@ -875,6 +878,7 @@ int ROUTER_TOOL::handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia )
|
||||||
|
|
||||||
if( !aForceVia && m_router && m_router->SwitchLayer( targetLayer ) )
|
if( !aForceVia && m_router && m_router->SwitchLayer( targetLayer ) )
|
||||||
{
|
{
|
||||||
|
updateSizesAfterLayerSwitch( targetLayer );
|
||||||
updateEndItem( aEvent );
|
updateEndItem( aEvent );
|
||||||
m_router->Move( m_endSnapPoint, m_endItem ); // refresh
|
m_router->Move( m_endSnapPoint, m_endItem ); // refresh
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1679,6 +1683,7 @@ int ROUTER_TOOL::MainLoop( const TOOL_EVENT& aEvent )
|
||||||
else if( evt->IsAction( &PCB_ACTIONS::layerChanged ) )
|
else if( evt->IsAction( &PCB_ACTIONS::layerChanged ) )
|
||||||
{
|
{
|
||||||
m_router->SwitchLayer( frame->GetActiveLayer() );
|
m_router->SwitchLayer( frame->GetActiveLayer() );
|
||||||
|
updateSizesAfterLayerSwitch( frame->GetActiveLayer() );
|
||||||
updateStartItem( *evt );
|
updateStartItem( *evt );
|
||||||
}
|
}
|
||||||
else if( evt->IsKeyPressed() )
|
else if( evt->IsKeyPressed() )
|
||||||
|
|
|
@ -76,6 +76,7 @@ private:
|
||||||
|
|
||||||
int getStartLayer( const PNS::ITEM* aItem );
|
int getStartLayer( const PNS::ITEM* aItem );
|
||||||
void switchLayerOnViaPlacement();
|
void switchLayerOnViaPlacement();
|
||||||
|
void updateSizesAfterLayerSwitch( PCB_LAYER_ID targetLayer );
|
||||||
bool getNearestRatnestAnchor( VECTOR2I& aPoint, LAYER_RANGE& aLayers );
|
bool getNearestRatnestAnchor( VECTOR2I& aPoint, LAYER_RANGE& aLayers );
|
||||||
|
|
||||||
int onLayerCommand( const TOOL_EVENT& aEvent );
|
int onLayerCommand( const TOOL_EVENT& aEvent );
|
||||||
|
|
Loading…
Reference in New Issue