| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- #include <test_common.h>
- #include <igl/readPLY.h>
- #include <fstream>
- #include <string>
- #include <vector>
- TEST_CASE("readPLY: cube_with_fold.ply", "[igl]")
- {
- Eigen::MatrixXd V;
- Eigen::MatrixXi F;
- REQUIRE (igl::readPLY(test_common::data_path("cube_with_fold.ply"), V, F));
- REQUIRE (V.rows() == 26);
- REQUIRE (V.cols() == 3);
- REQUIRE (F.rows() == 48);
- REQUIRE (F.cols() == 3);
- }
- TEST_CASE("readPLY: bunny.ply", "[igl]")
- {
- std::ifstream f(test_common::data_path("bunny.ply"));
- REQUIRE (f.good());
- f.close();
-
- Eigen::MatrixXd V,N,UV,VD,FD,ED;
- std::vector<std::string> Vheader,Fheader,Eheader,comments;
- Eigen::MatrixXi F,E;
- REQUIRE (igl::readPLY(test_common::data_path("bunny.ply"), V, F, E, N, UV, VD,Vheader, FD,Fheader, ED,Eheader,comments));
- REQUIRE (V.rows() == 35947);
- REQUIRE (V.cols() == 3);
- REQUIRE (F.rows() == 69451);
- REQUIRE (F.cols() == 3);
- // no edge data
- REQUIRE (E.rows() == 0);
- REQUIRE (E.cols() == 0);
- // no normals or texture coordinates
- REQUIRE (N.rows() == 0);
- REQUIRE (N.cols() == 0);
- REQUIRE (UV.rows() == 0);
- REQUIRE (UV.cols() == 0);
- // this bunny have additonal data
- REQUIRE (VD.rows() == 35947);
- REQUIRE (VD.cols() == 2);
- REQUIRE (Vheader.size() == 2);
- REQUIRE (Vheader[0] == "confidence" );
- REQUIRE (Vheader[1] == "intensity" );
- // no Face data or edge data
- REQUIRE (FD.rows() == 0);
- REQUIRE (FD.cols() == 0);
- REQUIRE (Fheader.size() == 0);
- REQUIRE (ED.rows() == 0);
- REQUIRE (ED.cols() == 0);
- REQUIRE (Eheader.size() == 0);
- // there are comments
- REQUIRE (comments.size() == 2);
- }
- TEST_CASE("readPLY: mesh_error.ply", "[igl]")
- {
- // test on a non-existent file
- std::ifstream f(test_common::data_path("mesh_error.ply"));
- REQUIRE (f.good() == false);
- f.close();
- Eigen::MatrixXd V;
- Eigen::MatrixXi F;
- REQUIRE (igl::readPLY(test_common::data_path("mesh_error.ply"), V, F) == false);
- REQUIRE (V.rows() == 0);
- REQUIRE (F.rows() == 0);
- }
- TEST_CASE("readPLY: quad_cube.ply", "[igl]")
- {
- // small qube from blender
- const char *ply_quad_cube=
- "ply\n"
- "format ascii 1.0\n"
- "comment Created by Blender 2.81 (sub 16) - www.blender.org, source file: ''\n"
- "element vertex 24\n"
- "property float x\n"
- "property float y\n"
- "property float z\n"
- "property float nx\n"
- "property float ny\n"
- "property float nz\n"
- "property float s\n"
- "property float t\n"
- "element face 6\n"
- "property list uchar uint vertex_indices\n"
- "property uchar red\n"
- "property uchar green\n"
- "property uchar blue\n"
- "property uchar alpha\n"
- "end_header\n"
- "1.000000 1.000000 1.000000 0.000000 -0.000000 1.000000 0.625000 0.500000\n"
- "-1.000000 1.000000 1.000000 0.000000 -0.000000 1.000000 0.875000 0.500000\n"
- "-1.000000 -1.000000 1.000000 0.000000 -0.000000 1.000000 0.875000 0.750000\n"
- "1.000000 -1.000000 1.000000 0.000000 -0.000000 1.000000 0.625000 0.750000\n"
- "1.000000 -1.000000 -1.000000 0.000000 -1.000000 0.000000 0.375000 0.750000\n"
- "1.000000 -1.000000 1.000000 0.000000 -1.000000 0.000000 0.625000 0.750000\n"
- "-1.000000 -1.000000 1.000000 0.000000 -1.000000 0.000000 0.625000 1.000000\n"
- "-1.000000 -1.000000 -1.000000 0.000000 -1.000000 0.000000 0.375000 1.000000\n"
- "-1.000000 -1.000000 -1.000000 -1.000000 -0.000000 0.000000 0.375000 0.000000\n"
- "-1.000000 -1.000000 1.000000 -1.000000 -0.000000 0.000000 0.625000 0.000000\n"
- "-1.000000 1.000000 1.000000 -1.000000 -0.000000 0.000000 0.625000 0.250000\n"
- "-1.000000 1.000000 -1.000000 -1.000000 -0.000000 0.000000 0.375000 0.250000\n"
- "-1.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000 0.125000 0.500000\n"
- "1.000000 1.000000 -1.000000 0.000000 0.000000 -1.000000 0.375000 0.500000\n"
- "1.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000 0.375000 0.750000\n"
- "-1.000000 -1.000000 -1.000000 0.000000 0.000000 -1.000000 0.125000 0.750000\n"
- "1.000000 1.000000 -1.000000 1.000000 -0.000000 0.000000 0.375000 0.500000\n"
- "1.000000 1.000000 1.000000 1.000000 -0.000000 0.000000 0.625000 0.500000\n"
- "1.000000 -1.000000 1.000000 1.000000 -0.000000 0.000000 0.625000 0.750000\n"
- "1.000000 -1.000000 -1.000000 1.000000 -0.000000 0.000000 0.375000 0.750000\n"
- "-1.000000 1.000000 -1.000000 0.000000 1.000000 0.000000 0.375000 0.250000\n"
- "-1.000000 1.000000 1.000000 0.000000 1.000000 0.000000 0.625000 0.250000\n"
- "1.000000 1.000000 1.000000 0.000000 1.000000 0.000000 0.625000 0.500000\n"
- "1.000000 1.000000 -1.000000 0.000000 1.000000 0.000000 0.375000 0.500000\n"
- "4 0 1 2 3 0 0 255 255\n"
- "4 4 5 6 7 0 0 255 255\n"
- "4 8 9 10 11 0 0 255 255\n"
- "4 12 13 14 15 0 0 255 255\n"
- "4 16 17 18 19 0 0 255 255\n"
- "4 20 21 22 23 0 0 255 255\n";
- std::ofstream f("quad_cube.ply");
- f.write(ply_quad_cube,strlen(ply_quad_cube));
- f.close();
- Eigen::MatrixXd V;
- Eigen::MatrixXi F;
- REQUIRE (igl::readPLY("quad_cube.ply", V, F));
- REQUIRE (V.rows() == 24);
- REQUIRE (V.cols() == 3);
- REQUIRE (F.rows() == 6);
- REQUIRE (F.cols() == 4);
- Eigen::MatrixXd N,UV,VD,FD,ED;
- Eigen::MatrixXi E;
- std::vector<std::string> headerV;
- std::vector<std::string> headerF, headerE, comments;
-
- REQUIRE (igl::readPLY("quad_cube.ply", V, F, E, N, UV,
- VD, headerV,
- FD, headerF,
- ED, headerE,
- comments));
-
- REQUIRE (V.rows() == 24);
- REQUIRE (V.cols() == 3);
- REQUIRE (F.rows() == 6);
- REQUIRE (F.cols() == 4);
- REQUIRE (E.rows() == 0);
- REQUIRE (E.cols() == 0);
- REQUIRE (N.rows() == 24);
- REQUIRE (N.cols() == 3);
- REQUIRE (UV.rows() == 24);
- REQUIRE (UV.cols() == 2);
- REQUIRE (VD.rows() == 0);
- REQUIRE (VD.cols() == 0);
- REQUIRE (headerV.empty());
- REQUIRE (FD.rows() == 6);
- REQUIRE (FD.cols() == 4);
- REQUIRE (headerF.size() == 4);
- REQUIRE (headerF[0] == "red");
- REQUIRE (headerF[1] == "green");
- REQUIRE (headerF[2] == "blue");
- REQUIRE (headerF[3] == "alpha");
- REQUIRE (ED.rows() == 0);
- REQUIRE (ED.cols() == 0);
- REQUIRE (headerE.size() == 0);
- }
|