@@ -1088,14 +1088,32 @@ void triangulate_face(
1088
1088
cc_face_vcoords3d.data (),
1089
1089
(int )cc_face_vcount, multiplier);
1090
1090
1091
+ if (squared_length (cc_face_normal_vector) == scalar_t::zero ())
1092
+ {
1093
+ context_uptr->dbg_cb (MC_DEBUG_SOURCE_KERNEL,
1094
+ MC_DEBUG_TYPE_OTHER,
1095
+ 0 ,
1096
+ MC_DEBUG_SEVERITY_HIGH,
1097
+ " face f" + std::to_string (cc_face_iter) +
1098
+ " has zero area (applying pseudo triangulation)" );
1099
+ auto v0 = cc_face_vertices[0 ];
1100
+ for (int tv = 1 ; tv < cc_face_vertices.size ()-1 ; ++tv)
1101
+ {
1102
+ cc_face_triangulation.push_back (0 );
1103
+ cc_face_triangulation.push_back (tv);
1104
+ cc_face_triangulation.push_back ((tv + 1 ) % cc_face_vertices.size ());
1105
+ }
1106
+ return ;
1107
+ }
1108
+
1091
1109
project_to_2d (cc_face_vcoords2d_, cc_face_vcoords3d, cc_face_normal_vector, largest_component_of_normal, multiplier);
1092
1110
1093
1111
#ifdef MCUT_WITH_ARBITRARY_PRECISION_NUMBERS
1094
1112
for (auto v2d_iter = 0 ; v2d_iter < cc_face_vcoords2d_.size (); ++v2d_iter)
1095
1113
{
1096
1114
auto & v = cc_face_vcoords2d_[v2d_iter];
1097
- auto deq_x = scalar_t::dequantize (v[0 ], multiplier);
1098
- auto deq_y = scalar_t::dequantize (v[1 ], multiplier);
1115
+ auto deq_x = v[ 0 ]. get_d (); // scalar_t::dequantize(v[0], multiplier);
1116
+ auto deq_y = v[ 1 ]. get_d (); // scalar_t::dequantize(v[1], multiplier);
1099
1117
cc_face_vcoords2d.push_back (vec2_<double >(deq_x, deq_y));
1100
1118
}
1101
1119
#else
0 commit comments