mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-15 10:47:50 -06:00
Keep fixed radius of rotate gizmo
This commit is contained in:
parent
1356a9977e
commit
0e9ac1679f
5 changed files with 72 additions and 2 deletions
|
@ -1291,6 +1291,16 @@ void GLCanvas3D::Gizmos::update(const Pointf& mouse_pos)
|
||||||
curr->update(mouse_pos);
|
curr->update(mouse_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLCanvas3D::Gizmos::refresh()
|
||||||
|
{
|
||||||
|
if (!m_enabled)
|
||||||
|
return;
|
||||||
|
|
||||||
|
GLGizmoBase* curr = _get_current();
|
||||||
|
if (curr != nullptr)
|
||||||
|
curr->refresh();
|
||||||
|
}
|
||||||
|
|
||||||
GLCanvas3D::Gizmos::EType GLCanvas3D::Gizmos::get_current_type() const
|
GLCanvas3D::Gizmos::EType GLCanvas3D::Gizmos::get_current_type() const
|
||||||
{
|
{
|
||||||
return m_current;
|
return m_current;
|
||||||
|
@ -1321,6 +1331,9 @@ void GLCanvas3D::Gizmos::start_dragging()
|
||||||
void GLCanvas3D::Gizmos::stop_dragging()
|
void GLCanvas3D::Gizmos::stop_dragging()
|
||||||
{
|
{
|
||||||
m_dragging = false;
|
m_dragging = false;
|
||||||
|
GLGizmoBase* curr = _get_current();
|
||||||
|
if (curr != nullptr)
|
||||||
|
curr->stop_dragging();
|
||||||
}
|
}
|
||||||
|
|
||||||
float GLCanvas3D::Gizmos::get_scale() const
|
float GLCanvas3D::Gizmos::get_scale() const
|
||||||
|
@ -2853,6 +2866,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
}
|
}
|
||||||
|
|
||||||
update_gizmos_data();
|
update_gizmos_data();
|
||||||
|
m_gizmos.refresh();
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2942,6 +2956,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
}
|
}
|
||||||
|
|
||||||
m_mouse.drag.start_position_3D = cur_pos;
|
m_mouse.drag.start_position_3D = cur_pos;
|
||||||
|
m_gizmos.refresh();
|
||||||
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
|
@ -3002,6 +3017,9 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
m_on_update_geometry_info_callback.call(size.x, size.y, size.z, m_gizmos.get_scale());
|
m_on_update_geometry_info_callback.call(size.x, size.y, size.z, m_gizmos.get_scale());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (volumes.size() > 1)
|
||||||
|
m_gizmos.refresh();
|
||||||
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
else if (evt.Dragging() && !gizmos_overlay_contains_mouse)
|
else if (evt.Dragging() && !gizmos_overlay_contains_mouse)
|
||||||
|
|
|
@ -365,6 +365,7 @@ public:
|
||||||
bool overlay_contains_mouse(const GLCanvas3D& canvas, const Pointf& mouse_pos) const;
|
bool overlay_contains_mouse(const GLCanvas3D& canvas, const Pointf& mouse_pos) const;
|
||||||
bool grabber_contains_mouse() const;
|
bool grabber_contains_mouse() const;
|
||||||
void update(const Pointf& mouse_pos);
|
void update(const Pointf& mouse_pos);
|
||||||
|
void refresh();
|
||||||
|
|
||||||
EType get_current_type() const;
|
EType get_current_type() const;
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,8 @@ std::string GLCanvas3DManager::GLInfo::to_string(bool format_as_html, bool exten
|
||||||
for (GLint i = 0; i < num_extensions; ++i)
|
for (GLint i = 0; i < num_extensions; ++i)
|
||||||
{
|
{
|
||||||
const char* e = (const char*)::glGetStringi(GL_EXTENSIONS, i);
|
const char* e = (const char*)::glGetStringi(GL_EXTENSIONS, i);
|
||||||
extensions_list.push_back(e);
|
if (e != nullptr)
|
||||||
|
extensions_list.push_back(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(extensions_list.begin(), extensions_list.end());
|
std::sort(extensions_list.begin(), extensions_list.end());
|
||||||
|
|
|
@ -90,6 +90,7 @@ GLGizmoBase::EState GLGizmoBase::get_state() const
|
||||||
void GLGizmoBase::set_state(GLGizmoBase::EState state)
|
void GLGizmoBase::set_state(GLGizmoBase::EState state)
|
||||||
{
|
{
|
||||||
m_state = state;
|
m_state = state;
|
||||||
|
on_set_state();
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int GLGizmoBase::get_texture_id() const
|
unsigned int GLGizmoBase::get_texture_id() const
|
||||||
|
@ -118,12 +119,22 @@ void GLGizmoBase::start_dragging()
|
||||||
on_start_dragging();
|
on_start_dragging();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoBase::stop_dragging()
|
||||||
|
{
|
||||||
|
on_stop_dragging();
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoBase::update(const Pointf& mouse_pos)
|
void GLGizmoBase::update(const Pointf& mouse_pos)
|
||||||
{
|
{
|
||||||
if (m_hover_id != -1)
|
if (m_hover_id != -1)
|
||||||
on_update(mouse_pos);
|
on_update(mouse_pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoBase::refresh()
|
||||||
|
{
|
||||||
|
on_refresh();
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoBase::render(const BoundingBoxf3& box) const
|
void GLGizmoBase::render(const BoundingBoxf3& box) const
|
||||||
{
|
{
|
||||||
on_render(box);
|
on_render(box);
|
||||||
|
@ -134,8 +145,24 @@ void GLGizmoBase::render_for_picking(const BoundingBoxf3& box) const
|
||||||
on_render_for_picking(box);
|
on_render_for_picking(box);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoBase::on_set_state()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoBase::on_start_dragging()
|
void GLGizmoBase::on_start_dragging()
|
||||||
{
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLGizmoBase::on_stop_dragging()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLGizmoBase::on_refresh()
|
||||||
|
{
|
||||||
|
// do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoBase::render_grabbers() const
|
void GLGizmoBase::render_grabbers() const
|
||||||
|
@ -162,6 +189,7 @@ GLGizmoRotate::GLGizmoRotate()
|
||||||
, m_angle_z(0.0f)
|
, m_angle_z(0.0f)
|
||||||
, m_center(Pointf(0.0, 0.0))
|
, m_center(Pointf(0.0, 0.0))
|
||||||
, m_radius(0.0f)
|
, m_radius(0.0f)
|
||||||
|
, m_keep_radius(false)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -199,6 +227,11 @@ bool GLGizmoRotate::on_init()
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoRotate::on_set_state()
|
||||||
|
{
|
||||||
|
m_keep_radius = (m_state == On) ? false : true;
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoRotate::on_update(const Pointf& mouse_pos)
|
void GLGizmoRotate::on_update(const Pointf& mouse_pos)
|
||||||
{
|
{
|
||||||
Vectorf orig_dir(1.0, 0.0);
|
Vectorf orig_dir(1.0, 0.0);
|
||||||
|
@ -220,13 +253,22 @@ void GLGizmoRotate::on_update(const Pointf& mouse_pos)
|
||||||
m_angle_z = (float)theta;
|
m_angle_z = (float)theta;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLGizmoRotate::on_refresh()
|
||||||
|
{
|
||||||
|
m_keep_radius = false;
|
||||||
|
}
|
||||||
|
|
||||||
void GLGizmoRotate::on_render(const BoundingBoxf3& box) const
|
void GLGizmoRotate::on_render(const BoundingBoxf3& box) const
|
||||||
{
|
{
|
||||||
::glDisable(GL_DEPTH_TEST);
|
::glDisable(GL_DEPTH_TEST);
|
||||||
|
|
||||||
const Pointf3& size = box.size();
|
const Pointf3& size = box.size();
|
||||||
m_center = box.center();
|
m_center = box.center();
|
||||||
m_radius = Offset + ::sqrt(sqr(0.5f * size.x) + sqr(0.5f * size.y));
|
if (!m_keep_radius)
|
||||||
|
{
|
||||||
|
m_radius = Offset + ::sqrt(sqr(0.5f * size.x) + sqr(0.5f * size.y));
|
||||||
|
m_keep_radius = true;
|
||||||
|
}
|
||||||
|
|
||||||
::glLineWidth(2.0f);
|
::glLineWidth(2.0f);
|
||||||
::glColor3fv(BaseColor);
|
::glColor3fv(BaseColor);
|
||||||
|
|
|
@ -64,15 +64,20 @@ public:
|
||||||
void set_hover_id(int id);
|
void set_hover_id(int id);
|
||||||
|
|
||||||
void start_dragging();
|
void start_dragging();
|
||||||
|
void stop_dragging();
|
||||||
void update(const Pointf& mouse_pos);
|
void update(const Pointf& mouse_pos);
|
||||||
|
void refresh();
|
||||||
|
|
||||||
void render(const BoundingBoxf3& box) const;
|
void render(const BoundingBoxf3& box) const;
|
||||||
void render_for_picking(const BoundingBoxf3& box) const;
|
void render_for_picking(const BoundingBoxf3& box) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool on_init() = 0;
|
virtual bool on_init() = 0;
|
||||||
|
virtual void on_set_state();
|
||||||
virtual void on_start_dragging();
|
virtual void on_start_dragging();
|
||||||
|
virtual void on_stop_dragging();
|
||||||
virtual void on_update(const Pointf& mouse_pos) = 0;
|
virtual void on_update(const Pointf& mouse_pos) = 0;
|
||||||
|
virtual void on_refresh();
|
||||||
virtual void on_render(const BoundingBoxf3& box) const = 0;
|
virtual void on_render(const BoundingBoxf3& box) const = 0;
|
||||||
virtual void on_render_for_picking(const BoundingBoxf3& box) const = 0;
|
virtual void on_render_for_picking(const BoundingBoxf3& box) const = 0;
|
||||||
|
|
||||||
|
@ -96,6 +101,7 @@ class GLGizmoRotate : public GLGizmoBase
|
||||||
|
|
||||||
mutable Pointf m_center;
|
mutable Pointf m_center;
|
||||||
mutable float m_radius;
|
mutable float m_radius;
|
||||||
|
mutable bool m_keep_radius;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
GLGizmoRotate();
|
GLGizmoRotate();
|
||||||
|
@ -105,7 +111,9 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool on_init();
|
virtual bool on_init();
|
||||||
|
virtual void on_set_state();
|
||||||
virtual void on_update(const Pointf& mouse_pos);
|
virtual void on_update(const Pointf& mouse_pos);
|
||||||
|
virtual void on_refresh();
|
||||||
virtual void on_render(const BoundingBoxf3& box) const;
|
virtual void on_render(const BoundingBoxf3& box) const;
|
||||||
virtual void on_render_for_picking(const BoundingBoxf3& box) const;
|
virtual void on_render_for_picking(const BoundingBoxf3& box) const;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue