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:
55 case PCB_GROUP_T:
56 case PCB_GENERATOR_T:
57 case PCB_TRACE_T:
58 case PCB_VIA_T:
59 case PCB_ARC_T:
60 case PCB_DIMENSION_T:
66 case PCB_ZONE_T:
67 case PCB_BARCODE_T:
68 return true;
69 default:
70 return false;
71 }
72}
73
74
75void BOARD_ITEM::CopyFrom( const BOARD_ITEM* aOther )
76{
77 wxCHECK( aOther, /* void */ );
78 *this = *aOther;
79}
80
81
83{
84 if( Type() == PCB_T )
85 return static_cast<const BOARD*>( this );
86
87 return static_cast<const BOARD*>( findParent( PCB_T ) );
88}
89
90
92{
93 if( Type() == PCB_T )
94 return static_cast<BOARD*>( this );
95
96 return static_cast<BOARD*>( findParent( PCB_T ) );
97}
98
99
101{
102 // Safety net for paths that free an item without ::Remove(). Gate on the flag so a never-indexed
103 // transient does not walk GetBoard()'s parent chain into an already-freed board.
104 if( m_indexedInBoard && Type() != PCB_T )
105 {
106 if( BOARD* board = GetBoard(); board && board->IsItemIndexedById( this ) )
107 board->UncacheItemByPtr( this );
108 }
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 if( BOARD* board = GetBoard(); board && board->IsItemIndexedById( this ) )
124 {
125 board->RebindItemUuid( this, aUuid );
126 return;
127 }
128
129 SetUuidDirect( aUuid );
130}
131
132
133void BOARD_ITEM::SetUuidDirect( const KIID& aUuid )
134{
135 const_cast<KIID&>( m_Uuid ) = aUuid;
136}
137
138
140{
142 {
143 if( group->AsEdaItem()->IsLocked() )
144 return true;
145 }
146
147 if( !GetBoard() || GetBoard()->GetBoardUse() == BOARD_USE::FPHOLDER )
148 return false;
149
150 return m_isLocked;
151}
152
153
155{
156 wxFAIL_MSG( wxString( "GetStroke() not defined by " ) + GetClass() );
157
158 return STROKE_PARAMS( pcbIUScale.mmToIU( DEFAULT_LINE_WIDTH ) );
159}
160
161
163{
164 wxFAIL_MSG( wxString( "SetStroke() not defined by " ) + GetClass() );
165}
166
167
172
173
175{
176 if( const BOARD* board = GetBoard() )
177 return board->GetDesignSettings().m_MaxError;
178
179 return ARC_HIGH_DEF;
180}
181
182
184{
185 const BOARD* board = GetBoard();
186
187 if( board )
188 return board->GetLayerSet().count();
189
190 return 64;
191}
192
193
195{
196 const BOARD* board = GetBoard();
197
198 if( board )
199 return board->GetCopperLayerCount();
200
201 return 32;
202}
203
204
206{
207 const BOARD* board = GetBoard();
208
209 if( board )
210 return board->GetEnabledLayers();
211
212 return LSET::AllLayersMask();
213}
214
215
217{
218 if( const BOARD* board = GetBoard() )
219 return board->GetLayerName( m_layer );
220
221 // If no parent, return standard name
223}
224
225
227{
228 if( ( GetLayerSet() & LSET::SideSpecificMask() ).any() )
229 return true;
230
231 if( const BOARD* board = GetBoard() )
232 {
233 LAYER_T principalLayerType = board->GetLayerType( m_layer );
234
235 if( principalLayerType == LT_FRONT || principalLayerType == LT_BACK )
236 return true;
237 }
238
239 return false;
240}
241
242
244{
245 const BOARD* board = GetBoard();
246 LSET layers = GetLayerSet();
247 int copperLayerCount = MAX_CU_LAYERS;
248
249 if( board )
250 {
251 layers &= board->GetEnabledLayers();
252 copperLayerCount = board->GetCopperLayerCount();
253 }
254
255 LSET copperLayers = layers & LSET::AllCuMask();
256 LSET techLayers = layers & LSET::AllTechMask();
257
258 // Try to be smart and useful. Check all copper first.
259 if( (int) copperLayers.count() == copperLayerCount )
260 return _( "all copper layers" );
261
262 for( LSET testLayers : { copperLayers, techLayers, layers } )
263 {
264 for( int layer = PCBNEW_LAYER_ID_START; layer < PCB_LAYER_ID_COUNT; ++layer )
265 {
266 if( testLayers[ layer ] )
267 {
268 wxString layerInfo = board ? board->GetLayerName( ToLAYER_ID( layer ) )
269 : LayerName( ToLAYER_ID( layer ) );
270
271 if( testLayers.count() > 1 )
272 layerInfo << wxS( " " ) + _( "and others" );
273
274 return layerInfo;
275 }
276 }
277 }
278
279 // No copper, no technicals: no layer
280 return _( "no layers" );
281}
282
283
284std::vector<int> BOARD_ITEM::ViewGetLayers() const
285{
286 // Basic fallback
287 if( IsLocked() )
289
290 return { m_layer };
291}
292
293
295{
297
298 if( parent )
299 parent->Remove( this );
300
301 delete this;
302}
303
304
306{
308}
309
310
312{
313 if( aImage == nullptr )
314 return;
315
316 EDA_ITEM* parent = GetParent();
318 EDA_GROUP* imageGroup = aImage->GetParentGroup();
319 BOARD* board = GetBoard();
320
321 // Evict children from the item-by-id cache before the swap moves them to the
322 // image. The image is typically deleted after the swap (undo/redo, commit revert),
323 // which would leave the cache holding dangling pointers to the destroyed children.
324 if( board )
325 {
326 board->UncacheChildrenById( this );
327 }
328
329 swapData( aImage );
330 SetParent( parent );
331
332 // Group membership is a back-reference, not item data, so keep each side's own.
334 aImage->SetParentGroup( imageGroup );
335
336 if( board )
337 {
338 board->CacheChildrenById( this );
339 }
340}
341
342
343BOARD_ITEM* BOARD_ITEM::Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit ) const
344{
345 BOARD_ITEM* dupe = static_cast<BOARD_ITEM*>( Clone() );
346 dupe->ResetUuid();
347
348 if( addToParentGroup )
349 {
350 wxCHECK_MSG( aCommit, dupe, "Must supply a commit to update parent group" );
351
352 if( EDA_GROUP* group = dupe->GetParentGroup() )
353 {
354 aCommit->Modify( group->AsEdaItem(), nullptr, RECURSE_MODE::NO_RECURSE );
355 group->AddItem( dupe );
356 }
357 }
358
359 return dupe;
360}
361
362
364 int aClearance, int aError, ERROR_LOC aErrorLoc,
365 bool ignoreLineWidth ) const
366{
367 wxLogDebug( wxT( "%s doesn't implement TransformShapeToPolygon()" ), GetClass() );
368}
369
370
372{
373 if( a->Type() != b->Type() )
374 return a->Type() < b->Type();
375
376 if( a->GetLayerSet() != b->GetLayerSet() )
377 return a->GetLayerSet().Seq() < b->GetLayerSet().Seq();
378
379 if( a->m_Uuid != b->m_Uuid ) // UUIDs *should* always be unique (for valid boards anyway)
380 return a->m_Uuid < b->m_Uuid;
381
382 return a < b; // But just in case; ptrs are guaranteed to be different
383}
384
385
386std::shared_ptr<SHAPE> BOARD_ITEM::GetEffectiveShape( PCB_LAYER_ID aLayer, FLASHING aFlash ) const
387{
388 static std::shared_ptr<SHAPE> shape;
389
391
392 return shape;
393}
394
395
396std::shared_ptr<SHAPE_SEGMENT> BOARD_ITEM::GetEffectiveHoleShape() const
397{
398 static std::shared_ptr<SHAPE_SEGMENT> slot;
399
401
402 return slot;
403}
404
405
407{
408 if( FOOTPRINT* parentFP = GetParentFootprint() )
409 return parentFP->GetTransform().InverseApply( GetPosition() );
410
411 return GetPosition();
412}
413
414
416{
417 if( FOOTPRINT* parentFP = GetParentFootprint() )
418 SetPosition( parentFP->GetTransform().Apply( aPos ) );
419 else
420 SetPosition( aPos );
421}
422
423
424void BOARD_ITEM::Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle )
425{
426 wxMessageBox( wxT( "virtual BOARD_ITEM::Rotate used, should not occur" ), GetClass() );
427}
428
429
430void BOARD_ITEM::Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
431{
432 wxMessageBox( wxT( "virtual BOARD_ITEM::Flip used, should not occur" ), GetClass() );
433}
434
435
436void BOARD_ITEM::Mirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
437{
438 wxMessageBox( wxT( "virtual BOARD_ITEM::Mirror used, should not occur" ), GetClass() );
439}
440
441
443{
444 if( FOOTPRINT* fp = dynamic_cast<FOOTPRINT*>( m_parent ) )
445 return fp->GetReference();
446
447 return m_parent->m_Uuid.AsString();
448}
449
450
451const std::vector<wxString>* BOARD_ITEM::GetEmbeddedFonts()
452{
453 if( BOARD* board = GetBoard() )
454 return board->GetFontFiles();
455
456 return nullptr;
457}
458
459
460static struct BOARD_ITEM_DESC
461{
463 {
465
466 if( layerEnum.Choices().GetCount() == 0 )
467 {
468 layerEnum.Undefined( UNDEFINED_LAYER );
469
470 for( PCB_LAYER_ID layer : LSET::AllLayersMask() )
471 layerEnum.Map( layer, LSET::Name( layer ) );
472 }
473
477
478 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, wxString>( _HKI( "Parent" ),
482
483 auto isNotFootprintHolder =
484 []( INSPECTABLE* aItem ) -> bool
485 {
486 BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( aItem );
487 return item && item->GetBoard() && !item->GetBoard()->IsFootprintHolder();
488 };
489
490 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position X" ),
493 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position Y" ),
498 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, bool>( _HKI( "Locked" ),
500 .SetAvailableFunc( isNotFootprintHolder );
501 }
503
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:365
LAYER_T
The allowed types of layers, same as Specctra DSN spec.
Definition board.h:236
@ LT_FRONT
Definition board.h:243
@ LT_BACK
Definition board.h:244
#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:83
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:85
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:295
friend class BOARD
Definition board_item.h:548
void SetUuidDirect(const KIID &aUuid)
Raw UUID assignment.
int GetY() const
Definition board_item.h:126
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:386
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:540
bool m_isLocked
Definition board_item.h:542
wxString GetParentAsString() const
For "parent" property.
bool m_indexedInBoard
Definition board_item.h:546
int GetX() const
Definition board_item.h:120
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:142
void SetY(int aY)
Definition board_item.h:148
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition board_item.h:343
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:315
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:276
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:249
BOARD_ITEM_CONTAINER * GetParent() const
Definition board_item.h:235
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:403
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition board.h:1003
LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
Definition board.h:782
void UncacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1641
int GetCopperLayerCount() const
Definition board.cpp:994
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition board.cpp:802
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition board.cpp:1043
bool IsItemIndexedById(const BOARD_ITEM *aItem) const
Definition board.h:1569
void CacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1613
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:42
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:96
virtual VECTOR2I GetPosition() const
Definition eda_item.h:282
virtual void SetPosition(const VECTOR2I &aPos)
Definition eda_item.h:283
const KIID m_Uuid
Definition eda_item.h:531
virtual EDA_GROUP * GetParentGroup() const
Definition eda_item.h:114
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:108
virtual void SetParentGroup(EDA_GROUP *aGroup)
Definition eda_item.h:113
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
Definition eda_item.cpp:143
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.cpp:89
EDA_ITEM * m_parent
Owner.
Definition eda_item.h:543
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:37
EDA_ITEM * findParent(KICAD_T aType) const
Definition eda_item.cpp:73
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:772
Class that other classes need to inherit from, in order to be inspectable.
Definition inspectable.h:38
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: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:92
#define _(s)
@ NO_RECURSE
Definition eda_item.h:50
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:826
#define NO_SETTER(owner, type)
Definition property.h:833
@ 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
@ PCB_T
Definition typeinfo.h:75
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
Definition typeinfo.h:81
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
Definition typeinfo.h:99
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
Definition typeinfo.h:96
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
Definition typeinfo.h:84
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
Definition typeinfo.h:90
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
Definition typeinfo.h:97
@ PCB_GROUP_T
class PCB_GROUP, a set of BOARD_ITEMs
Definition typeinfo.h:104
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
Definition typeinfo.h:86
@ PCB_ZONE_T
class ZONE, a copper pour area
Definition typeinfo.h:101
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
Definition typeinfo.h:85
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
Definition typeinfo.h:82
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
Definition typeinfo.h:83
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
Definition typeinfo.h:94
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition typeinfo.h:79
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
Definition typeinfo.h:95
@ PCB_PAD_T
class PAD, a pad in a footprint
Definition typeinfo.h:80
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
Definition typeinfo.h:91
@ PCB_DIMENSION_T
class PCB_DIMENSION_BASE: abstract dimension meta-type
Definition typeinfo.h:93
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
Definition typeinfo.h:87
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
Definition typeinfo.h:89
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
Definition typeinfo.h:98
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:683