1 #include <gtest/gtest.h>
2 #include <Unittests/unittests_common.hh>
3 #include <iostream>
4 #include <OpenMesh/Tools/SmartTagger/SmartTaggerT.hh>
5
6 namespace {
7
8 class OpenMeshSmartTagger : public OpenMeshBase {
9
10 protected:
11
12 // This function is called before each test is run
SetUp()13 virtual void SetUp() {
14
15 // Do some initial stuff with the member data here...
16 }
17
18 // This function is called after all tests are through
TearDown()19 virtual void TearDown() {
20
21 // Do some final stuff with the member data here...
22 }
23
24 // Member already defined in OpenMeshBase
25 //Mesh mesh_;
26 };
27
28 /*
29 * ====================================================================
30 * Define tests below
31 * ====================================================================
32 */
33
34 /* Checks SmartTagger on vertices
35 */
TEST_F(OpenMeshSmartTagger,SmartTaggerVertices)36 TEST_F(OpenMeshSmartTagger, SmartTaggerVertices) {
37
38 mesh_.clear();
39
40 // Add some vertices
41 Mesh::VertexHandle vhandle[7];
42
43 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
44 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
45 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
46 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
47 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
48 vhandle[5] = mesh_.add_vertex(Mesh::Point(3, 0, 0));
49
50
51 // Add two faces
52 std::vector<Mesh::VertexHandle> face_vhandles;
53
54 face_vhandles.push_back(vhandle[0]);
55 face_vhandles.push_back(vhandle[1]);
56 face_vhandles.push_back(vhandle[2]);
57 mesh_.add_face(face_vhandles);
58
59 face_vhandles.clear();
60
61 face_vhandles.push_back(vhandle[1]);
62 face_vhandles.push_back(vhandle[3]);
63 face_vhandles.push_back(vhandle[4]);
64 mesh_.add_face(face_vhandles);
65
66 face_vhandles.clear();
67
68 face_vhandles.push_back(vhandle[0]);
69 face_vhandles.push_back(vhandle[3]);
70 face_vhandles.push_back(vhandle[1]);
71 mesh_.add_face(face_vhandles);
72
73 face_vhandles.clear();
74
75 face_vhandles.push_back(vhandle[2]);
76 face_vhandles.push_back(vhandle[1]);
77 face_vhandles.push_back(vhandle[4]);
78 mesh_.add_face(face_vhandles);
79
80 face_vhandles.clear();
81
82 face_vhandles.push_back(vhandle[5]);
83 face_vhandles.push_back(vhandle[2]);
84 face_vhandles.push_back(vhandle[4]);
85 mesh_.add_face(face_vhandles);
86
87 /* Test setup:
88 0 ==== 2
89 |\ /|\
90 | \ / | \
91 | 1 | 5
92 | / \ | /
93 |/ \|/
94 3 ==== 4
95
96 */
97
98
99 OpenMesh::SmartTaggerVT< Mesh > tagger(mesh_);
100
101
102 EXPECT_FALSE( tagger.is_tagged(vhandle[0] ) ) << "Vertex should be untagged after init!";
103 EXPECT_FALSE( tagger.is_tagged(vhandle[1] ) ) << "Vertex should be untagged after init!";
104 EXPECT_FALSE( tagger.is_tagged(vhandle[2] ) ) << "Vertex should be untagged after init!";
105 EXPECT_FALSE( tagger.is_tagged(vhandle[3] ) ) << "Vertex should be untagged after init!";
106 EXPECT_FALSE( tagger.is_tagged(vhandle[4] ) ) << "Vertex should be untagged after init!";
107 EXPECT_FALSE( tagger.is_tagged(vhandle[5] ) ) << "Vertex should be untagged after init!";
108
109 // Reset tagged flag on all vertices
110 tagger.untag_all();
111
112 EXPECT_FALSE( tagger.is_tagged(vhandle[0] ) ) << "Vertex should be untagged after first untag_all!";
113 EXPECT_FALSE( tagger.is_tagged(vhandle[1] ) ) << "Vertex should be untagged after first untag_all!";
114 EXPECT_FALSE( tagger.is_tagged(vhandle[2] ) ) << "Vertex should be untagged after first untag_all!";
115 EXPECT_FALSE( tagger.is_tagged(vhandle[3] ) ) << "Vertex should be untagged after first untag_all!";
116 EXPECT_FALSE( tagger.is_tagged(vhandle[4] ) ) << "Vertex should be untagged after first untag_all!";
117 EXPECT_FALSE( tagger.is_tagged(vhandle[5] ) ) << "Vertex should be untagged after first untag_all!";
118
119
120 // Set tagged:
121 tagger.set_tag(vhandle[2]);
122 tagger.set_tag(vhandle[4]);
123
124 EXPECT_FALSE( tagger.is_tagged(vhandle[0] ) ) << "Vertex should be untagged!";
125 EXPECT_FALSE( tagger.is_tagged(vhandle[1] ) ) << "Vertex should be untagged!";
126 EXPECT_TRUE( tagger.is_tagged(vhandle[2] ) ) << "Vertex should be tagged!";
127 EXPECT_FALSE( tagger.is_tagged(vhandle[3] ) ) << "Vertex should be untagged!";
128 EXPECT_TRUE( tagger.is_tagged(vhandle[4] ) ) << "Vertex should be tagged!";
129 EXPECT_FALSE( tagger.is_tagged(vhandle[5] ) ) << "Vertex should be untagged!";
130
131 // Reset tagged flag on all vertices
132 tagger.untag_all();
133
134 EXPECT_FALSE( tagger.is_tagged(vhandle[0] ) ) << "Vertex should be untagged after second untag_all!";
135 EXPECT_FALSE( tagger.is_tagged(vhandle[1] ) ) << "Vertex should be untagged after second untag_all!";
136 EXPECT_FALSE( tagger.is_tagged(vhandle[2] ) ) << "Vertex should be untagged after second untag_all!";
137 EXPECT_FALSE( tagger.is_tagged(vhandle[3] ) ) << "Vertex should be untagged after second untag_all!";
138 EXPECT_FALSE( tagger.is_tagged(vhandle[4] ) ) << "Vertex should be untagged after second untag_all!";
139 EXPECT_FALSE( tagger.is_tagged(vhandle[5] ) ) << "Vertex should be untagged after second untag_all!";
140
141 }
142
143 /* Checks SmartTagger on vertices
144 */
TEST_F(OpenMeshSmartTagger,SmartTaggerFaces)145 TEST_F(OpenMeshSmartTagger, SmartTaggerFaces) {
146
147 mesh_.clear();
148
149 // Add some vertices
150 Mesh::VertexHandle vhandle[7];
151
152 vhandle[0] = mesh_.add_vertex(Mesh::Point(0, 1, 0));
153 vhandle[1] = mesh_.add_vertex(Mesh::Point(1, 0, 0));
154 vhandle[2] = mesh_.add_vertex(Mesh::Point(2, 1, 0));
155 vhandle[3] = mesh_.add_vertex(Mesh::Point(0,-1, 0));
156 vhandle[4] = mesh_.add_vertex(Mesh::Point(2,-1, 0));
157 vhandle[5] = mesh_.add_vertex(Mesh::Point(3, 0, 0));
158
159
160 // Add two faces
161 std::vector<Mesh::VertexHandle> face_vhandles;
162
163 face_vhandles.push_back(vhandle[0]);
164 face_vhandles.push_back(vhandle[1]);
165 face_vhandles.push_back(vhandle[2]);
166 Mesh::FaceHandle fh1 = mesh_.add_face(face_vhandles);
167
168 face_vhandles.clear();
169
170 face_vhandles.push_back(vhandle[1]);
171 face_vhandles.push_back(vhandle[3]);
172 face_vhandles.push_back(vhandle[4]);
173 Mesh::FaceHandle fh2 = mesh_.add_face(face_vhandles);
174
175 face_vhandles.clear();
176
177 face_vhandles.push_back(vhandle[0]);
178 face_vhandles.push_back(vhandle[3]);
179 face_vhandles.push_back(vhandle[1]);
180 Mesh::FaceHandle fh3 = mesh_.add_face(face_vhandles);
181
182 face_vhandles.clear();
183
184 face_vhandles.push_back(vhandle[2]);
185 face_vhandles.push_back(vhandle[1]);
186 face_vhandles.push_back(vhandle[4]);
187 Mesh::FaceHandle fh4 = mesh_.add_face(face_vhandles);
188
189 face_vhandles.clear();
190
191 face_vhandles.push_back(vhandle[5]);
192 face_vhandles.push_back(vhandle[2]);
193 face_vhandles.push_back(vhandle[4]);
194 Mesh::FaceHandle fh5 = mesh_.add_face(face_vhandles);
195
196 /* Test setup:
197 0 ==== 2
198 |\ /|\
199 | \ / | \
200 | 1 | 5
201 | / \ | /
202 |/ \|/
203 3 ==== 4
204
205 */
206
207
208 OpenMesh::SmartTaggerFT< Mesh > tagger(mesh_);
209
210
211 EXPECT_FALSE( tagger.is_tagged( fh1 ) ) << "Face should be untagged after init!";
212 EXPECT_FALSE( tagger.is_tagged( fh2 ) ) << "Face should be untagged after init!";
213 EXPECT_FALSE( tagger.is_tagged( fh3 ) ) << "Face should be untagged after init!";
214 EXPECT_FALSE( tagger.is_tagged( fh4 ) ) << "Face should be untagged after init!";
215 EXPECT_FALSE( tagger.is_tagged( fh5 ) ) << "Face should be untagged after init!";
216
217
218 // Reset tagged flag on all vertices
219 tagger.untag_all();
220
221 EXPECT_FALSE( tagger.is_tagged( fh1 ) ) << "Face should be untagged after first untag_all!";
222 EXPECT_FALSE( tagger.is_tagged( fh2 ) ) << "Face should be untagged after first untag_all!";
223 EXPECT_FALSE( tagger.is_tagged( fh3 ) ) << "Face should be untagged after first untag_all!";
224 EXPECT_FALSE( tagger.is_tagged( fh4 ) ) << "Face should be untagged after first untag_all!";
225 EXPECT_FALSE( tagger.is_tagged( fh5 ) ) << "Face should be untagged after first untag_all!";
226
227
228
229 // Set tagged:
230 tagger.set_tag(fh3);
231 tagger.set_tag(fh5);
232
233
234 EXPECT_FALSE( tagger.is_tagged(fh1 ) ) << "Face should be untagged!";
235 EXPECT_FALSE( tagger.is_tagged(fh2 ) ) << "Face should be untagged!";
236 EXPECT_TRUE( tagger.is_tagged(fh3 ) ) << "Face should be tagged!";
237 EXPECT_FALSE( tagger.is_tagged(fh4 ) ) << "Face should be tagged!";
238 EXPECT_TRUE( tagger.is_tagged(fh5 ) ) << "Face should be tagged!";
239
240
241 // Reset tagged flag on all vertices
242 tagger.untag_all();
243
244 EXPECT_FALSE( tagger.is_tagged( fh1 ) ) << "Face should be untagged after second untag_all!";
245 EXPECT_FALSE( tagger.is_tagged( fh2 ) ) << "Face should be untagged after second untag_all!";
246 EXPECT_FALSE( tagger.is_tagged( fh3 ) ) << "Face should be untagged after second untag_all!";
247 EXPECT_FALSE( tagger.is_tagged( fh4 ) ) << "Face should be untagged after second untag_all!";
248 EXPECT_FALSE( tagger.is_tagged( fh5 ) ) << "Face should be untagged after second untag_all!";
249
250 }
251
252 }
253