11 #ifndef OPENVDB_AX_COMPILER_LEAF_LOCAL_DATA_HAS_BEEN_INCLUDED 12 #define OPENVDB_AX_COMPILER_LEAF_LOCAL_DATA_HAS_BEEN_INCLUDED 15 #include <openvdb/version.h> 28 namespace codegen_internal {
45 using UniquePtr = std::unique_ptr<PointLeafLocalData>;
52 using LeafNode = openvdb::points::PointDataTree::LeafNodeType;
83 static const size_t maxGroupsInArray =
84 #if (OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER > 7 || \ 85 (OPENVDB_LIBRARY_MAJOR_VERSION_NUMBER >= 7 && \ 86 OPENVDB_LIBRARY_MINOR_VERSION_NUMBER >= 1)) 87 points::AttributeSet::Descriptor::groupBits();
90 points::point_group_internal::GroupInfo::groupBits();
93 if (mArrays.empty() || mOffset == maxGroupsInArray) {
95 mArrays.emplace_back(
new GroupArrayT(static_cast<openvdb::Index>(mPointCount)));
102 std::unique_ptr<GroupHandleT>& handle = mHandles[name];
114 const auto iter = mHandles.find(name);
115 if (iter == mHandles.end())
return nullptr;
116 return iter->second.get();
123 inline bool hasGroup(
const std::string& name)
const {
124 return mHandles.find(name) != mHandles.end();
133 inline void getGroups(std::set<std::string>& groups)
const {
134 for (
const auto& iter : mHandles) {
135 groups.insert(iter.first);
143 for (
auto& array : mArrays) array->compact();
161 const auto arrayMapIter = mStringMap.find(const_cast<points::AttributeArray*>(array));
162 if (arrayMapIter == mStringMap.end())
return false;
163 const auto iter = arrayMapIter->second.find(idx);
164 if (iter == arrayMapIter->second.end())
return false;
178 mStringMap[array][idx] = data;
189 const auto arrayMapIter = mStringMap.find(array);
190 if (arrayMapIter == mStringMap.end())
return;
191 arrayMapIter->second.erase(idx);
192 if (arrayMapIter->second.empty()) mStringMap.erase(arrayMapIter);
203 for (
const auto& arrayIter : mStringMap) {
204 for (
const auto& iter : arrayIter.second) {
205 inserter.
insert(iter.second);
208 return !mStringMap.empty();
219 const size_t mPointCount;
220 std::vector<std::unique_ptr<GroupArrayT>> mArrays;
222 std::map<std::string, std::unique_ptr<GroupHandleT>> mHandles;
233 #endif // OPENVDB_AX_COMPILER_LEAF_LOCAL_DATA_HAS_BEEN_INCLUDED
openvdb::points::PointDataTree::LeafNodeType LeafNode
Definition: PointLeafLocalData.h:52
void removeNewStringData(points::AttributeArray *array, const uint64_t idx)
Remove any new string data associated with a particular point on a particular string attribute array...
Definition: PointLeafLocalData.h:188
bool insertNewStrings(points::StringMetaInserter &inserter) const
Insert all new point strings stored across all collected string attribute arrays into a StringMetaIns...
Definition: PointLeafLocalData.h:202
openvdb::points::GroupAttributeArray GroupArrayT
Definition: PointLeafLocalData.h:46
Attribute Array storage templated on type and compression codec.
openvdb::points::GroupWriteHandle GroupHandleT
Definition: PointLeafLocalData.h:47
void setNewStringData(points::AttributeArray *array, const uint64_t idx, const std::string &data)
Set new string data associated with a particular point on a particular string attribute array...
Definition: PointLeafLocalData.h:177
const StringArrayMap & getStringArrayMap() const
Returns a const reference to the string array map.
Definition: PointLeafLocalData.h:213
Base class for storing attribute data.
Definition: AttributeArray.h:92
Point attribute manipulation in a VDB Point Grid.
Point group manipulation in a VDB Point Grid.
Various functions can request the use and initialization of point data from within the kernel that do...
Definition: PointLeafLocalData.h:43
void getGroups(std::set< std::string > &groups) const
Populate a set with all the groups which have been inserted into this object. Used to compute a final...
Definition: PointLeafLocalData.h:133
std::unique_ptr< PointLeafLocalData > UniquePtr
Definition: PointLeafLocalData.h:45
PointLeafLocalData(const size_t count)
Construct a new data object to keep track of various data objects created per leaf by the point compu...
Definition: PointLeafLocalData.h:60
Definition: Exceptions.h:13
TypedAttributeArray< GroupType, GroupCodec > GroupAttributeArray
Definition: AttributeGroup.h:40
GroupHandleT * getOrInsert(const std::string &name)
Group methods.
Definition: PointLeafLocalData.h:78
uint8_t GroupType
Definition: AttributeSet.h:31
std::map< uint64_t, std::string > PointStringMap
Definition: PointLeafLocalData.h:49
bool getNewStringData(const points::AttributeArray *array, const uint64_t idx, std::string &data) const
String methods.
Definition: PointLeafLocalData.h:160
Attribute-owned data structure for points. Point attributes are stored in leaf nodes and ordered by v...
void compact()
Compact all arrays stored on this object. This does not invalidate any active write handles...
Definition: PointLeafLocalData.h:142
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:121
std::map< points::AttributeArray *, PointStringMap > StringArrayMap
Definition: PointLeafLocalData.h:50
bool hasGroup(const std::string &name) const
Return true if a valid group handle exists.
Definition: PointLeafLocalData.h:123
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:212