#include <array>
#include <vector>
#include <random>
#include <cstdint>
#include <iostream>
#include <exception>
int main()
{
try
{
rdb.
open(
"pointcloud.rdbx", settings);
const PointAttribute detailsReflectance = rdb.
pointAttribute().
get(
"riegl.reflectance");
std::uniform_real_distribution<double> randomCoordinates(
detailsCoordinates.minimumValue,
detailsCoordinates.maximumValue
);
std::uniform_real_distribution<float> randomReflectance(
float(detailsReflectance.minimumValue),
float(detailsReflectance.maximumValue)
);
std::default_random_engine rng;
rdb,
"Import",
"Point Importer v1.0"
);
const uint32_t BUFFER_SIZE = 10000;
const uint32_t POINT_COUNT = 150000;
std::vector< std::array<double, 3> > bufferCoordinates(BUFFER_SIZE);
std::vector< float > bufferReflectance(BUFFER_SIZE);
if (0)
{
"riegl.reflectance",
bufferReflectance
);
}
else
{
riegl::rdb::pointcloud::RDB_RIEGL_REFLECTANCE,
bufferReflectance
);
}
if (0)
{
}
else
{
const int32_t stride = sizeof(bufferCoordinates[0]);
query.
bindBuffer(
"riegl.xyz[0]", bufferCoordinates[0][0], stride);
query.
bindBuffer(
"riegl.xyz[1]", bufferCoordinates[0][1], stride);
query.
bindBuffer(
"riegl.xyz[2]", bufferCoordinates[0][2], stride);
}
for (uint32_t total = 0; total < POINT_COUNT;)
{
for (uint32_t i = 0; i < BUFFER_SIZE; i++)
{
bufferCoordinates[i][0] = randomCoordinates(rng);
bufferCoordinates[i][1] = randomCoordinates(rng);
bufferCoordinates[i][2] = randomCoordinates(rng);
bufferReflectance[i] = randomReflectance(rng);
}
total += query.
next(BUFFER_SIZE);
static uint32_t block = 1;
std::cout << "block: " << block++ << ", "
<< "total: " << total << std::endl;
}
return 0;
}
{
std::cerr << error.
what() <<
" (" << error.
details() <<
")" << std::endl;
return 1;
}
catch(const std::exception &error)
{
std::cerr << error.what() << std::endl;
return 1;
}
}