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, you may find one here:
20 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
21 * or you may search the http://www.gnu.org website for the version 2 license,
22 * or you may write to the Free Software Foundation, Inc.,
23 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 */
25
26#include <wx/debug.h>
27#include <wx/msgdlg.h>
28#include <i18n_utility.h>
29#include <macros.h>
30#include <board.h>
32#include <lset.h>
33#include <pcb_group.h>
34#include <pcb_generator.h>
35#include <footprint.h>
36#include <font/font.h>
37#include <properties/property.h>
39
40
42{
43 switch ( Type() )
44 {
45 case PCB_FOOTPRINT_T:
46 case PCB_PAD_T:
47 case PCB_SHAPE_T:
49 case PCB_FIELD_T:
50 case PCB_TEXT_T:
51 case PCB_TEXTBOX_T:
52 case PCB_TABLE_T:
53 case PCB_GROUP_T:
54 case PCB_GENERATOR_T:
55 case PCB_TRACE_T:
56 case PCB_VIA_T:
57 case PCB_ARC_T:
58 case PCB_DIMENSION_T:
64 case PCB_ZONE_T:
65 case PCB_BARCODE_T:
66 return true;
67 default:
68 return false;
69 }
70}
71
72
73void BOARD_ITEM::CopyFrom( const BOARD_ITEM* aOther )
74{
75 wxCHECK( aOther, /* void */ );
76 *this = *aOther;
77}
78
79
81{
82 if( Type() == PCB_T )
83 return static_cast<const BOARD*>( this );
84
85 return static_cast<const BOARD*>( findParent( PCB_T ) );
86}
87
88
90{
91 if( Type() == PCB_T )
92 return static_cast<BOARD*>( this );
93
94 return static_cast<BOARD*>( findParent( PCB_T ) );
95}
96
97
99{
100 return static_cast<FOOTPRINT*>( findParent( PCB_FOOTPRINT_T ) );
101}
102
103
104void BOARD_ITEM::SetUuid( const KIID& aUuid )
105{
106 if( m_Uuid == aUuid )
107 return;
108
109 if( BOARD* board = GetBoard(); board && board->IsItemIndexedById( this ) )
110 {
111 board->RebindItemUuid( this, aUuid );
112 return;
113 }
114
115 SetUuidDirect( aUuid );
116}
117
118
119void BOARD_ITEM::SetUuidDirect( const KIID& aUuid )
120{
121 const_cast<KIID&>( m_Uuid ) = aUuid;
122}
123
124
126{
128 {
129 if( group->AsEdaItem()->IsLocked() )
130 return true;
131 }
132
133 if( !GetBoard() || GetBoard()->GetBoardUse() == BOARD_USE::FPHOLDER )
134 return false;
135
136 return m_isLocked;
137}
138
139
141{
142 wxFAIL_MSG( wxString( "GetStroke() not defined by " ) + GetClass() );
143
144 return STROKE_PARAMS( pcbIUScale.mmToIU( DEFAULT_LINE_WIDTH ) );
145}
146
147
149{
150 wxFAIL_MSG( wxString( "SetStroke() not defined by " ) + GetClass() );
151}
152
153
158
159
161{
162 if( const BOARD* board = GetBoard() )
163 return board->GetDesignSettings().m_MaxError;
164
165 return ARC_HIGH_DEF;
166}
167
168
170{
171 const BOARD* board = GetBoard();
172
173 if( board )
174 return board->GetLayerSet().count();
175
176 return 64;
177}
178
179
181{
182 const BOARD* board = GetBoard();
183
184 if( board )
185 return board->GetCopperLayerCount();
186
187 return 32;
188}
189
190
192{
193 const BOARD* board = GetBoard();
194
195 if( board )
196 return board->GetEnabledLayers();
197
198 return LSET::AllLayersMask();
199}
200
201
203{
204 if( const BOARD* board = GetBoard() )
205 return board->GetLayerName( m_layer );
206
207 // If no parent, return standard name
209}
210
211
213{
214 if( ( GetLayerSet() & LSET::SideSpecificMask() ).any() )
215 return true;
216
217 if( const BOARD* board = GetBoard() )
218 {
219 LAYER_T principalLayerType = board->GetLayerType( m_layer );
220
221 if( principalLayerType == LT_FRONT || principalLayerType == LT_BACK )
222 return true;
223 }
224
225 return false;
226}
227
228
230{
231 const BOARD* board = GetBoard();
232 LSET layers = GetLayerSet();
233 int copperLayerCount = MAX_CU_LAYERS;
234
235 if( board )
236 {
237 layers &= board->GetEnabledLayers();
238 copperLayerCount = board->GetCopperLayerCount();
239 }
240
241 LSET copperLayers = layers & LSET::AllCuMask();
242 LSET techLayers = layers & LSET::AllTechMask();
243
244 // Try to be smart and useful. Check all copper first.
245 if( (int) copperLayers.count() == copperLayerCount )
246 return _( "all copper layers" );
247
248 for( LSET testLayers : { copperLayers, techLayers, layers } )
249 {
250 for( int layer = PCBNEW_LAYER_ID_START; layer < PCB_LAYER_ID_COUNT; ++layer )
251 {
252 if( testLayers[ layer ] )
253 {
254 wxString layerInfo = board ? board->GetLayerName( ToLAYER_ID( layer ) )
255 : LayerName( ToLAYER_ID( layer ) );
256
257 if( testLayers.count() > 1 )
258 layerInfo << wxS( " " ) + _( "and others" );
259
260 return layerInfo;
261 }
262 }
263 }
264
265 // No copper, no technicals: no layer
266 return _( "no layers" );
267}
268
269
270std::vector<int> BOARD_ITEM::ViewGetLayers() const
271{
272 // Basic fallback
273 if( IsLocked() )
275
276 return { m_layer };
277}
278
279
281{
283
284 if( parent )
285 parent->Remove( this );
286
287 delete this;
288}
289
290
292{
294}
295
296
298{
299 if( aImage == nullptr )
300 return;
301
302 EDA_ITEM* parent = GetParent();
303 BOARD* board = GetBoard();
304
305 // Evict children from the item-by-id cache before the swap moves them to the
306 // image. The image is typically deleted after the swap (undo/redo, commit revert),
307 // which would leave the cache holding dangling pointers to the destroyed children.
308 if( board )
309 {
310 board->UncacheChildrenById( this );
311 }
312
313 swapData( aImage );
314 SetParent( parent );
315
316 if( board )
317 {
318 board->CacheChildrenById( this );
319 }
320}
321
322
323BOARD_ITEM* BOARD_ITEM::Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit ) const
324{
325 BOARD_ITEM* dupe = static_cast<BOARD_ITEM*>( Clone() );
326 dupe->ResetUuid();
327
328 if( addToParentGroup )
329 {
330 wxCHECK_MSG( aCommit, dupe, "Must supply a commit to update parent group" );
331
332 if( EDA_GROUP* group = dupe->GetParentGroup() )
333 {
334 aCommit->Modify( group->AsEdaItem(), nullptr, RECURSE_MODE::NO_RECURSE );
335 group->AddItem( dupe );
336 }
337 }
338
339 return dupe;
340}
341
342
344 int aClearance, int aError, ERROR_LOC aErrorLoc,
345 bool ignoreLineWidth ) const
346{
347 wxLogDebug( wxT( "%s doesn't implement TransformShapeToPolygon()" ), GetClass() );
348}
349
350
352{
353 if( a->Type() != b->Type() )
354 return a->Type() < b->Type();
355
356 if( a->GetLayerSet() != b->GetLayerSet() )
357 return a->GetLayerSet().Seq() < b->GetLayerSet().Seq();
358
359 if( a->m_Uuid != b->m_Uuid ) // UUIDs *should* always be unique (for valid boards anyway)
360 return a->m_Uuid < b->m_Uuid;
361
362 return a < b; // But just in case; ptrs are guaranteed to be different
363}
364
365
366std::shared_ptr<SHAPE> BOARD_ITEM::GetEffectiveShape( PCB_LAYER_ID aLayer, FLASHING aFlash ) const
367{
368 static std::shared_ptr<SHAPE> shape;
369
371
372 return shape;
373}
374
375
376std::shared_ptr<SHAPE_SEGMENT> BOARD_ITEM::GetEffectiveHoleShape() const
377{
378 static std::shared_ptr<SHAPE_SEGMENT> slot;
379
381
382 return slot;
383}
384
385
387{
388 VECTOR2I pos = GetPosition();
389
390 if( FOOTPRINT* parentFP = GetParentFootprint() )
391 {
392 pos -= parentFP->GetPosition();
393 RotatePoint( pos, -parentFP->GetOrientation() );
394 }
395
396 return pos;
397}
398
399
401{
402 VECTOR2I pos( aPos );
403
404 if( FOOTPRINT* parentFP = GetParentFootprint() )
405 {
406 RotatePoint( pos, parentFP->GetOrientation() );
407 pos += parentFP->GetPosition();
408 }
409
410 SetPosition( pos );
411}
412
413
414void BOARD_ITEM::Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle )
415{
416 wxMessageBox( wxT( "virtual BOARD_ITEM::Rotate used, should not occur" ), GetClass() );
417}
418
419
420void BOARD_ITEM::Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
421{
422 wxMessageBox( wxT( "virtual BOARD_ITEM::Flip used, should not occur" ), GetClass() );
423}
424
425
426void BOARD_ITEM::Mirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
427{
428 wxMessageBox( wxT( "virtual BOARD_ITEM::Mirror used, should not occur" ), GetClass() );
429}
430
431
433{
434 if( FOOTPRINT* fp = dynamic_cast<FOOTPRINT*>( m_parent ) )
435 return fp->GetReference();
436
437 return m_parent->m_Uuid.AsString();
438}
439
440
441const std::vector<wxString>* BOARD_ITEM::GetEmbeddedFonts()
442{
443 if( BOARD* board = GetBoard() )
444 return board->GetFontFiles();
445
446 return nullptr;
447}
448
449
450static struct BOARD_ITEM_DESC
451{
453 {
455
456 if( layerEnum.Choices().GetCount() == 0 )
457 {
458 layerEnum.Undefined( UNDEFINED_LAYER );
459
460 for( PCB_LAYER_ID layer : LSET::AllLayersMask() )
461 layerEnum.Map( layer, LSET::Name( layer ) );
462 }
463
467
468 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, wxString>( _HKI( "Parent" ),
472
473 auto isNotFootprintHolder =
474 []( INSPECTABLE* aItem ) -> bool
475 {
476 BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( aItem );
477 return item && item->GetBoard() && !item->GetBoard()->IsFootprintHolder();
478 };
479
480 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position X" ),
483 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position Y" ),
488 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, bool>( _HKI( "Locked" ),
490 .SetAvailableFunc( isNotFootprintHolder );
491 }
493
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:141
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:125
@ FPHOLDER
Definition board.h:315
LAYER_T
The allowed types of layers, same as Specctra DSN spec.
Definition board.h:186
@ LT_FRONT
Definition board.h:193
@ LT_BACK
Definition board.h:194
#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.
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition board_item.h:268
friend class BOARD
Definition board_item.h:494
void SetUuidDirect(const KIID &aUuid)
Raw UUID assignment.
int GetY() const
Definition board_item.h:125
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:359
virtual STROKE_PARAMS GetStroke() const
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:490
bool m_isLocked
Definition board_item.h:492
wxString GetParentAsString() const
For "parent" property.
int GetX() const
Definition board_item.h:119
bool IsLocked() const override
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:141
void SetY(int aY)
Definition board_item.h:147
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition board_item.h:316
virtual std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
virtual std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
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:288
virtual void swapData(BOARD_ITEM *aImage)
const KIFONT::METRICS & GetFontMetrics() const
void SetFPRelativePosition(const VECTOR2I &aPos)
virtual wxString LayerMaskDescribe() const
Return a string (to be shown to the user) describing a layer mask.
virtual void CopyFrom(const BOARD_ITEM *aOther)
void ResetUuid()
Definition board_item.h:248
BOARD_ITEM_CONTAINER * GetParent() const
Definition board_item.h:234
bool IsSideSpecific() const
virtual int BoardCopperLayerCount() const
Return the total number of copper layers for the board that this item resides on.
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
int GetMaxError() const
virtual std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() 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:353
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition board.h:909
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
Definition board.h:688
void UncacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1531
int GetCopperLayerCount() const
Definition board.cpp:937
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition board.cpp:745
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition board.cpp:986
bool IsItemIndexedById(const BOARD_ITEM *aItem) const
Definition board.h:1459
void CacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1503
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:106
A set of EDA_ITEMs (i.e., without duplicates).
Definition eda_group.h:46
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:100
virtual VECTOR2I GetPosition() const
Definition eda_item.h:286
virtual void SetPosition(const VECTOR2I &aPos)
Definition eda_item.h:287
const KIID m_Uuid
Definition eda_item.h:535
virtual EDA_GROUP * GetParentGroup() const
Definition eda_item.h:118
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:112
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
Definition eda_item.cpp:147
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.cpp:93
EDA_ITEM * m_parent
Owner.
Definition eda_item.h:547
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:41
EDA_ITEM * findParent(KICAD_T aType) const
Definition eda_item.cpp:77
ENUM_MAP & Map(T aValue, const wxString &aName)
Definition property.h:727
static ENUM_MAP< T > & Instance()
Definition property.h:721
ENUM_MAP & Undefined(T aValue)
Definition property.h:734
wxPGChoices & Choices()
Definition property.h:770
Class that other classes need to inherit from, in order to be inspectable.
Definition inspectable.h:38
static const METRICS & Default()
Definition font.cpp:52
virtual wxString GetClass() const =0
Return the class name.
Definition kiid.h:48
LSET is a set of PCB_LAYER_IDs.
Definition lset.h:37
static const LSET & AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
Definition lset.cpp:608
static const LSET & SideSpecificMask()
Definition lset.cpp:736
LSEQ Seq(const LSEQ &aSequence) const
Return an LSEQ from the union of this LSET and a desired sequence.
Definition lset.cpp:313
static const LSET & AllTechMask()
Return a mask holding all technical layers (no CU layer) on both side.
Definition lset.cpp:676
static const LSET & AllLayersMask()
Definition lset.cpp:641
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
Definition lset.cpp:188
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
Definition property.h:262
PROPERTY_BASE & SetIsHiddenFromPropertiesManager(bool aHide=true)
Definition property.h:319
PROPERTY_BASE & SetIsHiddenFromLibraryEditors(bool aIsHidden=true)
Definition property.h:333
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:93
#define _(s)
@ NO_RECURSE
Definition eda_item.h:54
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:174
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
Definition layer_ids.h:184
#define MAX_CU_LAYERS
Definition layer_ids.h:176
@ LAYER_LOCKED_ITEM_SHADOW
Shadow layer for locked items.
Definition layer_ids.h:307
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:60
@ UNDEFINED_LAYER
Definition layer_ids.h:61
@ PCB_LAYER_ID_COUNT
Definition layer_ids.h:171
PCB_LAYER_ID ToLAYER_ID(int aLayer)
Definition lset.cpp:754
This file contains miscellaneous commonly used macros and functions.
#define UNIMPLEMENTED_FOR(type)
Definition macros.h:96
FLIP_DIRECTION
Definition mirror.h:27
#define _HKI(x)
Definition page_info.cpp:44
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:821
#define NO_SETTER(owner, type)
Definition property.h:828
@ 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
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
Definition trigo.cpp:229
@ PCB_T
Definition typeinfo.h:79
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition typeinfo.h:85
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition typeinfo.h:103
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition typeinfo.h:100
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
Definition typeinfo.h:88
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition typeinfo.h:94
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition typeinfo.h:101
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition typeinfo.h:108
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition typeinfo.h:90
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition typeinfo.h:105
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition typeinfo.h:89
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
Definition typeinfo.h:86
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Definition typeinfo.h:87
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
Definition typeinfo.h:98
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition typeinfo.h:83
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition typeinfo.h:99
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition typeinfo.h:84
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
Definition typeinfo.h:95
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
Definition typeinfo.h:97
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
Definition typeinfo.h:91
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
Definition typeinfo.h:93
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
Definition typeinfo.h:102
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:687