diff options
Diffstat (limited to 'extern/carve/patches/mesh_simplify_dissolve_edges.patch')
-rw-r--r-- | extern/carve/patches/mesh_simplify_dissolve_edges.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/extern/carve/patches/mesh_simplify_dissolve_edges.patch b/extern/carve/patches/mesh_simplify_dissolve_edges.patch new file mode 100644 index 00000000000..bd671bfcbcf --- /dev/null +++ b/extern/carve/patches/mesh_simplify_dissolve_edges.patch @@ -0,0 +1,46 @@ +diff -r e82d852e4fb0 include/carve/mesh_simplify.hpp +--- a/include/carve/mesh_simplify.hpp Wed Jan 15 13:16:14 2014 +1100 ++++ b/include/carve/mesh_simplify.hpp Mon Feb 24 18:02:07 2014 +0600 +@@ -32,8 +32,6 @@ + #include <algorithm> + #include <vector> + +-#include "write_ply.hpp" +- + + namespace carve { + namespace mesh { +@@ -1184,6 +1182,33 @@ + return modifications; + } + ++ void dissolveMeshEdges(mesh_t *mesh, std::unordered_set<edge_t *> dissolve_edges) { ++ while (dissolve_edges.size()) { ++ MeshSet<3>::edge_t *edge = *dissolve_edges.begin(); ++ if (edge->face == edge->rev->face) { ++ dissolve_edges.erase(edge); ++ continue; ++ } ++ ++ MeshSet<3>::edge_t *removed = edge->mergeFaces(); ++ if (removed == NULL) { ++ dissolve_edges.erase(edge); ++ } else { ++ MeshSet<3>::edge_t *e = removed; ++ do { ++ MeshSet<3>::edge_t *n = e->next; ++ dissolve_edges.erase(std::min(e, e->rev)); ++ delete e->rev; ++ delete e; ++ e = n; ++ } while (e != removed); ++ } ++ } ++ ++ removeRemnantFaces(mesh); ++ cleanFaceEdges(mesh); ++ mesh->cacheEdges(); ++ } + + + size_t improveMesh(meshset_t *meshset, |