KiCad PCB EDA Suite
Loading...
Searching...
No Matches
altium_pcb.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) 2019-2020 Thomas Pointhuber <[email protected]>
5 *
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, you may find one here:
18 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
19 * or you may search the http://www.gnu.org website for the version 2 license,
20 * or you may write to the Free Software Foundation, Inc.,
21 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 */
23
24#ifndef ALTIUM_PCB_H
25#define ALTIUM_PCB_H
26
27#include <functional>
28#include <layer_ids.h>
29#include <vector>
30
31#include <altium_parser_pcb.h>
32
33
35{
37
39 ARCS6,
40 BOARD6,
55 FILLS6,
57 MODELS,
59 NETS6,
60 PADS6,
68 RULES6,
73 TEXTS,
74 TEXTS6,
76 TRACKS6,
79 VIAS6,
81};
82
83
84class BOARD;
85class FP_SHAPE;
86class PCB_SHAPE;
87class FOOTPRINT;
88class ZONE;
89class PCB_DIM_RADIAL;
91
92
93namespace CFB
94{
95struct COMPOUND_FILE_ENTRY;
96} // namespace CFB
97
99
100// type declaration required for a helper method
101class ALTIUM_PCB;
102typedef std::function<void( const ALTIUM_COMPOUND_FILE&, const CFB::COMPOUND_FILE_ENTRY* )>
104
106{
107public:
108 explicit ALTIUM_PCB( BOARD* aBoard, PROGRESS_REPORTER* aProgressReporter );
109 ~ALTIUM_PCB();
110
111 void Parse( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
112 const std::map<ALTIUM_PCB_DIR, std::string>& aFileMapping );
113
114 FOOTPRINT* ParseFootprint( const ALTIUM_COMPOUND_FILE& altiumLibFile,
115 const wxString& aFootprintName );
116
117private:
118 void checkpoint();
119
120 PCB_LAYER_ID GetKicadLayer( ALTIUM_LAYER aAltiumLayer ) const;
121 std::vector<PCB_LAYER_ID> GetKicadLayersToIterate( ALTIUM_LAYER aAltiumLayer ) const;
122 int GetNetCode( uint16_t aId ) const;
123 const ARULE6* GetRule( ALTIUM_RULE_KIND aKind, const wxString& aName ) const;
124 const ARULE6* GetRuleDefault( ALTIUM_RULE_KIND aKind ) const;
125
126 void ParseFileHeader( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
127 const CFB::COMPOUND_FILE_ENTRY* aEntry );
128
129 // Text Format
130 void ParseBoard6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
131 const CFB::COMPOUND_FILE_ENTRY* aEntry );
132 void ParseClasses6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
133 const CFB::COMPOUND_FILE_ENTRY* aEntry );
134 void ParseComponents6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
135 const CFB::COMPOUND_FILE_ENTRY* aEntry );
136 void ParseDimensions6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
137 const CFB::COMPOUND_FILE_ENTRY* aEntry );
138 void ParseModelsData( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
139 const CFB::COMPOUND_FILE_ENTRY* aEntry,
140 const std::vector<std::string>& aRootDir );
141 void ParseNets6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
142 const CFB::COMPOUND_FILE_ENTRY* aEntry );
143 void ParsePolygons6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
144 const CFB::COMPOUND_FILE_ENTRY* aEntry );
145 void ParseRules6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
146 const CFB::COMPOUND_FILE_ENTRY* aEntry );
147
148 // Binary Format
149 void ParseArcs6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
150 const CFB::COMPOUND_FILE_ENTRY* aEntry );
151 void ConvertArcs6ToPcbShape( const AARC6& aElem, PCB_SHAPE* aShape );
152 void ConvertArcs6ToBoardItem( const AARC6& aElem, const int aPrimitiveIndex );
153 void ConvertArcs6ToFootprintItem( FOOTPRINT* aFootprint, const AARC6& aElem,
154 const int aPrimitiveIndex, const bool aIsBoardImport );
155 void ConvertArcs6ToBoardItemOnLayer( const AARC6& aElem, PCB_LAYER_ID aLayer );
156 void ConvertArcs6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, const AARC6& aElem,
157 PCB_LAYER_ID aLayer );
158 void ParseComponentsBodies6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
159 const CFB::COMPOUND_FILE_ENTRY* aEntry );
160 void ParsePads6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
161 const CFB::COMPOUND_FILE_ENTRY* aEntry );
162 void ConvertPads6ToBoardItem( const APAD6& aElem );
163 void ConvertPads6ToFootprintItem( FOOTPRINT* aFootprint, const APAD6& aElem );
164 void ConvertPads6ToBoardItemOnNonCopper( const APAD6& aElem );
165 void ConvertPads6ToFootprintItemOnCopper( FOOTPRINT* aFootprint, const APAD6& aElem );
166 void ConvertPads6ToFootprintItemOnNonCopper( FOOTPRINT* aFootprint, const APAD6& aElem );
167 void ParseVias6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
168 const CFB::COMPOUND_FILE_ENTRY* aEntry );
169 void ParseTracks6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
170 const CFB::COMPOUND_FILE_ENTRY* aEntry );
171 void ConvertTracks6ToBoardItem( const ATRACK6& aElem, const int aPrimitiveIndex );
172 void ConvertTracks6ToFootprintItem( FOOTPRINT* aFootprint, const ATRACK6& aElem,
173 const int aPrimitiveIndex, const bool aIsBoardImport );
174 void ConvertTracks6ToBoardItemOnLayer( const ATRACK6& aElem, PCB_LAYER_ID aLayer );
175 void ConvertTracks6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, const ATRACK6& aElem,
176 PCB_LAYER_ID aLayer );
177 void ParseTexts6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
178 const CFB::COMPOUND_FILE_ENTRY* aEntry );
179 void ConvertTexts6ToBoardItem( const ATEXT6& aElem );
180 void ConvertTexts6ToFootprintItem( FOOTPRINT* aFootprint, const ATEXT6& aElem );
181 void ConvertTexts6ToBoardItemOnLayer( const ATEXT6& aElem, PCB_LAYER_ID aLayer );
182 void ConvertTexts6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, const ATEXT6& aElem,
183 PCB_LAYER_ID aLayer );
184 void ConvertTexts6ToEdaTextSettings( const ATEXT6& aElem, EDA_TEXT* aEdaText );
185 void ParseFills6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
186 const CFB::COMPOUND_FILE_ENTRY* aEntry );
187 void ConvertFills6ToBoardItem( const AFILL6& aElem );
188 void ConvertFills6ToFootprintItem( FOOTPRINT* aFootprint, const AFILL6& aElem,
189 const bool aIsBoardImport );
190 void ConvertFills6ToBoardItemWithNet( const AFILL6& aElem );
191 void ConvertFills6ToBoardItemOnLayer( const AFILL6& aElem, PCB_LAYER_ID aLayer );
192 void ConvertFills6ToFootprintItemOnLayer( FOOTPRINT* aFootprint, const AFILL6& aElem,
193 PCB_LAYER_ID aLayer );
194 void ParseBoardRegionsData( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
195 const CFB::COMPOUND_FILE_ENTRY* aEntry );
196 void ParseShapeBasedRegions6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
197 const CFB::COMPOUND_FILE_ENTRY* aEntry );
199 void ConvertShapeBasedRegions6ToFootprintItem( FOOTPRINT* aFootprint, const AREGION6& aElem );
202 const AREGION6& aElem,
203 PCB_LAYER_ID aLayer );
205 const CFB::COMPOUND_FILE_ENTRY* aEntry );
206 void ParseRegions6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
207 const CFB::COMPOUND_FILE_ENTRY* aEntry );
208 void ParseWideStrings6Data( const ALTIUM_COMPOUND_FILE& aAltiumPcbFile,
209 const CFB::COMPOUND_FILE_ENTRY* aEntry );
210
211 // Helper Functions
212 void HelperParseDimensions6Linear( const ADIMENSION6& aElem );
213 void HelperParseDimensions6Radial( const ADIMENSION6& aElem );
214 void HelperParseDimensions6Leader( const ADIMENSION6& aElem );
215 void HelperParseDimensions6Datum( const ADIMENSION6& aElem );
216 void HelperParseDimensions6Center( const ADIMENSION6& aElem );
217
218 void HelperParsePad6NonCopper( const APAD6& aElem, PCB_LAYER_ID aLayer, PCB_SHAPE* aShape );
219
220 void HelperCreateBoardOutline( const std::vector<ALTIUM_VERTICE>& aVertices );
221
222 void HelperSetZoneLayers( ZONE* aZone, const ALTIUM_LAYER aAltiumLayer );
223 void HelperSetZoneKeepoutRestrictions( ZONE* aZone, const uint8_t aKeepoutRestrictions );
225 const ALTIUM_LAYER aAltiumLayer,
226 const uint8_t aKeepoutRestrictions );
227 void HelperPcpShapeAsFootprintKeepoutRegion( FOOTPRINT* aFootprint, const PCB_SHAPE& aShape,
228 const ALTIUM_LAYER aAltiumLayer,
229 const uint8_t aKeepoutRestrictions );
230
231 std::vector<std::pair<PCB_LAYER_ID, int>>
232 HelperGetSolderAndPasteMaskExpansions( const ALTIUM_RECORD aType, const int aPrimitiveIndex,
233 const ALTIUM_LAYER aAltiumLayer );
234
235 FOOTPRINT* HelperGetFootprint( uint16_t aComponent ) const;
236 PCB_SHAPE* HelperCreateAndAddShape( uint16_t aComponent );
237
239 std::vector<FOOTPRINT*> m_components;
240 std::vector<ZONE*> m_polygons;
241 std::vector<PCB_DIM_RADIAL*> m_radialDimensions;
242 std::map<wxString, wxString> m_models;
243 std::map<uint32_t, wxString> m_unicodeStrings;
244 std::vector<int> m_altiumToKicadNetcodes;
245 std::map<ALTIUM_LAYER, PCB_LAYER_ID> m_layermap; // used to correctly map copper layers
246 std::map<ALTIUM_RULE_KIND, std::vector<ARULE6>> m_rules;
247 std::map<ALTIUM_RECORD, std::multimap<int, const AEXTENDED_PRIMITIVE_INFORMATION>>
249
250 std::map<ALTIUM_LAYER, ZONE*> m_outer_plane;
251
253 unsigned m_doneCount;
255 unsigned m_totalCount;
256
259};
260
261
262#endif //ALTIUM_PCB_H
ALTIUM_RULE_KIND
ALTIUM_LAYER
ALTIUM_RECORD
std::function< void(const ALTIUM_COMPOUND_FILE &, const CFB::COMPOUND_FILE_ENTRY *)> PARSE_FUNCTION_POINTER_fp
Definition: altium_pcb.h:103
ALTIUM_PCB_DIR
Definition: altium_pcb.h:35
@ UNIQUEIDPRIMITIVEINFORMATION
@ SHAPEBASEDCOMPONENTBODIES6
@ EXTENDPRIMITIVEINFORMATION
void ParseFileHeader(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
Definition: altium_pcb.cpp:803
PROGRESS_REPORTER * m_progressReporter
optional; may be nullptr
Definition: altium_pcb.h:252
void HelperSetZoneLayers(ZONE *aZone, const ALTIUM_LAYER aAltiumLayer)
void ParseShapeBasedRegions6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
std::vector< PCB_DIM_RADIAL * > m_radialDimensions
Definition: altium_pcb.h:241
void ConvertArcs6ToFootprintItemOnLayer(FOOTPRINT *aFootprint, const AARC6 &aElem, PCB_LAYER_ID aLayer)
void ConvertTracks6ToBoardItem(const ATRACK6 &aElem, const int aPrimitiveIndex)
void ConvertTracks6ToFootprintItem(FOOTPRINT *aFootprint, const ATRACK6 &aElem, const int aPrimitiveIndex, const bool aIsBoardImport)
int m_highest_pour_index
Altium stores pour order across all layers.
Definition: altium_pcb.h:258
void ConvertTexts6ToFootprintItemOnLayer(FOOTPRINT *aFootprint, const ATEXT6 &aElem, PCB_LAYER_ID aLayer)
std::map< ALTIUM_LAYER, PCB_LAYER_ID > m_layermap
Definition: altium_pcb.h:245
void ConvertShapeBasedRegions6ToBoardItemOnLayer(const AREGION6 &aElem, PCB_LAYER_ID aLayer)
void HelperParseDimensions6Leader(const ADIMENSION6 &aElem)
std::vector< FOOTPRINT * > m_components
Definition: altium_pcb.h:239
const ARULE6 * GetRuleDefault(ALTIUM_RULE_KIND aKind) const
Definition: altium_pcb.cpp:787
void HelperParsePad6NonCopper(const APAD6 &aElem, PCB_LAYER_ID aLayer, PCB_SHAPE *aShape)
std::vector< PCB_LAYER_ID > GetKicadLayersToIterate(ALTIUM_LAYER aAltiumLayer) const
Definition: altium_pcb.cpp:256
void ParseRegions6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ParseBoard6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
Definition: altium_pcb.cpp:841
void ParseComponentsBodies6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void HelperPcpShapeAsFootprintKeepoutRegion(FOOTPRINT *aFootprint, const PCB_SHAPE &aShape, const ALTIUM_LAYER aAltiumLayer, const uint8_t aKeepoutRestrictions)
void ParseFills6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void Parse(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const std::map< ALTIUM_PCB_DIR, std::string > &aFileMapping)
Definition: altium_pcb.cpp:320
void ParseBoardRegionsData(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ConvertArcs6ToBoardItem(const AARC6 &aElem, const int aPrimitiveIndex)
std::map< ALTIUM_LAYER, ZONE * > m_outer_plane
Definition: altium_pcb.h:250
std::vector< int > m_altiumToKicadNetcodes
Definition: altium_pcb.h:244
unsigned m_totalCount
for progress reporting
Definition: altium_pcb.h:255
void HelperPcpShapeAsBoardKeepoutRegion(const PCB_SHAPE &aShape, const ALTIUM_LAYER aAltiumLayer, const uint8_t aKeepoutRestrictions)
void ConvertFills6ToBoardItemOnLayer(const AFILL6 &aElem, PCB_LAYER_ID aLayer)
std::vector< std::pair< PCB_LAYER_ID, int > > HelperGetSolderAndPasteMaskExpansions(const ALTIUM_RECORD aType, const int aPrimitiveIndex, const ALTIUM_LAYER aAltiumLayer)
void ConvertFills6ToFootprintItem(FOOTPRINT *aFootprint, const AFILL6 &aElem, const bool aIsBoardImport)
void ConvertShapeBasedRegions6ToFootprintItemOnLayer(FOOTPRINT *aFootprint, const AREGION6 &aElem, PCB_LAYER_ID aLayer)
void ConvertShapeBasedRegions6ToBoardItem(const AREGION6 &aElem)
void HelperCreateBoardOutline(const std::vector< ALTIUM_VERTICE > &aVertices)
Definition: altium_pcb.cpp:983
FOOTPRINT * ParseFootprint(const ALTIUM_COMPOUND_FILE &altiumLibFile, const wxString &aFootprintName)
Definition: altium_pcb.cpp:607
void ParseVias6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
std::map< ALTIUM_RULE_KIND, std::vector< ARULE6 > > m_rules
Definition: altium_pcb.h:246
void ParseClasses6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
unsigned m_doneCount
Definition: altium_pcb.h:253
void HelperParseDimensions6Linear(const ADIMENSION6 &aElem)
std::map< uint32_t, wxString > m_unicodeStrings
Definition: altium_pcb.h:243
void ConvertTexts6ToBoardItem(const ATEXT6 &aElem)
void ParseArcs6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void HelperParseDimensions6Center(const ADIMENSION6 &aElem)
void HelperParseDimensions6Radial(const ADIMENSION6 &aElem)
void HelperSetZoneKeepoutRestrictions(ZONE *aZone, const uint8_t aKeepoutRestrictions)
PCB_SHAPE * HelperCreateAndAddShape(uint16_t aComponent)
Definition: altium_pcb.cpp:82
void ParsePads6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
BOARD * m_board
Definition: altium_pcb.h:238
void ParseWideStrings6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ConvertTexts6ToBoardItemOnLayer(const ATEXT6 &aElem, PCB_LAYER_ID aLayer)
void ConvertPads6ToFootprintItemOnCopper(FOOTPRINT *aFootprint, const APAD6 &aElem)
void ParseComponents6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
int GetNetCode(uint16_t aId) const
Definition: altium_pcb.cpp:753
void ConvertPads6ToFootprintItemOnNonCopper(FOOTPRINT *aFootprint, const APAD6 &aElem)
void ConvertTexts6ToFootprintItem(FOOTPRINT *aFootprint, const ATEXT6 &aElem)
unsigned m_lastProgressCount
Definition: altium_pcb.h:254
void ConvertArcs6ToFootprintItem(FOOTPRINT *aFootprint, const AARC6 &aElem, const int aPrimitiveIndex, const bool aIsBoardImport)
void HelperParseDimensions6Datum(const ADIMENSION6 &aElem)
void ConvertPads6ToBoardItem(const APAD6 &aElem)
void ConvertFills6ToFootprintItemOnLayer(FOOTPRINT *aFootprint, const AFILL6 &aElem, PCB_LAYER_ID aLayer)
std::vector< ZONE * > m_polygons
Definition: altium_pcb.h:240
std::map< wxString, wxString > m_models
Definition: altium_pcb.h:242
void ConvertArcs6ToPcbShape(const AARC6 &aElem, PCB_SHAPE *aShape)
void ConvertTracks6ToBoardItemOnLayer(const ATRACK6 &aElem, PCB_LAYER_ID aLayer)
void ConvertFills6ToBoardItem(const AFILL6 &aElem)
void ParseModelsData(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry, const std::vector< std::string > &aRootDir)
void ParseRules6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
FOOTPRINT * HelperGetFootprint(uint16_t aComponent) const
Definition: altium_pcb.cpp:70
PCB_LAYER_ID GetKicadLayer(ALTIUM_LAYER aAltiumLayer) const
Definition: altium_pcb.cpp:150
void ConvertFills6ToBoardItemWithNet(const AFILL6 &aElem)
void checkpoint()
Definition: altium_pcb.cpp:301
void ConvertTracks6ToFootprintItemOnLayer(FOOTPRINT *aFootprint, const ATRACK6 &aElem, PCB_LAYER_ID aLayer)
void ParseTexts6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ParsePolygons6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ConvertArcs6ToBoardItemOnLayer(const AARC6 &aElem, PCB_LAYER_ID aLayer)
std::map< ALTIUM_RECORD, std::multimap< int, const AEXTENDED_PRIMITIVE_INFORMATION > > m_extendedPrimitiveInformationMaps
Definition: altium_pcb.h:248
void ConvertTexts6ToEdaTextSettings(const ATEXT6 &aElem, EDA_TEXT *aEdaText)
void ParseTracks6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ConvertPads6ToBoardItemOnNonCopper(const APAD6 &aElem)
void ConvertShapeBasedRegions6ToFootprintItem(FOOTPRINT *aFootprint, const AREGION6 &aElem)
void ParseNets6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ParseExtendedPrimitiveInformationData(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
Definition: altium_pcb.cpp:820
void ParseDimensions6Data(const ALTIUM_COMPOUND_FILE &aAltiumPcbFile, const CFB::COMPOUND_FILE_ENTRY *aEntry)
void ConvertPads6ToFootprintItem(FOOTPRINT *aFootprint, const APAD6 &aElem)
const ARULE6 * GetRule(ALTIUM_RULE_KIND aKind, const wxString &aName) const
Definition: altium_pcb.cpp:771
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:270
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
Definition: eda_text.h:77
A radial dimension indicates either the radius or diameter of an arc or circle.
A progress reporter interface for use in multi-threaded environments.
Handle a list of polygons defining a copper zone.
Definition: zone.h:72
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:59