Allow min/max/opt to come from different rules.

This commit is contained in:
Jeff Young 2021-08-20 18:25:07 +01:00
parent 1d9337a917
commit 3aa6d73770
6 changed files with 26 additions and 12 deletions

View File

@ -738,8 +738,8 @@ DRC_CONSTRAINT DRC_ENGINE::EvalRules( DRC_CONSTRAINT_T aConstraintType, const BO
bool a_is_non_copper = a && ( !a->IsOnCopperLayer() || isKeepoutZone( a, false ) );
bool b_is_non_copper = b && ( !b->IsOnCopperLayer() || isKeepoutZone( b, false ) );
const PAD* pad = nullptr;
const ZONE* zone = nullptr;
const PAD* pad = nullptr;
const ZONE* zone = nullptr;
if( aConstraintType == ZONE_CONNECTION_CONSTRAINT
|| aConstraintType == THERMAL_RELIEF_GAP_CONSTRAINT
@ -1113,6 +1113,8 @@ DRC_CONSTRAINT DRC_ENGINE::EvalRules( DRC_CONSTRAINT_T aConstraintType, const BO
// boolean here.
constraint.m_DisallowFlags = c->constraint.m_DisallowFlags;
constraint.m_ZoneConnection = c->constraint.m_ZoneConnection;
constraint.SetParentRule( c->constraint.GetParentRule() );
return true;

View File

@ -37,6 +37,16 @@ DRC_RULE::DRC_RULE() :
}
DRC_RULE::DRC_RULE( const wxString& aName ) :
m_Unary( false ),
m_Implicit( false ),
m_Name( aName ),
m_LayerCondition( LSET::AllLayersMask() ),
m_Condition( nullptr )
{
}
DRC_RULE::~DRC_RULE()
{
delete m_Condition;

View File

@ -89,6 +89,8 @@ class DRC_RULE
{
public:
DRC_RULE();
DRC_RULE( const wxString& aName );
virtual ~DRC_RULE();
virtual bool AppliesTo( const BOARD_ITEM* a, const BOARD_ITEM* b = nullptr ) const

View File

@ -188,9 +188,10 @@ bool DRC_TEST_PROVIDER_SILK_CLEARANCE::Run()
if( isInvisibleText( aRefItem->parent ) || isInvisibleText( aTestItem->parent ) )
return true;
auto constraint = m_drcEngine->EvalRules( SILK_CLEARANCE_CONSTRAINT,
aRefItem->parent, aTestItem->parent,
aLayers.second );
DRC_CONSTRAINT constraint = m_drcEngine->EvalRules( SILK_CLEARANCE_CONSTRAINT,
aRefItem->parent,
aTestItem->parent,
aLayers.second );
if( constraint.IsNull() )
return true;

View File

@ -600,10 +600,9 @@ void ZONE_FILLER::knockoutThermalReliefs( const ZONE* aZone, PCB_LAYER_ID aLayer
{
for( PAD* pad : footprint->Pads() )
{
if( !pad->IsOnLayer( aLayer ) )
continue;
if( pad->GetNetCode() != aZone->GetNetCode() || pad->GetNetCode() <= 0 )
if( !pad->IsOnLayer( aLayer )
|| pad->GetNetCode() != aZone->GetNetCode()
|| pad->GetNetCode() <= 0 )
{
aNoConnectionPads.push_back( pad );
continue;

View File

@ -33,9 +33,9 @@
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.0,
"height": 1.80086,
"width": 2.49936
"drill": 2.7,
"height": 5.0,
"width": 5.0
},
"silk_line_width": 0.15239999999999998,
"silk_text_italic": false,