From 6f18f8f7845e52699efa3e3f8ac2fcdadd0ffe12 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 5 Dec 2022 10:24:30 +0100 Subject: [PATCH 1/2] Tech ENABLE_RAYCAST_PICKING set as default --- src/libslic3r/Model.hpp | 2 - src/libslic3r/Technologies.hpp | 5 +- src/slic3r/GUI/3DBed.cpp | 56 ------ src/slic3r/GUI/3DBed.hpp | 8 - src/slic3r/GUI/3DScene.cpp | 48 ----- src/slic3r/GUI/3DScene.hpp | 4 - src/slic3r/GUI/Camera.cpp | 46 ----- src/slic3r/GUI/Camera.hpp | 9 - src/slic3r/GUI/GLCanvas3D.cpp | 194 +------------------ src/slic3r/GUI/GLCanvas3D.hpp | 10 - src/slic3r/GUI/GLSelectionRectangle.cpp | 11 -- src/slic3r/GUI/GLSelectionRectangle.hpp | 6 - src/slic3r/GUI/Gizmos/GLGizmoBase.cpp | 119 +----------- src/slic3r/GUI/Gizmos/GLGizmoBase.hpp | 37 ---- src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp | 6 - src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp | 4 - src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp | 78 -------- src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp | 14 -- src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp | 81 +------- src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp | 16 -- src/slic3r/GUI/Gizmos/GLGizmoMove.cpp | 27 --- src/slic3r/GUI/Gizmos/GLGizmoMove.hpp | 4 - src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp | 3 - src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp | 29 --- src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp | 11 -- src/slic3r/GUI/Gizmos/GLGizmoScale.cpp | 24 --- src/slic3r/GUI/Gizmos/GLGizmoScale.hpp | 4 - src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp | 3 - src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp | 120 ++---------- src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp | 15 -- src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp | 4 - src/slic3r/GUI/Gizmos/GLGizmosManager.cpp | 15 -- src/slic3r/GUI/Gizmos/GLGizmosManager.hpp | 3 - src/slic3r/GUI/MeshUtils.cpp | 7 - src/slic3r/GUI/MeshUtils.hpp | 25 --- src/slic3r/GUI/SceneRaycaster.cpp | 4 - src/slic3r/GUI/SceneRaycaster.hpp | 4 - src/slic3r/Utils/RaycastManager.cpp | 4 - tests/libslic3r/test_color.cpp | 16 -- 39 files changed, 30 insertions(+), 1046 deletions(-) diff --git a/src/libslic3r/Model.hpp b/src/libslic3r/Model.hpp index 6fb2bc923..1cd6c3414 100644 --- a/src/libslic3r/Model.hpp +++ b/src/libslic3r/Model.hpp @@ -762,9 +762,7 @@ public: // The triangular model. const TriangleMesh& mesh() const { return *m_mesh.get(); } -#if ENABLE_RAYCAST_PICKING std::shared_ptr mesh_ptr() const { return m_mesh; } -#endif // ENABLE_RAYCAST_PICKING void set_mesh(const TriangleMesh &mesh) { m_mesh = std::make_shared(mesh); } void set_mesh(TriangleMesh &&mesh) { m_mesh = std::make_shared(std::move(mesh)); } void set_mesh(const indexed_triangle_set &mesh) { m_mesh = std::make_shared(mesh); } diff --git a/src/libslic3r/Technologies.hpp b/src/libslic3r/Technologies.hpp index f707b0f21..4e6d2106b 100644 --- a/src/libslic3r/Technologies.hpp +++ b/src/libslic3r/Technologies.hpp @@ -28,6 +28,8 @@ #define DISABLE_GCODEVIEWER_INSTANCED_MODELS 1 // Enable Measure Gizmo debug window #define ENABLE_MEASURE_GIZMO_DEBUG 0 +// Enable scene raycast picking debug window +#define ENABLE_RAYCAST_PICKING_DEBUG 0 // Enable rendering of objects using environment map @@ -61,9 +63,6 @@ #define ENABLE_PROCESS_G2_G3_LINES (1 && ENABLE_2_6_0_ALPHA1) // Enable fix of used filament data exported to gcode file #define ENABLE_USED_FILAMENT_POST_PROCESS (1 && ENABLE_2_6_0_ALPHA1) -// Enable picking using raytracing -#define ENABLE_RAYCAST_PICKING (1 && ENABLE_LEGACY_OPENGL_REMOVAL) -#define ENABLE_RAYCAST_PICKING_DEBUG (0 && ENABLE_RAYCAST_PICKING) #endif // _prusaslicer_technologies_h_ diff --git a/src/slic3r/GUI/3DBed.cpp b/src/slic3r/GUI/3DBed.cpp index 140258402..a7e70bc43 100644 --- a/src/slic3r/GUI/3DBed.cpp +++ b/src/slic3r/GUI/3DBed.cpp @@ -252,10 +252,8 @@ bool Bed3D::set_shape(const Pointfs& bed_shape, const double max_print_height, c m_axes.set_origin({ 0.0, 0.0, static_cast(GROUND_Z) }); m_axes.set_stem_length(0.1f * static_cast(m_build_volume.bounding_volume().max_size())); -#if ENABLE_RAYCAST_PICKING // unregister from picking wxGetApp().plater()->canvas3D()->remove_raycasters_for_picking(SceneRaycaster::EType::Bed); -#endif // ENABLE_RAYCAST_PICKING // Let the calee to update the UI. return true; @@ -309,11 +307,7 @@ void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor, glsafe(::glEnable(GL_DEPTH_TEST)); #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_model.model.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); -#else - m_model.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); -#endif // ENABLE_RAYCAST_PICKING #else m_model.set_color(-1, picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); #endif // ENABLE_LEGACY_OPENGL_REMOVAL @@ -355,11 +349,7 @@ BoundingBoxf3 Bed3D::calc_extended_bounding_box() const out.merge(out.min + Vec3d(-Axes::DefaultTipRadius, -Axes::DefaultTipRadius, out.max.z())); #endif // ENABLE_WORLD_COORDINATE // extend to contain model, if any -#if ENABLE_RAYCAST_PICKING BoundingBoxf3 model_bb = m_model.model.get_bounding_box(); -#else - BoundingBoxf3 model_bb = m_model.get_bounding_box(); -#endif // ENABLE_RAYCAST_PICKING if (model_bb.defined) { model_bb.translate(m_model_offset); out.merge(model_bb); @@ -409,16 +399,12 @@ void Bed3D::init_triangles() init_data.add_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1); } -#if ENABLE_RAYCAST_PICKING if (m_model.model.get_filename().empty() && m_model.mesh_raycaster == nullptr) // register for picking register_raycasters_for_picking(init_data, Transform3d::Identity()); -#endif // ENABLE_RAYCAST_PICKING m_triangles.init_from(std::move(init_data)); -#if ENABLE_RAYCAST_PICKING m_triangles.set_color(DEFAULT_MODEL_COLOR); -#endif // ENABLE_RAYCAST_PICKING } void Bed3D::init_gridlines() @@ -798,17 +784,9 @@ void Bed3D::render_model() if (m_model_filename.empty()) return; -#if ENABLE_RAYCAST_PICKING if (m_model.model.get_filename() != m_model_filename && m_model.model.init_from_file(m_model_filename)) { -#else - if (m_model.get_filename() != m_model_filename && m_model.init_from_file(m_model_filename)) { -#endif // ENABLE_RAYCAST_PICKING #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_model.model.set_color(DEFAULT_MODEL_COLOR); -#else - m_model.set_color(DEFAULT_MODEL_COLOR); -#endif // ENABLE_RAYCAST_PICKING #else m_model.set_color(-1, DEFAULT_MODEL_COLOR); #endif // ENABLE_LEGACY_OPENGL_REMOVAL @@ -816,20 +794,14 @@ void Bed3D::render_model() // move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad m_model_offset = to_3d(m_build_volume.bounding_volume2d().center(), -0.03); -#if ENABLE_RAYCAST_PICKING // register for picking register_raycasters_for_picking(m_model.model.get_geometry(), Geometry::translation_transform(m_model_offset)); -#endif // ENABLE_RAYCAST_PICKING // update extended bounding box m_extended_bounding_box = this->calc_extended_bounding_box(); } -#if ENABLE_RAYCAST_PICKING if (!m_model.model.get_filename().empty()) { -#else - if (!m_model.get_filename().empty()) { -#endif // ENABLE_RAYCAST_PICKING GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); if (shader != nullptr) { shader->start_using(); @@ -844,11 +816,7 @@ void Bed3D::render_model() glsafe(::glPushMatrix()); glsafe(::glTranslated(m_model_offset.x(), m_model_offset.y(), m_model_offset.z())); #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_model.model.render(); -#else - m_model.render(); -#endif // ENABLE_RAYCAST_PICKING #if !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPopMatrix()); #endif // !ENABLE_LEGACY_OPENGL_REMOVAL @@ -914,23 +882,14 @@ void Bed3D::render_default(bool bottom, bool picking, bool show_texture) glsafe(::glEnable(GL_BLEND)); glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); -#if ENABLE_RAYCAST_PICKING const bool has_model = !m_model.model.get_filename().empty(); -#else - const bool has_model = !m_model.get_filename().empty(); -#endif // ENABLE_RAYCAST_PICKING - if (!has_model && !bottom) { // draw background glsafe(::glDepthMask(GL_FALSE)); -#if !ENABLE_RAYCAST_PICKING - m_triangles.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR); -#endif // !ENABLE_RAYCAST_PICKING m_triangles.render(); glsafe(::glDepthMask(GL_TRUE)); } -#if ENABLE_RAYCAST_PICKING if (show_texture) { // draw grid #if ENABLE_GL_CORE_PROFILE @@ -942,19 +901,6 @@ void Bed3D::render_default(bool bottom, bool picking, bool show_texture) } else render_contour(view_matrix, projection_matrix); -#else - if (!picking && show_texture) { - // draw grid -#if ENABLE_GL_CORE_PROFILE - if (!OpenGLManager::get_gl_info().is_core_profile()) -#endif // ENABLE_GL_CORE_PROFILE - glsafe(::glLineWidth(1.5f * m_scale_factor)); - m_gridlines.set_color(has_model && !bottom ? DEFAULT_SOLID_GRID_COLOR : DEFAULT_TRANSPARENT_GRID_COLOR); - m_gridlines.render(); - } - else if (!show_texture) - render_contour(view_matrix, projection_matrix); -#endif // ENABLE_RAYCAST_PICKING glsafe(::glDisable(GL_BLEND)); @@ -1047,7 +993,6 @@ void Bed3D::release_VBOs() } #endif // !ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING void Bed3D::register_raycasters_for_picking(const GLModel::Geometry& geometry, const Transform3d& trafo) { assert(m_model.mesh_raycaster == nullptr); @@ -1066,7 +1011,6 @@ void Bed3D::register_raycasters_for_picking(const GLModel::Geometry& geometry, c m_model.mesh_raycaster = std::make_unique(std::make_shared(std::move(its))); wxGetApp().plater()->canvas3D()->add_raycaster_for_picking(SceneRaycaster::EType::Bed, 0, *m_model.mesh_raycaster, trafo); } -#endif // ENABLE_RAYCAST_PICKING } // GUI } // Slic3r diff --git a/src/slic3r/GUI/3DBed.hpp b/src/slic3r/GUI/3DBed.hpp index 7f0dff19d..c12674b4a 100644 --- a/src/slic3r/GUI/3DBed.hpp +++ b/src/slic3r/GUI/3DBed.hpp @@ -8,9 +8,7 @@ #else #include "GLModel.hpp" #endif // ENABLE_WORLD_COORDINATE -#if ENABLE_RAYCAST_PICKING #include "MeshUtils.hpp" -#endif // ENABLE_RAYCAST_PICKING #include "libslic3r/BuildVolume.hpp" #if ENABLE_LEGACY_OPENGL_REMOVAL @@ -111,11 +109,7 @@ private: GLTexture m_texture; // temporary texture shown until the main texture has still no levels compressed GLTexture m_temp_texture; -#if ENABLE_RAYCAST_PICKING PickingModel m_model; -#else - GLModel m_model; -#endif // ENABLE_RAYCAST_PICKING Vec3d m_model_offset{ Vec3d::Zero() }; #if !ENABLE_LEGACY_OPENGL_REMOVAL unsigned int m_vbo_id{ 0 }; @@ -205,9 +199,7 @@ private: void release_VBOs(); #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING void register_raycasters_for_picking(const GLModel::Geometry& geometry, const Transform3d& trafo); -#endif // ENABLE_RAYCAST_PICKING }; } // GUI diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 7ab01bebf..4bf05555c 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -807,27 +807,17 @@ int GLVolumeCollection::load_object_volume( const ModelVolume *model_volume = model_object->volumes[volume_idx]; const int extruder_id = model_volume->extruder_id(); const ModelInstance *instance = model_object->instances[instance_idx]; -#if ENABLE_RAYCAST_PICKING std::shared_ptr mesh = model_volume->mesh_ptr(); -#else - const TriangleMesh &mesh = model_volume->mesh(); -#endif // ENABLE_RAYCAST_PICKING this->volumes.emplace_back(new GLVolume()); GLVolume& v = *this->volumes.back(); v.set_color(color_from_model_volume(*model_volume)); #if ENABLE_LEGACY_OPENGL_REMOVAL #if ENABLE_SMOOTH_NORMALS v.model.init_from(*mesh, true); -#if ENABLE_RAYCAST_PICKING v.mesh_raycaster = std::make_unique(mesh); -#endif // ENABLE_RAYCAST_PICKING #else -#if ENABLE_RAYCAST_PICKING v.model.init_from(*mesh); v.mesh_raycaster = std::make_unique(mesh); -#else - v.model.init_from(mesh); -#endif // ENABLE_RAYCAST_PICKING #endif // ENABLE_SMOOTH_NORMALS #else #if ENABLE_SMOOTH_NORMALS @@ -893,9 +883,7 @@ void GLVolumeCollection::load_object_auxiliary( #else v.model.init_from(mesh); v.model.set_color((milestone == slaposPad) ? GLVolume::SLA_PAD_COLOR : GLVolume::SLA_SUPPORT_COLOR); -#if ENABLE_RAYCAST_PICKING v.mesh_raycaster = std::make_unique(std::make_shared(mesh)); -#endif // ENABLE_RAYCAST_PICKING #endif // ENABLE_SMOOTH_NORMALS #else #if ENABLE_SMOOTH_NORMALS @@ -954,13 +942,10 @@ int GLVolumeCollection::load_wipe_tower_preview( depth = std::max(depth, 10.f); float min_width = 30.f; -#if ENABLE_RAYCAST_PICKING const float scaled_brim_height = 0.2f / height; -#endif // ENABLE_RAYCAST_PICKING // We'll now create the box with jagged edge. y-coordinates of the pre-generated model // are shifted so that the front edge has y=0 and centerline of the back edge has y=depth: -#if ENABLE_RAYCAST_PICKING // We split the box in three main pieces, // the two laterals are identical and the central is the one containing the jagged geometry @@ -1061,22 +1046,6 @@ int GLVolumeCollection::load_wipe_tower_preview( tooth_mesh.merge(TriangleMesh(std::move(data))); data = generate_lateral(61.547f, 100.0f); tooth_mesh.merge(TriangleMesh(std::move(data))); -#else - float out_points_idx[][3] = { { 0, -depth, 0 }, { 0, 0, 0 }, { 38.453f, 0, 0 }, { 61.547f, 0, 0 }, { 100.0f, 0, 0 }, { 100.0f, -depth, 0 }, { 55.7735f, -10.0f, 0 }, { 44.2265f, 10.0f, 0 }, - { 38.453f, 0, 1 }, { 0, 0, 1 }, { 0, -depth, 1 }, { 100.0f, -depth, 1 }, { 100.0f, 0, 1 }, { 61.547f, 0, 1 }, { 55.7735f, -10.0f, 1 }, { 44.2265f, 10.0f, 1 } }; - static constexpr const int out_facets_idx[][3] = { - { 0, 1, 2 }, { 3, 4, 5 }, { 6, 5, 0 }, { 3, 5, 6 }, { 6, 2, 7 }, { 6, 0, 2 }, { 8, 9, 10 }, { 11, 12, 13 }, { 10, 11, 14 }, { 14, 11, 13 }, { 15, 8, 14 }, - { 8, 10, 14 }, { 3, 12, 4 }, { 3, 13, 12 }, { 6, 13, 3 }, { 6, 14, 13 }, { 7, 14, 6 }, { 7, 15, 14 }, { 2, 15, 7 }, { 2, 8, 15 }, { 1, 8, 2 }, { 1, 9, 8 }, - { 0, 9, 1 }, { 0, 10, 9 }, { 5, 10, 0 }, { 5, 11, 10 }, { 4, 11, 5 }, { 4, 12, 11 } }; - indexed_triangle_set its; - for (int i = 0; i < 16; ++i) - its.vertices.emplace_back(out_points_idx[i][0] / (100.f / min_width), - out_points_idx[i][1] + depth, out_points_idx[i][2]); - its.indices.reserve(28); - for (const int *face : out_facets_idx) - its.indices.emplace_back(face); - TriangleMesh tooth_mesh(std::move(its)); -#endif // ENABLE_RAYCAST_PICKING // We have the mesh ready. It has one tooth and width of min_width. We will now // append several of these together until we are close to the required width @@ -1084,14 +1053,9 @@ int GLVolumeCollection::load_wipe_tower_preview( size_t n = std::max(1, int(width / min_width)); // How many shall be merged? for (size_t i = 0; i < n; ++i) { mesh.merge(tooth_mesh); -#if ENABLE_RAYCAST_PICKING tooth_mesh.translate(100.0f, 0.0f, 0.0f); -#else - tooth_mesh.translate(min_width, 0.f, 0.f); -#endif // ENABLE_RAYCAST_PICKING } -#if ENABLE_RAYCAST_PICKING // Now we add the caps along the X axis const float scaled_brim_width_x = brim_width * n * width / min_width; auto generate_negx_cap = [&]() { @@ -1166,20 +1130,10 @@ int GLVolumeCollection::load_wipe_tower_preview( data = generate_posx_cap(); mesh.merge(TriangleMesh(std::move(data))); mesh.scale(Vec3f(width / (n * 100.0f), 1.0f, height)); // Scaling to proper width -#else - mesh.scale(Vec3f(width / (n * min_width), 1.f, height)); // Scaling to proper width -#endif // ENABLE_RAYCAST_PICKING } else mesh = make_cube(width, depth, height); -#if !ENABLE_RAYCAST_PICKING - // We'll make another mesh to show the brim (fixed layer height): - TriangleMesh brim_mesh = make_cube(width + 2.f * brim_width, depth + 2.f * brim_width, 0.2f); - brim_mesh.translate(-brim_width, -brim_width, 0.f); - mesh.merge(brim_mesh); -#endif // !ENABLE_RAYCAST_PICKING - volumes.emplace_back(new GLVolume(color)); GLVolume& v = *volumes.back(); #if ENABLE_LEGACY_OPENGL_REMOVAL @@ -1189,9 +1143,7 @@ int GLVolumeCollection::load_wipe_tower_preview( #endif // ENABLE_OPENGL_ES v.model.init_from(mesh); v.model.set_color(color); -#if ENABLE_RAYCAST_PICKING v.mesh_raycaster = std::make_unique(std::make_shared(mesh)); -#endif // ENABLE_RAYCAST_PICKING #else v.indexed_vertex_array.load_mesh(mesh); #endif // ENABLE_LEGACY_OPENGL_REMOVAL diff --git a/src/slic3r/GUI/3DScene.hpp b/src/slic3r/GUI/3DScene.hpp index 1e8897c4e..a7146d61c 100644 --- a/src/slic3r/GUI/3DScene.hpp +++ b/src/slic3r/GUI/3DScene.hpp @@ -10,9 +10,7 @@ #include "libslic3r/Color.hpp" #include "GLModel.hpp" -#if ENABLE_RAYCAST_PICKING #include "MeshUtils.hpp" -#endif // ENABLE_RAYCAST_PICKING #include #include @@ -393,10 +391,8 @@ public: #if ENABLE_LEGACY_OPENGL_REMOVAL GUI::GLModel model; -#if ENABLE_RAYCAST_PICKING // raycaster used for picking std::unique_ptr mesh_raycaster; -#endif // ENABLE_RAYCAST_PICKING #else // Interleaved triangles & normals with indexed triangles & quads. GLIndexedVertexArray indexed_vertex_array; diff --git a/src/slic3r/GUI/Camera.cpp b/src/slic3r/GUI/Camera.cpp index 56980c43a..a549d87da 100644 --- a/src/slic3r/GUI/Camera.cpp +++ b/src/slic3r/GUI/Camera.cpp @@ -91,7 +91,6 @@ void Camera::select_view(const std::string& direction) look_at(m_target + m_distance * Vec3d::UnitY(), m_target, Vec3d::UnitZ()); } -#if ENABLE_RAYCAST_PICKING double Camera::get_near_left() const { switch (m_type) @@ -163,7 +162,6 @@ double Camera::get_near_height() const return 2.0 / m_projection_matrix.matrix()(1, 1); } } -#endif // ENABLE_RAYCAST_PICKING double Camera::get_fov() const { @@ -177,7 +175,6 @@ double Camera::get_fov() const }; } -#if ENABLE_RAYCAST_PICKING void Camera::set_viewport(int x, int y, unsigned int w, unsigned int h) { #if ENABLE_LEGACY_OPENGL_REMOVAL @@ -191,17 +188,6 @@ void Camera::apply_viewport() const { glsafe(::glViewport(m_viewport[0], m_viewport[1], m_viewport[2], m_viewport[3])); } -#else -void Camera::apply_viewport(int x, int y, unsigned int w, unsigned int h) -{ - glsafe(::glViewport(0, 0, w, h)); -#if ENABLE_LEGACY_OPENGL_REMOVAL - m_viewport = { 0, 0, int(w), int(h) }; -#else - glsafe(::glGetIntegerv(GL_VIEWPORT, m_viewport.data())); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL -} -#endif // ENABLE_RAYCAST_PICKING #if !ENABLE_LEGACY_OPENGL_REMOVAL void Camera::apply_view_matrix() @@ -260,37 +246,7 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa } #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING apply_projection(-w, w, -h, h, m_frustrum_zs.first, m_frustrum_zs.second); -#else - switch (m_type) - { - default: - case EType::Ortho: - { - const double dz = m_frustrum_zs.second - m_frustrum_zs.first; - const double zz = m_frustrum_zs.first + m_frustrum_zs.second; - m_projection_matrix.matrix() << 1.0 / w, 0.0, 0.0, 0.0, - 0.0, 1.0 / h, 0.0, 0.0, - 0.0, 0.0, -2.0 / dz, -zz / dz, - 0.0, 0.0, 0.0, 1.0; - break; - } - case EType::Perspective: - { - const double n = m_frustrum_zs.first; - const double f = m_frustrum_zs.second; - const double dz = f - n; - const double zz = n + f; - const double fn = n * f; - m_projection_matrix.matrix() << n / w, 0.0, 0.0, 0.0, - 0.0, n / h, 0.0, 0.0, - 0.0, 0.0, -zz / dz, -2.0 * fn / dz, - 0.0, 0.0, -1.0, 0.0; - break; - } - } -#endif // ENABLE_RAYCAST_PICKING #else glsafe(::glMatrixMode(GL_PROJECTION)); glsafe(::glLoadIdentity()); @@ -315,7 +271,6 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa #endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_RAYCAST_PICKING void Camera::apply_projection(double left, double right, double bottom, double top, double near_z, double far_z) { assert(left != right && bottom != top && near_z != far_z); @@ -344,7 +299,6 @@ void Camera::apply_projection(double left, double right, double bottom, double t } } } -#endif // ENABLE_RAYCAST_PICKING void Camera::zoom_to_box(const BoundingBoxf3& box, double margin_factor) { diff --git a/src/slic3r/GUI/Camera.hpp b/src/slic3r/GUI/Camera.hpp index b2672e14e..dca7ba642 100644 --- a/src/slic3r/GUI/Camera.hpp +++ b/src/slic3r/GUI/Camera.hpp @@ -89,33 +89,24 @@ public: double get_far_z() const { return m_frustrum_zs.second; } const std::pair& get_z_range() const { return m_frustrum_zs; } -#if ENABLE_RAYCAST_PICKING double get_near_left() const; double get_near_right() const; double get_near_top() const; double get_near_bottom() const; double get_near_width() const; double get_near_height() const; -#endif // ENABLE_RAYCAST_PICKING double get_fov() const; -#if ENABLE_RAYCAST_PICKING void set_viewport(int x, int y, unsigned int w, unsigned int h); void apply_viewport() const; -#else - void apply_viewport(int x, int y, unsigned int w, unsigned int h); -#endif // ENABLE_RAYCAST_PICKING #if !ENABLE_LEGACY_OPENGL_REMOVAL void apply_view_matrix(); #endif // !ENABLE_LEGACY_OPENGL_REMOVAL // Calculates and applies the projection matrix tighting the frustrum z range around the given box. // If larger z span is needed, pass the desired values of near and far z (negative values are ignored) void apply_projection(const BoundingBoxf3& box, double near_z = -1.0, double far_z = -1.0); - -#if ENABLE_RAYCAST_PICKING void apply_projection(double left, double right, double bottom, double top, double near_z, double far_z); -#endif // ENABLE_RAYCAST_PICKING void zoom_to_box(const BoundingBoxf3& box, double margin_factor = DefaultZoomToBoxMarginFactor); void zoom_to_volumes(const GLVolumePtrs& volumes, double margin_factor = DefaultZoomToVolumesMarginFactor); diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 9f2e7c0da..0c505bc0b 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -1346,13 +1346,10 @@ void GLCanvas3D::toggle_sla_auxiliaries_visibility(bool visible, const ModelObje m_render_sla_auxiliaries = visible; -#if ENABLE_RAYCAST_PICKING std::vector>* raycasters = get_raycasters_for_picking(SceneRaycaster::EType::Volume); -#endif // ENABLE_RAYCAST_PICKING for (GLVolume* vol : m_volumes.volumes) { -#if ENABLE_RAYCAST_PICKING - if ((mo == nullptr || m_model->objects[vol->composite_id.object_id] == mo) + if ((mo == nullptr || m_model->objects[vol->composite_id.object_id] == mo) && (instance_idx == -1 || vol->composite_id.instance_id == instance_idx) && vol->composite_id.volume_id < 0) { vol->is_active = visible; @@ -1360,20 +1357,12 @@ void GLCanvas3D::toggle_sla_auxiliaries_visibility(bool visible, const ModelObje if (it != raycasters->end()) (*it)->set_active(vol->is_active); } -#else - if ((mo == nullptr || m_model->objects[vol->composite_id.object_id] == mo) - && (instance_idx == -1 || vol->composite_id.instance_id == instance_idx) - && vol->composite_id.volume_id < 0) - vol->is_active = visible; -#endif // ENABLE_RAYCAST_PICKING } } void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject* mo, int instance_idx, const ModelVolume* mv) { -#if ENABLE_RAYCAST_PICKING std::vector>* raycasters = get_raycasters_for_picking(SceneRaycaster::EType::Volume); -#endif // ENABLE_RAYCAST_PICKING for (GLVolume* vol : m_volumes.volumes) { if (vol->is_wipe_tower) vol->is_active = (visible && mo == nullptr); @@ -1404,11 +1393,10 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject } } } -#if ENABLE_RAYCAST_PICKING + auto it = std::find_if(raycasters->begin(), raycasters->end(), [vol](std::shared_ptr item) { return item->get_raycaster() == vol->mesh_raycaster.get(); }); if (it != raycasters->end()) (*it)->set_active(vol->is_active); -#endif // ENABLE_RAYCAST_PICKING } if (visible && !mo) @@ -1666,12 +1654,8 @@ void GLCanvas3D::render() // and the viewport was set incorrectly, leading to tripping glAsserts further down // the road (in apply_projection). That's why the minimum size is forced to 10. Camera& camera = wxGetApp().plater()->get_camera(); -#if ENABLE_RAYCAST_PICKING camera.set_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height())); camera.apply_viewport(); -#else - camera.apply_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height())); -#endif // ENABLE_RAYCAST_PICKING if (camera.requires_zoom_to_bed) { zoom_to_bed(); @@ -2266,9 +2250,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re #else #if ENABLE_LEGACY_OPENGL_REMOVAL volume.model.init_from(mesh); -#if ENABLE_RAYCAST_PICKING volume.mesh_raycaster = std::make_unique(std::make_shared(mesh)); -#endif // ENABLE_RAYCAST_PICKING #else volume.indexed_vertex_array.load_mesh(mesh); #endif // ENABLE_LEGACY_OPENGL_REMOVAL @@ -2284,13 +2266,9 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re #endif // ENABLE_LEGACY_OPENGL_REMOVAL #else #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING - const TriangleMesh& new_mesh = m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh(); + const TriangleMesh& new_mesh = m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh(); volume.model.init_from(new_mesh); volume.mesh_raycaster = std::make_unique(std::make_shared(new_mesh)); -#else - volume.model.init_from(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh()); -#endif // ENABLE_RAYCAST_PICKING #else volume.indexed_vertex_array.load_mesh(m_model->objects[volume.object_idx()]->volumes[volume.volume_idx()]->mesh()); #endif // ENABLE_LEGACY_OPENGL_REMOVAL @@ -2447,7 +2425,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re manip->set_dirty(); } -#if ENABLE_RAYCAST_PICKING // refresh volume raycasters for picking m_scene_raycaster.remove_raycasters(SceneRaycaster::EType::Volume); for (size_t i = 0; i < m_volumes.volumes.size(); ++i) { @@ -2464,7 +2441,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re m_scene_raycaster.remove_raycasters(SceneRaycaster::EType::Gizmo); if (curr_gizmo != nullptr && !m_selection.is_empty()) curr_gizmo->register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING // and force this canvas to be redrawn. m_dirty = true; @@ -3010,11 +2986,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt) // set_cursor(Standard); } else if (keyCode == WXK_CONTROL) { -#if ENABLE_RAYCAST_PICKING - if (m_mouse.dragging && !m_moving) { -#else - if (m_mouse.dragging) { -#endif // ENABLE_RAYCAST_PICKING + if (m_mouse.dragging && !m_moving) { // if the user releases CTRL while rotating the 3D scene // prevent from moving the selected volume m_mouse.drag.move_volume_idx = -1; @@ -3530,9 +3502,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) if (!evt.CmdDown()) m_mouse.drag.start_position_3D = m_mouse.scene_position; m_sequential_print_clearance_first_displacement = true; -#if !ENABLE_RAYCAST_PICKING - m_moving = true; -#endif // !ENABLE_RAYCAST_PICKING } } } @@ -3576,9 +3545,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } #if ENABLE_WORLD_COORDINATE -#if ENABLE_RAYCAST_PICKING m_moving = true; -#endif // ENABLE_RAYCAST_PICKING TransformationType trafo_type; trafo_type.set_relative(); m_selection.translate(cur_pos - m_mouse.drag.start_position_3D, trafo_type); @@ -3609,9 +3576,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // do not process the dragging if the left mouse was set down in another canvas else if (evt.LeftIsDown()) { // if dragging over blank area with left button, rotate -#if ENABLE_RAYCAST_PICKING if (!m_moving) { -#endif // ENABLE_RAYCAST_PICKING if ((any_gizmo_active || evt.CmdDown() || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) { const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.0) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.0); if (wxGetApp().app_config->get("use_free_camera") == "1") @@ -3630,9 +3595,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) m_dirty = true; } m_mouse.drag.start_position_3D = Vec3d((double)pos.x(), (double)pos.y(), 0.0); -#if ENABLE_RAYCAST_PICKING } -#endif // ENABLE_RAYCAST_PICKING } else if (evt.MiddleIsDown() || evt.RightIsDown()) { // If dragging over blank area with right/middle button, pan. @@ -3657,9 +3620,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) } } else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) { -#if ENABLE_RAYCAST_PICKING m_mouse.position = pos.cast(); -#endif // ENABLE_RAYCAST_PICKING if (m_layers_editing.state != LayersEditing::Unknown) { m_layers_editing.state = LayersEditing::Unknown; @@ -3685,9 +3646,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) deselect_all(); } else if (evt.RightUp()) { -#if !ENABLE_RAYCAST_PICKING - m_mouse.position = pos.cast(); -#endif // !ENABLE_RAYCAST_PICKING // forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while // the context menu is already shown render(); @@ -4678,12 +4636,8 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const Camera camera; camera.set_type(camera_type); camera.set_scene_box(scene_bounding_box()); -#if ENABLE_RAYCAST_PICKING camera.set_viewport(0, 0, thumbnail_data.width, thumbnail_data.height); camera.apply_viewport(); -#else - camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height); -#endif // ENABLE_RAYCAST_PICKING camera.zoom_to_box(volumes_box); #if ENABLE_LEGACY_OPENGL_REMOVAL @@ -4985,11 +4939,7 @@ void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigne #endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT // restore the default framebuffer size to avoid flickering on the 3D scene -#if ENABLE_RAYCAST_PICKING wxGetApp().plater()->get_camera().apply_viewport(); -#else - wxGetApp().plater()->get_camera().apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height()); -#endif // ENABLE_RAYCAST_PICKING } bool GLCanvas3D::_init_toolbars() @@ -5456,7 +5406,6 @@ void GLCanvas3D::_refresh_if_shown_on_screen() } } -#if ENABLE_RAYCAST_PICKING void GLCanvas3D::_picking_pass() { if (!m_picking_enabled || m_mouse.dragging || m_mouse.position == Vec2d(DBL_MAX, DBL_MAX) || m_gizmos.is_dragging()) { @@ -5599,82 +5548,6 @@ void GLCanvas3D::_picking_pass() imgui.end(); #endif // ENABLE_RAYCAST_PICKING_DEBUG } -#else -void GLCanvas3D::_picking_pass() -{ - if (m_picking_enabled && !m_mouse.dragging && m_mouse.position != Vec2d(DBL_MAX, DBL_MAX) && !m_gizmos.is_dragging()) { - m_hover_volume_idxs.clear(); - - // Render the object for picking. - // FIXME This cannot possibly work in a multi - sampled context as the color gets mangled by the anti - aliasing. - // Better to use software ray - casting on a bounding - box hierarchy. - - if (m_multisample_allowed) - // This flag is often ignored by NVIDIA drivers if rendering into a screen buffer. - glsafe(::glDisable(GL_MULTISAMPLE)); - - glsafe(::glDisable(GL_BLEND)); - glsafe(::glEnable(GL_DEPTH_TEST)); - - glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); - -#if !ENABLE_LEGACY_OPENGL_REMOVAL - m_camera_clipping_plane = m_gizmos.get_clipping_plane(); - if (m_camera_clipping_plane.is_active()) { - ::glClipPlane(GL_CLIP_PLANE0, (GLdouble*)m_camera_clipping_plane.get_data().data()); - ::glEnable(GL_CLIP_PLANE0); - } -#endif // !ENABLE_LEGACY_OPENGL_REMOVAL - _render_volumes_for_picking(); -#if !ENABLE_LEGACY_OPENGL_REMOVAL - if (m_camera_clipping_plane.is_active()) - ::glDisable(GL_CLIP_PLANE0); -#endif // !ENABLE_LEGACY_OPENGL_REMOVAL - -#if ENABLE_LEGACY_OPENGL_REMOVAL - const Camera& camera = wxGetApp().plater()->get_camera(); - _render_bed_for_picking(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward()); -#else - _render_bed_for_picking(!wxGetApp().plater()->get_camera().is_looking_downward()); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - - m_gizmos.render_current_gizmo_for_picking_pass(); - - if (m_multisample_allowed) - glsafe(::glEnable(GL_MULTISAMPLE)); - - int volume_id = -1; - int gizmo_id = -1; - - std::array color = { 0, 0, 0, 0 }; - const Size& cnv_size = get_canvas_size(); - bool inside = 0 <= m_mouse.position(0) && m_mouse.position(0) < cnv_size.get_width() && 0 <= m_mouse.position(1) && m_mouse.position(1) < cnv_size.get_height(); - if (inside) { - glsafe(::glReadPixels(m_mouse.position(0), cnv_size.get_height() - m_mouse.position.y() - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color.data())); - if (picking_checksum_alpha_channel(color[0], color[1], color[2]) == color[3]) { - // Only non-interpolated colors are valid, those have their lowest three bits zeroed. - // we reserve color = (0,0,0) for occluders (as the printbed) - // volumes' id are shifted by 1 - // see: _render_volumes_for_picking() - unsigned int id = picking_encode(color[0], color[1], color[2]); - volume_id = id - 1; - // gizmos' id are instead properly encoded by the color - gizmo_id = id; - } - } - if (0 <= volume_id && volume_id < (int)m_volumes.volumes.size()) { - // do not add the volume id if any gizmo is active and CTRL is pressed - if (m_gizmos.get_current_type() == GLGizmosManager::EType::Undefined || !wxGetKeyState(WXK_CONTROL)) - m_hover_volume_idxs.emplace_back(volume_id); - m_gizmos.set_hover_id(-1); - } - else - m_gizmos.set_hover_id(inside && (unsigned int)gizmo_id <= GLGizmoBase::BASE_ID ? ((int)GLGizmoBase::BASE_ID - gizmo_id) : -1); - - _update_volumes_hover_state(); - } -} -#endif // ENABLE_RAYCAST_PICKING void GLCanvas3D::_rectangular_selection_picking_pass() { @@ -5683,7 +5556,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass() std::set idxs; if (m_picking_enabled) { -#if ENABLE_RAYCAST_PICKING const size_t width = std::max(m_rectangle_selection.get_width(), 1); const size_t height = std::max(m_rectangle_selection.get_height(), 1); @@ -5737,7 +5609,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass() use_framebuffer = false; } } -#endif // ENABLE_RAYCAST_PICKING if (m_multisample_allowed) // This flag is often ignored by NVIDIA drivers if rendering into a screen buffer. @@ -5748,7 +5619,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass() glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)); -#if ENABLE_RAYCAST_PICKING const Camera& main_camera = wxGetApp().plater()->get_camera(); Camera framebuffer_camera; framebuffer_camera.set_type(main_camera.get_type()); @@ -5782,16 +5652,8 @@ void GLCanvas3D::_rectangular_selection_picking_pass() } _render_volumes_for_picking(*camera); -#else - _render_volumes_for_picking(); -#endif // ENABLE_RAYCAST_PICKING #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING _render_bed_for_picking(camera->get_view_matrix(), camera->get_projection_matrix(), !camera->is_looking_downward()); -#else - const Camera& camera = wxGetApp().plater()->get_camera(); - _render_bed_for_picking(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward()); -#endif // ENABLE_RAYCAST_PICKING #else _render_bed_for_picking(!wxGetApp().plater()->get_camera().is_looking_downward()); #endif // ENABLE_LEGACY_OPENGL_REMOVAL @@ -5799,20 +5661,10 @@ void GLCanvas3D::_rectangular_selection_picking_pass() if (m_multisample_allowed) glsafe(::glEnable(GL_MULTISAMPLE)); -#if ENABLE_RAYCAST_PICKING const size_t px_count = width * height; const size_t left = use_framebuffer ? 0 : (size_t)m_rectangle_selection.get_left(); const size_t top = use_framebuffer ? 0 : (size_t)get_canvas_size().get_height() - (size_t)m_rectangle_selection.get_top(); -#else - int width = std::max((int)m_rectangle_selection.get_width(), 1); - int height = std::max((int)m_rectangle_selection.get_height(), 1); - int px_count = width * height; - - int left = (int)m_rectangle_selection.get_left(); - int top = get_canvas_size().get_height() - (int)m_rectangle_selection.get_top(); - if (left >= 0 && top >= 0) { -#endif // ENABLE_RAYCAST_PICKING #define USE_PARALLEL 1 #if USE_PARALLEL struct Pixel @@ -5846,15 +5698,13 @@ void GLCanvas3D::_rectangular_selection_picking_pass() std::vector frame(4 * px_count); glsafe(::glReadPixels(left, top, width, height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)frame.data())); - for (int i = 0; i < px_count; ++i) - { + for (int i = 0; i < px_count; ++i) { int px_id = 4 * i; int volume_id = frame[px_id] + (frame[px_id + 1] << 8) + (frame[px_id + 2] << 16); if (0 <= volume_id && volume_id < (int)m_volumes.volumes.size()) idxs.insert(volume_id); } #endif // USE_PARALLEL -#if ENABLE_RAYCAST_PICKING if (camera != &main_camera) main_camera.apply_viewport(); @@ -5875,9 +5725,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass() if (render_tex != 0) glsafe(::glDeleteTextures(1, &render_tex)); -#else - } -#endif // ENABLE_RAYCAST_PICKING } m_hover_volume_idxs.assign(idxs.begin(), idxs.end()); @@ -6280,11 +6127,7 @@ void GLCanvas3D::_render_overlays() #endif // !ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_RAYCAST_PICKING void GLCanvas3D::_render_volumes_for_picking(const Camera& camera) const -#else -void GLCanvas3D::_render_volumes_for_picking() const -#endif // ENABLE_RAYCAST_PICKING { #if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_shader("flat_clip"); @@ -6300,11 +6143,7 @@ void GLCanvas3D::_render_volumes_for_picking() const glsafe(::glEnableClientState(GL_NORMAL_ARRAY)); #endif // !ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING const Transform3d& view_matrix = camera.get_view_matrix(); -#else - const Transform3d& view_matrix = wxGetApp().plater()->get_camera().get_view_matrix(); -#endif // ENABLE_RAYCAST_PICKING for (size_t type = 0; type < 2; ++ type) { GLVolumeWithIdAndZList to_render = volumes_to_render(m_volumes.volumes, (type == 0) ? GLVolumeCollection::ERenderType::Opaque : GLVolumeCollection::ERenderType::Transparent, view_matrix); for (const GLVolumeWithIdAndZ& volume : to_render) @@ -6316,12 +6155,7 @@ void GLCanvas3D::_render_volumes_for_picking() const #if ENABLE_LEGACY_OPENGL_REMOVAL volume.first->model.set_color(picking_decode(id)); shader->start_using(); -#if ENABLE_RAYCAST_PICKING shader->set_uniform("view_model_matrix", view_matrix * volume.first->world_matrix()); -#else - const Camera& camera = wxGetApp().plater()->get_camera(); - shader->set_uniform("view_model_matrix", camera.get_view_matrix() * volume.first->world_matrix()); -#endif // ENABLE_RAYCAST_PICKING shader->set_uniform("projection_matrix", camera.get_projection_matrix()); shader->set_uniform("volume_world_matrix", volume.first->world_matrix()); shader->set_uniform("z_range", m_volumes.get_z_range()); @@ -6889,7 +6723,6 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z) if (m_canvas == nullptr) return Vec3d(DBL_MAX, DBL_MAX, DBL_MAX); -#if ENABLE_RAYCAST_PICKING if (z == nullptr) { const SceneRaycaster::HitResult hit = m_scene_raycaster.hit(mouse_pos.cast(), wxGetApp().plater()->get_camera(), nullptr); return hit.is_valid() ? hit.position.cast() : _mouse_to_bed_3d(mouse_pos); @@ -6901,23 +6734,6 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z) igl::unproject(Vec3d(mouse_pos.x(), viewport[3] - mouse_pos.y(), *z), camera.get_view_matrix().matrix(), camera.get_projection_matrix().matrix(), viewport, out); return out; } -#else - const Camera& camera = wxGetApp().plater()->get_camera(); - const Matrix4d modelview = camera.get_view_matrix().matrix(); - const Matrix4d projection = camera.get_projection_matrix().matrix(); - const Vec4i viewport(camera.get_viewport().data()); - - const int y = viewport[3] - mouse_pos.y(); - float mouse_z; - if (z == nullptr) - glsafe(::glReadPixels(mouse_pos.x(), y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, (void*)&mouse_z)); - else - mouse_z = *z; - - Vec3d out; - igl::unproject(Vec3d(mouse_pos.x(), y, mouse_z), modelview, projection, viewport, out); - return out; -#endif // ENABLE_RAYCAST_PICKING } Vec3d GLCanvas3D::_mouse_to_bed_3d(const Point& mouse_pos) diff --git a/src/slic3r/GUI/GLCanvas3D.hpp b/src/slic3r/GUI/GLCanvas3D.hpp index a519a26a1..b24a15bbe 100644 --- a/src/slic3r/GUI/GLCanvas3D.hpp +++ b/src/slic3r/GUI/GLCanvas3D.hpp @@ -16,9 +16,7 @@ #include "libslic3r/GCode/GCodeProcessor.hpp" #include "GCodeViewer.hpp" #include "Camera.hpp" -#if ENABLE_RAYCAST_PICKING #include "SceneRaycaster.hpp" -#endif // ENABLE_RAYCAST_PICKING #include "GUI_Utils.hpp" #include "libslic3r/Slicing.hpp" @@ -483,9 +481,7 @@ public: private: wxGLCanvas* m_canvas; wxGLContext* m_context; -#if ENABLE_RAYCAST_PICKING SceneRaycaster m_scene_raycaster; -#endif // ENABLE_RAYCAST_PICKING Bed3D &m_bed; #if ENABLE_RETINA_GL std::unique_ptr m_retina_helper; @@ -669,7 +665,6 @@ public: bool init(); void post_event(wxEvent &&event); -#if ENABLE_RAYCAST_PICKING std::shared_ptr add_raycaster_for_picking(SceneRaycaster::EType type, int id, const MeshRaycaster& raycaster, const Transform3d& trafo = Transform3d::Identity(), bool use_back_faces = false) { return m_scene_raycaster.add_raycaster(type, id, raycaster, trafo, use_back_faces); @@ -688,7 +683,6 @@ public: void set_raycaster_gizmos_on_top(bool value) { m_scene_raycaster.set_gizmos_on_top(value); } -#endif // ENABLE_RAYCAST_PICKING void set_as_dirty(); void requires_check_outside_state() { m_requires_check_outside_state = true; } @@ -1008,11 +1002,7 @@ private: #endif // ENABLE_RENDER_SELECTION_CENTER void _check_and_update_toolbar_icon_scale(); void _render_overlays(); -#if ENABLE_RAYCAST_PICKING void _render_volumes_for_picking(const Camera& camera) const; -#else - void _render_volumes_for_picking() const; -#endif // ENABLE_RAYCAST_PICKING void _render_current_gizmo() const; void _render_gizmos_overlay(); void _render_main_toolbar(); diff --git a/src/slic3r/GUI/GLSelectionRectangle.cpp b/src/slic3r/GUI/GLSelectionRectangle.cpp index a2c93184b..d4b474117 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.cpp +++ b/src/slic3r/GUI/GLSelectionRectangle.cpp @@ -30,21 +30,10 @@ namespace GUI { m_end_corner = mouse_position; } -#if ENABLE_RAYCAST_PICKING std::vector GLSelectionRectangle::contains(const std::vector& points) const -#else - std::vector GLSelectionRectangle::stop_dragging(const GLCanvas3D& canvas, const std::vector& points) -#endif // ENABLE_RAYCAST_PICKING { std::vector out; -#if !ENABLE_RAYCAST_PICKING - if (!is_dragging()) - return out; - - m_state = EState::Off; -#endif // !ENABLE_RAYCAST_PICKING - // bounding box created from the rectangle corners - will take care of order of the corners const BoundingBox rectangle(Points{ Point(m_start_corner.cast()), Point(m_end_corner.cast()) }); diff --git a/src/slic3r/GUI/GLSelectionRectangle.hpp b/src/slic3r/GUI/GLSelectionRectangle.hpp index 16eab222a..ac8abb6aa 100644 --- a/src/slic3r/GUI/GLSelectionRectangle.hpp +++ b/src/slic3r/GUI/GLSelectionRectangle.hpp @@ -26,15 +26,9 @@ public: // To be called on mouse move. void dragging(const Vec2d& mouse_position); -#if ENABLE_RAYCAST_PICKING // Given a vector of points in world coordinates, the function returns indices of those // that are in the rectangle. std::vector contains(const std::vector& points) const; -#else - // Given a vector of points in world coordinates, the function returns indices of those - // that are in the rectangle. It then disables the rectangle. - std::vector stop_dragging(const GLCanvas3D& canvas, const std::vector& points); -#endif // ENABLE_RAYCAST_PICKING // Disables the rectangle. void stop_dragging(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp index f4200f834..a3829fc21 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.cpp @@ -18,29 +18,16 @@ const float GLGizmoBase::Grabber::SizeFactor = 0.05f; const float GLGizmoBase::Grabber::MinHalfSize = 1.5f; const float GLGizmoBase::Grabber::DraggingScaleFactor = 1.25f; -#if ENABLE_RAYCAST_PICKING PickingModel GLGizmoBase::Grabber::s_cube; PickingModel GLGizmoBase::Grabber::s_cone; -#else -GLModel GLGizmoBase::Grabber::s_cube; -GLModel GLGizmoBase::Grabber::s_cone; -#endif // ENABLE_RAYCAST_PICKING GLGizmoBase::Grabber::~Grabber() { -#if ENABLE_RAYCAST_PICKING if (s_cube.model.is_initialized()) s_cube.model.reset(); if (s_cone.model.is_initialized()) s_cone.model.reset(); -#else - if (s_cube.is_initialized()) - s_cube.reset(); - - if (s_cone.is_initialized()) - s_cone.reset(); -#endif // ENABLE_RAYCAST_PICKING } float GLGizmoBase::Grabber::get_half_size(float size) const @@ -53,7 +40,6 @@ float GLGizmoBase::Grabber::get_dragging_half_size(float size) const return get_half_size(size) * DraggingScaleFactor; } -#if ENABLE_RAYCAST_PICKING void GLGizmoBase::Grabber::register_raycasters_for_picking(int id) { picking_id = id; @@ -66,13 +52,8 @@ void GLGizmoBase::Grabber::unregister_raycasters_for_picking() picking_id = -1; raycasters = { nullptr }; } -#endif // ENABLE_RAYCAST_PICKING -#if ENABLE_RAYCAST_PICKING void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color) -#else -void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, bool picking) -#endif // ENABLE_RAYCAST_PICKING { #if ENABLE_LEGACY_OPENGL_REMOVAL GLShaderProgram* shader = wxGetApp().get_current_shader(); @@ -80,69 +61,41 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo return; #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING if (!s_cube.model.is_initialized()) { -#else - if (!s_cube.is_initialized()) { -#endif // ENABLE_RAYCAST_PICKING // This cannot be done in constructor, OpenGL is not yet // initialized at that point (on Linux at least). indexed_triangle_set its = its_make_cube(1.0, 1.0, 1.0); its_translate(its, -0.5f * Vec3f::Ones()); #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING s_cube.model.init_from(its); s_cube.mesh_raycaster = std::make_unique(std::make_shared(std::move(its))); -#else - s_cube.init_from(its); -#endif // ENABLE_RAYCAST_PICKING #else s_cube.init_from(its, BoundingBoxf3{ { -0.5, -0.5, -0.5 }, { 0.5, 0.5, 0.5 } }); #endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_RAYCAST_PICKING if (!s_cone.model.is_initialized()) { indexed_triangle_set its = its_make_cone(0.375, 1.5, double(PI) / 18.0); s_cone.model.init_from(its); s_cone.mesh_raycaster = std::make_unique(std::make_shared(std::move(its))); } -#else - if (!s_cone.is_initialized()) - s_cone.init_from(its_make_cone(0.375, 1.5, double(PI) / 18.0)); -#endif // ENABLE_RAYCAST_PICKING const float half_size = dragging ? get_dragging_half_size(size) : get_half_size(size); #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING s_cube.model.set_color(render_color); s_cone.model.set_color(render_color); -#else - s_cube.set_color(render_color); - s_cone.set_color(render_color); -#endif // ENABLE_RAYCAST_PICKING const Camera& camera = wxGetApp().plater()->get_camera(); shader->set_uniform("projection_matrix", camera.get_projection_matrix()); -#if ENABLE_RAYCAST_PICKING const Transform3d& view_matrix = camera.get_view_matrix(); const Matrix3d view_matrix_no_offset = view_matrix.matrix().block(0, 0, 3, 3); std::vector elements_matrices(GRABBER_ELEMENTS_MAX_COUNT, Transform3d::Identity()); elements_matrices[0] = matrix * Geometry::translation_transform(center) * Geometry::rotation_transform(angles) * Geometry::scale_transform(2.0 * half_size); Transform3d view_model_matrix = view_matrix * elements_matrices[0]; -#else - const Transform3d& view_matrix = camera.get_view_matrix(); - const Transform3d model_matrix = matrix * Geometry::translation_transform(center) * Geometry::rotation_transform(angles) * Geometry::scale_transform(2.0 * half_size); - const Transform3d view_model_matrix = view_matrix * model_matrix; -#endif // ENABLE_RAYCAST_PICKING shader->set_uniform("view_model_matrix", view_model_matrix); -#if ENABLE_RAYCAST_PICKING Matrix3d view_normal_matrix = view_matrix_no_offset * elements_matrices[0].matrix().block(0, 0, 3, 3).inverse().transpose(); -#else - const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); -#endif // ENABLE_RAYCAST_PICKING shader->set_uniform("view_normal_matrix", view_normal_matrix); #else s_cube.set_color(-1, render_color); @@ -154,7 +107,6 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo glsafe(::glRotated(Geometry::rad2deg(angles.x()), 1.0, 0.0, 0.0)); glsafe(::glScaled(2.0 * half_size, 2.0 * half_size, 2.0 * half_size)); #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING s_cube.model.render(); auto render_extension = [&view_matrix, &view_matrix_no_offset, shader](const Transform3d& matrix) { @@ -164,64 +116,31 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo shader->set_uniform("view_normal_matrix", view_normal_matrix); s_cone.model.render(); }; -#else - s_cube.render(); -#endif // ENABLE_RAYCAST_PICKING #if ENABLE_LEGACY_OPENGL_REMOVAL if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) { -#if ENABLE_RAYCAST_PICKING elements_matrices[1] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, 0.5 * double(PI), 0.0 }); render_extension(elements_matrices[1]); -#else - shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, 0.5 * double(PI), 0.0 })); - s_cone.render(); -#endif // ENABLE_RAYCAST_PICKING } if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegX)) != 0) { -#if ENABLE_RAYCAST_PICKING elements_matrices[2] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, -0.5 * double(PI), 0.0 }); render_extension(elements_matrices[2]); -#else - shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(-Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, -0.5 * double(PI), 0.0 })); - s_cone.render(); -#endif // ENABLE_RAYCAST_PICKING } if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosY)) != 0) { -#if ENABLE_RAYCAST_PICKING elements_matrices[3] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitY()) * Geometry::rotation_transform({ -0.5 * double(PI), 0.0, 0.0 }); render_extension(elements_matrices[3]); -#else - shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(Vec3d::UnitY()) * Geometry::rotation_transform({ -0.5 * double(PI), 0.0, 0.0 })); - s_cone.render(); -#endif // ENABLE_RAYCAST_PICKING } if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegY)) != 0) { -#if ENABLE_RAYCAST_PICKING elements_matrices[4] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitY()) * Geometry::rotation_transform({ 0.5 * double(PI), 0.0, 0.0 }); render_extension(elements_matrices[4]); -#else - shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(-Vec3d::UnitY())* Geometry::rotation_transform({ 0.5 * double(PI), 0.0, 0.0 })); - s_cone.render(); -#endif // ENABLE_RAYCAST_PICKING } if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosZ)) != 0) { -#if ENABLE_RAYCAST_PICKING elements_matrices[5] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitZ()); render_extension(elements_matrices[5]); -#else - shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(Vec3d::UnitZ())); - s_cone.render(); -#endif // ENABLE_RAYCAST_PICKING } if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegZ)) != 0) { -#if ENABLE_RAYCAST_PICKING elements_matrices[6] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitZ()) * Geometry::rotation_transform({ double(PI), 0.0, 0.0 }); - render_extension(elements_matrices[6]); -#else - shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(-Vec3d::UnitZ())* Geometry::rotation_transform({ double(PI), 0.0, 0.0 })); - s_cone.render(); -#endif // ENABLE_RAYCAST_PICKING + render_extension(elements_matrices[6]); } #else if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) { @@ -270,7 +189,6 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo glsafe(::glPopMatrix()); #endif // !ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING if (raycasters[0] == nullptr) { GLCanvas3D& canvas = *wxGetApp().plater()->canvas3D(); raycasters[0] = canvas.add_raycaster_for_picking(SceneRaycaster::EType::Gizmo, picking_id, *s_cube.mesh_raycaster, elements_matrices[0]); @@ -293,7 +211,6 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo raycasters[i]->set_transform(elements_matrices[i]); } } -#endif // ENABLE_RAYCAST_PICKING } GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id) @@ -327,7 +244,6 @@ bool GLGizmoBase::update_items_state() return res; } -#if ENABLE_RAYCAST_PICKING void GLGizmoBase::register_grabbers_for_picking() { for (size_t i = 0; i < m_grabbers.size(); ++i) { @@ -341,16 +257,6 @@ void GLGizmoBase::unregister_grabbers_for_picking() m_grabbers[i].unregister_raycasters_for_picking(); } } -#else -ColorRGBA GLGizmoBase::picking_color_component(unsigned int id) const -{ - id = BASE_ID - id; - if (m_group_id > -1) - id -= m_group_id; - - return picking_decode(id); -} -#endif // ENABLE_RAYCAST_PICKING void GLGizmoBase::render_grabbers(const BoundingBoxf3& box) const { @@ -371,29 +277,6 @@ void GLGizmoBase::render_grabbers(float size) const shader->stop_using(); } -#if !ENABLE_RAYCAST_PICKING -void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const -{ -#if ENABLE_LEGACY_OPENGL_REMOVAL - GLShaderProgram* shader = wxGetApp().get_shader("flat"); - if (shader != nullptr) { - shader->start_using(); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - const float mean_size = float((box.size().x() + box.size().y() + box.size().z()) / 3.0); - - for (unsigned int i = 0; i < (unsigned int)m_grabbers.size(); ++i) { - if (m_grabbers[i].enabled) { - m_grabbers[i].color = picking_color_component(i); - m_grabbers[i].render_for_picking(mean_size); - } - } -#if ENABLE_LEGACY_OPENGL_REMOVAL - shader->stop_using(); - } -#endif // ENABLE_LEGACY_OPENGL_REMOVAL -} -#endif // !ENABLE_RAYCAST_PICKING - // help function to process grabbers // call start_dragging, stop_dragging, on_dragging bool GLGizmoBase::use_grabbers(const wxMouseEvent &mouse_event) { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp index 1d134948d..3c3f5c287 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoBase.hpp @@ -6,10 +6,8 @@ #include "slic3r/GUI/I18N.hpp" #include "slic3r/GUI/GLModel.hpp" -#if ENABLE_RAYCAST_PICKING #include "slic3r/GUI/MeshUtils.hpp" #include "slic3r/GUI/SceneRaycaster.hpp" -#endif // ENABLE_RAYCAST_PICKING #include @@ -73,44 +71,26 @@ protected: #endif // ENABLE_LEGACY_OPENGL_REMOVAL ColorRGBA color{ ColorRGBA::WHITE() }; EGrabberExtension extensions{ EGrabberExtension::None }; -#if ENABLE_RAYCAST_PICKING // the picking id shared by all the elements int picking_id{ -1 }; std::array, GRABBER_ELEMENTS_MAX_COUNT> raycasters = { nullptr }; -#endif // ENABLE_RAYCAST_PICKING Grabber() = default; ~Grabber(); -#if ENABLE_RAYCAST_PICKING void render(bool hover, float size) { render(size, hover ? complementary(color) : color); } -#else - void render(bool hover, float size) { render(size, hover ? complementary(color) : color, false); } - void render_for_picking(float size) { render(size, color, true); } -#endif // ENABLE_RAYCAST_PICKING float get_half_size(float size) const; float get_dragging_half_size(float size) const; -#if ENABLE_RAYCAST_PICKING void register_raycasters_for_picking(int id); void unregister_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING private: -#if ENABLE_RAYCAST_PICKING void render(float size, const ColorRGBA& render_color); -#else - void render(float size, const ColorRGBA& render_color, bool picking); -#endif // ENABLE_RAYCAST_PICKING -#if ENABLE_RAYCAST_PICKING static PickingModel s_cube; static PickingModel s_cone; -#else - static GLModel s_cube; - static GLModel s_cone; -#endif // ENABLE_RAYCAST_PICKING }; public: @@ -186,9 +166,6 @@ public: bool update_items_state(); void render() { on_render(); } -#if !ENABLE_RAYCAST_PICKING - void render_for_picking() { on_render_for_picking(); } -#endif // !ENABLE_RAYCAST_PICKING void render_input_window(float x, float y, float bottom_limit); /// @@ -210,10 +187,8 @@ public: /// Return True when use the information and don't want to propagate it otherwise False. virtual bool on_mouse(const wxMouseEvent &mouse_event) { return false; } -#if ENABLE_RAYCAST_PICKING void register_raycasters_for_picking() { register_grabbers_for_picking(); on_register_raycasters_for_picking(); } void unregister_raycasters_for_picking() { unregister_grabbers_for_picking(); on_unregister_raycasters_for_picking(); } -#endif // ENABLE_RAYCAST_PICKING virtual bool is_in_editing_mode() const { return false; } virtual bool is_selection_rectangle_dragging() const { return false; } @@ -237,27 +212,15 @@ protected: virtual void on_dragging(const UpdateData& data) {} virtual void on_render() = 0; -#if !ENABLE_RAYCAST_PICKING - virtual void on_render_for_picking() = 0; -#endif // !ENABLE_RAYCAST_PICKING virtual void on_render_input_window(float x, float y, float bottom_limit) {} -#if ENABLE_RAYCAST_PICKING void register_grabbers_for_picking(); void unregister_grabbers_for_picking(); virtual void on_register_raycasters_for_picking() {} virtual void on_unregister_raycasters_for_picking() {} -#else - // 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; -#endif // ENABLE_RAYCAST_PICKING void render_grabbers(const BoundingBoxf3& box) const; void render_grabbers(float size) const; -#if !ENABLE_RAYCAST_PICKING - void render_grabbers_for_picking(const BoundingBoxf3& box) const; -#endif // !ENABLE_RAYCAST_PICKING std::string format(float value, unsigned int decimals) const; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index 7a853e718..542aceead 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -600,18 +600,12 @@ void GLGizmoEmboss::on_render() { } } -#if ENABLE_RAYCAST_PICKING void GLGizmoEmboss::on_register_raycasters_for_picking(){ m_rotate_gizmo.register_raycasters_for_picking(); } void GLGizmoEmboss::on_unregister_raycasters_for_picking(){ m_rotate_gizmo.unregister_raycasters_for_picking(); } -#else // !ENABLE_RAYCAST_PICKING -void GLGizmoEmboss::on_render_for_picking() { - m_rotate_gizmo.render_for_picking(); -} -#endif // ENABLE_RAYCAST_PICKING #ifdef SHOW_FINE_POSITION // draw suggested position of window diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp index 092041e96..fe3ccf73b 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.hpp @@ -56,12 +56,8 @@ protected: bool on_init() override; std::string on_get_name() const override; void on_render() override; -#if ENABLE_RAYCAST_PICKING virtual void on_register_raycasters_for_picking() override; virtual void on_unregister_raycasters_for_picking() override; -#else // !ENABLE_RAYCAST_PICKING - void on_render_for_picking() override; -#endif // ENABLE_RAYCAST_PICKING void on_render_input_window(float x, float y, float bottom_limit) override; bool on_is_activable() const override { return true; } bool on_is_selectable() const override { return false; } diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp index ddabec7e6..463eb3182 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.cpp @@ -131,14 +131,9 @@ void GLGizmoFlatten::on_render() update_planes(); for (int i = 0; i < (int)m_planes.size(); ++i) { #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_planes_casters[i]->set_transform(model_matrix); m_planes[i].vbo.model.set_color(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR : DEFAULT_PLANE_COLOR); m_planes[i].vbo.model.render(); -#else - m_planes[i].vbo.set_color(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR : DEFAULT_PLANE_COLOR); - m_planes[i].vbo.render(); -#endif // ENABLE_RAYCAST_PICKING #else glsafe(::glColor4fv(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR.data() : DEFAULT_PLANE_COLOR.data())); if (m_planes[i].vbo.has_VBOs()) @@ -158,7 +153,6 @@ void GLGizmoFlatten::on_render() #endif // ENABLE_LEGACY_OPENGL_REMOVAL } -#if ENABLE_RAYCAST_PICKING void GLGizmoFlatten::on_register_raycasters_for_picking() { // the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account @@ -183,66 +177,12 @@ void GLGizmoFlatten::on_unregister_raycasters_for_picking() m_parent.set_raycaster_gizmos_on_top(false); m_planes_casters.clear(); } -#else -void GLGizmoFlatten::on_render_for_picking() -{ - const Selection& selection = m_parent.get_selection(); - -#if ENABLE_LEGACY_OPENGL_REMOVAL - GLShaderProgram* shader = wxGetApp().get_shader("flat"); - if (shader == nullptr) - return; - - shader->start_using(); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - - glsafe(::glDisable(GL_DEPTH_TEST)); - glsafe(::glDisable(GL_BLEND)); - - if (selection.is_single_full_instance() && !wxGetKeyState(WXK_CONTROL)) { - const Transform3d& m = selection.get_first_volume()->get_instance_transformation().get_matrix(); -#if ENABLE_LEGACY_OPENGL_REMOVAL - const Camera& camera = wxGetApp().plater()->get_camera(); - const Transform3d view_model_matrix = camera.get_view_matrix() * - Geometry::translation_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) * m; - - shader->set_uniform("view_model_matrix", view_model_matrix); - shader->set_uniform("projection_matrix", camera.get_projection_matrix()); -#else - glsafe(::glPushMatrix()); - glsafe(::glTranslatef(0.f, 0.f, selection.get_first_volume()->get_sla_shift_z())); - glsafe(::glMultMatrixd(m.data())); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - if (this->is_plane_update_necessary()) - update_planes(); - for (int i = 0; i < (int)m_planes.size(); ++i) { -#if ENABLE_LEGACY_OPENGL_REMOVAL - m_planes[i].vbo.set_color(picking_color_component(i)); -#else - glsafe(::glColor4fv(picking_color_component(i).data())); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - m_planes[i].vbo.render(); - } -#if !ENABLE_LEGACY_OPENGL_REMOVAL - glsafe(::glPopMatrix()); -#endif // !ENABLE_LEGACY_OPENGL_REMOVAL - } - - glsafe(::glEnable(GL_CULL_FACE)); - -#if ENABLE_LEGACY_OPENGL_REMOVAL - shader->stop_using(); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL -} -#endif // ENABLE_RAYCAST_PICKING void GLGizmoFlatten::set_flattening_data(const ModelObject* model_object) { if (model_object != m_old_model_object) { m_planes.clear(); -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING } } @@ -259,9 +199,7 @@ void GLGizmoFlatten::update_planes() } ch = ch.convex_hull_3d(); m_planes.clear(); -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING #if ENABLE_WORLD_COORDINATE const Transform3d inst_matrix = mo->instances.front()->get_matrix_no_offset(); #else @@ -458,7 +396,6 @@ void GLGizmoFlatten::update_planes() // the vertices in order, so triangulation is trivial. for (auto& plane : m_planes) { #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING indexed_triangle_set its; its.vertices.reserve(plane.vertices.size()); its.indices.reserve(plane.vertices.size() / 3); @@ -470,18 +407,6 @@ void GLGizmoFlatten::update_planes() } plane.vbo.model.init_from(its); plane.vbo.mesh_raycaster = std::make_unique(std::make_shared(std::move(its))); -#else - GLModel::Geometry init_data; - init_data.format = { GLModel::Geometry::EPrimitiveType::TriangleFan, GLModel::Geometry::EVertexLayout::P3N3 }; - init_data.reserve_vertices(plane.vertices.size()); - init_data.reserve_indices(plane.vertices.size()); - // vertices + indices - for (size_t i = 0; i < plane.vertices.size(); ++i) { - init_data.add_vertex((Vec3f)plane.vertices[i].cast(), (Vec3f)plane.normal.cast()); - init_data.add_index((unsigned int)i); - } - plane.vbo.init_from(std::move(init_data)); -#endif // ENABLE_RAYCAST_PICKING #else plane.vbo.reserve(plane.vertices.size()); for (const auto& vert : plane.vertices) @@ -496,12 +421,9 @@ void GLGizmoFlatten::update_planes() plane.vertices.shrink_to_fit(); } -#if ENABLE_RAYCAST_PICKING on_register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING } - bool GLGizmoFlatten::is_plane_update_necessary() const { const ModelObject* mo = m_c->selection_info()->model_object(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp index b4e47d398..900a3361d 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFlatten.hpp @@ -4,9 +4,7 @@ #include "GLGizmoBase.hpp" #if ENABLE_LEGACY_OPENGL_REMOVAL #include "slic3r/GUI/GLModel.hpp" -#if ENABLE_RAYCAST_PICKING #include "slic3r/GUI/MeshUtils.hpp" -#endif // ENABLE_RAYCAST_PICKING #else #include "slic3r/GUI/3DScene.hpp" #endif // ENABLE_LEGACY_OPENGL_REMOVAL @@ -30,19 +28,13 @@ private: struct PlaneData { std::vector vertices; // should be in fact local in update_planes() #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING PickingModel vbo; -#else - GLModel vbo; -#endif // ENABLE_RAYCAST_PICKING #else GLIndexedVertexArray vbo; #endif // ENABLE_LEGACY_OPENGL_REMOVAL Vec3d normal; float area; -#if ENABLE_RAYCAST_PICKING int picking_id{ -1 }; -#endif // ENABLE_RAYCAST_PICKING }; // This holds information to decide whether recalculation is necessary: @@ -52,9 +44,7 @@ private: Vec3d m_first_instance_mirror; std::vector m_planes; -#if ENABLE_RAYCAST_PICKING std::vector> m_planes_casters; -#endif // ENABLE_RAYCAST_PICKING bool m_mouse_left_down = false; // for detection left_up of this gizmo const ModelObject* m_old_model_object = nullptr; @@ -79,12 +69,8 @@ protected: std::string on_get_name() const override; bool on_is_activable() const override; void on_render() override; -#if ENABLE_RAYCAST_PICKING virtual void on_register_raycasters_for_picking() override; virtual void on_unregister_raycasters_for_picking() override; -#else - void on_render_for_picking() override; -#endif // ENABLE_RAYCAST_PICKING void on_set_state() override; CommonGizmosDataID on_get_requirements() const override; }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp index 51ea56c82..be04fb92c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.cpp @@ -55,12 +55,10 @@ void GLGizmoHollow::data_changed() } if (m_c->hollowed_mesh() && m_c->hollowed_mesh()->get_hollowed_mesh()) m_holes_in_drilled_mesh = mo->sla_drain_holes; -#if ENABLE_RAYCAST_PICKING if (m_raycasters.empty()) on_register_raycasters_for_picking(); else update_raycasters_for_picking_transform(); -#endif // ENABLE_RAYCAST_PICKING } } @@ -68,11 +66,6 @@ void GLGizmoHollow::data_changed() void GLGizmoHollow::on_render() { -#if !ENABLE_RAYCAST_PICKING - if (!m_cylinder.is_initialized()) - m_cylinder.init_from(its_make_cylinder(1.0, 1.0)); -#endif // !ENABLE_RAYCAST_PICKING - const Selection& selection = m_parent.get_selection(); const CommonGizmosDataObjects::SelectionInfo* sel_info = m_c->selection_info(); @@ -88,11 +81,7 @@ void GLGizmoHollow::on_render() glsafe(::glEnable(GL_DEPTH_TEST)); if (selection.is_from_single_instance()) -#if ENABLE_RAYCAST_PICKING render_points(selection); -#else - render_points(selection, false); -#endif // ENABLE_RAYCAST_PICKING m_selection_rectangle.render(m_parent); m_c->object_clipper()->render_cut(); @@ -101,7 +90,6 @@ void GLGizmoHollow::on_render() glsafe(::glDisable(GL_BLEND)); } -#if ENABLE_RAYCAST_PICKING void GLGizmoHollow::on_register_raycasters_for_picking() { assert(m_raycasters.empty()); @@ -126,27 +114,11 @@ void GLGizmoHollow::on_unregister_raycasters_for_picking() m_raycasters.clear(); set_sla_auxiliary_volumes_picking_state(true); } -#else -void GLGizmoHollow::on_render_for_picking() -{ - const Selection& selection = m_parent.get_selection(); - glsafe(::glEnable(GL_DEPTH_TEST)); - render_points(selection, true); -} -#endif // ENABLE_RAYCAST_PICKING -#if ENABLE_RAYCAST_PICKING void GLGizmoHollow::render_points(const Selection& selection) -#else -void GLGizmoHollow::render_points(const Selection& selection, bool picking) -#endif // ENABLE_RAYCAST_PICKING { #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#else - GLShaderProgram* shader = picking ? wxGetApp().get_shader("flat") : wxGetApp().get_shader("gouraud_light"); -#endif // ENABLE_RAYCAST_PICKING if (shader == nullptr) return; @@ -188,41 +160,24 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) const sla::DrainHole& drain_hole = drain_holes[i]; const bool point_selected = m_selected[i]; -#if ENABLE_RAYCAST_PICKING const bool clipped = is_mesh_point_clipped(drain_hole.pos.cast()); m_raycasters[i]->set_active(!clipped); if (clipped) continue; -#else - if (is_mesh_point_clipped(drain_hole.pos.cast())) - continue; -#endif // ENABLE_RAYCAST_PICKING // First decide about the color of the point. -#if !ENABLE_RAYCAST_PICKING - if (picking) - render_color = picking_color_component(i); - else { -#endif // !ENABLE_RAYCAST_PICKING - if (size_t(m_hover_id) == i) - render_color = ColorRGBA::CYAN(); - else if (m_c->hollowed_mesh() && - i < m_c->hollowed_mesh()->get_drainholes().size() && - m_c->hollowed_mesh()->get_drainholes()[i].failed) { - render_color = { 1.0f, 0.0f, 0.0f, 0.5f }; - } - else - render_color = point_selected ? ColorRGBA(1.0f, 0.3f, 0.3f, 0.5f) : ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f); -#if !ENABLE_RAYCAST_PICKING - } -#endif // !ENABLE_RAYCAST_PICKING + if (size_t(m_hover_id) == i) + render_color = ColorRGBA::CYAN(); + else if (m_c->hollowed_mesh() && + i < m_c->hollowed_mesh()->get_drainholes().size() && + m_c->hollowed_mesh()->get_drainholes()[i].failed) { + render_color = { 1.0f, 0.0f, 0.0f, 0.5f }; + } + else + render_color = point_selected ? ColorRGBA(1.0f, 0.3f, 0.3f, 0.5f) : ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f); #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_cylinder.model.set_color(render_color); -#else - m_cylinder.set_color(render_color); -#endif // ENABLE_RAYCAST_PICKING // Inverse matrix of the instance scaling is applied so that the mark does not scale with the object. const Transform3d hole_matrix = Geometry::translation_transform(drain_hole.pos.cast()) * instance_scaling_matrix_inverse; #else @@ -251,11 +206,7 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking) glsafe(::glTranslated(0., 0., -drain_hole.height)); glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength)); #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_cylinder.model.render(); -#else - m_cylinder.render(); -#endif // ENABLE_RAYCAST_PICKING if (vol->is_left_handed()) glsafe(::glFrontFace(GL_CCW)); @@ -382,10 +333,8 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos assert(m_selected.size() == mo->sla_drain_holes.size()); m_parent.set_as_dirty(); m_wait_for_up_event = true; -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); on_register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING } else return false; @@ -410,12 +359,8 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos // Now ask the rectangle which of the points are inside. std::vector points_inside; -#if ENABLE_RAYCAST_PICKING std::vector points_idxs = m_selection_rectangle.contains(points); m_selection_rectangle.stop_dragging(); -#else - std::vector points_idxs = m_selection_rectangle.stop_dragging(m_parent, points); -#endif // ENABLE_RAYCAST_PICKING for (size_t idx : points_idxs) points_inside.push_back(points[idx].cast()); @@ -509,10 +454,8 @@ void GLGizmoHollow::delete_selected_points() } } -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); on_register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING select_point(NoPoints); } @@ -588,7 +531,6 @@ void GLGizmoHollow::hollow_mesh(bool postpone_error_messages) }); } -#if ENABLE_RAYCAST_PICKING void GLGizmoHollow::set_sla_auxiliary_volumes_picking_state(bool state) { std::vector>* raycasters = m_parent.get_raycasters_for_picking(SceneRaycaster::EType::Volume); @@ -630,7 +572,6 @@ void GLGizmoHollow::update_raycasters_for_picking_transform() } } } -#endif // ENABLE_RAYCAST_PICKING std::vector> GLGizmoHollow::get_config_options(const std::vector& keys) const @@ -900,11 +841,9 @@ RENDER_AGAIN: bool show_sups = m_c->instances_hider()->are_supports_shown(); if (m_imgui->checkbox(m_desc["show_supports"], show_sups)) { m_c->instances_hider()->show_supports(show_sups); -#if ENABLE_RAYCAST_PICKING if (show_sups) // ensure supports and pad are disabled from picking even when they are visible set_sla_auxiliary_volumes_picking_state(false); -#endif // ENABLE_RAYCAST_PICKING force_refresh = true; } @@ -1100,7 +1039,6 @@ void GLGizmoHollow::on_set_hover_id() m_hover_id = -1; } -#if ENABLE_RAYCAST_PICKING void GLGizmoHollow::init_cylinder_model() { if (!m_cylinder.model.is_initialized()) { @@ -1109,7 +1047,6 @@ void GLGizmoHollow::init_cylinder_model() m_cylinder.mesh_raycaster = std::make_unique(std::make_shared(std::move(its))); } } -#endif // ENABLE_RAYCAST_PICKING diff --git a/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp b/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp index 0fdc3b2db..ea88c4291 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoHollow.hpp @@ -46,33 +46,19 @@ public: protected: bool on_init() override; void on_render() override; -#if ENABLE_RAYCAST_PICKING virtual void on_register_raycasters_for_picking() override; virtual void on_unregister_raycasters_for_picking() override; -#else - void on_render_for_picking() override; -#endif // ENABLE_RAYCAST_PICKING private: -#if ENABLE_RAYCAST_PICKING void render_points(const Selection& selection); -#else - void render_points(const Selection& selection, bool picking = false); -#endif // ENABLE_RAYCAST_PICKING void hollow_mesh(bool postpone_error_messages = false); -#if ENABLE_RAYCAST_PICKING void set_sla_auxiliary_volumes_picking_state(bool state); void update_raycasters_for_picking_transform(); -#endif // ENABLE_RAYCAST_PICKING ObjectID m_old_mo_id = -1; -#if ENABLE_RAYCAST_PICKING PickingModel m_cylinder; std::vector> m_raycasters; -#else - GLModel m_cylinder; -#endif // ENABLE_RAYCAST_PICKING float m_new_hole_radius = 2.f; // Size of a new hole. float m_new_hole_height = 6.f; @@ -128,9 +114,7 @@ protected: void on_load(cereal::BinaryInputArchive& ar) override; void on_save(cereal::BinaryOutputArchive& ar) const override; -#if ENABLE_RAYCAST_PICKING void init_cylinder_model(); -#endif // ENABLE_RAYCAST_PICKING }; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp index 23edd6143..bb5ebfd26 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.cpp @@ -362,7 +362,6 @@ void GLGizmoMove3D::on_render() #endif // ENABLE_WORLD_COORDINATE } -#if ENABLE_RAYCAST_PICKING void GLGizmoMove3D::on_register_raycasters_for_picking() { // the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account @@ -373,32 +372,6 @@ void GLGizmoMove3D::on_unregister_raycasters_for_picking() { m_parent.set_raycaster_gizmos_on_top(false); } -#else -void GLGizmoMove3D::on_render_for_picking() -{ - glsafe(::glDisable(GL_DEPTH_TEST)); - -#if ENABLE_WORLD_COORDINATE -#if ENABLE_LEGACY_OPENGL_REMOVAL - const Transform3d base_matrix = local_transform(m_parent.get_selection()); - for (int i = 0; i < 3; ++i) { - m_grabbers[i].matrix = base_matrix; - } -#else - glsafe(::glPushMatrix()); - transform_to_local(m_parent.get_selection()); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - render_grabbers_for_picking(m_bounding_box); -#if ENABLE_LEGACY_OPENGL_REMOVAL -#else - glsafe(::glPopMatrix()); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL -#else - const BoundingBoxf3& box = m_parent.get_selection().get_bounding_box(); - render_grabbers_for_picking(box); -#endif // ENABLE_WORLD_COORDINATE -} -#endif // ENABLE_RAYCAST_PICKING double GLGizmoMove3D::calc_projection(const UpdateData& data) const { diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp index 7a4d82a41..3a69e86ef 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMove.hpp @@ -62,12 +62,8 @@ protected: void on_stop_dragging() override; void on_dragging(const UpdateData& data) override; void on_render() override; -#if ENABLE_RAYCAST_PICKING virtual void on_register_raycasters_for_picking() override; virtual void on_unregister_raycasters_for_picking() override; -#else - void on_render_for_picking() override; -#endif // ENABLE_RAYCAST_PICKING private: double calc_projection(const UpdateData& data) const; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp index 94aca4fdb..d4261761f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.hpp @@ -138,9 +138,6 @@ private: ObjectID m_old_mo_id; size_t m_old_volumes_size = 0; void on_render() override {} -#if !ENABLE_RAYCAST_PICKING - void on_render_for_picking() override {} -#endif // !ENABLE_RAYCAST_PICKING public: GLGizmoPainterBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp index 6c57df7e5..5b39c0929 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.cpp @@ -256,33 +256,6 @@ void GLGizmoRotate::on_render() #endif // !ENABLE_LEGACY_OPENGL_REMOVAL } -#if !ENABLE_RAYCAST_PICKING -void GLGizmoRotate::on_render_for_picking() -{ - const Selection& selection = m_parent.get_selection(); - - glsafe(::glDisable(GL_DEPTH_TEST)); - -#if ENABLE_LEGACY_OPENGL_REMOVAL - m_grabbers.front().matrix = local_transform(selection); -#else - glsafe(::glPushMatrix()); - transform_to_local(selection); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - -#if ENABLE_WORLD_COORDINATE - render_grabbers_for_picking(m_bounding_box); -#else - const BoundingBoxf3& box = selection.get_bounding_box(); - render_grabbers_for_picking(box); -#endif // ENABLE_WORLD_COORDINATE - -#if !ENABLE_LEGACY_OPENGL_REMOVAL - glsafe(::glPopMatrix()); -#endif // !ENABLE_LEGACY_OPENGL_REMOVAL -} -#endif // !ENABLE_RAYCAST_PICKING - #if ENABLE_WORLD_COORDINATE void GLGizmoRotate::init_data_from_selection(const Selection& selection) { @@ -906,7 +879,6 @@ void GLGizmoRotate3D::on_render() m_gizmos[Z].render(); } -#if ENABLE_RAYCAST_PICKING void GLGizmoRotate3D::on_register_raycasters_for_picking() { // the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account @@ -923,7 +895,6 @@ void GLGizmoRotate3D::on_unregister_raycasters_for_picking() } m_parent.set_raycaster_gizmos_on_top(false); } -#endif // ENABLE_RAYCAST_PICKING GLGizmoRotate3D::RotoptimzeWindow::RotoptimzeWindow(ImGuiWrapper * imgui, State & state, diff --git a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp index cbc0f104b..d117a1219 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoRotate.hpp @@ -98,9 +98,6 @@ protected: void on_start_dragging() override; void on_dragging(const UpdateData &data) override; void on_render() override; -#if !ENABLE_RAYCAST_PICKING - void on_render_for_picking() override; -#endif // !ENABLE_RAYCAST_PICKING private: #if ENABLE_LEGACY_OPENGL_REMOVAL @@ -189,16 +186,8 @@ protected: void on_dragging(const UpdateData &data) override; void on_render() override; -#if ENABLE_RAYCAST_PICKING virtual void on_register_raycasters_for_picking() override; virtual void on_unregister_raycasters_for_picking() override; -#else - void on_render_for_picking() override { - for (GLGizmoRotate& g : m_gizmos) { - g.render_for_picking(); - } - } -#endif // ENABLE_RAYCAST_PICKING void on_render_input_window(float x, float y, float bottom_limit) override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp index 03be5c2f4..42c74594c 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.cpp @@ -650,7 +650,6 @@ void GLGizmoScale3D::on_render() #endif // ENABLE_WORLD_COORDINATE } -#if ENABLE_RAYCAST_PICKING void GLGizmoScale3D::on_register_raycasters_for_picking() { // the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account @@ -661,29 +660,6 @@ void GLGizmoScale3D::on_unregister_raycasters_for_picking() { m_parent.set_raycaster_gizmos_on_top(false); } -#else -void GLGizmoScale3D::on_render_for_picking() -{ - glsafe(::glDisable(GL_DEPTH_TEST)); -#if ENABLE_WORLD_COORDINATE -#if ENABLE_LEGACY_OPENGL_REMOVAL - const Transform3d base_matrix = local_transform(m_parent.get_selection()); - for (int i = 0; i < 10; ++i) { - m_grabbers[i].matrix = base_matrix; - } -#else - glsafe(::glPushMatrix()); - transform_to_local(m_parent.get_selection()); -#endif // ENABLE_LEGACY_OPENGL_REMOVAL - render_grabbers_for_picking(m_bounding_box); -#if !ENABLE_LEGACY_OPENGL_REMOVAL - glsafe(::glPopMatrix()); -#endif // !ENABLE_LEGACY_OPENGL_REMOVAL -#else - render_grabbers_for_picking(m_parent.get_selection().get_bounding_box()); -#endif // ENABLE_WORLD_COORDINATE -} -#endif // !ENABLE_RAYCAST_PICKING #if ENABLE_LEGACY_OPENGL_REMOVAL void GLGizmoScale3D::render_grabbers_connection(unsigned int id_1, unsigned int id_2, const ColorRGBA& color) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp index d51cec815..bf5511528 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoScale.hpp @@ -94,12 +94,8 @@ protected: virtual void on_stop_dragging() override; virtual void on_dragging(const UpdateData& data) override; virtual void on_render() override; -#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 private: #if ENABLE_LEGACY_OPENGL_REMOVAL diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp index 8317b45d7..f95aad495 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSimplify.hpp @@ -38,9 +38,6 @@ protected: // must implement virtual bool on_init() override { return true;}; virtual void on_render() override; -#if !ENABLE_RAYCAST_PICKING - virtual void on_render_for_picking() override{}; -#endif // !ENABLE_RAYCAST_PICKING CommonGizmosDataID on_get_requirements() const override; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp index 1646f31c7..1520a2ef1 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.cpp @@ -22,10 +22,8 @@ #include "libslic3r/PresetBundle.hpp" #include "libslic3r/SLAPrint.hpp" -#if ENABLE_RAYCAST_PICKING static const double CONE_RADIUS = 0.25; static const double CONE_HEIGHT = 0.75; -#endif // ENABLE_RAYCAST_PICKING namespace Slic3r { namespace GUI { @@ -51,12 +49,6 @@ bool GLGizmoSlaSupports::on_init() m_desc["clipping_of_view"] = _L("Clipping of view")+ ": "; m_desc["reset_direction"] = _L("Reset direction"); -#if !ENABLE_RAYCAST_PICKING - m_cone.init_from(its_make_cone(1., 1., 2 * PI / 24)); - m_cylinder.init_from(its_make_cylinder(1., 1., 2 * PI / 24.)); - m_sphere.init_from(its_make_sphere(1., (2 * M_PI) / 24.)); -#endif // !ENABLE_RAYCAST_PICKING - return true; } @@ -79,12 +71,10 @@ void GLGizmoSlaSupports::data_changed() if (mo->sla_points_status == sla::PointsStatus::Generating) get_data_from_backend(); -#if ENABLE_RAYCAST_PICKING if (m_raycasters.empty()) on_register_raycasters_for_picking(); else update_raycasters_for_picking_transform(); -#endif // ENABLE_RAYCAST_PICKING } } @@ -92,7 +82,6 @@ void GLGizmoSlaSupports::data_changed() void GLGizmoSlaSupports::on_render() { -#if ENABLE_RAYCAST_PICKING if (!m_sphere.model.is_initialized()) { indexed_triangle_set its = its_make_sphere(1.0, double(PI) / 12.0); m_sphere.model.init_from(its); @@ -103,12 +92,6 @@ void GLGizmoSlaSupports::on_render() m_cone.model.init_from(its); m_cone.mesh_raycaster = std::make_unique(std::make_shared(std::move(its))); } -#else - if (!m_cone.is_initialized()) - m_cone.init_from(its_make_cone(1.0, 1.0, double(PI) / 12.0)); - if (!m_sphere.is_initialized()) - m_sphere.init_from(its_make_sphere(1.0, double(PI) / 12.0)); -#endif // ENABLE_RAYCAST_PICKING if (!m_cylinder.is_initialized()) m_cylinder.init_from(its_make_cylinder(1.0, 1.0, double(PI) / 12.0)); @@ -127,11 +110,7 @@ void GLGizmoSlaSupports::on_render() glsafe(::glEnable(GL_DEPTH_TEST)); if (selection.is_from_single_instance()) -#if ENABLE_RAYCAST_PICKING render_points(selection); -#else - render_points(selection, false); -#endif // ENABLE_RAYCAST_PICKING m_selection_rectangle.render(m_parent); m_c->object_clipper()->render_cut(); @@ -140,7 +119,6 @@ void GLGizmoSlaSupports::on_render() glsafe(::glDisable(GL_BLEND)); } -#if ENABLE_RAYCAST_PICKING void GLGizmoSlaSupports::on_register_raycasters_for_picking() { assert(m_raycasters.empty()); @@ -161,20 +139,8 @@ void GLGizmoSlaSupports::on_unregister_raycasters_for_picking() m_raycasters.clear(); set_sla_auxiliary_volumes_picking_state(true); } -#else -void GLGizmoSlaSupports::on_render_for_picking() -{ - const Selection& selection = m_parent.get_selection(); - //glsafe(::glEnable(GL_DEPTH_TEST)); - render_points(selection, true); -} -#endif // ENABLE_RAYCAST_PICKING -#if ENABLE_RAYCAST_PICKING void GLGizmoSlaSupports::render_points(const Selection& selection) -#else -void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) -#endif // ENABLE_RAYCAST_PICKING { const size_t cache_size = m_editing_mode ? m_editing_cache.size() : m_normal_cache.size(); @@ -186,11 +152,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) return; #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light"); -#else - GLShaderProgram* shader = wxGetApp().get_shader(picking ? "flat" : "gouraud_light"); -#endif // ENABLE_RAYCAST_PICKING if (shader == nullptr) return; @@ -230,7 +192,6 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) const sla::SupportPoint& support_point = m_editing_mode ? m_editing_cache[i].support_point : m_normal_cache[i]; const bool point_selected = m_editing_mode ? m_editing_cache[i].selected : false; -#if ENABLE_RAYCAST_PICKING const bool clipped = is_mesh_point_clipped(support_point.pos.cast()); if (!m_raycasters.empty()) { m_raycasters[i].first->set_active(!clipped); @@ -238,48 +199,28 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) } if (clipped) continue; -#else - if (is_mesh_point_clipped(support_point.pos.cast())) - continue; -#endif // ENABLE_RAYCAST_PICKING // First decide about the color of the point. -#if !ENABLE_RAYCAST_PICKING - if (picking) - render_color = picking_color_component(i); - else { -#endif // !ENABLE_RAYCAST_PICKING - if (size_t(m_hover_id) == i && m_editing_mode) // ignore hover state unless editing mode is active - render_color = { 0.f, 1.f, 1.f, 1.f }; - else { // neigher hover nor picking - bool supports_new_island = m_lock_unique_islands && support_point.is_new_island; - if (m_editing_mode) { - if (point_selected) - render_color = { 1.f, 0.3f, 0.3f, 1.f}; - else - if (supports_new_island) - render_color = { 0.3f, 0.3f, 1.f, 1.f }; - else - render_color = { 0.7f, 0.7f, 0.7f, 1.f }; - } + if (size_t(m_hover_id) == i && m_editing_mode) // ignore hover state unless editing mode is active + render_color = { 0.f, 1.f, 1.f, 1.f }; + else { // neigher hover nor picking + bool supports_new_island = m_lock_unique_islands && support_point.is_new_island; + if (m_editing_mode) { + if (point_selected) + render_color = { 1.f, 0.3f, 0.3f, 1.f}; else - render_color = { 0.5f, 0.5f, 0.5f, 1.f }; + if (supports_new_island) + render_color = { 0.3f, 0.3f, 1.f, 1.f }; + else + render_color = { 0.7f, 0.7f, 0.7f, 1.f }; } -#if !ENABLE_RAYCAST_PICKING + else + render_color = { 0.5f, 0.5f, 0.5f, 1.f }; } -#endif // !ENABLE_RAYCAST_PICKING #if ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_cone.model.set_color(render_color); m_sphere.model.set_color(render_color); -#else - m_cone.set_color(render_color); - m_sphere.set_color(render_color); -#endif // ENABLE_RAYCAST_PICKING -#if !ENABLE_RAYCAST_PICKING - if (!picking) -#endif // !ENABLE_RAYCAST_PICKING #else m_cone.set_color(-1, render_color); m_sphere.set_color(-1, render_color); @@ -309,19 +250,10 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) Eigen::Quaterniond q; q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast()); const Eigen::AngleAxisd aa(q); -#if !ENABLE_RAYCAST_PICKING - const double cone_radius = 0.25; // mm - const double cone_height = 0.75; -#endif // !ENABLE_RAYCAST_PICKING #if ENABLE_LEGACY_OPENGL_REMOVAL const Transform3d model_matrix = vol->world_matrix() * support_matrix * Transform3d(aa.toRotationMatrix()) * -#if ENABLE_RAYCAST_PICKING Geometry::translation_transform((CONE_HEIGHT + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) * Geometry::rotation_transform({ double(PI), 0.0, 0.0 }) * Geometry::scale_transform({ CONE_RADIUS, CONE_RADIUS, CONE_HEIGHT }); -#else - Geometry::translation_transform((cone_height + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) * - Geometry::rotation_transform({ double(PI), 0.0, 0.0 }), * Geometry::scale_transform({ cone_radius, cone_radius, cone_height }); -#endif // ENABLE_RAYCAST_PICKING shader->set_uniform("view_model_matrix", view_matrix * model_matrix); const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose(); @@ -333,11 +265,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) glsafe(::glRotated(180., 1., 0., 0.)); glsafe(::glScaled(cone_radius, cone_radius, cone_height)); #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_cone.model.render(); -#else - m_cone.render(); -#endif // ENABLE_RAYCAST_PICKING #if !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPopMatrix()); #endif // !ENABLE_LEGACY_OPENGL_REMOVAL @@ -353,11 +281,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) glsafe(::glPushMatrix()); glsafe(::glScaled(radius, radius, radius)); #endif // ENABLE_LEGACY_OPENGL_REMOVAL -#if ENABLE_RAYCAST_PICKING m_sphere.model.render(); -#else - m_sphere.render(); -#endif // ENABLE_RAYCAST_PICKING #if !ENABLE_LEGACY_OPENGL_REMOVAL glsafe(::glPopMatrix()); #endif // !ENABLE_LEGACY_OPENGL_REMOVAL @@ -371,11 +295,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking) } // Now render the drain holes: -#if ENABLE_RAYCAST_PICKING if (has_holes) { -#else - if (has_holes && ! picking) { -#endif // ENABLE_RAYCAST_PICKING render_color = { 0.7f, 0.7f, 0.7f, 0.7f }; #if ENABLE_LEGACY_OPENGL_REMOVAL m_cylinder.set_color(render_color); @@ -544,10 +464,8 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous m_editing_cache.emplace_back(sla::SupportPoint(pos_and_normal.first, m_new_point_head_diameter/2.f, false), false, pos_and_normal.second); m_parent.set_as_dirty(); m_wait_for_up_event = true; -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); on_register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING } else return false; @@ -572,12 +490,8 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous // Now ask the rectangle which of the points are inside. std::vector points_inside; -#if ENABLE_RAYCAST_PICKING std::vector points_idxs = m_selection_rectangle.contains(points); m_selection_rectangle.stop_dragging(); -#else - std::vector points_idxs = m_selection_rectangle.stop_dragging(m_parent, points); -#endif // ENABLE_RAYCAST_PICKING for (size_t idx : points_idxs) points_inside.push_back(points[idx].cast()); @@ -707,10 +621,8 @@ void GLGizmoSlaSupports::delete_selected_points(bool force) } } -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); on_register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING select_point(NoPoints); } @@ -1390,9 +1302,7 @@ void GLGizmoSlaSupports::switch_to_editing_mode() for (const sla::SupportPoint& sp : m_normal_cache) m_editing_cache.emplace_back(sp); select_point(NoPoints); -#if ENABLE_RAYCAST_PICKING on_register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING m_c->instances_hider()->show_supports(false); m_parent.set_as_dirty(); @@ -1406,9 +1316,7 @@ void GLGizmoSlaSupports::disable_editing_mode() wxGetApp().plater()->leave_gizmos_stack(); m_c->instances_hider()->show_supports(true); m_parent.set_as_dirty(); -#if ENABLE_RAYCAST_PICKING on_unregister_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING } wxGetApp().plater()->get_notification_manager()->close_notification_of_type(NotificationType::QuitSLAManualMode); } @@ -1427,7 +1335,6 @@ bool GLGizmoSlaSupports::unsaved_changes() const return false; } -#if ENABLE_RAYCAST_PICKING void GLGizmoSlaSupports::set_sla_auxiliary_volumes_picking_state(bool state) { std::vector>* raycasters = m_parent.get_raycasters_for_picking(SceneRaycaster::EType::Volume); @@ -1473,7 +1380,6 @@ void GLGizmoSlaSupports::update_raycasters_for_picking_transform() } } } -#endif // ENABLE_RAYCAST_PICKING SlaGizmoHelpDialog::SlaGizmoHelpDialog() : wxDialog(nullptr, wxID_ANY, _L("SLA gizmo keyboard shortcuts"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp index 136276803..e8238c888 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoSlaSupports.hpp @@ -81,23 +81,13 @@ public: private: bool on_init() override; void on_render() override; -#if ENABLE_RAYCAST_PICKING virtual void on_register_raycasters_for_picking() override; virtual void on_unregister_raycasters_for_picking() override; -#else - void on_render_for_picking() override; -#endif // ENABLE_RAYCAST_PICKING -#if ENABLE_RAYCAST_PICKING void render_points(const Selection& selection); -#else - void render_points(const Selection& selection, bool picking = false); -#endif // ENABLE_RAYCAST_PICKING bool unsaved_changes() const; -#if ENABLE_RAYCAST_PICKING void set_sla_auxiliary_volumes_picking_state(bool state); void update_raycasters_for_picking_transform(); -#endif // ENABLE_RAYCAST_PICKING bool m_lock_unique_islands = false; bool m_editing_mode = false; // Is editing mode active? @@ -110,14 +100,9 @@ private: std::vector m_normal_cache; // to restore after discarding changes or undo/redo ObjectID m_old_mo_id; -#if ENABLE_RAYCAST_PICKING PickingModel m_sphere; PickingModel m_cone; std::vector, std::shared_ptr>> m_raycasters; -#else - GLModel m_cone; - GLModel m_sphere; -#endif // ENABLE_RAYCAST_PICKING GLModel m_cylinder; // This map holds all translated description texts, so they can be easily referenced during layout calculations diff --git a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp index 11c44113b..b044cc5c8 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosCommon.cpp @@ -359,11 +359,7 @@ void Raycaster::on_update() if (meshes != m_old_meshes) { m_raycasters.clear(); for (const TriangleMesh* mesh : meshes) -#if ENABLE_RAYCAST_PICKING m_raycasters.emplace_back(new MeshRaycaster(std::make_shared(*mesh))); -#else - m_raycasters.emplace_back(new MeshRaycaster(*mesh)); -#endif // ENABLE_RAYCAST_PICKING m_old_meshes = meshes; } } diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index c68a51027..9c0f50c8f 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -339,17 +339,6 @@ void GLGizmosManager::render_painter_gizmo() gizmo->render_painter_gizmo(); } -#if !ENABLE_RAYCAST_PICKING -void GLGizmosManager::render_current_gizmo_for_picking_pass() const -{ - if (! m_enabled || m_current == Undefined) - - return; - - m_gizmos[m_current]->render_for_picking(); -} -#endif // !ENABLE_RAYCAST_PICKING - void GLGizmosManager::render_overlay() { if (!m_enabled) @@ -1132,9 +1121,7 @@ bool GLGizmosManager::activate_gizmo(EType type) if (old_gizmo.get_state() != GLGizmoBase::Off) return false; // gizmo refused to be turned off, do nothing. -#if ENABLE_RAYCAST_PICKING old_gizmo.unregister_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING if (!m_serializing && old_gizmo.wants_enter_leave_snapshots()) Plater::TakeSnapshot @@ -1165,9 +1152,7 @@ bool GLGizmosManager::activate_gizmo(EType type) return false; // gizmo refused to be turned on. } -#if ENABLE_RAYCAST_PICKING new_gizmo.register_raycasters_for_picking(); -#endif // ENABLE_RAYCAST_PICKING // sucessful activation of gizmo return true; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp index 1469c2ef7..b380c55c4 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.hpp @@ -216,9 +216,6 @@ public: bool is_hiding_instances() const; void render_current_gizmo() const; -#if !ENABLE_RAYCAST_PICKING - void render_current_gizmo_for_picking_pass() const; -#endif // !ENABLE_RAYCAST_PICKING void render_painter_gizmo(); void render_overlay(); diff --git a/src/slic3r/GUI/MeshUtils.cpp b/src/slic3r/GUI/MeshUtils.cpp index 68572c801..8ac1af7dc 100644 --- a/src/slic3r/GUI/MeshUtils.cpp +++ b/src/slic3r/GUI/MeshUtils.cpp @@ -370,13 +370,8 @@ Vec3f MeshRaycaster::get_triangle_normal(size_t facet_idx) const return m_normals[facet_idx]; } -#if ENABLE_RAYCAST_PICKING void MeshRaycaster::line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, Vec3d& point, Vec3d& direction) -#else -void MeshRaycaster::line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, - Vec3d& point, Vec3d& direction) -#endif // ENABLE_RAYCAST_PICKING { Matrix4d modelview = camera.get_view_matrix().matrix(); Matrix4d projection= camera.get_projection_matrix().matrix(); @@ -540,7 +535,6 @@ std::vector MeshRaycaster::get_unobscured_idxs(const Geometry::Transfo return out; } -#if ENABLE_RAYCAST_PICKING bool MeshRaycaster::closest_hit(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, Vec3f& position, Vec3f& normal, const ClippingPlane* clipping_plane, size_t* facet_idx) const { @@ -573,7 +567,6 @@ bool MeshRaycaster::closest_hit(const Vec2d& mouse_pos, const Transform3d& trafo return true; } -#endif // ENABLE_RAYCAST_PICKING Vec3f MeshRaycaster::get_closest_point(const Vec3f& point, Vec3f* normal) const { diff --git a/src/slic3r/GUI/MeshUtils.hpp b/src/slic3r/GUI/MeshUtils.hpp index 9db2ed1b1..f1225c4ff 100644 --- a/src/slic3r/GUI/MeshUtils.hpp +++ b/src/slic3r/GUI/MeshUtils.hpp @@ -15,9 +15,7 @@ #include #include -#if ENABLE_RAYCAST_PICKING #include -#endif // ENABLE_RAYCAST_PICKING namespace Slic3r { @@ -61,10 +59,8 @@ public: void set_offset(double offset) { m_data[3] = offset; } double get_offset() const { return m_data[3]; } Vec3d get_normal() const { return Vec3d(m_data[0], m_data[1], m_data[2]); } -#if ENABLE_RAYCAST_PICKING void invert_normal() { m_data[0] *= -1.0; m_data[1] *= -1.0; m_data[2] *= -1.0; } ClippingPlane inverted_normal() const { return ClippingPlane(-get_normal(), get_offset()); } -#endif // ENABLE_RAYCAST_PICKING bool is_active() const { return m_data[3] != DBL_MAX; } static ClippingPlane ClipsNothing() { return ClippingPlane(Vec3d(0., 0., 1.), DBL_MAX); } const std::array& get_data() const { return m_data; } @@ -155,7 +151,6 @@ private: // whether certain points are visible or obscured by the mesh etc. class MeshRaycaster { public: -#if ENABLE_RAYCAST_PICKING explicit MeshRaycaster(std::shared_ptr mesh) : m_mesh(mesh) , m_emesh(*mesh, true) // calculate epsilon for triangle-ray intersection from an average edge length @@ -166,20 +161,6 @@ public: static void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, Vec3d& point, Vec3d& direction); -#else - // The class references extern TriangleMesh, which must stay alive - // during MeshRaycaster existence. - MeshRaycaster(const TriangleMesh& mesh) - : m_emesh(mesh, true) // calculate epsilon for triangle-ray intersection from an average edge length - , m_normals(its_face_normals(mesh.its)) - { - } - - static void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, - Vec3d& point, Vec3d& direction); -// void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera, -// Vec3d& point, Vec3d& direction) const; -#endif // ENABLE_RAYCAST_PICKING // Given a mouse position, this returns true in case it is on the mesh. bool unproject_on_mesh( @@ -208,7 +189,6 @@ public: const ClippingPlane* clipping_plane = nullptr // clipping plane (if active) ) const; -#if ENABLE_RAYCAST_PICKING // Returns true if the ray, built from mouse position and camera direction, intersects the mesh. // In this case, position and normal contain the position and normal, in model coordinates, of the intersection closest to the camera, // depending on the position/orientation of the clipping_plane, if specified @@ -221,7 +201,6 @@ public: const ClippingPlane* clipping_plane = nullptr, // clipping plane (if active) size_t* facet_idx = nullptr // index of the facet hit ) const; -#endif // ENABLE_RAYCAST_PICKING // Given a point in world coords, the method returns closest point on the mesh. // The output is in mesh coords. @@ -234,14 +213,11 @@ public: Vec3f get_triangle_normal(size_t facet_idx) const; private: -#if ENABLE_RAYCAST_PICKING std::shared_ptr m_mesh; -#endif // ENABLE_RAYCAST_PICKING AABBMesh m_emesh; std::vector m_normals; }; -#if ENABLE_RAYCAST_PICKING struct PickingModel { GLModel model; @@ -252,7 +228,6 @@ struct PickingModel mesh_raycaster.reset(); } }; -#endif // ENABLE_RAYCAST_PICKING } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/SceneRaycaster.cpp b/src/slic3r/GUI/SceneRaycaster.cpp index a92c622c1..619e26042 100644 --- a/src/slic3r/GUI/SceneRaycaster.cpp +++ b/src/slic3r/GUI/SceneRaycaster.cpp @@ -4,8 +4,6 @@ #include "Camera.hpp" #include "GUI_App.hpp" -#if ENABLE_RAYCAST_PICKING - namespace Slic3r { namespace GUI { @@ -233,5 +231,3 @@ int SceneRaycaster::decode_id(EType type, int id) { return id - base_id(type); } } // namespace GUI } // namespace Slic3r - -#endif // ENABLE_RAYCAST_PICKING diff --git a/src/slic3r/GUI/SceneRaycaster.hpp b/src/slic3r/GUI/SceneRaycaster.hpp index 2254a2022..3119e6d1e 100644 --- a/src/slic3r/GUI/SceneRaycaster.hpp +++ b/src/slic3r/GUI/SceneRaycaster.hpp @@ -1,8 +1,6 @@ #ifndef slic3r_SceneRaycaster_hpp_ #define slic3r_SceneRaycaster_hpp_ -#if ENABLE_RAYCAST_PICKING - #include "MeshUtils.hpp" #include "GLModel.hpp" #include @@ -115,6 +113,4 @@ private: } // namespace GUI } // namespace Slic3r -#endif // ENABLE_RAYCAST_PICKING - #endif // slic3r_SceneRaycaster_hpp_ diff --git a/src/slic3r/Utils/RaycastManager.cpp b/src/slic3r/Utils/RaycastManager.cpp index 14c76722d..084cf83a6 100644 --- a/src/slic3r/Utils/RaycastManager.cpp +++ b/src/slic3r/Utils/RaycastManager.cpp @@ -26,11 +26,7 @@ void RaycastManager::actualize(const ModelObject *object, const ISkip *skip) }); if (item == m_raycasters.end()) { // add new raycaster -#if ENABLE_RAYCAST_PICKING auto raycaster = std::make_unique(volume->get_mesh_shared_ptr()); -#else // !ENABLE_RAYCAST_PICKING - auto raycaster = std::make_unique(volume->mesh()); -#endif // ENABLE_RAYCAST_PICKING m_raycasters.emplace_back(std::make_pair(oid, std::move(raycaster))); } else { size_t index = item - m_raycasters.begin(); diff --git a/tests/libslic3r/test_color.cpp b/tests/libslic3r/test_color.cpp index 632691669..bb35f5e38 100644 --- a/tests/libslic3r/test_color.cpp +++ b/tests/libslic3r/test_color.cpp @@ -20,20 +20,4 @@ SCENARIO("Color encoding/decoding cycle", "[Color]") { } } -#if !ENABLE_RAYCAST_PICKING -SCENARIO("Color picking encoding/decoding cycle", "[Color]") { - GIVEN("Picking color") { - const ColorRGB src_rgb(static_cast(255), static_cast(127), static_cast(63)); - WHEN("apply encode/decode cycle") { - const unsigned int encoded = picking_encode(src_rgb.r_uchar(), src_rgb.g_uchar(), src_rgb.b_uchar()); - const ColorRGBA res_rgba = picking_decode(encoded); - const bool ret = res_rgba.r_uchar() == src_rgb.r_uchar() && res_rgba.g_uchar() == src_rgb.g_uchar() && res_rgba.b_uchar() == src_rgb.b_uchar(); - THEN("result matches source") { - REQUIRE(ret); - } - } - } -} -#endif // !ENABLE_RAYCAST_PICKING - From 7b569c4eb71e77646bfe7dbe9447cfd8cd516486 Mon Sep 17 00:00:00 2001 From: enricoturri1966 Date: Mon, 5 Dec 2022 13:52:49 +0100 Subject: [PATCH 2/2] Gizmo measure - Do not show distance strict if distance infinite is already shown --- src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp index a2d2518d6..8c4b46826 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeasure.cpp @@ -2051,8 +2051,7 @@ void GLGizmoMeasure::on_render_input_window(float x, float y, float bottom_limit ++measure_row_count; ImGui::PopID(); } - if (measure.distance_strict.has_value() && - (!measure.distance_infinite.has_value() || std::abs(measure.distance_strict->dist - measure.distance_infinite->dist) > EPSILON)) { + if (measure.distance_strict.has_value() && !measure.distance_infinite.has_value()) { double distance = measure.distance_strict->dist; if (use_inches) distance = ObjectManipulation::mm_to_in * distance;