19#include <UT/UT_Version.h>
29#if !defined(SESI_OPENVDB) && !defined(SESI_OPENVDB_PRIM)
31#include <GU/GU_PrimVDB.h>
39#ifndef __HDK_GU_PrimVDB__
40#define __HDK_GU_PrimVDB__
42#include <GA/GA_PrimitiveDefinition.h>
44#include <GU/GU_Detail.h>
45#include <UT/UT_Matrix4.h>
46#include <UT/UT_VoxelArray.h>
53class UT_MemoryCounter;
54class GEO_ConvertParms;
55typedef GEO_ConvertParms GU_ConvertParms;
63 ~GU_PrimVDB()
override {}
67 GU_PrimVDB(GU_Detail *gdp, GA_Offset offset=GA_INVALID_OFFSET)
68 : GEO_PrimVDB(gdp, offset)
72 int64 getMemoryUsage()
const override;
77 void countMemory(UT_MemoryCounter &counter)
const override;
81 static GA_PrimitiveTypeId theTypeId() {
return theDefinition->getId(); }
85 static void registerMyself(GA_PrimitiveFactory *factory);
88 const GA_PrimitiveDefinition &getTypeDef()
const override
90 UT_ASSERT(theDefinition);
91 return *theDefinition;
96 GEO_Primitive *convert(GU_ConvertParms &parms,
97 GA_PointGroup *usedpts = 0)
override;
98 GEO_Primitive *convertNew(GU_ConvertParms &parms)
override;
103 static void convertVolumesToVDBs(
105 const GU_Detail &src_geo,
106 GU_ConvertParms &parms,
111 bool activate_inside =
true);
117 static void convertVDBs(
119 const GU_Detail &src_geo,
120 GU_ConvertParms &parms,
123 static void convertVDBs(
125 const GU_Detail &src_geo,
126 GU_ConvertParms &parms,
129 bool split_disjoint_volumes);
138 static GU_PrimVDB * build(GU_Detail *gdp,
bool append_points =
true);
147 static SYS_FORCE_INLINE
148 GU_PrimVDB* buildFromGrid(GU_Detail& gdp, openvdb::GridBase::Ptr grid,
149 const GEO_PrimVDB* src = NULL,
const char* name = NULL)
151 return GU_PrimVDB::buildFromGridAdapter(gdp, &grid, src, name);
155 static GEO_PrimVDB *buildFromVDB(GU_Detail *gdp,
156 UT_SharedPtr<IMX_VDB> vdb);
157 static GEO_PrimVDB *buildFromVDB(GU_Detail *gdp,
158 UT_SharedPtr<const IMX_VDB> vdb);
162 static GU_PrimVDB * buildFromPrimVolume(
164 const GEO_PrimVolume &vol,
166 const bool flood_sdf =
false,
167 const bool prune =
false,
168 const float tolerance = 0.0,
169 const bool activate_inside_sdf =
true);
174 static void convertPrimVolumeToPolySoup(
176 const GEO_PrimVolume &src_vol);
178 void normal(NormalComp &output)
const override;
179 void normal(NormalCompD &output)
const override;
183 void syncAttrsFromMetadata();
190 static SYS_FORCE_INLINE
191 void createGridAttrsFromMetadata(
192 const GEO_PrimVDB& prim,
193 const openvdb::GridBase& grid,
196 GU_PrimVDB::createGridAttrsFromMetadataAdapter(prim, &grid, gdp);
205 static SYS_FORCE_INLINE
206 void createAttrsFromMetadata(
207 GA_AttributeOwner owner,
209 const openvdb::MetaMap& meta_map,
212 GU_PrimVDB::createAttrsFromMetadataAdapter(owner, element, &meta_map, gdp);
219 static SYS_FORCE_INLINE
220 void createMetadataFromGridAttrs(
221 openvdb::GridBase& grid,
222 const GEO_PrimVDB& prim,
223 const GEO_Detail& gdp)
225 GU_PrimVDB::createMetadataFromGridAttrsAdapter(&grid, prim, gdp);
233 static SYS_FORCE_INLINE
234 void createMetadataFromAttrs(
235 openvdb::MetaMap& meta_map,
236 GA_AttributeOwner owner,
238 const GEO_Detail& geo)
240 GU_PrimVDB::createMetadataFromAttrsAdapter(&meta_map, owner, element, geo);
250 void expandBorderFromPrimVolume(
251 const GEO_PrimVolume &vol,
254 GEO_Primitive * convertToNewPrim(
256 GU_ConvertParms &parms,
258 bool split_disjoint_volumes,
259 bool &success)
const;
260 GEO_Primitive * convertToPrimVolume(
262 GU_ConvertParms &parms,
263 bool split_disjoint_volumes)
const;
264 GEO_Primitive * convertToPoly(
266 GU_ConvertParms &parms,
269 bool &success)
const;
271 static GU_PrimVDB* buildFromGridAdapter(
276 static void createGridAttrsFromMetadataAdapter(
277 const GEO_PrimVDB& prim,
280 static void createMetadataFromGridAttrsAdapter(
285 static void createAttrsFromMetadataAdapter(
286 GA_AttributeOwner owner,
288 const void* meta_map_ptr,
291 static void createMetadataFromAttrsAdapter(
293 GA_AttributeOwner owner,
295 const GEO_Detail& geo);
299 static GA_PrimitiveDefinition *theDefinition;
300 friend class GU_PrimitiveFactory;
301 SYS_DEPRECATED_PUSH_DISABLE()
303 SYS_DEPRECATED_POP_DISABLE()
Definition AttributeTransferUtil.h:34