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);
165 std::shared_ptr<MMTetMesh>& t_ptr,
166 std::shared_ptr<MMUVMesh>& uv_ptr,
167 const double threshold)
170 , deviation_threshold(threshold)
172 p_vertex_attrs = &v_attrs;
173 p_edge_attrs = &e_attrs;
177 void init_from_eigen_with_map_and_dofs(
180 const std::map<int64_t, int64_t>& s2t_vid_map,
181 const std::vector<Eigen::Matrix<double, 12, 3>>& dofs,
182 const std::vector<size_t>& cone_vids);
189 std::vector<Tuple> map_to_uv_edge_tuples(
const Tuple& e);
190 std::vector<Tuple> map_to_uv_vertex_tuples(
const Tuple& v);
191 Tuple map_to_equivalent_uv_tuple(
const Tuple& v);
196 bool multimesh_collapse_edge(
const Tuple& t);
198 Eigen::Matrix<double, 12, 3> assemble_dofs(
const size_t& fid);
200 void output_surface_mesh(
const std::string& file);
202 void clear_info_cache();
205 double deviation_threshold;
220 Vector3d surface_pos;
225 Vector2d translation;
234 Vector2d translation;
243 const Vector2d& new_p,
244 const Vector2d& trans,
264 size_t deleted_fid_1;
265 size_t deleted_fid_2 = -1;
267 size_t deleted_vid_1;
268 size_t deleted_vid_2 = -1;
270 size_t uv_collapse_to_v1_id;
271 size_t uv_collapse_to_v2_id = -1;
273 std::map<size_t, LayoutPartInfo> layout_parts_map;
274 std::vector<TrackedVertexInfo> tracked_vertex_info_cache;
275 std::map<size_t, bool> collapse_area_fid_involved;
280 std::shared_ptr<MMTetMesh> tetmesh_ptr;
281 std::shared_ptr<MMUVMesh> uvmesh_ptr;
287 Vector3d surface_pos;
290 size_t in_tri_id = -1;
294 tracked_vertex(
const Vector2d& p,
const Vector3d& sp,
const size_t&
id,
const size_t& fid)
302 std::vector<tracked_vertex> tracked_vertices;
304 std::map<size_t, std::vector<size_t>> tracked_fid_to_vids_map;
305 std::map<size_t, size_t> tracked_vid_to_fid_map;
307 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:48
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:230
Definition c1_multimesh.hpp:254
Definition c1_multimesh.hpp:215
Definition c1_multimesh.hpp:285
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