4#include <wmtk/Types.hpp>
5#include <wmtk/envelope/Envelope.hpp>
6#include <wmtk/utils/Delaunay.hpp>
8namespace wmtk::components::image_simulation {
10using ImageData = std::vector<std::vector<std::vector<size_t>>>;
25void delaunay_box_mesh(
27 const MatrixXd& vertices,
28 std::vector<wmtk::delaunay::Point3D>& points,
29 std::vector<wmtk::delaunay::Tetrahedron>& tets,
45 const MatrixXd& V_surface,
46 const MatrixXi& F_surface,
47 const MatrixXd& V_vol,
48 const MatrixXi& T_vol,
51 MatrixXi& F_on_surface);
63 const std::vector<std::string>& img_filenames,
64 const std::vector<Matrix4d>& img_transform = {},
65 const double tol_rel = -1,
66 const double tol_abs = -1);
87 const MatrixXd& V_emb()
const {
return m_V_emb; }
88 const MatrixXr& V_emb_r()
const {
return m_V_emb_r; }
89 const MatrixXd& V_surface()
const {
return m_V_surface; }
90 const MatrixXi& T_emb()
const {
return m_T_emb; }
91 const MatrixSi& T_tags()
const {
return m_T_tags; }
92 const MatrixXi& F_on_surface()
const {
return m_F_on_surface; }
93 const MatrixXi& F_surface()
const {
return m_F_surface; }
110 void write_emb_msh(
const std::string& filename)
const;
111 void write_emb_vtu(
const std::string& filename)
const;
113 std::pair<Vector3d, Vector3d> bbox_minmax()
const;
114 std::pair<Vector3d, Vector3d> bbox_surf_minmax()
const;
116 std::vector<Eigen::Vector3d> V_surf_to_vector()
const;
117 std::vector<std::array<size_t, 3>> F_surf_to_vector()
const;
120 void V_surf_from_vector(
const std::vector<Eigen::Vector3d>& verts);
121 void F_surf_from_vector(
const std::vector<std::array<size_t, 3>>& tris);
123 void tag_from_winding_number();
126 std::vector<std::string> m_img_filenames;
127 std::vector<ImageData> m_img_datas;
130 MatrixXd m_V_surface;
131 MatrixXi m_F_surface;
133 std::vector<std::vector<std::pair<size_t, size_t>>> m_F_tags_surface;
135 std::vector<size_t> modified_nonmanifold_v;
142 MatrixXi m_F_on_surface;
145 std::vector<std::set<int64_t>> m_tags;
148 std::vector<MatrixXd> Vs;
149 std::vector<MatrixXi> Fs;
152 bool m_smooth_surface =
false;
Definition Envelope.hpp:20
Definition EmbedSurface.hpp:57
void remove_duplicates(const double eps)
Merge vertices that are closer than eps.
Definition EmbedSurface.cpp:646
void write_emb_surf_off(const std::string &filename) const
Write embedded surface.
Definition EmbedSurface.cpp:866
void consolidate()
Remove unreferenced vertices.
Definition EmbedSurface.cpp:814
bool embed_surface(const bool flood_fill=false)
Definition EmbedSurface.cpp:657
void write_surf_off(const std::string &filename) const
Write surface as read from image.
Definition EmbedSurface.cpp:861
void simplify_surface(const double eps, const int num_threads=0)
Simplify the input surface while staying within the eps envelope.
Definition EmbedSurface.cpp:608