1#include "unittests_common.hh"
4using namespace OpenVolumeMesh;
8 generateHexahedralMesh(mesh_);
12 EXPECT_TRUE(hv_it.valid());
14 EXPECT_HANDLE_EQ(VertexHandle(0), *hv_it); ++hv_it;
15 EXPECT_HANDLE_EQ(VertexHandle(1), *hv_it); ++hv_it;
16 EXPECT_HANDLE_EQ(VertexHandle(2), *hv_it); ++hv_it;
17 EXPECT_HANDLE_EQ(VertexHandle(3), *hv_it); ++hv_it;
18 EXPECT_HANDLE_EQ(VertexHandle(4), *hv_it); ++hv_it;
19 EXPECT_HANDLE_EQ(VertexHandle(7), *hv_it); ++hv_it;
20 EXPECT_HANDLE_EQ(VertexHandle(6), *hv_it); ++hv_it;
21 EXPECT_HANDLE_EQ(VertexHandle(5), *hv_it);
26 generateTetrahedralMesh(mesh_);
32 EXPECT_TRUE(vv_it.valid());
34 std::set<VertexHandle> onering;
40 onering.insert(*vv_it);
45 EXPECT_EQ(3, valence);
48 EXPECT_EQ(3u, onering.size());
51 EXPECT_EQ(onering.end(), std::find(onering.begin(), onering.end(), VertexHandle(-1)));
57 std::set<VertexHandle> onering;
60 for (
auto vh : mesh_.vertex_vertices(VertexHandle(0)))
67 EXPECT_EQ(3, valence);
70 EXPECT_EQ(3u, onering.size());
73 EXPECT_EQ(onering.end(), std::find(onering.begin(), onering.end(), VertexHandle(-1)));
81 generateTetrahedralMesh(mesh_);
87 EXPECT_TRUE(vf_it.valid());
89 std::set<FaceHandle> incident_faces;
95 incident_faces.insert(*vf_it);
100 EXPECT_EQ(3, valence);
103 EXPECT_EQ(3u, incident_faces.size());
106 EXPECT_EQ(incident_faces.end(), std::find(incident_faces.begin(), incident_faces.end(), FaceHandle(-1)));
112 std::set<VertexHandle> onering;
115 for (
auto vh : mesh_.vertex_vertices(VertexHandle(0)))
122 EXPECT_EQ(3, valence);
125 EXPECT_EQ(3u, onering.size());
128 EXPECT_EQ(onering.end(), std::find(onering.begin(), onering.end(), VertexHandle(-1)));
146 mesh_.add_cell({hfh012, hfh023, hfh031, hfh132});
148 auto hfhe_it = mesh_.hfhe_iter(hfh012);
149 ASSERT_EQ(hfhe_it.cur_handle(), mesh_.find_halfedge(vh0, vh1));
151 ASSERT_EQ(hfhe_it.cur_handle(), mesh_.find_halfedge(vh1, vh2));
153 ASSERT_EQ(hfhe_it.cur_handle(), mesh_.find_halfedge(vh2, vh0));
155 hfhe_it = mesh_.hfhe_iter(hfh012.opposite_handle());
156 ASSERT_EQ(hfhe_it.cur_handle(), mesh_.find_halfedge(vh0, vh2));
158 ASSERT_EQ(hfhe_it.cur_handle(), mesh_.find_halfedge(vh2, vh1));
160 ASSERT_EQ(hfhe_it.cur_handle(), mesh_.find_halfedge(vh1, vh0));
175 mesh_.add_cell({hfh012, hfh023, hfh031, hfh132});
177 auto hfv_it = mesh_.hfv_iter(hfh012);
178 ASSERT_EQ(hfv_it.cur_handle(), vh0);
180 ASSERT_EQ(hfv_it.cur_handle(), vh1);
182 ASSERT_EQ(hfv_it.cur_handle(), vh2);
184 hfv_it = mesh_.hfv_iter(hfh012.opposite_handle());
185 ASSERT_EQ(hfv_it.cur_handle(), vh0);
187 ASSERT_EQ(hfv_it.cur_handle(), vh2);
189 ASSERT_EQ(hfv_it.cur_handle(), vh1);
200 auto vhs = mesh_.get_halfface_vertices(hfh012);
201 ASSERT_EQ(vhs[0], vh0);
202 ASSERT_EQ(vhs[1], vh1);
203 ASSERT_EQ(vhs[2], vh2);
205 vhs = mesh_.get_halfface_vertices(hfh012.opposite_handle());
206 ASSERT_EQ(vhs[0], vh0);
207 ASSERT_EQ(vhs[1], vh2);
208 ASSERT_EQ(vhs[2], vh1);
219 auto vhs = mesh_.get_halfface_vertices(hfh012, mesh_.find_halfedge(vh1, vh2));
220 ASSERT_EQ(vhs[0], vh1);
221 ASSERT_EQ(vhs[1], vh2);
222 ASSERT_EQ(vhs[2], vh0);
224 vhs = mesh_.get_halfface_vertices(hfh012.opposite_handle(), mesh_.find_halfedge(vh2, vh1));
225 ASSERT_EQ(vhs[0], vh2);
226 ASSERT_EQ(vhs[1], vh1);
227 ASSERT_EQ(vhs[2], vh0);
238 auto vhs = mesh_.get_halfface_vertices(hfh012, vh2);
239 ASSERT_EQ(vhs[0], vh2);
240 ASSERT_EQ(vhs[1], vh0);
241 ASSERT_EQ(vhs[2], vh1);
243 vhs = mesh_.get_halfface_vertices(hfh012.opposite_handle(), vh1);
244 ASSERT_EQ(vhs[0], vh1);
245 ASSERT_EQ(vhs[1], vh0);
246 ASSERT_EQ(vhs[2], vh2);
251 generateHexahedralMesh(mesh_);
253 for (
const auto& vh: mesh_.vertices()) { _dummy = vh;}
254 const auto& constref = mesh_;
255 for (
const auto& vh: constref.vertices()) { _dummy = vh;}
SmartVertexHandle add_vertex(const Point _p)
Iterate over all vertices of a hexahedron in a specific order.