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;
88 ODB_CONTEXT m_context = ODB_CONTEXT::BOARD;
89 ODB_TYPE m_type = ODB_TYPE::UNDEFINED;
90 ODB_POLARITY m_polarity = ODB_POLARITY::POSITIVE;
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
108private:
109 std::map<wxString, unsigned int> m_matrixSteps;
110 std::vector<MATRIX_LAYER> m_matrixLayers;
111 unsigned int m_row = 1;
112 unsigned int m_col = 1;
113 bool m_hasBotComp = false;
114};
115
117{
118public:
120 virtual ~ODB_MISC_ENTITY() = default;
121 inline virtual std::string GetEntityName() override { return "misc"; }
122
123 //TODO
124 // bool AddAttrList();
125 // bool AddSysAttrFiles();
126 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
127
128private:
129 std::vector<std::pair<wxString, wxString>> m_info;
130 // ODB_ATTRLIST m_attrlist;
131};
132
133class FEATURES_MANAGER;
134class ODB_LAYER_ENTITY;
136{
137public:
138 ODB_STEP_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin ) :
139 ODB_ENTITY_BASE( aBoard, aPlugin ), m_profile( nullptr ), m_netlist( aBoard )
140 {
141 }
142
143 virtual ~ODB_STEP_ENTITY() = default;
144
145 inline virtual std::string GetEntityName() override { return "pcb"; }
146
147 void InitEdaData();
150 void MakeLayerEntity();
154
155 virtual bool CreateDirectoryTree( ODB_TREE_WRITER& writer ) override;
156
157 virtual void InitEntityData() override;
158 void GenerateLayerFiles( ODB_TREE_WRITER& writer );
159 void GenerateEdaFiles( ODB_TREE_WRITER& writer );
161 void GenerateProfileFile( ODB_TREE_WRITER& writer );
163
164 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
165
166private:
167 // ODB_ATTRLIST m_attrList;
168 std::map<wxString, std::shared_ptr<ODB_LAYER_ENTITY>> m_layerEntityMap;
169 std::unique_ptr<FEATURES_MANAGER> m_profile;
170
172 std::unordered_map<wxString, wxString> m_stephdr;
174};
175
176
178{
179public:
180 ODB_LAYER_ENTITY( BOARD* aBoard, PCB_IO_ODBPP* aPlugin,
181 std::map<int, std::vector<BOARD_ITEM*>>& aMap, const PCB_LAYER_ID& aLayerID,
182 const wxString& aLayerName );
183
184 virtual ~ODB_LAYER_ENTITY() = default;
185
186 inline virtual std::string GetEntityName() override { return "layers"; }
187 virtual void InitEntityData() override;
188 void InitFeatureData();
189 void InitDrillData();
190 void InitAuxilliaryData();
191
193
195
196
197 void GenAttrList( ODB_TREE_WRITER& writer );
198 void GenComponents( ODB_TREE_WRITER& writer );
199 void GenTools( ODB_TREE_WRITER& writer );
200
201 void GenFeatures( ODB_TREE_WRITER& writer );
202
203 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
204
205private:
206 std::map<int, std::vector<BOARD_ITEM*>> m_layerItems;
209 // ODB_ATTRLIST m_attrList;
210 std::optional<ODB_DRILL_TOOLS> m_tools;
211 std::optional<COMPONENTS_MANAGER> m_compTop;
212 std::optional<COMPONENTS_MANAGER> m_compBot;
213 std::unique_ptr<FEATURES_MANAGER> m_featuresMgr;
214};
215
217{
218public:
220
221 virtual ~ODB_SYMBOLS_ENTITY() = default;
222
223 inline virtual std::string GetEntityName() override { return "symbols"; }
224
225 //TODO
226 // virtual void GenerateFiles( ODB_TREE_WRITER& writer );
227};
228
230{
231public:
232 ODB_FONTS_ENTITY() = default;
233 virtual ~ODB_FONTS_ENTITY() = default;
234
235 inline virtual std::string GetEntityName() override { return "fonts"; }
236
237 virtual void GenerateFiles( ODB_TREE_WRITER& writer ) override;
238};
239
241{
242public:
243 ODB_WHEELS_ENTITY() = default;
244 virtual ~ODB_WHEELS_ENTITY() = default;
245
246 inline virtual std::string GetEntityName() override { return "wheels"; }
247
248 // TODO
249 // virtual void GenerateFiles( ODB_TREE_WRITER& writer );
250};
251
253{
254public:
255 ODB_INPUT_ENTITY() = default;
256 virtual ~ODB_INPUT_ENTITY() = default;
257
258 inline virtual std::string GetEntityName() override { return "input"; }
259
260 // TODO
261 // virtual void GenerateFiles( ODB_TREE_WRITER &writer );
262};
263
265{
266public:
267 ODB_USER_ENTITY() = default;
268 virtual ~ODB_USER_ENTITY() = default;
269
270 inline virtual std::string GetEntityName() override { return "user"; }
271
272 // TODO
273 // virtual void GenerateFiles( ODB_TREE_WRITER &writer );
274};
275
276#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:296
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)
Definition: odb_entity.cpp:62
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:235
virtual ~ODB_FONTS_ENTITY()=default
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
Definition: odb_fonts.cpp:666
ODB_INPUT_ENTITY()=default
virtual std::string GetEntityName() override
Definition: odb_entity.h:258
virtual ~ODB_INPUT_ENTITY()=default
virtual std::string GetEntityName() override
Definition: odb_entity.h:186
void GenFeatures(ODB_TREE_WRITER &writer)
Definition: odb_entity.cpp:852
PCB_LAYER_ID m_layerID
Definition: odb_entity.h:207
void InitFeatureData()
Definition: odb_entity.cpp:592
void GenComponents(ODB_TREE_WRITER &writer)
Definition: odb_entity.cpp:837
wxString m_matrixLayerName
Definition: odb_entity.h:208
void InitAuxilliaryData()
Definition: odb_entity.cpp:746
std::optional< COMPONENTS_MANAGER > m_compTop
Definition: odb_entity.h:211
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
Definition: odb_entity.cpp:819
std::optional< COMPONENTS_MANAGER > m_compBot
Definition: odb_entity.h:212
std::optional< ODB_DRILL_TOOLS > m_tools
Definition: odb_entity.h:210
void GenTools(ODB_TREE_WRITER &writer)
Definition: odb_entity.cpp:866
std::map< int, std::vector< BOARD_ITEM * > > m_layerItems
Definition: odb_entity.h:206
virtual ~ODB_LAYER_ENTITY()=default
void AddLayerFeatures()
ODB_COMPONENT & InitComponentData(const FOOTPRINT *aFp, const EDA_DATA::PACKAGE &aPkg)
Definition: odb_entity.cpp:620
virtual void InitEntityData() override
Definition: odb_entity.cpp:568
void GenAttrList(ODB_TREE_WRITER &writer)
Definition: odb_entity.cpp:860
std::unique_ptr< FEATURES_MANAGER > m_featuresMgr
Definition: odb_entity.h:213
virtual std::string GetEntityName() override
Definition: odb_entity.h:78
void AddStep(const wxString &aStepName)
Definition: odb_entity.cpp:103
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:112
void InitMatrixLayerData()
Definition: odb_entity.cpp:117
std::vector< MATRIX_LAYER > m_matrixLayers
Definition: odb_entity.h:110
void AddMatrixLayerField(MATRIX_LAYER &aMLayer, PCB_LAYER_ID aLayer)
Definition: odb_entity.cpp:192
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
Definition: odb_entity.cpp:505
std::map< wxString, unsigned int > m_matrixSteps
Definition: odb_entity.h:109
unsigned int m_row
Definition: odb_entity.h:111
void AddAuxilliaryMatrixLayer()
Definition: odb_entity.cpp:389
void AddDrillMatrixLayer()
Definition: odb_entity.cpp:288
virtual void InitEntityData() override
Definition: odb_entity.cpp:109
void AddCOMPMatrixLayer(PCB_LAYER_ID aCompSide)
Definition: odb_entity.cpp:367
virtual std::string GetEntityName() override
Definition: odb_entity.h:121
virtual ~ODB_MISC_ENTITY()=default
std::vector< std::pair< wxString, wxString > > m_info
Definition: odb_entity.h:129
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
Definition: odb_entity.cpp:90
virtual std::string GetEntityName() override
Definition: odb_entity.h:145
std::unordered_map< wxString, wxString > m_stephdr
Definition: odb_entity.h:172
void GenerateProfileFile(ODB_TREE_WRITER &writer)
ODB_STEP_ENTITY(BOARD *aBoard, PCB_IO_ODBPP *aPlugin)
Definition: odb_entity.h:138
EDA_DATA m_edaData
Definition: odb_entity.h:171
void GenerateStepHeaderFile(ODB_TREE_WRITER &writer)
void GenerateEdaFiles(ODB_TREE_WRITER &writer)
virtual void InitEntityData() override
Definition: odb_entity.cpp:805
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:168
ODB_NET_LIST m_netlist
Definition: odb_entity.h:173
std::unique_ptr< FEATURES_MANAGER > m_profile
Definition: odb_entity.h:169
bool AddStepHeader()
virtual bool CreateDirectoryTree(ODB_TREE_WRITER &writer) override
void GenerateNetlistsFiles(ODB_TREE_WRITER &writer)
void InitNetListData()
void MakeLayerEntity()
virtual void GenerateFiles(ODB_TREE_WRITER &writer) override
Definition: odb_entity.cpp:978
ODB_SYMBOLS_ENTITY()=default
virtual ~ODB_SYMBOLS_ENTITY()=default
virtual std::string GetEntityName() override
Definition: odb_entity.h:223
virtual std::string GetEntityName() override
Definition: odb_entity.h:270
virtual ~ODB_USER_ENTITY()=default
ODB_USER_ENTITY()=default
virtual std::string GetEntityName() override
Definition: odb_entity.h:246
virtual ~ODB_WHEELS_ENTITY()=default
ODB_WHEELS_ENTITY()=default
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:60
Definition: odb_util.cpp:33
ODB_SUBTYPE
Definition: odb_util.h:53
ODB_TYPE
Definition: odb_util.h:34
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