Skip to content

Commit 215859f

Browse files
committed
carve fixes
1 parent 7f89afc commit 215859f

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-5
lines changed

external/Carve/src/include/carve/mesh_impl.hpp

+4-3
Original file line numberDiff line numberDiff line change
@@ -639,15 +639,16 @@ inline int Mesh<3>::orientationAtVertex(edge_t* e_base) {
639639
vertex_t::vector_t v_base = e->v1()->v;
640640
std::vector<vertex_t::vector_t> v_edge;
641641

642-
if (v_edge.size() < 3) {
643-
return 0;
644-
}
645642

646643
do {
647644
v_edge.push_back(e->v2()->v);
648645
e = e->rev->next;
649646
} while (e != e_base);
650647

648+
if (v_edge.size() < 3) {
649+
return 0;
650+
}
651+
651652
const size_t N = v_edge.size();
652653

653654
for (size_t i = 0; i < N; ++i) {

external/Carve/src/include/carve/mesh_simplify.hpp

+5-2
Original file line numberDiff line numberDiff line change
@@ -896,8 +896,8 @@ class MeshSimplifier {
896896
edge_t* removed = edge->mergeFaces();
897897
if (removed == nullptr) {
898898
coplanar_face_edges.erase(edge);
899-
++n_merge;
900899
} else {
900+
++n_merge;
901901
edge_t* e = removed;
902902
do {
903903
edge_t* n = e->next;
@@ -1082,15 +1082,17 @@ class MeshSimplifier {
10821082
face_t* face = mesh->faces[i];
10831083
edge_t* start = face->edge;
10841084
edge_t* edge = start;
1085+
size_t edgesBeforeRemoval = face->n_edges;
10851086
do {
10861087
if (edge->next == edge->rev || edge->prev == edge->rev) {
10871088
edge = edge->removeEdge();
1088-
++n_removed;
1089+
if (face->n_edges == 0) { break; }
10891090
start = edge->prev;
10901091
} else {
10911092
edge = edge->next;
10921093
}
10931094
} while (edge != start);
1095+
n_removed += edgesBeforeRemoval - face->n_edges;
10941096
}
10951097
return n_removed;
10961098
}
@@ -1183,6 +1185,7 @@ class MeshSimplifier {
11831185
n_removed += mergeCoplanarFaces(meshset->meshes[i], min_normal_angle);
11841186
removeRemnantFaces(meshset->meshes[i]);
11851187
cleanFaceEdges(meshset->meshes[i]);
1188+
removeRemnantFaces(meshset->meshes[i]);
11861189
meshset->meshes[i]->cacheEdges();
11871190
}
11881191
return n_removed;

0 commit comments

Comments
 (0)