1 #include <gtest/gtest.h>
2 #include <Unittests/unittests_common.hh>
3 #include <iostream>
4
5 namespace {
6
7 class OpenMeshBoundaryTriangleMesh : public OpenMeshBase {
8
9 protected:
10
11 // This function is called before each test is run
SetUp()12 virtual void SetUp() {
13
14 // Do some initial stuff with the member data here...
15 }
16
17 // This function is called after all tests are through
TearDown()18 virtual void TearDown() {
19
20 // Do some final stuff with the member data here...
21 }
22
23 // Member already defined in OpenMeshBase
24 //Mesh mesh_;
25 };
26
27 /*
28 * ====================================================================
29 * Define tests below
30 * ====================================================================
31 */
32
33 /* Checks vertices, if they are boundary vertices
34 */
TEST_F(OpenMeshBoundaryTriangleMesh,TestBoundaryVertex)35 TEST_F(OpenMeshBoundaryTriangleMesh, TestBoundaryVertex) {
36
37 mesh_.clear();
38
39 // Add some vertices
40 Mesh::VertexHandle vhandle[7];
41
42 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
43 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
44 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
45 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
46 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
47 vhandle[5] = mesh_.add_vertex(Mesh::Point(3, 0, 0));
48
49 // Single point
50 vhandle[6] = mesh_.add_vertex(Mesh::Point(0,-2, 0));
51
52 // Add two faces
53 std::vector<Mesh::VertexHandle> face_vhandles;
54
55 face_vhandles.push_back(vhandle[0]);
56 face_vhandles.push_back(vhandle[1]);
57 face_vhandles.push_back(vhandle[2]);
58 mesh_.add_face(face_vhandles);
59
60 face_vhandles.clear();
61
62 face_vhandles.push_back(vhandle[1]);
63 face_vhandles.push_back(vhandle[3]);
64 face_vhandles.push_back(vhandle[4]);
65 mesh_.add_face(face_vhandles);
66
67 face_vhandles.clear();
68
69 face_vhandles.push_back(vhandle[0]);
70 face_vhandles.push_back(vhandle[3]);
71 face_vhandles.push_back(vhandle[1]);
72 mesh_.add_face(face_vhandles);
73
74 face_vhandles.clear();
75
76 face_vhandles.push_back(vhandle[2]);
77 face_vhandles.push_back(vhandle[1]);
78 face_vhandles.push_back(vhandle[4]);
79 mesh_.add_face(face_vhandles);
80
81 face_vhandles.clear();
82
83 face_vhandles.push_back(vhandle[5]);
84 face_vhandles.push_back(vhandle[2]);
85 face_vhandles.push_back(vhandle[4]);
86 mesh_.add_face(face_vhandles);
87
88 /* Test setup:
89 0 ==== 2
90 |\ 0 /|\
91 | \ / | \
92 |2 1 3|4 5
93 | / \ | /
94 |/ 1 \|/
95 3 ==== 4
96
97 Vertex 6 single
98 */
99
100
101 // Check for boundary vertices
102 EXPECT_TRUE ( mesh_.is_boundary( vhandle[0] ) ) << "Vertex 0 is not boundary!";
103 EXPECT_FALSE( mesh_.is_boundary( vhandle[1] ) ) << "Vertex 1 is boundary!";
104 EXPECT_TRUE ( mesh_.is_boundary( vhandle[2] ) ) << "Vertex 2 is not boundary!";
105 EXPECT_TRUE ( mesh_.is_boundary( vhandle[3] ) ) << "Vertex 3 is not boundary!";
106 EXPECT_TRUE ( mesh_.is_boundary( vhandle[4] ) ) << "Vertex 4 is not boundary!";
107 EXPECT_TRUE ( mesh_.is_boundary( vhandle[5] ) ) << "Vertex 5 is not boundary!";
108
109 EXPECT_TRUE ( mesh_.is_boundary( vhandle[6] ) ) << "Singular Vertex 6 is not boundary!";
110
111
112 }
113
114 /* Checks faces, if they are boundary faces
115 */
TEST_F(OpenMeshBoundaryTriangleMesh,TestBoundaryFace)116 TEST_F(OpenMeshBoundaryTriangleMesh, TestBoundaryFace) {
117
118 mesh_.clear();
119
120 // Add some vertices
121 Mesh::VertexHandle vhandle[7];
122
123 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
124 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
125 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
126 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
127 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
128 vhandle[5] = mesh_.add_vertex(Mesh::Point(3, 0, 0));
129
130 // Single point
131 vhandle[6] = mesh_.add_vertex(Mesh::Point(0,-2, 0));
132
133 // Add two faces
134 std::vector<Mesh::VertexHandle> face_vhandles;
135 std::vector<Mesh::FaceHandle> face_handles;
136
137 face_vhandles.push_back(vhandle[0]);
138 face_vhandles.push_back(vhandle[1]);
139 face_vhandles.push_back(vhandle[2]);
140 face_handles.push_back(mesh_.add_face(face_vhandles));
141
142 face_vhandles.clear();
143
144 face_vhandles.push_back(vhandle[1]);
145 face_vhandles.push_back(vhandle[3]);
146 face_vhandles.push_back(vhandle[4]);
147 face_handles.push_back(mesh_.add_face(face_vhandles));
148
149 face_vhandles.clear();
150
151 face_vhandles.push_back(vhandle[0]);
152 face_vhandles.push_back(vhandle[3]);
153 face_vhandles.push_back(vhandle[1]);
154 face_handles.push_back(mesh_.add_face(face_vhandles));
155
156 face_vhandles.clear();
157
158 face_vhandles.push_back(vhandle[2]);
159 face_vhandles.push_back(vhandle[1]);
160 face_vhandles.push_back(vhandle[4]);
161 face_handles.push_back(mesh_.add_face(face_vhandles));
162
163 face_vhandles.clear();
164
165 face_vhandles.push_back(vhandle[5]);
166 face_vhandles.push_back(vhandle[2]);
167 face_vhandles.push_back(vhandle[4]);
168 face_handles.push_back(mesh_.add_face(face_vhandles));
169
170 /* Test setup:
171 0 ==== 2
172 |\ 0 /|\
173 | \ / | \
174 |2 1 3|4 5
175 | / \ | /
176 |/ 1 \|/
177 3 ==== 4
178
179 Vertex 6 single
180 */
181
182
183 // Check the boundary faces
184 EXPECT_TRUE ( mesh_.is_boundary( face_handles[0] ) ) << "Face 0 is not boundary!";
185 EXPECT_TRUE ( mesh_.is_boundary( face_handles[1] ) ) << "Face 1 is not boundary!";
186 EXPECT_TRUE ( mesh_.is_boundary( face_handles[2] ) ) << "Face 2 is not boundary!";
187 EXPECT_FALSE( mesh_.is_boundary( face_handles[3] ) ) << "Face 3 is boundary!";
188 EXPECT_TRUE ( mesh_.is_boundary( face_handles[4] ) ) << "Face 4 is not boundary!";
189
190 }
191 }
192