Skip to content

Commit 327c8a9

Browse files
authored
Merge pull request #865 from wildmeshing/jiacheng/c1-simplification
changes made for c1 simplification and Trimesh collapse
2 parents 969ddc3 + 480491d commit 327c8a9

26 files changed

+4257
-101
lines changed

cmake/recipes/nanoflann.cmake

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,6 @@ CPMAddPackage(
1616
"MASTER_PROJECT_HAS_TARGET_UNINSTALL ON"
1717
)
1818
set_target_properties(nanoflann PROPERTIES FOLDER third_party)
19-
set_target_properties(nanoflann_uninstall PROPERTIES FOLDER third_party)
19+
if(WIN32)
20+
set_target_properties(nanoflann_uninstall PROPERTIES FOLDER third_party)
21+
endif()

components/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,5 +19,6 @@ file(WRITE "${CMAKE_SOURCE_DIR}/app/components_map.hpp" ${WMTK_AUTOGEN_COMMENT})
1919
add_subdirectory("tetwild/wmtk/components/tetwild")
2020
add_subdirectory("simplicial_embedding/wmtk/components/simplicial_embedding")
2121
add_subdirectory("image_simulation/wmtk/components/image_simulation")
22+
add_subdirectory("c1_simplification/wmtk/components/c1_simplification")
2223
add_subdirectory("tet_remeshing/wmtk/components/tet_remeshing")
2324

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
include(gmp)
2+
3+
4+
set(COMPONENT_NAME c1_simplification)
5+
add_component(${COMPONENT_NAME})
6+
7+
if(NOT ${WMTK_ENABLE_COMPONENT_${COMPONENT_NAME}})
8+
return()
9+
endif()
10+
11+
set(SRC_FILES
12+
c1_multimesh.hpp
13+
c1_multimesh.cpp
14+
c1_utils.hpp
15+
c1_utils.cpp
16+
17+
clough_tocher/clough_tocher_autogen_matrix_coeffs.hpp
18+
clough_tocher/clough_tocher_matrices.hpp
19+
clough_tocher/clough_tocher_matrices.cpp
20+
21+
c1_simplification.hpp
22+
c1_simplification.cpp
23+
c1_simplification_spec.json
24+
)
25+
26+
target_sources(wmtk_${COMPONENT_NAME} PRIVATE ${SRC_FILES})
27+
28+
target_link_libraries(wmtk_${COMPONENT_NAME} PUBLIC
29+
wmtk::toolkit
30+
wmtk::data
31+
igl::predicates
32+
jse::jse
33+
)
34+
35+
######################
36+
## TESTS
37+
######################
38+
39+
if(${WMTK_COMPONENT_TESTS})
40+
add_subdirectory(tests)
41+
endif()
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
#include "c1TupleUtils.hpp"
2+
3+
#include <tracy/Tracy.hpp>
4+
5+
#include <algorithm>
6+
7+
namespace wmtk {
8+
void unique_edge_tuples(const MMTetMesh& m, std::vector<TetMesh::Tuple>& edges)
9+
{
10+
auto edge_ids = std::vector<size_t>();
11+
for (auto& e : edges) edge_ids.push_back(e.eid(m));
12+
std::sort(edge_ids.begin(), edge_ids.end());
13+
edge_ids.erase(std::unique(edge_ids.begin(), edge_ids.end()), edge_ids.end());
14+
edges.clear();
15+
for (auto i : edge_ids) {
16+
edges.emplace_back(m.tuple_from_edge(i / 6, i % 6));
17+
}
18+
}
19+
20+
// void unique_edge_tuples(const TriMesh& m, std::vector<TriMesh::Tuple>& edges)
21+
// {
22+
// std::vector<size_t> all_eids;
23+
// for (auto e : edges) {
24+
// all_eids.emplace_back(e.eid(m));
25+
// }
26+
// vector_unique(all_eids);
27+
// edges.clear();
28+
// for (auto eid : all_eids) {
29+
// edges.emplace_back(m.tuple_from_edge(eid / 3, eid % 3));
30+
// }
31+
// }
32+
33+
// void unique_face_tuples(const TetMesh& m, std::vector<TetMesh::Tuple>& faces)
34+
// {
35+
// std::stable_sort(
36+
// faces.begin(),
37+
// faces.end(),
38+
// [&](const TetMesh::Tuple& a, const TetMesh::Tuple& b) {
39+
// return a.fid(m) < b.fid(m);
40+
// }); // todo: use unique global id here would be very slow!
41+
42+
// faces.erase(
43+
// std::unique(
44+
// faces.begin(),
45+
// faces.end(),
46+
// [&](const TetMesh::Tuple& a, const TetMesh::Tuple& b) { return a.fid(m) == b.fid(m);
47+
// }),
48+
// faces.end());
49+
// }
50+
51+
// void unique_directed_edge_tuples(const TetMesh& m, std::vector<TetMesh::Tuple>& edges)
52+
// {
53+
// std::stable_sort(
54+
// edges.begin(),
55+
// edges.end(),
56+
// [&](const TetMesh::Tuple& a, const TetMesh::Tuple& b) {
57+
// throw "check me!";
58+
// const int aeid = a.eid(m), beid = b.eid(m);
59+
// if (aeid == beid) return a.vid(m) < b.vid(m);
60+
// return aeid < beid;
61+
// });
62+
63+
// edges.erase(
64+
// std::unique(
65+
// edges.begin(),
66+
// edges.end(),
67+
// [&](const TetMesh::Tuple& a, const TetMesh::Tuple& b) {
68+
// throw "check me!";
69+
// return a.eid(m) == b.eid(m) && a.vid(m) == b.vid(m);
70+
// }),
71+
// edges.end());
72+
// }
73+
} // namespace wmtk
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
#pragma once
2+
3+
#include <wmtk/TetMesh.h>
4+
#include <wmtk/TriMesh.h>
5+
#include "c1_multimesh.hpp"
6+
7+
namespace wmtk::components::c1_simplification {
8+
void unique_vertex_tuples(const MMUVMesh& m, std::vector<TriMesh::Tuple>& vertices);
9+
// void unique_face_tuples(const TriMesh& m, std::vector<TriMesh::Tuple>& vertices);
10+
// void unique_edge_tuples(const TriMesh& m, std::vector<TriMesh::Tuple>& edges);
11+
void unique_edge_tuples(const MMTetMesh& m, std::vector<TetMesh::Tuple>& edges);
12+
// void unique_directed_edge_tuples(const TetMesh& m, std::vector<TetMesh::Tuple>& edges);
13+
// void unique_face_tuples(const TetMesh& m, std::vector<TetMesh::Tuple>& faces);
14+
15+
} // namespace wmtk::components::c1_simplification

0 commit comments

Comments
 (0)