Enforce hole-to-hole min when placing diffpair vias.

Fixes https://gitlab.com/kicad/code/kicad/issues/6931
This commit is contained in:
Jeff Young 2021-01-05 00:03:14 +00:00
parent 93bd2171ab
commit f7b20611c1
4 changed files with 23 additions and 19 deletions

View File

@ -188,19 +188,14 @@ class DP_GATEWAYS
{
public:
DP_GATEWAYS( int aGap ):
m_gap( aGap ), m_viaGap( aGap )
m_gap( aGap ),
m_viaGap( aGap )
{
// Do not leave unitialized members, and keep static analyser quiet:
m_viaDiameter = 0;
m_fitVias = true;
}
void SetGap( int aGap )
{
m_gap = aGap;
m_viaGap = aGap;
}
void Clear()
{
m_gateways.clear();
@ -210,7 +205,8 @@ class DP_GATEWAYS
{
m_fitVias = aEnable;
m_viaDiameter = aDiameter;
if(aViaGap < 0)
if( aViaGap < 0 )
m_viaGap = m_gap;
else
m_viaGap = aViaGap;

View File

@ -535,7 +535,7 @@ bool DIFF_PAIR_PLACER::findDpPrimitivePair( const VECTOR2I& aP, ITEM* aItem,
int DIFF_PAIR_PLACER::viaGap() const
{
return m_sizes.DiffPairViaGap();
return m_sizes.DiffPairViaGap() + m_sizes.DiffPairWidth();
}

View File

@ -498,6 +498,8 @@ bool PNS_KICAD_IFACE_BASE::ImportSizes( PNS::SIZES_SETTINGS& aSizes, PNS::ITEM*
aSizes.SetDiffPairGap( diffPairGap );
aSizes.SetDiffPairViaGap( diffPairViaGap );
aSizes.SetHoleToHole( bds.m_HoleToHoleMin );
aSizes.ClearLayerPairs();
return true;

View File

@ -39,13 +39,14 @@ class SIZES_SETTINGS
public:
SIZES_SETTINGS() :
m_trackWidth( 155000 ),
m_viaType( VIATYPE::THROUGH ),
m_viaDiameter( 600000 ),
m_viaDrill( 250000 ),
m_diffPairWidth( 125000 ),
m_diffPairGap( 180000 ),
m_diffPairViaGap( 180000 ),
m_viaDiameter( 600000 ),
m_viaDrill( 250000 ),
m_diffPairViaGapSameAsTraceGap( true ),
m_viaType( VIATYPE::THROUGH )
m_holeToHole( 0 )
{};
~SIZES_SETTINGS() {};
@ -61,10 +62,9 @@ public:
int DiffPairViaGap() const
{
if( m_diffPairViaGapSameAsTraceGap )
return m_diffPairGap;
else
return m_diffPairViaGap;
int netClassGap = m_diffPairViaGapSameAsTraceGap ? m_diffPairGap : m_diffPairViaGap;
return std::max( netClassGap, m_holeToHole - m_viaDiameter );
}
bool DiffPairViaGapSameAsTraceGap() const { return m_diffPairViaGapSameAsTraceGap; }
@ -91,19 +91,25 @@ public:
int GetLayerTop() const;
int GetLayerBottom() const;
void SetHoleToHole( int aHoleToHole ) { m_holeToHole = aHoleToHole; }
int GetHoleToHole() const { return m_holeToHole; }
void SetViaType( VIATYPE aViaType ) { m_viaType = aViaType; }
VIATYPE ViaType() const { return m_viaType; }
private:
int m_trackWidth;
VIATYPE m_viaType;
int m_viaDiameter;
int m_viaDrill;
int m_diffPairWidth;
int m_diffPairGap;
int m_diffPairViaGap;
int m_viaDiameter;
int m_viaDrill;
bool m_diffPairViaGapSameAsTraceGap;
VIATYPE m_viaType;
int m_holeToHole;
std::map<int, int> m_layerPairs;
};