File tree 2 files changed +9
-5
lines changed
external/Carve/src/include/carve
2 files changed +9
-5
lines changed Original file line number Diff line number Diff line change @@ -639,15 +639,16 @@ inline int Mesh<3>::orientationAtVertex(edge_t* e_base) {
639
639
vertex_t ::vector_t v_base = e->v1 ()->v ;
640
640
std::vector<vertex_t ::vector_t > v_edge;
641
641
642
- if (v_edge.size () < 3 ) {
643
- return 0 ;
644
- }
645
642
646
643
do {
647
644
v_edge.push_back (e->v2 ()->v );
648
645
e = e->rev ->next ;
649
646
} while (e != e_base);
650
647
648
+ if (v_edge.size () < 3 ) {
649
+ return 0 ;
650
+ }
651
+
651
652
const size_t N = v_edge.size ();
652
653
653
654
for (size_t i = 0 ; i < N; ++i) {
Original file line number Diff line number Diff line change @@ -896,8 +896,8 @@ class MeshSimplifier {
896
896
edge_t * removed = edge->mergeFaces ();
897
897
if (removed == nullptr ) {
898
898
coplanar_face_edges.erase (edge);
899
- ++n_merge;
900
899
} else {
900
+ ++n_merge;
901
901
edge_t * e = removed;
902
902
do {
903
903
edge_t * n = e->next ;
@@ -1082,15 +1082,17 @@ class MeshSimplifier {
1082
1082
face_t * face = mesh->faces [i];
1083
1083
edge_t * start = face->edge ;
1084
1084
edge_t * edge = start;
1085
+ size_t edgesBeforeRemoval = face->n_edges ;
1085
1086
do {
1086
1087
if (edge->next == edge->rev || edge->prev == edge->rev ) {
1087
1088
edge = edge->removeEdge ();
1088
- ++n_removed;
1089
+ if (face-> n_edges == 0 ) { break ; }
1089
1090
start = edge->prev ;
1090
1091
} else {
1091
1092
edge = edge->next ;
1092
1093
}
1093
1094
} while (edge != start);
1095
+ n_removed += edgesBeforeRemoval - face->n_edges ;
1094
1096
}
1095
1097
return n_removed;
1096
1098
}
@@ -1183,6 +1185,7 @@ class MeshSimplifier {
1183
1185
n_removed += mergeCoplanarFaces (meshset->meshes [i], min_normal_angle);
1184
1186
removeRemnantFaces (meshset->meshes [i]);
1185
1187
cleanFaceEdges (meshset->meshes [i]);
1188
+ removeRemnantFaces (meshset->meshes [i]);
1186
1189
meshset->meshes [i]->cacheEdges ();
1187
1190
}
1188
1191
return n_removed;
You can’t perform that action at this time.
0 commit comments