PNS: Diff pairs can have different hole-to-hole size

Fixes https://gitlab.com/kicad/code/kicad/-/issues/13993


(cherry picked from commit f12f2b8420)
This commit is contained in:
Jon Evans 2023-02-17 19:55:52 -05:00
parent 8845cc0556
commit cb334be8c4
3 changed files with 17 additions and 2 deletions

View File

@ -559,7 +559,7 @@ bool DIFF_PAIR_PLACER::FindDpPrimitivePair( NODE* aWorld, const VECTOR2I& aP, IT
int DIFF_PAIR_PLACER::viaGap() const
{
return std::max( m_sizes.DiffPairViaGap(),
m_sizes.GetHoleToHole() + m_sizes.ViaDrill() - m_sizes.ViaDiameter() );
m_sizes.GetDiffPairHoleToHole() + m_sizes.ViaDrill() - m_sizes.ViaDiameter() );
}

View File

@ -736,10 +736,13 @@ bool PNS_KICAD_IFACE_BASE::ImportSizes( PNS::SIZES_SETTINGS& aSizes, PNS::ITEM*
aSizes.SetDiffPairViaGapSameAsTraceGap( false );
int holeToHoleMin = bds.m_HoleToHoleMin;
PNS::VIA dummyVia;
PNS::VIA dummyVia, coupledVia;
if( aStartItem )
{
dummyVia.SetNet( aStartItem->Net() );
coupledVia.SetNet( m_ruleResolver->DpCoupledNet( aStartItem->Net() ) );
}
if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_HOLE_TO_HOLE, &dummyVia,
&dummyVia, UNDEFINED_LAYER, &constraint ) )
@ -749,6 +752,14 @@ bool PNS_KICAD_IFACE_BASE::ImportSizes( PNS::SIZES_SETTINGS& aSizes, PNS::ITEM*
aSizes.SetHoleToHole( holeToHoleMin );
if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_HOLE_TO_HOLE, &dummyVia,
&coupledVia, UNDEFINED_LAYER, &constraint ) )
{
holeToHoleMin = constraint.m_Value.Min();
}
aSizes.SetDiffPairHoleToHole( holeToHoleMin );
return true;
}

View File

@ -122,6 +122,9 @@ public:
wxString GetDiffPairGapSource() const { return m_diffPairGapSource; }
void SetDiffPairGapSource( const wxString& aSource ) { m_diffPairGapSource = aSource; }
void SetDiffPairHoleToHole( int aHoleToHole ) { m_diffPairHoleToHole = aHoleToHole; }
int GetDiffPairHoleToHole() const { return m_diffPairHoleToHole; }
private:
int m_clearance;
int m_minClearance;
@ -138,6 +141,7 @@ private:
bool m_diffPairViaGapSameAsTraceGap;
int m_holeToHole;
int m_diffPairHoleToHole;
std::map<int, int> m_layerPairs;