Horizon
Loading...
Searching...
No Matches
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::SELECT_VIA_DEFINITION,
69 I::ROUTER_SETTINGS,
70 I::ROUTER_MODE,
71 I::ENTER_WIDTH,
72 I::TRACK_WIDTH_DEFAULT,
73 I::CLEARANCE_OFFSET,
74 I::CLEARANCE_OFFSET_DEFAULT,
75 I::DELETE_LAST_SEGMENT,
76 I::TOGGLE_CORNER_STYLE,
77 };
78 }
79
80private:
81 Settings settings;
82
83 PNS::ROUTER *router = nullptr;
84 PNS::PNS_HORIZON_IFACE *iface = nullptr;
85 PNS::MEANDER_PLACER_BASE *meander_placer = nullptr;
86 class CanvasGL *canvas = nullptr;
87 ToolWrapper *wrapper = nullptr;
88
89 enum class State { START, ROUTING };
90 State state = State::START;
91
92 Board *board = nullptr;
93 const class BoardRules *rules = nullptr;
94
95 void update_tip();
96 class Track *get_track(const std::set<SelectableRef> &sel);
97 class Via *get_via(const std::set<SelectableRef> &sel);
98 bool is_tune() const;
99 bool settings_window_visible = false;
100 void update_settings_window();
101 void update_via_settings();
102
103 UUID via_definition_uuid;
104};
105} // 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:774
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