Horizon
tool_rotate_arbitrary.hpp
1 #pragma once
2 #include "core/tool.hpp"
3 #include "canvas/selectables.hpp"
4 #include "util/placement.hpp"
5 #include "tool_helper_collect_nets.hpp"
6 
7 namespace horizon {
8 
9 class ToolRotateArbitrary : public virtual ToolBase, public ToolHelperCollectNets {
10 public:
11  using ToolBase::ToolBase;
12  ToolResponse begin(const ToolArgs &args) override;
13  ToolResponse update(const ToolArgs &args) override;
14  bool can_begin() override;
15  bool is_specific() override
16  {
17  return true;
18  }
20  std::set<InToolActionID> get_actions() const override
21  {
22  using I = InToolActionID;
23  return {
24  I::LMB, I::CANCEL, I::RMB, I::ENTER_DATUM, I::TOGGLE_ANGLE_SNAP,
25  };
26  }
27 
28 private:
29  Coordi origin;
30  Coordi ref;
31  int iangle = 0;
32  bool snap = true;
33  double scale = 1;
34  void expand_selection();
35  void update_tip();
36  void save_placements();
37  void apply_placements_rotation(int angle);
38  void apply_placements_scale(double sc);
39  enum class State { ORIGIN, ROTATE, REF, SCALE };
40  State state = State::ORIGIN;
41  std::map<SelectableRef, Placement> placements;
42  std::map<UUID, double> decal_scales;
43  class CanvasAnnotation *annotation = nullptr;
44  std::set<UUID> nets;
45  void update_airwires(bool fast);
46 };
47 } // namespace horizon
This is what a Tool receives when the user did something.
Definition: tool.hpp:23
Common interface for all Tools.
Definition: tool.hpp:121
Definition: tool_helper_collect_nets.hpp:7
To signal back to the core what the Tool did, a Tool returns a ToolResponse.
Definition: tool.hpp:42
Definition: tool_rotate_arbitrary.hpp:9
bool is_specific() override
Definition: tool_rotate_arbitrary.hpp:15
ToolResponse begin(const ToolArgs &args) override
Gets called right after the constructor has finished.
Definition: tool_rotate_arbitrary.cpp:96
bool can_begin() override
Definition: tool_rotate_arbitrary.cpp:121
ToolResponse update(const ToolArgs &args) override
Gets called whenever the user generated some sort of input.
Definition: tool_rotate_arbitrary.cpp:292