From 20b4226a258c8b56b06c8f19e5e0794128797a6f Mon Sep 17 00:00:00 2001 From: hauptmech Date: Fri, 30 Jun 2017 11:15:52 +0200 Subject: [PATCH] Router recognizes busses of differential pairs Fixes: lp:1443330 * https://bugs.launchpad.net/kicad/+bug/1443330 --- pcbnew/router/pns_diff_pair_placer.cpp | 34 -------------------------- pcbnew/router/pns_diff_pair_placer.h | 1 - pcbnew/router/pns_kicad_iface.cpp | 33 +++++++++++++++++++++---- 3 files changed, 28 insertions(+), 40 deletions(-) diff --git a/pcbnew/router/pns_diff_pair_placer.cpp b/pcbnew/router/pns_diff_pair_placer.cpp index 1cbc27ce77..92fd19f8b0 100644 --- a/pcbnew/router/pns_diff_pair_placer.cpp +++ b/pcbnew/router/pns_diff_pair_placer.cpp @@ -406,40 +406,6 @@ bool DIFF_PAIR_PLACER::SetLayer( int aLayer ) } -int DIFF_PAIR_PLACER::matchDpSuffix( wxString aNetName, wxString& aComplementNet, wxString& aBaseDpName ) -{ - int rv = 0; - - if( aNetName.EndsWith( "+" ) ) - { - aComplementNet = "-"; - rv = 1; - } - else if( aNetName.EndsWith( "_P" ) ) - { - aComplementNet = "_N"; - rv = 1; - } - else if( aNetName.EndsWith( "-" ) ) - { - aComplementNet = "+"; - rv = -1; - } - else if( aNetName.EndsWith( "_N" ) ) - { - aComplementNet = "_P"; - rv = -1; - } - - if( rv != 0 ) - { - aBaseDpName = aNetName.Left( aNetName.Length() - aComplementNet.Length() ); - } - - return rv; -} - - OPT_VECTOR2I DIFF_PAIR_PLACER::getDanglingAnchor( NODE* aNode, ITEM* aItem ) { switch( aItem->Kind() ) diff --git a/pcbnew/router/pns_diff_pair_placer.h b/pcbnew/router/pns_diff_pair_placer.h index cafb386926..d22424e964 100644 --- a/pcbnew/router/pns_diff_pair_placer.h +++ b/pcbnew/router/pns_diff_pair_placer.h @@ -228,7 +228,6 @@ private: bool findDpPrimitivePair( const VECTOR2I& aP, ITEM* aItem, DP_PRIMITIVE_PAIR& aPair ); OPT_VECTOR2I getDanglingAnchor( NODE* aNode, ITEM* aItem ); - int matchDpSuffix( wxString aNetName, wxString& aComplementNet, wxString& aBaseDpName ); bool attemptWalk( NODE* aNode, DIFF_PAIR* aCurrent, DIFF_PAIR& aWalk, bool aPFirst, bool aWindCw, bool aSolidsOnly ); bool propagateDpHeadForces ( const VECTOR2I& aP, VECTOR2I& aNewP ); diff --git a/pcbnew/router/pns_kicad_iface.cpp b/pcbnew/router/pns_kicad_iface.cpp index 2960f41e20..db8f7b4436 100644 --- a/pcbnew/router/pns_kicad_iface.cpp +++ b/pcbnew/router/pns_kicad_iface.cpp @@ -233,9 +233,9 @@ int PNS_PCBNEW_RULE_RESOLVER::matchDpSuffix( wxString aNetName, wxString& aCompl aComplementNet = "-"; rv = 1; } - else if( aNetName.EndsWith( "_P" ) ) + else if( aNetName.EndsWith( "P" ) ) { - aComplementNet = "_N"; + aComplementNet = "N"; rv = 1; } else if( aNetName.EndsWith( "-" ) ) @@ -243,12 +243,35 @@ int PNS_PCBNEW_RULE_RESOLVER::matchDpSuffix( wxString aNetName, wxString& aCompl aComplementNet = "+"; rv = -1; } - else if( aNetName.EndsWith( "_N" ) ) + else if( aNetName.EndsWith( "N" ) ) { - aComplementNet = "_P"; + aComplementNet = "P"; + rv = -1; + } + // Match P followed by 2 digits + else if( aNetName.Right( 2 ).IsNumber() && aNetName.Right( 3 ).Left( 1 ) == "P" ) + { + aComplementNet = "N" + aNetName.Right( 2 ); + rv = 1; + } + // Match P followed by 1 digit + else if( aNetName.Right( 1 ).IsNumber() && aNetName.Right( 2 ).Left( 1 ) == "P" ) + { + aComplementNet = "N" + aNetName.Right( 1 ); + rv = 1; + } + // Match N followed by 2 digits + else if( aNetName.Right( 2 ).IsNumber() && aNetName.Right( 3 ).Left( 1 ) == "N" ) + { + aComplementNet = "P" + aNetName.Right( 2 ); + rv = -1; + } + // Match N followed by 1 digit + else if( aNetName.Right( 1 ).IsNumber() && aNetName.Right( 2 ).Left( 1 ) == "N" ) + { + aComplementNet = "P" + aNetName.Right( 1 ); rv = -1; } - if( rv != 0 ) { aBaseDpName = aNetName.Left( aNetName.Length() - aComplementNet.Length() );