blob: 72e7881f8ef11e16a73d7cfc124c3336ee08b71a [file] [log] [blame] [edit]
#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);
}