From 68de2a49a31f6ceabc2df5a91e3d03d1aacce292 Mon Sep 17 00:00:00 2001 From: Vojtech Bubnik Date: Fri, 1 Oct 2021 14:28:36 +0200 Subject: [PATCH] Fixed update of mesh volume after applying a transformation. Fixes flipped normals when importing some 3MFs. --- src/libslic3r/TriangleMesh.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/libslic3r/TriangleMesh.cpp b/src/libslic3r/TriangleMesh.cpp index 39815bd644..f5fea32f82 100644 --- a/src/libslic3r/TriangleMesh.cpp +++ b/src/libslic3r/TriangleMesh.cpp @@ -325,20 +325,24 @@ void TriangleMesh::mirror(const Axis axis) void TriangleMesh::transform(const Transform3d& t, bool fix_left_handed) { its_transform(its, t); - if (fix_left_handed && t.matrix().block(0, 0, 3, 3).determinant() < 0.) + double det = t.matrix().block(0, 0, 3, 3).determinant(); + if (fix_left_handed && det < 0.) { its_flip_triangles(its); - else - m_stats.volume = - m_stats.volume; + det = -det; + } + m_stats.volume *= det; update_bounding_box(this->its, this->m_stats); } void TriangleMesh::transform(const Matrix3d& m, bool fix_left_handed) { its_transform(its, m); - if (fix_left_handed && m.determinant() < 0.) + double det = m.block(0, 0, 3, 3).determinant(); + if (fix_left_handed && det < 0.) { its_flip_triangles(its); - else - m_stats.volume = - m_stats.volume; + det = -det; + } + m_stats.volume *= det; update_bounding_box(this->its, this->m_stats); }