Blender V4.5
openvdb.h
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2011-2022 Blender Foundation
2 *
3 * SPDX-License-Identifier: Apache-2.0 */
4
5#pragma once
6
7#ifdef WITH_OPENVDB
8# include <openvdb/openvdb.h>
9
10namespace openvdb {
11
12using Vec4fTree = tree::Tree4<Vec4f, 5, 4, 3>::Type;
13using Vec4fGrid = Grid<Vec4fTree>;
14
15/* Apply operation to known grid types. */
16template<typename OpType>
17bool grid_type_operation(const openvdb::GridBase::ConstPtr &grid, OpType &&op)
18{
19 if (grid->isType<openvdb::FloatGrid>()) {
20 return op.template operator()<openvdb::FloatGrid, openvdb::FloatGrid, float, 1>(grid);
21 }
22 if (grid->isType<openvdb::Vec3fGrid>()) {
23 return op.template operator()<openvdb::Vec3fGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
24 }
25 if (grid->isType<openvdb::BoolGrid>()) {
26 return op.template operator()<openvdb::BoolGrid, openvdb::FloatGrid, float, 1>(grid);
27 }
28 if (grid->isType<openvdb::DoubleGrid>()) {
29 return op.template operator()<openvdb::DoubleGrid, openvdb::FloatGrid, float, 1>(grid);
30 }
31 if (grid->isType<openvdb::Int32Grid>()) {
32 return op.template operator()<openvdb::Int32Grid, openvdb::FloatGrid, float, 1>(grid);
33 }
34 if (grid->isType<openvdb::Int64Grid>()) {
35 return op.template operator()<openvdb::Int64Grid, openvdb::FloatGrid, float, 1>(grid);
36 }
37 if (grid->isType<openvdb::Vec3IGrid>()) {
38 return op.template operator()<openvdb::Vec3IGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
39 }
40 if (grid->isType<openvdb::Vec3dGrid>()) {
41 return op.template operator()<openvdb::Vec3dGrid, openvdb::Vec3fGrid, openvdb::Vec3f, 3>(grid);
42 }
43 if (grid->isType<openvdb::MaskGrid>()) {
44 return op.template operator()<openvdb::MaskGrid, openvdb::FloatGrid, float, 1>(grid);
45 }
46 return false;
47}
48
49}; // namespace openvdb
50
51#endif