From 0a7dae6df6b3a0876f596574e7d20469de186819 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 13 Jun 2022 14:54:52 +0200 Subject: [PATCH] Tech ENABLE_RAYCAST_PICKING - Raytraced picking of Cut Gizmo --- src/slic3r/GUI/Gizmos/GLGizmoCut.cpp | 17 ++++++++++++++--- src/slic3r/GUI/Gizmos/GLGizmoCut.hpp | 7 +++++-- src/slic3r/GUI/Gizmos/GLGizmoScale.cpp | 4 +--- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index 9eebd583e9..96259792b3 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -269,13 +269,24 @@ void GLGizmoCut::on_render() #endif // !ENABLE_GL_CORE_PROFILE } -#if !ENABLE_RAYCAST_PICKING - void GLGizmoCut::on_render_for_picking() +#if ENABLE_RAYCAST_PICKING +void GLGizmoCut::on_register_raycasters_for_picking() +{ + // the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account + m_parent.set_raycaster_gizmos_on_top(true); +} + +void GLGizmoCut::on_unregister_raycasters_for_picking() +{ + m_parent.set_raycaster_gizmos_on_top(false); +} +#else +void GLGizmoCut::on_render_for_picking() { glsafe(::glDisable(GL_DEPTH_TEST)); render_grabbers_for_picking(m_parent.get_selection().get_bounding_box()); } -#endif // !ENABLE_RAYCAST_PICKING +#endif // ENABLE_RAYCAST_PICKING void GLGizmoCut::on_render_input_window(float x, float y, float bottom_limit) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp index 6283d9e310..ee3bc78e9a 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.hpp @@ -68,9 +68,12 @@ protected: virtual void on_start_dragging() override; virtual void on_dragging(const UpdateData& data) override; virtual void on_render() override; -#if !ENABLE_RAYCAST_PICKING +#if ENABLE_RAYCAST_PICKING + virtual void on_register_raycasters_for_picking() override; + virtual void on_unregister_raycasters_for_picking() override; +#else virtual void on_render_for_picking() override; -#endif // !ENABLE_RAYCAST_PICKING +#endif // ENABLE_RAYCAST_PICKING virtual void on_render_input_window(float x, float y, float bottom_limit) override; private: diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 775aa4ceda..0f68cb7619 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -654,9 +654,7 @@ void GLGizmoScale3D::on_unregister_raycasters_for_picking() { m_parent.set_raycaster_gizmos_on_top(false); } -#endif // ENABLE_RAYCAST_PICKING - -#if !ENABLE_RAYCAST_PICKING +#else void GLGizmoScale3D::on_render_for_picking() { glsafe(::glDisable(GL_DEPTH_TEST));