Fixed update of mesh volume after applying a transformation.

Fixes flipped normals when importing some 3MFs.
This commit is contained in:
Vojtech Bubnik 2021-10-01 14:28:36 +02:00
parent aaf47884cd
commit 68de2a49a3

View file

@ -325,20 +325,24 @@ void TriangleMesh::mirror(const Axis axis)
void TriangleMesh::transform(const Transform3d& t, bool fix_left_handed) void TriangleMesh::transform(const Transform3d& t, bool fix_left_handed)
{ {
its_transform(its, t); 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); its_flip_triangles(its);
else det = -det;
m_stats.volume = - m_stats.volume; }
m_stats.volume *= det;
update_bounding_box(this->its, this->m_stats); update_bounding_box(this->its, this->m_stats);
} }
void TriangleMesh::transform(const Matrix3d& m, bool fix_left_handed) void TriangleMesh::transform(const Matrix3d& m, bool fix_left_handed)
{ {
its_transform(its, m); 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); its_flip_triangles(its);
else det = -det;
m_stats.volume = - m_stats.volume; }
m_stats.volume *= det;
update_bounding_box(this->its, this->m_stats); update_bounding_box(this->its, this->m_stats);
} }