Netclass track widths and via sizes are opts, not mins.
This commit is contained in:
parent
cd1a5ed6fb
commit
8c4197db2a
|
@ -177,17 +177,12 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
auto makeNetclassRules =
|
auto makeNetclassRules =
|
||||||
[&]( const NETCLASSPTR& nc, bool isDefault )
|
[&]( const NETCLASSPTR& nc, bool isDefault )
|
||||||
{
|
{
|
||||||
// Note: only add constraints for netclass values which are larger than board
|
|
||||||
// minimums. (This ensures that the board minimums will still enforce a global
|
|
||||||
// lower bound.)
|
|
||||||
|
|
||||||
wxString ncName = nc->GetName();
|
wxString ncName = nc->GetName();
|
||||||
|
|
||||||
DRC_RULE* rule;
|
DRC_RULE* rule;
|
||||||
wxString expr;
|
wxString expr;
|
||||||
|
|
||||||
if( nc->GetClearance() > bds.m_MinClearance
|
if( nc->GetClearance() || nc->GetTrackWidth() )
|
||||||
|| nc->GetTrackWidth() > bds.m_TrackMinWidth )
|
|
||||||
{
|
{
|
||||||
rule = new DRC_RULE;
|
rule = new DRC_RULE;
|
||||||
rule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
rule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
||||||
|
@ -198,18 +193,19 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
rule->m_Condition = new DRC_RULE_CONDITION( expr );
|
rule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
netclassClearanceRules.push_back( rule );
|
netclassClearanceRules.push_back( rule );
|
||||||
|
|
||||||
if( nc->GetClearance() > bds.m_MinClearance )
|
if( nc->GetClearance() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT ncClearanceConstraint( DRC_CONSTRAINT_TYPE_CLEARANCE );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_CLEARANCE );
|
||||||
ncClearanceConstraint.Value().SetMin( nc->GetClearance() );
|
constraint.Value().SetMin( std::max( bds.m_MinClearance, nc->GetClearance() ) );
|
||||||
rule->AddConstraint( ncClearanceConstraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nc->GetTrackWidth() > bds.m_TrackMinWidth )
|
if( nc->GetTrackWidth() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT ncWidthConstraint( DRC_CONSTRAINT_TYPE_TRACK_WIDTH );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_TRACK_WIDTH );
|
||||||
ncWidthConstraint.Value().SetMin( nc->GetTrackWidth() );
|
constraint.Value().SetMin( bds.m_TrackMinWidth );
|
||||||
rule->AddConstraint( ncWidthConstraint );
|
constraint.Value().SetOpt( nc->GetTrackWidth() );
|
||||||
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -227,20 +223,21 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
if( nc->GetDiffPairWidth() )
|
if( nc->GetDiffPairWidth() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_TRACK_WIDTH );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_TRACK_WIDTH );
|
||||||
constraint.Value().SetMin( nc->GetDiffPairWidth() );
|
constraint.Value().SetMin( bds.m_TrackMinWidth );
|
||||||
|
constraint.Value().SetOpt( nc->GetDiffPairWidth() );
|
||||||
rule->AddConstraint( constraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nc->GetDiffPairGap() )
|
if( nc->GetDiffPairGap() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_DIFF_PAIR_GAP );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_DIFF_PAIR_GAP );
|
||||||
constraint.Value().SetMin( nc->GetDiffPairGap() );
|
constraint.Value().SetMin( std::max( bds.m_MinClearance, nc->GetClearance() ) );
|
||||||
|
constraint.Value().SetOpt( nc->GetDiffPairGap() );
|
||||||
rule->AddConstraint( constraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nc->GetViaDiameter() > bds.m_ViasMinSize
|
if( nc->GetViaDiameter() || nc->GetViaDrill() )
|
||||||
|| nc->GetViaDrill() > bds.m_MinThroughDrill )
|
|
||||||
{
|
{
|
||||||
rule = new DRC_RULE;
|
rule = new DRC_RULE;
|
||||||
rule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
rule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
||||||
|
@ -251,23 +248,24 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
rule->m_Condition = new DRC_RULE_CONDITION( expr );
|
rule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
netclassItemSpecificRules.push_back( rule );
|
netclassItemSpecificRules.push_back( rule );
|
||||||
|
|
||||||
if( nc->GetViaDiameter() > bds.m_ViasMinSize )
|
if( nc->GetViaDiameter() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_VIA_DIAMETER );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_VIA_DIAMETER );
|
||||||
constraint.Value().SetMin( nc->GetViaDiameter() );
|
constraint.Value().SetMin( bds.m_ViasMinSize );
|
||||||
|
constraint.Value().SetOpt( nc->GetViaDiameter() );
|
||||||
rule->AddConstraint( constraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nc->GetViaDrill() > bds.m_MinThroughDrill )
|
if( nc->GetViaDrill() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_HOLE_SIZE );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_HOLE_SIZE );
|
||||||
constraint.Value().SetMin( nc->GetViaDrill() );
|
constraint.Value().SetMin( bds.m_MinThroughDrill );
|
||||||
|
constraint.Value().SetOpt( nc->GetViaDrill() );
|
||||||
rule->AddConstraint( constraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nc->GetuViaDiameter() > bds.m_MicroViasMinSize
|
if( nc->GetuViaDiameter() || nc->GetuViaDrill() )
|
||||||
|| nc->GetuViaDrill() > bds.m_MicroViasMinDrill )
|
|
||||||
{
|
{
|
||||||
rule = new DRC_RULE;
|
rule = new DRC_RULE;
|
||||||
rule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
rule->m_Name = wxString::Format( _( "netclass '%s'" ), ncName );
|
||||||
|
@ -278,17 +276,19 @@ void DRC_ENGINE::loadImplicitRules()
|
||||||
rule->m_Condition = new DRC_RULE_CONDITION( expr );
|
rule->m_Condition = new DRC_RULE_CONDITION( expr );
|
||||||
netclassItemSpecificRules.push_back( rule );
|
netclassItemSpecificRules.push_back( rule );
|
||||||
|
|
||||||
if( nc->GetuViaDiameter() > bds.m_MicroViasMinSize )
|
if( nc->GetuViaDiameter() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_VIA_DIAMETER );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_VIA_DIAMETER );
|
||||||
|
constraint.Value().SetMin( bds.m_MicroViasMinSize );
|
||||||
constraint.Value().SetMin( nc->GetuViaDiameter() );
|
constraint.Value().SetMin( nc->GetuViaDiameter() );
|
||||||
rule->AddConstraint( constraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( nc->GetuViaDrill() > bds.m_MicroViasMinDrill )
|
if( nc->GetuViaDrill() )
|
||||||
{
|
{
|
||||||
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_HOLE_SIZE );
|
DRC_CONSTRAINT constraint( DRC_CONSTRAINT_TYPE_HOLE_SIZE );
|
||||||
constraint.Value().SetMin( nc->GetuViaDrill() );
|
constraint.Value().SetMin( bds.m_MicroViasMinDrill );
|
||||||
|
constraint.Value().SetOpt( nc->GetuViaDrill() );
|
||||||
rule->AddConstraint( constraint );
|
rule->AddConstraint( constraint );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue