8# include <openvdb/openvdb.h>
12using Vec4fTree = tree::Tree4<Vec4f, 5, 4, 3>::Type;
16template<
typename OpType>
17bool grid_type_operation(
const openvdb::GridBase::ConstPtr &grid, OpType &&op)
19 if (grid->isType<openvdb::FloatGrid>()) {
20 return op.template operator()<openvdb::FloatGrid, openvdb::FloatGrid, float, 1>(grid);
22 if (grid->isType<openvdb::Vec3fGrid>()) {
23 return op.template operator()<openvdb::Vec3fGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
25 if (grid->isType<openvdb::BoolGrid>()) {
26 return op.template operator()<openvdb::BoolGrid, openvdb::FloatGrid, float, 1>(grid);
28 if (grid->isType<openvdb::DoubleGrid>()) {
29 return op.template operator()<openvdb::DoubleGrid, openvdb::FloatGrid, float, 1>(grid);
31 if (grid->isType<openvdb::Int32Grid>()) {
32 return op.template operator()<openvdb::Int32Grid, openvdb::FloatGrid, float, 1>(grid);
34 if (grid->isType<openvdb::Int64Grid>()) {
35 return op.template operator()<openvdb::Int64Grid, openvdb::FloatGrid, float, 1>(grid);
37 if (grid->isType<openvdb::Vec3IGrid>()) {
38 return op.template operator()<openvdb::Vec3IGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
40 if (grid->isType<openvdb::Vec3dGrid>()) {
41 return op.template operator()<openvdb::Vec3dGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
43 if (grid->isType<openvdb::MaskGrid>()) {
44 return op.template operator()<openvdb::MaskGrid, openvdb::FloatGrid, float, 1>(grid);