14 std::ifstream ifs0((
dataPath +
"default-convert.yaml").c_str());
20 std::ifstream ifs1((
dataPath +
"default.yaml").c_str());
23 std::ifstream ifs2((
dataPath +
"unit_tests/badIcpConfig_InvalidParameter.yaml").c_str());
26 std::ifstream ifs3((
dataPath +
"unit_tests/badIcpConfig_InvalidModuleType.yaml").c_str());
33 std::istringstream is;
34 std::ostringstream os;
78 pts = IO::loadCSV(is);
98 pts = IO::loadCSV(is);
118 pts = IO::loadCSV(is);
129 "x, y, z, nx, ny, nz\n" 138 pts = IO::loadCSV(is);
147 int64_t time0 = 1410264593275569438;
148 int64_t time1 = 1410264593325569391;
149 int64_t time2 = 1410264593425569295;
150 int64_t time3 = 1410264593522569417;
156 "1, 1, 1, " << time0 <<
"\n" 157 "2, 1, 1, " << time1 <<
"\n" 158 "3, 1, 1, " << time2 <<
"\n" 159 "4, 1, 1, " << time3 <<
"\n" 165 pts = IO::loadCSV(is);
184 std::istringstream is;
195 "format binary_big_endian 1.0\n" 225 "property float grrrr\n" 226 "property float nz\n" 227 "property float ny\n" 228 "property float nx\n" 230 "3 2 1 99 33 22 11\n" 231 "3 2 1 99 33 22 11\n" 233 "3 2 1 99 33 22 11 3 2 1 99 33 22 11\n" 234 "3 2 1 99 33 22 11\n" 238 DP pointCloud = IO::loadPLY(is);
258 std::istringstream is;
270 "# .PCD v.7 - Point Cloud Data file format\n" 279 "# .PCD v.7 - Point Cloud Data file format\n" 287 "VIEWPOINT 0 0 0 1 0 0 0\n" 297 "# .PCD v.7 - Point Cloud Data file format\n" 299 "FIELDS x y z grrr\n" 305 "VIEWPOINT 0 0 0 1 0 0 0\n" 308 "0.44912094 0.49084857 1.153 22\n" 309 "0.34907714 0.48914573 1.149 22\n" 310 "0.33813429 0.48914573 1.149 22\n" 311 "0.32833049 0.49084857 1.153 22\n" 312 "0.24395333 0.42856666 0.98900002 22\n" 313 "0.20816095 0.42856666 0.98900002 22\n" 314 "0.1987419 0.42291525 0.98900002 22\n" 315 "0.18178761 0.42291525 0.98900002 22\n" 316 "0.17990381 0.42291525 0.98900002 22\n" 317 "-0.035590474 0.42997143 1.01 22\n" 318 "-0.035907622 0.43962574 1.0190001 22\n" 319 "-0.043542858 0.43639618 1.016 22\n" 320 "-0.15246001 0.36058003 0.84700006 22\n" 321 "0.21956001 0.44007048 0.99800003 22\n" 322 "-0.16635144 0.3699457 0.86900002 22\n" 323 "-0.33879143 0.36143145 0.84900004 22\n" 324 "-0.35055432 0.36853144 0.85800004 22\n" 325 "-0.39932001 0.38058859 0.89400005 22\n" 328 DP pointCloud = IO::loadPCD(is);
350 addRandomFeature(
"x", 1);
351 addRandomFeature(
"y", 1);
352 addRandomFeature(
"z", 1);
353 ptCloud.addFeature(
"pad", PM::Matrix::Ones(1, nbPts));
355 addRandomDescriptor(
"normals",3);
356 addRandomDescriptor(
"eigValues",3);
357 addRandomDescriptor(
"eigVectors",9);
358 addRandomDescriptor(
"color",4);
363 ptCloud.addFeature(featureName,PM::Matrix::Random(rows, nbPts));
368 ptCloud.addDescriptor(descriptorName, PM::Matrix::Random(rows, nbPts));
371 virtual void loadSaveTest(
const string& testFileName,
bool plyFormat =
false,
const int nbPts = 10,
bool binary =
false)
373 this->testFileName = testFileName;
375 if (plyFormat || binary) {
377 int pointCount(ptCloud.features.cols());
378 int descRows(ptCloud.descriptors.rows());
379 bool datawithColor = ptCloud.descriptorExists(
"color");
380 int colorStartingRow = ptCloud.getDescriptorStartingRow(
"color");
381 int colorEndRow = colorStartingRow + ptCloud.getDescriptorDimension(
"color");
382 for (
int p = 0; p < pointCount; ++p)
384 for (
int d = 0;
d < descRows; ++
d)
386 if (datawithColor &&
d >= colorStartingRow &&
d < colorEndRow) {
387 if (ptCloud.descriptors(
d, p) < 0) { ptCloud.descriptors.coeffRef(
d, p) = -(ptCloud.descriptors(
d, p)); }
388 ptCloud.descriptors.coeffRef(
d, p) = (
static_cast<unsigned>(ptCloud.descriptors(
d, p) * 255.0)) / 255.0;
394 ptCloud.save(testFileName, binary);
396 ptCloudFromFile =
DP::load(testFileName);
398 EXPECT_TRUE(ptCloudFromFile.features.cols() == ptCloud.features.cols());
399 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"normals",3));
400 EXPECT_TRUE(ptCloudFromFile.getDescriptorViewByName(
"normals").isApprox(ptCloud.getDescriptorViewByName(
"normals")));
401 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"eigValues",3));
402 EXPECT_TRUE(ptCloudFromFile.getDescriptorViewByName(
"eigValues").isApprox(ptCloud.getDescriptorViewByName(
"eigValues")));
403 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"eigVectors",9));
404 EXPECT_TRUE(ptCloudFromFile.getDescriptorViewByName(
"eigVectors").isApprox(ptCloud.getDescriptorViewByName(
"eigVectors")));
405 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"color",4));
406 if (plyFormat || binary) {
407 EXPECT_TRUE(((ptCloudFromFile.getDescriptorViewByName(
"color") * 255.0)).isApprox((ptCloud.getDescriptorViewByName(
"color") * 255.0), 1.0));
409 EXPECT_TRUE(ptCloudFromFile.getDescriptorViewByName(
"color").isApprox(ptCloud.getDescriptorViewByName(
"color")));
412 EXPECT_TRUE(ptCloudFromFile.features.isApprox(ptCloud.features));
418 EXPECT_TRUE(boost::filesystem::remove(boost::filesystem::path(testFileName)));
433 ptCloud.addDescriptor(
"genericScalar", PM::Matrix::Random(1, nbPts));
434 ptCloud.addDescriptor(
"genericVector", PM::Matrix::Random(3, nbPts));
435 ptCloud.addTime(
"genericTime", PM::Int64Matrix::Random(1, nbPts));
437 loadSaveTest(
dataPath +
"unit_test.vtk");
439 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"genericScalar",1));
440 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"genericVector",3));
441 EXPECT_TRUE(ptCloudFromFile.timeExists(
"genericTime",1));
447 ptCloud.addDescriptor(
"genericScalar", PM::Matrix::Random(1, nbPts));
448 ptCloud.addDescriptor(
"genericVector", PM::Matrix::Random(3, nbPts));
449 ptCloud.addTime(
"genericTime", PM::Int64Matrix::Random(1, nbPts));
451 loadSaveTest(
dataPath +
"unit_test.bin.vtk",
false, 10,
true);
453 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"genericScalar",1));
454 EXPECT_TRUE(ptCloudFromFile.descriptorExists(
"genericVector",3));
455 EXPECT_TRUE(ptCloudFromFile.timeExists(
"genericTime",1));
460 loadSaveTest(
dataPath +
"unit_test.ply",
true);
465 loadSaveTest(
dataPath +
"unit_test.pcd");
470 loadSaveTest(
dataPath +
"unit_test.csv");
IO Functions and classes that are dependant on scalar type are defined in this templatized class...
void addRandomFeature(const string &featureName, const int rows)
unsigned getTimeDim() const
Return the total number of times.
#define EXPECT_THROW(statement, expected_exception)
Matrix descriptors
descriptors of points in the cloud, might be empty
unsigned getNbPoints() const
Return the number of points contained in the point cloud.
unsigned getNbGroupedDescriptors() const
Return the number of grouped descriptors (e.g., normals can have 3 components but would count as only...
#define EXPECT_NEAR(val1, val2, abs_error)
Functions and classes that are not dependant on scalar type are defined in this namespace.
An exception thrown when one tries to use a module type that does not exist.
bool descriptorExists(const std::string &name) const
Look if a descriptor with a given name exist.
void addRandomDescriptor(const string &descriptorName, const int rows)
#define EXPECT_EQ(expected, actual)
An exception thrown when one tries to fetch the value of an unexisting parameter. ...
Int64Matrix times
time associated to each points, might be empty
#define EXPECT_TRUE(condition)
TEST_F(IOLoadSaveTest, VTK)
#define EXPECT_NO_THROW(statement)
Matrix features
features of points in the cloud
unsigned getDescriptorDim() const
Return the total number of descriptors.
static DataPoints load(const std::string &fileName)
Load a point cloud from a file, determine format from extension.
unsigned getEuclideanDim() const
Return the dimension of the point cloud.
virtual void loadSaveTest(const string &testFileName, bool plyFormat=false, const int nbPts=10, bool binary=false)