Horizon
tool_route_track_interactive.hpp
1 #pragma once
2 #include "core/tool.hpp"
3 #include <deque>
4 #include <memory>
5 #include <set>
6 
7 namespace PNS {
8 class ROUTER;
9 class PNS_HORIZON_IFACE;
10 class ITEM;
11 class MEANDER_PLACER_BASE;
12 } // namespace PNS
13 
14 namespace horizon {
15 class ToolWrapper;
16 class Board;
18  friend ToolWrapper;
19 
20 public:
21  using ToolBase::ToolBase;
22  ToolResponse begin(const ToolArgs &args) override;
23  ToolResponse update(const ToolArgs &args) override;
24  bool can_begin() override;
25  bool is_specific() override;
27 
28  class Settings : public ToolSettings {
29  public:
30  json serialize() const override;
31  void load_from_json(const json &j) override;
32  int effort = 1;
33  bool remove_loops = true;
34  enum class Mode { WALKAROUND, PUSH, BEND, STRAIGHT };
35  Mode mode = Mode::WALKAROUND;
36  static const std::map<Mode, std::string> mode_names;
37 
38  bool drc = true;
39  };
40 
41  ToolSettings *get_settings() override
42  {
43  return &settings;
44  }
45 
46  void apply_settings() override;
47 
48  std::set<InToolActionID> get_actions() const override
49  {
50  using I = InToolActionID;
51  return {
52  I::LMB,
53  I::CANCEL,
54  I::RMB,
55  I::LENGTH_TUNING_LENGTH,
56  I::LENGTH_TUNING_AMPLITUDE_INC,
57  I::LENGTH_TUNING_AMPLITUDE_DEC,
58  I::LENGTH_TUNING_SPACING_INC,
59  I::LENGTH_TUNING_SPACING_DEC,
60  I::POSTURE,
61  I::TOGGLE_VIA,
62  I::ROUTER_SETTINGS,
63  I::ROUTER_MODE,
64  I::ENTER_WIDTH,
65  I::TRACK_WIDTH_DEFAULT,
66  I::CLEARANCE_OFFSET,
67  I::CLEARANCE_OFFSET_DEFAULT,
68  };
69  }
70 
71 private:
72  Settings settings;
73 
74  PNS::ROUTER *router = nullptr;
75  PNS::PNS_HORIZON_IFACE *iface = nullptr;
76  PNS::MEANDER_PLACER_BASE *meander_placer = nullptr;
77  class CanvasGL *canvas = nullptr;
78  ToolWrapper *wrapper = nullptr;
79 
80  enum class State { START, ROUTING };
81  State state = State::START;
82 
83  Board *board = nullptr;
84  const class BoardRules *rules = nullptr;
85 
86  void update_tip();
87  class Track *get_track(const std::set<SelectableRef> &sel);
88  class Via *get_via(const std::set<SelectableRef> &sel);
89  bool is_tune() const;
90  bool settings_window_visible = false;
91  void update_settings_window();
92 };
93 } // namespace horizon
Class MEANDER_PLACER_BASE.
Definition: pns_meander_placer_base.h:49
Definition: pns_horizon_iface.hpp:66
Definition: pns_router.h:113
This is what a Tool receives when the user did something.
Definition: tool_pub.hpp:23
Common interface for all Tools.
Definition: tool_pub.hpp:94
To signal back to the core what the Tool did, a Tool returns a ToolResponse.
Definition: tool_pub.hpp:40
Definition: tool_route_track_interactive.hpp:28
Definition: tool_route_track_interactive.hpp:17
ToolResponse update(const ToolArgs &args) override
Gets called whenever the user generated some sort of input.
Definition: tool_route_track_interactive.cpp:663
bool can_begin() override
Definition: tool_route_track_interactive.cpp:98
ToolResponse begin(const ToolArgs &args) override
Gets called right after the constructor has finished.
Definition: tool_route_track_interactive.cpp:155
bool is_specific() override
Definition: tool_route_track_interactive.cpp:134
Definition: tool_pub.hpp:82
Definition: tool_route_track_interactive.cpp:23
a class to store JSON values
Definition: json.hpp:177