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
234 if( board )
235 layers &= board->GetEnabledLayers();
236
237 LSET copperLayers = layers & LSET::AllCuMask();
238 LSET techLayers = layers & LSET::AllTechMask();
239
240 // Try to be smart and useful. Check all copper first.
241 if( (int) copperLayers.count() == board->GetCopperLayerCount() )
242 return _( "all copper layers" );
243
244 for( LSET testLayers : { copperLayers, techLayers, layers } )
245 {
246 for( int bit = PCBNEW_LAYER_ID_START; bit < PCB_LAYER_ID_COUNT; ++bit )
247 {
248 if( testLayers[ bit ] )
249 {
250 wxString layerInfo = board->GetLayerName( static_cast<PCB_LAYER_ID>( bit ) );
251
252 if( testLayers.count() > 1 )
253 layerInfo << wxS( " " ) + _( "and others" );
254
255 return layerInfo;
256 }
257 }
258 }
259
260 // No copper, no technicals: no layer
261 return _( "no layers" );
262}
263
264
265std::vector<int> BOARD_ITEM::ViewGetLayers() const
266{
267 // Basic fallback
268 if( IsLocked() )
270
271 return { m_layer };
272}
273
274
276{
278
279 if( parent )
280 parent->Remove( this );
281
282 delete this;
283}
284
285
287{
289}
290
291
293{
294 if( aImage == nullptr )
295 return;
296
297 EDA_ITEM* parent = GetParent();
298 BOARD* board = GetBoard();
299
300 // Evict children from the item-by-id cache before the swap moves them to the
301 // image. The image is typically deleted after the swap (undo/redo, commit revert),
302 // which would leave the cache holding dangling pointers to the destroyed children.
303 if( board )
304 {
305 board->UncacheChildrenById( this );
306 }
307
308 swapData( aImage );
309 SetParent( parent );
310
311 if( board )
312 {
313 board->CacheChildrenById( this );
314 }
315}
316
317
318BOARD_ITEM* BOARD_ITEM::Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit ) const
319{
320 BOARD_ITEM* dupe = static_cast<BOARD_ITEM*>( Clone() );
321 dupe->ResetUuid();
322
323 if( addToParentGroup )
324 {
325 wxCHECK_MSG( aCommit, dupe, "Must supply a commit to update parent group" );
326
327 if( EDA_GROUP* group = dupe->GetParentGroup() )
328 {
329 aCommit->Modify( group->AsEdaItem(), nullptr, RECURSE_MODE::NO_RECURSE );
330 group->AddItem( dupe );
331 }
332 }
333
334 return dupe;
335}
336
337
339 int aClearance, int aError, ERROR_LOC aErrorLoc,
340 bool ignoreLineWidth ) const
341{
342 wxLogDebug( wxT( "%s doesn't implement TransformShapeToPolygon()" ), GetClass() );
343}
344
345
347{
348 if( a->Type() != b->Type() )
349 return a->Type() < b->Type();
350
351 if( a->GetLayerSet() != b->GetLayerSet() )
352 return a->GetLayerSet().Seq() < b->GetLayerSet().Seq();
353
354 if( a->m_Uuid != b->m_Uuid ) // UUIDs *should* always be unique (for valid boards anyway)
355 return a->m_Uuid < b->m_Uuid;
356
357 return a < b; // But just in case; ptrs are guaranteed to be different
358}
359
360
361std::shared_ptr<SHAPE> BOARD_ITEM::GetEffectiveShape( PCB_LAYER_ID aLayer, FLASHING aFlash ) const
362{
363 static std::shared_ptr<SHAPE> shape;
364
366
367 return shape;
368}
369
370
371std::shared_ptr<SHAPE_SEGMENT> BOARD_ITEM::GetEffectiveHoleShape() const
372{
373 static std::shared_ptr<SHAPE_SEGMENT> slot;
374
376
377 return slot;
378}
379
380
382{
383 VECTOR2I pos = GetPosition();
384
385 if( FOOTPRINT* parentFP = GetParentFootprint() )
386 {
387 pos -= parentFP->GetPosition();
388 RotatePoint( pos, -parentFP->GetOrientation() );
389 }
390
391 return pos;
392}
393
394
396{
397 VECTOR2I pos( aPos );
398
399 if( FOOTPRINT* parentFP = GetParentFootprint() )
400 {
401 RotatePoint( pos, parentFP->GetOrientation() );
402 pos += parentFP->GetPosition();
403 }
404
405 SetPosition( pos );
406}
407
408
409void BOARD_ITEM::Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle )
410{
411 wxMessageBox( wxT( "virtual BOARD_ITEM::Rotate used, should not occur" ), GetClass() );
412}
413
414
415void BOARD_ITEM::Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
416{
417 wxMessageBox( wxT( "virtual BOARD_ITEM::Flip used, should not occur" ), GetClass() );
418}
419
420
421void BOARD_ITEM::Mirror( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection )
422{
423 wxMessageBox( wxT( "virtual BOARD_ITEM::Mirror used, should not occur" ), GetClass() );
424}
425
426
428{
429 if( FOOTPRINT* fp = dynamic_cast<FOOTPRINT*>( m_parent ) )
430 return fp->GetReference();
431
432 return m_parent->m_Uuid.AsString();
433}
434
435
436const std::vector<wxString>* BOARD_ITEM::GetEmbeddedFonts()
437{
438 if( BOARD* board = GetBoard() )
439 return board->GetFontFiles();
440
441 return nullptr;
442}
443
444
445static struct BOARD_ITEM_DESC
446{
448 {
450
451 if( layerEnum.Choices().GetCount() == 0 )
452 {
453 layerEnum.Undefined( UNDEFINED_LAYER );
454
455 for( PCB_LAYER_ID layer : LSET::AllLayersMask() )
456 layerEnum.Map( layer, LSET::Name( layer ) );
457 }
458
462
463 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, wxString>( _HKI( "Parent" ),
467
468 auto isNotFootprintHolder =
469 []( INSPECTABLE* aItem ) -> bool
470 {
471 BOARD_ITEM* item = dynamic_cast<BOARD_ITEM*>( aItem );
472 return item && item->GetBoard() && !item->GetBoard()->IsFootprintHolder();
473 };
474
475 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position X" ),
478 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, int>( _HKI( "Position Y" ),
483 propMgr.AddProperty( new PROPERTY<BOARD_ITEM, bool>( _HKI( "Locked" ),
485 .SetAvailableFunc( isNotFootprintHolder );
486 }
488
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:128
constexpr EDA_IU_SCALE pcbIUScale
Definition base_units.h:112
@ 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:1503
int GetCopperLayerCount() const
Definition board.cpp:928
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition board.cpp:737
const LSET & GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition board.cpp:976
bool IsItemIndexedById(const BOARD_ITEM *aItem) const
Definition board.h:1433
void CacheChildrenById(const BOARD_ITEM *aParent)
Definition board.h:1477
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:279
virtual void SetPosition(const VECTOR2I &aPos)
Definition eda_item.h:280
const KIID m_Uuid
Definition eda_item.h:528
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:128
virtual void SetParent(EDA_ITEM *aParent)
Definition eda_item.cpp:93
EDA_ITEM * m_parent
Owner.
Definition eda_item.h:540
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.
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
@ 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
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