diff --git a/pcbnew/drc/drc_rule.cpp b/pcbnew/drc/drc_rule.cpp index 7daf8561eb..af5aeeb1e6 100644 --- a/pcbnew/drc/drc_rule.cpp +++ b/pcbnew/drc/drc_rule.cpp @@ -50,4 +50,11 @@ void DRC_RULE::AddConstraint( DRC_CONSTRAINT& aConstraint ) m_Constraints.push_back( aConstraint ); } +OPT DRC_RULE::FindConstraint( DRC_CONSTRAINT_TYPE_T aType ) +{ + for( auto &c : m_Constraints) + if( c.m_Type == aType ) + return c; + return OPT(); +} \ No newline at end of file diff --git a/pcbnew/drc/drc_rule.h b/pcbnew/drc/drc_rule.h index 685dfeffbc..d0ae7a79e8 100644 --- a/pcbnew/drc/drc_rule.h +++ b/pcbnew/drc/drc_rule.h @@ -25,6 +25,7 @@ #define DRC_RULE_PROTO_H #include +#include #include #include #include @@ -38,7 +39,8 @@ class DRC_RULE_CONDITION; enum DRC_CONSTRAINT_TYPE_T { DRC_CONSTRAINT_TYPE_UNKNOWN = -1, - DRC_CONSTRAINT_TYPE_CLEARANCE = 0, + DRC_CONSTRAINT_TYPE_NULL = 0, + DRC_CONSTRAINT_TYPE_CLEARANCE, DRC_CONSTRAINT_TYPE_HOLE_CLEARANCE, DRC_CONSTRAINT_TYPE_EDGE_CLEARANCE, DRC_CONSTRAINT_TYPE_HOLE_SIZE, @@ -48,7 +50,12 @@ enum DRC_CONSTRAINT_TYPE_T DRC_CONSTRAINT_TYPE_TRACK_WIDTH, DRC_CONSTRAINT_TYPE_ANNULAR_WIDTH, DRC_CONSTRAINT_TYPE_DISALLOW, - DRC_CONSTRAINT_TYPE_VIA_DIAMETER + DRC_CONSTRAINT_TYPE_VIA_DIAMETER, + DRC_CONSTRAINT_TYPE_LENGTH, + DRC_CONSTRAINT_TYPE_SKEW, + DRC_CONSTRAINT_TYPE_DIFF_PAIR_LENGTH, + DRC_CONSTRAINT_TYPE_DIFF_PAIR_SKEW, + DRC_CONSTRAINT_TYPE_DIFF_PAIR_INTRA_SKEW }; @@ -105,6 +112,7 @@ public: }; void AddConstraint( DRC_CONSTRAINT& aConstraint ); + OPT FindConstraint( DRC_CONSTRAINT_TYPE_T aType ); public: bool m_Unary; @@ -129,6 +137,11 @@ class DRC_CONSTRAINT { } + bool IsNull() const + { + return m_Type == DRC_CONSTRAINT_TYPE_NULL; + } + const MINOPTMAX& GetValue() const { return m_Value; } MINOPTMAX& Value() { return m_Value; }