12 #ifndef OPENVDB_POINTS_POINT_DATA_GRID_HAS_BEEN_INCLUDED 13 #define OPENVDB_POINTS_POINT_DATA_GRID_HAS_BEEN_INCLUDED 15 #include <openvdb/version.h> 30 #include <type_traits> 34 class TestPointDataLeaf;
52 const bool seek = destBuf ==
nullptr;
56 if (destBytes >= maximumBytes) {
58 maximumBytes <<
" bytes in voxel values.")
68 bytes16 =
static_cast<uint16_t
>(meta->pass());
70 is.seekg(
sizeof(uint16_t), std::ios_base::cur);
74 is.read(reinterpret_cast<char*>(&bytes16),
sizeof(uint16_t));
80 is.seekg(destBytes, std::ios_base::cur);
83 is.read(reinterpret_cast<char*>(destBuf), destBytes);
89 is.seekg(
int(bytes16), std::ios_base::cur);
93 std::unique_ptr<char[]> bloscBuffer(
new char[
int(bytes16)]);
94 is.read(bloscBuffer.get(), bytes16);
98 std::memcpy(destBuf, buffer.get(), destBytes);
115 if (srcBytes >= maximumBytes) {
117 maximumBytes <<
" bytes in voxel values.")
120 const char* charBuffer =
reinterpret_cast<const char*
>(srcBuf);
122 size_t compressedBytes;
123 std::unique_ptr<char[]> buffer =
bloscCompress( charBuffer, srcBytes,
124 compressedBytes,
false);
126 if (compressedBytes > 0) {
127 auto bytes16 =
static_cast<uint16_t
>(compressedBytes);
128 os.write(reinterpret_cast<const char*>(&bytes16),
sizeof(uint16_t));
129 os.write(reinterpret_cast<const char*>(buffer.get()), compressedBytes);
132 auto bytes16 =
static_cast<uint16_t
>(maximumBytes);
133 os.write(reinterpret_cast<const char*>(&bytes16),
sizeof(uint16_t));
134 os.write(reinterpret_cast<const char*>(srcBuf), srcBytes);
138 template <
typename T>
144 const size_t srcBytes = srcCount*
sizeof(T);
146 if (srcBytes >= maximumBytes) {
148 maximumBytes <<
" bytes in voxel values.")
151 const char* charBuffer =
reinterpret_cast<const char*
>(srcBuf);
156 if (compressedBytes > 0) {
157 auto bytes16 =
static_cast<uint16_t
>(compressedBytes);
158 os.write(reinterpret_cast<const char*>(&bytes16),
sizeof(uint16_t));
161 auto bytes16 =
static_cast<uint16_t
>(maximumBytes);
162 os.write(reinterpret_cast<const char*>(&bytes16),
sizeof(uint16_t));
187 #ifndef OPENVDB_DISABLE_POINT_DATA_TREE_ALIAS 206 template <
typename Po
intDataTreeT>
207 inline AttributeSet::Descriptor::Ptr
220 template <
typename Po
intDataTreeT>
231 template <
typename Po
intDataTreeT>
233 prefetch(PointDataTreeT& tree,
bool position =
true,
bool otherAttributes =
true);
239 template <
typename T, Index Log2Dim>
244 using Ptr = std::shared_ptr<PointDataLeafNode>;
260 using BaseLeaf::LOG2DIM;
261 using BaseLeaf::TOTAL;
263 using BaseLeaf::NUM_VALUES;
264 using BaseLeaf::NUM_VOXELS;
265 using BaseLeaf::SIZE;
266 using BaseLeaf::LEVEL;
277 , mAttributeSet(new
AttributeSet(*other.mAttributeSet)) { }
283 , mAttributeSet(new
AttributeSet) { assertNonModifiableUnlessZero(value); }
288 const T& value = zeroVal<T>(),
bool active =
false)
292 assertNonModifiableUnlessZero(value);
296 template<
typename OtherValueType>
303 template <
typename ValueType>
306 , mAttributeSet(new
AttributeSet) { assertNonModifiableUnlessZero(value); }
310 template <
typename ValueType>
316 const T& value = zeroVal<T>(),
bool active =
false)
318 , mAttributeSet(new
AttributeSet) { assertNonModifiableUnlessZero(value); }
329 void initializeAttributes(
const Descriptor::Ptr& descriptor,
const Index arrayLength,
332 void clearAttributes(
const bool updateValueMask =
true,
337 bool hasAttribute(
const size_t pos)
const;
340 bool hasAttribute(
const Name& attributeName)
const;
351 const size_t pos,
const Index strideOrTotalSize = 1,
352 const bool constantStride =
true,
361 const Descriptor& expected, Descriptor::Ptr& replacement);
364 void reorderAttributes(
const Descriptor::Ptr& replacement);
377 void replaceAttributeSet(
AttributeSet* attributeSet,
bool allowMismatchingDescriptors =
false);
381 void resetDescriptor(
const Descriptor::Ptr& replacement);
386 void setOffsets(
const std::vector<ValueType>& offsets,
const bool updateValueMask =
true);
390 void validateOffsets()
const;
399 const AttributeArray& constAttributeArray(
const size_t pos)
const;
412 GroupHandle groupHandle(
const AttributeSet::Descriptor::GroupIndex& index)
const;
416 GroupWriteHandle groupWriteHandle(
const AttributeSet::Descriptor::GroupIndex& index);
427 Index64 groupPointCount(
const Name& groupName)
const;
430 void updateValueMask();
439 template<
typename OtherType, Index OtherLog2Dim>
441 return BaseLeaf::hasSameTopology(other);
447 if(BaseLeaf::operator==(other) !=
true)
return false;
448 return (*this->mAttributeSet == *other.mAttributeSet);
454 template<
typename AccessorT>
460 template<
typename AccessorT>
463 template<
typename NodeT,
typename AccessorT>
467 if (!(std::is_same<NodeT,PointDataLeafNode>::value))
return nullptr;
468 return reinterpret_cast<NodeT*
>(
this);
472 template<
typename AccessorT>
479 template<
typename AccessorT>
481 template<
typename AccessorT>
484 template<
typename NodeT,
typename AccessorT>
488 if (!(std::is_same<NodeT,PointDataLeafNode>::value))
return nullptr;
489 return reinterpret_cast<const NodeT*
>(
this);
496 void readTopology(std::istream& is,
bool fromHalf =
false);
497 void writeTopology(std::ostream& os,
bool toHalf =
false)
const;
499 Index buffers()
const;
501 void readBuffers(std::istream& is,
bool fromHalf =
false);
502 void readBuffers(std::istream& is,
const CoordBBox&,
bool fromHalf =
false);
503 void writeBuffers(std::ostream& os,
bool toHalf =
false)
const;
509 void evalActiveBoundingBox(CoordBBox& bbox,
bool visitVoxels =
true)
const;
513 CoordBBox getNodeBoundingBox()
const;
521 OPENVDB_ASSERT(
false &&
"Cannot modify voxel values in a PointDataTree.");
528 if (value != zeroVal<T>()) this->assertNonmodifiable();
531 void setActiveState(
const Coord& xyz,
bool on) { BaseLeaf::setActiveState(xyz, on); }
537 void setValueOff(
const Coord& xyz) { BaseLeaf::setValueOff(xyz); }
543 void setValueOn(
const Coord& xyz) { BaseLeaf::setValueOn(xyz); }
554 template<
typename ModifyOp>
557 template<
typename ModifyOp>
558 void modifyValue(
const Coord&,
const ModifyOp&) { assertNonmodifiable(); }
560 template<
typename ModifyOp>
564 void clip(
const CoordBBox&,
const ValueType& value) { assertNonModifiableUnlessZero(value); }
566 void fill(
const CoordBBox&,
const ValueType&,
bool);
570 template<
typename AccessorT>
573 template<
typename ModifyOp,
typename AccessorT>
575 assertNonmodifiable();
578 template<
typename AccessorT>
581 template<
typename AccessorT>
583 BaseLeaf::setActiveStateAndCache(xyz, on, parent);
587 assertNonModifiableUnlessZero(newBackground);
595 friend class ::TestPointDataLeaf;
603 uint16_t mVoxelBufferSize = 0;
651 const PointDataLeafNode,
const ValueType, ChildAll>;
662 return this->beginIndex<ValueAllCIter, NullFilter>(filter);
667 return this->beginIndex<ValueOnCIter, NullFilter>(filter);
672 return this->beginIndex<ValueOffCIter, NullFilter>(filter);
675 template<
typename IterT,
typename FilterT>
679 template<
typename FilterT>
682 return this->beginIndex<ValueAllCIter, FilterT>(filter);
684 template<
typename FilterT>
687 return this->beginIndex<ValueOnCIter, FilterT>(filter);
689 template<
typename FilterT>
692 return this->beginIndex<ValueOffCIter, FilterT>(filter);
699 template<
typename FilterT>
702 #define VMASK_ this->getValueMask() 749 template<
typename T, Index Log2Dim>
754 std::swap(ptr, mAttributeSet);
758 template<
typename T, Index Log2Dim>
763 if (descriptor->size() != 1 ||
764 descriptor->find(
"P") == AttributeSet::INVALID_POS ||
770 mAttributeSet.reset(
new AttributeSet(descriptor, arrayLength, lock));
773 template<
typename T, Index Log2Dim>
778 mAttributeSet.reset(
new AttributeSet(*mAttributeSet, 0, lock));
786 if (updateValueMask) this->setValuesOff();
789 template<
typename T, Index Log2Dim>
793 return pos < mAttributeSet->
size();
796 template<
typename T, Index Log2Dim>
800 const size_t pos = mAttributeSet->find(attributeName);
801 return pos != AttributeSet::INVALID_POS;
804 template<
typename T, Index Log2Dim>
807 const size_t pos,
const Index strideOrTotalSize,
808 const bool constantStride,
812 return mAttributeSet->appendAttribute(
813 expected, replacement, pos, strideOrTotalSize, constantStride, metadata, lock);
816 template<
typename T, Index Log2Dim>
819 const Descriptor& expected, Descriptor::Ptr& replacement)
821 mAttributeSet->dropAttributes(pos, expected, replacement);
824 template<
typename T, Index Log2Dim>
831 template<
typename T, Index Log2Dim>
835 mAttributeSet->renameAttributes(expected, replacement);
838 template<
typename T, Index Log2Dim>
842 for (
size_t i = 0; i < mAttributeSet->size(); i++) {
848 template<
typename T, Index Log2Dim>
856 if (!allowMismatchingDescriptors && mAttributeSet->descriptor() != attributeSet->
descriptor()) {
860 mAttributeSet.reset(attributeSet);
863 template<
typename T, Index Log2Dim>
870 template<
typename T, Index Log2Dim>
874 if (offsets.size() != LeafNodeType::NUM_VALUES) {
878 for (
Index index = 0; index < offsets.size(); ++index) {
879 setOffsetOnly(index, offsets[index]);
882 if (updateValueMask) this->updateValueMask();
885 template<
typename T, Index Log2Dim>
890 for (
Index index = 1; index < BaseLeaf::SIZE; ++index) {
891 if (this->getValue(index-1) > this->getValue(index)) {
897 for (
size_t attributeIndex = 1; attributeIndex < mAttributeSet->size(); ++attributeIndex ) {
898 if (mAttributeSet->getConst(attributeIndex-1)->size() != mAttributeSet->getConst(attributeIndex)->size()) {
904 if (mAttributeSet->size() > 0 && this->getValue(BaseLeaf::SIZE-1) != mAttributeSet->getConst(0)->size()) {
909 template<
typename T, Index Log2Dim>
914 return *mAttributeSet->get(pos);
917 template<
typename T, Index Log2Dim>
922 return *mAttributeSet->getConst(pos);
925 template<
typename T, Index Log2Dim>
929 return this->attributeArray(pos);
932 template<
typename T, Index Log2Dim>
936 const size_t pos = mAttributeSet->find(attributeName);
938 return *mAttributeSet->get(pos);
941 template<
typename T, Index Log2Dim>
945 const size_t pos = mAttributeSet->find(attributeName);
947 return *mAttributeSet->getConst(pos);
950 template<
typename T, Index Log2Dim>
954 return this->attributeArray(attributeName);
957 template<
typename T, Index Log2Dim>
969 template<
typename T, Index Log2Dim>
973 const AttributeSet::Descriptor::GroupIndex index = this->attributeSet().groupIndex(name);
974 return this->groupHandle(index);
977 template<
typename T, Index Log2Dim>
989 template<
typename T, Index Log2Dim>
993 const AttributeSet::Descriptor::GroupIndex index = this->attributeSet().groupIndex(name);
994 return this->groupWriteHandle(index);
997 template<
typename T, Index Log2Dim>
998 template<
typename ValueIterT,
typename FilterT>
1010 FilterT newFilter(filter);
1011 newFilter.
reset(*
this);
1017 ValueIterT valueIter = IterTraitsT::begin(*
this);
1022 template<
typename T, Index Log2Dim>
1026 const Index index = LeafNodeType::coordToOffset(ijk);
1028 const ValueType end = this->getValue(index);
1033 template<
typename T, Index Log2Dim>
1041 template<
typename T, Index Log2Dim>
1042 template<
typename FilterT>
1047 FilterT newFilter(filter);
1048 newFilter.reset(*
this);
1052 template<
typename T, Index Log2Dim>
1056 return this->getLastValue();
1059 template<
typename T, Index Log2Dim>
1063 if (this->isEmpty())
return 0;
1064 else if (this->isDense())
return this->
pointCount();
1068 template<
typename T, Index Log2Dim>
1072 if (this->isEmpty())
return this->
pointCount();
1073 else if (this->isDense())
return 0;
1074 return iterCount(this->beginIndexOff());
1077 template<
typename T, Index Log2Dim>
1081 if (!this->attributeSet().descriptor().hasGroup(groupName)) {
1084 GroupFilter filter(groupName, this->attributeSet());
1088 return iterCount(this->beginIndexAll(filter));
1092 template<
typename T, Index Log2Dim>
1097 for (
Index n = 0; n < LeafNodeType::NUM_VALUES; n++) {
1098 end = this->getValue(n);
1099 this->setValueMask(n, (end - start) > 0);
1104 template<
typename T, Index Log2Dim>
1108 this->buffer().
setValue(offset, val);
1109 this->setValueMaskOn(offset);
1112 template<
typename T, Index Log2Dim>
1116 this->buffer().
setValue(offset, val);
1119 template<
typename T, Index Log2Dim>
1123 BaseLeaf::readTopology(is, fromHalf);
1126 template<
typename T, Index Log2Dim>
1130 BaseLeaf::writeTopology(os, toHalf);
1133 template<
typename T, Index Log2Dim>
1140 mAttributeSet->size() +
1141 mAttributeSet->size() +
1145 template<
typename T, Index Log2Dim>
1149 this->readBuffers(is, CoordBBox::inf(), fromHalf);
1152 template<
typename T, Index Log2Dim>
1161 std::string key(
"paged:" + std::to_string(index));
1162 auto it = auxData.find(key);
1163 if (it != auxData.end()) {
1171 std::string key(
"paged:" + std::to_string(index));
1172 auto it = auxData.find(key);
1173 if (it != auxData.end()) {
1179 return *pagedStream;
1185 std::string matchingKey(
"hasMatchingDescriptor");
1186 auto itMatching = auxData.find(matchingKey);
1187 return itMatching != auxData.end();
1192 std::string matchingKey(
"hasMatchingDescriptor");
1193 std::string descriptorKey(
"descriptorPtr");
1194 auto itMatching = auxData.find(matchingKey);
1195 auto itDescriptor = auxData.find(descriptorKey);
1196 if (itMatching != auxData.end()) (const_cast<io::StreamMetadata::AuxDataMap&>(auxData)).erase(itMatching);
1197 if (itDescriptor != auxData.end()) (const_cast<io::StreamMetadata::AuxDataMap&>(auxData)).erase(itDescriptor);
1201 const Descriptor::Ptr descriptor)
1203 std::string descriptorKey(
"descriptorPtr");
1204 std::string matchingKey(
"hasMatchingDescriptor");
1205 auto itMatching = auxData.find(matchingKey);
1206 if (itMatching == auxData.end()) {
1215 std::string descriptorKey(
"descriptorPtr");
1216 auto itDescriptor = auxData.find(descriptorKey);
1218 const Descriptor::Ptr descriptor = std::any_cast<AttributeSet::Descriptor::Ptr>(itDescriptor->second);
1229 const Index pass(static_cast<uint16_t>(meta->pass()));
1230 const Index maximumPass(static_cast<uint16_t>(meta->pass() >> 16));
1232 const Index attributes = (maximumPass - 4) / 2;
1236 is.read(reinterpret_cast<char*>(&mVoxelBufferSize),
sizeof(uint16_t));
1237 Local::clearMatchingDescriptor(meta->auxData());
1239 else if (pass == 1) {
1241 if (Local::hasMatchingDescriptor(meta->auxData())) {
1242 AttributeSet::Descriptor::Ptr descriptor = Local::retrieveMatchingDescriptor(meta->auxData());
1243 mAttributeSet->resetDescriptor(descriptor,
true);
1247 is.read(reinterpret_cast<char*>(&header),
sizeof(uint8_t));
1248 mAttributeSet->readDescriptor(is);
1249 if (header & uint8_t(1)) {
1251 Local::insertDescriptor(meta->auxData(), descriptor);
1255 if (header & uint8_t(2)) {
1256 uint64_t bytesToSkip;
1257 is.read(reinterpret_cast<char*>(&bytesToSkip),
sizeof(uint64_t));
1258 if (bytesToSkip > uint64_t(0)) {
1260 if (metadata && metadata->seekable()) {
1261 is.seekg(bytesToSkip, std::ios_base::cur);
1264 std::vector<uint8_t> tempData(bytesToSkip);
1265 is.read(reinterpret_cast<char*>(&tempData[0]), bytesToSkip);
1270 if (header > uint8_t(3)) {
1274 mAttributeSet->readMetadata(is);
1276 else if (pass < (attributes + 2)) {
1278 const size_t attributeIndex = pass - 2;
1280 mAttributeSet->get(attributeIndex) :
nullptr;
1283 Local::getOrInsertPagedStream(meta->auxData(),
static_cast<Index>(attributeIndex));
1289 else if (pass == attributes + 2) {
1292 const Index passValue(meta->pass());
1296 nonConstMeta.
setPass(mVoxelBufferSize);
1299 BaseLeaf::readBuffers(is, fromHalf);
1302 nonConstMeta.setPass(passValue);
1304 else if (pass < (attributes*2 + 3)) {
1306 const Index attributeIndex = pass - attributes - 3;
1308 mAttributeSet->get(attributeIndex) :
nullptr;
1311 Local::getOrInsertPagedStream(meta->auxData(), attributeIndex);
1317 if (pass > attributes + 3) {
1318 Local::destroyPagedStream(meta->auxData(), attributeIndex-1);
1321 else if (pass < buffers()) {
1323 const Index attributeIndex = pass - attributes - 4;
1324 Local::destroyPagedStream(meta->auxData(), attributeIndex);
1328 template<
typename T, Index Log2Dim>
1337 std::string key(
"paged:" + std::to_string(index));
1338 auto it = auxData.find(key);
1339 if (it != auxData.end()) {
1349 std::string key(
"paged:" + std::to_string(index));
1350 auto it = auxData.find(key);
1351 if (it != auxData.end()) {
1357 return *pagedStream;
1362 const Descriptor::Ptr descriptor)
1364 std::string descriptorKey(
"descriptorPtr");
1365 std::string matchingKey(
"hasMatchingDescriptor");
1366 auto itMatching = auxData.find(matchingKey);
1367 auto itDescriptor = auxData.find(descriptorKey);
1368 if (itMatching == auxData.end()) {
1376 bool matching = std::any_cast<
bool>(itMatching->second);
1377 if (!matching)
return;
1381 const Descriptor::Ptr existingDescriptor = std::any_cast<AttributeSet::Descriptor::Ptr>(itDescriptor->second);
1382 if (*existingDescriptor != *descriptor) {
1390 std::string matchingKey(
"hasMatchingDescriptor");
1391 auto itMatching = auxData.find(matchingKey);
1393 if (itMatching == auxData.end())
return false;
1395 if (!std::any_cast<bool>(itMatching->second))
return false;
1401 std::string descriptorKey(
"descriptorPtr");
1402 auto itDescriptor = auxData.find(descriptorKey);
1404 if (itDescriptor == auxData.end())
return nullptr;
1406 const Descriptor::Ptr descriptor = std::any_cast<AttributeSet::Descriptor::Ptr>(itDescriptor->second);
1413 std::string matchingKey(
"hasMatchingDescriptor");
1414 std::string descriptorKey(
"descriptorPtr");
1415 auto itMatching = auxData.find(matchingKey);
1416 auto itDescriptor = auxData.find(descriptorKey);
1417 if (itMatching != auxData.end()) (const_cast<io::StreamMetadata::AuxDataMap&>(auxData)).erase(itMatching);
1418 if (itDescriptor != auxData.end()) (const_cast<io::StreamMetadata::AuxDataMap&>(auxData)).erase(itDescriptor);
1428 const Index pass(static_cast<uint16_t>(meta->pass()));
1433 if (meta->countingPasses()) {
1434 const Index requiredPasses = this->buffers();
1435 if (requiredPasses > pass) {
1436 meta->setPass(requiredPasses);
1441 const Index maximumPass(static_cast<uint16_t>(meta->pass() >> 16));
1442 const Index attributes = (maximumPass - 4) / 2;
1448 Local::insertDescriptor(meta->auxData(), mAttributeSet->descriptorPtr());
1450 else if (pass == 1) {
1452 bool matchingDescriptor = Local::hasMatchingDescriptor(meta->auxData());
1453 if (matchingDescriptor) {
1454 AttributeSet::Descriptor::Ptr descriptor = Local::retrieveMatchingDescriptor(meta->auxData());
1458 os.write(reinterpret_cast<const char*>(&header),
sizeof(uint8_t));
1459 mAttributeSet->writeDescriptor(os,
false);
1465 os.write(reinterpret_cast<const char*>(&header),
sizeof(uint8_t));
1466 mAttributeSet->writeDescriptor(os,
false);
1468 mAttributeSet->writeMetadata(os,
false,
true);
1470 else if (pass < attributes + 2) {
1472 const Index attributeIndex = pass - 2;
1475 Local::destroyPagedStream(meta->auxData(), attributeIndex-1);
1478 mAttributeSet->getConst(attributeIndex) :
nullptr;
1481 Local::getOrInsertPagedStream(meta->auxData(), attributeIndex);
1484 array->writePagedBuffers(pagedStream,
false);
1487 else if (pass == attributes + 2) {
1488 const Index attributeIndex = pass - 3;
1489 Local::destroyPagedStream(meta->auxData(), attributeIndex);
1491 BaseLeaf::writeBuffers(os, toHalf);
1493 else if (pass < (attributes*2 + 3)) {
1495 const Index attributeIndex = pass - attributes - 3;
1497 if (pass > attributes + 2) {
1498 Local::destroyPagedStream(meta->auxData(), attributeIndex-1);
1501 mAttributeSet->getConst(attributeIndex) :
nullptr;
1504 Local::getOrInsertPagedStream(meta->auxData(), attributeIndex);
1507 array->writePagedBuffers(pagedStream,
false);
1510 else if (pass < buffers()) {
1511 Local::clearMatchingDescriptor(meta->auxData());
1513 const Index attributeIndex = pass - attributes - 4;
1514 Local::destroyPagedStream(meta->auxData(), attributeIndex);
1518 template<
typename T, Index Log2Dim>
1525 template<
typename T, Index Log2Dim>
1532 template<
typename T, Index Log2Dim>
1536 BaseLeaf::evalActiveBoundingBox(bbox, visitVoxels);
1539 template<
typename T, Index Log2Dim>
1543 return BaseLeaf::getNodeBoundingBox();
1546 template<
typename T, Index Log2Dim>
1552 this->assertNonModifiableUnlessZero(value);
1556 for (
Int32 x = bbox.min().x(); x <= bbox.max().x(); ++x) {
1557 const Index offsetX = (x & (DIM-1u)) << 2*Log2Dim;
1558 for (
Int32 y = bbox.min().y(); y <= bbox.max().y(); ++y) {
1559 const Index offsetXY = offsetX + ((y & (DIM-1u)) << Log2Dim);
1560 for (
Int32 z = bbox.min().z(); z <= bbox.max().z(); ++z) {
1561 const Index offset = offsetXY + (z & (DIM-1u));
1562 this->setValueMask(offset, active);
1568 template<
typename T, Index Log2Dim>
1572 this->assertNonModifiableUnlessZero(value);
1576 if (active) this->setValuesOn();
1577 else this->setValuesOff();
1584 template <
typename Po
intDataTreeT>
1585 inline AttributeSet::Descriptor::Ptr
1588 auto leafIter = tree.beginLeaf();
1589 if (!leafIter)
return nullptr;
1591 const AttributeSet::Descriptor& descriptor = leafIter->attributeSet().descriptor();
1592 auto newDescriptor = std::make_shared<AttributeSet::Descriptor>(descriptor);
1593 for (; leafIter; ++leafIter) {
1594 leafIter->resetDescriptor(newDescriptor);
1597 return newDescriptor;
1601 template <
typename Po
intDataTreeT>
1605 auto leafIter = tree.beginLeaf();
1606 for (; leafIter; ++leafIter) {
1607 for (
size_t i = 0; i < leafIter->attributeSet().size(); i++) {
1608 leafIter->attributeArray(i).setStreaming(on);
1614 template <
typename Po
intDataTreeT>
1616 prefetch(PointDataTreeT& tree,
bool position,
bool otherAttributes)
1621 auto leaf = tree.cbeginLeaf();
1624 const auto& attributeSet = leaf->attributeSet();
1628 for ( ; leaf; ++leaf) {
1629 leaf->buffer().data();
1634 size_t positionIndex = attributeSet.find(
"P");
1636 if (position && positionIndex != AttributeSet::INVALID_POS) {
1637 for (leaf = tree.cbeginLeaf(); leaf; ++leaf) {
1639 leaf->constAttributeArray(positionIndex).loadData();
1645 if (otherAttributes) {
1646 const size_t attributes = attributeSet.size();
1647 for (
size_t attributeIndex = 0; attributeIndex < attributes; attributeIndex++) {
1648 if (attributeIndex == positionIndex)
continue;
1649 for (leaf = tree.cbeginLeaf(); leaf; ++leaf) {
1651 leaf->constAttributeArray(attributeIndex).loadData();
1658 namespace internal {
1675 template<
typename HeadT,
int HeadLevel>
1680 using Type =
typename SubtreeT::template Append<RootNodeT>;
1685 template <
typename ChildT, Index Log2Dim,
int HeadLevel>
1690 using Type =
typename SubtreeT::template Append<InternalNodeT>;
1695 template <
typename ChildT, Index Log2Dim>
1709 template <
typename TreeType>
1728 template<Index Dim1,
typename T2>
1729 struct SameLeafConfig<Dim1, points::PointDataLeafNode<T2, Dim1>> {
static const bool value =
true; };
1735 #endif // OPENVDB_POINTS_POINT_DATA_GRID_HAS_BEEN_INCLUDED void writeCompressedValues(std::ostream &os, PointDataIndex32 *srcBuf, Index srcCount, const util::NodeMask< 3 > &, const util::NodeMask< 3 > &, bool)
openvdb::io::writeCompressedValues specialized on PointDataIndex32 arrays to ignore the value mask...
Definition: PointDataGrid.h:107
bool hasSameTopology(const PointDataLeafNode< OtherType, OtherLog2Dim > *other) const
Return true if the given node (which may have a different ValueType than this node) has the same acti...
Definition: PointDataGrid.h:440
ValueOffIter endValueOff()
Definition: PointDataGrid.h:718
typename BaseLeaf::template ChildIter< MaskOnIterator, const PointDataLeafNode, ChildOn > ChildOnCIter
Definition: PointDataGrid.h:643
Templated block class to hold specific data types and a fixed number of values determined by Log2Dim...
Definition: LeafNode.h:38
Base class for iterators over internal and leaf nodes.
Definition: Iterator.h:29
typename SubtreeT::template Append< InternalNodeT > Type
Definition: PointDataGrid.h:1690
ChildOffIter beginChildOff()
Definition: PointDataGrid.h:728
Definition: LeafNode.h:213
Definition: AttributeGroup.h:102
IndexOnIter beginIndexOn() const
Definition: PointDataGrid.h:664
static pnanovdb_uint32_t allocate(pnanovdb_uint32_t *poffset, pnanovdb_uint32_t size, pnanovdb_uint32_t alignment)
Definition: pnanovdb_validate_strides.h:20
void setValueOn(Index, const ValueType &)
Definition: PointDataGrid.h:547
Base class for storing attribute data.
Definition: AttributeArray.h:93
Attribute Group access and filtering for iteration.
void reorderAttributes(const Descriptor::Ptr &replacement)
Reorder attribute set.
Definition: PointDataGrid.h:826
int32_t Int32
Definition: Types.h:56
ValueAllCIter cbeginValueAll() const
Definition: PointDataGrid.h:709
T ValueType
Definition: PointDataGrid.h:246
ValueOnCIter cbeginValueOn() const
Definition: PointDataGrid.h:703
#define OPENVDB_THROW(exception, message)
Definition: Exceptions.h:74
ValueOffIter beginValueOff()
Definition: PointDataGrid.h:708
uint64_t Index64
Definition: Types.h:53
PointDataLeafNode(PartialCreate, const Coord &coords, const T &value=zeroVal< T >(), bool active=false)
Definition: PointDataGrid.h:315
void renameAttributes(PointDataTreeT &tree, const std::vector< Name > &oldNames, const std::vector< Name > &newNames)
Rename attributes in a VDB tree.
Definition: PointAttributeImpl.h:326
typename BaseLeaf::template ValueIter< MaskOffIterator, PointDataLeafNode, const ValueType, ValueOff > ValueOffIter
Definition: PointDataGrid.h:633
Definition: AttributeArray.h:119
void setValueOff(Index, const ValueType &)
Definition: PointDataGrid.h:541
A Paging wrapper to std::istream that is responsible for reading from a given input stream and creati...
Definition: StreamCompression.h:207
Definition: Exceptions.h:57
OPENVDB_API size_t bloscCompressedSize(const char *buffer, const size_t uncompressedBytes)
Convenience wrapper to retrieve the compressed size of buffer when compressed.
typename BaseLeaf::ValueOn ValueOn
Definition: PointDataGrid.h:597
Space-partitioning acceleration structure for points. Partitions the points into voxels to accelerate...
void compactAttributes(PointDataTreeT &tree)
Compact attributes in a VDB tree (if possible).
Definition: PointAttributeImpl.h:385
void initialize()
Global registration of point data-related types.
#define VMASK_
Definition: PointDataGrid.h:702
AttributeSet::Descriptor::Ptr makeDescriptorUnique(PointDataTreeT &tree)
Deep copy the descriptor across all leaf nodes.
Definition: PointDataGrid.h:1586
ValueOffCIter cbeginValueOff() const
Definition: PointDataGrid.h:706
Similiar to ValueConverter, but allows for tree configuration conversion to a PointDataTree. ValueConverter<PointDataIndex32> cannot be used as a PointDataLeafNode is not a specialization of LeafNode.
Definition: PointDataGrid.h:1710
A forward iterator over array indices with filtering IteratorT can be either IndexIter or ValueIndexI...
Definition: IndexIterator.h:140
Definition: LeafNode.h:212
ValueOffCIter cendValueOff() const
Definition: PointDataGrid.h:716
typename BaseLeaf::template ChildIter< MaskOffIterator, PointDataLeafNode, ChildOff > ChildOffIter
Definition: PointDataGrid.h:645
std::pair< ValueType, ValueType > ValueTypePair
Definition: PointDataGrid.h:247
void setValueOnly(Index, const ValueType &)
Definition: PointDataGrid.h:535
PointDataLeafNode(const PointDataLeafNode &other)
Construct using deep copy of other PointDataLeafNode.
Definition: PointDataGrid.h:275
typename PointDataNodeChain< ChildT, HeadLevel-1 >::Type SubtreeT
Definition: PointDataGrid.h:1688
Attribute Array storage templated on type and compression codec.
PointDataLeafNode * probeLeaf(const Coord &)
Return a pointer to this node.
Definition: PointDataGrid.h:471
Definition: Exceptions.h:60
Bit mask for the internal and leaf nodes of VDB. This is a 64-bit implementation. ...
Definition: NodeMasks.h:307
void modifyValueAndActiveState(const Coord &, const ModifyOp &)
Definition: PointDataGrid.h:561
void resetDescriptor(const Descriptor::Ptr &replacement)
Replace the descriptor with a new one The new Descriptor must exactly match the old one...
Definition: PointDataGrid.h:865
std::unique_ptr< AttributeSet > UniquePtr
Definition: AttributeSet.h:46
void setValueOn(Index offset)
Definition: PointDataGrid.h:544
typename PointDataNodeChain< typename HeadT::ChildNodeType, HeadLevel-1 >::Type SubtreeT
Definition: PointDataGrid.h:1678
AttributeSet::Descriptor Descriptor
Definition: PointDataGrid.h:250
typename BaseLeaf::template ValueIter< MaskOnIterator, const PointDataLeafNode, const ValueType, ValueOn > ValueOnCIter
Definition: PointDataGrid.h:631
Descriptor & descriptor()
Return a reference to this attribute set's descriptor, which might be shared with other sets...
Definition: AttributeSet.h:103
const NodeT * probeConstNodeAndCache(const Coord &, AccessorT &) const
Return a const pointer to this node.
Definition: PointDataGrid.h:485
const AttributeSet & attributeSet() const
Retrieve the attribute set.
Definition: PointDataGrid.h:323
void setValuesOff()
Definition: PointDataGrid.h:552
Index32 Index
Definition: Types.h:54
A list of types (not necessarily unique)
Definition: TypeList.h:577
void dropAttributes(PointDataTreeT &tree, const std::vector< size_t > &indices)
Drops attributes from the VDB tree.
Definition: PointAttributeImpl.h:238
void appendAttribute(PointDataTreeT &tree, const Name &name, const NamePair &type, const Index strideOrTotalSize=1, const bool constantStride=true, const Metadata *defaultValue=nullptr, const bool hidden=false, const bool transient=false)
Appends a new attribute to the VDB tree (this method does not require a templated AttributeType) ...
Definition: PointAttributeImpl.h:103
Definition: NodeMasks.h:239
std::shared_ptr< PointDataLeafNode > Ptr
Definition: PointDataGrid.h:244
typename BaseLeaf::ValueOff ValueOff
Definition: PointDataGrid.h:598
void setStreamingMode(PointDataTreeT &tree, bool on=true)
Toggle the streaming mode on all attributes in the tree to collapse the attributes after deconstructi...
Definition: PointDataGrid.h:1603
ChildOnIter beginChildOn()
Definition: PointDataGrid.h:725
Definition: LeafNode.h:213
void uninitialize()
Global deregistration of point data-related types.
ValueAllIter endValueAll()
Definition: PointDataGrid.h:721
Index filtering on group membership.
Definition: AttributeGroup.h:135
void modifyValue(const Coord &, const ModifyOp &)
Definition: PointDataGrid.h:558
bool isGroup(const AttributeArray &array)
Definition: AttributeGroup.h:64
void flush()
Manually flushes the current page to disk if non-zero.
Recursive node chain which generates a openvdb::TypeList value converted types of nodes to PointDataG...
Definition: PointDataGrid.h:1676
void assertNonModifiableUnlessZero(const ValueType &value)
Definition: PointDataGrid.h:527
A no-op filter that can be used when iterating over all indices.
Definition: IndexIterator.h:51
Definition: IndexIterator.h:44
IndexIter< ValueOffCIter, FilterT > beginIndexOff(const FilterT &filter) const
Definition: PointDataGrid.h:690
void reset(Index32 begin, Index32 end)
Reset the begining and end of the iterator.
Definition: IndexIterator.h:253
ValueAllCIter cendValueAll() const
Definition: PointDataGrid.h:719
ChildOnIter endChildOn()
Definition: PointDataGrid.h:735
Definition: Exceptions.h:65
IndexIter< ValueAllCIter, FilterT > beginIndexAll(const FilterT &filter) const
Filtered leaf index iterator.
Definition: PointDataGrid.h:680
PointDataLeafNode * touchLeafAndCache(const Coord &, AccessorT &)
Return a pointer to this node.
Definition: PointDataGrid.h:461
static Index size()
Return the total number of voxels represented by this LeafNode.
Definition: LeafNode.h:122
Index64 iterCount(const IterT &iter)
Count up the number of times the iterator can iterate.
Definition: IndexIterator.h:315
ChildAllCIter beginChildAll() const
Definition: PointDataGrid.h:730
Definition: IndexIterator.h:43
Convenience wrappers to using Blosc and reading and writing of Paged data.
Definition: LeafNode.h:212
Definition: TreeIterator.h:60
void fill(const CoordBBox &, const ValueType &, bool)
Definition: PointDataGrid.h:1548
ChildOnCIter cbeginChildOn() const
Definition: PointDataGrid.h:723
std::shared_ptr< PagedOutputStream > Ptr
Definition: StreamCompression.h:247
void setActiveState(const Coord &xyz, bool on)
Definition: PointDataGrid.h:531
ValueOffCIter endValueOff() const
Definition: PointDataGrid.h:717
void modifyValue(Index, const ModifyOp &)
Definition: PointDataGrid.h:555
Definition: NodeMasks.h:208
ValueAllIter beginValueAll()
Definition: PointDataGrid.h:711
NodeT * probeNodeAndCache(const Coord &, AccessorT &)
Return a pointer to this node.
Definition: PointDataGrid.h:464
typename NodeMaskType::OnIterator MaskOnIterator
Definition: PointDataGrid.h:610
ValueOnIter endValueOn()
Definition: PointDataGrid.h:715
void setInputStream(std::istream &is)
Definition: StreamCompression.h:222
#define OPENVDB_ASSERT(X)
Definition: Assert.h:41
Definition: PointDataGrid.h:182
PointDataLeafNode * touchLeaf(const Coord &)
Return a pointer to this node.
Definition: PointDataGrid.h:459
Typed class for storing attribute data.
Definition: AttributeArray.h:511
Leaf nodes that require multi-pass I/O must inherit from this struct.
Definition: io.h:124
ChildOnCIter beginChildOn() const
Definition: PointDataGrid.h:724
Index64 pointCount(const PointDataTreeT &tree, const FilterT &filter=NullFilter(), const bool inCoreOnly=false, const bool threaded=true)
Count the total number of points in a PointDataTree.
Definition: PointCountImpl.h:18
const char * typeNameAsString< Vec3f >()
Definition: Types.h:606
bool operator!=(const PointDataLeafNode &other) const
Definition: PointDataGrid.h:451
Definition: AttributeGroup.h:73
IndexIter< ValueOnCIter, FilterT > beginIndexOn(const FilterT &filter) const
Definition: PointDataGrid.h:685
void setActiveState(Index offset, bool on)
Definition: PointDataGrid.h:532
void setValueOn(const Coord &, const ValueType &)
Definition: PointDataGrid.h:546
std::vector< ValueType > IndexArray
Definition: PointDataGrid.h:248
void clip(const CoordBBox &, const ValueType &value)
Definition: PointDataGrid.h:564
const PointDataLeafNode * probeLeafAndCache(const Coord &, AccessorT &) const
Return a const pointer to this node.
Definition: PointDataGrid.h:482
ValueOnCIter cendValueOn() const
Definition: PointDataGrid.h:713
typename BaseLeaf::template DenseIter< const PointDataLeafNode, const ValueType, ChildAll > ChildAllCIter
Definition: PointDataGrid.h:651
ChildOnCIter cendChildOn() const
Definition: PointDataGrid.h:733
Definition: LeafNode.h:213
Integer wrapper, required to distinguish PointIndexGrid and PointDataGrid from Int32Grid and Int64Gri...
Definition: Types.h:156
bool operator==(const PointDataLeafNode &other) const
Definition: PointDataGrid.h:446
void setValue(const Coord &, const ValueType &)
Definition: PointDataGrid.h:549
A Paging wrapper to std::ostream that is responsible for writing from a given output stream at interv...
Definition: StreamCompression.h:244
Definition: Exceptions.h:13
typename internal::PointDataNodeChain< RootNodeT, RootNodeT::LEVEL >::Type NodeChainT
Definition: PointDataGrid.h:1712
virtual bool compact()=0
Compact the existing array to become uniform if all values are identical.
IndexAllIter beginIndexAll() const
Leaf index iterator.
Definition: PointDataGrid.h:659
PointDataLeafNode(const tree::LeafNode< ValueType, Log2Dim > &other, const T &, const T &, TopologyCopy)
Definition: PointDataGrid.h:311
OPENVDB_API SharedPtr< StreamMetadata > getStreamMetadataPtr(std::ios_base &)
Return a shared pointer to an object that stores metadata (file format, compression scheme...
Definition: Exceptions.h:58
void setValueOnly(const Coord &, const ValueType &)
Definition: PointDataGrid.h:534
typename BaseLeaf::template ChildIter< MaskOnIterator, PointDataLeafNode, ChildOn > ChildOnIter
Definition: PointDataGrid.h:641
void writeCompressedValuesSize(std::ostream &os, const T *srcBuf, Index srcCount)
Definition: PointDataGrid.h:140
const PointDataLeafNode * probeLeaf(const Coord &) const
Return a const pointer to this node.
Definition: PointDataGrid.h:483
void setSizeOnly(bool sizeOnly)
Size-only mode tags the stream as only writing size data.
Definition: StreamCompression.h:254
typename BaseLeaf::ChildOff ChildOff
Definition: PointDataGrid.h:607
ValueOnCIter beginValueOn() const
Definition: PointDataGrid.h:704
ChildOffCIter beginChildOff() const
Definition: PointDataGrid.h:727
PointIndex< Index32, 1 > PointDataIndex32
Definition: Types.h:181
Definition: LeafNode.h:216
ChildOffCIter cendChildOff() const
Definition: PointDataGrid.h:736
Tag dispatch class that distinguishes constructors during file input.
Definition: Types.h:760
void prefetch(PointDataTreeT &tree, bool position=true, bool otherAttributes=true)
Sequentially pre-fetch all delayed-load voxel and attribute data from disk in order to accelerate sub...
Definition: PointDataGrid.h:1616
PointDataLeafNode * probeLeafAndCache(const Coord &, AccessorT &)
Return a pointer to this node.
Definition: PointDataGrid.h:473
void assertNonmodifiable()
Definition: PointDataGrid.h:520
Definition: RootNode.h:39
typename SubtreeT::template Append< RootNodeT > Type
Definition: PointDataGrid.h:1680
std::shared_ptr< Descriptor > DescriptorPtr
Definition: AttributeSet.h:50
IndexOffIter beginIndexOff() const
Definition: PointDataGrid.h:669
Definition: InternalNode.h:34
ChildOnCIter endChildOn() const
Definition: PointDataGrid.h:734
ValueOnCIter endValueOn() const
Definition: PointDataGrid.h:714
Leaf nodes have no children, so their child iterators have no get/set accessors.
Definition: LeafNode.h:280
ValueOffCIter beginValueOff() const
Definition: PointDataGrid.h:707
ValueOnIter beginValueOn()
Definition: PointDataGrid.h:705
typename BaseLeaf::template ValueIter< MaskDenseIterator, const PointDataLeafNode, const ValueType, ValueAll > ValueAllCIter
Definition: PointDataGrid.h:639
ValueAllCIter endValueAll() const
Definition: PointDataGrid.h:720
PointDataLeafNode(const tree::LeafNode< ValueType, Log2Dim > &other, const T &value, TopologyCopy)
Definition: PointDataGrid.h:304
typename BaseLeaf::ChildOn ChildOn
Definition: PointDataGrid.h:606
void setValueOff(const Coord &, const ValueType &)
Definition: PointDataGrid.h:540
ValueAllCIter beginValueAll() const
Definition: PointDataGrid.h:710
const PointDataLeafNode * probeConstLeafAndCache(const Coord &, AccessorT &) const
Return a const pointer to this node.
Definition: PointDataGrid.h:480
constexpr T zeroVal()
Return the value of type T that corresponds to zero.
Definition: Math.h:70
typename NodeMaskType::OffIterator MaskOffIterator
Definition: PointDataGrid.h:611
void setActiveStateAndCache(const Coord &xyz, bool on, AccessorT &parent)
Definition: PointDataGrid.h:582
void setValueOff(const Coord &xyz)
Definition: PointDataGrid.h:537
Definition: LeafNode.h:289
void signedFloodFill(const ValueType &)
Definition: PointDataGrid.h:590
typename BaseLeaf::template ValueIter< MaskOnIterator, PointDataLeafNode, const ValueType, ValueOn > ValueOnIter
Definition: PointDataGrid.h:629
void fill(const ValueType &value)
Definition: PointDataGrid.h:567
static index::State state()
Definition: AttributeGroup.h:146
ChildOffCIter cbeginChildOff() const
Definition: PointDataGrid.h:726
ChildAllCIter endChildAll() const
Definition: PointDataGrid.h:740
A forward iterator over array indices in a single voxel.
Definition: IndexIterator.h:65
void negate()
Definition: PointDataGrid.h:593
void addLeafAndCache(PointDataLeafNode *, AccessorT &)
Definition: PointDataGrid.h:455
typename BaseLeaf::template ChildIter< MaskOffIterator, const PointDataLeafNode, ChildOff > ChildOffCIter
Definition: PointDataGrid.h:647
void resetBackground(const ValueType &, const ValueType &newBackground)
Definition: PointDataGrid.h:586
std::string Name
Definition: Name.h:19
Attribute array storage for string data using Descriptor Metadata.
void setValuesOn()
Definition: PointDataGrid.h:551
void signedFloodFill(const ValueType &, const ValueType &)
Definition: PointDataGrid.h:591
std::shared_ptr< AttributeArray > Ptr
Definition: AttributeArray.h:126
Definition: NodeMasks.h:270
virtual Index size() const =0
void setOutputStream(std::ostream &os)
Definition: StreamCompression.h:259
ChildAllCIter cbeginChildAll() const
Definition: PointDataGrid.h:729
typename TreeType::RootNodeType RootNodeT
Definition: PointDataGrid.h:1711
void modifyValueAndActiveStateAndCache(const Coord &, const ModifyOp &, AccessorT &)
Definition: PointDataGrid.h:574
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition: version.h.in:121
PointDataLeafNode(const Coord &coords, const T &value=zeroVal< T >(), bool active=false)
Construct using supplied origin, value and active status.
Definition: PointDataGrid.h:281
OPENVDB_API void bloscCompress(char *compressedBuffer, size_t &compressedBytes, const size_t bufferBytes, const char *uncompressedBuffer, const size_t uncompressedBytes)
Compress into the supplied buffer.
Tag dispatch class that distinguishes topology copy constructors from deep copy constructors.
Definition: Types.h:754
Ordered collection of uniquely-named attribute arrays.
Definition: AttributeSet.h:39
Definition: LeafNode.h:212
PointDataLeafNode()
Default constructor.
Definition: PointDataGrid.h:269
void setValueOn(const Coord &xyz)
Definition: PointDataGrid.h:543
PointDataLeafNode(const tools::PointIndexLeafNode< OtherValueType, Log2Dim > &other)
Definition: PointDataGrid.h:297
typename BaseLeaf::template ValueIter< MaskDenseIterator, PointDataLeafNode, const ValueType, ValueAll > ValueAllIter
Definition: PointDataGrid.h:637
PointDataLeafNode(const PointDataLeafNode &other, const Coord &coords, const T &value=zeroVal< T >(), bool active=false)
Definition: PointDataGrid.h:287
Definition: PointDataGrid.h:171
void setValueOff(Index offset)
Definition: PointDataGrid.h:538
Set of Attribute Arrays which tracks metadata about each array.
Container class that associates a tree with a transform and metadata.
Definition: Grid.h:28
void readCompressedValues(std::istream &is, PointDataIndex32 *destBuf, Index destCount, const util::NodeMask< 3 > &, bool)
openvdb::io::readCompressedValues specialized on PointDataIndex32 arrays to ignore the value mask...
Definition: PointDataGrid.h:47
void addLeaf(PointDataLeafNode *)
Definition: PointDataGrid.h:453
void setSizeOnly(bool sizeOnly)
Size-only mode tags the stream as only reading size data.
Definition: StreamCompression.h:217
ChildOffIter endChildOff()
Definition: PointDataGrid.h:738
ChildOffCIter endChildOff() const
Definition: PointDataGrid.h:737
virtual void readPagedBuffers(compression::PagedInputStream &)=0
Read attribute buffers from a paged stream.
void setValueOffAndCache(const Coord &, const ValueType &, AccessorT &)
Definition: PointDataGrid.h:579
typename BaseLeaf::template DenseIter< PointDataLeafNode, ValueType, ChildAll > ChildAllIter
Definition: PointDataGrid.h:649
ChildAllIter beginChildAll()
Definition: PointDataGrid.h:731
typename NodeMaskType::DenseIterator MaskDenseIterator
Definition: PointDataGrid.h:612
void setValueOnlyAndCache(const Coord &, const ValueType &, AccessorT &)
Definition: PointDataGrid.h:571
typename BaseLeaf::ChildAll ChildAll
Definition: PointDataGrid.h:608
ChildAllIter endChildAll()
Definition: PointDataGrid.h:741
const PointDataLeafNode * probeConstLeaf(const Coord &) const
Return a const pointer to this node.
Definition: PointDataGrid.h:478
OPENVDB_API void bloscDecompress(char *uncompressedBuffer, const size_t expectedBytes, const size_t bufferBytes, const char *compressedBuffer)
Decompress into the supplied buffer. Will throw if decompression fails or uncompressed buffer has ins...
#define OPENVDB_USE_VERSION_NAMESPACE
Definition: version.h.in:218
ChildAllCIter cendChildAll() const
Definition: PointDataGrid.h:739
std::shared_ptr< PagedInputStream > Ptr
Definition: StreamCompression.h:210
typename BaseLeaf::template ValueIter< MaskOffIterator, const PointDataLeafNode, const ValueType, ValueOff > ValueOffCIter
Definition: PointDataGrid.h:635
typename BaseLeaf::ValueAll ValueAll
Definition: PointDataGrid.h:599