1 #include <gtest/gtest.h> 2 #include <Unittests/unittests_common.hh> 12 virtual void SetUp() {
18 virtual void TearDown() {
37 TEST_F(OpenMeshReadWritePLY, LoadSimplePointPLYFileWithBadEncoding) {
43 EXPECT_TRUE(ok) <<
"Unable to load pointCloudBadEncoding.ply";
45 EXPECT_EQ(10u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
46 EXPECT_EQ(0u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
47 EXPECT_EQ(0u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
54 TEST_F(OpenMeshReadWritePLY, LoadSimplePointPLYFileWithGoodEncoding) {
60 EXPECT_TRUE(ok) <<
"Unable to load pointCloudGoodEncoding.ply";
62 EXPECT_EQ(10u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
63 EXPECT_EQ(0u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
64 EXPECT_EQ(0u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
70 TEST_F(OpenMeshReadWritePLY, LoadSimplePLY) {
76 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal.ply";
78 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
79 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
80 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
88 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYNoEndl) {
94 EXPECT_TRUE(ok) <<
"Unable to load sphere840.ply";
96 EXPECT_EQ(422u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
97 EXPECT_EQ(1260u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
98 EXPECT_EQ(840u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
105 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYForceVertexColorsAlthoughNotAvailable) {
109 mesh_.request_vertex_colors();
111 std::string file_name =
"cube-minimal.ply";
118 EXPECT_TRUE(ok) << file_name;
120 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
121 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
122 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
123 EXPECT_EQ(36u , mesh_.n_halfedges()) <<
"The number of loaded halfedges is not correct!";
125 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
126 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
127 EXPECT_FALSE(options.vertex_has_color()) <<
"Wrong user options are returned!";
133 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithVertexColors) {
137 mesh_.request_vertex_colors();
144 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-vertexColors.ply";
146 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
147 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
148 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
150 #ifdef TEST_DOUBLE_TRAITS 151 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
152 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
153 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
155 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
156 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
157 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
159 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
160 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
161 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
163 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
164 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
165 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
167 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
168 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
169 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
171 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
172 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
173 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
175 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
176 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
177 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
179 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
180 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
181 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
184 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
185 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
186 EXPECT_TRUE(options.vertex_has_color()) <<
"Wrong user options are returned!";
188 mesh_.release_vertex_colors();
194 TEST_F(OpenMeshReadWritePLY, LoadPLYFromMeshLabWithVertexColors) {
198 mesh_.request_vertex_colors();
205 EXPECT_TRUE(ok) <<
"Unable to load meshlab.ply";
207 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
208 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
209 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
211 #ifdef TEST_DOUBLE_TRAITS 212 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
213 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
214 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
216 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
217 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
218 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
220 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
221 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
222 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
224 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
225 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
226 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
228 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
229 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
230 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
232 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
233 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
234 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
236 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
237 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
238 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
240 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
241 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
242 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
245 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
246 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
247 EXPECT_TRUE(options.vertex_has_color()) <<
"Wrong user options are returned!";
249 mesh_.release_vertex_colors();
255 TEST_F(OpenMeshReadWritePLY, WriteAndReadBinaryPLYWithVertexColors) {
259 mesh_.request_vertex_colors();
266 EXPECT_TRUE(ok) <<
"Unable to load meshlab.ply";
271 EXPECT_TRUE(ok) <<
"Unable to write meshlab_binary.ply";
275 EXPECT_TRUE(ok) <<
"Unable to load meshlab_binary.ply";
277 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
278 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
279 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
281 #ifdef TEST_DOUBLE_TRAITS 282 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
283 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
284 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
286 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
287 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
288 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
290 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
291 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
292 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
294 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
295 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
296 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
298 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
299 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
300 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
302 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
303 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
304 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
306 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
307 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
308 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
310 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
311 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
312 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
315 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
316 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
317 EXPECT_TRUE(options.vertex_has_color()) <<
"Wrong user options are returned!";
319 mesh_.release_vertex_colors();
325 TEST_F(OpenMeshReadWritePLY, WriteAndReadPLYWithFloatVertexColors) {
329 mesh_.request_vertex_colors();
336 EXPECT_TRUE(ok) <<
"Unable to load meshlab.ply";
341 EXPECT_TRUE(ok) <<
"Unable to write meshlab_float.ply";
345 EXPECT_TRUE(ok) <<
"Unable to load meshlab_float.ply";
347 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
348 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
349 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
351 #ifdef TEST_DOUBLE_TRAITS 352 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
353 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
354 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
356 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
357 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
358 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
360 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
361 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
362 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
364 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
365 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
366 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
368 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
369 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
370 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
372 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
373 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
374 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
376 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
377 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
378 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
380 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
381 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
382 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
385 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
386 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
387 EXPECT_TRUE(options.vertex_has_color()) <<
"Wrong user options are returned!";
388 EXPECT_TRUE(options.color_is_float()) <<
"Wrong user options are returned!";
390 mesh_.release_vertex_colors();
396 TEST_F(OpenMeshReadWritePLY, WriteAndReadBinaryPLYWithFloatVertexColors) {
400 mesh_.request_vertex_colors();
407 EXPECT_TRUE(ok) <<
"Unable to load meshlab.ply";
413 EXPECT_TRUE(ok) <<
"Unable to write meshlab_binary_float.ply";
417 EXPECT_TRUE(ok) <<
"Unable to load meshlab_binary_float.ply";
419 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
420 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
421 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
423 #ifdef TEST_DOUBLE_TRAITS 424 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
425 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
426 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
428 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
429 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
430 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
432 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
433 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
434 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
436 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
437 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
438 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
440 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
441 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
442 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
444 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
445 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
446 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
448 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
449 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
450 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
452 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
453 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
454 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
457 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
458 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
459 EXPECT_TRUE(options.vertex_has_color()) <<
"Wrong user options are returned!";
460 EXPECT_TRUE(options.color_is_float()) <<
"Wrong user options are returned!";
461 EXPECT_TRUE(options.is_binary()) <<
"Wrong user options are returned!";
463 mesh_.release_vertex_colors();
469 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithTexCoords) {
473 mesh_.request_vertex_texcoords2D();
480 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-texCoords.ply";
482 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
483 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
484 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
486 EXPECT_EQ(10, mesh_.texcoord2D(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
487 EXPECT_EQ(10, mesh_.texcoord2D(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
489 EXPECT_EQ(6, mesh_.texcoord2D(mesh_.vertex_handle(2))[0] ) <<
"Wrong vertex color at vertex 2 component 0";
490 EXPECT_EQ(6, mesh_.texcoord2D(mesh_.vertex_handle(2))[1] ) <<
"Wrong vertex color at vertex 2 component 1";
492 EXPECT_EQ(9, mesh_.texcoord2D(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
493 EXPECT_EQ(9, mesh_.texcoord2D(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
495 EXPECT_EQ(12, mesh_.texcoord2D(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
496 EXPECT_EQ(12, mesh_.texcoord2D(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
499 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
500 EXPECT_TRUE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
501 EXPECT_FALSE(options.vertex_has_color()) <<
"Wrong user options are returned!";
503 mesh_.release_vertex_texcoords2D();
509 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithNormals) {
513 mesh_.request_vertex_normals();
520 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-normals.ply";
522 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
523 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
524 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
526 EXPECT_TRUE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
527 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
528 EXPECT_FALSE(options.vertex_has_color()) <<
"Wrong user options are returned!";
531 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(0))[0] ) <<
"Wrong normal at vertex 0 component 0";
532 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(0))[1] ) <<
"Wrong normal at vertex 0 component 1";
533 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(0))[2] ) <<
"Wrong normal at vertex 0 component 2";
535 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(3))[0] ) <<
"Wrong normal at vertex 3 component 0";
536 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(3))[1] ) <<
"Wrong normal at vertex 3 component 1";
537 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(3))[2] ) <<
"Wrong normal at vertex 3 component 2";
539 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(4))[0] ) <<
"Wrong normal at vertex 4 component 0";
540 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(4))[1] ) <<
"Wrong normal at vertex 4 component 1";
541 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(4))[2] ) <<
"Wrong normal at vertex 4 component 2";
543 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(7))[0] ) <<
"Wrong normal at vertex 7 component 0";
544 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(7))[1] ) <<
"Wrong normal at vertex 7 component 1";
545 EXPECT_EQ(2, mesh_.normal(mesh_.vertex_handle(7))[2] ) <<
"Wrong normal at vertex 7 component 2";
547 mesh_.release_vertex_normals();
554 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithCustomProps) {
563 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-custom_props.ply";
565 EXPECT_EQ(8u , mesh.n_vertices()) <<
"The number of loaded vertices is not correct!";
566 EXPECT_EQ(12u , mesh.n_edges()) <<
"The number of loaded edges is not correct!";
567 EXPECT_EQ(6u , mesh.n_faces()) <<
"The number of loaded faces is not correct!";
571 ASSERT_TRUE(mesh.get_property_handle(qualityProp,
"quality")) <<
"Could not access quality property";
572 ASSERT_TRUE(mesh.get_property_handle(indexProp,
"index")) <<
"Could not access index property";
575 for (
unsigned i = 0; i < mesh.n_vertices(); ++i)
576 EXPECT_EQ(i ,mesh.property(indexProp,
OpenMesh::VertexHandle(i))) <<
"Vertex index at vertex " << i <<
" is wrong";
580 EXPECT_EQ(0.5f,mesh.property(qualityProp,
OpenMesh::VertexHandle(1))) <<
"Wrong quality value at Vertex 1";
581 EXPECT_EQ(0.7f,mesh.property(qualityProp,
OpenMesh::VertexHandle(2))) <<
"Wrong quality value at Vertex 2";
583 EXPECT_EQ(0.1f,mesh.property(qualityProp,
OpenMesh::VertexHandle(4))) <<
"Wrong quality value at Vertex 4";
591 ASSERT_TRUE(mesh.get_property_handle(testValues,
"test_values")) <<
"Could not access texcoords per face";
605 ASSERT_TRUE(mesh.get_property_handle(texCoordsPerFace,
"texcoords")) <<
"Could not access texcoords per face";
607 for (Mesh::FaceIter f_iter = mesh.faces_begin(); f_iter != mesh.faces_end(); ++f_iter)
609 EXPECT_EQ(8u, mesh.property(texCoordsPerFace, *f_iter).size()) <<
"Texcoords per face container has wrong size on face: " << f_iter->
idx();
610 if (!mesh.property(texCoordsPerFace, *f_iter).empty())
612 EXPECT_EQ(1.0, mesh.property(texCoordsPerFace, *f_iter)[0]) <<
"Texcoords wrong on index 0 with face: " << f_iter->idx();
613 EXPECT_EQ(1.0, mesh.property(texCoordsPerFace, *f_iter)[1]) <<
"Texcoords wrong on index 1 with face: " << f_iter->idx();
614 EXPECT_EQ(-1.0f, mesh.property(texCoordsPerFace, *f_iter)[2]) <<
"Texcoords wrong on index 2 with face: " << f_iter->idx();
615 EXPECT_EQ(-1.0f, mesh.property(texCoordsPerFace, *f_iter)[3]) <<
"Texcoords wrong on index 3 with face: " << f_iter->idx();
616 EXPECT_EQ(0.0f, mesh.property(texCoordsPerFace, *f_iter)[4]) <<
"Texcoords wrong on index 4 with face: " << f_iter->idx();
617 EXPECT_EQ(0.0f, mesh.property(texCoordsPerFace, *f_iter)[5]) <<
"Texcoords wrong on index 5 with face: " << f_iter->idx();
618 EXPECT_EQ(-0.5f, mesh.property(texCoordsPerFace, *f_iter)[6]) <<
"Texcoords wrong on index 6 with face: " << f_iter->idx();
619 EXPECT_EQ(-0.5f, mesh.property(texCoordsPerFace, *f_iter)[7]) <<
"Texcoords wrong on index 7 with face: " << f_iter->idx();
625 ASSERT_TRUE(mesh.get_property_handle(faceIndex,
"faceIndex")) <<
"Could not access faceIndex per face";
627 EXPECT_EQ(0u,mesh.property(faceIndex,
OpenMesh::FaceHandle(0))) <<
"Wrong index value at FaceHandle 0";
628 EXPECT_EQ(1u,mesh.property(faceIndex,
OpenMesh::FaceHandle(1))) <<
"Wrong index value at FaceHandle 1";
629 EXPECT_EQ(2u,mesh.property(faceIndex,
OpenMesh::FaceHandle(2))) <<
"Wrong index value at FaceHandle 2";
630 EXPECT_EQ(3u,mesh.property(faceIndex,
OpenMesh::FaceHandle(3))) <<
"Wrong index value at FaceHandle 3";
631 EXPECT_EQ(4u,mesh.property(faceIndex,
OpenMesh::FaceHandle(4))) <<
"Wrong index value at FaceHandle 4";
632 EXPECT_EQ(5u,mesh.property(faceIndex,
OpenMesh::FaceHandle(5))) <<
"Wrong index value at FaceHandle 5";
639 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithCustomPropsBinary) {
649 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-custom_props.ply";
651 EXPECT_EQ(8u , mesh.n_vertices()) <<
"The number of loaded vertices is not correct!";
652 EXPECT_EQ(12u , mesh.n_edges()) <<
"The number of loaded edges is not correct!";
653 EXPECT_EQ(6u , mesh.n_faces()) <<
"The number of loaded faces is not correct!";
657 ASSERT_TRUE(mesh.get_property_handle(qualityProp,
"quality")) <<
"Could not access quality property";
658 ASSERT_TRUE(mesh.get_property_handle(indexProp,
"index")) <<
"Could not access index property";
661 for (
unsigned i = 0; i < mesh.n_vertices(); ++i)
662 EXPECT_EQ(i ,mesh.property(indexProp,
OpenMesh::VertexHandle(i))) <<
"Vertex index at vertex " << i <<
" is wrong";
666 EXPECT_EQ(0.5f,mesh.property(qualityProp,
OpenMesh::VertexHandle(1))) <<
"Wrong quality value at Vertex 1";
667 EXPECT_EQ(0.7f,mesh.property(qualityProp,
OpenMesh::VertexHandle(2))) <<
"Wrong quality value at Vertex 2";
669 EXPECT_EQ(0.1f,mesh.property(qualityProp,
OpenMesh::VertexHandle(4))) <<
"Wrong quality value at Vertex 4";
677 ASSERT_TRUE(mesh.get_property_handle(testValues,
"test_values")) <<
"Could not access texcoords per face";
691 ASSERT_TRUE(mesh.get_property_handle(texCoordsPerFace,
"texcoords")) <<
"Could not access texcoords per face";
693 for (Mesh::FaceIter f_iter = mesh.faces_begin(); f_iter != mesh.faces_end(); ++f_iter)
695 EXPECT_EQ(8u, mesh.property(texCoordsPerFace, *f_iter).size()) <<
"Texcoords per face container has wrong size on face: " << f_iter->
idx();
696 if (!mesh.property(texCoordsPerFace, *f_iter).empty())
698 EXPECT_EQ(1.0, mesh.property(texCoordsPerFace, *f_iter)[0]) <<
"Texcoords wrong on index 0 with face: " << f_iter->idx();
699 EXPECT_EQ(1.0, mesh.property(texCoordsPerFace, *f_iter)[1]) <<
"Texcoords wrong on index 1 with face: " << f_iter->idx();
700 EXPECT_EQ(-1.0f, mesh.property(texCoordsPerFace, *f_iter)[2]) <<
"Texcoords wrong on index 2 with face: " << f_iter->idx();
701 EXPECT_EQ(-1.0f, mesh.property(texCoordsPerFace, *f_iter)[3]) <<
"Texcoords wrong on index 3 with face: " << f_iter->idx();
702 EXPECT_EQ(0.0f, mesh.property(texCoordsPerFace, *f_iter)[4]) <<
"Texcoords wrong on index 4 with face: " << f_iter->idx();
703 EXPECT_EQ(0.0f, mesh.property(texCoordsPerFace, *f_iter)[5]) <<
"Texcoords wrong on index 5 with face: " << f_iter->idx();
704 EXPECT_EQ(-0.5f, mesh.property(texCoordsPerFace, *f_iter)[6]) <<
"Texcoords wrong on index 6 with face: " << f_iter->idx();
705 EXPECT_EQ(-0.5f, mesh.property(texCoordsPerFace, *f_iter)[7]) <<
"Texcoords wrong on index 7 with face: " << f_iter->idx();
711 ASSERT_TRUE(mesh.get_property_handle(faceIndex,
"faceIndex")) <<
"Could not access faceIndex per face";
713 EXPECT_EQ(0u,mesh.property(faceIndex,
OpenMesh::FaceHandle(0))) <<
"Wrong index value at FaceHandle 0";
714 EXPECT_EQ(1u,mesh.property(faceIndex,
OpenMesh::FaceHandle(1))) <<
"Wrong index value at FaceHandle 1";
715 EXPECT_EQ(2u,mesh.property(faceIndex,
OpenMesh::FaceHandle(2))) <<
"Wrong index value at FaceHandle 2";
716 EXPECT_EQ(3u,mesh.property(faceIndex,
OpenMesh::FaceHandle(3))) <<
"Wrong index value at FaceHandle 3";
717 EXPECT_EQ(4u,mesh.property(faceIndex,
OpenMesh::FaceHandle(4))) <<
"Wrong index value at FaceHandle 4";
718 EXPECT_EQ(5u,mesh.property(faceIndex,
OpenMesh::FaceHandle(5))) <<
"Wrong index value at FaceHandle 5";
722 TEST_F(OpenMeshReadWritePLY, WriteReadSimplePLYWithCustomProps) {
736 const std::string indexPropName =
"mySuperIndexProperty";
737 const std::string qualityPropName =
"quality";
738 const std::string facePropName =
"anotherPropForFaces";
739 const std::string nonPersistantName =
"nonPersistant";
740 const std::string removedPropName =
"willBeRemoved";
742 mesh.add_property(indexProp,indexPropName);
743 mesh.add_property(qualityProp,qualityPropName);
744 mesh.add_property(removedProp, removedPropName);
745 mesh.add_property(faceProp,facePropName);
746 mesh.add_property(nonPersistant,nonPersistantName);
748 mesh.property(indexProp).set_persistent(
true);
749 mesh.property(qualityProp).set_persistent(
true);
750 mesh.property(faceProp).set_persistent(
true);
751 mesh.remove_property(removedProp);
754 for (Mesh::VertexIter v_iter = mesh.vertices_begin(); v_iter != mesh.vertices_end(); ++v_iter, ++i)
756 mesh.property(indexProp, *v_iter) = i;
757 mesh.property(qualityProp, *v_iter) = 3.5*i;
761 for (Mesh::FaceIter f_iter = mesh.faces_begin(); f_iter != mesh.faces_end(); ++f_iter, ++i)
763 mesh.property(faceProp, *f_iter) = -i;
766 const char* outFilename =
"cube-minimal-customprops_openmeshOutputTestfile.ply";
773 EXPECT_FALSE(loadedMesh.get_property_handle(indexProp,indexPropName)) <<
"Could access to property which was deleted";
781 ASSERT_TRUE(loadedMesh.get_property_handle(indexProp,indexPropName)) <<
"Could not access index property";
782 ASSERT_TRUE(loadedMesh.get_property_handle(qualityProp,qualityPropName)) <<
"Could not access quality property";
783 ASSERT_TRUE(loadedMesh.get_property_handle(faceProp,facePropName)) <<
"Could not access face property";
784 EXPECT_FALSE(loadedMesh.get_property_handle(nonPersistant,nonPersistantName)) <<
"Could access non persistant property";
787 for (Mesh::VertexIter v_iter = loadedMesh.vertices_begin(); v_iter != loadedMesh.vertices_end(); ++v_iter, ++i)
789 EXPECT_EQ(loadedMesh.property(indexProp, *v_iter),
static_cast<unsigned>(i));
790 EXPECT_EQ(loadedMesh.property(qualityProp, *v_iter),3.5*i);
794 for (Mesh::FaceIter f_iter = loadedMesh.faces_begin(); f_iter != loadedMesh.faces_end(); ++f_iter, ++i)
796 EXPECT_EQ(loadedMesh.property(faceProp, *f_iter),-i);
804 TEST_F(OpenMeshReadWritePLY, WriteReadBinaryPLYWithCustomProps) {
818 const std::string indexPropName =
"mySuperIndexProperty";
819 const std::string qualityPropName =
"quality";
820 const std::string facePropName =
"anotherPropForFaces";
821 const std::string nonPersistantName =
"nonPersistant";
822 const std::string removedPropName =
"willBeRemoved";
824 mesh.add_property(indexProp,indexPropName);
825 mesh.add_property(qualityProp,qualityPropName);
826 mesh.add_property(removedProp, removedPropName);
827 mesh.add_property(faceProp,facePropName);
828 mesh.add_property(nonPersistant,nonPersistantName);
830 mesh.property(indexProp).set_persistent(
true);
831 mesh.property(qualityProp).set_persistent(
true);
832 mesh.property(faceProp).set_persistent(
true);
833 mesh.remove_property(removedProp);
836 for (Mesh::VertexIter v_iter = mesh.vertices_begin(); v_iter != mesh.vertices_end(); ++v_iter, ++i)
838 mesh.property(indexProp, *v_iter) = i;
839 mesh.property(qualityProp, *v_iter) = 3.5*i;
843 for (Mesh::FaceIter f_iter = mesh.faces_begin(); f_iter != mesh.faces_end(); ++f_iter, ++i)
845 mesh.property(faceProp, *f_iter) = -i;
848 const char* outFilename =
"cube-minimal-customprops_openmeshOutputTestfileBinary.ply";
856 EXPECT_FALSE(loadedMesh.get_property_handle(indexProp,indexPropName)) <<
"Could access to property which was deleted";
866 ASSERT_TRUE(loadedMesh.get_property_handle(indexProp,indexPropName)) <<
"Could not access index property";
867 ASSERT_TRUE(loadedMesh.get_property_handle(qualityProp,qualityPropName)) <<
"Could not access quality property";
868 ASSERT_TRUE(loadedMesh.get_property_handle(faceProp,facePropName)) <<
"Could not access face property";
869 EXPECT_FALSE(loadedMesh.get_property_handle(nonPersistant,nonPersistantName)) <<
"Could access non persistant property";
872 for (Mesh::VertexIter v_iter = loadedMesh.vertices_begin(); v_iter != loadedMesh.vertices_end(); ++v_iter, ++i)
874 EXPECT_EQ(loadedMesh.property(indexProp, *v_iter),
static_cast<unsigned>(i));
875 EXPECT_EQ(loadedMesh.property(qualityProp, *v_iter),3.5*i);
879 for (Mesh::FaceIter f_iter = loadedMesh.faces_begin(); f_iter != loadedMesh.faces_end(); ++f_iter, ++i)
881 EXPECT_EQ(loadedMesh.property(faceProp, *f_iter),-i);
892 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithExtraElements) {
898 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-extra-elements.ply";
900 EXPECT_EQ(8u, mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
901 EXPECT_EQ(18u, mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
902 EXPECT_EQ(12u, mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
909 TEST_F(OpenMeshReadWritePLY, LoadSimpleBinaryPLYWithExtraElements) {
917 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-extra-elements-binary.ply";
919 EXPECT_EQ(8u, mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
920 EXPECT_EQ(18u, mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
921 EXPECT_EQ(12u, mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
928 TEST_F(OpenMeshReadWritePLY, IgnoreNonMeshPlyFile) {
932 std::stringstream data;
933 data <<
"ply" <<
"\n";
934 data <<
"format binary_little_endian 1.0" <<
"\n";
935 data <<
"comment Image data" <<
"\n";
936 data <<
"element image 0" <<
"\n";
937 data <<
"property list uint16 uint16 row" <<
"\n";
938 data <<
"end_header" <<
"\n";
944 EXPECT_TRUE(ok) <<
"This empty file should be readable without an error!";
946 EXPECT_EQ(0u, mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
947 EXPECT_EQ(0u, mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
948 EXPECT_EQ(0u, mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
955 TEST_F(OpenMeshReadWritePLY, FailOnUnknownPropertyTypeForLists) {
959 std::stringstream data;
960 data <<
"ply" <<
"\n";
961 data <<
"format binary_little_endian 1.0" <<
"\n";
962 data <<
"comment Image data" <<
"\n";
963 data <<
"element image 0" <<
"\n";
964 data <<
"property list blibb blubb row" <<
"\n";
965 data <<
"end_header" <<
"\n";
971 EXPECT_FALSE(ok) <<
"This file should fail to read!";
973 EXPECT_EQ(0u, mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
974 EXPECT_EQ(0u, mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
975 EXPECT_EQ(0u, mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
981 TEST_F(OpenMeshReadWritePLY, LoadSimplePLYWithFaceColors) {
985 mesh_.request_face_colors();
992 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-faceColors.ply";
994 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
995 EXPECT_EQ(18u, mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
996 EXPECT_EQ(12u, mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
998 #ifdef TEST_DOUBLE_TRAITS 999 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(0))[0] ) <<
"Wrong face color at face 0";
1000 EXPECT_FLOAT_EQ(117/255.0, mesh_.color(mesh_.face_handle(0))[1] ) <<
"Wrong face color at face 0";
1001 EXPECT_FLOAT_EQ(177/255.0, mesh_.color(mesh_.face_handle(0))[2] ) <<
"Wrong face color at face 0";
1003 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(3))[0] ) <<
"Wrong face color at face 3";
1004 EXPECT_FLOAT_EQ(255/255.0, mesh_.color(mesh_.face_handle(3))[1] ) <<
"Wrong face color at face 3";
1005 EXPECT_FLOAT_EQ(135/255.0, mesh_.color(mesh_.face_handle(3))[2] ) <<
"Wrong face color at face 3";
1007 EXPECT_FLOAT_EQ(163/255.0, mesh_.color(mesh_.face_handle(4))[0] ) <<
"Wrong face color at face 4";
1008 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(4))[1] ) <<
"Wrong face color at face 4";
1009 EXPECT_FLOAT_EQ(177/255.0, mesh_.color(mesh_.face_handle(4))[2] ) <<
"Wrong face color at face 4";
1011 EXPECT_FLOAT_EQ(255/255.0, mesh_.color(mesh_.face_handle(7))[0] ) <<
"Wrong face color at face 7";
1012 EXPECT_FLOAT_EQ(140/255.0, mesh_.color(mesh_.face_handle(7))[1] ) <<
"Wrong face color at face 7";
1013 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(7))[2] ) <<
"Wrong face color at face 7";
1015 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(0))[0] ) <<
"Wrong face color at face 0";
1016 EXPECT_EQ(117, mesh_.color(mesh_.face_handle(0))[1] ) <<
"Wrong face color at face 0";
1017 EXPECT_EQ(177, mesh_.color(mesh_.face_handle(0))[2] ) <<
"Wrong face color at face 0";
1019 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(3))[0] ) <<
"Wrong face color at face 3";
1020 EXPECT_EQ(255, mesh_.color(mesh_.face_handle(3))[1] ) <<
"Wrong face color at face 3";
1021 EXPECT_EQ(135, mesh_.color(mesh_.face_handle(3))[2] ) <<
"Wrong face color at face 3";
1023 EXPECT_EQ(163, mesh_.color(mesh_.face_handle(4))[0] ) <<
"Wrong face color at face 4";
1024 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(4))[1] ) <<
"Wrong face color at face 4";
1025 EXPECT_EQ(177, mesh_.color(mesh_.face_handle(4))[2] ) <<
"Wrong face color at face 4";
1027 EXPECT_EQ(255, mesh_.color(mesh_.face_handle(7))[0] ) <<
"Wrong face color at face 7";
1028 EXPECT_EQ(140, mesh_.color(mesh_.face_handle(7))[1] ) <<
"Wrong face color at face 7";
1029 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(7))[2] ) <<
"Wrong face color at face 7";
1032 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned!";
1033 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned!";
1034 EXPECT_FALSE(options.vertex_has_color()) <<
"Wrong user options are returned!";
1035 EXPECT_TRUE(options.face_has_color()) <<
"Wrong user options are returned!";
1036 EXPECT_FALSE(options.color_has_alpha()) <<
"Wrong user options are returned!";
1037 EXPECT_FALSE(options.is_binary()) <<
"Wrong user options are returned!";
1039 mesh_.release_face_colors();
1045 TEST_F(OpenMeshReadWritePLY, WriteAndReadPLYWithFaceColors) {
1048 _outFileName(outFileName),
1051 const char* _outFileName;
1056 Format(
"cube-minimal-faceColors_ascii_uchar.ply",
1058 Format(
"cube-minimal-faceColors_ascii_float.ply",
1060 Format(
"cube-minimal-faceColors_binary_uchar.ply",
1062 Format(
"cube-minimal-faceColors_binary_float.ply",
1066 Format(
"cube-minimal-faceColors_alpha_ascii_uchar.ply",
1068 Format(
"cube-minimal-faceColors_alpha_ascii_float.ply",
1070 Format(
"cube-minimal-faceColors_alpha_binary_uchar.ply",
1072 Format(
"cube-minimal-faceColors_alpha_binary_float.ply",
1076 for (
size_t i = 0; i <
sizeof(formats) /
sizeof(Format); ++i)
1078 const char* outFileName = formats[i]._outFileName;
1082 mesh_.request_face_colors();
1089 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-faceColors.ply";
1091 options = formats[i]._options;
1094 EXPECT_TRUE(ok) <<
"Unable to write " << outFileName;
1100 EXPECT_TRUE(ok) <<
"Unable to load " << outFileName;
1102 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct: " << outFileName;
1103 EXPECT_EQ(18u, mesh_.n_edges()) <<
"The number of loaded edges is not correct: " << outFileName;
1104 EXPECT_EQ(12u, mesh_.n_faces()) <<
"The number of loaded faces is not correct: " << outFileName;
1106 #ifdef TEST_DOUBLE_TRAITS 1107 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(0))[0] ) <<
"Wrong face color at face 0";
1108 EXPECT_FLOAT_EQ(117/255.0, mesh_.color(mesh_.face_handle(0))[1] ) <<
"Wrong face color at face 0";
1109 EXPECT_FLOAT_EQ(177/255.0, mesh_.color(mesh_.face_handle(0))[2] ) <<
"Wrong face color at face 0";
1111 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(3))[0] ) <<
"Wrong face color at face 3";
1112 EXPECT_FLOAT_EQ(255/255.0, mesh_.color(mesh_.face_handle(3))[1] ) <<
"Wrong face color at face 3";
1113 EXPECT_FLOAT_EQ(135/255.0, mesh_.color(mesh_.face_handle(3))[2] ) <<
"Wrong face color at face 3";
1115 EXPECT_FLOAT_EQ(163/255.0, mesh_.color(mesh_.face_handle(4))[0] ) <<
"Wrong face color at face 4";
1116 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(4))[1] ) <<
"Wrong face color at face 4";
1117 EXPECT_FLOAT_EQ(177/255.0, mesh_.color(mesh_.face_handle(4))[2] ) <<
"Wrong face color at face 4";
1119 EXPECT_FLOAT_EQ(255/255.0, mesh_.color(mesh_.face_handle(7))[0] ) <<
"Wrong face color at face 7";
1120 EXPECT_FLOAT_EQ(140/255.0, mesh_.color(mesh_.face_handle(7))[1] ) <<
"Wrong face color at face 7";
1121 EXPECT_FLOAT_EQ(107/255.0, mesh_.color(mesh_.face_handle(7))[2] ) <<
"Wrong face color at face 7";
1123 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(0))[0] ) <<
"Wrong face color at face 0";
1124 EXPECT_EQ(117, mesh_.color(mesh_.face_handle(0))[1] ) <<
"Wrong face color at face 0";
1125 EXPECT_EQ(177, mesh_.color(mesh_.face_handle(0))[2] ) <<
"Wrong face color at face 0";
1127 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(3))[0] ) <<
"Wrong face color at face 3";
1128 EXPECT_EQ(255, mesh_.color(mesh_.face_handle(3))[1] ) <<
"Wrong face color at face 3";
1129 EXPECT_EQ(135, mesh_.color(mesh_.face_handle(3))[2] ) <<
"Wrong face color at face 3";
1131 EXPECT_EQ(163, mesh_.color(mesh_.face_handle(4))[0] ) <<
"Wrong face color at face 4";
1132 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(4))[1] ) <<
"Wrong face color at face 4";
1133 EXPECT_EQ(177, mesh_.color(mesh_.face_handle(4))[2] ) <<
"Wrong face color at face 4";
1135 EXPECT_EQ(255, mesh_.color(mesh_.face_handle(7))[0] ) <<
"Wrong face color at face 7";
1136 EXPECT_EQ(140, mesh_.color(mesh_.face_handle(7))[1] ) <<
"Wrong face color at face 7";
1137 EXPECT_EQ(107, mesh_.color(mesh_.face_handle(7))[2] ) <<
"Wrong face color at face 7";
1140 EXPECT_FALSE(options.vertex_has_normal()) <<
"Wrong user options are returned: " << outFileName;
1141 EXPECT_FALSE(options.vertex_has_texcoord()) <<
"Wrong user options are returned: " << outFileName;
1142 EXPECT_FALSE(options.vertex_has_color()) <<
"Wrong user options are returned: " << outFileName;
1143 EXPECT_TRUE(options.face_has_color()) <<
"Wrong user options are returned: " << outFileName;
1144 EXPECT_EQ(formats[i]._options.color_is_float(), options.color_is_float()) <<
1145 "Wrong user options are returned: " << outFileName;
1146 EXPECT_EQ(formats[i]._options.is_binary(), options.is_binary()) <<
1147 "Wrong user options are returned: " << outFileName;
1149 mesh_.release_face_colors();
Handle for a face entity.
Has (r) / store (w) vertex colors.
void clear(void)
Clear all bits.
Has (r) / store (w) face colors.
bool write_mesh(const Mesh &_mesh, const std::string &_filename, Options _opt=Options::Default, std::streamsize _precision=6)
Write a mesh to the file _filename.
Has (r) / store (w) float values for colors (currently only implemented for PLY and OFF files) ...
int idx() const
Get the underlying index of this handle.
Handle for a vertex entity.
Has (r) / store (w) alpha values for colors.
bool read_mesh(Mesh &_mesh, const std::string &_filename)
Read a mesh from file _filename.
Has (r) custom properties (currently only implemented in PLY Reader ASCII version) ...
Set options for reader/writer modules.
Has (r) / store (w) vertex normals.
Has (r) / store (w) texture coordinates.