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
188 lines
5.9 KiB
1 year ago
|
#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);
|
||
|
}
|