61    virtual bool Run() 
override;
 
   63    virtual const wxString 
GetName()
 const override { 
return wxT( 
"library_parity" ); };
 
 
   72#define TEST( a, b, msg )                                   \ 
   78                if( aReporter && wxString( msg ).length() ) \ 
   79                    aReporter->Report( msg );               \ 
   82            if( diff && !aReporter )                        \ 
 
   87#define TEST_PT( a, b, msg )                                \ 
   89            if( abs( a.x - b.x ) > EPSILON                  \ 
   90                    || abs( a.y - b.y ) > EPSILON )         \ 
   94                if( aReporter && wxString( msg ).length() ) \ 
   95                    aReporter->Report( msg );               \ 
   98            if( diff && !aReporter )                        \ 
 
  102#define EPSILON_D 0.000002 
  103#define TEST_D( a, b, msg )                                 \ 
  105            if( abs( a - b ) > EPSILON_D )                  \ 
  109                if( aReporter && wxString( msg ).length() ) \ 
  110                    aReporter->Report( msg );               \ 
  113            if( diff && !aReporter )                        \ 
 
  117#define ITEM_DESC( item ) ( item )->GetItemDescription( &g_unitsProvider, true ) 
  118#define PAD_DESC( pad ) wxString::Format( _( "Pad %s" ), ( pad )->GetNumber() ) 
  136                           const std::shared_ptr<PCB_SHAPE>& b )
 
  141    TEST( a->GetShape(), b->GetShape(), 
"" );
 
  143    switch( a->GetShape() )
 
  147        BOX2I aRect( a->GetStart(), a->GetEnd() - a->GetStart() );
 
  148        BOX2I bRect( b->GetStart(), b->GetEnd() - b->GetStart() );
 
  160        TEST_PT( a->GetStart(), b->GetStart(), 
"" );
 
  161        TEST_PT( a->GetEnd(), b->GetEnd(), 
"" );
 
  165        TEST_PT( a->GetStart(), b->GetStart(), 
"" );
 
  166        TEST_PT( a->GetEnd(), b->GetEnd(), 
"" );
 
  170        if( ( a->GetArcMid() - b->GetArcMid() ).EuclideanNorm() > 
pcbIUScale.mmToIU( 0.0005 ) )
 
  176        TEST_PT( a->GetStart(), b->GetStart(), 
"" );
 
  177        TEST_PT( a->GetEnd(), b->GetEnd(), 
"" );
 
  178        TEST_PT( a->GetBezierC1(), b->GetBezierC1(), 
"" );
 
  179        TEST_PT( a->GetBezierC2(), b->GetBezierC2(), 
"" );
 
  183        TEST( a->GetPolyShape().TotalVertices(), b->GetPolyShape().TotalVertices(), 
"" );
 
  185        for( 
int ii = 0; ii < a->GetPolyShape().TotalVertices(); ++ii )
 
  186            TEST_PT( a->GetPolyShape().CVertex( ii ), b->GetPolyShape().CVertex( ii ), 
"" );
 
  194    TEST( a->GetStroke(), b->GetStroke(), 
"" );
 
  195    TEST( a->GetFillMode(), b->GetFillMode(), 
"" );
 
 
  205#define REPORT_MSG( s, p ) aReporter.Report( wxString::Format( s, p ) ) 
 
  277          wxString::Format( 
_( 
"%s pad to die length differs." ), 
PAD_DESC( a ) ) );
 
  279             wxString::Format( 
_( 
"%s position differs." ), 
PAD_DESC( a ) ) );
 
  282          wxString::Format( 
_( 
"%s has different numbers." ), 
PAD_DESC( a ) ) );
 
  294    if( layerSettingsDiffer
 
  300            aReporter->
Report( wxString::Format( 
_( 
"%s layers differ." ), 
PAD_DESC( a ) ) );
 
  306          wxString::Format( 
_( 
"%s pad type differs." ), 
PAD_DESC( a ) ) );
 
  308          wxString::Format( 
_( 
"%s fabrication property differs." ), 
PAD_DESC( a ) ) );
 
  313            wxString::Format( 
_( 
"%s orientation differs." ), 
PAD_DESC( a ) ) );
 
  324              wxString::Format( 
_( 
"%s pad shape type differs on layer %s." ),
 
  329              wxString::Format( 
_( 
"%s size differs on layer %s." ),
 
  334              wxString::Format( 
_( 
"%s trapezoid delta differs on layer %s." ),
 
  342                    wxString::Format( 
_( 
"%s rounded corners differ on layer %s." ),
 
  351                    wxString::Format( 
_( 
"%s chamfered corner sizes differ on layer %s." ),
 
  357                  wxString::Format( 
_( 
"%s chamfered corners differ on layer %s." ),
 
  363                 wxString::Format( 
_( 
"%s shape offset from hole differs on layer %s." ),
 
  369          wxString::Format( 
_( 
"%s drill shape differs." ), 
PAD_DESC( a ) ) );
 
  371          wxString::Format( 
_( 
"%s drill size differs." ), 
PAD_DESC( a ) ) );
 
  386    bool primitivesDiffer = 
false;
 
  394                    primitivesDiffer = 
true;
 
  398                    for( 
size_t ii = 0; ii < a->
GetPrimitives( aLayer ).size(); ++ii )
 
  403                            primitivesDiffer = 
true;
 
  410                    firstDifferingLayer = aLayer;
 
  414    if( primitivesDiffer )
 
  417        layerName = board ? board->
GetLayerName( firstDifferingLayer )
 
  422            aReporter->
Report( wxString::Format( 
_( 
"%s shape primitives differ on layer %s." ),
 
 
  442          wxString::Format( 
_( 
"%s text differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
  445             wxString::Format( 
_( 
"%s position differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
  448          wxString::Format( 
_( 
"%s width differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
  450          wxString::Format( 
_( 
"%s height differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
  453          wxString::Format( 
_( 
"%s text size differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
  456          wxString::Format( 
_( 
"%s code differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
  458          wxString::Format( 
_( 
"%s error correction level differs." ), 
ITEM_DESC( &curr_barcode ) ) );
 
 
  514        for( 
int ii = 0; ii < curr_shape.
GetPolyShape().TotalVertices(); ++ii )
 
 
  539          wxString::Format( 
_( 
"%s corner smoothing setting differs." ), 
ITEM_DESC( a ) ) );
 
  541          wxString::Format( 
_( 
"%s corner smoothing radius differs." ), 
ITEM_DESC( a ) ) );
 
  543          wxString::Format( 
_( 
"%s name differs." ), 
ITEM_DESC( a ) ) );
 
  545          wxString::Format( 
_( 
"%s priority differs." ), 
ITEM_DESC( a ) ) );
 
  548          wxString::Format( 
_( 
"%s keep-out property differs." ), 
ITEM_DESC( a ) ) );
 
  550          wxString::Format( 
_( 
"%s keep out zone fill setting differs." ), 
ITEM_DESC( a ) ) );
 
  552          wxString::Format( 
_( 
"%s keep out footprints setting differs." ), 
ITEM_DESC( a ) ) );
 
  554          wxString::Format( 
_( 
"%s keep out pads setting differs." ), 
ITEM_DESC( a ) ) );
 
  556          wxString::Format( 
_( 
"%s keep out tracks setting differs." ), 
ITEM_DESC( a ) ) );
 
  558          wxString::Format( 
_( 
"%s keep out vias setting differs." ), 
ITEM_DESC( a ) ) );
 
  561          wxString::Format( 
_( 
"%s layers differ." ), 
ITEM_DESC( a ) ) );
 
  564          wxString::Format( 
_( 
"%s pad connection property differs." ), 
ITEM_DESC( a ) ) );
 
  566          wxString::Format( 
_( 
"%s local clearance differs." ), 
ITEM_DESC( a ) ) );
 
  568          wxString::Format( 
_( 
"%s thermal relief gap differs." ), 
ITEM_DESC( a ) ) );
 
  570          wxString::Format( 
_( 
"%s thermal relief spoke width differs." ), 
ITEM_DESC( a ) ) );
 
  573          wxString::Format( 
_( 
"%s min thickness differs." ), 
ITEM_DESC( a ) ) );
 
  576          wxString::Format( 
_( 
"%s remove islands setting differs." ), 
ITEM_DESC( a ) ) );
 
  578              wxString::Format( 
_( 
"%s minimum island size setting differs." ), 
ITEM_DESC( a ) ) );
 
  581          wxString::Format( 
_( 
"%s fill type differs." ), 
ITEM_DESC( a ) ) );
 
  583          wxString::Format( 
_( 
"%s hatch width differs." ), 
ITEM_DESC( a ) ) );
 
  585          wxString::Format( 
_( 
"%s hatch gap differs." ), 
ITEM_DESC( a ) ) );
 
  587          wxString::Format( 
_( 
"%s hatch orientation differs." ), 
ITEM_DESC( a ) ) );
 
  589          wxString::Format( 
_( 
"%s hatch smoothing level differs." ), 
ITEM_DESC( a ) ) );
 
  591          wxString::Format( 
_( 
"%s hatch smoothing amount differs." ), 
ITEM_DESC( a ) ) );
 
  593          wxString::Format( 
_( 
"%s minimum hatch hole setting differs." ), 
ITEM_DESC( a ) ) );
 
  599          wxString::Format( 
_( 
"%s outline corner count differs." ), 
ITEM_DESC( a ) ) );
 
  601    bool cornersDiffer = 
false;
 
  603    for( 
int ii = 0; ii < a->
Outline()->TotalVertices(); ++ii )
 
  608            cornersDiffer = 
true;
 
  613    if( cornersDiffer && aReporter )
 
  614        aReporter->
Report( wxString::Format( 
_( 
"%s corners differ." ), 
ITEM_DESC( a ) ) );
 
 
  630          wxString::Format( 
_( 
"Footprint stackup mode differs." ) ) );
 
  635    TEST( aLayers, bLayers,
 
  636          wxString::Format( 
_( 
"Footprint layers differ." ) ) );
 
 
  659    bool mismatch = 
false;
 
  662    const LSET onlyInFp = fpLayers & ~brdLayers;
 
  664    if( onlyInFp.count() )
 
  668            aReporter->
Report( wxString::Format( 
_( 
"Footprint has %lu layers not on board: %s" ), onlyInFp.count(),
 
  675    if( cuOnlyInBoard.count() )
 
  679            aReporter->
Report( wxString::Format( 
_( 
"Board has %lu copper layers not in footprint: %s" ),
 
  680                                                 cuOnlyInBoard.count(),
 
 
  699    std::unique_ptr<FOOTPRINT> temp( 
static_cast<FOOTPRINT*
>( aLibFP->
Clone() ) );
 
  715    for( 
BOARD_ITEM* item : temp->GraphicalItems() )
 
  716        item->NormalizeForCompare();
 
  720    temp->SetParent( 
nullptr );
 
  727#define TEST_ATTR( a, b, attr, msg ) TEST( ( a & attr ), ( b & attr ), msg ) 
  730               _( 
"Footprint types differ." ) );
 
  733          wxString::Format( 
_( 
"'%s' settings differ." ),
 
  734                            _( 
"Allow bridged solder mask apertures between pads" ) ) );
 
  740                   wxString::Format( 
_( 
"'%s' settings differ." ),
 
  741                                     _( 
"Not in schematic" ) ) );
 
  744                   wxString::Format( 
_( 
"'%s' settings differ." ),
 
  745                                     _( 
"Exclude from position files" ) ) );
 
  748                   wxString::Format( 
_( 
"'%s' settings differ." ),
 
  749                                     _( 
"Exclude from bill of materials" ) ) );
 
  752                   wxString::Format( 
_( 
"'%s' settings differ." ),
 
  753                                     _( 
"Do not populate" ) ) );
 
  756#define REPORT( msg ) { if( aReporter ) aReporter->Report( msg ); } 
  757#define CHECKPOINT { if( diff && !aReporter ) return diff; } 
  762        REPORT( 
_( 
"Footprint stackup differs." ) );
 
  780            REPORT( 
_( 
"Pad clearance overridden." ) );
 
  787            REPORT( 
_( 
"Solder mask expansion overridden." ) );
 
  795            REPORT( 
_( 
"Solder paste absolute clearance overridden." ) );
 
  802            REPORT( 
_( 
"Solder paste relative clearance overridden." ) );
 
  809            REPORT( 
_( 
"Zone connection overridden." ) );
 
  814          _( 
"Net tie pad groups differ." ) );
 
  819              _( 
"Net tie pad groups differ." ) );
 
  841    dummy.SetParentGroup( 
nullptr );
 
  842    dummy.SetParent( 
nullptr );
 
  845        item->NormalizeForCompare();
 
  847    std::set<BOARD_ITEM*, FOOTPRINT::cmp_drawings> aShapes;
 
  848    std::copy_if( 
dummy.GraphicalItems().begin(), 
dummy.GraphicalItems().end(),
 
  849                  std::inserter( aShapes, aShapes.begin() ),
 
  852                      return item->Type() == PCB_SHAPE_T;
 
  855    std::set<BOARD_ITEM*, FOOTPRINT::cmp_drawings> bShapes;
 
  857                  std::inserter( bShapes, bShapes.begin() ),
 
  860                      return item->Type() == PCB_SHAPE_T;
 
  863    if( aShapes.size() != bShapes.size() )
 
  866        REPORT( 
_( 
"Graphic item count differs." ) );
 
  870        for( 
auto aIt = aShapes.begin(), bIt = bShapes.begin(); aIt != aShapes.end(); aIt++, bIt++ )
 
  887    std::set<BOARD_ITEM*, FOOTPRINT::cmp_drawings> aBarcodes;
 
  888    std::copy_if( 
dummy.GraphicalItems().begin(), 
dummy.GraphicalItems().end(),
 
  889                  std::inserter( aBarcodes, aBarcodes.begin() ),
 
  892                      return item->Type() == PCB_BARCODE_T;
 
  895    std::set<BOARD_ITEM*, FOOTPRINT::cmp_drawings> bBarcodes;
 
  897                  std::inserter( bBarcodes, bBarcodes.begin() ),
 
  900                      return item->Type() == PCB_BARCODE_T;
 
  903    if( aBarcodes.size() != bBarcodes.size() )
 
  906        REPORT( 
_( 
"Barcode count differs." ) );
 
  910        for( 
auto aIt = aBarcodes.begin(), bIt = bBarcodes.begin(); aIt != aBarcodes.end(); aIt++, bIt++ )
 
  927    std::set<PAD*, FOOTPRINT::cmp_pads> aPads( 
Pads().begin(), 
Pads().
end() );
 
  928    std::set<PAD*, FOOTPRINT::cmp_pads> bPads( aLibFP->
Pads().begin(), aLibFP->
Pads().end() );
 
  930    if( aPads.size() != bPads.size() )
 
  933        REPORT( 
_( 
"Pad count differs." ) );
 
  937        for( 
auto aIt = aPads.begin(), bIt = bPads.begin(); aIt != aPads.end(); aIt++, bIt++ )
 
  948    std::set<ZONE*, FOOTPRINT::cmp_zones> aZones( 
Zones().begin(), 
Zones().
end() );
 
  949    std::set<ZONE*, FOOTPRINT::cmp_zones> bZones( aLibFP->
Zones().begin(), aLibFP->
Zones().end() );
 
  951    if( aZones.size() != bZones.size() )
 
  954        REPORT( 
_( 
"Rule area count differs." ) );
 
  958        for( 
auto aIt = aZones.begin(), bIt = bZones.begin(); aIt != aZones.end(); aIt++, bIt++ )
 
 
  973        REPORT_AUX( 
_( 
"No project loaded, skipping library parity tests." ) );
 
  977    if( !
reportPhase( 
_( 
"Loading footprint library table..." ) ) )
 
  980    std::map<LIB_ID, std::shared_ptr<FOOTPRINT>> libFootprintCache;
 
  985    const int     progressDelta = 250;
 
  987    if( !
reportPhase( 
_( 
"Checking board footprints against library..." ) ) )
 
 1001        LIB_ID               fpID = footprint->GetFPID();
 
 1006        if( libName.IsEmpty() )
 
 1014            libTableRow = libTable->
FindRow( libName );
 
 1025                msg.Printf( 
_( 
"The current configuration does not include the footprint library '%s'" ),
 
 1027                drcItem->SetErrorMessage( msg );
 
 1028                drcItem->SetItems( footprint );
 
 1034        else if( !libTable->
HasLibrary( libName, 
true ) )
 
 1039                msg.Printf( 
_( 
"The footprint library '%s' is not enabled in the current configuration" ),
 
 1041                drcItem->SetErrorMessage( msg );
 
 1042                drcItem->SetItems( footprint );
 
 1053                msg.Printf( 
_( 
"The footprint library '%s' was not found at '%s'" ),
 
 1056                drcItem->SetErrorMessage( msg );
 
 1057                drcItem->SetItems( footprint );
 
 1064        auto                       cacheIt = libFootprintCache.find( fpID );
 
 1065        std::shared_ptr<FOOTPRINT> libFootprint;
 
 1067        if( cacheIt != libFootprintCache.end() )
 
 1069            libFootprint = cacheIt->second;
 
 1075                libFootprint.reset( libTable->
FootprintLoad( libName, fpName, 
true ) );
 
 1078                    libFootprintCache[ fpID ] = libFootprint;
 
 1090                msg.Printf( 
_( 
"Footprint '%s' not found in library '%s'" ),
 
 1093                drcItem->SetErrorMessage( msg );
 
 1094                drcItem->SetItems( footprint );
 
 1103                msg.Printf( 
_( 
"Footprint '%s' does not match copy in library '%s'" ),
 
 1106                drcItem->SetErrorMessage( msg );
 
 1107                drcItem->SetItems( footprint );
 
 
constexpr EDA_IU_SCALE pcbIUScale
 
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
 
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
 
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
 
VECTOR2I GetFPRelativePosition() const
 
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
 
virtual bool IsOnCopperLayer() const
 
Information pertinent to a Pcbnew printed circuit board.
 
const FOOTPRINTS & Footprints() const
 
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
 
PROJECT * GetProject() const
 
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
 
constexpr const Vec GetEnd() const
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr const Vec & GetOrigin() const
 
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
 
virtual ~DRC_TEST_PROVIDER_LIBRARY_PARITY()=default
 
virtual bool Run() override
Run this provider against the given PCB with configured options (if any).
 
virtual const wxString GetName() const override
 
DRC_TEST_PROVIDER_LIBRARY_PARITY()
 
virtual bool reportPhase(const wxString &aStageName)
 
void reportViolation(std::shared_ptr< DRC_ITEM > &item, const VECTOR2I &aMarkerPos, int aMarkerLayer, const std::function< void(PCB_MARKER *)> &aPathGenerator=[](PCB_MARKER *){})
 
virtual bool reportProgress(size_t aCount, size_t aSize, size_t aDelta=1)
 
const VECTOR2I & GetBezierC2() const
 
FILL_T GetFillMode() const
 
SHAPE_POLY_SET & GetPolyShape()
 
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
 
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
 
wxString SHAPE_T_asString() const
 
const VECTOR2I & GetBezierC1() const
 
VECTOR2I GetArcMid() const
 
const FP_LIB_TABLE_ROW * FindRow(const wxString &aNickName, bool aCheckIfEnabled=false)
Return an FP_LIB_TABLE_ROW if aNickName is found in this table or in any chained fall back table frag...
 
FOOTPRINT * FootprintLoad(const wxString &aNickname, const wxString &aFootprintName, bool aKeepUUID=false)
Load a footprint having aFootprintName from the library given by aNickname.
 
Hold an error message and may be used when throwing exceptions containing meaningful error messages.
 
A logical library item identifier and consists of various portions much like a URI.
 
const UTF8 & GetLibItemName() const
 
const UTF8 & GetLibNickname() const
Return the logical library name portion of a LIB_ID.
 
Hold a record identifying a library accessed by the appropriate plug in object in the LIB_TABLE.
 
virtual bool LibraryExists() const =0
 
const wxString GetFullURI(bool aSubstituted=false) const
Return the full location specifying URI for the LIB, either in original UI form or in environment var...
 
bool HasLibrary(const wxString &aNickname, bool aCheckEnabled=false) const
Test for the existence of aNickname in the library table.
 
LSET is a set of PCB_LAYER_IDs.
 
static LSET AllCuMask(int aCuLayerCount)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
 
static LSET UserDefinedLayersMask(int aUserDefinedLayerCount=MAX_USER_DEFINED_LAYERS)
Return a mask with the requested number of user defined layers.
 
static LSET AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
 
void ForEachUniqueLayer(const std::function< void(PCB_LAYER_ID)> &aMethod) const
Runs the given callable for each active unique copper layer in this padstack, meaning F_Cu for MODE::...
 
std::vector< PCB_LAYER_ID > UniqueLayers() const
 
PAD_PROP GetProperty() const
 
bool GetRemoveUnconnected() const
 
const std::vector< std::shared_ptr< PCB_SHAPE > > & GetPrimitives(PCB_LAYER_ID aLayer) const
Accessor to the basic shape list for custom-shaped pads.
 
std::optional< double > GetLocalSolderPasteMarginRatio() const
 
const VECTOR2I & GetDrillSize() const
 
PAD_ATTRIB GetAttribute() const
 
const wxString & GetNumber() const
 
const VECTOR2I & GetDelta(PCB_LAYER_ID aLayer) const
 
EDA_ANGLE GetThermalSpokeAngle() const
 
double GetRoundRectRadiusRatio(PCB_LAYER_ID aLayer) const
 
PAD_SHAPE GetShape(PCB_LAYER_ID aLayer) const
 
bool GetKeepTopBottom() const
 
std::optional< int > GetLocalClearance() const override
Return any local clearances set in the "classic" (ie: pre-rule) system.
 
const PADSTACK & Padstack() const
 
const VECTOR2I & GetOffset(PCB_LAYER_ID aLayer) const
 
PADSTACK::CUSTOM_SHAPE_ZONE_MODE GetCustomShapeInZoneOpt() const
 
PAD_DRILL_SHAPE GetDrillShape() const
 
int GetChamferPositions(PCB_LAYER_ID aLayer) const
 
std::optional< int > GetLocalSolderPasteMargin() const
 
std::optional< int > GetLocalSolderMaskMargin() const
 
EDA_ANGLE GetFPRelativeOrientation() const
 
double GetChamferRectRatio(PCB_LAYER_ID aLayer) const
 
std::optional< int > GetLocalThermalSpokeWidthOverride() const
 
ZONE_CONNECTION GetLocalZoneConnection() const
 
int GetThermalGap() const
 
int GetLocalThermalGapOverride(wxString *aSource) const
 
int GetPadToDieLength() const
 
const VECTOR2I & GetSize(PCB_LAYER_ID aLayer) const
 
VECTOR2I GetPosition() const override
Get the position (center) of the barcode in internal units.
 
int GetHeight() const
Get the barcode height (in internal units).
 
BARCODE_ECC_T GetErrorCorrection() const
 
BARCODE_T GetKind() const
Returns the type of the barcode (QR, CODE_39, etc.).
 
int GetWidth() const
Get the barcode width (in internal units).
 
STROKE_PARAMS GetStroke() const override
 
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
 
static FP_LIB_TABLE * PcbFootprintLibs(PROJECT *aProject)
Return the table of footprint libraries without Kiway.
 
Container for project specific data.
 
A pure virtual class used to derive REPORTER objects from.
 
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)
Report a string with a given severity.
 
int TotalVertices() const
Return total number of vertices stored in the set.
 
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the index-th vertex in a given hole outline within a given outline.
 
Handle a list of polygons defining a copper zone.
 
bool GetIsRuleArea() const
Accessors to parameters used in Rule Area zones:
 
std::optional< int > GetLocalClearance() const override
 
bool GetDoNotAllowVias() const
 
bool GetDoNotAllowPads() const
 
bool GetDoNotAllowTracks() const
 
ISLAND_REMOVAL_MODE GetIslandRemovalMode() const
 
SHAPE_POLY_SET * Outline()
 
long long int GetMinIslandArea() const
 
const wxString & GetZoneName() const
 
int GetMinThickness() const
 
ZONE_CONNECTION GetPadConnection() const
 
int GetHatchThickness() const
 
double GetHatchHoleMinArea() const
 
int GetThermalReliefSpokeWidth() const
 
EDA_ANGLE GetHatchOrientation() const
 
bool GetDoNotAllowFootprints() const
 
ZONE_FILL_MODE GetFillMode() const
 
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
 
double GetHatchSmoothingValue() const
 
bool GetDoNotAllowZoneFills() const
 
int GetHatchSmoothingLevel() const
 
unsigned int GetCornerRadius() const
 
int GetCornerSmoothingType() const
 
int GetThermalReliefGap() const
 
unsigned GetAssignedPriority() const
 
@ DRCE_LIB_FOOTPRINT_ISSUES
 
@ DRCE_LIB_FOOTPRINT_MISMATCH
 
UNITS_PROVIDER g_unitsProvider(pcbIUScale, EDA_UNITS::MM)
 
bool footprintVsBoardStackup(const FOOTPRINT &aFp, const BOARD &aBoard, REPORTER *aReporter)
Report board->footprint stackup differences.
 
#define TEST_PT(a, b, msg)
 
bool primitiveNeedsUpdate(const std::shared_ptr< PCB_SHAPE > &a, const std::shared_ptr< PCB_SHAPE > &b)
 
bool padHasOverrides(const PAD *a, const PAD *b, REPORTER &aReporter)
 
bool shapeNeedsUpdate(const PCB_SHAPE &curr_shape, const PCB_SHAPE &ref_shape)
 
bool zoneNeedsUpdate(const ZONE *a, const ZONE *b, REPORTER *aReporter)
 
bool barcodeNeedsUpdate(const PCB_BARCODE &curr_barcode, const PCB_BARCODE &ref_barcode)
 
#define TEST_ATTR(a, b, attr, msg)
 
#define TEST_D(a, b, msg)
 
bool padNeedsUpdate(const PAD *a, const PAD *b, REPORTER *aReporter)
 
bool stackupNeedsUpdate(const FOOTPRINT &a, const FOOTPRINT &b, REPORTER *aReporter)
Compare the stackup related settings of two footprints.
 
LSET getBoardNormalizedLayerSet(const BOARD_ITEM *aLibItem, const BOARD *aBoard)
 
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
 
wxString LayerName(int aLayer)
Returns the default display name for a given layer.
 
PCB_LAYER_ID
A quick note on layer IDs:
 
This file contains miscellaneous commonly used macros and functions.
 
#define UNIMPLEMENTED_FOR(type)
 
@ TOP_BOTTOM
Flip top to bottom (around the X axis)
 
wxString AccumulateNames(const LSEQ &aLayers, const BOARD *aBoard)
Accumulate layer names from a layer set into a comma separated string.
 
static DRC_REGISTER_TEST_PROVIDER< DRC_TEST_PROVIDER_ANNULAR_WIDTH > dummy
 
BARCODE class definition.
 
std::vector< FAB_LAYER_COLOR > dummy
 
wxString UnescapeString(const wxString &aSource)