Horizon
Loading...
Searching...
No Matches
kicad_lib_parser.hpp
1#pragma once
2#include <string>
3#include <list>
4#include <vector>
5#include "common/common.hpp"
6#include "pool/unit.hpp"
7#include "pool/symbol.hpp"
8#include "pool/entity.hpp"
9#include "pool/part.hpp"
10
11namespace horizon {
12
13
15public:
16 std::string name;
17 std::string prefix;
18 std::string footprint;
19 std::string datasheet;
20 std::string description;
21 std::vector<std::string> fplist;
22 class SPart {
23 public:
24 class SRect {
25 public:
26 Coordi from;
27 Coordi to;
28 };
29 std::list<SRect> rects;
30
31 class SPolyline {
32 public:
33 std::vector<Coordi> pts;
34 };
35 std::list<SPolyline> polylines;
36
37 class SPoly {
38 public:
39 std::vector<Coordi> vertices;
40 bool is_closed = false;
41 };
42 std::list<SPoly> polys;
43
44 class SPin {
45 public:
46 std::string name;
47 std::string pad;
48 Coordi pos;
49 int64_t length;
50 Orientation orientation;
51 Pin::Direction direction;
52 SymbolPin::Decoration decoration;
53 };
54 std::list<SPin> pins;
55 };
56 std::vector<SPart> parts;
57 unsigned int get_n_pins() const;
58
60 public:
61 SPartIterProxy(std::vector<SPart> &p, int i) : parts(p), idx(i)
62 {
63 }
64 auto begin()
65 {
66 if (idx == 0) {
67 return parts.begin();
68 }
69 else if (idx > parts.size()) {
70 return parts.begin();
71 }
72 else {
73 return parts.begin() + (idx - 1);
74 }
75 }
76
77 auto end()
78 {
79 if (idx == 0) {
80 return parts.end();
81 }
82 else if (idx > parts.size()) {
83 return parts.begin();
84 }
85 else {
86 return begin() + 1;
87 }
88 }
89
90 private:
91 std::vector<SPart> &parts;
92 const size_t idx;
93 };
94
95 SPartIterProxy get_parts(int idx);
96};
97
98std::list<KiCadSymbol> parse_kicad_library(const std::string &filename);
100public:
101 KiCadSymbolImporter(const KiCadSymbol &sym, std::shared_ptr<const class Package> pkg, bool merge_pins);
102
103 std::shared_ptr<const Entity> get_entity();
104 const Part *get_part();
105 const std::list<std::shared_ptr<Unit>> &get_units();
106 const std::list<Symbol> &get_symbols();
107
108private:
109 std::shared_ptr<Entity> entity;
110 Part part;
111 std::list<std::shared_ptr<Unit>> units;
112 std::list<Symbol> symbols;
113 // const KiCadSymbol &symbol;
114 // const class Package *package;
115};
116
117} // namespace horizon
Definition kicad_lib_parser.hpp:99
Definition kicad_lib_parser.hpp:59
Definition kicad_lib_parser.hpp:44
Definition kicad_lib_parser.hpp:37
Definition kicad_lib_parser.hpp:31
Definition kicad_lib_parser.hpp:24
Definition kicad_lib_parser.hpp:22
Definition kicad_lib_parser.hpp:14
Definition part.hpp:15
Definition symbol.hpp:39