KiCad PCB EDA Suite
Loading...
Searching...
No Matches
collectors.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-2008 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.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, see <https://www.gnu.org/licenses/>.
19 */
20
21#include <collectors.h>
22#include <board_item.h> // class BOARD_ITEM
23
24#include <footprint.h>
25#include <netinfo.h>
26#include <pad.h>
27#include <pcb_track.h>
28#include <pcb_marker.h>
29#include <pcb_grid_item.h>
30#include <pcb_dimension.h>
31#include <zone.h>
32#include <pcb_shape.h>
33#include <pcb_group.h>
34#include <macros.h>
35#include <math/util.h> // for KiROUND
36
37
38const std::vector<KICAD_T> GENERAL_COLLECTOR::AllBoardItems = {
39 PCB_MARKER_T, // in m_markers
40 PCB_TEXT_T, // in m_drawings
41 PCB_REFERENCE_IMAGE_T, // in m_drawings
42 PCB_TEXTBOX_T, // in m_drawings
43 PCB_TABLE_T, // in m_drawings
44 PCB_DRILL_CHART_T, // in m_drawings
45 PCB_DRILL_MAP_T, // in m_drawings
46 PCB_TABLECELL_T, // in tables
47 PCB_SHAPE_T, // in m_drawings
48 PCB_DIM_ALIGNED_T, // in m_drawings
49 PCB_DIM_CENTER_T, // in m_drawings
50 PCB_DIM_RADIAL_T, // in m_drawings
51 PCB_DIM_ORTHOGONAL_T, // in m_drawings
52 PCB_DIM_LEADER_T, // in m_drawings
53 PCB_TARGET_T, // in m_drawings
54 PCB_VIA_T, // in m_tracks
55 PCB_TRACE_T, // in m_tracks
56 PCB_ARC_T, // in m_tracks
57 PCB_PAD_T, // in footprints
58 PCB_FIELD_T, // in footprints
59 PCB_FOOTPRINT_T, // in m_footprints
60 PCB_GROUP_T, // in m_groups
61 PCB_ZONE_T, // in m_zones
62 PCB_POINT_T, // in m_points
63 PCB_GENERATOR_T, // in m_generators
64 PCB_BARCODE_T, // in m_drawings
65 PCB_GRID_ITEM_T, // in m_drawings
66};
67
68
69const std::vector<KICAD_T> GENERAL_COLLECTOR::BoardLevelItems = {
94};
95
96
97const std::vector<KICAD_T> GENERAL_COLLECTOR::Footprints = {
99};
100
101
102const std::vector<KICAD_T> GENERAL_COLLECTOR::PadsOrTracks = {
103 PCB_PAD_T,
104 PCB_VIA_T,
107};
108
109
110const std::vector<KICAD_T> GENERAL_COLLECTOR::FootprintItems = {
123 PCB_PAD_T,
129};
130
131
132const std::vector<KICAD_T> GENERAL_COLLECTOR::Tracks = {
134 PCB_ARC_T,
136};
137
138
139const std::vector<KICAD_T> GENERAL_COLLECTOR::Dimensions = {
145};
146
147
148const std::vector<KICAD_T> GENERAL_COLLECTOR::DraggableItems = {
150 PCB_VIA_T,
153};
154
155
157{
158 BOARD_ITEM* boardItem = nullptr;
159 FOOTPRINT* footprint = nullptr;
160 PCB_GROUP* group = nullptr;
161 PAD* pad = nullptr;
162 bool pad_through = false;
163 PCB_VIA* via = nullptr;
164 PCB_MARKER* marker = nullptr;
165 PCB_GRID_ITEM* gridItem = nullptr;
166 ZONE* zone = nullptr;
167 PCB_FIELD* field = nullptr;
168 PCB_TEXT* text = nullptr;
169 PCB_DIMENSION_BASE* dimension = nullptr;
170 PCB_SHAPE* shape = nullptr;
171
172 switch( aTestItem->Type() )
173 {
174 case PCB_PAD_T:
175 // there are pad specific visibility controls.
176 // Criteria to select a pad is:
177 // for smd pads: the footprint parent must be visible, and pads on the corresponding
178 // board side must be visible
179 // if pad is a thru hole, then it can be visible when its parent footprint is not.
180 // for through pads: pads on Front or Back board sides must be visible
181 pad = static_cast<PAD*>( aTestItem );
182 boardItem = pad;
183
184 if( ( pad->GetAttribute() != PAD_ATTRIB::SMD ) &&
185 ( pad->GetAttribute() != PAD_ATTRIB::CONN ) ) // a hole is present, so multiple layers
186 {
187 // proceed to the common tests below, but without the parent footprint test,
188 // by leaving footprint==NULL, but having pad != null
189 pad_through = true;
190 }
191
192 break;
193
194 case PCB_VIA_T: // vias are on many layers, so layer test is specific
195 via = static_cast<PCB_VIA*>( aTestItem );
196 boardItem = via;
197 break;
198
199 case PCB_TRACE_T:
200 case PCB_ARC_T:
201 if( m_Guide->IgnoreTracks() )
203
204 boardItem = static_cast<PCB_TRACK*>( aTestItem );
205 break;
206
207 case PCB_ZONE_T:
208 zone = static_cast<ZONE*>( aTestItem );
209
210 if( m_Guide->IgnoreNoNets() && zone->GetNetCode() == NETINFO_LIST::UNCONNECTED )
212
213 boardItem = zone;
214 break;
215
216 case PCB_SHAPE_T:
217 shape = static_cast<PCB_SHAPE*>( aTestItem );
218
219 if( m_Guide->IgnoreNoNets() && shape->GetNetCode() == NETINFO_LIST::UNCONNECTED )
221
222 boardItem = shape;
223 break;
224
225 case PCB_TEXTBOX_T:
226 case PCB_TABLE_T:
228 case PCB_DRILL_MAP_T:
229 case PCB_TABLECELL_T:
230 if( m_Guide->IgnoreNoNets() )
232
233 boardItem = static_cast<BOARD_ITEM*>( aTestItem );
234 break;
235
237 case PCB_DIM_CENTER_T:
238 case PCB_DIM_RADIAL_T:
240 case PCB_DIM_LEADER_T:
241 if( m_Guide->IgnoreNoNets() )
243
244 dimension = static_cast<PCB_DIMENSION_BASE*>( aTestItem );
245 boardItem = dimension;
246 break;
247
248 case PCB_TARGET_T:
249 if( m_Guide->IgnoreNoNets() )
251
252 boardItem = static_cast<BOARD_ITEM*>( aTestItem );
253 break;
254
255 case PCB_POINT_T:
256 boardItem = static_cast<BOARD_ITEM*>( aTestItem );
257 break;
258
259 case PCB_GRID_ITEM_T:
260 gridItem = static_cast<PCB_GRID_ITEM*>( aTestItem );
261 boardItem = gridItem;
262 break;
263
264 case PCB_FIELD_T:
265 if( m_Guide->IgnoreNoNets() )
267
268 field = static_cast<PCB_FIELD*>( aTestItem );
269
270 if( !field->IsVisible() )
272
273 if( field->IsReference() && m_Guide->IgnoreFPReferences() )
275
276 if( field->IsValue() && m_Guide->IgnoreFPValues() )
278
280
281 case PCB_TEXT_T:
282 if( m_Guide->IgnoreNoNets() )
284
285 text = static_cast<PCB_TEXT*>( aTestItem );
286 boardItem = text;
287
288 if( text->GetParentFootprint() )
289 {
290 PCB_LAYER_ID layer = text->GetLayer();
291
292 if( m_Guide->IgnoreFPTextOnBack() && IsBackLayer( layer ) )
294
295 if( m_Guide->IgnoreFPTextOnFront() && IsFrontLayer( layer ) )
297 }
298
299 break;
300
301 case PCB_BARCODE_T:
302 if( m_Guide->IgnoreNoNets() )
304
305 boardItem = static_cast<BOARD_ITEM*>( aTestItem );
306 break;
307
308 case PCB_FOOTPRINT_T:
309 footprint = static_cast<FOOTPRINT*>( aTestItem );
310 boardItem = footprint;
311 break;
312
313 case PCB_GROUP_T:
314 group = static_cast<PCB_GROUP*>( aTestItem );
315 boardItem = group;
316 break;
317
318 case PCB_MARKER_T:
319 marker = static_cast<PCB_MARKER*>( aTestItem );
320 boardItem = marker;
321 break;
322
323 default:
324 if( aTestItem->IsBOARD_ITEM() )
325 boardItem = static_cast<BOARD_ITEM*>( aTestItem );
326
327 break;
328 }
329
330 if( boardItem && !footprint )
331 footprint = boardItem->GetParentFootprint();
332
333 // common tests:
334
335 if( footprint )
336 {
337 if( m_Guide->IgnoreFootprintsOnBack() && footprint->GetSide() == B_Cu )
339
340 if( m_Guide->IgnoreFootprintsOnFront() && footprint->GetSide() == F_Cu )
342 }
343
344 // Pads are not sensitive to the layer visibility controls; they all have their own separate
345 // visibility controls.
346 if( pad )
347 {
348 if( m_Guide->IgnorePads() )
350
351 if( ! pad_through )
352 {
353 if( m_Guide->IgnorePadsOnFront() && pad->IsOnLayer(F_Cu ) )
355
356 if( m_Guide->IgnorePadsOnBack() && pad->IsOnLayer(B_Cu ) )
358 }
359 }
360
361 if( marker )
362 {
363 // Markers are not sensitive to the layer
364 if( marker->HitTest( m_refPos ) )
365 Append( aTestItem );
366
368 }
369
370 if( group )
371 {
372 // Groups are not sensitive to the layer ... ?
373 if( group->HitTest( m_refPos ) )
374 Append( aTestItem );
375
377 }
378
379 if( gridItem )
380 {
381 // Grid items live on every layer; their visibility is controlled by the LAYER_GRID_ITEMS
382 // element, not by the per-copper-layer visibility set.
383 if( gridItem->HitTest( m_refPos, m_Guide->Accuracy() ) )
384 Append( aTestItem );
385
387 }
388
389 if( via )
390 {
391 auto type = via->GetViaType();
392
393 if( ( m_Guide->IgnoreThroughVias() && type == VIATYPE::THROUGH )
394 || ( m_Guide->IgnoreBlindBuriedVias() && ( type == VIATYPE::BLIND || type == VIATYPE::BURIED ) )
395 || ( m_Guide->IgnoreMicroVias() && type == VIATYPE::MICROVIA ) )
396 {
398 }
399 }
400
401 if( boardItem
402 && ( boardItem->IsOnLayer( m_Guide->GetPreferredLayer() ) )
403 && ( !boardItem->IsLocked() || !m_Guide->IgnoreLockedItems() ) )
404 {
405 // Footprints and their subcomponents: reference, value and pads are not sensitive to the
406 // layer visibility controls; they all have their own separate visibility controls.
407 // For vias, GetLayer() has no meaning, but IsOnLayer() works fine.
408 // User text and fields in a footprint *are* sensitive to layer visibility but they were
409 // already handled.
410
411 int accuracy = m_Guide->Accuracy();
412
413 if( zone )
414 {
415 if( zone->HitTestForCorner( m_refPos, accuracy * 2 ) || zone->HitTestForEdge( m_refPos, accuracy ) )
416 {
417 Append( zone );
419 }
420 else if( !m_Guide->IgnoreZoneFills() )
421 {
422 for( PCB_LAYER_ID layer : zone->GetLayerSet() )
423 {
424 if( m_Guide->IsLayerVisible( layer ) && zone->HitTestFilledArea( layer, m_refPos ) )
425 {
426 Append( zone );
428 }
429 }
430 }
431 }
432 else if( aTestItem == footprint )
433 {
434 if( footprint->HitTest( m_refPos, accuracy ) && footprint->HitTestAccurate( m_refPos, accuracy ) )
435 {
436 Append( footprint );
438 }
439 }
440 else if( pad || via )
441 {
442 if( boardItem->HitTest( m_refPos, accuracy ) )
443 {
444 Append( boardItem );
446 }
447 }
448 else
449 {
450 PCB_LAYER_ID layer = boardItem->GetLayer();
451
452 if( m_Guide->IsLayerVisible( layer ) )
453 {
454 if( dimension )
455 {
456 // Dimensions feel particularly hard to select, probably due to their noisy
457 // shape making it feel like they should have a larger boundary.
458 accuracy = KiROUND( accuracy * 1.5 );
459 }
460
461 if( boardItem->HitTest( m_refPos, accuracy ) )
462 {
463 Append( boardItem );
465 }
466 }
467 }
468 }
469
470 if( m_Guide->IncludeSecondary()
471 && ( !boardItem || !boardItem->IsLocked() || !m_Guide->IgnoreLockedItems() ) )
472 {
473 // For now, "secondary" means "tolerate any visible layer". It has no effect on other
474 // criteria, since there is a separate "ignore" control for those in the COLLECTORS_GUIDE
475
476 // Footprints and their subcomponents: reference, value and pads are not sensitive to the
477 // layer visibility controls; they all have their own separate visibility controls.
478 // For vias, GetLayer() has no meaning, but IsOnLayer() works fine.
479 // User text and fields in a footprint *are* sensitive to layer visibility but they were
480 // already handled.
481
482 int accuracy = m_Guide->Accuracy();
483
484 if( zone )
485 {
486 if( zone->HitTestForCorner( m_refPos, accuracy * 2 ) || zone->HitTestForEdge( m_refPos, accuracy ) )
487 {
488 Append2nd( zone );
490 }
491 else if( !m_Guide->IgnoreZoneFills() )
492 {
493 for( PCB_LAYER_ID layer : zone->GetLayerSet() )
494 {
495 if( m_Guide->IsLayerVisible( layer ) && zone->HitTestFilledArea( layer, m_refPos ) )
496 {
497 Append2nd( zone );
499 }
500 }
501 }
502 }
503 else if( aTestItem->Type() == PCB_FOOTPRINT_T )
504 {
505 // Already tested above, but Coverity can't figure that out
506 wxCHECK( footprint, INSPECT_RESULT::CONTINUE );
507
508 if( footprint->HitTest( m_refPos, accuracy ) && footprint->HitTestAccurate( m_refPos, accuracy ) )
509 {
510 Append2nd( footprint );
512 }
513 }
514 else if( pad || via )
515 {
516 if( boardItem->HitTest( m_refPos, accuracy ) )
517 {
518 Append2nd( boardItem );
520 }
521 }
522 else if( boardItem && m_Guide->IsLayerVisible( boardItem->GetLayer() ) )
523 {
524 if( dimension )
525 {
526 // Dimensions feel particularly hard to select, probably due to their noisy shape
527 // making it feel like they should have a larger boundary.
528 accuracy = KiROUND( accuracy * 1.5 );
529 }
530
531 if( boardItem->HitTest( m_refPos, accuracy ) )
532 {
533 Append2nd( boardItem );
535 }
536 }
537 }
538
539 return INSPECT_RESULT::CONTINUE; // always when collecting
540}
541
542
543void GENERAL_COLLECTOR::Collect( BOARD_ITEM* aItem, const std::vector<KICAD_T>& aScanTypes,
544 const VECTOR2I& aRefPos, const COLLECTORS_GUIDE& aGuide )
545{
546 Empty(); // empty the collection, primary criteria list
547 Empty2nd(); // empty the collection, secondary criteria list
548
549 // remember guide, pass it to Inspect()
550 SetGuide( &aGuide );
551
552 SetScanTypes( aScanTypes );
553
554 // remember where the snapshot was taken from and pass refPos to
555 // the Inspect() function.
556 SetRefPos( aRefPos );
557
558 wxCHECK_RET( aItem, "" );
559 aItem->Visit( m_inspector, nullptr, m_scanTypes );
560
561 // append 2nd list onto end of the first list
562 for( EDA_ITEM* item : m_List2nd )
563 Append( item );
564
565 Empty2nd();
566}
567
568
570{
571 // The Visit() function only visits the testItem if its type was in the the scanList,
572 // so therefore we can collect anything given to us here.
573 Append( testItem );
574
575 return INSPECT_RESULT::CONTINUE; // always when collecting
576}
577
578
579void PCB_TYPE_COLLECTOR::Collect( BOARD_ITEM* aBoard, const std::vector<KICAD_T>& aTypes )
580{
581 Empty();
582 aBoard->Visit( m_inspector, nullptr, aTypes );
583}
584
585
587{
588 BOARD_ITEM* item = (BOARD_ITEM*) testItem;
589
590 if( item->IsOnLayer( m_layer_id ) )
591 Append( testItem );
592
594}
595
596
597void PCB_LAYER_COLLECTOR::Collect( BOARD_ITEM* aBoard, const std::vector<KICAD_T>& aTypes )
598{
599 Empty();
600 aBoard->Visit( m_inspector, nullptr, aTypes );
601}
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
Definition box2.h:995
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
bool IsLocked() const override
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
virtual bool IsOnLayer(PCB_LAYER_ID aLayer) const
Test to see if this object is on the given layer.
Definition board_item.h:408
FOOTPRINT * GetParentFootprint() const
An abstract base class whose derivatives may be passed to a GENERAL_COLLECTOR telling it what should ...
Definition collectors.h:50
INSPECTOR_FUNC m_inspector
Definition collector.h:244
void Empty()
Clear the list.
Definition collector.h:87
VECTOR2I m_refPos
Definition collector.h:246
void SetScanTypes(const std::vector< KICAD_T > &aTypes)
Record the list of KICAD_T types to consider for collection by the Inspect() function.
Definition collector.h:209
void SetRefPos(const VECTOR2I &aRefPos)
Definition collector.h:213
std::vector< KICAD_T > m_scanTypes
Definition collector.h:243
void Append(EDA_ITEM *item)
Add an item to the end of the list.
Definition collector.h:97
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:98
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
virtual INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes)
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition eda_item.cpp:287
virtual bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const
Test if aPosition is inside or on the boundary of this item.
Definition eda_item.h:309
virtual bool IsVisible() const
Definition eda_text.h:226
PCB_LAYER_ID GetSide() const
Use instead of IsFlipped() when you also need to account for unsided footprints (those purely on user...
bool HitTestAccurate(const VECTOR2I &aPosition, int aAccuracy=0) const
Test if a point is inside the bounding polygon of the footprint.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
static const std::vector< KICAD_T > BoardLevelItems
A scan list for all primary board items, omitting items which are subordinate to a FOOTPRINT,...
Definition collectors.h:69
void SetGuide(const COLLECTORS_GUIDE *aGuide)
Record which COLLECTORS_GUIDE to use.
Definition collectors.h:287
static const std::vector< KICAD_T > PadsOrTracks
A scan list for PADs, TRACKs, or VIAs.
Definition collectors.h:102
void Append2nd(EDA_ITEM *item)
Definition collectors.h:277
INSPECT_RESULT Inspect(EDA_ITEM *aTestItem, void *aTestData) override
The examining function within the INSPECTOR which is passed to the Iterate function.
std::vector< EDA_ITEM * > m_List2nd
A place to hold collected objects which don't match precisely the search criteria,...
Definition collectors.h:211
static const std::vector< KICAD_T > Footprints
A scan list for only FOOTPRINTs.
Definition collectors.h:97
static const std::vector< KICAD_T > AllBoardItems
A scan list for all editable board items.
Definition collectors.h:38
static const std::vector< KICAD_T > Tracks
A scan list for only TRACKs and ARCs.
Definition collectors.h:132
void Collect(BOARD_ITEM *aItem, const std::vector< KICAD_T > &aScanList, const VECTOR2I &aRefPos, const COLLECTORS_GUIDE &aGuide)
Scan a BOARD_ITEM using this class's Inspector method, which does the collection.
static const std::vector< KICAD_T > Dimensions
A scan list for dimensions.
Definition collectors.h:139
static const std::vector< KICAD_T > FootprintItems
A scan list for primary footprint items.
Definition collectors.h:110
const COLLECTORS_GUIDE * m_Guide
Determine which items are to be collected by Inspect().
Definition collectors.h:216
static const std::vector< KICAD_T > DraggableItems
A scan list for items that can be dragged.
Definition collectors.h:148
bool IsBOARD_ITEM() const
Definition view_item.h:98
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
Definition netinfo.h:280
Definition pad.h:61
Abstract dimension API.
bool IsReference() const
Definition pcb_field.h:76
bool IsValue() const
Definition pcb_field.h:77
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
A set of BOARD_ITEMs (i.e., without duplicates).
Definition pcb_group.h:51
void Collect(BOARD_ITEM *aBoard, const std::vector< KICAD_T > &aTypes)
Test a BOARD_ITEM using this class's Inspector method, which does the collection.
INSPECT_RESULT Inspect(EDA_ITEM *testItem, void *testData) override
The examining function within the INSPECTOR which is passed to the iterate function.
PCB_LAYER_ID m_layer_id
Definition collectors.h:571
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
Definition pcb_marker.h:75
void Collect(BOARD_ITEM *aBoard, const std::vector< KICAD_T > &aTypes)
Collect BOARD_ITEM objects using this class's Inspector method, which does the collection.
INSPECT_RESULT Inspect(EDA_ITEM *testItem, void *testData) override
The examining function within the INSPECTOR which is passed to the Iterate function.
Handle a list of polygons defining a copper zone.
Definition zone.h:70
bool HitTestForCorner(const VECTOR2I &refPos, int aAccuracy, SHAPE_POLY_SET::VERTEX_INDEX *aCornerHit=nullptr) const
Test if the given VECTOR2I is near a corner.
Definition zone.cpp:930
bool HitTestForEdge(const VECTOR2I &refPos, int aAccuracy, SHAPE_POLY_SET::VERTEX_INDEX *aCornerHit=nullptr) const
Test if the given VECTOR2I is near a segment defined by 2 corners.
Definition zone.cpp:941
bool HitTestFilledArea(PCB_LAYER_ID aLayer, const VECTOR2I &aRefPos, int aAccuracy=0) const
Test if the given VECTOR2I is within the bounds of a filled area of this zone.
Definition zone.cpp:1048
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
Definition zone.h:133
INSPECT_RESULT
Definition eda_item.h:44
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a front layer.
Definition layer_ids.h:806
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
Definition layer_ids.h:829
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ B_Cu
Definition layer_ids.h:61
@ F_Cu
Definition layer_ids.h:60
This file contains miscellaneous commonly used macros and functions.
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition macros.h:79
@ SMD
Smd pad, appears on the solder paste layer (default)
Definition padstack.h:98
@ CONN
Like smd, does not appear on the solder paste layer (default) Note: also has a special attribute in G...
Definition padstack.h:99
Class to handle a set of BOARD_ITEMs.
const int accuracy
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition typeinfo.h:80
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition typeinfo.h:98
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition typeinfo.h:95
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
Definition typeinfo.h:83
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition typeinfo.h:89
@ PCB_DRILL_MAP_T
class PCB_DRILL_MAP, drill symbols drawn at the holes
Definition typeinfo.h:240
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition typeinfo.h:96
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition typeinfo.h:103
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition typeinfo.h:85
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition typeinfo.h:100
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition typeinfo.h:84
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
Definition typeinfo.h:81
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Definition typeinfo.h:82
@ PCB_MARKER_T
class PCB_MARKER, a marker used to show something
Definition typeinfo.h:91
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
Definition typeinfo.h:93
@ PCB_TARGET_T
class PCB_TARGET, a target (graphic item)
Definition typeinfo.h:99
@ PCB_TABLECELL_T
class PCB_TABLECELL, PCB_TEXTBOX for use in tables
Definition typeinfo.h:87
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition typeinfo.h:78
@ PCB_GRID_ITEM_T
a subgrid placed on a board
Definition typeinfo.h:238
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition typeinfo.h:94
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition typeinfo.h:79
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
Definition typeinfo.h:90
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
Definition typeinfo.h:86
@ PCB_POINT_T
class PCB_POINT, a 0-dimensional point
Definition typeinfo.h:105
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
Definition typeinfo.h:88
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
Definition typeinfo.h:97
@ PCB_DRILL_CHART_T
class PCB_DRILL_CHART, a live drill chart derived from PCB_TABLE
Definition typeinfo.h:239
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683