4 #ifndef __UTIL_OPENVDB_H__
5 #define __UTIL_OPENVDB_H__
8 # include <openvdb/openvdb.h>
13 using Vec4fGrid = Grid<Vec4fTree>;
16 template<
typename OpType>
17 bool 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 else if (grid->isType<openvdb::Vec3fGrid>()) {
23 return op.template operator()<openvdb::Vec3fGrid, openvdb::Vec3fGrid,
openvdb::Vec3f, 3>(grid);
25 else if (grid->isType<openvdb::BoolGrid>()) {
26 return op.template operator()<openvdb::BoolGrid, openvdb::FloatGrid,
float, 1>(grid);
28 else if (grid->isType<openvdb::DoubleGrid>()) {
29 return op.template operator()<openvdb::DoubleGrid, openvdb::FloatGrid,
float, 1>(grid);
31 else if (grid->isType<openvdb::Int32Grid>()) {
32 return op.template operator()<openvdb::Int32Grid, openvdb::FloatGrid,
float, 1>(grid);
34 else if (grid->isType<openvdb::Int64Grid>()) {
35 return op.template operator()<openvdb::Int64Grid, openvdb::FloatGrid,
float, 1>(grid);
37 else if (grid->isType<openvdb::Vec3IGrid>()) {
38 return op.template operator()<openvdb::Vec3IGrid, openvdb::Vec3fGrid,
openvdb::Vec3f, 3>(grid);
40 else if (grid->isType<openvdb::Vec3dGrid>()) {
41 return op.template operator()<openvdb::Vec3dGrid, openvdb::Vec3fGrid,
openvdb::Vec3f, 3>(grid);
43 else if (grid->isType<openvdb::MaskGrid>()) {
44 return op.template operator()<openvdb::MaskGrid, openvdb::FloatGrid,
float, 1>(grid);
typedef float(TangentPoint)[2]