Wildmeshing Toolkit
UpdateEdgeOperationMultiMeshMapFunctor.hpp
Go to the documentation of this file.
1 #pragma once
2 #include <Eigen/Core>
3 #include <memory>
4 #include <vector>
5 
6 namespace wmtk {
7 class Mesh;
8 class PointMesh;
9 class EdgeMesh;
10 class TriMesh;
11 class TetMesh;
12 class Tuple;
13 namespace simplex {
14 class Simplex;
15 }
16 namespace attribute {
17 template <typename T, typename MeshType, int Dim>
18 class Accessor;
19 }
20 
21 namespace operations {
22 class EdgeOperationData;
23 namespace edge_mesh {
24 class EdgeOperationData;
25 }
26 namespace tri_mesh {
27 class EdgeOperationData;
28 }
29 namespace tet_mesh {
30 class EdgeOperationData;
31 }
32 } // namespace operations
33 
34 namespace operations::utils {
35 
37 {
38 public:
39  // edge -> edge
40  [[noreturn]] void operator()(
41  EdgeMesh&,
42  const simplex::Simplex&,
43  const edge_mesh::EdgeOperationData& parent_tmoe,
44  EdgeMesh&,
45  const simplex::Simplex&,
46  const edge_mesh::EdgeOperationData&) const;
47 
48  // tri -> edge
49  void operator()(
50  TriMesh&,
51  const simplex::Simplex&,
53  EdgeMesh&,
54  const simplex::Simplex&,
55  const edge_mesh::EdgeOperationData&) const;
56  // tri -> tri
57  void operator()(
58  TriMesh&,
59  const simplex::Simplex&,
61  TriMesh&,
62  const simplex::Simplex&,
63  const tri_mesh::EdgeOperationData&) const;
64 
65  // tet -> edge
66  void operator()(
67  TetMesh&,
68  const simplex::Simplex&,
70  EdgeMesh&,
71  const simplex::Simplex&,
72  const edge_mesh::EdgeOperationData&) const;
73  // tet -> tri
74  void operator()(
75  TetMesh&,
76  const simplex::Simplex&,
78  TriMesh&,
79  const simplex::Simplex&,
80  const tri_mesh::EdgeOperationData&) const;
81  // tet -> tet
82  void operator()(
83  TetMesh&,
84  const simplex::Simplex&,
86  TetMesh&,
87  const simplex::Simplex&,
88  const tet_mesh::EdgeOperationData&) const;
89 
90  // edge
92 
93  // tri
95 
96  // tet
98 
99 private:
100  /*
101  template <typename T>
102  void update_maps(MeshType&, const simplex::Simplex&, const EdgeOperationData&);
103  */
104 
105 private:
106  int64_t parent_global_cid(
108  int64_t parent_gid) const;
109  int64_t child_global_cid(
111  int64_t parent_gid) const;
112  void update_all_hashes(
113  Mesh& m,
114  const std::vector<std::vector<std::tuple<int64_t, std::vector<Tuple>>>>&
115  simplices_to_update,
116  const std::vector<std::tuple<int64_t, std::array<int64_t, 2>>>& split_cell_maps = {}) const;
117  void update_ear_replacement(TriMesh& m, const tri_mesh::EdgeOperationData& fmoe) const;
118 
119  // for tet
120  int64_t parent_local_fid(
122  int64_t parent_gid) const;
123 
124  void update_ear_replacement(TetMesh& m, const tet_mesh::EdgeOperationData& tmoe) const;
125 };
126 } // namespace operations::utils
127 } // namespace wmtk
A CachingAccessor that uses tuples for accessing attributes instead of indices.
Definition: Accessor.hpp:25
void update_ear_replacement(TriMesh &m, const tri_mesh::EdgeOperationData &fmoe) const
int64_t parent_global_cid(const attribute::Accessor< int64_t, Mesh, Eigen::Dynamic > &parent_to_child, int64_t parent_gid) const
int64_t parent_local_fid(const attribute::Accessor< int64_t, Mesh, Eigen::Dynamic > &parent_to_child, int64_t parent_gid) const
void operator()(EdgeMesh &, const simplex::Simplex &, const edge_mesh::EdgeOperationData &parent_tmoe, EdgeMesh &, const simplex::Simplex &, const edge_mesh::EdgeOperationData &) const
int64_t child_global_cid(const attribute::Accessor< int64_t, Mesh, Eigen::Dynamic > &parent_to_child, int64_t parent_gid) const
void update_all_hashes(Mesh &m, const std::vector< std::vector< std::tuple< int64_t, std::vector< Tuple >>>> &simplices_to_update, const std::vector< std::tuple< int64_t, std::array< int64_t, 2 >>> &split_cell_maps={}) const
Definition: Accessor.hpp:6