1 #include <gtest/gtest.h> 2 #include <Unittests/unittests_common.hh> 13 virtual void SetUp() {
19 virtual void TearDown() {
38 TEST_F(OpenMeshReadWriteOFF, LoadSimpleOFFFile) {
46 EXPECT_EQ(7526u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
47 EXPECT_EQ(22572u, mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
48 EXPECT_EQ(15048u, mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
52 TEST_F(OpenMeshReadWriteOFF, WriteAndReadVertexColorsToAndFromOFFFile) {
56 mesh_.request_vertex_colors();
63 #ifdef TEST_DOUBLE_TRAITS 65 Mesh::Color testColor(255/255.0, 128/255.0, 64/255.0, 1.0);
72 for (Mesh::VertexIter vit = mesh_.vertices_begin(), vitend = mesh_.vertices_end(); vit != vitend; ++vit)
73 mesh_.set_color(*vit, testColor);
77 for (Mesh::VertexIter vit = mesh_.vertices_begin(), vitend = mesh_.vertices_end(); vit != vitend; ++vit) {
79 bool wrong_color =
false;
80 for (
size_t i = 0; i < color.size(); ++i)
81 wrong_color = wrong_color || (color[i] != testColor[i]);
86 EXPECT_EQ(0, count) <<
"Vertices have the wrong color!";
96 for (Mesh::VertexIter vit = mesh_.vertices_begin(), vitend = mesh_.vertices_end(); vit != vitend; ++vit) {
98 bool wrong_color =
false;
99 for (
size_t i = 0; i < color.size(); ++i)
100 wrong_color = wrong_color || (color[i] != testColor[i]);
105 EXPECT_EQ(0, count) <<
"Vertices should have the same color after writing and reading the OFF file!";
107 mesh_.release_vertex_colors();
110 TEST_F(OpenMeshReadWriteOFF, WriteAndReadFloatVertexColorsToAndFromOFFFile) {
114 mesh_.request_vertex_colors();
120 EXPECT_TRUE(ok) <<
"meshlab.ply could not be read!";
128 EXPECT_TRUE(ok) <<
"cube_floating.off could not be written!";
131 EXPECT_TRUE(ok) <<
"cube_floating.off could not be read!";
133 EXPECT_EQ(8u , mesh_.n_vertices()) <<
"The number of loaded vertices is not correct!";
134 EXPECT_EQ(18u , mesh_.n_edges()) <<
"The number of loaded edges is not correct!";
135 EXPECT_EQ(12u , mesh_.n_faces()) <<
"The number of loaded faces is not correct!";
137 #ifdef TEST_DOUBLE_TRAITS 138 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
139 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
140 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
142 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
143 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
144 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
146 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
147 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
148 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
150 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
151 EXPECT_FLOAT_EQ(0.0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
152 EXPECT_FLOAT_EQ(1.0, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
154 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) <<
"Wrong vertex color at vertex 0 component 0";
155 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) <<
"Wrong vertex color at vertex 0 component 1";
156 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(0))[2] ) <<
"Wrong vertex color at vertex 0 component 2";
158 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) <<
"Wrong vertex color at vertex 3 component 0";
159 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[1] ) <<
"Wrong vertex color at vertex 3 component 1";
160 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) <<
"Wrong vertex color at vertex 3 component 2";
162 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[0] ) <<
"Wrong vertex color at vertex 4 component 0";
163 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) <<
"Wrong vertex color at vertex 4 component 1";
164 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[2] ) <<
"Wrong vertex color at vertex 4 component 2";
166 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[0] ) <<
"Wrong vertex color at vertex 7 component 0";
167 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(7))[1] ) <<
"Wrong vertex color at vertex 7 component 1";
168 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) <<
"Wrong vertex color at vertex 7 component 2";
171 EXPECT_FALSE(opt.vertex_has_normal()) <<
"Wrong user opt are returned!";
172 EXPECT_FALSE(opt.vertex_has_texcoord()) <<
"Wrong user opt are returned!";
173 EXPECT_TRUE(opt.vertex_has_color()) <<
"Wrong user opt are returned!";
174 EXPECT_TRUE(opt.color_is_float()) <<
"Wrong user opt are returned!";
176 mesh_.release_vertex_colors();
179 TEST_F(OpenMeshReadWriteOFF, WriteAndReadBinaryFloatVertexColorsToAndFromOFFFile) {
183 mesh_.request_vertex_colors();
189 EXPECT_TRUE(ok) <<
"meshlab.ply could not be read!";
198 EXPECT_TRUE(ok) <<
"cube_floating_binary.off could not be written!";
205 EXPECT_TRUE(ok) <<
"cube_floating_binary.off could not be read!";
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(opt.vertex_has_normal()) <<
"Wrong user opt are returned!";
246 EXPECT_FALSE(opt.vertex_has_texcoord()) <<
"Wrong user opt are returned!";
247 EXPECT_FALSE(opt.face_has_color()) <<
"Wrong user opt are returned!";
248 EXPECT_TRUE(opt.vertex_has_color()) <<
"Wrong user opt are returned!";
249 EXPECT_TRUE(opt.color_is_float()) <<
"Wrong user opt are returned!";
250 EXPECT_TRUE(opt.is_binary()) <<
"Wrong user opt are returned!";
252 mesh_.release_vertex_colors();
Kernel::Color Color
Color type.
Has (r) / store (w) vertex 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) ...
Kernel::Point Point
Coordinate type.
bool read_mesh(Mesh &_mesh, const std::string &_filename)
Read a mesh from file _filename.
SmartVertexHandle add_vertex(const Point &_p)
Alias for new_vertex(const Point&).
Set options for reader/writer modules.