@@ -1088,14 +1088,32 @@ void triangulate_face(
10881088 cc_face_vcoords3d.data (),
10891089 (int )cc_face_vcount, multiplier);
10901090
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+
10911109 project_to_2d (cc_face_vcoords2d_, cc_face_vcoords3d, cc_face_normal_vector, largest_component_of_normal, multiplier);
10921110
10931111#ifdef MCUT_WITH_ARBITRARY_PRECISION_NUMBERS
10941112 for (auto v2d_iter = 0 ; v2d_iter < cc_face_vcoords2d_.size (); ++v2d_iter)
10951113 {
10961114 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);
10991117 cc_face_vcoords2d.push_back (vec2_<double >(deq_x, deq_y));
11001118 }
11011119#else
0 commit comments