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  class SPoly {
31  public:
32  std::vector<Coordi> vertices;
33  bool is_closed = false;
34  };
35  std::list<SPoly> polys;
36 
37  class SPin {
38  public:
39  std::string name;
40  std::string pad;
41  Coordi pos;
42  int64_t length;
43  Orientation orientation;
44  Pin::Direction direction;
45  SymbolPin::Decoration decoration;
46  };
47  std::list<SPin> pins;
48  };
49  std::vector<SPart> parts;
50  unsigned int get_n_pins() const;
51 
53  public:
54  SPartIterProxy(std::vector<SPart> &p, int i) : parts(p), idx(i)
55  {
56  }
57  auto begin()
58  {
59  if (idx == 0) {
60  return parts.begin();
61  }
62  else if (idx > parts.size()) {
63  return parts.begin();
64  }
65  else {
66  return parts.begin() + (idx - 1);
67  }
68  }
69 
70  auto end()
71  {
72  if (idx == 0) {
73  return parts.end();
74  }
75  else if (idx > parts.size()) {
76  return parts.begin();
77  }
78  else {
79  return begin() + 1;
80  }
81  }
82 
83  private:
84  std::vector<SPart> &parts;
85  const size_t idx;
86  };
87 
88  SPartIterProxy get_parts(int idx);
89 };
90 
91 std::list<KiCadSymbol> parse_kicad_library(const std::string &filename);
93 public:
94  KiCadSymbolImporter(const KiCadSymbol &sym, const class Package *pkg, bool merge_pins);
95 
96  const Entity &get_entity();
97  const Part *get_part();
98  const std::list<Unit> &get_units();
99  const std::list<Symbol> &get_symbols();
100 
101 private:
102  Entity entity;
103  Part part;
104  std::list<Unit> units;
105  std::list<Symbol> symbols;
106  // const KiCadSymbol &symbol;
107  // const class Package *package;
108 };
109 
110 } // namespace horizon
horizon::KiCadSymbol::SPart
Definition: kicad_lib_parser.hpp:22
horizon::KiCadSymbolImporter
Definition: kicad_lib_parser.hpp:92
horizon::SymbolPin::Decoration
Definition: symbol.hpp:38
horizon::KiCadSymbol::SPart::SPin
Definition: kicad_lib_parser.hpp:37
horizon::KiCadSymbol::SPart::SPoly
Definition: kicad_lib_parser.hpp:30
horizon::KiCadSymbol
Definition: kicad_lib_parser.hpp:14
horizon::Entity
Definition: entity.hpp:14
horizon::KiCadSymbol::SPartIterProxy
Definition: kicad_lib_parser.hpp:52
horizon::Coord< int64_t >
libzip::int64_t
zip_int64_t int64_t
zip_int64_t typedef.
Definition: zip.hpp:103
horizon::KiCadSymbol::SPart::SRect
Definition: kicad_lib_parser.hpp:24
horizon::Package
Definition: package.hpp:29
horizon::Part
Definition: part.hpp:14