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;
17 class ToolRouteTrackInteractive : public ToolBase {
18  friend ToolWrapper;
19 
20 public:
21  ToolRouteTrackInteractive(IDocument *c, ToolID tid);
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  const ToolSettings *get_settings_const() const 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 protected:
72  ToolSettings *get_settings() override
73  {
74  return &settings;
75  }
76 
77 private:
78  Settings settings;
79 
80  PNS::ROUTER *router = nullptr;
81  PNS::PNS_HORIZON_IFACE *iface = nullptr;
82  PNS::MEANDER_PLACER_BASE *meander_placer = nullptr;
83  class CanvasGL *canvas = nullptr;
84  ToolWrapper *wrapper = nullptr;
85 
86  enum class State { START, ROUTING };
87  State state = State::START;
88 
89  Board *board = nullptr;
90  const class BoardRules *rules = nullptr;
91 
92  void update_tip();
93  class Track *get_track(const std::set<SelectableRef> &sel);
94  class Via *get_via(const std::set<SelectableRef> &sel);
95  bool is_tune() const;
96  bool settings_window_visible = false;
97  void update_settings_window();
98 };
99 } // namespace horizon
horizon::ToolSettings
Definition: tool.hpp:84
horizon::ToolRouteTrackInteractive::update
ToolResponse update(const ToolArgs &args) override
Gets called whenever the user generated some sort of input.
horizon::ToolRouteTrackInteractive::can_begin
bool can_begin() override
PNS::ROUTER
Definition: pns_router.h:113
horizon::ToolRouteTrackInteractive::begin
ToolResponse begin(const ToolArgs &args) override
Gets called right after the constructor has finished.
horizon::ToolRouteTrackInteractive::Settings
Definition: tool_route_track_interactive.hpp:28
PNS::MEANDER_PLACER_BASE
Class MEANDER_PLACER_BASE.
Definition: pns_meander_placer_base.h:49
horizon::ToolRouteTrackInteractive::is_specific
bool is_specific() override
horizon::ToolRouteTrackInteractive
Definition: tool_route_track_interactive.hpp:17
nlohmann::basic_json
a class to store JSON values
Definition: json.hpp:166
horizon::ToolResponse
To signal back to the core what the Tool did, a Tool returns a ToolResponse.
Definition: tool.hpp:42
horizon::ToolArgs
This is what a Tool receives when the user did something.
Definition: tool.hpp:23
PNS::PNS_HORIZON_IFACE
Definition: pns_horizon_iface.hpp:65