Horizon
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 
11 namespace horizon {
12 
13 
14 class KiCadSymbol {
15 public:
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 
98 std::list<KiCadSymbol> parse_kicad_library(const std::string &filename);
100 public:
101  KiCadSymbolImporter(const KiCadSymbol &sym, const class Package *pkg, bool merge_pins);
102 
103  const Entity &get_entity();
104  const Part *get_part();
105  const std::list<Unit> &get_units();
106  const std::list<Symbol> &get_symbols();
107 
108 private:
109  Entity entity;
110  Part part;
111  std::list<Unit> units;
112  std::list<Symbol> symbols;
113  // const KiCadSymbol &symbol;
114  // const class Package *package;
115 };
116 
117 } // namespace horizon
Definition: entity.hpp:13
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: package.hpp:29
Definition: part.hpp:14
Definition: symbol.hpp:39