KiCad PCB EDA Suite
Loading...
Searching...
No Matches
board_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) 2012 Jean-Pierre Charras, [email protected]
5 * Copyright (C) 2012 SoftPLC Corporation, Dick Hollenbeck <[email protected]>
6 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
7 *
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License
10 * as published by the Free Software Foundation; either version 2
11 * of the License, or (at your option) any later version.
12 *
13 * This program is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with this program. If not, see <https://www.gnu.org/licenses/>.
20 */
21
22#include <wx/debug.h>
23#include <wx/msgdlg.h>
24#include <i18n_utility.h>
25#include <macros.h>
26#include <board.h>
28#include <lset.h>
29#include <pcb_group.h>
30#include <pcb_generator.h>
31#include <footprint.h>
32#include <font/font.h>
33#include <properties/property.h>
35
36
37bool BOARD_ITEM::FitsEnabledLayers( const LSET& aEnabledLayers, int aCopperLayerCount ) const
38{
39 return IsLayerAgnostic() || ( GetLayerSet() & aEnabledLayers ).any();
40}
41
42
44{
45 switch ( Type() )
46 {
47 case PCB_FOOTPRINT_T:
48 case PCB_PAD_T:
49 case PCB_SHAPE_T:
51 case PCB_FIELD_T:
52 case PCB_TEXT_T:
53 case PCB_TEXTBOX_T:
54 case PCB_TABLE_T:
56 case PCB_DRILL_MAP_T:
57 case PCB_GROUP_T:
58 case PCB_GENERATOR_T:
59 case PCB_TRACE_T:
60 case PCB_VIA_T:
61 case PCB_ARC_T:
62 case PCB_DIMENSION_T:
68 case PCB_ZONE_T:
69 case PCB_BARCODE_T:
70 case PCB_POINT_T:
71 case PCB_GRID_ITEM_T:
72 return true;
73 default:
74 return false;
75 }
76}
77
78
79void BOARD_ITEM::CopyFrom( const BOARD_ITEM* aOther )
80{
81 wxCHECK( aOther, /* void */ );
82 *this = *aOther;
83}
84
85
87{
88 if( Type() == PCB_T )
89 return static_cast<const BOARD*>( this );
90
91 return static_cast<const BOARD*>( findParent( PCB_T ) );
92}
93
94
96{
97 if( Type() == PCB_T )
98 return static_cast<BOARD*>( this );
99
100 return static_cast<BOARD*>( findParent( PCB_T ) );
101}
102
103
105{
106 // Backup for code paths that skip ::Remove(). Do not use the parent chain, it may be freed.
108 m_boardCacheOwner->UncacheItemByPtr( this );
109}
110
111
113{
114 return static_cast<FOOTPRINT*>( findParent( PCB_FOOTPRINT_T ) );
115}
116
117
118void BOARD_ITEM::SetUuid( const KIID& aUuid )
119{
120 if( m_Uuid == aUuid )
121 return;
122
123 // Use the owner, not GetBoard(). The parent chain may name a wrong or dead board.
124 if( BOARD* board = m_boardCacheOwner )
125 {
126 board->RebindItemUuid( this, aUuid );
127 return;
128 }
129
130 SetUuidDirect( aUuid );
131}
132
133
134void BOARD_ITEM::SetUuidDirect( const KIID& aUuid )
135{
136 const_cast<KIID&>( m_Uuid ) = aUuid;
137}
138
139
141{
143 {
144 if( group->AsEdaItem()->IsLocked() )
145 return true;
146 }
147
148 if( !GetBoard() || GetBoard()->GetBoardUse() == BOARD_USE::FPHOLDER )
149 return false;
150
151 return m_isLocked;
152}
153
154
156{
157 wxFAIL_MSG( wxString( "GetStroke() not defined by " ) + GetClass() );
158
159 return STROKE_PARAMS( pcbIUScale.mmToIU( DEFAULT_LINE_WIDTH ) );
160}
161
162
164{
165 wxFAIL_MSG( wxString( "SetStroke() not defined by " ) + GetClass() );
166}
167
168
173
174
176{
177 if( const BOARD* board = GetBoard() )
178 return board->GetDesignSettings().m_MaxError;
179
180 return ARC_HIGH_DEF;
181}
182
183
185{
186 wxASSERT_MSG( IsSingleLayerType( Type() ),
187 wxString::Format( wxT( "GetLayer() must be overridden for multi-layer types (%s)." ), GetClass() ) );
188
189 return m_layer;
190}
191
193{
194 const BOARD* board = GetBoard();
195
196 if( board )
197 return board->GetLayerSet().count();
198
199 return 64;
200}
201
202
204{
205 const BOARD* board = GetBoard();
206
207 if( board )
208 return board->GetCopperLayerCount();
209
210 return 32;
211}
212
213
215{
216 const BOARD* board = GetBoard();
217
218 if( board )
219 return board->GetEnabledLayers();
220
221 return LSET::AllLayersMask();
222}
223
224
226{
227 if( const BOARD* board = GetBoard() )
228 return board->GetLayerName( m_layer );
229
230 // If no parent, return standard name
232}
233
234
236{
237 if( ( GetLayerSet() & LSET::SideSpecificMask() ).any() )
238 return true;
239
240 if( const BOARD* board = GetBoard() )
241 {
242 LAYER_T principalLayerType = board->GetLayerType( m_layer );
243
244 if( principalLayerType == LT_FRONT || principalLayerType == LT_BACK )
245 return true;
246 }
247
248 return false;
249}
250
251
253{
254 const BOARD* board = GetBoard();
255 LSET layers = GetLayerSet();
256 int copperLayerCount = MAX_CU_LAYERS;
257
258 if( board )
259 {
260 layers &= board->GetEnabledLayers();
261 copperLayerCount = board->GetCopperLayerCount();
262 }
263
264 LSET copperLayers = layers & LSET::AllCuMask();
265 LSET techLayers = layers & LSET::AllTechMask();
266
267 // Try to be smart and useful. Check all copper first.
268 if( (int) copperLayers.count() == copperLayerCount )
269 return _( "all copper layers" );
270
271 for( LSET testLayers : { copperLayers, techLayers, layers } )
272 {
273 for( int layer = PCBNEW_LAYER_ID_START; layer < PCB_LAYER_ID_COUNT; ++layer )
274 {
275 if( testLayers[ layer ] )
276 {
277 wxString layerInfo = board ? board->GetLayerName( ToLAYER_ID( layer ) )
278 : LayerName( ToLAYER_ID( layer ) );
279
280 if( testLayers.count() > 1 )
281 layerInfo << wxS( " " ) + _( "and others" );
282
283 return layerInfo;
284 }
285 }
286 }
287
288 // No copper, no technicals: no layer
289 return _( "no layers" );
290}
291
292
293std::vector<int> BOARD_ITEM::ViewGetLayers() const
294{
295 // Basic fallback
296 if( IsLocked() )
298
299 return { m_layer };
300}
301
302
304{
306
307 if( parent )
308 parent->Remove( this );
309
310 delete this;
311}
312
313
315{
317}
318
319
321{
322 if( aImage == nullptr )
323 return;
324
325 EDA_ITEM* parent = GetParent();
327 EDA_GROUP* imageGroup = aImage->GetParentGroup();
328 BOARD* board = GetBoard();
329
330 // Evict children from the item-by-id cache before the swap moves them to the
331 // image. The image is typically deleted after the swap (undo/redo, commit revert),
332 // which would leave the cache holding dangling pointers to the destroyed children.
333 if( board )
334 {
335 board->UncacheChildrenById( this );
336 }
337
338 swapData( aImage );
339 SetParent( parent );
340
341 // Group membership is a back-reference, not item data, so keep each side's own.
343 aImage->SetParentGroup( imageGroup );
344
345 if( board )
346 {
347 board->CacheChildrenById( this );
348 }
349}
350
351
352BOARD_ITEM* BOARD_ITEM::Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit ) const
353{
354 BOARD_ITEM* dupe = static_cast<BOARD_ITEM*>( Clone() );
355 dupe->ResetUuid();
356
357 if( addToParentGroup )
358 {
359 wxCHECK_MSG( aCommit, dupe, "Must supply a commit to update parent group" );
360
361 if( EDA_GROUP* group = dupe->GetParentGroup() )
362 {
363 aCommit->Modify( group->AsEdaItem(), nullptr, RECURSE_MODE::NO_RECURSE );
364 group->AddItem( dupe );
365 }
366 }
367
368 return dupe;
369}
370
371
373 int aClearance, int aError, ERROR_LOC aErrorLoc,
374 bool ignoreLineWidth ) const
375{
376 wxLogDebug( wxT( "%s doesn't implement TransformShapeToPolygon()" ), GetClass() );
377}
378
379
381{
382 if( a->Type() != b->Type() )
383 return a->Type() < b->Type();
384
385 if( a->GetLayerSet() != b->GetLayerSet() )
386 return a->GetLayerSet().Seq() < b->GetLayerSet().Seq();
387
388 if( a->m_Uuid != b->m_Uuid ) // UUIDs *should* always be unique (for valid boards anyway)
389 return a->m_Uuid < b->m_Uuid;
390
391 return a < b; // But just in case; ptrs are guaranteed to be different
392}
393
394
396{
397 static std::shared_ptr<SHAPE> shape;
398
400
401 return shape;
402}
403
404
406{
407 static std::shared_ptr<SHAPE_SEGMENT> slot;
408
410
411 return slot;
412}
413
414
416{
417 if( FOOTPRINT* parentFP = GetParentFootprint() )
418 return parentFP->GetTransform().InverseApply( GetPosition() );
419
420 return GetPosition();
421}
422
423
425{
426 if( FOOTPRINT* parentFP = GetParentFootprint() )
427 SetPosition( parentFP->GetTransform().Apply( aPos ) );
428 else
429 SetPosition( aPos );
430}
431
432
433void BOARD_ITEM::Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle )
434{
435 wxMessageBox( wxT( "virtual BOARD_ITEM::Rotate used, should not occur" ), GetClass() );
436}
437
438
439void BOARD_ITEM::Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
440{
441 wxMessageBox( wxT( "virtual BOARD_ITEM::Flip used, should not occur" ), GetClass() );
442}
443
444
445void BOARD_ITEM::Mirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
446{
447 wxMessageBox( wxT( "virtual BOARD_ITEM::Mirror used, should not occur" ), GetClass() );
448}
449
450
452{
453 if( FOOTPRINT* fp = dynamic_cast<FOOTPRINT*>( m_parent ) )
454 return fp->GetReference();
455
456 return m_parent->m_Uuid.AsString();
457}
458
459
460const std::vector<wxString>* BOARD_ITEM::GetEmbeddedFonts()
461{
462 if( BOARD* board = GetBoard() )
463 return board->GetFontFiles();
464
465 return nullptr;
466}
467
468
469static struct BOARD_ITEM_DESC
470{
472 {
474
475 if( layerEnum.Choices().GetCount() == 0 )
476 {
477 layerEnum.Undefined( UNDEFINED_LAYER );
478
479 for( PCB_LAYER_ID layer : LSET::AllLayersMask() )
480 layerEnum.Map( layer, LSET::Name( layer ) );
481 }
482
486
487 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, wxString>( _HKI( "Parent" ),
491
492 auto isNotFootprintHolder =
493 []( INSPECTABLE* aItem ) -> bool
494 {
495 BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( aItem );
496 return item && item->GetBoard() && !item->GetBoard()->IsFootprintHolder();
497 };
498
499 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position X" ),
502 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position Y" ),
507 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, bool>( _HKI( "Locked" ),
509 .SetAvailableFunc( isNotFootprintHolder );
510 }
512
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
constexpr int ARC_HIGH_DEF
Definition base_units.h:137
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:121
@ FPHOLDER
Definition board.h:401
LAYER_T
The allowed types of layers, same as Specctra DSN spec.
Definition board.h:241
@ LT_FRONT
Definition board.h:248
@ LT_BACK
Definition board.h:249
#define DEFAULT_LINE_WIDTH
static struct BOARD_ITEM_DESC _BOARD_ITEM_DESC
Abstract interface for BOARD_ITEMs capable of storing other items inside.
virtual void Remove(BOARD_ITEM *aItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL)=0
Removes an item from the container.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:86
virtual void Mirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
Mirror this object relative to a given horizontal axis the layer is not changed.
friend class BOARD
Definition board_item.h:578
void SetUuidDirect(const KIID &aUuid)
Raw UUID assignment.
int GetY() const
Definition board_item.h:139
bool IsGroupableType() const
virtual BOARD_ITEM * Duplicate(bool addToParentGroup, BOARD_COMMIT *aCommit=nullptr) const
Create a copy of this BOARD_ITEM.
void DeleteStructure()
Delete this object after removing from its parent if it has one.
const std::vector< wxString > * GetEmbeddedFonts() override
void SwapItemData(BOARD_ITEM *aImage)
Swap data between aItem and aImage.
void SetLocked(bool aLocked) override
Definition board_item.h:417
virtual STROKE_PARAMS GetStroke() const
BOARD * m_boardCacheOwner
Definition board_item.h:576
virtual int BoardLayerCount() const
Return the total number of layers for the board that this item resides on.
virtual void SetStroke(const STROKE_PARAMS &aStroke)
void SetUuid(const KIID &aUuid)
PCB_LAYER_ID m_layer
Definition board_item.h:571
bool m_isLocked
Definition board_item.h:573
wxString GetParentAsString() const
For "parent" property.
virtual std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const
int GetX() const
Definition board_item.h:133
bool IsLocked() const override
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
virtual void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
Convert the item shape to a closed polygon.
virtual void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle)
Rotate this object.
void SetX(int aX)
Definition board_item.h:155
void SetY(int aY)
Definition board_item.h:161
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition board_item.h:374
virtual std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
FOOTPRINT * GetParentFootprint() const
VECTOR2I GetFPRelativePosition() const
virtual LSET BoardLayerSet() const
Return the LSET for the board that this item resides on.
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
Definition board_item.h:346
virtual bool IsLayerAgnostic() const
Check if this item's layer set must not be confined to a board's enabled layers.
Definition board_item.h:307
virtual void swapData(BOARD_ITEM *aImage)
const KIFONT::METRICS & GetFontMetrics() const
~BOARD_ITEM() override
void SetFPRelativePosition(const VECTOR2I &aPos)
virtual wxString LayerMaskDescribe() const
Return a string (to be shown to the user) describing a layer mask.
virtual bool FitsEnabledLayers(const LSET &aEnabledLayers, int aCopperLayerCount) const
Check if a board offering aEnabledLayers can hold this item.
virtual void CopyFrom(const BOARD_ITEM *aOther)
void ResetUuid()
Definition board_item.h:280
BOARD_ITEM_CONTAINER * GetParent() const
Definition board_item.h:266
bool IsSideSpecific() const
virtual int BoardCopperLayerCount() const
Return the total number of copper layers for the board that this item resides on.
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
int GetMaxError() const
virtual void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
Flip this object, i.e.
bool IsFootprintHolder() const
Find out if the board is being used to hold a single footprint for editing/viewing.
Definition board.h:439
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition board.h:1112
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
Definition board.h:891
void UncacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1766
int GetCopperLayerCount() const
Definition board.cpp:1131
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition board.cpp:936
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition board.cpp:1183
void CacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1738
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
Definition commit.h:102
A set of EDA_ITEMs (i.e., without duplicates).
Definition eda_group.h:43
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:98
virtual VECTOR2I GetPosition() const
Definition eda_item.h:348
virtual void SetPosition(const VECTOR2I &aPos)
Definition eda_item.h:349
const KIID m_Uuid
Definition eda_item.h:597
virtual EDA_GROUP * GetParentGroup() const
Definition eda_item.h:116
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
virtual void SetParentGroup(EDA_GROUP *aGroup)
Definition eda_item.h:115
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
Definition eda_item.cpp:278
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.cpp:153
EDA_ITEM * m_parent
Owner.
Definition eda_item.h:607
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:84
EDA_ITEM * findParent(KICAD_T aType) const
Definition eda_item.cpp:137
ENUM_MAP & Map(T aValue, const wxString &aName)
Definition property.h:776
static ENUM_MAP< T > & Instance()
Definition property.h:770
ENUM_MAP & Undefined(T aValue)
Definition property.h:783
wxPGChoices & Choices()
Definition property.h:821
Class that other classes need to inherit from, in order to be inspectable.
Definition inspectable.h:39
static const METRICS & Default()
Definition font.cpp:48
virtual wxString GetClass() const =0
Return the class name.
Definition kiid.h:46
LSET is a set of PCB_LAYER_IDs.
Definition lset.h:37
static const LSET & AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
Definition lset.cpp:604
static const LSET & SideSpecificMask()
Definition lset.cpp:732
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
Definition lset.cpp:309
static const LSET & AllTechMask()
Return a mask holding all technical layers (no CU layer) on both side.
Definition lset.cpp:672
static const LSET & AllLayersMask()
Definition lset.cpp:637
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
Definition lset.cpp:184
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
Definition property.h:263
PROPERTY_BASE & SetIsCopyable(bool aIsCopyable=true)
Definition property.h:359
PROPERTY_BASE & SetIsHiddenFromPropertiesManager(bool aHide=true)
Definition property.h:325
PROPERTY_BASE & SetIsHiddenFromLibraryEditors(bool aIsHidden=true)
Definition property.h:339
Provide class metadata.Helper macro to map type hashes to names.
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
static PROPERTY_MANAGER & Instance()
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
Represent a set of closed polygons.
Simple container to manage line stroke parameters.
A type-safe container of any type.
Definition ki_any.h:92
DRC_CONSTRAINT_T
Definition drc_rule.h:49
#define _(s)
@ NO_RECURSE
Definition eda_item.h:52
Some functions to handle hotkeys in KiCad.
wxString LayerName(int aLayer)
Returns the default display name for a given layer.
Definition layer_id.cpp:31
constexpr PCB_LAYER_ID PCBNEW_LAYER_ID_START
Definition layer_ids.h:170
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
Definition layer_ids.h:180
#define MAX_CU_LAYERS
Definition layer_ids.h:172
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
Definition layer_ids.h:303
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ UNDEFINED_LAYER
Definition layer_ids.h:57
@ PCB_LAYER_ID_COUNT
Definition layer_ids.h:167
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition lset.cpp:750
This file contains miscellaneous commonly used macros and functions.
#define UNIMPLEMENTED_FOR(type)
Definition macros.h:92
FLIP_DIRECTION
Definition mirror.h:23
#define _HKI(x)
Definition page_info.cpp:40
Class to handle a set of BOARD_ITEMs.
#define TYPE_HASH(x)
Definition property.h:74
#define IMPLEMENT_ENUM_TO_WXANY(type)
Definition property.h:875
#define NO_SETTER(owner, type)
Definition property.h:882
@ PT_COORD
Coordinate expressed in distance units (mm/inch)
Definition property.h:65
#define REGISTER_TYPE(x)
bool operator()(const BOARD_ITEM *a, const BOARD_ITEM *b) const
constexpr bool IsSingleLayerType(const KICAD_T aType)
Definition typeinfo.h:506
@ PCB_T
Definition typeinfo.h:74
@ 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_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
Definition typeinfo.h:93
@ 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_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
Definition typeinfo.h:92
@ 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