PNS: Do not allow resolved optimal values to go below board minimums

This commit is contained in:
Jon Evans 2021-04-21 22:43:26 -04:00
parent ae113ea299
commit 9b1890606d
1 changed files with 8 additions and 8 deletions

View File

@ -448,14 +448,14 @@ bool PNS_KICAD_IFACE_BASE::ImportSizes( PNS::SIZES_SETTINGS& aSizes, PNS::ITEM*
if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_WIDTH, aStartItem, nullptr, if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_WIDTH, aStartItem, nullptr,
aStartItem->Layer(), &constraint ) ) aStartItem->Layer(), &constraint ) )
{ {
trackWidth = constraint.m_Value.Opt(); trackWidth = std::max( trackWidth, constraint.m_Value.Opt() );
found = true; // Note: allowed to override anything, including bds.m_TrackMinWidth found = true;
} }
} }
if( !found ) if( !found )
{ {
trackWidth = bds.GetCurrentTrackWidth(); trackWidth = std::max( trackWidth, bds.GetCurrentTrackWidth() );
} }
aSizes.SetTrackWidth( trackWidth ); aSizes.SetTrackWidth( trackWidth );
@ -468,13 +468,13 @@ bool PNS_KICAD_IFACE_BASE::ImportSizes( PNS::SIZES_SETTINGS& aSizes, PNS::ITEM*
if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_VIA_DIAMETER, aStartItem, if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_VIA_DIAMETER, aStartItem,
nullptr, aStartItem->Layer(), &constraint ) ) nullptr, aStartItem->Layer(), &constraint ) )
{ {
viaDiameter = constraint.m_Value.Opt(); viaDiameter = std::max( viaDiameter, constraint.m_Value.Opt() );
} }
if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_VIA_HOLE, aStartItem, if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_VIA_HOLE, aStartItem,
nullptr, aStartItem->Layer(), &constraint ) ) nullptr, aStartItem->Layer(), &constraint ) )
{ {
viaDrill = constraint.m_Value.Opt(); viaDrill = std::max( viaDrill, constraint.m_Value.Opt() );
} }
} }
else else
@ -502,14 +502,14 @@ bool PNS_KICAD_IFACE_BASE::ImportSizes( PNS::SIZES_SETTINGS& aSizes, PNS::ITEM*
if( !found && m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_WIDTH, aStartItem, if( !found && m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_WIDTH, aStartItem,
nullptr, aStartItem->Layer(), &constraint ) ) nullptr, aStartItem->Layer(), &constraint ) )
{ {
diffPairWidth = constraint.m_Value.Opt(); diffPairWidth = std::max( diffPairWidth, constraint.m_Value.Opt() );
} }
if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_DIFF_PAIR_GAP, aStartItem, if( m_ruleResolver->QueryConstraint( PNS::CONSTRAINT_TYPE::CT_DIFF_PAIR_GAP, aStartItem,
nullptr, aStartItem->Layer(), &constraint ) ) nullptr, aStartItem->Layer(), &constraint ) )
{ {
diffPairGap = constraint.m_Value.Opt(); diffPairGap = std::max( diffPairGap, constraint.m_Value.Opt() );
diffPairViaGap = constraint.m_Value.Opt(); diffPairViaGap = std::max( diffPairViaGap, constraint.m_Value.Opt() );
} }
} }
else else