11# include <openvdb/openvdb.h>
12# include <openvdb/tools/GridTransformer.h>
16openvdb::FloatGrid &resample_sdf_grid_if_necessary(bke::VolumeGrid<float> &volume_grid,
17 bke::VolumeTreeAccessToken &tree_token,
18 const openvdb::math::Transform &transform,
19 std::shared_ptr<openvdb::FloatGrid> &storage)
21 const openvdb::FloatGrid &grid = volume_grid.grid(tree_token);
22 if (grid.transform() == transform) {
23 return volume_grid.grid_for_write(tree_token);
26 storage = openvdb::FloatGrid::create();
27 storage->setTransform(transform.copy());
30 openvdb::tools::resampleToMatch<openvdb::tools::BoxSampler>(grid, *storage);
31 openvdb::tools::pruneLevelSet(storage->tree());