Ignore pads when selecting drag candidates in router tool.
Fixes: lp:1747156 * https://bugs.launchpad.net/kicad/+bug/1747156
This commit is contained in:
parent
b335ef0531
commit
d3e7efcd66
|
@ -113,7 +113,7 @@ void TOOL_BASE::Reset( RESET_REASON aReason )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ITEM* TOOL_BASE::pickSingleItem( const VECTOR2I& aWhere, int aNet, int aLayer )
|
ITEM* TOOL_BASE::pickSingleItem( const VECTOR2I& aWhere, int aNet, int aLayer, bool aIgnorePads )
|
||||||
{
|
{
|
||||||
int tl = getView()->GetTopLayer();
|
int tl = getView()->GetTopLayer();
|
||||||
|
|
||||||
|
@ -143,6 +143,9 @@ ITEM* TOOL_BASE::pickSingleItem( const VECTOR2I& aWhere, int aNet, int aLayer )
|
||||||
{
|
{
|
||||||
if( item->OfKind( ITEM::VIA_T | ITEM::SOLID_T ) )
|
if( item->OfKind( ITEM::VIA_T | ITEM::SOLID_T ) )
|
||||||
{
|
{
|
||||||
|
if( item->OfKind( ITEM::SOLID_T ) && aIgnorePads )
|
||||||
|
continue;
|
||||||
|
|
||||||
if( !prioritized[2] )
|
if( !prioritized[2] )
|
||||||
prioritized[2] = item;
|
prioritized[2] = item;
|
||||||
if( item->Layers().Overlaps( tl ) )
|
if( item->Layers().Overlaps( tl ) )
|
||||||
|
@ -227,7 +230,7 @@ bool TOOL_BASE::checkSnap( ITEM *aItem )
|
||||||
return doSnap;
|
return doSnap;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TOOL_BASE::updateStartItem( TOOL_EVENT& aEvent )
|
void TOOL_BASE::updateStartItem( TOOL_EVENT& aEvent, bool aIgnorePads )
|
||||||
{
|
{
|
||||||
int tl = getView()->GetTopLayer();
|
int tl = getView()->GetTopLayer();
|
||||||
VECTOR2I cp = controls()->GetCursorPosition();
|
VECTOR2I cp = controls()->GetCursorPosition();
|
||||||
|
@ -247,7 +250,7 @@ void TOOL_BASE::updateStartItem( TOOL_EVENT& aEvent )
|
||||||
p = cp;
|
p = cp;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_startItem = pickSingleItem( p );
|
m_startItem = pickSingleItem( p, -1, -1, aIgnorePads );
|
||||||
|
|
||||||
if( !snapEnabled && m_startItem && !m_startItem->Layers().Overlaps( tl ) )
|
if( !snapEnabled && m_startItem && !m_startItem->Layers().Overlaps( tl ) )
|
||||||
m_startItem = nullptr;
|
m_startItem = nullptr;
|
||||||
|
|
|
@ -56,9 +56,10 @@ public:
|
||||||
protected:
|
protected:
|
||||||
bool checkSnap( ITEM* aItem );
|
bool checkSnap( ITEM* aItem );
|
||||||
const VECTOR2I snapToItem( bool aEnabled, ITEM* aItem, VECTOR2I aP);
|
const VECTOR2I snapToItem( bool aEnabled, ITEM* aItem, VECTOR2I aP);
|
||||||
virtual ITEM* pickSingleItem( const VECTOR2I& aWhere, int aNet = -1, int aLayer = -1 );
|
virtual ITEM* pickSingleItem( const VECTOR2I& aWhere, int aNet = -1, int aLayer = -1,
|
||||||
|
bool aIgnorePads = false );
|
||||||
virtual void highlightNet( bool aEnabled, int aNetcode = -1 );
|
virtual void highlightNet( bool aEnabled, int aNetcode = -1 );
|
||||||
virtual void updateStartItem( TOOL_EVENT& aEvent );
|
virtual void updateStartItem( TOOL_EVENT& aEvent, bool aIgnorePads = false );
|
||||||
virtual void updateEndItem( const TOOL_EVENT& aEvent );
|
virtual void updateEndItem( const TOOL_EVENT& aEvent );
|
||||||
void deleteTraces( ITEM* aStartItem, bool aWholeTrack );
|
void deleteTraces( ITEM* aStartItem, bool aWholeTrack );
|
||||||
|
|
||||||
|
|
|
@ -893,17 +893,17 @@ int ROUTER_TOOL::mainLoop( PNS::ROUTER_MODE aMode )
|
||||||
}
|
}
|
||||||
else if( evt->IsAction( &PCB_ACTIONS::dragFreeAngle ) )
|
else if( evt->IsAction( &PCB_ACTIONS::dragFreeAngle ) )
|
||||||
{
|
{
|
||||||
updateStartItem( *evt );
|
updateStartItem( *evt, true );
|
||||||
performDragging( PNS::DM_ANY | PNS::DM_FREE_ANGLE );
|
performDragging( PNS::DM_ANY | PNS::DM_FREE_ANGLE );
|
||||||
}
|
}
|
||||||
else if( evt->IsAction( &PCB_ACTIONS::drag45Degree ) )
|
else if( evt->IsAction( &PCB_ACTIONS::drag45Degree ) )
|
||||||
{
|
{
|
||||||
updateStartItem( *evt );
|
updateStartItem( *evt, true );
|
||||||
performDragging( PNS::DM_ANY );
|
performDragging( PNS::DM_ANY );
|
||||||
}
|
}
|
||||||
else if( evt->IsAction( &PCB_ACTIONS::breakTrack ) )
|
else if( evt->IsAction( &PCB_ACTIONS::breakTrack ) )
|
||||||
{
|
{
|
||||||
updateStartItem( *evt );
|
updateStartItem( *evt, true );
|
||||||
breakTrack( );
|
breakTrack( );
|
||||||
}
|
}
|
||||||
else if( evt->IsClick( BUT_LEFT ) || evt->IsAction( &ACT_NewTrack ) )
|
else if( evt->IsClick( BUT_LEFT ) || evt->IsAction( &ACT_NewTrack ) )
|
||||||
|
|
Loading…
Reference in New Issue