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 GU_PrimVDB * buildFromPrimVolume(
157 const GEO_PrimVolume &vol,
159 const bool flood_sdf =
false,
160 const bool prune =
false,
161 const float tolerance = 0.0,
162 const bool activate_inside_sdf =
true);
167 static void convertPrimVolumeToPolySoup(
169 const GEO_PrimVolume &src_vol);
171 void normal(NormalComp &output)
const override;
172 void normal(NormalCompD &output)
const override;
176 void syncAttrsFromMetadata();
183 static SYS_FORCE_INLINE
184 void createGridAttrsFromMetadata(
185 const GEO_PrimVDB& prim,
186 const openvdb::GridBase& grid,
189 GU_PrimVDB::createGridAttrsFromMetadataAdapter(prim, &grid, gdp);
198 static SYS_FORCE_INLINE
199 void createAttrsFromMetadata(
200 GA_AttributeOwner owner,
202 const openvdb::MetaMap& meta_map,
205 GU_PrimVDB::createAttrsFromMetadataAdapter(owner, element, &meta_map, gdp);
212 static SYS_FORCE_INLINE
213 void createMetadataFromGridAttrs(
214 openvdb::GridBase& grid,
215 const GEO_PrimVDB& prim,
216 const GEO_Detail& gdp)
218 GU_PrimVDB::createMetadataFromGridAttrsAdapter(&grid, prim, gdp);
226 static SYS_FORCE_INLINE
227 void createMetadataFromAttrs(
228 openvdb::MetaMap& meta_map,
229 GA_AttributeOwner owner,
231 const GEO_Detail& geo)
233 GU_PrimVDB::createMetadataFromAttrsAdapter(&meta_map, owner, element, geo);
243 void expandBorderFromPrimVolume(
244 const GEO_PrimVolume &vol,
247 GEO_Primitive * convertToNewPrim(
249 GU_ConvertParms &parms,
251 bool split_disjoint_volumes,
252 bool &success)
const;
253 GEO_Primitive * convertToPrimVolume(
255 GU_ConvertParms &parms,
256 bool split_disjoint_volumes)
const;
257 GEO_Primitive * convertToPoly(
259 GU_ConvertParms &parms,
262 bool &success)
const;
264 static GU_PrimVDB* buildFromGridAdapter(
269 static void createGridAttrsFromMetadataAdapter(
270 const GEO_PrimVDB& prim,
273 static void createMetadataFromGridAttrsAdapter(
278 static void createAttrsFromMetadataAdapter(
279 GA_AttributeOwner owner,
281 const void* meta_map_ptr,
284 static void createMetadataFromAttrsAdapter(
286 GA_AttributeOwner owner,
288 const GEO_Detail& geo);
292 static GA_PrimitiveDefinition *theDefinition;
293 friend class GU_PrimitiveFactory;
294 SYS_DEPRECATED_PUSH_DISABLE()
296 SYS_DEPRECATED_POP_DISABLE()
Definition AttributeTransferUtil.h:34