Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/prusa3d/PrusaSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/slic3r/GUI/Gizmos/GLGizmoBase.hpp')
-rw-r--r--src/slic3r/GUI/Gizmos/GLGizmoBase.hpp301
1 files changed, 153 insertions, 148 deletions
diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp
index f61654183..95763f004 100644
--- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp
+++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp
@@ -89,151 +89,156 @@ protected:
static GLModel s_cone;
#else
GLModel m_cube;
-#endif // ENABLE_GIZMO_GRABBER_REFACTOR
- };
-
-public:
- enum EState
- {
- Off,
- On,
- Num_States
- };
-
- struct UpdateData
- {
- const Linef3& mouse_ray;
- const Point& mouse_pos;
-
- UpdateData(const Linef3& mouse_ray, const Point& mouse_pos)
- : mouse_ray(mouse_ray), mouse_pos(mouse_pos)
- {}
- };
-
-protected:
- GLCanvas3D& m_parent;
- int m_group_id; // TODO: remove only for rotate
- EState m_state;
- int m_shortcut_key;
- std::string m_icon_filename;
- unsigned int m_sprite_id;
- int m_hover_id;
- bool m_dragging;
- mutable std::vector<Grabber> m_grabbers;
- ImGuiWrapper* m_imgui;
- bool m_first_input_window_render;
- CommonGizmosDataPool* m_c;
-public:
- GLGizmoBase(GLCanvas3D& parent,
- const std::string& icon_filename,
- unsigned int sprite_id);
- virtual ~GLGizmoBase() = default;
-
- bool init() { return on_init(); }
-
- void load(cereal::BinaryInputArchive& ar) { m_state = On; on_load(ar); }
- void save(cereal::BinaryOutputArchive& ar) const { on_save(ar); }
-
- std::string get_name(bool include_shortcut = true) const;
-
- EState get_state() const { return m_state; }
- void set_state(EState state) { m_state = state; on_set_state(); }
-
- int get_shortcut_key() const { return m_shortcut_key; }
-
- const std::string& get_icon_filename() const { return m_icon_filename; }
-
- bool is_activable() const { return on_is_activable(); }
- bool is_selectable() const { return on_is_selectable(); }
- CommonGizmosDataID get_requirements() const { return on_get_requirements(); }
- virtual bool wants_enter_leave_snapshots() const { return false; }
- virtual std::string get_gizmo_entering_text() const { assert(false); return ""; }
- virtual std::string get_gizmo_leaving_text() const { assert(false); return ""; }
- virtual std::string get_action_snapshot_name() { return _u8L("Gizmo action"); }
- void set_common_data_pool(CommonGizmosDataPool* ptr) { m_c = ptr; }
-
- unsigned int get_sprite_id() const { return m_sprite_id; }
-
- int get_hover_id() const { return m_hover_id; }
- void set_hover_id(int id);
-
- bool is_dragging() const { return m_dragging; }
-
- // returns True when Gizmo changed its state
- bool update_items_state();
-
- void render() { on_render(); }
- void render_for_picking() { on_render_for_picking(); }
- void render_input_window(float x, float y, float bottom_limit);
-
- /// <summary>
- /// Mouse tooltip text
- /// </summary>
- /// <returns>Text to be visible in mouse tooltip</returns>
- virtual std::string get_tooltip() const { return ""; }
-
- /// <summary>
- /// Is called when data (Selection) is changed
- /// </summary>
- virtual void data_changed(){};
-
- /// <summary>
- /// Implement when want to process mouse events in gizmo
- /// Click, Right click, move, drag, ...
- /// </summary>
- /// <param name="mouse_event">Keep information about mouse click</param>
- /// <returns>Return True when use the information and don't want to propagate it otherwise False.</returns>
- virtual bool on_mouse(const wxMouseEvent &mouse_event) { return false; }
-protected:
- virtual bool on_init() = 0;
- virtual void on_load(cereal::BinaryInputArchive& ar) {}
- virtual void on_save(cereal::BinaryOutputArchive& ar) const {}
- virtual std::string on_get_name() const = 0;
- virtual void on_set_state() {}
- virtual void on_set_hover_id() {}
- virtual bool on_is_activable() const { return true; }
- virtual bool on_is_selectable() const { return true; }
- virtual CommonGizmosDataID on_get_requirements() const { return CommonGizmosDataID(0); }
- virtual void on_enable_grabber(unsigned int id) {}
- virtual void on_disable_grabber(unsigned int id) {}
-
- // called inside use_grabbers
- virtual void on_start_dragging() {}
- virtual void on_stop_dragging() {}
- virtual void on_dragging(const UpdateData& data) {}
-
- virtual void on_render() = 0;
- virtual void on_render_for_picking() = 0;
- virtual void on_render_input_window(float x, float y, float bottom_limit) {}
-
- // Returns the picking color for the given id, based on the BASE_ID constant
- // No check is made for clashing with other picking color (i.e. GLVolumes)
- ColorRGBA picking_color_component(unsigned int id) const;
-
- void render_grabbers(const BoundingBoxf3& box) const;
- void render_grabbers(float size) const;
- void render_grabbers_for_picking(const BoundingBoxf3& box) const;
-
- std::string format(float value, unsigned int decimals) const;
-
- // Mark gizmo as dirty to Re-Render when idle()
- void set_dirty();
-
- /// <summary>
- /// function which
- /// Set up m_dragging and call functions
- /// on_start_dragging / on_dragging / on_stop_dragging
- /// </summary>
- /// <param name="mouse_event">Keep information about mouse click</param>
- /// <returns>same as on_mouse</returns>
- bool use_grabbers(const wxMouseEvent &mouse_event);
-private:
- // Flag for dirty visible state of Gizmo
- // When True then need new rendering
- bool m_dirty;
-};
-
-} // namespace GUI
-} // namespace Slic3r
-
-#endif // slic3r_GLGizmoBase_hpp_
+#endif // ENABLE_GIZMO_GRABBER_REFACTOR
+ };
+
+public:
+ enum EState
+ {
+ Off,
+ On,
+ Num_States
+ };
+
+ struct UpdateData
+ {
+ const Linef3& mouse_ray;
+ const Point& mouse_pos;
+
+ UpdateData(const Linef3& mouse_ray, const Point& mouse_pos)
+ : mouse_ray(mouse_ray), mouse_pos(mouse_pos)
+ {}
+ };
+
+protected:
+ GLCanvas3D& m_parent;
+ int m_group_id; // TODO: remove only for rotate
+ EState m_state;
+ int m_shortcut_key;
+ std::string m_icon_filename;
+ unsigned int m_sprite_id;
+ int m_hover_id;
+ bool m_dragging;
+ mutable std::vector<Grabber> m_grabbers;
+ ImGuiWrapper* m_imgui;
+ bool m_first_input_window_render;
+ CommonGizmosDataPool* m_c;
+public:
+ GLGizmoBase(GLCanvas3D& parent,
+ const std::string& icon_filename,
+ unsigned int sprite_id);
+ virtual ~GLGizmoBase() = default;
+
+ bool init() { return on_init(); }
+
+ void load(cereal::BinaryInputArchive& ar) { m_state = On; on_load(ar); }
+ void save(cereal::BinaryOutputArchive& ar) const { on_save(ar); }
+
+ std::string get_name(bool include_shortcut = true) const;
+
+ EState get_state() const { return m_state; }
+ void set_state(EState state) { m_state = state; on_set_state(); }
+
+ int get_shortcut_key() const { return m_shortcut_key; }
+
+ const std::string& get_icon_filename() const { return m_icon_filename; }
+
+ bool is_activable() const { return on_is_activable(); }
+ bool is_selectable() const { return on_is_selectable(); }
+ CommonGizmosDataID get_requirements() const { return on_get_requirements(); }
+ virtual bool wants_enter_leave_snapshots() const { return false; }
+ virtual std::string get_gizmo_entering_text() const { assert(false); return ""; }
+ virtual std::string get_gizmo_leaving_text() const { assert(false); return ""; }
+ virtual std::string get_action_snapshot_name() { return _u8L("Gizmo action"); }
+ void set_common_data_pool(CommonGizmosDataPool* ptr) { m_c = ptr; }
+
+ unsigned int get_sprite_id() const { return m_sprite_id; }
+
+ int get_hover_id() const { return m_hover_id; }
+ void set_hover_id(int id);
+
+ bool is_dragging() const { return m_dragging; }
+
+ // returns True when Gizmo changed its state
+ bool update_items_state();
+
+ void render() { on_render(); }
+ void render_for_picking() { on_render_for_picking(); }
+ void render_input_window(float x, float y, float bottom_limit);
+
+ /// <summary>
+ /// Mouse tooltip text
+ /// </summary>
+ /// <returns>Text to be visible in mouse tooltip</returns>
+ virtual std::string get_tooltip() const { return ""; }
+
+ /// <summary>
+ /// Is called when data (Selection) is changed
+ /// </summary>
+ virtual void data_changed(){};
+
+ /// <summary>
+ /// Implement when want to process mouse events in gizmo
+ /// Click, Right click, move, drag, ...
+ /// </summary>
+ /// <param name="mouse_event">Keep information about mouse click</param>
+ /// <returns>Return True when use the information and don't want to propagate it otherwise False.</returns>
+ virtual bool on_mouse(const wxMouseEvent &mouse_event) { return false; }
+protected:
+ virtual bool on_init() = 0;
+ virtual void on_load(cereal::BinaryInputArchive& ar) {}
+ virtual void on_save(cereal::BinaryOutputArchive& ar) const {}
+ virtual std::string on_get_name() const = 0;
+ virtual void on_set_state() {}
+ virtual void on_set_hover_id() {}
+ virtual bool on_is_activable() const { return true; }
+ virtual bool on_is_selectable() const { return true; }
+ virtual CommonGizmosDataID on_get_requirements() const { return CommonGizmosDataID(0); }
+ virtual void on_enable_grabber(unsigned int id) {}
+ virtual void on_disable_grabber(unsigned int id) {}
+
+ // called inside use_grabbers
+ virtual void on_start_dragging() {}
+ virtual void on_stop_dragging() {}
+ virtual void on_dragging(const UpdateData& data) {}
+
+ virtual void on_render() = 0;
+ virtual void on_render_for_picking() = 0;
+ virtual void on_render_input_window(float x, float y, float bottom_limit) {}
+
+ // Returns the picking color for the given id, based on the BASE_ID constant
+ // No check is made for clashing with other picking color (i.e. GLVolumes)
+ ColorRGBA picking_color_component(unsigned int id) const;
+
+ void render_grabbers(const BoundingBoxf3& box) const;
+ void render_grabbers(float size) const;
+ void render_grabbers_for_picking(const BoundingBoxf3& box) const;
+
+ std::string format(float value, unsigned int decimals) const;
+
+ // Mark gizmo as dirty to Re-Render when idle()
+ void set_dirty();
+
+ /// <summary>
+ /// function which
+ /// Set up m_dragging and call functions
+ /// on_start_dragging / on_dragging / on_stop_dragging
+ /// </summary>
+ /// <param name="mouse_event">Keep information about mouse click</param>
+ /// <returns>same as on_mouse</returns>
+ bool use_grabbers(const wxMouseEvent &mouse_event);
+
+#if ENABLE_WORLD_COORDINATE
+ void do_stop_dragging(bool perform_mouse_cleanup);
+#endif // ENABLE_WORLD_COORDINATE
+
+private:
+ // Flag for dirty visible state of Gizmo
+ // When True then need new rendering
+ bool m_dirty;
+};
+
+} // namespace GUI
+} // namespace Slic3r
+
+#endif // slic3r_GLGizmoBase_hpp_