From c17ceb58751728c4298d770c73c4a14b31b1ce9b Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Fri, 30 Oct 2020 21:08:38 +0000 Subject: [PATCH] Make sure proxy items at least get the right net for clearance lines. Fixes https://gitlab.com/kicad/code/kicad/issues/5980 --- pcbnew/router/pns_kicad_iface.cpp | 6 ++++-- pcbnew/router/pns_node.h | 1 - pcbnew/router/pns_router.cpp | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp index 7a4780d587..532624aa91 100644 --- a/pcbnew/router/pns_kicad_iface.cpp +++ b/pcbnew/router/pns_kicad_iface.cpp @@ -78,7 +78,6 @@ public: bool aNeedMTV, VECTOR2I* aMTV ) const 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 DpNetPolarity( int aNet ) 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: dummyArc.SetLayer( (PCB_LAYER_ID) aLayer ); + dummyArc.SetNetCode( aItemA->Net() ); parentA = &dummyArc; break; case PNS::ITEM::VIA_T: dummyVia.SetLayer( (PCB_LAYER_ID) aLayer ); + dummyVia.SetNetCode( aItemA->Net() ); parentA = &dummyVia; break; default: dummyTrack.SetLayer( (PCB_LAYER_ID) aLayer ); + dummyTrack.SetNetCode( aItemA->Net() ); parentA = &dummyTrack; break; } @@ -287,7 +289,7 @@ int PNS_PCBNEW_RULE_RESOLVER::Clearance( const PNS::ITEM* aA, const PNS::ITEM* a bool ok = false; int rv = 0; - if( IsDiffPair( aA, aB ) ) + if( aB && IsDiffPair( aA, aB ) ) { // for diff pairs, we use the gap value for shoving/dragging if( QueryConstraint( PNS::CONSTRAINT_TYPE::CT_DIFF_PAIR_GAP, aA, aB, aA->Layer(), diff --git a/pcbnew/router/pns_node.h b/pcbnew/router/pns_node.h index 9a70838c44..ba683ed763 100644 --- a/pcbnew/router/pns_node.h +++ b/pcbnew/router/pns_node.h @@ -84,7 +84,6 @@ public: bool aNeedMTV, VECTOR2I* aMTV ) const = 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 DpNetPolarity( int aNet ) = 0; virtual bool DpNetPair( const ITEM* aItem, int& aNetP, int& aNetN ) = 0; diff --git a/pcbnew/router/pns_router.cpp b/pcbnew/router/pns_router.cpp index e1146ea1f8..12b96e7ca4 100644 --- a/pcbnew/router/pns_router.cpp +++ b/pcbnew/router/pns_router.cpp @@ -330,7 +330,7 @@ void ROUTER::updateView( NODE* aNode, ITEM_SET& aCurrent, bool aDragging ) for( auto item : added ) { - int clearance = 0; //GetRuleResolver()->Clearance( item->Net() ); + int clearance = GetRuleResolver()->Clearance( item, nullptr ); m_iface->DisplayItem( item, -1, clearance, aDragging ); } @@ -364,7 +364,7 @@ void ROUTER::movePlacing( const VECTOR2I& aP, ITEM* aEndItem ) continue; const LINE* l = static_cast( item ); - int clearance = 0; //GetRuleResolver()->Clearance( item->Net() ); + int clearance = GetRuleResolver()->Clearance( item, nullptr ); m_iface->DisplayItem( l, -1, clearance );