TEST(LasReaderTest, callback) { PointTable table; point_count_t count = 0; Options ops; ops.add("filename", Support::datapath("las/simple.las")); Reader::PointReadFunc cb = [&count](PointView& view, PointId id) { count++; }; LasReader reader; reader.setOptions(ops); reader.setReadCb(cb); reader.prepare(table); reader.execute(table); EXPECT_EQ(count, (point_count_t)1065); }
TEST(PointTable, userView) { class UserTable : public PointTable { private: double m_x; double m_y; double m_z; public: PointId addPoint() { return 0; } char *getPoint(PointId idx) { return NULL; } void setField(const Dimension::Detail *d, PointId idx, const void *value) { if (d->id() == Dimension::Id::X) m_x = *(const double *)value; else if (d->id() == Dimension::Id::Y) m_y = *(const double *)value; else if (d->id() == Dimension::Id::Z) m_z = *(const double *)value; } void getField(const Dimension::Detail *d, PointId idx, void *value) { if (d->id() == Dimension::Id::X) *(double *)value = m_x; else if (d->id() == Dimension::Id::Y) *(double *)value = m_y; else if (d->id() == Dimension::Id::Z) *(double *)value = m_z; } }; LasReader reader; Options opts; opts.add("filename", Support::datapath("las/simple.las")); opts.add("count", 100); reader.setOptions(opts); PointTable defTable; reader.prepare(defTable); PointViewSet viewSet = reader.execute(defTable); PointViewPtr defView = *viewSet.begin(); bool called(false); auto readCb = [defView, &called](PointView& customView, PointId id) { called = true; double xDef = defView->getFieldAs<double>(Dimension::Id::X, id); double yDef = defView->getFieldAs<double>(Dimension::Id::Y, id); double zDef = defView->getFieldAs<double>(Dimension::Id::Z, id); double x = customView.getFieldAs<double>(Dimension::Id::X, id); double y = customView.getFieldAs<double>(Dimension::Id::Y, id); double z = customView.getFieldAs<double>(Dimension::Id::Z, id); EXPECT_FLOAT_EQ(xDef, x); EXPECT_FLOAT_EQ(yDef, y); EXPECT_FLOAT_EQ(zDef, z); }; reader.setReadCb(readCb); UserTable table; reader.prepare(table); reader.execute(table); EXPECT_TRUE(called); }