You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

188 lines
5.9 KiB

#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);
}