Wildmeshing Toolkit
Loading...
Searching...
No Matches
EdgeOperationData.cpp
Go to the documentation of this file.
1
3#include <wmtk/TetMesh.hpp>
4
5
7
8
9std::vector<std::array<Tuple, 2>> EdgeOperationData::ear_edges(const TetMesh& m) const
10{
11 std::vector<std::array<Tuple, 2>> ret;
12 ret.reserve(incident_face_datas().size());
13
14 for (const auto& ifd : incident_face_datas()) {
15 std::array<Tuple, 2>& r = ret.emplace_back();
16
17 for (size_t j = 0; j < 2; ++j) {
18 int64_t eid = ifd.ear_eids[j];
19 r[j] = tuple_from_id(m, PrimitiveType::Edge, eid);
20 }
21 }
22 return ret;
23}
24std::vector<std::array<Tuple, 2>> EdgeOperationData::ear_faces(const TetMesh& m) const
25{
26 std::vector<std::array<Tuple, 2>> ret;
27 ret.reserve(incident_tet_datas().size());
28
29 for (const auto& itd : incident_tet_datas()) {
30 std::array<Tuple, 2>& r = ret.emplace_back();
31
32 for (size_t j = 0; j < 2; ++j) {
33 int64_t fid = itd.ears[j].fid;
35 }
36 }
37 return ret;
38}
39std::array<Tuple, 2> EdgeOperationData::input_endpoints(const TetMesh& m) const
40{
41 std::array<Tuple, 2> r;
42 r[0] = m_operating_tuple;
44 return r;
45}
46
47std::vector<Tuple> EdgeOperationData::collapse_merged_ear_edges(const TetMesh& m) const
48{
49 std::vector<Tuple> ret;
50 ret.reserve(incident_face_datas().size());
51
52 for (const auto& ifd : incident_face_datas()) {
53 ret.emplace_back(tuple_from_id(m, PrimitiveType::Edge, ifd.new_edge_id));
54 }
55 return ret;
56}
57
58std::vector<Tuple> EdgeOperationData::collapse_merged_ear_faces(const TetMesh& m) const
59{
60 std::vector<Tuple> ret;
61 ret.reserve(incident_tet_datas().size());
62
63 for (const auto& itd : incident_tet_datas()) {
64 ret.emplace_back(tuple_from_id(m, PrimitiveType::Triangle, itd.new_face_id));
65 }
66 return ret;
67}
68 std::vector<simplex::Simplex> EdgeOperationData::new_vertices(const Mesh&m) const {
69 if(m.is_free()) {
70 throw std::runtime_error("tet edgeoperationdata new_vertices no implemented for free meshes");
71 return {
72 //simplex_from_id(m,PrimitiveType::Vertex,m_free_split_v[0]),
73 //simplex_from_id(m,PrimitiveType::Vertex,m_free_split_v[1]),
75 };
76 } else {
77 return {
79 };
80 }
81 }
82
83std::vector<Tuple> EdgeOperationData::split_new_rib_edges(const TetMesh& m) const
84{
85 std::vector<Tuple> ret;
86 ret.reserve(incident_face_datas().size());
87
88 for (const auto& ifd : incident_face_datas()) {
89 ret.emplace_back(tuple_from_id(m, PrimitiveType::Edge, ifd.new_edge_id));
90 }
91 return ret;
92}
93
94std::vector<Tuple> EdgeOperationData::split_new_rib_faces(const TetMesh& m) const
95{
96 std::vector<Tuple> ret;
97 ret.reserve(incident_tet_datas().size());
98
99 for (const auto& itd : incident_tet_datas()) {
100 ret.emplace_back(tuple_from_id(m, PrimitiveType::Triangle, itd.new_face_id));
101 }
102 return ret;
103}
104
105std::vector<Tuple> EdgeOperationData::input_faces(const TetMesh& m) const
106{
107 std::vector<Tuple> ret;
108 ret.reserve(incident_face_datas().size());
109
110 for (const auto& ifd : incident_face_datas()) {
111 ret.emplace_back(ifd.local_operating_tuple);
112 }
113 return ret;
114}
115
116std::vector<Tuple> EdgeOperationData::input_tets(const TetMesh& m) const
117{
118 std::vector<Tuple> ret;
119 ret.reserve(incident_tet_datas().size());
120
121 for (const auto& itd : incident_tet_datas()) {
122 ret.emplace_back(itd.local_operating_tuple);
123 }
124 return ret;
125}
126
127std::array<Tuple, 2> EdgeOperationData::split_output_edges(const TetMesh& m) const
128{
129 std::array<Tuple, 2> r;
130 for (size_t j = 0; j < 2; ++j) {
132 }
133 return r;
134}
135
136std::vector<std::array<Tuple, 2>> EdgeOperationData::split_output_faces(const TetMesh& m) const
137{
138 std::vector<std::array<Tuple, 2>> ret;
139 ret.reserve(incident_face_datas().size());
140
141 for (const auto& ifd : incident_face_datas()) {
142 std::array<Tuple, 2>& r = ret.emplace_back();
143 for (size_t j = 0; j < 2; ++j) {
144 r[j] = tuple_from_id(m, PrimitiveType::Triangle, ifd.split_f[j]);
145 }
146 }
147 return ret;
148}
149
150std::vector<std::array<Tuple, 2>> EdgeOperationData::split_output_tets(const TetMesh& m) const
151{
152 std::vector<std::array<Tuple, 2>> ret;
153 ret.reserve(incident_tet_datas().size());
154
155 for (const auto& itd : incident_tet_datas()) {
156 std::array<Tuple, 2>& r = ret.emplace_back();
157 for (size_t j = 0; j < 2; ++j) {
158 r[j] = tuple_from_id(m, PrimitiveType::Tetrahedron, itd.split_t[j]);
159 }
160 }
161 return ret;
162}
163
164
165} // namespace wmtk::operations::tet_mesh
bool is_free() const
Definition Mesh.hpp:973
Tuple switch_tuple(const Tuple &tuple, PrimitiveType type) const final override
switch the orientation of the Tuple of the given dimension
Definition TetMesh.cpp:250
static Tuple tuple_from_id(const Mesh &m, const PrimitiveType type, const int64_t gid)
static simplex::Simplex simplex_from_id(const Mesh &m, const PrimitiveType type, const int64_t gid)
std::array< Tuple, 2 > input_endpoints(const TetMesh &m) const
std::vector< simplex::Simplex > new_vertices(const Mesh &) const
std::vector< Tuple > collapse_merged_ear_faces(const TetMesh &m) const
std::vector< std::array< Tuple, 2 > > split_output_faces(const TetMesh &) const
std::vector< std::array< Tuple, 2 > > ear_faces(const TetMesh &m) const
std::vector< IncidentFaceData > incident_face_datas() const
std::vector< Tuple > input_faces(const TetMesh &) const
std::vector< std::array< Tuple, 2 > > ear_edges(const TetMesh &m) const
std::vector< std::array< Tuple, 2 > > split_output_tets(const TetMesh &) const
std::array< Tuple, 2 > split_output_edges(const TetMesh &) const
std::vector< IncidentTetData > incident_tet_datas() const
std::vector< Tuple > collapse_merged_ear_edges(const TetMesh &m) const
std::vector< Tuple > input_tets(const TetMesh &) const
std::vector< Tuple > split_new_rib_faces(const TetMesh &) const
std::vector< Tuple > split_new_rib_edges(const TetMesh &) const