20 # include <openvdb/openvdb.h>
21 # include <openvdb/tools/Dense.h>
24 # include <nanovdb/util/OpenToNanoVDB.h>
44 bbox = grid->evalActiveVoxelBoundingBox();
50 openvdb::Coord dim = bbox.dim();
51 metadata.
width = dim.x();
53 metadata.
depth = dim.z();
56 if (grid->isType<openvdb::FloatGrid>()) {
60 nanogrid = nanovdb::openToNanoVDB(*openvdb::gridConstPtrCast<openvdb::FloatGrid>(grid));
64 else if (grid->isType<openvdb::Vec3fGrid>()) {
68 nanogrid = nanovdb::openToNanoVDB(*openvdb::gridConstPtrCast<openvdb::Vec3fGrid>(grid));
72 else if (grid->isType<openvdb::BoolGrid>()) {
76 nanogrid = nanovdb::openToNanoVDB(
77 openvdb::FloatGrid(*openvdb::gridConstPtrCast<openvdb::BoolGrid>(grid)));
81 else if (grid->isType<openvdb::DoubleGrid>()) {
85 nanogrid = nanovdb::openToNanoVDB(
86 openvdb::FloatGrid(*openvdb::gridConstPtrCast<openvdb::DoubleGrid>(grid)));
90 else if (grid->isType<openvdb::Int32Grid>()) {
94 nanogrid = nanovdb::openToNanoVDB(
95 openvdb::FloatGrid(*openvdb::gridConstPtrCast<openvdb::Int32Grid>(grid)));
99 else if (grid->isType<openvdb::Int64Grid>()) {
103 nanogrid = nanovdb::openToNanoVDB(
104 openvdb::FloatGrid(*openvdb::gridConstPtrCast<openvdb::Int64Grid>(grid)));
108 else if (grid->isType<openvdb::Vec3IGrid>()) {
112 nanogrid = nanovdb::openToNanoVDB(
113 openvdb::Vec3fGrid(*openvdb::gridConstPtrCast<openvdb::Vec3IGrid>(grid)));
117 else if (grid->isType<openvdb::Vec3dGrid>()) {
121 nanogrid = nanovdb::openToNanoVDB(
122 openvdb::Vec3fGrid(*openvdb::gridConstPtrCast<openvdb::Vec3dGrid>(grid)));
126 else if (grid->isType<openvdb::MaskGrid>()) {
161 for (
int row = 0; row < 3; row++) {
162 index_to_object[row][
col] = (
float)grid_matrix[
col][row];
174 openvdb::Coord
min = bbox.min();
182 # ifndef WITH_NANOVDB
198 memcpy(pixels, nanogrid.data(), nanogrid.size());
203 if (grid->isType<openvdb::FloatGrid>()) {
204 openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (
float *)pixels);
205 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::FloatGrid>(grid), dense);
207 else if (grid->isType<openvdb::Vec3fGrid>()) {
208 openvdb::tools::Dense<openvdb::Vec3f, openvdb::tools::LayoutXYZ> dense(
210 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Vec3fGrid>(grid), dense);
212 else if (grid->isType<openvdb::BoolGrid>()) {
213 openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (
float *)pixels);
214 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::BoolGrid>(grid), dense);
216 else if (grid->isType<openvdb::DoubleGrid>()) {
217 openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (
float *)pixels);
218 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::DoubleGrid>(grid), dense);
220 else if (grid->isType<openvdb::Int32Grid>()) {
221 openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (
float *)pixels);
222 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Int32Grid>(grid), dense);
224 else if (grid->isType<openvdb::Int64Grid>()) {
225 openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (
float *)pixels);
226 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Int64Grid>(grid), dense);
228 else if (grid->isType<openvdb::Vec3IGrid>()) {
229 openvdb::tools::Dense<openvdb::Vec3f, openvdb::tools::LayoutXYZ> dense(
231 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Vec3IGrid>(grid), dense);
233 else if (grid->isType<openvdb::Vec3dGrid>()) {
234 openvdb::tools::Dense<openvdb::Vec3f, openvdb::tools::LayoutXYZ> dense(
236 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::Vec3dGrid>(grid), dense);
238 else if (grid->isType<openvdb::MaskGrid>()) {
239 openvdb::tools::Dense<float, openvdb::tools::LayoutXYZ> dense(bbox, (
float *)pixels);
240 openvdb::tools::copyToDense(*openvdb::gridConstPtrCast<openvdb::MaskGrid>(grid), dense);
259 return grid == other_loader.grid;
283 openvdb::GridBase::ConstPtr VDBImageLoader::get_grid()
typedef float(TangentPoint)[2]
VDBImageLoader(const string &grid_name)
virtual bool equals(const ImageLoader &other) const override
virtual bool load_metadata(const ImageDeviceFeatures &features, ImageMetaData &metadata) override
virtual void cleanup() override
virtual bool is_vdb_loader() const override
virtual string name() const override
virtual bool load_pixels(const ImageMetaData &metadata, void *pixels, const size_t pixels_size, const bool associate_alpha) override
#define CCL_NAMESPACE_END
Eigen::Matrix< float, 4, 4 > Mat4f
@ IMAGE_DATA_TYPE_NANOVDB_FLOAT
@ IMAGE_DATA_TYPE_NANOVDB_FLOAT3