From 96551233e035a53d7a590e7c462d0d5de4f2658c Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Fri, 12 May 2023 15:16:06 +0200 Subject: [PATCH] Auto support painting: Don't paint on upwards pointing surfaces. --- src/libslic3r/TriangleSelectorWrapper.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/libslic3r/TriangleSelectorWrapper.cpp b/src/libslic3r/TriangleSelectorWrapper.cpp index daf42300c5..67b79e3441 100644 --- a/src/libslic3r/TriangleSelectorWrapper.cpp +++ b/src/libslic3r/TriangleSelectorWrapper.cpp @@ -11,6 +11,9 @@ TriangleSelectorWrapper::TriangleSelectorWrapper(const TriangleMesh &mesh, const void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &origin, float radius) { std::vector hits; Vec3f dir = (point - origin).normalized(); + static constexpr const auto eps_angle = 89.99f; + Transform3d trafo_no_translate = mesh_transform; + trafo_no_translate.translation() = Vec3d::Zero(); if (AABBTreeIndirect::intersect_ray_all_hits(mesh.its.vertices, mesh.its.indices, triangles_tree, Vec3d(origin.cast()), Vec3d(dir.cast()), @@ -22,8 +25,8 @@ void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &orig if ((point - pos).norm() < radius && face_normal.dot(dir) < 0) { std::unique_ptr cursor = std::make_unique( pos, origin, radius, this->mesh_transform, TriangleSelector::ClippingPlane { }); - selector.select_patch(hit.id, std::move(cursor), EnforcerBlockerType::ENFORCER, Transform3d::Identity(), - true, 0.0f); + selector.select_patch(hit.id, std::move(cursor), EnforcerBlockerType::ENFORCER, trafo_no_translate, + true, eps_angle); break; } } @@ -36,8 +39,8 @@ void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &orig std::unique_ptr cursor = std::make_unique( point, origin, radius, this->mesh_transform, TriangleSelector::ClippingPlane { }); selector.select_patch(hit_idx_out, std::move(cursor), EnforcerBlockerType::ENFORCER, - Transform3d::Identity(), - true, 0.0f); + trafo_no_translate, + true, eps_angle); } } }