diff --git a/src/libslic3r/SLA/SLACommon.hpp b/src/libslic3r/SLA/SLACommon.hpp index b7e9096001..2931723463 100644 --- a/src/libslic3r/SLA/SLACommon.hpp +++ b/src/libslic3r/SLA/SLACommon.hpp @@ -71,7 +71,6 @@ public: int m_face_id = -1; const EigenMesh3D& m_mesh; Vec3d m_dir; - Vec3d m_source; inline hit_result(const EigenMesh3D& em): m_mesh(em) {} friend class EigenMesh3D; public: diff --git a/src/libslic3r/SLA/SLASupportTreeIGL.cpp b/src/libslic3r/SLA/SLASupportTreeIGL.cpp index 4088217fe0..d3af1eac89 100644 --- a/src/libslic3r/SLA/SLASupportTreeIGL.cpp +++ b/src/libslic3r/SLA/SLASupportTreeIGL.cpp @@ -163,7 +163,6 @@ EigenMesh3D::query_ray_hit(const Vec3d &s, const Vec3d &dir) const hit_result ret(*this); ret.m_t = double(hit.t); ret.m_dir = dir; - ret.m_source = s; if(!std::isinf(hit.t) && !std::isnan(hit.t)) ret.m_face_id = hit.id; return ret; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index 2ee322ebe6..b70ba60e00 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -3411,7 +3411,7 @@ void GLCanvas3D::Gizmos::delete_current_grabber(bool delete_all) GizmosMap::const_iterator it = m_gizmos.find(SlaSupports); if (it != m_gizmos.end()) - reinterpret_cast(it->second)->delete_current_grabber(delete_all); + reinterpret_cast(it->second)->delete_current_point(delete_all); } void GLCanvas3D::Gizmos::render_current_gizmo(const GLCanvas3D::Selection& selection) const diff --git a/src/slic3r/GUI/GLGizmo.cpp b/src/slic3r/GUI/GLGizmo.cpp index 4b0b917e9e..fc7350207b 100644 --- a/src/slic3r/GUI/GLGizmo.cpp +++ b/src/slic3r/GUI/GLGizmo.cpp @@ -1799,7 +1799,8 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const G } } } - m_editing_mode_cache = m_model_object->sla_support_points; // make a copy of ModelObject's support points + if (m_old_model_object != m_model_object) + m_editing_mode_cache = m_model_object->sla_support_points; // make a copy of ModelObject's support points if (m_state == On) { m_parent.toggle_model_objects_visibility(false); m_parent.toggle_model_objects_visibility(true, m_model_object); @@ -1812,21 +1813,7 @@ void GLGizmoSlaSupports::on_render(const GLCanvas3D::Selection& selection) const ::glEnable(GL_BLEND); ::glEnable(GL_DEPTH_TEST); - for (unsigned int i=0; i glmatrix; + Eigen::Matrix glmatrix; glGetFloatv (GL_MODELVIEW_MATRIX, glmatrix.data()); - Eigen::Matrix grabber_pos; + Eigen::Matrix point_pos_4d; for (int j=0; j<3; ++j) - grabber_pos(j) = m_grabbers[i].center(j); - grabber_pos[3] = 1.f; - Eigen::Matrix grabber_world_position = glmatrix * grabber_pos; + point_pos_4d(j) = point_pos(j); + point_pos_4d[3] = 1.f; + Eigen::Matrix grabber_world_position = glmatrix * point_pos_4d; - if (!picking && (m_hover_id == i)) + if (!picking && (m_hover_id == i)) // point is in hover state { - render_color[0] = 1.0f - m_grabbers[i].color[0]; - render_color[1] = 1.0f - m_grabbers[i].color[1]; - render_color[2] = 1.0f - m_grabbers[i].color[2]; + render_color[0] = 0.f; + render_color[1] = 1.0f; + render_color[2] = 1.0f; + } + else { + if (picking) { + render_color[0] = 1.0f; + render_color[1] = 1.0f; + render_color[2] = picking_color_component(i); + } + else { // normal rendering + bool supports_new_island = m_lock_unique_islands && m_editing_mode_cache[i].is_new_island; + if (m_editing_mode) { + render_color[0] = supports_new_island ? 0.f : 1.f; + render_color[1] = 0.f; + render_color[2] = supports_new_island ? 1.f : 0.f; + } + else + for (unsigned char i=0; i<3; ++i) render_color[i] = 0.5f; + } } - else - ::memcpy((void*)render_color, (const void*)m_grabbers[i].color, 3 * sizeof(float)); ::glColor3fv(render_color); ::glPushMatrix(); @@ -1939,14 +1938,8 @@ void GLGizmoSlaSupports::update_mesh() m_AABB = igl::AABB(); m_AABB.init(m_V, m_F); - // we'll now reload Grabbers (selection might have changed): - m_grabbers.clear(); + // we'll now reload support points (selection might have changed): m_editing_mode_cache = m_model_object->sla_support_points; - - for (const sla::SupportPoint& point : m_editing_mode_cache) { - m_grabbers.push_back(Grabber()); - m_grabbers.back().center = point.pos.cast(); - } } Vec3f GLGizmoSlaSupports::unproject_on_mesh(const Vec2d& mouse_pos) @@ -2007,13 +2000,10 @@ void GLGizmoSlaSupports::clicked_on_object(const Vec2d& mouse_position) Vec3f new_pos; try { - new_pos = unproject_on_mesh(mouse_position); // this can throw - we don't want to create a new grabber in that case + new_pos = unproject_on_mesh(mouse_position); // this can throw - we don't want to create a new point in that case } catch (...) { return; } - m_grabbers.push_back(Grabber()); - m_grabbers.back().center = new_pos.cast(); - m_editing_mode_cache.emplace_back(new_pos, m_new_point_head_diameter, false); // This should trigger the support generation @@ -2022,13 +2012,12 @@ void GLGizmoSlaSupports::clicked_on_object(const Vec2d& mouse_position) m_parent.post_event(SimpleEvent(EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS)); } -void GLGizmoSlaSupports::delete_current_grabber(bool delete_all) +void GLGizmoSlaSupports::delete_current_point(bool delete_all) { if (!m_editing_mode && !delete_all) return; if (delete_all) { - m_grabbers.clear(); m_editing_mode_cache.clear(); // This should trigger the support generation @@ -2037,7 +2026,6 @@ void GLGizmoSlaSupports::delete_current_grabber(bool delete_all) else if (m_hover_id != -1) { if (!m_editing_mode_cache[m_hover_id].is_new_island || !m_lock_unique_islands) { - m_grabbers.erase(m_grabbers.begin() + m_hover_id); m_editing_mode_cache.erase(m_editing_mode_cache.begin() + m_hover_id); m_hover_id = -1; @@ -2056,7 +2044,6 @@ void GLGizmoSlaSupports::on_update(const UpdateData& data, const GLCanvas3D::Sel new_pos = unproject_on_mesh(Vec2d((*data.mouse_pos)(0), (*data.mouse_pos)(1))); } catch (...) { return; } - m_grabbers[m_hover_id].center = new_pos.cast(); m_editing_mode_cache[m_hover_id].pos = new_pos; m_editing_mode_cache[m_hover_id].is_new_island = false; // Do not update immediately, wait until the mouse is released. @@ -2161,13 +2148,6 @@ RENDER_AGAIN: if (discard_changes) { m_editing_mode_cache = m_model_object->sla_support_points; m_editing_mode = false; - - m_grabbers.clear(); - for (const sla::SupportPoint& point : m_editing_mode_cache) { - m_grabbers.push_back(Grabber()); - m_grabbers.back().center = point.pos.cast(); - } - force_refresh = true; } } @@ -2183,7 +2163,6 @@ RENDER_AGAIN: force_refresh |= generate; if (generate) { m_model_object->sla_support_points.clear(); - m_grabbers.clear(); m_editing_mode_cache.clear(); wxGetApp().plater()->reslice(); } @@ -2206,7 +2185,7 @@ RENDER_AGAIN: if (remove_all_points) { force_refresh = false; m_parent.reload_scene(true); - delete_current_grabber(true); + delete_current_point(true); if (first_run) { first_run = false; goto RENDER_AGAIN; diff --git a/src/slic3r/GUI/GLGizmo.hpp b/src/slic3r/GUI/GLGizmo.hpp index 06ef4b0d26..060be6fbbe 100644 --- a/src/slic3r/GUI/GLGizmo.hpp +++ b/src/slic3r/GUI/GLGizmo.hpp @@ -464,7 +464,7 @@ public: virtual ~GLGizmoSlaSupports(); void set_sla_support_data(ModelObject* model_object, const GLCanvas3D::Selection& selection); void clicked_on_object(const Vec2d& mouse_position); - void delete_current_grabber(bool delete_all); + void delete_current_point(bool delete_all); private: bool on_init(); @@ -472,7 +472,7 @@ private: virtual void on_render(const GLCanvas3D::Selection& selection) const; virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const; - void render_grabbers(const GLCanvas3D::Selection& selection, bool picking = false) const; + void render_points(const GLCanvas3D::Selection& selection, bool picking = false) const; bool is_mesh_update_necessary() const; void update_mesh();