7 #include "../../odbdesign_export.h"
8 #include "../../enums.h"
9 #include "../../ProtoBuf/edadatafile.pb.h"
10 #include "../../ProtoBuf/common.pb.h"
11 #include "../../IProtoBuffable.h"
12 #include "PropertyRecord.h"
13 #include "ContourPolygon.h"
14 #include "AttributeLookupTable.h"
15 #include "../IStreamSaveable.h"
18 namespace Odb::Lib::FileModel::Design
26 const std::filesystem::path& GetPath()
const;
27 const std::filesystem::path& GetDirectory()
const;
28 const std::string& GetUnits()
const;
29 const std::string& GetSource()
const;
31 bool Parse(std::filesystem::path path);
33 bool Save(std::ostream& os)
override;
44 typedef std::vector<std::shared_ptr<FeatureIdRecord>> Vector;
47 unsigned int layerNumber;
48 unsigned int featureNumber;
51 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::FeatureIdRecord> to_protobuf()
const override;
52 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::FeatureIdRecord& message)
override;
83 typedef std::vector<std::shared_ptr<SubnetRecord>> Vector;
89 FeatureIdRecord::Vector m_featureIdRecords;
93 unsigned int componentNumber;
94 unsigned toeprintNumber;
98 CutoutType cutoutType;
102 inline static const std::string RECORD_TOKEN =
"SNT";
103 inline static const std::string RECORD_TYPE_TRACE_TOKEN =
"TRC";
104 inline static const std::string RECORD_TYPE_VIA_TOKEN =
"VIA";
105 inline static const std::string RECORD_TYPE_TOEPRINT_TOKEN =
"TOP";
106 inline static const std::string RECORD_TYPE_PLANE_TOKEN =
"PLN";
109 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::NetRecord::SubnetRecord> to_protobuf()
const override;
110 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::NetRecord::SubnetRecord& message)
override;
114 typedef std::vector<std::shared_ptr<NetRecord>> Vector;
115 typedef std::map<std::string, std::shared_ptr<NetRecord>> StringMap;
122 SubnetRecord::Vector m_subnetRecords;
123 PropertyRecord::Vector m_propertyRecords;
126 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::NetRecord> to_protobuf()
const override;
127 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::NetRecord& message)
override;
143 typedef std::vector<std::shared_ptr<OutlineRecord>> Vector;
147 m_contourPolygons.clear();
167 ContourPolygon::Vector m_contourPolygons;
170 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::PackageRecord::OutlineRecord> to_protobuf()
const override;
171 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::PackageRecord::OutlineRecord& message)
override;
173 inline static const char* RECTANGLE_RECORD_TOKEN =
"RC";
174 inline static const char* CIRCLE_RECORD_TOKEN =
"CR";
175 inline static const char* SQUARE_RECORD_TOKEN =
"SQ";
176 inline static const char* CONTOUR_BEGIN_RECORD_TOKEN =
"CT";
177 inline static const char* CONTOUR_END_RECORD_TOKEN =
"CE";
190 enum class ElectricalType
202 RecommendedThroughHole,
209 typedef std::vector<std::shared_ptr<PinRecord>> Vector;
210 typedef std::map<std::string, std::shared_ptr<PinRecord>> StringMap;
214 m_outlineRecords.clear();
221 double finishedHoleSize;
222 ElectricalType electricalType;
227 OutlineRecord::Vector m_outlineRecords;
230 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::PackageRecord::PinRecord> to_protobuf()
const override;
231 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::PackageRecord::PinRecord& message)
override;
235 typedef std::vector<std::shared_ptr<PackageRecord>> Vector;
236 typedef std::map<std::string, std::shared_ptr<PackageRecord>> StringMap;
240 m_outlineRecords.clear();
241 m_pinRecords.clear();
242 m_pinRecordsByName.clear();
243 m_propertyRecords.clear();
252 OutlineRecord::Vector m_outlineRecords;
253 PinRecord::Vector m_pinRecords;
254 PinRecord::StringMap m_pinRecordsByName;
255 PropertyRecord::Vector m_propertyRecords;
258 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::PackageRecord> to_protobuf()
const override;
259 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::PackageRecord& message)
override;
267 m_propertyRecords.clear();
268 m_featureIdRecords.clear();
273 PropertyRecord::Vector m_propertyRecords;
274 FeatureIdRecord::Vector m_featureIdRecords;
276 typedef std::shared_ptr<FeatureGroupRecord> shared_ptr;
277 typedef std::vector<FeatureGroupRecord::shared_ptr> Vector;
280 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile::FeatureGroupRecord> to_protobuf()
const override;
281 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile::FeatureGroupRecord& message)
override;
285 const std::vector<std::string>& GetLayerNames()
const;
286 const std::vector<std::string>& GetAttributeNames()
const;
287 const std::vector<std::string>& GetAttributeTextValues()
const;
289 const NetRecord::Vector& GetNetRecords()
const;
290 const NetRecord::StringMap& GetNetRecordsByName()
const;
291 const PackageRecord::Vector& GetPackageRecords()
const;
292 const PackageRecord::StringMap& GetPackageRecordsByName()
const;
293 const FeatureGroupRecord::Vector& GetFeatureGroupRecords()
const;
294 const PropertyRecord::Vector& GetPropertyRecords()
const;
297 std::unique_ptr<Odb::Lib::Protobuf::EdaDataFile> to_protobuf()
const override;
298 void from_protobuf(
const Odb::Lib::Protobuf::EdaDataFile& message)
override;
301 std::filesystem::path m_directory;
302 std::filesystem::path m_path;
305 std::string m_source;
306 std::vector<std::string> m_layerNames;
308 std::vector<std::string> m_attributeNames;
309 std::vector<std::string> m_attributeTextValues;
311 NetRecord::Vector m_netRecords;
312 NetRecord::StringMap m_netRecordsByName;
314 PackageRecord::Vector m_packageRecords;
315 PackageRecord::StringMap m_packageRecordsByName;
317 FeatureGroupRecord::Vector m_featureGroupRecords;
319 PropertyRecord::Vector m_propertyRecords;
321 bool m_logAllLineParsing;
323 inline static const char* EDADATA_FILENAME =
"data";
325 inline static const char* COMMENT_TOKEN =
"#";
326 inline static const char* UNITS_TOKEN =
"UNITS";
327 inline static const char* HEADER_RECORD_TOKEN =
"HDR";
328 inline static const char* LAYER_NAMES_RECORD_TOKEN =
"LYR";
329 inline static const char* PROPERTY_RECORD_TOKEN =
"PRP";
330 inline static const char* ATTRIBUTE_NAME_TOKEN =
"@";
331 inline static const char* ATTRIBUTE_VALUE_TOKEN =
"&";
332 inline static const char* NET_RECORD_TOKEN =
"NET";
333 inline static const char* FEATURE_ID_RECORD_TOKEN =
"FID";
334 inline static const char* PACKAGE_RECORD_TOKEN =
"PKG";
335 inline static const char* PIN_RECORD_TOKEN =
"PIN";
337 inline static const char* FEATURE_GROUP_RECORD_TOKEN =
"FGR";