diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 918c4a325..256cf7027 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -428,14 +428,14 @@ void PrintObject::generate_support_spots() auto obj_transform = this->trafo_centered(); for (ModelVolume *model_volume : this->model_object()->volumes) { if (model_volume->is_model_part()) { - Transform3d model_transformation = model_volume->get_matrix(); - Transform3f inv_transform = (obj_transform * model_transformation).inverse().cast(); - TriangleSelectorWrapper selector { model_volume->mesh() }; + Transform3d mesh_transformation = obj_transform * model_volume->get_matrix(); + Transform3d inv_transform = mesh_transformation.inverse(); + TriangleSelectorWrapper selector { model_volume->mesh(), mesh_transformation}; for (const SupportSpotsGenerator::SupportPoint &support_point : issues.support_points) { - Vec3f point = Vec3f(inv_transform * support_point.position); + Vec3f point = Vec3f(inv_transform.cast() * support_point.position); Vec3f origin = Vec3f( - inv_transform * Vec3f(support_point.position.x(), support_point.position.y(), 0.0f)); + inv_transform.cast() * Vec3f(support_point.position.x(), support_point.position.y(), 0.0f)); selector.enforce_spot(point, origin, 1.5f); } diff --git a/src/libslic3r/SupportSpotsGenerator.cpp b/src/libslic3r/SupportSpotsGenerator.cpp index 584eaf58c..a1ecd9652 100644 --- a/src/libslic3r/SupportSpotsGenerator.cpp +++ b/src/libslic3r/SupportSpotsGenerator.cpp @@ -984,8 +984,6 @@ Issues check_global_stability(SupportGridFilter supports_presence_grid, for (size_t island_idx = 0; island_idx < islands_graph[layer_idx].islands.size(); ++island_idx) { const Island &island = islands_graph[layer_idx].islands[island_idx]; ObjectPart &part = active_object_parts.access(prev_island_to_object_part_mapping[island_idx]); - - IslandConnection &weakest_conn = prev_island_weakest_connection[island_idx]; #ifdef DETAILED_DEBUG_LOGS weakest_conn.print_info("weakest connection info: "); diff --git a/src/libslic3r/TriangleSelectorWrapper.cpp b/src/libslic3r/TriangleSelectorWrapper.cpp index ec22ed5dd..3a5f44d84 100644 --- a/src/libslic3r/TriangleSelectorWrapper.cpp +++ b/src/libslic3r/TriangleSelectorWrapper.cpp @@ -1,11 +1,10 @@ -#include "Model.hpp" #include "TriangleSelectorWrapper.hpp" #include namespace Slic3r { -TriangleSelectorWrapper::TriangleSelectorWrapper(const TriangleMesh &mesh) : - mesh(mesh), selector(mesh), triangles_tree( +TriangleSelectorWrapper::TriangleSelectorWrapper(const TriangleMesh &mesh, const Transform3d& mesh_transform) : + mesh(mesh), mesh_transform(mesh_transform), selector(mesh), triangles_tree( AABBTreeIndirect::build_aabb_tree_over_indexed_triangle_set(mesh.its.vertices, mesh.its.indices)) { } @@ -23,7 +22,7 @@ void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &orig Vec3f face_normal = its_face_normal(mesh.its, hit.id); if ((point - pos).norm() < radius && face_normal.dot(dir) < 0) { std::unique_ptr cursor = std::make_unique( - pos, origin, radius, Transform3d::Identity(), TriangleSelector::ClippingPlane { }); + pos, origin, radius, this->mesh_transform, TriangleSelector::ClippingPlane { }); selector.select_patch(hit.id, std::move(cursor), EnforcerBlockerType::ENFORCER, Transform3d::Identity(), true, 0.0f); break; @@ -36,7 +35,7 @@ void TriangleSelectorWrapper::enforce_spot(const Vec3f &point, const Vec3f &orig triangles_tree, point, hit_idx_out, hit_point_out); if (dist < radius) { std::unique_ptr cursor = std::make_unique( - point, origin, radius, Transform3d::Identity(), TriangleSelector::ClippingPlane { }); + point, origin, radius, this->mesh_transform, TriangleSelector::ClippingPlane { }); selector.select_patch(hit_idx_out, std::move(cursor), EnforcerBlockerType::ENFORCER, Transform3d::Identity(), true, 0.0f); diff --git a/src/libslic3r/TriangleSelectorWrapper.hpp b/src/libslic3r/TriangleSelectorWrapper.hpp index 10707cc25..22c61d627 100644 --- a/src/libslic3r/TriangleSelectorWrapper.hpp +++ b/src/libslic3r/TriangleSelectorWrapper.hpp @@ -2,6 +2,7 @@ #define SRC_LIBSLIC3R_TRIANGLESELECTORWRAPPER_HPP_ #include "TriangleSelector.hpp" +#include "Model.hpp" #include "AABBTreeIndirect.hpp" namespace Slic3r { @@ -15,10 +16,11 @@ namespace Slic3r { class TriangleSelectorWrapper { public: const TriangleMesh &mesh; + const Transform3d& mesh_transform; TriangleSelector selector; AABBTreeIndirect::Tree<3, float> triangles_tree; - TriangleSelectorWrapper(const TriangleMesh &mesh); + TriangleSelectorWrapper(const TriangleMesh &mesh, const Transform3d& mesh_transform); void enforce_spot(const Vec3f &point, const Vec3f& origin, float radius);