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