1 #ifndef INCLUDE_UNITTESTS_READ_WRITE_OBJ_HH
2 #define INCLUDE_UNITTESTS_READ_WRITE_OBJ_HH
4 #include <gtest/gtest.h>
5 #include <Unittests/unittests_common.hh>
13 virtual void SetUp() {
19 virtual void TearDown() {
43 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal.obj";
45 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
46 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
47 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
57 mesh_.request_halfedge_normals();
58 mesh_.request_vertex_normals();
63 std::string file_name =
"cube-minimal.obj";
67 EXPECT_TRUE(ok) << file_name;
69 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
70 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
71 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
72 EXPECT_EQ(36u , mesh_.n_halfedges()) <<
"The number of loaded halfedges is not correct!";
76 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex normal at vertex 0 component 0";
77 EXPECT_EQ(-1, mesh_.normal(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex normal at vertex 0 component 1";
78 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex normal at vertex 0 component 2";
80 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex normal at vertex 3 component 0";
81 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex normal at vertex 3 component 1";
82 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex normal at vertex 3 component 2";
84 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex normal at vertex 4 component 0";
85 EXPECT_EQ(-1, mesh_.normal(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex normal at vertex 4 component 1";
86 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex normal at vertex 4 component 2";
88 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex normal at vertex 7 component 0";
89 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex normal at vertex 7 component 1";
90 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex normal at vertex 7 component 2";
94 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(0))[0] ) <<
"Wrong halfedge normal at halfedge 0 component 0";
95 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(0))[1] ) <<
"Wrong halfedge normal at halfedge 0 component 1";
96 EXPECT_EQ(-1, mesh_.normal(mesh_.halfedge_handle(0))[2] ) <<
"Wrong halfedge normal at halfedge 0 component 2";
98 EXPECT_EQ(-1, mesh_.normal(mesh_.halfedge_handle(10))[0] ) <<
"Wrong halfedge normal at halfedge 10 component 0";
99 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(10))[1] ) <<
"Wrong halfedge normal at halfedge 10 component 1";
100 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(10))[2] ) <<
"Wrong halfedge normal at halfedge 10 component 2";
102 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(19))[0] ) <<
"Wrong halfedge normal at halfedge 19 component 0";
103 EXPECT_EQ(1, mesh_.normal(mesh_.halfedge_handle(19))[1] ) <<
"Wrong halfedge normal at halfedge 19 component 1";
104 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(19))[2] ) <<
"Wrong halfedge normal at halfedge 19 component 2";
106 EXPECT_EQ(1, mesh_.normal(mesh_.halfedge_handle(24))[0] ) <<
"Wrong halfedge normal at halfedge 24 component 0";
107 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(24))[1] ) <<
"Wrong halfedge normal at halfedge 24 component 1";
108 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(24))[2] ) <<
"Wrong halfedge normal at halfedge 24 component 2";
110 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(30))[0] ) <<
"Wrong halfedge normal at halfedge 30 component 0";
111 EXPECT_EQ(-1, mesh_.normal(mesh_.halfedge_handle(30))[1] ) <<
"Wrong halfedge normal at halfedge 30 component 1";
112 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(30))[2] ) <<
"Wrong halfedge normal at halfedge 30 component 2";
114 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(35))[0] ) <<
"Wrong halfedge normal at halfedge 35 component 0";
115 EXPECT_EQ(0, mesh_.normal(mesh_.halfedge_handle(35))[1] ) <<
"Wrong halfedge normal at halfedge 35 component 1";
116 EXPECT_EQ(1, mesh_.normal(mesh_.halfedge_handle(35))[2] ) <<
"Wrong halfedge normal at halfedge 35 component 2";
118 mesh_.release_vertex_normals();
119 mesh_.release_halfedge_normals();
130 mesh_.request_vertex_colors();
132 std::string file_name =
"cube-minimal.obj";
139 EXPECT_TRUE(ok) << file_name;
141 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
142 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
143 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
144 EXPECT_EQ(36u , mesh_.n_halfedges()) <<
"The number of loaded halfedges is not correct!";
156 mesh_.request_halfedge_texcoords2D();
161 std::string file_name =
"cube-minimal-texCoords.obj";
165 EXPECT_TRUE(ok) << file_name;
167 EXPECT_EQ(1, mesh_.texcoord2D(mesh_.halfedge_handle(0))[0] ) <<
"Wrong texCoord at halfedge 0 component 0";
168 EXPECT_EQ(1, mesh_.texcoord2D(mesh_.halfedge_handle(0))[1] ) <<
"Wrong texCoord at halfedge 0 component 1";
170 EXPECT_EQ(3, mesh_.texcoord2D(mesh_.halfedge_handle(10))[0] ) <<
"Wrong texCoord at halfedge 1 component 0";
171 EXPECT_EQ(3, mesh_.texcoord2D(mesh_.halfedge_handle(10))[1] ) <<
"Wrong texCoord at halfedge 1 component 1";
173 EXPECT_EQ(6, mesh_.texcoord2D(mesh_.halfedge_handle(19))[0] ) <<
"Wrong texCoord at halfedge 4 component 0";
174 EXPECT_EQ(6, mesh_.texcoord2D(mesh_.halfedge_handle(19))[1] ) <<
"Wrong texCoord at halfedge 4 component 1";
176 EXPECT_EQ(7, mesh_.texcoord2D(mesh_.halfedge_handle(24))[0] ) <<
"Wrong texCoord at halfedge 7 component 0";
177 EXPECT_EQ(7, mesh_.texcoord2D(mesh_.halfedge_handle(24))[1] ) <<
"Wrong texCoord at halfedge 7 component 1";
179 EXPECT_EQ(9, mesh_.texcoord2D(mesh_.halfedge_handle(30))[0] ) <<
"Wrong texCoord at halfedge 9 component 0";
180 EXPECT_EQ(9, mesh_.texcoord2D(mesh_.halfedge_handle(30))[1] ) <<
"Wrong texCoord at halfedge 9 component 1";
182 EXPECT_EQ(12, mesh_.texcoord2D(mesh_.halfedge_handle(35))[0] ) <<
"Wrong texCoord at halfedge 11 component 0";
183 EXPECT_EQ(12, mesh_.texcoord2D(mesh_.halfedge_handle(35))[1] ) <<
"Wrong texCoord at halfedge 11 component 1";
185 mesh_.release_halfedge_texcoords2D();
195 mesh_.request_face_colors();
200 std::string file_name =
"square_material.obj";
204 EXPECT_TRUE(ok) << file_name;
208 EXPECT_TRUE(fh.
is_valid()) <<
"fh should be valid";
210 EXPECT_EQ(128, mesh_.color(fh)[0] ) <<
"Wrong vertex color at vertex 0 component 0";
211 EXPECT_EQ(128, mesh_.color(fh)[1] ) <<
"Wrong vertex color at vertex 0 component 1";
212 EXPECT_EQ(128, mesh_.color(fh)[2] ) <<
"Wrong vertex color at vertex 0 component 2";
214 mesh_.release_face_colors();
224 mesh_.request_vertex_colors();
231 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-vertex-colors-after-vertex-definition.obj";
233 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
234 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
235 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
237 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
238 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
239 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
241 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
242 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
243 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
245 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
246 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
247 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
249 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
250 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
251 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
253 mesh_.release_vertex_colors();
263 mesh_.request_vertex_colors();
270 EXPECT_TRUE(ok) <<
"Unable to load cube-minimal-vertex-colors-as-vc-lines.obj";
272 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
273 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
274 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
276 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
277 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
278 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
280 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
281 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
282 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
284 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
285 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
286 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
288 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
289 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
290 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
292 mesh_.release_vertex_colors();
296 #endif // INCLUDE GUARD