Browse Source

PNS: Update track widths during routing

(Cherry-picked from commit 3f2b6f7ae0)
This allows routing through, for example, neck downs defined
based on courtyard DRC rules
8.0
JamesJCode 1 year ago
parent
commit
b48051d52f
  1. 15
      pcbnew/router/router_tool.cpp
  2. 2
      pcbnew/router/router_tool.h

15
pcbnew/router/router_tool.cpp

@ -714,12 +714,12 @@ void ROUTER_TOOL::switchLayerOnViaPlacement()
m_router->SwitchLayer( *newLayer );
m_lastTargetLayer = *newLayer;
updateSizesAfterLayerSwitch( ToLAYER_ID( *newLayer ), m_endSnapPoint );
updateSizesAfterRouterEvent( ToLAYER_ID( *newLayer ), m_endSnapPoint );
UpdateMessagePanel();
}
void ROUTER_TOOL::updateSizesAfterLayerSwitch( PCB_LAYER_ID targetLayer, const VECTOR2I& aPos )
void ROUTER_TOOL::updateSizesAfterRouterEvent( PCB_LAYER_ID targetLayer, const VECTOR2I& aPos )
{
std::vector<PNS::NET_HANDLE> nets = m_router->GetCurrentNets();
@ -983,7 +983,7 @@ int ROUTER_TOOL::handleLayerSwitch( const TOOL_EVENT& aEvent, bool aForceVia )
if( !aForceVia && m_router && m_router->SwitchLayer( targetLayer ) )
{
updateEndItem( aEvent );
updateSizesAfterLayerSwitch( targetLayer, m_endSnapPoint );
updateSizesAfterRouterEvent( targetLayer, m_endSnapPoint );
m_router->Move( m_endSnapPoint, m_endItem ); // refresh
return 0;
}
@ -1427,7 +1427,14 @@ void ROUTER_TOOL::performRouting( VECTOR2D aStartPosition )
break;
if( needLayerSwitch )
{
switchLayerOnViaPlacement();
}
else
{
updateSizesAfterRouterEvent(
static_cast<PCB_LAYER_ID>( m_router->GetCurrentLayer() ), m_endSnapPoint );
}
// Synchronize the indicated layer
syncRouterAndFrameLayer();
@ -1838,7 +1845,7 @@ int ROUTER_TOOL::MainLoop( const TOOL_EVENT& aEvent )
{
m_router->SwitchLayer( frame->GetActiveLayer() );
updateStartItem( *evt );
updateSizesAfterLayerSwitch( frame->GetActiveLayer(), m_startSnapPoint );
updateSizesAfterRouterEvent( frame->GetActiveLayer(), m_startSnapPoint );
}
else if( evt->IsKeyPressed() )
{

2
pcbnew/router/router_tool.h

@ -79,7 +79,7 @@ private:
int getStartLayer( const PNS::ITEM* aItem );
void switchLayerOnViaPlacement();
void updateSizesAfterLayerSwitch( PCB_LAYER_ID targetLayer, const VECTOR2I& aPos );
void updateSizesAfterRouterEvent( PCB_LAYER_ID targetLayer, const VECTOR2I& aPos );
int onLayerCommand( const TOOL_EVENT& aEvent );
int onViaCommand( const TOOL_EVENT& aEvent );

Loading…
Cancel
Save