OpenMesh
|
00001 #ifndef INCLUDE_UNITTESTS_LOADING_HH 00002 #define INCLUDE_UNITTESTS_LOADING_HH 00003 00004 #include <gtest/gtest.h> 00005 #include <Unittests/unittests_common.hh> 00006 00007 00008 class OpenMeshLoader : public OpenMeshBase { 00009 00010 protected: 00011 00012 // This function is called before each test is run 00013 virtual void SetUp() { 00014 00015 // Do some initial stuff with the member data here... 00016 } 00017 00018 // This function is called after all tests are through 00019 virtual void TearDown() { 00020 00021 // Do some final stuff with the member data here... 00022 } 00023 00024 // Member already defined in OpenMeshBase 00025 //Mesh mesh_; 00026 }; 00027 00028 /* 00029 * ==================================================================== 00030 * Define tests below 00031 * ==================================================================== 00032 */ 00033 00034 /* 00035 * Just load a simple mesh file in obj format and count whether 00036 * the right number of entities has been loaded. 00037 */ 00038 TEST_F(OpenMeshLoader, LoadSimpleOFFFile) { 00039 00040 mesh_.clear(); 00041 00042 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube1.off"); 00043 00044 EXPECT_TRUE(ok); 00045 00046 EXPECT_EQ(7526, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00047 EXPECT_EQ(22572, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00048 EXPECT_EQ(15048, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00049 } 00050 00051 00052 /* 00053 * Just load a point file in ply format and count whether 00054 * the right number of entities has been loaded. 00055 */ 00056 TEST_F(OpenMeshLoader, LoadSimplePointPLYFileWithBadEncoding) { 00057 00058 mesh_.clear(); 00059 00060 bool ok = OpenMesh::IO::read_mesh(mesh_, "pointCloudBadEncoding.ply"); 00061 00062 EXPECT_TRUE(ok) << "Unable to load pointCloudBadEncoding.ply"; 00063 00064 EXPECT_EQ(10, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00065 EXPECT_EQ(0, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00066 EXPECT_EQ(0, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00067 } 00068 00069 /* 00070 * Just load a point file in ply format and count whether 00071 * the right number of entities has been loaded. 00072 */ 00073 TEST_F(OpenMeshLoader, LoadSimplePointPLYFileWithGoodEncoding) { 00074 00075 mesh_.clear(); 00076 00077 bool ok = OpenMesh::IO::read_mesh(mesh_, "pointCloudGoodEncoding.ply"); 00078 00079 EXPECT_TRUE(ok) << "Unable to load pointCloudGoodEncoding.ply"; 00080 00081 EXPECT_EQ(10, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00082 EXPECT_EQ(0, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00083 EXPECT_EQ(0, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00084 } 00085 00086 00087 /* 00088 * Just load a obj file of a cube 00089 */ 00090 TEST_F(OpenMeshLoader, LoadSimpleOBJ) { 00091 00092 mesh_.clear(); 00093 00094 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube-minimal.obj"); 00095 00096 EXPECT_TRUE(ok) << "Unable to load cube-minimal.obj"; 00097 00098 EXPECT_EQ(8, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00099 EXPECT_EQ(18, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00100 EXPECT_EQ(12, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00101 } 00102 00103 00104 /* 00105 * Just load a obj file of a cube with vertex colors defined directly after the vertex definitions 00106 */ 00107 TEST_F(OpenMeshLoader, LoadSimpleOBJWithVertexColorsAfterVertices) { 00108 00109 mesh_.clear(); 00110 00111 mesh_.request_vertex_colors(); 00112 00113 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube-minimal-vertex-colors-after-vertex-definition.obj"); 00114 00115 EXPECT_TRUE(ok) << "Unable to load cube-minimal-vertex-colors-after-vertex-definition.obj"; 00116 00117 EXPECT_EQ(8, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00118 EXPECT_EQ(18, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00119 EXPECT_EQ(12, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00120 00121 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) << "Wrong vertex color at vertex 0 component 0"; 00122 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) << "Wrong vertex color at vertex 0 component 1"; 00123 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[2] ) << "Wrong vertex color at vertex 0 component 2"; 00124 00125 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) << "Wrong vertex color at vertex 3 component 0"; 00126 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[1] ) << "Wrong vertex color at vertex 3 component 1"; 00127 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) << "Wrong vertex color at vertex 3 component 2"; 00128 00129 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[0] ) << "Wrong vertex color at vertex 4 component 0"; 00130 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) << "Wrong vertex color at vertex 4 component 1"; 00131 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[2] ) << "Wrong vertex color at vertex 4 component 2"; 00132 00133 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[0] ) << "Wrong vertex color at vertex 7 component 0"; 00134 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[1] ) << "Wrong vertex color at vertex 7 component 1"; 00135 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) << "Wrong vertex color at vertex 7 component 2"; 00136 00137 mesh_.release_vertex_colors(); 00138 } 00139 00140 /* 00141 * Just load a obj file of a cube with vertex colors defined as separate lines 00142 */ 00143 TEST_F(OpenMeshLoader, LoadSimpleOBJWithVertexColorsAsVCLines) { 00144 00145 mesh_.clear(); 00146 00147 mesh_.request_vertex_colors(); 00148 00149 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube-minimal-vertex-colors-as-vc-lines.obj"); 00150 00151 EXPECT_TRUE(ok) << "Unable to load cube-minimal-vertex-colors-as-vc-lines.obj"; 00152 00153 EXPECT_EQ(8, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00154 EXPECT_EQ(18, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00155 EXPECT_EQ(12, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00156 00157 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[0] ) << "Wrong vertex color at vertex 0 component 0"; 00158 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[1] ) << "Wrong vertex color at vertex 0 component 1"; 00159 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(0))[2] ) << "Wrong vertex color at vertex 0 component 2"; 00160 00161 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(3))[0] ) << "Wrong vertex color at vertex 3 component 0"; 00162 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[1] ) << "Wrong vertex color at vertex 3 component 1"; 00163 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(3))[2] ) << "Wrong vertex color at vertex 3 component 2"; 00164 00165 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(4))[0] ) << "Wrong vertex color at vertex 4 component 0"; 00166 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[1] ) << "Wrong vertex color at vertex 4 component 1"; 00167 EXPECT_EQ(0, mesh_.color(mesh_.vertex_handle(4))[2] ) << "Wrong vertex color at vertex 4 component 2"; 00168 00169 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[0] ) << "Wrong vertex color at vertex 7 component 0"; 00170 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[1] ) << "Wrong vertex color at vertex 7 component 1"; 00171 EXPECT_EQ(255, mesh_.color(mesh_.vertex_handle(7))[2] ) << "Wrong vertex color at vertex 7 component 2"; 00172 00173 mesh_.release_vertex_colors(); 00174 00175 } 00176 00177 /* 00178 * Just load a ply 00179 */ 00180 TEST_F(OpenMeshLoader, LoadSimplePLY) { 00181 00182 mesh_.clear(); 00183 00184 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube-minimal.ply"); 00185 00186 EXPECT_TRUE(ok) << "Unable to load cube-minimal.ply"; 00187 00188 EXPECT_EQ(8, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00189 EXPECT_EQ(18, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00190 EXPECT_EQ(12, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00191 00192 } 00193 00194 00195 /* 00196 * Just load a ply with normals, ascii mode 00197 */ 00198 TEST_F(OpenMeshLoader, LoadSimplePLYWithNormals) { 00199 00200 mesh_.clear(); 00201 00202 mesh_.request_vertex_normals(); 00203 00204 bool ok = OpenMesh::IO::read_mesh(mesh_, "cube-minimal-normals.ply"); 00205 00206 EXPECT_TRUE(ok) << "Unable to load cube-minimal-normals.ply"; 00207 00208 EXPECT_EQ(8, mesh_.n_vertices()) << "The number of loaded vertices is not correct!"; 00209 EXPECT_EQ(18, mesh_.n_edges()) << "The number of loaded edges is not correct!"; 00210 EXPECT_EQ(12, mesh_.n_faces()) << "The number of loaded faces is not correct!"; 00211 00212 00213 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(0))[0] ) << "Wrong normal at vertex 0 component 0"; 00214 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(0))[1] ) << "Wrong normal at vertex 0 component 1"; 00215 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(0))[2] ) << "Wrong normal at vertex 0 component 2"; 00216 00217 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(3))[0] ) << "Wrong normal at vertex 3 component 0"; 00218 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(3))[1] ) << "Wrong normal at vertex 3 component 1"; 00219 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(3))[2] ) << "Wrong normal at vertex 3 component 2"; 00220 00221 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(4))[0] ) << "Wrong normal at vertex 4 component 0"; 00222 EXPECT_EQ(0, mesh_.normal(mesh_.vertex_handle(4))[1] ) << "Wrong normal at vertex 4 component 1"; 00223 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(4))[2] ) << "Wrong normal at vertex 4 component 2"; 00224 00225 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(7))[0] ) << "Wrong normal at vertex 7 component 0"; 00226 EXPECT_EQ(1, mesh_.normal(mesh_.vertex_handle(7))[1] ) << "Wrong normal at vertex 7 component 1"; 00227 EXPECT_EQ(2, mesh_.normal(mesh_.vertex_handle(7))[2] ) << "Wrong normal at vertex 7 component 2"; 00228 00229 mesh_.release_vertex_normals(); 00230 00231 } 00232 00233 00234 00235 #endif // INCLUDE GUARD