Make sure proxy items at least get the right net for clearance lines.

Fixes https://gitlab.com/kicad/code/kicad/issues/5980
This commit is contained in:
Jeff Young 2020-10-30 21:08:38 +00:00
parent de013ee60a
commit c17ceb5875
3 changed files with 6 additions and 5 deletions

View File

@ -78,7 +78,6 @@ public:
bool aNeedMTV, VECTOR2I* aMTV ) const override; bool aNeedMTV, VECTOR2I* aMTV ) const override;
virtual int Clearance( const PNS::ITEM* aA, const PNS::ITEM* aB ) override; virtual int Clearance( const PNS::ITEM* aA, const PNS::ITEM* aB ) override;
//virtual int Clearance( int aNetCode ) const override;
virtual int DpCoupledNet( int aNet ) override; virtual int DpCoupledNet( int aNet ) override;
virtual int DpNetPolarity( int aNet ) override; virtual int DpNetPolarity( int aNet ) override;
virtual bool DpNetPair( const PNS::ITEM* aItem, int& aNetP, int& aNetN ) override; virtual bool DpNetPair( const PNS::ITEM* aItem, int& aNetP, int& aNetN ) override;
@ -241,14 +240,17 @@ bool PNS_PCBNEW_RULE_RESOLVER::QueryConstraint( PNS::CONSTRAINT_TYPE aType,
{ {
case PNS::ITEM::ARC_T: case PNS::ITEM::ARC_T:
dummyArc.SetLayer( (PCB_LAYER_ID) aLayer ); dummyArc.SetLayer( (PCB_LAYER_ID) aLayer );
dummyArc.SetNetCode( aItemA->Net() );
parentA = &dummyArc; parentA = &dummyArc;
break; break;
case PNS::ITEM::VIA_T: case PNS::ITEM::VIA_T:
dummyVia.SetLayer( (PCB_LAYER_ID) aLayer ); dummyVia.SetLayer( (PCB_LAYER_ID) aLayer );
dummyVia.SetNetCode( aItemA->Net() );
parentA = &dummyVia; parentA = &dummyVia;
break; break;
default: default:
dummyTrack.SetLayer( (PCB_LAYER_ID) aLayer ); dummyTrack.SetLayer( (PCB_LAYER_ID) aLayer );
dummyTrack.SetNetCode( aItemA->Net() );
parentA = &dummyTrack; parentA = &dummyTrack;
break; break;
} }
@ -287,7 +289,7 @@ int PNS_PCBNEW_RULE_RESOLVER::Clearance( const PNS::ITEM* aA, const PNS::ITEM* a
bool ok = false; bool ok = false;
int rv = 0; int rv = 0;
if( IsDiffPair( aA, aB ) ) if( aB && IsDiffPair( aA, aB ) )
{ {
// for diff pairs, we use the gap value for shoving/dragging // for diff pairs, we use the gap value for shoving/dragging
if( QueryConstraint( PNS::CONSTRAINT_TYPE::CT_DIFF_PAIR_GAP, aA, aB, aA->Layer(), if( QueryConstraint( PNS::CONSTRAINT_TYPE::CT_DIFF_PAIR_GAP, aA, aB, aA->Layer(),

View File

@ -84,7 +84,6 @@ public:
bool aNeedMTV, VECTOR2I* aMTV ) const = 0; bool aNeedMTV, VECTOR2I* aMTV ) const = 0;
virtual int Clearance( const ITEM* aA, const ITEM* aB ) = 0; virtual int Clearance( const ITEM* aA, const ITEM* aB ) = 0;
//virtual int Clearance( int aNetCode ) const = 0;
virtual int DpCoupledNet( int aNet ) = 0; virtual int DpCoupledNet( int aNet ) = 0;
virtual int DpNetPolarity( int aNet ) = 0; virtual int DpNetPolarity( int aNet ) = 0;
virtual bool DpNetPair( const ITEM* aItem, int& aNetP, int& aNetN ) = 0; virtual bool DpNetPair( const ITEM* aItem, int& aNetP, int& aNetN ) = 0;

View File

@ -330,7 +330,7 @@ void ROUTER::updateView( NODE* aNode, ITEM_SET& aCurrent, bool aDragging )
for( auto item : added ) for( auto item : added )
{ {
int clearance = 0; //GetRuleResolver()->Clearance( item->Net() ); int clearance = GetRuleResolver()->Clearance( item, nullptr );
m_iface->DisplayItem( item, -1, clearance, aDragging ); m_iface->DisplayItem( item, -1, clearance, aDragging );
} }
@ -364,7 +364,7 @@ void ROUTER::movePlacing( const VECTOR2I& aP, ITEM* aEndItem )
continue; continue;
const LINE* l = static_cast<const LINE*>( item ); const LINE* l = static_cast<const LINE*>( item );
int clearance = 0; //GetRuleResolver()->Clearance( item->Net() ); int clearance = GetRuleResolver()->Clearance( item, nullptr );
m_iface->DisplayItem( l, -1, clearance ); m_iface->DisplayItem( l, -1, clearance );