| 13 | { |
| 14 | |
| 15 | TEST(M3C2FilterTest, test1) |
| 16 | { |
| 17 | using namespace Dimension; |
| 18 | PointTable table; |
| 19 | |
| 20 | Options ro1; |
| 21 | Options ro2; |
| 22 | Options ro3; |
| 23 | LasReader r1; |
| 24 | LasReader r2; |
| 25 | TextReader r3; |
| 26 | ro1.add("filename", Support::datapath("autzen/autzen-bmx-2010.las")); |
| 27 | ro2.add("filename", Support::datapath("autzen/autzen-bmx-2023.las")); |
| 28 | // contains 3 points picked from the first file to use as core points |
| 29 | ro3.add("filename", Support::datapath("autzen/autzen-bmx-cores.txt")); |
| 30 | r1.setOptions(ro1); |
| 31 | r2.setOptions(ro2); |
| 32 | r3.setOptions(ro3); |
| 33 | |
| 34 | M3C2Filter filter; |
| 35 | Options fo; |
| 36 | fo.add("normal_radius", 5.24414); |
| 37 | fo.add("cyl_radius", 10.4882815); |
| 38 | fo.add("cyl_halflen", 2.763006); |
| 39 | |
| 40 | filter.setOptions(fo); |
| 41 | filter.setInput(r1); |
| 42 | filter.setInput(r2); |
| 43 | filter.setInput(r3); |
| 44 | |
| 45 | filter.prepare(table); |
| 46 | PointViewSet viewSet = filter.execute(table); |
| 47 | |
| 48 | EXPECT_EQ(1u, viewSet.size()); |
| 49 | PointViewPtr viewOut = *viewSet.begin(); |
| 50 | |
| 51 | Dimension::Id distance = viewOut->layout()->findDim("m3c2_distance"); |
| 52 | Dimension::Id uncertainty = viewOut->layout()->findDim("m3c2_uncertainty"); |
| 53 | Dimension::Id significant = viewOut->layout()->findDim("m3c2_significant"); |
| 54 | Dimension::Id stdDev1 = viewOut->layout()->findDim("m3c2_std_dev1"); |
| 55 | Dimension::Id stdDev2 = viewOut->layout()->findDim("m3c2_std_dev2"); |
| 56 | Dimension::Id c1 = viewOut->layout()->findDim("m3c2_count1"); |
| 57 | Dimension::Id c2 = viewOut->layout()->findDim("m3c2_count2"); |
| 58 | |
| 59 | EXPECT_TRUE(viewOut->hasDim(distance)); |
| 60 | EXPECT_TRUE(viewOut->hasDim(uncertainty)); |
| 61 | EXPECT_TRUE(viewOut->hasDim(significant)); |
| 62 | EXPECT_TRUE(viewOut->hasDim(stdDev1)); |
| 63 | EXPECT_TRUE(viewOut->hasDim(stdDev2)); |
| 64 | EXPECT_TRUE(viewOut->hasDim(c1)); |
| 65 | EXPECT_TRUE(viewOut->hasDim(c2)); |
| 66 | |
| 67 | EXPECT_NEAR(viewOut->getFieldAs<float>(distance, 0), 1.396, 0.01); |
| 68 | EXPECT_NEAR(viewOut->getFieldAs<float>(distance, 1), 0.670, 0.01); |
| 69 | EXPECT_NEAR(viewOut->getFieldAs<float>(distance, 2), 1.246, 0.01); |
| 70 | for (size_t i = 0; i < viewOut->size(); ++i) |
| 71 | EXPECT_EQ(viewOut->getFieldAs<float>(significant, i), 1); |
| 72 | EXPECT_NEAR(viewOut->getFieldAs<float>(uncertainty, 0), 0.275, 0.01); |