Horizon
canvas_patch.hpp
1 #pragma once
2 #include "canvas.hpp"
3 #include "clipper/clipper.hpp"
4 
5 namespace horizon {
6 class CanvasPatch : public Canvas {
7 public:
8  class PatchKey {
9  public:
10  PatchType type;
11  int layer;
12  UUID net;
13  bool operator<(const PatchKey &other) const
14  {
15  if (type < other.type)
16  return true;
17  else if (type > other.type)
18  return false;
19 
20  if (layer < other.layer)
21  return true;
22  else if (layer > other.layer)
23  return false;
24 
25  return net < other.net;
26  }
27  };
28 
29  const std::map<PatchKey, ClipperLib::Paths> &get_patches() const;
30  const std::set<std::tuple<int, Coordi, Coordi>> &get_text_extents() const;
31  void clear() override;
32 
33  void append_polygon(const Polygon &poly);
34 
35  CanvasPatch();
36  void push() override
37  {
38  }
39  void request_push() override;
40 
41 private:
42  const Net *net = nullptr;
43  PatchType patch_type = PatchType::OTHER;
44  virtual void img_net(const Net *net) override;
45  virtual void img_polygon(const Polygon &poly, bool tr) override;
46  virtual void img_hole(const class Hole &hole) override;
47  virtual void img_patch_type(PatchType type) override;
48 
49  std::map<PatchKey, ClipperLib::Paths> patches;
50  std::set<std::tuple<int, Coordi, Coordi>> text_extents;
51 };
52 } // namespace horizon
horizon::Polygon
Polygon used in Padstack, Package and Board for specifying filled Regions.
Definition: polygon.hpp:27
horizon::CanvasPatch
Definition: canvas_patch.hpp:6
horizon::Net
Definition: net.hpp:15
horizon::Canvas
Definition: canvas.hpp:22
horizon::CanvasPatch::PatchKey
Definition: canvas_patch.hpp:8
horizon::UUID
This class encapsulates a UUID and allows it to be uses as a value type.
Definition: uuid.hpp:16
horizon::Hole
A hole with diameter and position, that's it.
Definition: hole.hpp:18