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 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
79private:
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