KiCad PCB EDA Suite
Loading...
Searching...
No Matches
board_adapter.h
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) 2015-2016 Mario Luzeiro <[email protected]>
5 * Copyright (C) 2023 CERN
6 * Copyright (C) 1992-2024 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#ifndef BOARD_ADAPTER_H
27#define BOARD_ADAPTER_H
28
29#include <array>
30#include <vector>
31#include "../3d_rendering/raytracing/accelerators/container_2d.h"
32#include "../3d_rendering/raytracing/accelerators/container_3d.h"
33#include "../3d_rendering/raytracing/shapes3D/bbox_3d.h"
34#include <gal/3d/camera.h>
35#include <3d_enums.h>
36#include "../3d_cache/3d_cache.h"
37#include "../common_ogl/ogl_attr_list.h"
38#include "../3d_viewer/eda_3d_viewer_settings.h"
39
40#include <layer_ids.h>
41#include <pad.h>
42#include <pcb_track.h>
43#include <pcb_base_frame.h>
44#include <pcb_text.h>
45#include <pcb_textbox.h>
46#include <pcb_table.h>
47#include <pcb_shape.h>
48#include <pcb_dimension.h>
49#include <zone.h>
50#include <footprint.h>
51#include <reporter.h>
53
54class COLOR_SETTINGS;
55class PCB_TEXTBOX;
56
58typedef std::map<PCB_LAYER_ID, BVH_CONTAINER_2D*> MAP_CONTAINER_2D_BASE;
59
61typedef std::map<PCB_LAYER_ID, SHAPE_POLY_SET*> MAP_POLY;
62
66#define RANGE_SCALE_3D 8.0f
67
68
73{
74public:
76
78
84 void Set3dCacheManager( S3D_CACHE* aCacheMgr ) noexcept { m_3dModelManager = aCacheMgr; }
85 S3D_CACHE* Get3dCacheManager() const noexcept { return m_3dModelManager; }
86
92 bool Is3dLayerEnabled( PCB_LAYER_ID aLayer,
93 const std::bitset<LAYER_3D_END>& aVisibilityFlags ) const;
94
98 bool IsFootprintShown( FOOTPRINT_ATTR_T aFPAttributes ) const;
99
105 void SetBoard( BOARD* aBoard ) noexcept { m_board = aBoard; }
106 const BOARD* GetBoard() const noexcept { return m_board; }
107
108 void ReloadColorSettings() noexcept;
109
110 std::map<int, COLOR4D> GetLayerColors() const;
111 std::map<int, COLOR4D> GetDefaultColors() const;
112 void SetLayerColors( const std::map<int, COLOR4D>& aColors );
113
114 std::bitset<LAYER_3D_END> GetVisibleLayers() const;
116 void SetVisibleLayers( const std::bitset<LAYER_3D_END>& aLayers );
117
124 void InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningReporter );
125
131 double BiuTo3dUnits() const noexcept { return m_biuTo3Dunits; }
132
138 const BBOX_3D& GetBBox() const noexcept { return m_boardBoundingBox; }
139
143 float GetBoardBodyThickness() const noexcept { return m_boardBodyThickness3DU; }
144
149
153 float GetFrontCopperThickness() const noexcept { return m_frontCopperThickness3DU; }
154 float GetBackCopperThickness() const noexcept { return m_backCopperThickness3DU; }
155
159 int GetHolePlatingThickness() const noexcept;
160
166 VECTOR2I GetBoardSize() const noexcept { return m_boardSize; }
167
173 VECTOR2I GetBoardPos() const noexcept { return m_boardPos; }
174
180 const SFVEC3F& GetBoardCenter() const noexcept { return m_boardCenter; }
181
189 float GetFootprintZPos( bool aIsFlipped ) const ;
190
196 const SHAPE_POLY_SET& GetBoardPoly() const noexcept { return m_board_poly; }
197
204 SFVEC4F GetLayerColor( PCB_LAYER_ID aLayerId ) const;
205
212 SFVEC4F GetItemColor( int aItemId ) const;
213
218 SFVEC4F GetColor( const COLOR4D& aColor ) const;
219
220 SFVEC2F GetSphericalCoord( int i ) const;
221
228 float GetLayerTopZPos( PCB_LAYER_ID aLayerId ) const noexcept
229 {
230 return m_layerZcoordTop[aLayerId];
231 }
232
239 float GetLayerBottomZPos( PCB_LAYER_ID aLayerId ) const noexcept
240 {
241 return m_layerZcoordBottom[aLayerId];
242 }
243
249 const MAP_CONTAINER_2D_BASE& GetLayerMap() const noexcept { return m_layerMap; }
250 const BVH_CONTAINER_2D* GetPlatedPadsFront() const noexcept { return m_platedPadsFront; }
251 const BVH_CONTAINER_2D* GetPlatedPadsBack() const noexcept { return m_platedPadsBack; }
253 const BVH_CONTAINER_2D* GetOffboardPadsBack() const noexcept { return m_offboardPadsBack; }
254
255 const MAP_CONTAINER_2D_BASE& GetLayerHoleMap() const noexcept { return m_layerHoleMap; }
256 const BVH_CONTAINER_2D& GetTH_IDs() const noexcept { return m_TH_IDs; }
257 const BVH_CONTAINER_2D& GetTH_ODs() const noexcept { return m_TH_ODs; }
258
266 const SHAPE_POLY_SET& GetTH_ODPolys() const noexcept
267 {
268 return m_TH_ODPolys;
269 }
270
271 const BVH_CONTAINER_2D& GetViaAnnuli() const noexcept
272 {
273 return m_viaAnnuli;
274 }
275
276 const SHAPE_POLY_SET& GetViaAnnuliPolys() const noexcept
277 {
278 return m_viaAnnuliPolys;
279 }
280
281 const SHAPE_POLY_SET& GetNPTH_ODPolys() const noexcept
282 {
283 return m_NPTH_ODPolys;
284 }
285
289 const BVH_CONTAINER_2D& GetViaTH_ODs() const noexcept
290 {
291 return m_viaTH_ODs;
292 }
293
294 const SHAPE_POLY_SET& GetViaTH_ODPolys() const noexcept
295 {
296 return m_viaTH_ODPolys;
297 }
298
299 unsigned int GetViaCount() const noexcept { return m_viaCount; }
300 unsigned int GetHoleCount() const noexcept { return m_holeCount; }
301
305 float GetAverageViaHoleDiameter() const noexcept { return m_averageViaHoleDiameter; }
306
310 float GetAverageHoleDiameter() const noexcept { return m_averageHoleDiameter; }
311
315 float GetAverageTrackWidth() const noexcept { return m_averageTrackWidth; }
316
321 unsigned int GetCircleSegmentCount( float aDiameter3DU ) const;
322
327 unsigned int GetCircleSegmentCount( int aDiameterBIU ) const;
328
334 const MAP_POLY& GetPolyMap() const noexcept { return m_layers_poly; }
335
338 const MAP_POLY& GetHoleIdPolysMap() const noexcept { return m_layerHoleIdPolys; }
339 const MAP_POLY& GetHoleOdPolysMap() const noexcept { return m_layerHoleOdPolys; }
340
341private:
347 bool createBoardPolygon( wxString* aErrorMsg );
348 void createLayers( REPORTER* aStatusReporter );
349 void destroyLayers();
350
351 // Helper functions to create the board
352 void createViaWithMargin( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer,
353 int aMargin );
354
355 void createTrack( const PCB_TRACK* aTrack, CONTAINER_2D_BASE* aDstContainer );
356
357 void createPadWithMargin( const PAD *aPad, CONTAINER_2D_BASE* aDstContainer,
358 PCB_LAYER_ID aLayer, const VECTOR2I& aMargin ) const;
359
360 void createPadWithHole( const PAD* aPad, CONTAINER_2D_BASE* aDstContainer,
361 int aInflateValue );
362
363 void addPads( const FOOTPRINT* aFootprint, CONTAINER_2D_BASE* aDstContainer,
364 PCB_LAYER_ID aLayerId, bool aSkipPlatedPads, bool aSkipNonPlatedPads );
365
366 void addFootprintShapes( const FOOTPRINT* aFootprint, CONTAINER_2D_BASE* aDstContainer,
367 PCB_LAYER_ID aLayerId,
368 const std::bitset<LAYER_3D_END>& aVisibilityFlags );
369
370 void addText( const EDA_TEXT* aText, CONTAINER_2D_BASE* aDstContainer,
371 const BOARD_ITEM* aOwner );
372
373 void addShape( const PCB_SHAPE* aShape, CONTAINER_2D_BASE* aContainer,
374 const BOARD_ITEM* aOwner );
375
376 void addShape( const PCB_DIMENSION_BASE* aDimension, CONTAINER_2D_BASE* aDstContainer,
377 const BOARD_ITEM* aOwner );
378
379 void addShape( const PCB_TEXTBOX* aTextBox, CONTAINER_2D_BASE* aContainer,
380 const BOARD_ITEM* aOwner );
381
382 void addTable( const PCB_TABLE* aTable, CONTAINER_2D_BASE* aContainer,
383 const BOARD_ITEM* aOwner );
384
385 void addSolidAreasShapes( const ZONE* aZone, CONTAINER_2D_BASE* aDstContainer,
386 PCB_LAYER_ID aLayerId );
387
388 void createArcSegments( const VECTOR2I& aCentre, const VECTOR2I& aStart,
389 const EDA_ANGLE& aArcAngle, int aCircleToSegmentsCount, int aWidth,
390 CONTAINER_2D_BASE* aContainer, const BOARD_ITEM& aOwner );
391
392 void buildPadOutlineAsSegments( const PAD* aPad, CONTAINER_2D_BASE* aDstContainer, int aWidth );
393
394public:
400
410
411public:
413
418
432
433private:
437
442
445
450
453
458
460
463
468
473
475
478
479 std::array<float, PCB_LAYER_ID_COUNT> m_layerZcoordTop;
481
482 std::array<float, PCB_LAYER_ID_COUNT> m_layerZcoordBottom;
484
490
491 unsigned int m_trackCount;
493 unsigned int m_viaCount;
495 unsigned int m_holeCount;
497
503 static const wxChar* m_logTrace;
504
505};
506
507
509{
510public:
511 virtual BOARD_ADAPTER& GetAdapter() = 0;
512 virtual CAMERA& GetCurrentCamera() = 0;
513
515};
516
517#endif // BOARD_ADAPTER_H
declared enumerations and flags
std::map< PCB_LAYER_ID, SHAPE_POLY_SET * > MAP_POLY
A type that stores polysets for each layer id.
Definition: board_adapter.h:61
std::map< PCB_LAYER_ID, BVH_CONTAINER_2D * > MAP_CONTAINER_2D_BASE
A type that stores a container of 2d objects for each layer id.
Definition: board_adapter.h:58
Define an abstract camera.
Helper class to handle information needed to display 3D board.
Definition: board_adapter.h:73
MAP_CONTAINER_2D_BASE m_layerHoleMap
Holes for each layer.
double BiuTo3dUnits() const noexcept
Board integer units To 3D units.
BVH_CONTAINER_2D * m_offboardPadsBack
SFVEC4F m_BgColorTop
background top color
SFVEC4F m_ECO2Color
const SHAPE_POLY_SET * GetFrontPlatedPadAndGraphicPolys()
void SetVisibleLayers(const std::bitset< LAYER_3D_END > &aLayers)
float m_solderPasteLayerThickness3DU
const MAP_CONTAINER_2D_BASE & GetLayerHoleMap() const noexcept
S3D_CACHE * m_3dModelManager
void createLayers(REPORTER *aStatusReporter)
VECTOR2I m_boardPos
Board center position in board internal units.
float m_backCopperThickness3DU
SHAPE_POLY_SET m_TH_ODPolys
PTH outer diameters.
static KIGFX::COLOR4D g_DefaultComments
SFVEC4F m_SolderPasteColor
in realistic mode: solder paste color
static CUSTOM_COLORS_LIST g_PasteColors
BBOX_3D m_boardBoundingBox
3D bounding box of the board in 3D units.
static CUSTOM_COLORS_LIST g_FinishColors
static KIGFX::COLOR4D g_DefaultBoardBody
const SHAPE_POLY_SET & GetBoardPoly() const noexcept
Get the current polygon of the epoxy board.
const SHAPE_POLY_SET & GetNPTH_ODPolys() const noexcept
unsigned int m_viaCount
const BVH_CONTAINER_2D * GetOffboardPadsFront() const noexcept
COLOR_SETTINGS * m_colors
bool IsFootprintShown(FOOTPRINT_ATTR_T aFPAttributes) const
Test if footprint should be displayed in relation to attributes and the flags.
static KIGFX::COLOR4D g_DefaultSolderMask
std::map< int, COLOR4D > GetLayerColors() const
const SHAPE_POLY_SET & GetViaTH_ODPolys() const noexcept
const MAP_POLY & GetPolyMap() const noexcept
Get map of polygon's layers.
std::array< float, PCB_LAYER_ID_COUNT > m_layerZcoordBottom
Bottom (Start) Z position of each layer in 3D units.
MAP_POLY m_layerHoleOdPolys
Hole outer diameters (per layer)
void addSolidAreasShapes(const ZONE *aZone, CONTAINER_2D_BASE *aDstContainer, PCB_LAYER_ID aLayerId)
VECTOR2I GetBoardSize() const noexcept
Get the board size.
const MAP_POLY & GetHoleOdPolysMap() const noexcept
SHAPE_POLY_SET * m_frontPlatedCopperPolys
MAP_CONTAINER_2D_BASE m_layerMap
2D elements for each layer.
BVH_CONTAINER_2D m_TH_ODs
List of PTH outer diameters.
float GetAverageTrackWidth() const noexcept
SHAPE_POLY_SET * m_frontPlatedPadAndGraphicPolys
unsigned int m_trackCount
const BBOX_3D & GetBBox() const noexcept
Get the board outling bounding box.
float m_averageTrackWidth
SHAPE_POLY_SET m_board_poly
Board outline polygon.
std::bitset< LAYER_3D_END > GetVisibleLayers() const
SFVEC4F m_SolderMaskColorBot
in realistic mode: solder mask color ( bot )
bool m_IsPreviewer
true if we're in a 3D preview panel, false for the standard 3D viewer
void addFootprintShapes(const FOOTPRINT *aFootprint, CONTAINER_2D_BASE *aDstContainer, PCB_LAYER_ID aLayerId, const std::bitset< LAYER_3D_END > &aVisibilityFlags)
void createArcSegments(const VECTOR2I &aCentre, const VECTOR2I &aStart, const EDA_ANGLE &aArcAngle, int aCircleToSegmentsCount, int aWidth, CONTAINER_2D_BASE *aContainer, const BOARD_ITEM &aOwner)
VECTOR2I GetBoardPos() const noexcept
Get the board center.
static CUSTOM_COLORS_LIST g_MaskColors
MAP_POLY m_layerHoleIdPolys
Hole inner diameters (per layer)
int GetHolePlatingThickness() const noexcept
Get the hole plating thickness (NB: in BOARD UNITS!).
void InitSettings(REPORTER *aStatusReporter, REPORTER *aWarningReporter)
Function to be called by the render when it need to reload the settings for the board.
const BVH_CONTAINER_2D & GetViaAnnuli() const noexcept
float GetLayerBottomZPos(PCB_LAYER_ID aLayerId) const noexcept
Get the bottom z position.
static KIGFX::COLOR4D g_DefaultECOs
const BVH_CONTAINER_2D * GetOffboardPadsBack() const noexcept
const BVH_CONTAINER_2D & GetTH_IDs() const noexcept
SFVEC4F m_SolderMaskColorTop
in realistic mode: solder mask color ( top )
SFVEC4F GetColor(const COLOR4D &aColor) const
SHAPE_POLY_SET m_viaAnnuliPolys
Via annular ring outer diameters.
BVH_CONTAINER_2D * m_offboardPadsFront
float m_averageViaHoleDiameter
BVH_CONTAINER_2D m_viaTH_ODs
List of via hole outer diameters.
static KIGFX::COLOR4D g_DefaultBackgroundTop
const BVH_CONTAINER_2D * GetPlatedPadsBack() const noexcept
static CUSTOM_COLORS_LIST g_SilkColors
const MAP_POLY & GetHoleIdPolysMap() const noexcept
float GetBackCopperThickness() const noexcept
float m_averageHoleDiameter
static KIGFX::COLOR4D g_DefaultSurfaceFinish
SFVEC4F m_CopperColor
in realistic mode: copper color
SHAPE_POLY_SET m_viaTH_ODPolys
Via hole outer diameters.
void ReloadColorSettings() noexcept
void createPadWithMargin(const PAD *aPad, CONTAINER_2D_BASE *aDstContainer, PCB_LAYER_ID aLayer, const VECTOR2I &aMargin) const
float GetAverageViaHoleDiameter() const noexcept
void addPads(const FOOTPRINT *aFootprint, CONTAINER_2D_BASE *aDstContainer, PCB_LAYER_ID aLayerId, bool aSkipPlatedPads, bool aSkipNonPlatedPads)
SFVEC2F GetSphericalCoord(int i) const
unsigned int GetViaCount() const noexcept
const BOARD * GetBoard() const noexcept
BVH_CONTAINER_2D * m_platedPadsBack
std::bitset< LAYER_3D_END > GetDefaultVisibleLayers() const
void createPadWithHole(const PAD *aPad, CONTAINER_2D_BASE *aDstContainer, int aInflateValue)
void SetBoard(BOARD *aBoard) noexcept
Set current board to be rendered.
const SFVEC3F & GetBoardCenter() const noexcept
The board center position in 3D units.
float GetFootprintZPos(bool aIsFlipped) const
Get the position of the footprint in 3d integer units considering if it is flipped or not.
float m_frontCopperThickness3DU
float GetNonCopperLayerThickness() const noexcept
Get the non copper layers thickness (in 3D units).
static KIGFX::COLOR4D g_DefaultSolderPaste
float GetLayerTopZPos(PCB_LAYER_ID aLayerId) const noexcept
Get the top z position.
const BVH_CONTAINER_2D & GetTH_ODs() const noexcept
float m_boardBodyThickness3DU
void buildPadOutlineAsSegments(const PAD *aPad, CONTAINER_2D_BASE *aDstContainer, int aWidth)
std::array< float, PCB_LAYER_ID_COUNT > m_layerZcoordTop
Top (End) Z position of each layer in 3D units.
static CUSTOM_COLORS_LIST g_BoardColors
void addShape(const PCB_SHAPE *aShape, CONTAINER_2D_BASE *aContainer, const BOARD_ITEM *aOwner)
void createTrack(const PCB_TRACK *aTrack, CONTAINER_2D_BASE *aDstContainer)
const MAP_CONTAINER_2D_BASE & GetLayerMap() const noexcept
Get the map of containers that have the objects per layer.
MAP_POLY m_layers_poly
Amalgamated polygon contours for various types of items.
VECTOR2I m_boardSize
Board size in board internal units.
SHAPE_POLY_SET * m_backPlatedCopperPolys
void SetLayerColors(const std::map< int, COLOR4D > &aColors)
EDA_3D_VIEWER_SETTINGS * m_Cfg
SFVEC4F m_SilkScreenColorTop
in realistic mode: SilkScreen color ( top )
void addTable(const PCB_TABLE *aTable, CONTAINER_2D_BASE *aContainer, const BOARD_ITEM *aOwner)
unsigned int GetHoleCount() const noexcept
SFVEC4F m_SilkScreenColorBot
in realistic mode: SilkScreen color ( bot )
SFVEC4F GetItemColor(int aItemId) const
Get the technical color of a layer.
const BVH_CONTAINER_2D * GetPlatedPadsFront() const noexcept
unsigned int GetCircleSegmentCount(float aDiameter3DU) const
float m_nonCopperLayerThickness3DU
float GetFrontCopperThickness() const noexcept
Get the copper layer thicknesses (in 3D units).
const BVH_CONTAINER_2D & GetViaTH_ODs() const noexcept
unsigned int m_holeCount
BVH_CONTAINER_2D m_viaAnnuli
List of via annular rings.
float GetBoardBodyThickness() const noexcept
Get the board body thickness, including internal copper layers (in 3D units).
SFVEC4F m_BoardBodyColor
in realistic mode: FR4 board color
bool createBoardPolygon(wxString *aErrorMsg)
Create the board outline polygon.
float GetAverageHoleDiameter() const noexcept
const SHAPE_POLY_SET & GetViaAnnuliPolys() const noexcept
unsigned int m_copperLayersCount
bool m_MousewheelPanning
std::map< int, COLOR4D > GetDefaultColors() const
BVH_CONTAINER_2D m_TH_IDs
List of PTH inner diameters.
void createViaWithMargin(const PCB_TRACK *aTrack, CONTAINER_2D_BASE *aDstContainer, int aMargin)
SFVEC4F m_UserCommentsColor
static KIGFX::COLOR4D g_DefaultSilkscreen
BVH_CONTAINER_2D * m_platedPadsFront
void Set3dCacheManager(S3D_CACHE *aCacheMgr) noexcept
Update the cache manager pointer.
Definition: board_adapter.h:84
SFVEC3F m_boardCenter
3D center position of the board in 3D units.
SHAPE_POLY_SET m_NPTH_ODPolys
NPTH outer diameters.
SHAPE_POLY_SET * m_backPlatedPadAndGraphicPolys
static KIGFX::COLOR4D g_DefaultBackgroundBot
SFVEC4F GetLayerColor(PCB_LAYER_ID aLayerId) const
Get the technical color of a layer.
const SHAPE_POLY_SET * GetBackPlatedPadAndGraphicPolys()
bool Is3dLayerEnabled(PCB_LAYER_ID aLayer, const std::bitset< LAYER_3D_END > &aVisibilityFlags) const
Check if a layer is enabled.
SFVEC4F m_ECO1Color
SFVEC4F m_UserDrawingsColor
S3D_CACHE * Get3dCacheManager() const noexcept
Definition: board_adapter.h:85
double m_biuTo3Dunits
Scale factor to convert board internal units to 3D units normalized between -1.0 and 1....
SFVEC4F m_BgColorBot
background bottom color
const SHAPE_POLY_SET & GetTH_ODPolys() const noexcept
Get through hole outside diameter 2D polygons.
void addText(const EDA_TEXT *aText, CONTAINER_2D_BASE *aDstContainer, const BOARD_ITEM *aOwner)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:77
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:282
A class used to derive camera objects from.
Definition: camera.h:103
Color settings are a bit different than most of the settings objects in that there can be more than o...
virtual BOARD_ADAPTER & GetAdapter()=0
virtual CAMERA & GetCurrentCamera()=0
virtual ~EDA_3D_BOARD_HOLDER()
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition: eda_text.h:83
A color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:104
Definition: pad.h:59
Abstract dimension API.
A pure virtual class used to derive REPORTER objects from.
Definition: reporter.h:71
Cache for storing the 3D shapes.
Definition: 3d_cache.h:53
Represent a set of closed polygons.
Handle a list of polygons defining a copper zone.
Definition: zone.h:72
std::vector< CUSTOM_COLOR_ITEM > CUSTOM_COLORS_LIST
FOOTPRINT_ATTR_T
The set of attributes allowed within a FOOTPRINT, using FOOTPRINT::SetAttributes() and FOOTPRINT::Get...
Definition: footprint.h:71
static const wxChar * m_logTrace
Trace mask used to enable or disable debug output for this class.
@ LAYER_3D_END
Definition: layer_ids.h:475
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:60
STL namespace.
Manage a bounding box defined by two SFVEC3F min max points.
Definition: bbox_3d.h:42
glm::vec2 SFVEC2F
Definition: xv3d_types.h:42
glm::vec3 SFVEC3F
Definition: xv3d_types.h:44
glm::vec4 SFVEC4F
Definition: xv3d_types.h:46