From f65118210124d460d9cb6478a84976bb98160595 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Fri, 26 Oct 2018 09:50:28 +0200 Subject: [PATCH] Rendering of camera target (for debug) and modified camera target behavior --- src/libslic3r/Technologies.hpp | 11 ++++++ src/slic3r/GUI/GLCanvas3D.cpp | 63 ++++++++++++++++++++++++++++++++-- src/slic3r/GUI/GLCanvas3D.hpp | 8 +++++ src/slic3r/GUI/Plater.cpp | 4 +++ 4 files changed, 84 insertions(+), 2 deletions(-) diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index d80d6df0d..ec775742b 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -1,7 +1,16 @@ #ifndef _technologies_h_ #define _technologies_h_ +//============== +// debug techs +//============== + +// Shows camera target in the 3D scene +#define ENABLE_SHOW_CAMERA_TARGET 1 + +//============== // 1.42.0 techs +//============== #define ENABLE_1_42_0 1 // Add double click on gizmo grabbers to reset transformation components to their default value @@ -12,6 +21,8 @@ #define ENABLE_EXTENDED_SELECTION (1 && ENABLE_1_42_0) // Add mirror components along the three axes in ModelInstance and GLVolume #define ENABLE_MIRROR (1 && ENABLE_1_42_0) +// Modified camera target behavior +#define ENABLE_MODIFIED_CAMERA_TARGET (1 && ENABLE_1_42_0) #endif // _technologies_h_ diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index a0c79f312..020012286 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3209,6 +3209,16 @@ void GLCanvas3D::zoom_to_volumes() m_apply_zoom_to_volumes_filter = false; } +#if ENABLE_MODIFIED_CAMERA_TARGET +#if ENABLE_EXTENDED_SELECTION +void GLCanvas3D::zoom_to_selection() +{ + if (!m_selection.is_empty()) + _zoom_to_bounding_box(m_selection.get_bounding_box()); +} +#endif // ENABLE_EXTENDED_SELECTION +#endif // ENABLE_MODIFIED_CAMERA_TARGET + void GLCanvas3D::select_view(const std::string& direction) { const float* dir_vec = nullptr; @@ -3365,6 +3375,9 @@ void GLCanvas3D::render() _render_current_gizmo(); _render_cutting_plane(); +#if ENABLE_SHOW_CAMERA_TARGET + _render_camera_target(); +#endif // ENABLE_SHOW_CAMERA_TARGET // draw overlays _render_gizmos_overlay(); @@ -3744,9 +3757,29 @@ void GLCanvas3D::on_char(wxKeyEvent& evt) case 83: case 115: { post_event(SimpleEvent(EVT_GLCANVAS_SCALE_UNIFORMLY)); break; } #endif // !ENABLE_EXTENDED_SELECTION +#if ENABLE_MODIFIED_CAMERA_TARGET +#if ENABLE_EXTENDED_SELECTION + // key Z/z + case 90: + case 122: + { + if (m_selection.is_empty()) + zoom_to_volumes(); + else + zoom_to_selection(); + + break; + } +#else // key Z/z case 90: case 122: { zoom_to_volumes(); break; } +#endif // ENABLE_EXTENDED_SELECTION +#else + // key Z/z + case 90: + case 122: { zoom_to_volumes(); break; } +#endif // ENABLE_MODIFIED_CAMERA_TARGET default: { evt.Skip(); @@ -4931,8 +4964,7 @@ void GLCanvas3D::_camera_tranform() const ::glRotatef(-m_camera.get_theta(), 1.0f, 0.0f, 0.0f); // pitch ::glRotatef(m_camera.phi, 0.0f, 0.0f, 1.0f); // yaw - Vec3d neg_target = - m_camera.target; - ::glTranslated(neg_target(0), neg_target(1), neg_target(2)); + ::glTranslated(-m_camera.target(0), -m_camera.target(1), -m_camera.target(2)); } void GLCanvas3D::_picking_pass() const @@ -5251,6 +5283,33 @@ void GLCanvas3D::_render_toolbar() const m_toolbar.render(); } +#if ENABLE_SHOW_CAMERA_TARGET +void GLCanvas3D::_render_camera_target() const +{ + double half_length = 5.0; + + ::glDisable(GL_DEPTH_TEST); + + ::glLineWidth(2.0f); + ::glBegin(GL_LINES); + // draw line for x axis + ::glColor3f(1.0f, 0.0f, 0.0f); + ::glVertex3d(m_camera.target(0) - half_length, m_camera.target(1), m_camera.target(2)); + ::glVertex3d(m_camera.target(0) + half_length, m_camera.target(1), m_camera.target(2)); + // draw line for y axis + ::glColor3f(0.0f, 1.0f, 0.0f); + ::glVertex3d(m_camera.target(0), m_camera.target(1) - half_length, m_camera.target(2)); + ::glVertex3d(m_camera.target(0), m_camera.target(1) + half_length, m_camera.target(2)); + ::glEnd(); + + ::glBegin(GL_LINES); + ::glColor3f(0.0f, 0.0f, 1.0f); + ::glVertex3d(m_camera.target(0), m_camera.target(1), m_camera.target(2) - half_length); + ::glVertex3d(m_camera.target(0), m_camera.target(1), m_camera.target(2) + half_length); + ::glEnd(); +} +#endif // ENABLE_SHOW_CAMERA_TARGET + #if ENABLE_EXTENDED_SELECTION void GLCanvas3D::_update_volumes_hover_state() const { diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index c0f531919..693c7d62d 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -823,6 +823,11 @@ public: void zoom_to_bed(); void zoom_to_volumes(); +#if ENABLE_MODIFIED_CAMERA_TARGET +#if ENABLE_EXTENDED_SELECTION + void zoom_to_selection(); +#endif // ENABLE_EXTENDED_SELECTION +#endif // ENABLE_MODIFIED_CAMERA_TARGET void select_view(const std::string& direction); void set_viewport_from_scene(const GLCanvas3D& other); @@ -909,6 +914,9 @@ private: void _render_current_gizmo() const; void _render_gizmos_overlay() const; void _render_toolbar() const; +#if ENABLE_SHOW_CAMERA_TARGET + void _render_camera_target() const; +#endif // ENABLE_SHOW_CAMERA_TARGET #if ENABLE_EXTENDED_SELECTION void _update_volumes_hover_state() const; diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 95d052001..59ebe10b2 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -1259,7 +1259,9 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs &mode } update(); +#if !ENABLE_MODIFIED_CAMERA_TARGET _3DScene::zoom_to_volumes(canvas3D); +#endif // !ENABLE_MODIFIED_CAMERA_TARGET object_list_changed(); this->schedule_background_process(); @@ -2561,7 +2563,9 @@ void Plater::changed_object_settings(int obj_idx) _3DScene::set_objects_selections(p->canvas3D, selections); #endif // !ENABLE_EXTENDED_SELECTION _3DScene::reload_scene(p->canvas3D, false); +#if !ENABLE_MODIFIED_CAMERA_TARGET _3DScene::zoom_to_volumes(p->canvas3D); +#endif // !ENABLE_MODIFIED_CAMERA_TARGET } else { this->p->schedule_background_process();