Horizon
tool_route_track_interactive.hpp
1#pragma once
2#include "core/tool.hpp"
3#include <deque>
4#include <memory>
5#include <set>
6
7namespace PNS {
8class ROUTER;
9class PNS_HORIZON_IFACE;
10class ITEM;
11class MEANDER_PLACER_BASE;
12} // namespace PNS
13
14namespace horizon {
15class ToolWrapper;
16class Board;
18 friend ToolWrapper;
19
20public:
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
71private:
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