2 * ***** BEGIN GPL LICENSE BLOCK *****
4 * This program is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU General Public License
6 * as published by the Free Software Foundation; either version 2
7 * of the License, or (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software Foundation,
16 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * The Original Code is Copyright (C) 2015 Blender Foundation.
19 * All rights reserved.
21 * Contributor(s): Kevin Dietrich
23 * ***** END GPL LICENSE BLOCK *****
26 #include "openvdb_capi.h"
27 #include "openvdb_dense_convert.h"
28 #include "openvdb_util.h"
30 struct OpenVDBFloatGrid { int unused; };
31 struct OpenVDBIntGrid { int unused; };
32 struct OpenVDBVectorGrid { int unused; };
34 int OpenVDB_getVersionHex()
36 return openvdb::OPENVDB_LIBRARY_VERSION;
39 OpenVDBFloatGrid *OpenVDB_export_grid_fl(
40 OpenVDBWriter *writer,
41 const char *name, float *data,
42 const int res[3], float matrix[4][4],
43 OpenVDBFloatGrid *mask)
47 using openvdb::FloatGrid;
49 FloatGrid *mask_grid = reinterpret_cast<FloatGrid *>(mask);
50 FloatGrid *grid = internal::OpenVDB_export_grid<FloatGrid>(
58 return reinterpret_cast<OpenVDBFloatGrid *>(grid);
61 OpenVDBIntGrid *OpenVDB_export_grid_ch(
62 OpenVDBWriter *writer,
63 const char *name, unsigned char *data,
64 const int res[3], float matrix[4][4],
65 OpenVDBFloatGrid *mask)
69 using openvdb::FloatGrid;
70 using openvdb::Int32Grid;
72 FloatGrid *mask_grid = reinterpret_cast<FloatGrid *>(mask);
73 Int32Grid *grid = internal::OpenVDB_export_grid<Int32Grid>(
81 return reinterpret_cast<OpenVDBIntGrid *>(grid);
84 OpenVDBVectorGrid *OpenVDB_export_grid_vec(
85 struct OpenVDBWriter *writer,
87 const float *data_x, const float *data_y, const float *data_z,
88 const int res[3], float matrix[4][4], short vec_type,
89 const bool is_color, OpenVDBFloatGrid *mask)
93 using openvdb::GridBase;
94 using openvdb::FloatGrid;
95 using openvdb::VecType;
97 FloatGrid *mask_grid = reinterpret_cast<FloatGrid *>(mask);
98 GridBase *grid = internal::OpenVDB_export_vector_grid(
106 static_cast<VecType>(vec_type),
110 return reinterpret_cast<OpenVDBVectorGrid *>(grid);
113 void OpenVDB_import_grid_fl(
114 OpenVDBReader *reader,
115 const char *name, float **data,
120 internal::OpenVDB_import_grid<openvdb::FloatGrid>(reader, name, data, res);
123 void OpenVDB_import_grid_ch(
124 OpenVDBReader *reader,
125 const char *name, unsigned char **data,
128 internal::OpenVDB_import_grid<openvdb::Int32Grid>(reader, name, data, res);
131 void OpenVDB_import_grid_vec(
132 struct OpenVDBReader *reader,
134 float **data_x, float **data_y, float **data_z,
139 internal::OpenVDB_import_grid_vector(reader, name, data_x, data_y, data_z, res);
142 OpenVDBWriter *OpenVDBWriter_create()
144 return new OpenVDBWriter();
147 void OpenVDBWriter_free(OpenVDBWriter *writer)
152 void OpenVDBWriter_set_flags(OpenVDBWriter *writer, const int flag, const bool half)
154 int compression_flags = openvdb::io::COMPRESS_ACTIVE_MASK;
156 #ifdef WITH_OPENVDB_BLOSC
158 compression_flags |= openvdb::io::COMPRESS_BLOSC;
163 compression_flags |= openvdb::io::COMPRESS_ZIP;
166 compression_flags = openvdb::io::COMPRESS_NONE;
169 writer->setFlags(compression_flags, half);
172 void OpenVDBWriter_add_meta_fl(OpenVDBWriter *writer, const char *name, const float value)
174 writer->insertFloatMeta(name, value);
177 void OpenVDBWriter_add_meta_int(OpenVDBWriter *writer, const char *name, const int value)
179 writer->insertIntMeta(name, value);
182 void OpenVDBWriter_add_meta_v3(OpenVDBWriter *writer, const char *name, const float value[3])
184 writer->insertVec3sMeta(name, value);
187 void OpenVDBWriter_add_meta_v3_int(OpenVDBWriter *writer, const char *name, const int value[3])
189 writer->insertVec3IMeta(name, value);
192 void OpenVDBWriter_add_meta_mat4(OpenVDBWriter *writer, const char *name, float value[4][4])
194 writer->insertMat4sMeta(name, value);
197 void OpenVDBWriter_write(OpenVDBWriter *writer, const char *filename)
199 writer->write(filename);
202 OpenVDBReader *OpenVDBReader_create()
204 return new OpenVDBReader();
207 void OpenVDBReader_free(OpenVDBReader *reader)
212 void OpenVDBReader_open(OpenVDBReader *reader, const char *filename)
214 reader->open(filename);
217 void OpenVDBReader_get_meta_fl(OpenVDBReader *reader, const char *name, float *value)
219 reader->floatMeta(name, *value);
222 void OpenVDBReader_get_meta_int(OpenVDBReader *reader, const char *name, int *value)
224 reader->intMeta(name, *value);
227 void OpenVDBReader_get_meta_v3(OpenVDBReader *reader, const char *name, float value[3])
229 reader->vec3sMeta(name, value);
232 void OpenVDBReader_get_meta_v3_int(OpenVDBReader *reader, const char *name, int value[3])
234 reader->vec3IMeta(name, value);
237 void OpenVDBReader_get_meta_mat4(OpenVDBReader *reader, const char *name, float value[4][4])
239 reader->mat4sMeta(name, value);