From 24366c6294edd702d0a6ca13602e21d7e61f207f Mon Sep 17 00:00:00 2001 From: YuSanka Date: Tue, 13 Dec 2022 16:29:10 +0100 Subject: [PATCH] Cut: Fixed connector rendering in "cut plane" mode --- src/slic3r/GUI/Gizmos/GLGizmoCut.cpp | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp index 21a8285d7..95eddd9a0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoCut.cpp @@ -402,6 +402,7 @@ void GLGizmoCut3D::update_clipper() double dist = (m_plane_center - beg).norm(); dist = std::clamp(dist, 0.0001, normal.norm()); normal.normalize(); + m_clp_normal = normal; const double offset = normal.dot(beg) + dist; m_c->object_clipper()->set_range_and_pos(normal, offset, dist); @@ -973,9 +974,6 @@ void GLGizmoCut3D::update_raycasters_for_picking_transform() const Vec3d& instance_offset = mo->instances[inst_id]->get_offset(); const double sla_shift = double(m_c->selection_info()->get_sla_shift()); - const ClippingPlane* cp = m_c->object_clipper()->get_clipping_plane(); - const Vec3d& normal = cp && cp->is_active() ? cp->get_normal() : m_clp_normal; - for (size_t i = 0; i < connectors.size(); ++i) { const CutConnector& connector = connectors[i]; @@ -984,7 +982,7 @@ void GLGizmoCut3D::update_raycasters_for_picking_transform() Vec3d pos = connector.pos + instance_offset; if (connector.attribs.type == CutConnectorType::Dowel && connector.attribs.style == CutConnectorStyle::Prizm) { - pos -= height * normal; + pos -= height * m_clp_normal; height *= 2; } pos[Z] += sla_shift; @@ -1396,10 +1394,12 @@ void GLGizmoCut3D::render_clipper_cut() void GLGizmoCut3D::on_render() { - if (update_bb() || force_update_clipper_on_render || m_connectors_editing) { + if (update_bb() || force_update_clipper_on_render) { update_clipper_on_render(); m_c->object_clipper()->set_behavior(m_connectors_editing, m_connectors_editing, 0.4); } + else + update_clipper(); init_picking_models(); @@ -1558,7 +1558,6 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors) ImGui::Separator(); if (m_imgui->button(_L("Confirm connectors"))) { - m_clp_normal = m_c->object_clipper()->get_clipping_plane()->get_normal(); unselect_all_connectors(); set_connectors_editing(false); } @@ -1566,7 +1565,6 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors) ImGui::SameLine(2.75f * m_label_width); if (m_imgui->button(_L("Cancel"))) { - m_clp_normal = m_c->object_clipper()->get_clipping_plane()->get_normal(); reset_connectors(); set_connectors_editing(false); } @@ -1945,9 +1943,6 @@ void GLGizmoCut3D::render_connectors() const Vec3d& instance_offset = mi->get_offset(); const double sla_shift = double(m_c->selection_info()->get_sla_shift()); - const ClippingPlane* cp = m_c->object_clipper()->get_clipping_plane(); - const Vec3d& normal = cp && cp->is_active() ? cp->get_normal() : m_clp_normal; - m_has_invalid_connector = false; m_info_stats.invalidate(); @@ -1979,13 +1974,13 @@ void GLGizmoCut3D::render_connectors() if (connector.attribs.type == CutConnectorType::Dowel && connector.attribs.style == CutConnectorStyle::Prizm) { if (is_looking_forward()) - pos -= height * normal; + pos -= height * m_clp_normal; else - pos += height * normal; + pos += height * m_clp_normal; height *= 2; } else if (!is_looking_forward()) - pos += 0.05 * normal; + pos += 0.05 * m_clp_normal; const Transform3d view_model_matrix = camera.get_view_matrix() * translation_transform(pos) * m_rotation_m * scale_transform(Vec3f(connector.radius, connector.radius, height).cast());