From d18fe56f8d270278c019652d9d15dcfb45c993f8 Mon Sep 17 00:00:00 2001 From: Michael Kirsch Date: Sat, 29 Jun 2019 10:47:41 +0200 Subject: [PATCH] check for negative determinate in stl transform functions --- xs/src/admesh/util.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/xs/src/admesh/util.c b/xs/src/admesh/util.c index 32ed7799a..fae33b741 100644 --- a/xs/src/admesh/util.c +++ b/xs/src/admesh/util.c @@ -201,6 +201,10 @@ void stl_transform(stl_file *stl, double const *trafo3x4) { v_dst->z = (float)(trafo3x4[8] * v_src_x + trafo3x4[9] * v_src_y + trafo3x4[10] * v_src_z + trafo3x4[11]); } } + double det = trafo3x4[0]*trafo3x4[5]*trafo3x4[10] + trafo3x4[4]*trafo3x4[9]*trafo3x4[2] + trafo3x4[8]*trafo3x4[1]*trafo3x4[6] + - trafo3x4[0]*trafo3x4[9]*trafo3x4[6] - trafo3x4[4]*trafo3x4[1]*trafo3x4[10] - trafo3x4[8]*trafo3x4[5]*trafo3x4[2]; + if(det < 0) + stl_reverse_all_facets(stl); stl_get_size(stl); calculate_normals(stl); } @@ -237,6 +241,10 @@ void stl_get_transform(stl_file const *stl_src, stl_file *stl_dst, double const v_dst->z = (float)(trafo3x4[8] * v_src_x + trafo3x4[9] * v_src_y + trafo3x4[10] * v_src_z + trafo3x4[11]); } } + double det = trafo3x4[0]*trafo3x4[5]*trafo3x4[10] + trafo3x4[4]*trafo3x4[9]*trafo3x4[2] + trafo3x4[8]*trafo3x4[1]*trafo3x4[6] + - trafo3x4[0]*trafo3x4[9]*trafo3x4[6] - trafo3x4[4]*trafo3x4[1]*trafo3x4[10] - trafo3x4[8]*trafo3x4[5]*trafo3x4[2]; + if(det < 0) + stl_reverse_all_facets(stl_dst); stl_get_size(stl_dst); calculate_normals(stl_dst); }