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  bool fix_all_segments = false;
35  enum class Mode { WALKAROUND, PUSH, BEND, STRAIGHT };
36  Mode mode = Mode::WALKAROUND;
37  static const std::map<Mode, std::string> mode_names;
38 
39  enum class CornerMode { MITERED_45, ROUNDED_45, MITERED_90, ROUNDED_90 };
40  CornerMode corner_mode = CornerMode::MITERED_45;
41  static const std::map<CornerMode, std::string> corner_mode_names;
42 
43  bool drc = true;
44  };
45 
46  ToolSettings *get_settings() override
47  {
48  return &settings;
49  }
50 
51  void apply_settings() override;
52 
53  std::set<InToolActionID> get_actions() const override
54  {
55  using I = InToolActionID;
56  return {
57  I::LMB,
58  I::LMB_DOUBLE,
59  I::CANCEL,
60  I::RMB,
61  I::LENGTH_TUNING_LENGTH,
62  I::LENGTH_TUNING_AMPLITUDE_INC,
63  I::LENGTH_TUNING_AMPLITUDE_DEC,
64  I::LENGTH_TUNING_SPACING_INC,
65  I::LENGTH_TUNING_SPACING_DEC,
66  I::POSTURE,
67  I::TOGGLE_VIA,
68  I::ROUTER_SETTINGS,
69  I::ROUTER_MODE,
70  I::ENTER_WIDTH,
71  I::TRACK_WIDTH_DEFAULT,
72  I::CLEARANCE_OFFSET,
73  I::CLEARANCE_OFFSET_DEFAULT,
74  I::DELETE_LAST_SEGMENT,
75  I::TOGGLE_CORNER_STYLE,
76  };
77  }
78 
79 private:
80  Settings settings;
81 
82  PNS::ROUTER *router = nullptr;
83  PNS::PNS_HORIZON_IFACE *iface = nullptr;
84  PNS::MEANDER_PLACER_BASE *meander_placer = nullptr;
85  class CanvasGL *canvas = nullptr;
86  ToolWrapper *wrapper = nullptr;
87 
88  enum class State { START, ROUTING };
89  State state = State::START;
90 
91  Board *board = nullptr;
92  const class BoardRules *rules = nullptr;
93 
94  void update_tip();
95  class Track *get_track(const std::set<SelectableRef> &sel);
96  class Via *get_via(const std::set<SelectableRef> &sel);
97  bool is_tune() const;
98  bool settings_window_visible = false;
99  void update_settings_window();
100 };
101 } // namespace horizon
Base class for Single trace & Differential pair meandering tools, as both of them share a lot of code...
Definition: pns_meander_placer_base.h:47
Definition: pns_horizon_iface.hpp:66
Definition: pns_router.h:116
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:781
bool can_begin() override
Definition: tool_route_track_interactive.cpp:134
ToolResponse begin(const ToolArgs &args) override
Gets called right after the constructor has finished.
Definition: tool_route_track_interactive.cpp:191
bool is_specific() override
Definition: tool_route_track_interactive.cpp:170
Definition: tool_pub.hpp:82
Definition: tool_route_track_interactive.cpp:25
a class to store JSON values
Definition: json.hpp:177