Horizon
polygon.hpp
1 #pragma once
2 #include "util/uuid.hpp"
3 #include "nlohmann/json_fwd.hpp"
4 #include "common.hpp"
5 #include "junction.hpp"
6 #include "util/uuid_ptr.hpp"
7 #include <deque>
8 #include <map>
9 #include <fstream>
10 
11 namespace horizon {
12 using json = nlohmann::json;
13 
14 
15 class PolygonUsage {
16 public:
17  enum class Type { INVALID, PLANE, KEEPOUT };
18  virtual Type get_type() const = 0;
19  virtual UUID get_uuid() const = 0;
20  virtual ~PolygonUsage(){};
21 };
22 
27 class Polygon {
28 public:
29  class Vertex {
30  public:
31  enum class Type { LINE, ARC };
32 
33  Vertex(const json &j);
34  Vertex(const Coordi &c);
35  Vertex()
36  {
37  }
38  json serialize() const;
39  bool remove = false;
40 
41  Type type = Type::LINE;
42  Coordi position;
43  Coordi arc_center;
48  bool arc_reverse = false;
49  };
50 
51 
52  Polygon(const UUID &uu, const json &j);
53  Polygon(const UUID &uu);
54  UUID get_uuid() const;
55 
56  Vertex *append_vertex(const Coordi &pos = Coordi());
57  std::pair<unsigned int, unsigned int> get_vertices_for_edge(unsigned int edge);
58  const Vertex &get_vertex(int edge) const;
59  Vertex &get_vertex(int edge);
65  Polygon remove_arcs(unsigned int precision = 16) const;
66 
70  bool has_arcs() const;
71  bool is_valid() const;
72  std::pair<Coordi, Coordi> get_bbox() const;
73 
74  UUID uuid;
75  std::vector<Vertex> vertices;
76  int layer = 0;
77  std::string parameter_class;
78 
80  json serialize() const;
81 };
82 } // namespace horizon
Definition: polygon.hpp:15
Definition: polygon.hpp:29
bool arc_reverse
false: counter clockwise true: clockwise
Definition: polygon.hpp:48
Polygon used in Padstack, Package and Board for specifying filled Regions.
Definition: polygon.hpp:27
Polygon remove_arcs(unsigned int precision=16) const
Definition: polygon.cpp:58
bool has_arcs() const
Definition: polygon.cpp:119
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
Definition: uuid_ptr.hpp:8
a class to store JSON values
Definition: json.hpp:166
basic_json<> json
default JSON class
Definition: json_fwd.hpp:61