KiCad PCB EDA Suite
Loading...
Searching...
No Matches
odb_entity.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 The KiCad Developers, see AUTHORS.txt for contributors.
5 * Author: SYSUEric <[email protected]>.
6 *
7 * This program is free software: you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation, either version 3 of the License, or (at your
10 * option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
21#ifndef _ODB_ENTITY_H_
22#define _ODB_ENTITY_H_
23
24
25#include <optional>
26#include <vector>
27#include <map>
28#include <layer_ids.h>
29#include <wx/string.h>
30#include <iostream>
31#include <functional>
32#include "odb_feature.h"
33#include "odb_util.h"
34#include "odb_eda_data.h"
35#include "odb_netlist.h"
36#include "odb_component.h"
37
38
39class BOARD;
40class ODB_TREE_WRITER;
41class BOARD_ITEM;
43class PCB_IO_ODBPP;
44
46{
47public:
48 ODB_ENTITY_BASE( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) : m_board( aBoard ), m_plugin( aPlugin )
49 {
50 }
51
52 ODB_ENTITY_BASE() : m_board( nullptr ), m_plugin( nullptr ) {}
53
54 virtual ~ODB_ENTITY_BASE() = default;
55 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) {}
56 virtual bool CreateDirectoryTree( ODB_TREE_WRITER& writer );
57 virtual std::string GetEntityName() = 0;
58 virtual void InitEntityData() {}
59
60
61protected:
63 std::vector<std::string> m_fileName;
65};
66
67enum class ODB_SUBTYPE;
68enum class ODB_POLARITY;
69enum class ODB_CONTEXT;
70enum class ODB_TYPE;
71
73{
75 wxString m_name;
77 std::optional<ODB_AUX_LAYER_TYPE> m_auxType;
78 std::optional<ODB_AUX_LAYER_KEY> m_auxKey;
79 const BOARD_STACKUP_ITEM* m_stackupItem = nullptr; // Owned by the export stackup snapshot
80 int m_sublayer = 0;
81 std::optional<DRILL_SPAN> m_drillSpan;
82 // F_Cu or B_Cu for a component row, which has no board layer of its own
84};
85
87{
88public:
89 ODB_MATRIX_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) : ODB_ENTITY_BASE( aBoard, aPlugin )
90 {
91 }
92
93 virtual ~ODB_MATRIX_ENTITY() = default;
94
95 inline virtual std::string GetEntityName() override { return "matrix"; }
96
98 {
99 std::optional<std::pair<wxString, wxString>> m_span; // !< start, end
100 std::optional<ODB_SUBTYPE> m_addType;
101 std::optional<ODB_DIELECTRIC_TYPE> m_diType;
102 std::optional<uint32_t> m_ref;
103 std::optional<uint32_t> m_cuTop;
104 std::optional<uint32_t> m_cuBottom;
106 uint32_t m_uid = 0;
107
108 uint32_t m_rowNumber;
109 wxString m_layerName;
113
115
116 MATRIX_LAYER( uint32_t aRow, const wxString& aLayerName ) :
117 m_rowNumber( aRow ), m_layerName( ODB::GenLegalEntityName( aLayerName ) )
118 {
119 }
120 };
121
122 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
123 virtual void InitEntityData() override;
124 void InitMatrixLayerData();
125 void GenerateStackupFile( ODB_TREE_WRITER& writer );
126
127 const std::vector<MATRIX_LAYER>& GetMatrixLayers() const { return m_matrixLayers; }
128
129 void AddStep( const wxString& aStepName );
130 void AddMatrixLayerField( MATRIX_LAYER& aMLayer, PCB_LAYER_ID aLayer );
131 void AddDrillMatrixLayer();
132 void AddRoutMatrixLayer();
134 void AddCOMPMatrixLayer( PCB_LAYER_ID aCompSide );
135
137
138private:
139 std::map<wxString, std::pair<unsigned int, uint32_t>> m_matrixSteps;
140 std::vector<MATRIX_LAYER> m_matrixLayers;
141 unsigned int m_row = 1;
142 unsigned int m_col = 1;
143 bool m_hasTopComp = false;
144 bool m_hasBotComp = false;
145};
146
148{
149public:
150 ODB_MISC_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin );
151 virtual ~ODB_MISC_ENTITY() = default;
152 inline virtual std::string GetEntityName() override { return "misc"; }
153
154 //TODO
155 // bool AddSysAttrFiles();
156 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
160
161private:
162 std::vector<std::pair<wxString, wxString>> m_info;
163};
164
165class FEATURES_MANAGER;
166class ODB_LAYER_ENTITY;
168{
169public:
170 static constexpr const char* STEP_NAME = "pcb";
171
172 ODB_STEP_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) :
173 ODB_ENTITY_BASE( aBoard, aPlugin ), m_profile( nullptr ), m_netlist( aBoard, aPlugin )
174 {
175 }
176
177 virtual ~ODB_STEP_ENTITY() = default;
178
179 inline virtual std::string GetEntityName() override { return STEP_NAME; }
180
181 void InitEdaData();
184 void MakeLayerEntity();
188
189 virtual bool CreateDirectoryTree( ODB_TREE_WRITER& writer ) override;
190
191 virtual void InitEntityData() override;
192 void GenerateLayerFiles( ODB_TREE_WRITER& writer );
193 void GenerateEdaFiles( ODB_TREE_WRITER& writer );
195 void GenerateProfileFile( ODB_TREE_WRITER& writer );
198
199 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
200
201private:
202 // ODB_ATTRLIST m_attrList;
203 std::map<wxString, std::shared_ptr<ODB_LAYER_ENTITY>> m_layerEntityMap;
204 std::unique_ptr<FEATURES_MANAGER> m_profile;
205
207 std::vector<std::pair<wxString, wxString>> m_stephdr;
209};
210
211
213{
214public:
215 ODB_LAYER_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin,
216 const std::map<int, std::vector<BOARD_ITEM*>>& aMap,
217 const ODB_LAYER_NAME& aLayer );
218
219 virtual ~ODB_LAYER_ENTITY() = default;
220
221 inline virtual std::string GetEntityName() override { return "layers"; }
222 virtual void InitEntityData() override;
223 void InitFeatureData();
224 void InitDrillData();
225 void InitRoutData();
226 void InitAuxilliaryData();
227
229
231
232
233 void GenAttrList( ODB_TREE_WRITER& writer );
234 void GenComponents( ODB_TREE_WRITER& writer );
235 void GenTools( ODB_TREE_WRITER& writer );
236
237 void GenFeatures( ODB_TREE_WRITER& writer );
238
239 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
240
241private:
242 std::map<int, std::vector<BOARD_ITEM*>> m_layerItems;
245 // ODB_ATTRLIST m_attrList;
246 std::optional<ODB_DRILL_TOOLS> m_tools;
247 std::optional<COMPONENTS_MANAGER> m_components;
248 std::unique_ptr<FEATURES_MANAGER> m_featuresMgr;
249};
250
252{
253public:
255
256 virtual ~ODB_SYMBOLS_ENTITY() = default;
257
258 inline virtual std::string GetEntityName() override { return "symbols"; }
259
260 //TODO
261 // virtual void GenerateFiles( ODB_TREE_WRITER& writer );
262};
263
265{
266public:
267 ODB_FONTS_ENTITY() = default;
268 virtual ~ODB_FONTS_ENTITY() = default;
269
270 inline virtual std::string GetEntityName() override { return "fonts"; }
271
272 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
273};
274
276{
277public:
278 ODB_WHEELS_ENTITY() = default;
279 virtual ~ODB_WHEELS_ENTITY() = default;
280
281 inline virtual std::string GetEntityName() override { return "wheels"; }
282
283 // TODO
284 // virtual void GenerateFiles( ODB_TREE_WRITER& writer );
285};
286
288{
289public:
290 ODB_INPUT_ENTITY() = default;
291 virtual ~ODB_INPUT_ENTITY() = default;
292
293 inline virtual std::string GetEntityName() override { return "input"; }
294
295 // TODO
296 // virtual void GenerateFiles( ODB_TREE_WRITER &writer );
297};
298
300{
301public:
302 ODB_USER_ENTITY() = default;
303 virtual ~ODB_USER_ENTITY() = default;
304
305 inline virtual std::string GetEntityName() override { return "user"; }
306
307 // TODO
308 // virtual void GenerateFiles( ODB_TREE_WRITER &writer );
309};
310
311#endif // _ODB_ENTITY_H_
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:84
Manage one layer needed to make a physical board.
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:410
virtual ~ODB_ENTITY_BASE()=default
virtual void InitEntityData()
Definition odb_entity.h:58
virtual std::string GetEntityName()=0
virtual bool CreateDirectoryTree(ODB_TREE_WRITER &writer)
virtual void GenerateFiles(ODB_TREE_WRITER &writer)
Definition odb_entity.h:55
BOARD * m_board
Definition odb_entity.h:62
PCB_IO_ODBPP * m_plugin
Definition odb_entity.h:64
std::vector< std::string > m_fileName
Definition odb_entity.h:63
ODB_ENTITY_BASE(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition odb_entity.h:48
ODB_FONTS_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:270
virtual ~ODB_FONTS_ENTITY()=default
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
ODB_INPUT_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:293
virtual ~ODB_INPUT_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:221
void GenFeatures(ODB_TREE_WRITER &writer)
PCB_LAYER_ID m_layerID
Definition odb_entity.h:243
void GenComponents(ODB_TREE_WRITER &writer)
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
ODB_LAYER_NAME m_layer
Definition odb_entity.h:244
std::optional< COMPONENTS_MANAGER > m_components
Definition odb_entity.h:247
std::optional< ODB_DRILL_TOOLS > m_tools
Definition odb_entity.h:246
void GenTools(ODB_TREE_WRITER &writer)
std::map< int, std::vector< BOARD_ITEM * > > m_layerItems
Definition odb_entity.h:242
ODB_LAYER_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin, const std::map< int, std::vector< BOARD_ITEM * > > &aMap, const ODB_LAYER_NAME &aLayer)
virtual ~ODB_LAYER_ENTITY()=default
void AddLayerFeatures()
ODB_COMPONENT & InitComponentData(const FOOTPRINT *aFp, const EDA_DATA::PACKAGE &aPkg)
virtual void InitEntityData() override
void GenAttrList(ODB_TREE_WRITER &writer)
std::unique_ptr< FEATURES_MANAGER > m_featuresMgr
Definition odb_entity.h:248
virtual std::string GetEntityName() override
Definition odb_entity.h:95
void GenerateStackupFile(ODB_TREE_WRITER &writer)
void AddStep(const wxString &aStepName)
virtual ~ODB_MATRIX_ENTITY()=default
ODB_MATRIX_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition odb_entity.h:89
unsigned int m_col
Definition odb_entity.h:142
std::vector< MATRIX_LAYER > m_matrixLayers
Definition odb_entity.h:140
void AddMatrixLayerField(MATRIX_LAYER &aMLayer, PCB_LAYER_ID aLayer)
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
unsigned int m_row
Definition odb_entity.h:141
std::map< wxString, std::pair< unsigned int, uint32_t > > m_matrixSteps
Definition odb_entity.h:139
void AddAuxilliaryMatrixLayer()
const std::vector< MATRIX_LAYER > & GetMatrixLayers() const
Definition odb_entity.h:127
void EnsureUniqueLayerNames()
virtual void InitEntityData() override
void AddCOMPMatrixLayer(PCB_LAYER_ID aCompSide)
virtual std::string GetEntityName() override
Definition odb_entity.h:152
void GenerateAttrListFile(ODB_TREE_WRITER &writer)
void GenerateUserAttrFile(ODB_TREE_WRITER &writer)
ODB_MISC_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
virtual ~ODB_MISC_ENTITY()=default
std::vector< std::pair< wxString, wxString > > m_info
Definition odb_entity.h:162
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
void GenerateMetadataFile(ODB_TREE_WRITER &writer)
virtual std::string GetEntityName() override
Definition odb_entity.h:179
void GenerateProfileFile(ODB_TREE_WRITER &writer)
ODB_STEP_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition odb_entity.h:172
EDA_DATA m_edaData
Definition odb_entity.h:206
void GenerateStepHeaderFile(ODB_TREE_WRITER &writer)
void GenerateEdaFiles(ODB_TREE_WRITER &writer)
virtual void InitEntityData() override
static constexpr const char * STEP_NAME
Definition odb_entity.h:170
void GenerateAttrListFile(ODB_TREE_WRITER &writer)
void GenerateLayerFiles(ODB_TREE_WRITER &writer)
virtual ~ODB_STEP_ENTITY()=default
std::map< wxString, std::shared_ptr< ODB_LAYER_ENTITY > > m_layerEntityMap
Definition odb_entity.h:203
ODB_NET_LIST m_netlist
Definition odb_entity.h:208
std::unique_ptr< FEATURES_MANAGER > m_profile
Definition odb_entity.h:204
std::vector< std::pair< wxString, wxString > > m_stephdr
Definition odb_entity.h:207
bool AddStepHeader()
virtual bool CreateDirectoryTree(ODB_TREE_WRITER &writer) override
void GenerateNetlistsFiles(ODB_TREE_WRITER &writer)
void InitNetListData()
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
ODB_SYMBOLS_ENTITY()=default
virtual ~ODB_SYMBOLS_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:258
virtual std::string GetEntityName() override
Definition odb_entity.h:305
virtual ~ODB_USER_ENTITY()=default
ODB_USER_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:281
virtual ~ODB_WHEELS_ENTITY()=default
ODB_WHEELS_ENTITY()=default
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ UNDEFINED_LAYER
Definition layer_ids.h:57
ODB_SUBTYPE
Definition odb_util.h:124
ODB_TYPE
Definition odb_util.h:105
@ UNDEFINED
Definition odb_util.h:106
ODB_LAYER_ROLE
Definition odb_util.h:156
ODB_POLARITY
Definition odb_util.h:24
ODB_CONTEXT
Definition odb_util.h:92
PCB_LAYER_ID m_componentSide
Definition odb_entity.h:83
PCB_LAYER_ID m_layer
Definition odb_entity.h:74
wxString m_name
Definition odb_entity.h:75
ODB_LAYER_ROLE m_role
Definition odb_entity.h:76
std::optional< DRILL_SPAN > m_drillSpan
Definition odb_entity.h:81
const BOARD_STACKUP_ITEM * m_stackupItem
Definition odb_entity.h:79
std::optional< ODB_AUX_LAYER_TYPE > m_auxType
Definition odb_entity.h:77
std::optional< ODB_AUX_LAYER_KEY > m_auxKey
Definition odb_entity.h:78
std::optional< ODB_SUBTYPE > m_addType
Definition odb_entity.h:100
std::optional< ODB_DIELECTRIC_TYPE > m_diType
Definition odb_entity.h:101
std::optional< uint32_t > m_cuBottom
Definition odb_entity.h:104
std::optional< uint32_t > m_ref
Definition odb_entity.h:102
std::optional< uint32_t > m_cuTop
Definition odb_entity.h:103
MATRIX_LAYER(uint32_t aRow, const wxString &aLayerName)
Definition odb_entity.h:116
std::optional< std::pair< wxString, wxString > > m_span
Definition odb_entity.h:99