#ifndef slic3r_GLGizmoMeasure_hpp_ #define slic3r_GLGizmoMeasure_hpp_ #include "GLGizmoBase.hpp" #if ENABLE_LEGACY_OPENGL_REMOVAL #include "slic3r/GUI/GLModel.hpp" #else #include "slic3r/GUI/3DScene.hpp" #endif // ENABLE_LEGACY_OPENGL_REMOVAL #include #define ENABLE_DEBUG_DIALOG 0 namespace Slic3r { class ModelVolume; enum class ModelVolumeType : int; namespace Measure { class Measuring; } namespace GUI { class GLGizmoMeasure : public GLGizmoBase { // This gizmo does not use grabbers. The m_hover_id relates to polygon managed by the class itself. private: std::unique_ptr m_measuring; GLModel m_sphere; GLModel m_cylinder; GLModel m_circle; // This holds information to decide whether recalculation is necessary: std::vector m_volumes_matrices; std::vector m_volumes_types; Vec3d m_first_instance_scale{ Vec3d::Ones() }; Vec3d m_first_instance_mirror{ Vec3d::Ones() }; bool m_mouse_left_down = false; // for detection left_up of this gizmo bool m_planes_valid = false; const ModelObject* m_old_model_object = nullptr; const ModelVolume* m_old_model_volume = nullptr; std::vector instances_matrices; int m_mouse_pos_x; int m_mouse_pos_y; #if ENABLE_DEBUG_DIALOG bool m_show_all = false; bool m_show_planes = false; #endif // ENABLE_DEBUG_DIALOG std::vector> m_plane_models; void update_if_needed(); public: GLGizmoMeasure(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); /// /// Apply rotation on select plane /// /// Keep information about mouse click /// Return True when use the information otherwise False. bool on_mouse(const wxMouseEvent &mouse_event) override; void data_changed() override; protected: bool on_init() override; std::string on_get_name() const override; bool on_is_activable() const override; void on_render() override; void on_set_state() override; CommonGizmosDataID on_get_requirements() const override; }; } // namespace GUI } // namespace Slic3r #endif // slic3r_GLGizmoMeasure_hpp_