/////////////////////////////////////////////////////////////////////////////////////////////////////////////
| 58 | |
| 59 | ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// |
| 60 | TEST (PCL, ComplexPCDFileASCII) |
| 61 | { |
| 62 | std::ofstream fs; |
| 63 | fs.open ("complex_ascii.pcd"); |
| 64 | fs << "# .PCD v0.7 - Point Cloud Data file format\n" |
| 65 | "VERSION 0.7\n" |
| 66 | "FIELDS fpfh _ x y z\n" |
| 67 | "SIZE 4 1 4 4 4\n" |
| 68 | "TYPE F F F F F\n" |
| 69 | "COUNT 33 10 1 1 1\n" |
| 70 | "WIDTH 1\n" |
| 71 | "HEIGHT 1\n" |
| 72 | "VIEWPOINT 0 0 0 1 0 0 0\n" |
| 73 | "POINTS 1\n" |
| 74 | "DATA ascii\n" |
| 75 | "0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 0 0 0 100 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 -69.234001 -65.460999 19.173"; |
| 76 | fs.close (); |
| 77 | |
| 78 | pcl::PCLPointCloud2 blob; |
| 79 | int res = loadPCDFile ("complex_ascii.pcd", blob); |
| 80 | EXPECT_NE (res, -1); |
| 81 | EXPECT_EQ (blob.width, 1); |
| 82 | EXPECT_EQ (blob.height, 1); |
| 83 | EXPECT_TRUE (blob.is_dense); |
| 84 | EXPECT_EQ (blob.data.size (), 4 * 33 + 10 * 1 + 4 * 3); |
| 85 | |
| 86 | // Check fields |
| 87 | EXPECT_EQ (blob.fields[0].name, "fpfh"); |
| 88 | EXPECT_EQ (blob.fields[0].offset, 0); |
| 89 | EXPECT_EQ (blob.fields[0].count, 33); |
| 90 | EXPECT_EQ (blob.fields[0].datatype, pcl::PCLPointField::FLOAT32); |
| 91 | |
| 92 | EXPECT_EQ (blob.fields[1].name, "_"); |
| 93 | EXPECT_EQ (blob.fields[1].offset, 4 * 33); |
| 94 | EXPECT_EQ (blob.fields[1].count, 10); |
| 95 | EXPECT_EQ (blob.fields[1].datatype, (std::uint8_t) -1); |
| 96 | |
| 97 | EXPECT_EQ (blob.fields[2].name, "x"); |
| 98 | EXPECT_EQ (blob.fields[2].offset, 4 * 33 + 10 * 1); |
| 99 | EXPECT_EQ (blob.fields[2].count, 1); |
| 100 | EXPECT_EQ (blob.fields[2].datatype, pcl::PCLPointField::FLOAT32); |
| 101 | |
| 102 | EXPECT_EQ (blob.fields[3].name, "y"); |
| 103 | EXPECT_EQ (blob.fields[3].offset, 4 * 33 + 10 * 1 + 4); |
| 104 | EXPECT_EQ (blob.fields[3].count, 1); |
| 105 | EXPECT_EQ (blob.fields[3].datatype, pcl::PCLPointField::FLOAT32); |
| 106 | |
| 107 | EXPECT_EQ (blob.fields[4].name, "z"); |
| 108 | EXPECT_EQ (blob.fields[4].offset, 4 * 33 + 10 * 1 + 4 + 4); |
| 109 | EXPECT_EQ (blob.fields[4].count, 1); |
| 110 | EXPECT_EQ (blob.fields[4].datatype, pcl::PCLPointField::FLOAT32); |
| 111 | |
| 112 | int x_idx = pcl::getFieldIndex (blob, "x"); |
| 113 | EXPECT_EQ (x_idx, 2); |
| 114 | float x, y, z; |
| 115 | memcpy (&x, &blob.data[0 * blob.point_step + blob.fields[x_idx + 0].offset], sizeof (float)); |
| 116 | memcpy (&y, &blob.data[0 * blob.point_step + blob.fields[x_idx + 1].offset], sizeof (float)); |
| 117 | memcpy (&z, &blob.data[0 * blob.point_step + blob.fields[x_idx + 2].offset], sizeof (float)); |
nothing calls this directly
no test coverage detected