KiCad PCB EDA Suite
drc_item.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2007 Dick Hollenbeck, [email protected]
5 * Copyright (C) 2015-2022 KiCad Developers, see change_log.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25
26#include "wx/html/m_templ.h"
27#include "wx/html/styleparams.h"
28#include "core/kicad_algo.h"
29#include <drc/drc_item.h>
30#include <drc/drc_rule.h>
31#include <board.h>
32#include <pcb_marker.h>
33
34
35// These, being statically-defined, require specialized I18N handling. We continue to
36// use the _() macro so that string harvesting by the I18N framework doesn't have to be
37// specialized, but we don't translate on initialization and instead do it in the getters.
38
39#undef _
40#define _(s) s
41
42// NOTE: Avoid changing the settings key for a DRC item after it has been created
43
44
45DRC_ITEM DRC_ITEM::heading_electrical( 0, _( "Electrical" ), "" );
46DRC_ITEM DRC_ITEM::heading_DFM( 0, _( "Design for Manufacturing" ), "" );
47DRC_ITEM DRC_ITEM::heading_schematic_parity( 0, _( "Schematic Parity" ), "" );
48DRC_ITEM DRC_ITEM::heading_signal_integrity( 0, _( "Signal Integrity" ), "" );
49DRC_ITEM DRC_ITEM::heading_readability( 0, _( "Readability" ), "" );
50DRC_ITEM DRC_ITEM::heading_misc( 0, _( "Miscellaneous" ), "" );
51
53 _( "Missing connection between items" ),
54 wxT( "unconnected_items" ) );
55
57 _( "Items shorting two nets" ),
58 wxT( "shorting_items" ) );
59
61 _( "Items not allowed" ),
62 wxT( "items_not_allowed" ) );
63
65 _( "Text (or dimension) on Edge.Cuts layer" ),
66 wxT( "text_on_edge_cuts" ) );
67
69 _( "Clearance violation" ),
70 wxT( "clearance" ) );
71
73 _( "Tracks crossing" ),
74 wxT( "tracks_crossing" ) );
75
77 _( "Board edge clearance violation" ),
78 wxT( "copper_edge_clearance" ) );
79
81 _( "Copper zones intersect" ),
82 wxT( "zones_intersect" ) );
83
85 _( "Isolated copper fill" ),
86 wxT( "isolated_copper" ) );
87
89 _( "Thermal relief connection to zone incomplete" ),
90 wxT( "starved_thermal" ) );
91
93 _( "Via is not connected or connected on only one layer" ),
94 wxT( "via_dangling" ) );
95
97 _( "Track has unconnected end" ),
98 wxT( "track_dangling" ) );
99
101 _( "Hole clearance violation" ),
102 wxT( "hole_clearance" ) );
103
105 _( "Drilled holes too close together" ),
106 wxT( "hole_near_hole" ) );
107
109 _( "Drilled holes co-located" ),
110 wxT( "holes_co_located" ) );
111
113 _( "Copper connection too narrow" ),
114 wxT( "connection_width" ) );
115
117 _( "Track width" ),
118 wxT( "track_width" ) );
119
121 _( "Annular width" ),
122 wxT( "annular_width" ) );
123
125 _( "Drill out of range" ),
126 wxT( "drill_out_of_range" ) );
127
129 _( "Via diameter" ),
130 wxT( "via_diameter" ) );
131
133 _( "Padstack is not valid" ),
134 wxT( "padstack" ) );
135
137 _( "Micro via drill out of range" ),
138 wxT( "microvia_drill_out_of_range" ) );
139
141 _( "Courtyards overlap" ),
142 wxT( "courtyards_overlap" ) );
143
145 _( "Footprint has no courtyard defined" ),
146 wxT( "missing_courtyard" ) );
147
149 _( "Footprint has malformed courtyard" ),
150 wxT( "malformed_courtyard" ) );
151
153 _( "PTH inside courtyard" ),
154 wxT( "pth_inside_courtyard" ) );
155
157 _( "NPTH inside courtyard" ),
158 wxT( "npth_inside_courtyard" ) );
159
161 _( "Item on a disabled copper layer" ),
162 wxT( "item_on_disabled_layer" ) );
163
165 _( "Board has malformed outline" ),
166 wxT( "invalid_outline" ) );
167
169 _( "Duplicate footprints" ),
170 wxT( "duplicate_footprints" ) );
171
173 _( "Missing footprint" ),
174 wxT( "missing_footprint" ) );
175
177 _( "Extra footprint" ),
178 wxT( "extra_footprint" ) );
179
181 _( "Pad net doesn't match schematic" ),
182 wxT( "net_conflict" ) );
183
185 _( "Footprint not found in libraries" ),
186 wxT( "lib_footprint_issues" ) );
187
189 _( "Footprint doesn't match copy in library" ),
190 wxT( "lib_footprint_mismatch" ) );
191
193 _( "Unresolved text variable" ),
194 wxT( "unresolved_variable" ) );
195
197 _( "Assertion failure" ),
198 wxT( "assertion_failure" ) );
199
201 _( "Copper sliver" ),
202 wxT( "copper_sliver" ) );
203
205 _( "Solder mask aperture bridges items with different nets" ),
206 wxT( "solder_mask_bridge" ) );
207
209 _( "Silkscreen clipped by solder mask" ),
210 wxT( "silk_over_copper" ) );
211
213 _( "Silkscreen clipped by board edge" ),
214 wxT( "silk_edge_clearance" ) );
215
217 _( "Silkscreen overlap" ),
218 wxT( "silk_overlap" ) );
219
221 _( "Text height out of range" ),
222 wxT( "text_height" ) );
223
225 _( "Text thickness out of range" ),
226 wxT( "text_thickness" ) );
227
229 _( "Trace length out of range" ),
230 wxT( "length_out_of_range" ) );
231
233 _( "Skew between traces out of range" ),
234 wxT( "skew_out_of_range" ) );
235
237 _( "Too many vias on a connection" ),
238 wxT( "too_many_vias" ) );
239
241 _( "Differential pair gap out of range" ),
242 wxT( "diff_pair_gap_out_of_range" ) );
243
245 _( "Differential uncoupled length too long" ),
246 wxT( "diff_pair_uncoupled_length_too_long" ) );
247
249 _( "Footprint is not valid" ),
250 wxT( "footprint" ) );
251
253 _( "Footprint component type doesn't match footprint pads" ),
254 wxT( "footprint_type_mismatch" ) );
255
257 _( "Through hole pad has no hole" ),
258 wxT( "through_hole_pad_without_hole" ) );
259
260
261std::vector<std::reference_wrapper<RC_ITEM>> DRC_ITEM::allItemTypes( {
269
285
292
299
306
317
322 } );
323
324
325std::shared_ptr<DRC_ITEM> DRC_ITEM::Create( int aErrorCode )
326{
327 switch( aErrorCode )
328 {
329 case DRCE_UNCONNECTED_ITEMS: return std::make_shared<DRC_ITEM>( unconnectedItems );
330 case DRCE_SHORTING_ITEMS: return std::make_shared<DRC_ITEM>( shortingItems );
331 case DRCE_ALLOWED_ITEMS: return std::make_shared<DRC_ITEM>( itemsNotAllowed );
332 case DRCE_TEXT_ON_EDGECUTS: return std::make_shared<DRC_ITEM>( textOnEdgeCuts );
333 case DRCE_CLEARANCE: return std::make_shared<DRC_ITEM>( clearance );
334 case DRCE_TRACKS_CROSSING: return std::make_shared<DRC_ITEM>( tracksCrossing );
335 case DRCE_EDGE_CLEARANCE: return std::make_shared<DRC_ITEM>( edgeClearance );
336 case DRCE_ZONES_INTERSECT: return std::make_shared<DRC_ITEM>( zonesIntersect );
337 case DRCE_ISOLATED_COPPER: return std::make_shared<DRC_ITEM>( isolatedCopper );
338 case DRCE_STARVED_THERMAL: return std::make_shared<DRC_ITEM>( starvedThermal );
339 case DRCE_DANGLING_VIA: return std::make_shared<DRC_ITEM>( viaDangling );
340 case DRCE_DANGLING_TRACK: return std::make_shared<DRC_ITEM>( trackDangling );
341 case DRCE_DRILLED_HOLES_TOO_CLOSE: return std::make_shared<DRC_ITEM>( holeNearHole );
342 case DRCE_DRILLED_HOLES_COLOCATED: return std::make_shared<DRC_ITEM>( holesCoLocated );
343 case DRCE_HOLE_CLEARANCE: return std::make_shared<DRC_ITEM>( holeClearance );
344 case DRCE_CONNECTION_WIDTH: return std::make_shared<DRC_ITEM>( connectionWidth );
345 case DRCE_TRACK_WIDTH: return std::make_shared<DRC_ITEM>( trackWidth );
346 case DRCE_ANNULAR_WIDTH: return std::make_shared<DRC_ITEM>( annularWidth );
347 case DRCE_DRILL_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( drillTooSmall );
348 case DRCE_VIA_DIAMETER: return std::make_shared<DRC_ITEM>( viaDiameter );
349 case DRCE_PADSTACK: return std::make_shared<DRC_ITEM>( padstack );
350 case DRCE_MICROVIA_DRILL_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( microviaDrillTooSmall );
351 case DRCE_OVERLAPPING_FOOTPRINTS: return std::make_shared<DRC_ITEM>( courtyardsOverlap );
352 case DRCE_MISSING_COURTYARD: return std::make_shared<DRC_ITEM>( missingCourtyard );
353 case DRCE_MALFORMED_COURTYARD: return std::make_shared<DRC_ITEM>( malformedCourtyard );
354 case DRCE_PTH_IN_COURTYARD: return std::make_shared<DRC_ITEM>( pthInsideCourtyard );
355 case DRCE_NPTH_IN_COURTYARD: return std::make_shared<DRC_ITEM>( npthInsideCourtyard );
356 case DRCE_DISABLED_LAYER_ITEM: return std::make_shared<DRC_ITEM>( itemOnDisabledLayer );
357 case DRCE_INVALID_OUTLINE: return std::make_shared<DRC_ITEM>( invalidOutline );
358 case DRCE_MISSING_FOOTPRINT: return std::make_shared<DRC_ITEM>( missingFootprint );
359 case DRCE_DUPLICATE_FOOTPRINT: return std::make_shared<DRC_ITEM>( duplicateFootprints );
360 case DRCE_NET_CONFLICT: return std::make_shared<DRC_ITEM>( netConflict );
361 case DRCE_EXTRA_FOOTPRINT: return std::make_shared<DRC_ITEM>( extraFootprint );
362 case DRCE_LIB_FOOTPRINT_ISSUES: return std::make_shared<DRC_ITEM>( libFootprintIssues );
363 case DRCE_LIB_FOOTPRINT_MISMATCH: return std::make_shared<DRC_ITEM>( libFootprintMismatch );
364 case DRCE_UNRESOLVED_VARIABLE: return std::make_shared<DRC_ITEM>( unresolvedVariable );
365 case DRCE_ASSERTION_FAILURE: return std::make_shared<DRC_ITEM>( assertionFailure );
366 case DRCE_COPPER_SLIVER: return std::make_shared<DRC_ITEM>( copperSliver );
367 case DRCE_OVERLAPPING_SILK: return std::make_shared<DRC_ITEM>( silkOverlaps );
368 case DRCE_SILK_CLEARANCE: return std::make_shared<DRC_ITEM>( silkClearance );
369 case DRCE_SILK_EDGE_CLEARANCE: return std::make_shared<DRC_ITEM>( silkEdgeClearance );
370 case DRCE_SOLDERMASK_BRIDGE: return std::make_shared<DRC_ITEM>( solderMaskBridge );
371 case DRCE_TEXT_HEIGHT: return std::make_shared<DRC_ITEM>( textHeightOutOfRange );
372 case DRCE_TEXT_THICKNESS: return std::make_shared<DRC_ITEM>( textThicknessOutOfRange );
373 case DRCE_LENGTH_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( lengthOutOfRange );
374 case DRCE_SKEW_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( skewOutOfRange );
375 case DRCE_TOO_MANY_VIAS: return std::make_shared<DRC_ITEM>( tooManyVias );
376 case DRCE_DIFF_PAIR_GAP_OUT_OF_RANGE: return std::make_shared<DRC_ITEM>( diffPairGapOutOfRange );
377 case DRCE_DIFF_PAIR_UNCOUPLED_LENGTH_TOO_LONG: return std::make_shared<DRC_ITEM>( diffPairUncoupledLengthTooLong );
378 case DRCE_FOOTPRINT: return std::make_shared<DRC_ITEM>( footprint );
379 case DRCE_FOOTPRINT_TYPE_MISMATCH: return std::make_shared<DRC_ITEM>( footprintTypeMismatch );
380 case DRCE_PAD_TH_WITH_NO_HOLE: return std::make_shared<DRC_ITEM>( footprintTHPadhasNoHole );
381 default:
382 wxFAIL_MSG( wxT( "Unknown DRC error code" ) );
383 return nullptr;
384 }
385}
386
387
388std::shared_ptr<DRC_ITEM> DRC_ITEM::Create( const wxString& aErrorKey )
389{
390 for( const RC_ITEM& item : allItemTypes )
391 {
392 if( aErrorKey == item.GetSettingsKey() )
393 return std::make_shared<DRC_ITEM>( static_cast<const DRC_ITEM&>( item ) );
394 }
395
396 // This can happen if a project has old-format exclusions. Just drop these items.
397 return nullptr;
398}
399
400
402{
404 {
405 // we have lots of segments, but it's enough to show the first P and the first N
406 return niluuid;
407 }
408
409 return m_ids.size() > 2 ? m_ids[2] : niluuid;
410}
411
412
414{
416 {
417 // we have lots of segments, but it's enough to show the first P and the first N
418 return niluuid;
419 }
420
421 return m_ids.size() > 3 ? m_ids[3] : niluuid;
422}
423
424
426{
427 if( m_violatingRule )
428 return wxString::Format( _( "Rule: %s" ), m_violatingRule->m_Name );
429 else
430 return _( "Local override" );
431}
432
433
435{
436 m_severities = aSeverities;
437
438 m_filteredMarkers.clear();
439
440 for( PCB_MARKER* marker : m_board->Markers() )
441 {
442 if( alg::contains( m_markerTypes, marker->GetMarkerType() )
443 && ( marker->GetSeverity() & m_severities ) > 0 )
444 {
445 m_filteredMarkers.push_back( marker );
446 }
447 }
448}
449
450
451int DRC_ITEMS_PROVIDER::GetCount( int aSeverity ) const
452{
453 if( aSeverity < 0 )
454 return m_filteredMarkers.size();
455
456 int count = 0;
457
458 for( PCB_MARKER* marker : m_board->Markers() )
459 {
460 if( alg::contains( m_markerTypes, marker->GetMarkerType() )
461 && ( marker->GetSeverity() & aSeverity ) > 0 )
462 {
463 count++;
464 }
465 }
466
467 return count;
468}
469
470
471std::shared_ptr<RC_ITEM> DRC_ITEMS_PROVIDER::GetItem( int aIndex ) const
472{
473 PCB_MARKER* marker = m_filteredMarkers[ aIndex ];
474
475 return marker ? marker->GetRCItem() : nullptr;
476}
477
478
479void DRC_ITEMS_PROVIDER::DeleteItem( int aIndex, bool aDeep )
480{
481 PCB_MARKER* marker = m_filteredMarkers[ aIndex ];
482 m_filteredMarkers.erase( m_filteredMarkers.begin() + aIndex );
483
484 if( aDeep )
485 m_board->Delete( marker );
486}
487
virtual void Delete(BOARD_ITEM *aItem)
Removes an item from the container and deletes it.
MARKERS & Markers()
Definition: board.h:316
void SetSeverities(int aSeverities) override
Definition: drc_item.cpp:434
void DeleteItem(int aIndex, bool aDeep) override
Remove (and optionally deletes) the indexed item from the list.
Definition: drc_item.cpp:479
int GetCount(int aSeverity=-1) const override
Definition: drc_item.cpp:451
std::vector< PCB_MARKER * > m_filteredMarkers
Definition: drc_item.h:243
std::vector< MARKER_BASE::TYPEMARKER > m_markerTypes
Definition: drc_item.h:240
std::shared_ptr< RC_ITEM > GetItem(int aIndex) const override
Retrieve a RC_ITEM by index.
Definition: drc_item.cpp:471
static DRC_ITEM lengthOutOfRange
Definition: drc_item.h:201
KIID GetAuxItem3ID() const override
Definition: drc_item.cpp:413
static DRC_ITEM viaDiameter
Definition: drc_item.h:176
static DRC_ITEM silkEdgeClearance
Definition: drc_item.h:196
static DRC_ITEM trackWidth
Definition: drc_item.h:173
static DRC_ITEM heading_DFM
Definition: drc_item.h:151
static DRC_ITEM annularWidth
Definition: drc_item.h:174
static DRC_ITEM pthInsideCourtyard
Definition: drc_item.h:182
wxString GetViolatingRuleDesc() const override
Definition: drc_item.cpp:425
static DRC_ITEM netConflict
Definition: drc_item.h:189
static DRC_ITEM copperSliver
Definition: drc_item.h:194
static DRC_ITEM holeNearHole
Definition: drc_item.h:169
static DRC_ITEM heading_signal_integrity
Definition: drc_item.h:153
static DRC_ITEM courtyardsOverlap
Definition: drc_item.h:179
static DRC_ITEM textThicknessOutOfRange
Definition: drc_item.h:200
static DRC_ITEM tooManyVias
Definition: drc_item.h:203
static DRC_ITEM connectionWidth
Definition: drc_item.h:172
static DRC_ITEM footprint
Definition: drc_item.h:206
static DRC_ITEM unresolvedVariable
Definition: drc_item.h:192
static DRC_ITEM assertionFailure
Definition: drc_item.h:193
static DRC_ITEM npthInsideCourtyard
Definition: drc_item.h:183
static std::shared_ptr< DRC_ITEM > Create(int aErrorCode)
Constructs a DRC_ITEM for the given error code.
Definition: drc_item.cpp:325
static DRC_ITEM textOnEdgeCuts
Definition: drc_item.h:160
static std::vector< std::reference_wrapper< RC_ITEM > > allItemTypes
A list of all DRC_ITEM types which are valid error codes.
Definition: drc_item.h:148
static DRC_ITEM zonesIntersect
Definition: drc_item.h:164
static DRC_ITEM starvedThermal
Definition: drc_item.h:166
static DRC_ITEM shortingItems
Definition: drc_item.h:158
static DRC_ITEM tracksCrossing
Definition: drc_item.h:162
static DRC_ITEM missingCourtyard
Definition: drc_item.h:180
static DRC_ITEM skewOutOfRange
Definition: drc_item.h:202
static DRC_ITEM trackDangling
Definition: drc_item.h:168
static DRC_ITEM viaDangling
Definition: drc_item.h:167
static DRC_ITEM drillTooSmall
Definition: drc_item.h:175
static DRC_ITEM holesCoLocated
Definition: drc_item.h:170
static DRC_ITEM missingFootprint
Definition: drc_item.h:187
static DRC_ITEM textHeightOutOfRange
Definition: drc_item.h:199
static DRC_ITEM diffPairGapOutOfRange
Definition: drc_item.h:204
static DRC_ITEM heading_electrical
Definition: drc_item.h:150
static DRC_ITEM padstack
Definition: drc_item.h:177
static DRC_ITEM itemOnDisabledLayer
Definition: drc_item.h:184
static DRC_ITEM heading_readability
Definition: drc_item.h:154
static DRC_ITEM itemsNotAllowed
Definition: drc_item.h:159
static DRC_ITEM extraFootprint
Definition: drc_item.h:188
static DRC_ITEM diffPairUncoupledLengthTooLong
Definition: drc_item.h:205
KIID GetAuxItem2ID() const override
Definition: drc_item.cpp:401
static DRC_ITEM unconnectedItems
Definition: drc_item.h:157
static DRC_ITEM clearance
Definition: drc_item.h:161
DRC_RULE * m_violatingRule
Definition: drc_item.h:211
static DRC_ITEM libFootprintMismatch
Definition: drc_item.h:191
static DRC_ITEM edgeClearance
Definition: drc_item.h:163
static DRC_ITEM invalidOutline
Definition: drc_item.h:185
static DRC_ITEM silkOverlaps
Definition: drc_item.h:198
static DRC_ITEM isolatedCopper
Definition: drc_item.h:165
static DRC_ITEM malformedCourtyard
Definition: drc_item.h:181
static DRC_ITEM holeClearance
Definition: drc_item.h:171
static DRC_ITEM libFootprintIssues
Definition: drc_item.h:190
static DRC_ITEM heading_schematic_parity
Definition: drc_item.h:152
static DRC_ITEM microviaDrillTooSmall
Definition: drc_item.h:178
static DRC_ITEM solderMaskBridge
Definition: drc_item.h:197
static DRC_ITEM heading_misc
Definition: drc_item.h:155
static DRC_ITEM footprintTypeMismatch
Definition: drc_item.h:207
static DRC_ITEM footprintTHPadhasNoHole
Definition: drc_item.h:208
static DRC_ITEM silkClearance
Definition: drc_item.h:195
static DRC_ITEM duplicateFootprints
Definition: drc_item.h:186
wxString m_Name
Definition: drc_rule.h:110
Definition: kiid.h:47
std::shared_ptr< RC_ITEM > GetRCItem() const
Definition: marker_base.h:105
A holder for a rule check item, DRC in Pcbnew or ERC in Eeschema.
Definition: rc_item.h:75
int m_errorCode
The error code's numeric value.
Definition: rc_item.h:165
KIIDS m_ids
Definition: rc_item.h:171
#define _(s)
Definition: drc_item.cpp:40
@ DRCE_DISABLED_LAYER_ITEM
Definition: drc_item.h:67
@ DRCE_SKEW_OUT_OF_RANGE
Definition: drc_item.h:96
@ DRCE_DIFF_PAIR_GAP_OUT_OF_RANGE
Definition: drc_item.h:98
@ DRCE_HOLE_CLEARANCE
Definition: drc_item.h:53
@ DRCE_SILK_EDGE_CLEARANCE
Definition: drc_item.h:90
@ DRCE_ZONES_INTERSECT
Definition: drc_item.h:46
@ DRCE_TOO_MANY_VIAS
Definition: drc_item.h:97
@ DRCE_VIA_DIAMETER
Definition: drc_item.h:58
@ DRCE_UNCONNECTED_ITEMS
Definition: drc_item.h:39
@ DRCE_TRACK_WIDTH
Definition: drc_item.h:54
@ DRCE_PADSTACK
Definition: drc_item.h:59
@ DRCE_LIB_FOOTPRINT_ISSUES
Definition: drc_item.h:76
@ DRCE_OVERLAPPING_FOOTPRINTS
Definition: drc_item.h:61
@ DRCE_INVALID_OUTLINE
Definition: drc_item.h:68
@ DRCE_TEXT_ON_EDGECUTS
Definition: drc_item.h:42
@ DRCE_OVERLAPPING_SILK
Definition: drc_item.h:93
@ DRCE_DRILL_OUT_OF_RANGE
Definition: drc_item.h:57
@ DRCE_EDGE_CLEARANCE
Definition: drc_item.h:45
@ DRCE_STARVED_THERMAL
Definition: drc_item.h:48
@ DRCE_MISSING_COURTYARD
Definition: drc_item.h:62
@ DRCE_CLEARANCE
Definition: drc_item.h:43
@ DRCE_ISOLATED_COPPER
Definition: drc_item.h:47
@ DRCE_DRILLED_HOLES_TOO_CLOSE
Definition: drc_item.h:51
@ DRCE_ALLOWED_ITEMS
Definition: drc_item.h:41
@ DRCE_COPPER_SLIVER
Definition: drc_item.h:84
@ DRCE_PTH_IN_COURTYARD
Definition: drc_item.h:65
@ DRCE_DIFF_PAIR_UNCOUPLED_LENGTH_TOO_LONG
Definition: drc_item.h:99
@ DRCE_MICROVIA_DRILL_OUT_OF_RANGE
Definition: drc_item.h:60
@ DRCE_SHORTING_ITEMS
Definition: drc_item.h:40
@ DRCE_MALFORMED_COURTYARD
Definition: drc_item.h:63
@ DRCE_DANGLING_VIA
Definition: drc_item.h:49
@ DRCE_UNRESOLVED_VARIABLE
Definition: drc_item.h:81
@ DRCE_FOOTPRINT_TYPE_MISMATCH
Definition: drc_item.h:75
@ DRCE_DUPLICATE_FOOTPRINT
Definition: drc_item.h:71
@ DRCE_DANGLING_TRACK
Definition: drc_item.h:50
@ DRCE_TEXT_HEIGHT
Definition: drc_item.h:91
@ DRCE_ASSERTION_FAILURE
Definition: drc_item.h:82
@ DRCE_SOLDERMASK_BRIDGE
Definition: drc_item.h:85
@ DRCE_DRILLED_HOLES_COLOCATED
Definition: drc_item.h:52
@ DRCE_EXTRA_FOOTPRINT
Definition: drc_item.h:72
@ DRCE_SILK_CLEARANCE
Definition: drc_item.h:88
@ DRCE_LENGTH_OUT_OF_RANGE
Definition: drc_item.h:95
@ DRCE_LIB_FOOTPRINT_MISMATCH
Definition: drc_item.h:77
@ DRCE_NET_CONFLICT
Definition: drc_item.h:73
@ DRCE_MISSING_FOOTPRINT
Definition: drc_item.h:70
@ DRCE_PAD_TH_WITH_NO_HOLE
Definition: drc_item.h:78
@ DRCE_FOOTPRINT
Definition: drc_item.h:79
@ DRCE_TEXT_THICKNESS
Definition: drc_item.h:92
@ DRCE_NPTH_IN_COURTYARD
Definition: drc_item.h:66
@ DRCE_CONNECTION_WIDTH
Definition: drc_item.h:56
@ DRCE_TRACKS_CROSSING
Definition: drc_item.h:44
@ DRCE_ANNULAR_WIDTH
Definition: drc_item.h:55
KIID niluuid(0)
bool contains(const _Container &__container, _Value __value)
Returns true if the container contains the given value.
Definition: kicad_algo.h:99
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200