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 along
18 * with this program. If not, see <http://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 <wx/string.h>
29#include <iostream>
30#include <functional>
31#include "odb_feature.h"
32#include "odb_eda_data.h"
33#include "odb_netlist.h"
34#include "odb_component.h"
35
36
37class BOARD;
38class ODB_TREE_WRITER;
39class BOARD_ITEM;
40class PCB_IO_ODBPP;
41
43{
44public:
45 ODB_ENTITY_BASE( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) : m_board( aBoard ), m_plugin( aPlugin )
46 {
47 }
48
49 ODB_ENTITY_BASE() : m_board( nullptr ), m_plugin( nullptr ) {}
50
51 virtual ~ODB_ENTITY_BASE() = default;
52 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) {}
53 virtual bool CreateDirectoryTree( ODB_TREE_WRITER& writer );
54 virtual std::string GetEntityName() = 0;
55 virtual void InitEntityData() {}
56
57
58protected:
60 std::vector<std::string> m_fileName;
62};
63
64enum class ODB_SUBTYPE;
65enum class ODB_POLARITY;
66enum class ODB_CONTEXT;
67enum class ODB_TYPE;
68
70{
71public:
72 ODB_MATRIX_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) : ODB_ENTITY_BASE( aBoard, aPlugin )
73 {
74 }
75
76 virtual ~ODB_MATRIX_ENTITY() = default;
77
78 inline virtual std::string GetEntityName() override { return "matrix"; }
79
81 {
82 std::optional<std::pair<wxString, wxString>> m_span; // !< start, end
83 std::optional<ODB_SUBTYPE> m_addType;
84 std::optional<ODB_DIELECTRIC_TYPE> m_diType;
85
86 uint32_t m_rowNumber;
87 wxString m_layerName;
91
92 MATRIX_LAYER( uint32_t aRow, const wxString& aLayerName ) :
93 m_rowNumber( aRow ), m_layerName( ODB::GenLegalEntityName( aLayerName ) )
94 {
95 }
96 };
97
98 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
99 virtual void InitEntityData() override;
100 void InitMatrixLayerData();
101
102 void AddStep( const wxString& aStepName );
103 void AddMatrixLayerField( MATRIX_LAYER& aMLayer, PCB_LAYER_ID aLayer );
104 void AddDrillMatrixLayer();
106 void AddCOMPMatrixLayer( PCB_LAYER_ID aCompSide );
107
109
110private:
111 std::map<wxString, unsigned int> m_matrixSteps;
112 std::vector<MATRIX_LAYER> m_matrixLayers;
113 unsigned int m_row = 1;
114 unsigned int m_col = 1;
115 bool m_hasBotComp = false;
116};
117
119{
120public:
122 virtual ~ODB_MISC_ENTITY() = default;
123 inline virtual std::string GetEntityName() override { return "misc"; }
124
125 //TODO
126 // bool AddAttrList();
127 // bool AddSysAttrFiles();
128 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
129
130private:
131 std::vector<std::pair<wxString, wxString>> m_info;
132 // ODB_ATTRLIST m_attrlist;
133};
134
135class FEATURES_MANAGER;
136class ODB_LAYER_ENTITY;
138{
139public:
140 ODB_STEP_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) :
141 ODB_ENTITY_BASE( aBoard, aPlugin ), m_profile( nullptr ), m_netlist( aBoard )
142 {
143 }
144
145 virtual ~ODB_STEP_ENTITY() = default;
146
147 inline virtual std::string GetEntityName() override { return "pcb"; }
148
149 void InitEdaData();
152 void MakeLayerEntity();
156
157 virtual bool CreateDirectoryTree( ODB_TREE_WRITER& writer ) override;
158
159 virtual void InitEntityData() override;
160 void GenerateLayerFiles( ODB_TREE_WRITER& writer );
161 void GenerateEdaFiles( ODB_TREE_WRITER& writer );
163 void GenerateProfileFile( ODB_TREE_WRITER& writer );
165
166 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
167
168private:
169 // ODB_ATTRLIST m_attrList;
170 std::map<wxString, std::shared_ptr<ODB_LAYER_ENTITY>> m_layerEntityMap;
171 std::unique_ptr<FEATURES_MANAGER> m_profile;
172
174 std::unordered_map<wxString, wxString> m_stephdr;
176};
177
178
180{
181public:
182 ODB_LAYER_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin,
183 std::map<int, std::vector<BOARD_ITEM*>>& aMap, const PCB_LAYER_ID& aLayerID,
184 const wxString& aLayerName );
185
186 virtual ~ODB_LAYER_ENTITY() = default;
187
188 inline virtual std::string GetEntityName() override { return "layers"; }
189 virtual void InitEntityData() override;
190 void InitFeatureData();
191 void InitDrillData();
192 void InitAuxilliaryData();
193
195
197
198
199 void GenAttrList( ODB_TREE_WRITER& writer );
200 void GenComponents( ODB_TREE_WRITER& writer );
201 void GenTools( ODB_TREE_WRITER& writer );
202
203 void GenFeatures( ODB_TREE_WRITER& writer );
204
205 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
206
207private:
208 std::map<int, std::vector<BOARD_ITEM*>> m_layerItems;
211 // ODB_ATTRLIST m_attrList;
212 std::optional<ODB_DRILL_TOOLS> m_tools;
213 std::optional<COMPONENTS_MANAGER> m_compTop;
214 std::optional<COMPONENTS_MANAGER> m_compBot;
215 std::unique_ptr<FEATURES_MANAGER> m_featuresMgr;
216};
217
219{
220public:
222
223 virtual ~ODB_SYMBOLS_ENTITY() = default;
224
225 inline virtual std::string GetEntityName() override { return "symbols"; }
226
227 //TODO
228 // virtual void GenerateFiles( ODB_TREE_WRITER& writer );
229};
230
232{
233public:
234 ODB_FONTS_ENTITY() = default;
235 virtual ~ODB_FONTS_ENTITY() = default;
236
237 inline virtual std::string GetEntityName() override { return "fonts"; }
238
239 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
240};
241
243{
244public:
245 ODB_WHEELS_ENTITY() = default;
246 virtual ~ODB_WHEELS_ENTITY() = default;
247
248 inline virtual std::string GetEntityName() override { return "wheels"; }
249
250 // TODO
251 // virtual void GenerateFiles( ODB_TREE_WRITER& writer );
252};
253
255{
256public:
257 ODB_INPUT_ENTITY() = default;
258 virtual ~ODB_INPUT_ENTITY() = default;
259
260 inline virtual std::string GetEntityName() override { return "input"; }
261
262 // TODO
263 // virtual void GenerateFiles( ODB_TREE_WRITER &writer );
264};
265
267{
268public:
269 ODB_USER_ENTITY() = default;
270 virtual ~ODB_USER_ENTITY() = default;
271
272 inline virtual std::string GetEntityName() override { return "user"; }
273
274 // TODO
275 // virtual void GenerateFiles( ODB_TREE_WRITER &writer );
276};
277
278#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:79
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:322
virtual ~ODB_ENTITY_BASE()=default
virtual void InitEntityData()
Definition odb_entity.h:55
virtual std::string GetEntityName()=0
virtual bool CreateDirectoryTree(ODB_TREE_WRITER &writer)
virtual void GenerateFiles(ODB_TREE_WRITER &writer)
Definition odb_entity.h:52
BOARD * m_board
Definition odb_entity.h:59
PCB_IO_ODBPP * m_plugin
Definition odb_entity.h:61
std::vector< std::string > m_fileName
Definition odb_entity.h:60
ODB_ENTITY_BASE(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition odb_entity.h:45
ODB_FONTS_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:237
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:260
virtual ~ODB_INPUT_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:188
void GenFeatures(ODB_TREE_WRITER &writer)
PCB_LAYER_ID m_layerID
Definition odb_entity.h:209
void GenComponents(ODB_TREE_WRITER &writer)
wxString m_matrixLayerName
Definition odb_entity.h:210
void InitAuxilliaryData()
std::optional< COMPONENTS_MANAGER > m_compTop
Definition odb_entity.h:213
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
std::optional< COMPONENTS_MANAGER > m_compBot
Definition odb_entity.h:214
std::optional< ODB_DRILL_TOOLS > m_tools
Definition odb_entity.h:212
void GenTools(ODB_TREE_WRITER &writer)
std::map< int, std::vector< BOARD_ITEM * > > m_layerItems
Definition odb_entity.h:208
virtual ~ODB_LAYER_ENTITY()=default
ODB_LAYER_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin, std::map< int, std::vector< BOARD_ITEM * > > &aMap, const PCB_LAYER_ID &aLayerID, const wxString &aLayerName)
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:215
virtual std::string GetEntityName() override
Definition odb_entity.h:78
void AddStep(const wxString &aStepName)
virtual ~ODB_MATRIX_ENTITY()=default
ODB_MATRIX_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition odb_entity.h:72
unsigned int m_col
Definition odb_entity.h:114
std::vector< MATRIX_LAYER > m_matrixLayers
Definition odb_entity.h:112
void AddMatrixLayerField(MATRIX_LAYER &aMLayer, PCB_LAYER_ID aLayer)
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
std::map< wxString, unsigned int > m_matrixSteps
Definition odb_entity.h:111
unsigned int m_row
Definition odb_entity.h:113
void AddAuxilliaryMatrixLayer()
void EnsureUniqueLayerNames()
virtual void InitEntityData() override
void AddCOMPMatrixLayer(PCB_LAYER_ID aCompSide)
virtual std::string GetEntityName() override
Definition odb_entity.h:123
virtual ~ODB_MISC_ENTITY()=default
std::vector< std::pair< wxString, wxString > > m_info
Definition odb_entity.h:131
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
virtual std::string GetEntityName() override
Definition odb_entity.h:147
std::unordered_map< wxString, wxString > m_stephdr
Definition odb_entity.h:174
void GenerateProfileFile(ODB_TREE_WRITER &writer)
ODB_STEP_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition odb_entity.h:140
EDA_DATA m_edaData
Definition odb_entity.h:173
void GenerateStepHeaderFile(ODB_TREE_WRITER &writer)
void GenerateEdaFiles(ODB_TREE_WRITER &writer)
virtual void InitEntityData() override
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:170
ODB_NET_LIST m_netlist
Definition odb_entity.h:175
std::unique_ptr< FEATURES_MANAGER > m_profile
Definition odb_entity.h:171
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:225
virtual std::string GetEntityName() override
Definition odb_entity.h:272
virtual ~ODB_USER_ENTITY()=default
ODB_USER_ENTITY()=default
virtual std::string GetEntityName() override
Definition odb_entity.h:248
virtual ~ODB_WHEELS_ENTITY()=default
ODB_WHEELS_ENTITY()=default
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:60
ODB_SUBTYPE
Definition odb_util.h:53
ODB_TYPE
Definition odb_util.h:34
@ UNDEFINED
Definition odb_util.h:35
ODB_POLARITY
Definition odb_util.h:15
ODB_CONTEXT
Definition odb_util.h:21
std::optional< ODB_SUBTYPE > m_addType
Definition odb_entity.h:83
std::optional< ODB_DIELECTRIC_TYPE > m_diType
Definition odb_entity.h:84
MATRIX_LAYER(uint32_t aRow, const wxString &aLayerName)
Definition odb_entity.h:92
std::optional< std::pair< wxString, wxString > > m_span
Definition odb_entity.h:82