pcbnew: Show clearance when editing tracks

When requested by display options, we should show the track clearance
when dragging tracks.

Fixes: lp:1818343
* https://bugs.launchpad.net/kicad/+bug/1818343

(cherry picked from commit cf63ae7ae2)
This commit is contained in:
Seth Hillbrand 2019-04-07 21:24:30 -07:00
parent f5a2eb1ab0
commit 577b9f478b
4 changed files with 34 additions and 12 deletions

View File

@ -1092,7 +1092,7 @@ void PNS_KICAD_IFACE::EraseView()
} }
void PNS_KICAD_IFACE::DisplayItem( const PNS::ITEM* aItem, int aColor, int aClearance ) void PNS_KICAD_IFACE::DisplayItem( const PNS::ITEM* aItem, int aColor, int aClearance, bool aEdit )
{ {
wxLogTrace( "PNS", "DisplayItem %p", aItem ); wxLogTrace( "PNS", "DisplayItem %p", aItem );
@ -1107,10 +1107,28 @@ void PNS_KICAD_IFACE::DisplayItem( const PNS::ITEM* aItem, int aColor, int aClea
if( m_dispOptions ) if( m_dispOptions )
{ {
auto clearanceDisp = m_dispOptions->m_ShowTrackClearanceMode; switch( m_dispOptions->m_ShowTrackClearanceMode )
pitem->ShowTrackClearance( clearanceDisp != PCB_DISPLAY_OPTIONS::DO_NOT_SHOW_CLEARANCE ); {
pitem->ShowViaClearance( clearanceDisp != PCB_DISPLAY_OPTIONS::DO_NOT_SHOW_CLEARANCE case PCB_DISPLAY_OPTIONS::DO_NOT_SHOW_CLEARANCE:
&& clearanceDisp != PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS ); pitem->ShowTrackClearance( false );
pitem->ShowViaClearance( false );
break;
case PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_ALWAYS:
case PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_AND_EDITED_TRACKS_AND_VIA_AREAS:
pitem->ShowTrackClearance( true );
pitem->ShowViaClearance( true );
break;
case PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS_AND_VIA_AREAS:
pitem->ShowTrackClearance( !aEdit );
pitem->ShowViaClearance( !aEdit );
break;
case PCB_DISPLAY_OPTIONS::SHOW_CLEARANCE_NEW_TRACKS:
pitem->ShowTrackClearance( !aEdit );
pitem->ShowViaClearance( false );
break;
}
} }
} }

View File

@ -53,7 +53,7 @@ public:
void SyncWorld( PNS::NODE* aWorld ) override; void SyncWorld( PNS::NODE* aWorld ) override;
void EraseView() override; void EraseView() override;
void HideItem( PNS::ITEM* aItem ) override; void HideItem( PNS::ITEM* aItem ) override;
void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0 ) override; void DisplayItem( const PNS::ITEM* aItem, int aColor = 0, int aClearance = 0, bool aEdit = false ) override;
void AddItem( PNS::ITEM* aItem ) override; void AddItem( PNS::ITEM* aItem ) override;
void RemoveItem( PNS::ITEM* aItem ) override; void RemoveItem( PNS::ITEM* aItem ) override;
void Commit() override; void Commit() override;

View File

@ -255,7 +255,7 @@ void ROUTER::moveDragging( const VECTOR2I& aP, ITEM* aEndItem )
m_dragger->Drag( aP ); m_dragger->Drag( aP );
ITEM_SET dragged = m_dragger->Traces(); ITEM_SET dragged = m_dragger->Traces();
updateView( m_dragger->CurrentNode(), dragged ); updateView( m_dragger->CurrentNode(), dragged, true );
} }
@ -290,7 +290,7 @@ void ROUTER::markViolations( NODE* aNode, ITEM_SET& aCurrent, NODE::ITEM_VECTOR&
} }
void ROUTER::updateView( NODE* aNode, ITEM_SET& aCurrent ) void ROUTER::updateView( NODE* aNode, ITEM_SET& aCurrent, bool aDragging )
{ {
NODE::ITEM_VECTOR removed, added; NODE::ITEM_VECTOR removed, added;
NODE::OBSTACLES obstacles; NODE::OBSTACLES obstacles;
@ -304,7 +304,11 @@ void ROUTER::updateView( NODE* aNode, ITEM_SET& aCurrent )
aNode->GetUpdatedItems( removed, added ); aNode->GetUpdatedItems( removed, added );
for( auto item : added ) for( auto item : added )
m_iface->DisplayItem( item ); {
int clearance = GetRuleResolver()->Clearance( item->Net() );
m_iface->DisplayItem( item, -1, clearance, aDragging );
}
for( auto item : removed ) for( auto item : removed )
m_iface->HideItem( item ); m_iface->HideItem( item );

View File

@ -93,7 +93,7 @@ enum DRAG_MODE
virtual void SyncWorld( NODE* aNode ) = 0; virtual void SyncWorld( NODE* aNode ) = 0;
virtual void AddItem( ITEM* aItem ) = 0; virtual void AddItem( ITEM* aItem ) = 0;
virtual void RemoveItem( ITEM* aItem ) = 0; virtual void RemoveItem( ITEM* aItem ) = 0;
virtual void DisplayItem( const ITEM* aItem, int aColor = -1, int aClearance = -1 ) = 0; virtual void DisplayItem( const ITEM* aItem, int aColor = -1, int aClearance = -1, bool aEdit = false ) = 0;
virtual void HideItem( ITEM* aItem ) = 0; virtual void HideItem( ITEM* aItem ) = 0;
virtual void Commit() = 0; virtual void Commit() = 0;
// virtual void Abort () = 0; // virtual void Abort () = 0;
@ -147,7 +147,7 @@ public:
void FlipPosture(); void FlipPosture();
void DisplayItem( const ITEM* aItem, int aColor = -1, int aClearance = -1 ); void DisplayItem( const ITEM* aItem, int aColor = -1, int aClearance = -1, bool aEdit = false );
void DisplayItems( const ITEM_SET& aItems ); void DisplayItems( const ITEM_SET& aItems );
void DeleteTraces( ITEM* aStartItem, bool aWholeTrack ); void DeleteTraces( ITEM* aStartItem, bool aWholeTrack );
void SwitchLayer( int layer ); void SwitchLayer( int layer );
@ -225,7 +225,7 @@ private:
void moveDragging( const VECTOR2I& aP, ITEM* aItem ); void moveDragging( const VECTOR2I& aP, ITEM* aItem );
void eraseView(); void eraseView();
void updateView( NODE* aNode, ITEM_SET& aCurrent ); void updateView( NODE* aNode, ITEM_SET& aCurrent, bool aDragging = false );
void clearViewFlags(); void clearViewFlags();