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  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  };
35 
36  const ToolSettings *get_settings_const() const override
37  {
38  return &settings;
39  }
40 
41  void apply_settings() override;
42 
43  std::set<InToolActionID> get_actions() const override
44  {
45  using I = InToolActionID;
46  return {
47  I::LMB,
48  I::CANCEL,
49  I::RMB,
50  I::LENGTH_TUNING_LENGTH,
51  I::LENGTH_TUNING_AMPLITUDE_INC,
52  I::LENGTH_TUNING_AMPLITUDE_DEC,
53  I::LENGTH_TUNING_SPACING_INC,
54  I::LENGTH_TUNING_SPACING_DEC,
55  I::POSTURE,
56  I::TOGGLE_VIA,
57  I::ROUTER_SETTINGS,
58  I::ROUTER_MODE,
59  I::ENTER_WIDTH,
60  I::TRACK_WIDTH_DEFAULT,
61  I::CLEARANCE_OFFSET,
62  I::CLEARANCE_OFFSET_DEFAULT,
63  };
64  }
65 
66 protected:
67  ToolSettings *get_settings() override
68  {
69  return &settings;
70  }
71 
72 private:
73  Settings settings;
74 
75  PNS::ROUTER *router = nullptr;
76  PNS::PNS_HORIZON_IFACE *iface = nullptr;
77  PNS::MEANDER_PLACER_BASE *meander_placer = nullptr;
78  class CanvasGL *canvas = nullptr;
79  ToolWrapper *wrapper = nullptr;
80 
81  enum class State { START, ROUTING };
82  State state = State::START;
83 
84  Board *board = nullptr;
85  const class BoardRules *rules = nullptr;
86  bool shove = false;
87 
88  void update_tip();
89  class Track *get_track(const std::set<SelectableRef> &sel);
90  class Via *get_via(const std::set<SelectableRef> &sel);
91  bool is_tune() const;
92 };
93 } // namespace horizon
horizon::ToolSettings
Definition: tool.hpp:84
horizon::ToolWrapper
Definition: tool_route_track_interactive.cpp:22
horizon::ToolRouteTrackInteractive::update
ToolResponse update(const ToolArgs &args) override
Gets called whenever the user generated some sort of input.
Definition: tool_route_track_interactive.cpp:617
horizon::ToolRouteTrackInteractive::can_begin
bool can_begin() override
Definition: tool_route_track_interactive.cpp:83
horizon::IDocument
Definition: idocument.hpp:5
PNS::ROUTER
Definition: pns_router.h:113
horizon::ToolRouteTrackInteractive::begin
ToolResponse begin(const ToolArgs &args) override
Gets called right after the constructor has finished.
Definition: tool_route_track_interactive.cpp:140
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
Definition: tool_route_track_interactive.cpp:119
horizon::ToolRouteTrackInteractive
Definition: tool_route_track_interactive.hpp:17
nlohmann::basic_json
a class to store JSON values
Definition: json.hpp:166
horizon::ToolBase
Common interface for all Tools.
Definition: tool.hpp:121
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