4#include <wmtk/TetMesh.h>
5#include <wmtk/TriMesh.h>
8#include <wmtk/utils/EnableWarnings.hpp>
13namespace wmtk::components::c1_simplification {
20 int64_t vid_in_tet = -1;
50 std::array<Vector3d, 3> midgrad;
51 Eigen::Matrix<double, 12, 3> dofs;
59 midgrad = {{g0, g1, g2}};
65 int64_t vid_in_surface = -1;
72 , vid_in_surface(svid)
95 MMTetMesh() { p_vertex_attrs = &v_attrs; }
98 void init_from_eigen(
const MatrixXd& V,
const MatrixXi& T);
100 bool is_inverted(
const Tuple& t)
const;
111 bool is_limit_length;
114 std::vector<std::array<size_t, 3>> surface_faces;
115 std::vector<size_t> changed_tids;
117 std::vector<std::array<size_t, 2>> failed_edges;
119 std::map<std::pair<size_t, size_t>,
int> edge_link;
120 std::map<size_t, int> vertex_link;
121 size_t global_nonmani_ver_cnt;
134 MMUVMesh() { p_vertex_attrs = &v_attrs; }
137 void init_from_eigen(
const MatrixXd& V,
const MatrixXi& F);
139 bool is_inverted(
const Tuple& t)
const;
144 void output_uv_mesh(
const std::string& file,
bool consolidate =
false);
163 bool output_enabled =
true;
166 std::shared_ptr<MMTetMesh>& t_ptr,
167 std::shared_ptr<MMUVMesh>& uv_ptr,
168 const double threshold)
171 , deviation_threshold(threshold)
173 p_vertex_attrs = &v_attrs;
174 p_edge_attrs = &e_attrs;
178 void init_from_eigen_with_map_and_dofs(
181 const std::map<int64_t, int64_t>& s2t_vid_map,
182 const std::vector<Eigen::Matrix<double, 12, 3>>& dofs,
183 const std::vector<size_t>& cone_vids);
190 std::vector<Tuple> map_to_uv_edge_tuples(
const Tuple& e);
191 std::vector<Tuple> map_to_uv_vertex_tuples(
const Tuple& v);
192 Tuple map_to_equivalent_uv_tuple(
const Tuple& v);
197 bool multimesh_collapse_edge(
const Tuple& t);
199 Eigen::Matrix<double, 12, 3> assemble_dofs(
const size_t& fid);
201 void output_surface_mesh(
const std::string& file);
203 void clear_info_cache();
206 double deviation_threshold;
221 Vector3d surface_pos;
226 Vector2d translation;
235 Vector2d translation;
244 const Vector2d& new_p,
245 const Vector2d& trans,
265 size_t deleted_fid_1;
266 size_t deleted_fid_2 = -1;
268 size_t deleted_vid_1;
269 size_t deleted_vid_2 = -1;
271 size_t uv_collapse_to_v1_id;
272 size_t uv_collapse_to_v2_id = -1;
274 std::map<size_t, LayoutPartInfo> layout_parts_map;
275 std::vector<TrackedVertexInfo> tracked_vertex_info_cache;
276 std::map<size_t, bool> collapse_area_fid_involved;
281 std::shared_ptr<MMTetMesh> tetmesh_ptr;
282 std::shared_ptr<MMUVMesh> uvmesh_ptr;
288 Vector3d surface_pos;
291 size_t in_tri_id = -1;
295 tracked_vertex(
const Vector2d& p,
const Vector3d& sp,
const size_t&
id,
const size_t& fid)
303 std::vector<tracked_vertex> tracked_vertices;
305 std::map<size_t, std::vector<size_t>> tracked_fid_to_vids_map;
306 std::map<size_t, size_t> tracked_vid_to_fid_map;
308 void output_tracked_vertices(
const std::string& filename);
a Tuple refers to a global vid and a global tet id, and a local edge id and local face id
Definition TetMesh.h:60
Definition c1_multimesh.hpp:161
bool collapse_edge_before(const Tuple &t) override
User specified preparations and desideratas for an edge collapse including the link check as collapse...
Definition c1_multimesh.cpp:561
bool collapse_edge_after(const Tuple &t) override
User specified modifications and desideratas after an edge collapse.
Definition c1_multimesh.cpp:755
Definition c1_multimesh.hpp:93
bool collapse_edge_before(const Tuple &t) override
User specified preparations and desideratas for an edge collapse before changing the connectivity.
Definition c1_multimesh.cpp:72
bool collapse_edge_after(const Tuple &t) override
User specified modifications and desideratas for after an edge collapse.
Definition c1_multimesh.cpp:117
Definition c1_multimesh.hpp:132
bool collapse_edge_before(const Tuple &t) override
User specified preparations and desideratas for an edge collapse including the link check as collapse...
Definition c1_multimesh.cpp:180
bool collapse_edge_after(const Tuple &t) override
User specified modifications and desideratas after an edge collapse.
Definition c1_multimesh.cpp:221
Definition c1_multimesh.hpp:231
Definition c1_multimesh.hpp:255
Definition c1_multimesh.hpp:216
Definition c1_multimesh.hpp:286
Definition c1_multimesh.hpp:106
Definition c1_multimesh.hpp:148
Definition c1_multimesh.hpp:38
Definition c1_multimesh.hpp:48
Definition c1_multimesh.hpp:19
Definition c1_multimesh.hpp:64
Definition c1_multimesh.hpp:77