OpenMesh
Unittests/unittests_loading.hh
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