9#ifndef OPENVDB_POINTS_RASTERIZE_ELLIPSOIDS_SDF_IMPL_HAS_BEEN_INCLUDED
10#define OPENVDB_POINTS_RASTERIZE_ELLIPSOIDS_SDF_IMPL_HAS_BEEN_INCLUDED
16#define OPENVDB_ELLIPSOID_KERNEL_MODE 2
30 for (
int i = 0; i < 3; i++) {
32 ellipsoidTransform(i,0) * ellipsoidTransform(i,0) +
33 ellipsoidTransform(i,1) * ellipsoidTransform(i,1) +
34 ellipsoidTransform(i,2) * ellipsoidTransform(i,2);
45 boundMax[0] = std::sqrt(boundMax[0]);
46 boundMax[1] = std::sqrt(boundMax[1]);
47 boundMax[2] = std::sqrt(boundMax[2]);
54 const std::string& rotation,
55 const std::string& pws,
56 const bool xformIsQuat)
67 template<
typename ValueT>
70 const std::string& name,
73 const size_t idx = desc.
find(name);
75 if (optional)
return std::numeric_limits<size_t>::max();
76 throw std::runtime_error(
"Missing attribute - " + name);
79 throw std::runtime_error(
"Wrong attribute type for attribute " + name
86template <
typename SdfT,
87 typename PositionCodecT,
92 public rasterize_sdf_internal::SphericalTransfer<SdfT, PositionCodecT, RadiusType, FilterT, CPG>
94 using BaseT = rasterize_sdf_internal::SphericalTransfer<SdfT, PositionCodecT, RadiusType, FilterT, CPG>;
95 using typename BaseT::TreeT;
96 using typename BaseT::ValueT;
98 static const Index DIM = TreeT::LeafNodeType::DIM;
108 const RadiusType& rt,
110 const FilterT& filter,
115 const std::unordered_map<const PointDataTree::LeafNodeType*, Index>* ids =
nullptr)
116 :
BaseT(pidx, width, rt, source, filter, interrupt, surface, cpg, ids)
118 , mPositionWSHandle() {}
123 , mPositionWSHandle() {}
127 const bool ret = this->BaseT::startPointLeaf(leaf);
128 if (
mIndices.hasWorldSpacePosition()) {
129 mPositionWSHandle = std::make_unique<PwsHandleT>(leaf.constAttributeArray(
mIndices.positionws));
139 if (!BaseT::filter(
id))
return;
142 if (this->mPositionWSHandle) {
144 P = this->targetTransform().worldToIndex(this->mPositionWSHandle->get(
id));
147 const Vec3d PWS = this->sourceTransform().indexToWorld(ijk.
asVec3d() +
Vec3d(this->mPosition->get(
id)));
148 P = this->targetTransform().worldToIndex(PWS);
155 const auto& r = this->mRadius.eval(
id);
167 for (
int i = 0; i < 3; ++i) {
168 for (
int j = 0; j < 3; ++j) {
169 xformws(i,j) /= radius[j];
174 radius /= float(this->mDx);
181 if ((radius.
x() == radius.
y()) && (radius.
x() == radius.
z())) {
182 const FixedBandRadius<float> fixed(radius.
x(), r.halfband());
183 this->BaseT::rasterizePoint(P,
id, bounds, fixed);
187#if OPENVDB_ELLIPSOID_KERNEL_MODE == 0
188 const FixedBandRadius<RealT> fbr(1.0, r.halfband());
197 const RealT min2 = fbr.minSq() == 0.0 ? -1.0 : fbr.minSq();
198 const RealT max2 = fbr.maxSq();
209 if (intersectBox.
empty())
return;
211 auto*
const data = this->
template buffer<0>();
212 [[maybe_unused]]
auto*
const cpg = CPG ? this->
template buffer<CPG ? 1 : 0>() :
nullptr;
213 auto& mask = *(this->
template mask<0>());
216 const Vec3d radInv = 1.0f / radius;
218#if OPENVDB_ELLIPSOID_KERNEL_MODE != 2
241 const float* inv = ellipsoidInverse.
asPointer();
242 for (
Coord c = a; c.
x() <= b.
x(); ++c.x()) {
243 const RealT x =
static_cast<RealT>(c.x() - P[0]);
244 const Vec3d xradial(x*inv[0], x*inv[3], x*inv[6]);
246 for (c.y() = a.
y(); c.y() <= b.
y(); ++c.y()) {
247 const RealT y =
static_cast<RealT>(c.y() - P[1]);
248 const Vec3d xyradial = xradial +
Vec3d(y*inv[1], y*inv[4], y*inv[7]);
250 for (c.z() = a.
z(); c.z() <= b.
z(); ++c.z()) {
251 const Index offset = ij + (c.z() & (
DIM-1u));
252 if (!mask.isOn(offset))
continue;
253 const RealT z =
static_cast<RealT>(c.z() - P[2]);
256 const Vec3d pointOnUnitSphere = (xyradial +
Vec3d(z*inv[2], z*inv[5], z*inv[8]));
260#if OPENVDB_ELLIPSOID_KERNEL_MODE == 0
265 if (len >= max2)
continue;
267 data[offset] = -(this->mBackground);
271 d = ValueT(this->mDx * (
math::Sqrt(len) - 1.0));
272#elif OPENVDB_ELLIPSOID_KERNEL_MODE == 1
282 d = -ValueT(std::min(radius.
x(), std::min(radius.
y(), radius.
z()))) * ValueT(this->mDx);
285 Vec3d ellipseNormal = (ellipsoidInverse.
transpose() * pointOnUnitSphere);
296 d =
static_cast<ValueT
>(
297 ((x * ellipseNormal.
x()) +
298 (y * ellipseNormal.
y()) +
299 (z * ellipseNormal.
z()))
300 * (1.0 - (
RealT(1.0)/len))
304 if (d >= this->mBackground)
continue;
305 if (d <= -this->mBackground) {
306 data[offset] = -(this->mBackground);
310#elif OPENVDB_ELLIPSOID_KERNEL_MODE == 2
311 const RealT k2 = (pointOnUnitSphere * radInv2).length();
316 d = -ValueT(std::min(radius.
x(), std::min(radius.
y(), radius.
z()))) * ValueT(this->mDx);
319 const RealT k1 = (pointOnUnitSphere * radInv).length();
322 d =
static_cast<ValueT
>((k1 * (k1 -
RealT(1.0)) / k2) * this->mDx);
324 if (d >= this->mBackground)
continue;
325 if (d <= -this->mBackground) {
326 data[offset] = -(this->mBackground);
332 ValueT& v = data[offset];
335 if constexpr(CPG) cpg[offset] =
Int64(this->mPLeafMask |
Index64(
id));
345 std::unique_ptr<PwsHandleT> mPositionWSHandle;
356template <
typename SdfT,
357 typename PositionCodecT,
369 const RadiusType& rt,
376 const std::unordered_map<const PointDataTree::LeafNodeType*, Index>* ids =
nullptr)
377 :
BaseT(pidx, width, rt, source, filter, interrupt, surface, indices, cpg, ids)
378 , mRotationHandle() {}
382 , mRotationHandle() {}
387 mRotationHandle = std::make_unique<QuatHandleT>(leaf.constAttributeArray(this->BaseT::mIndices.xform));
401 std::unique_ptr<QuatHandleT> mRotationHandle;
405template <
typename SdfT,
406 typename PositionCodecT,
418 const RadiusType& rt,
425 const std::unordered_map<const PointDataTree::LeafNodeType*, Index>* ids =
nullptr)
426 :
BaseT(pidx, width, rt, source, filter, interrupt, surface, indices, cpg, ids)
436 mXformHandle.reset(
new XformHandleT(leaf.constAttributeArray(this->BaseT::mIndices.xform)));
448 std::unique_ptr<XformHandleT> mXformHandle;
451template<
typename RadiusType,
455 :
public rasterize_sdf_internal::SurfaceMaskOp<MaskTreeT>
457 using BaseT = rasterize_sdf_internal::SurfaceMaskOp<MaskTreeT>;
460 using RadiusT =
typename RadiusType::ValueType;
462 static const Index DIM = points::PointDataTree::LeafNodeType::DIM;
467 const RadiusType& rad,
470 :
BaseT(src, trg, nullptr)
472 , mHalfband(halfband)
478 , mRadius(other.mRadius)
479 , mHalfband(other.mHalfband)
480 , mIndices(other.mIndices)
488 this->BaseT::join(other);
497 RadiusType rad(mRadius);
500 Vec3d maxPos(std::numeric_limits<Real>::lowest()),
501 minPos(std::numeric_limits<Real>::max());
504 if (mIndices.positionws == std::numeric_limits<size_t>::max())
506 const CoordBBox box = this->getActiveBoundingBox(leaf);
507 if (box.
empty())
return;
508 minPos = this->mPointsTransform.indexToWorld(box.
min().
asVec3d() - 0.5);
509 maxPos = this->mPointsTransform.indexToWorld(box.
max().
asVec3d() + 0.5);
515 if (pwsHandle.
size() == 0)
return;
516 for (
Index i = 0; i < pwsHandle.
size(); ++i)
528 for (
Index i = 0; i < xformHandle.
size(); ++i)
531 if constexpr (std::is_same_v<XformT, math::Mat3s>) {
532 xform = xformHandle.
get(i);
547 for (
size_t i = 0; i < 3; ++i) {
549 maxBounds[i] = std::sqrt(maxBounds[i]);
561 Coord::round(this->mSurfaceTransform.worldToIndex(minPos)),
562 Coord::round(this->mSurfaceTransform.worldToIndex(maxPos)));
563 surfaceBounds.
min() -= dist;
564 surfaceBounds.
max() += dist;
565 this->activate(surfaceBounds);
567 this->updateMaxLookup(minPos, maxPos, dist.
asVec3i(), leaf);
570 void operator()(
const typename LeafManagerT::LeafRange& range)
572 for (
auto leaf = range.begin(); leaf; ++leaf) {
578 void updateMaxLookup(
const Vec3d& minWs,
581 const typename LeafManagerT::LeafNodeType& leaf)
586 Coord minIdx = this->mPointsTransform.worldToIndexCellCentered(minWs);
587 Coord maxIdx = this->mPointsTransform.worldToIndexCellCentered(maxWs);
588 const auto bounds = leaf.getNodeBoundingBox();
594 if (!bounds.isInside(maxIdx)) {
595 maxIdx -= leaf.origin();
596 if (maxIdx.
x() > 0) maxIdx.
x() -= DIM;
597 if (maxIdx.
y() > 0) maxIdx.
y() -= DIM;
598 if (maxIdx.
z() > 0) maxIdx.
z() -= DIM;
599 maxIdx = Abs(maxIdx);
604 if (!bounds.isInside(minIdx))
606 minIdx -= leaf.origin();
607 if (minIdx.
x() > 0) minIdx.
x() -= DIM;
608 if (minIdx.
y() > 0) minIdx.
y() -= DIM;
609 if (minIdx.
z() > 0) minIdx.
z() -= DIM;
610 minIdx = Abs(minIdx);
618 mMaxDist = math::maxComponent(mMaxDist, dist + maxIdx.
asVec3i());
622 const RadiusType& mRadius;
623 const Real mHalfband;
624 const EllipseIndicies& mIndices;
628template <
typename PointDataGridT,
634 const SettingsT& settings,
635 const typename SettingsT::FilterType& filter)
638 static_assert(std::is_same_v<XformT, Quats> || std::is_same_v<XformT, Mat3s>);
643 using PointDataTreeT =
typename PointDataGridT::TreeType;
644 using MaskTreeT =
typename SdfT::TreeType::template ValueConverter<ValueMask>::Type;
646 using FilterT =
typename SettingsT::FilterType;
648 constexpr bool XformIsQuat = std::is_same_v<XformT, math::Quats>;
650 const std::vector<std::string>& attributes = settings.attributes;
651 const Real halfband = settings.halfband;
652 const Vec3d radiusScale = settings.radiusScale;
653 auto* interrupter = settings.interrupter;
656 if (!transform) transform =
points.transform().copy();
657 const Real vs = transform->voxelSize()[0];
658 const typename SdfT::ValueType background =
659 static_cast<typename SdfT::ValueType
>(vs * halfband);
662 const auto leaf =
points.constTree().cbeginLeaf();
664 typename SdfT::Ptr surface = SdfT::create(background);
665 surface->setTransform(transform);
672 const auto& attr = settings.rotation.empty() ? settings.xform : settings.rotation;
681 typename SdfT::Ptr surface;
684 if (settings.radius.empty()) {
686 FixedBandRadius<Vec3f> rad(
Vec3f(radiusScale / vs),
float(halfband));
697 if (interrupter) interrupter->start(
"Generating ellipsoidal surface topology");
703 op(
points.transform(), *transform, rad, halfband, indices);
704 tbb::parallel_reduce(manager.
leafRange(), op);
706 surface = rasterize_sdf_internal::initSdfFromMasks<SdfT, MaskTreeT>
707 (transform, background, op.mask(), op.maskoff());
709 width = op.getMaxDist();
711 if (interrupter) interrupter->end();
714 if (interrupter) interrupter->start(
"Rasterizing particles to level set using ellipses and fixed spheres");
716 if constexpr (std::is_same_v<XformT, math::Mat3s>) {
717 grids = doRasterizeSurface<SdfT, EllipsoidTransferMat3, AttributeTypes, FilterT>
718 (
points, attributes, *surface,
719 width, rad,
points.transform(), filter, interrupter, *surface, indices);
722 grids = doRasterizeSurface<SdfT, EllipsoidTransferQuat, AttributeTypes, FilterT>
723 (
points, attributes, *surface,
724 width, rad,
points.transform(), filter, interrupter, *surface, indices);
728 using RadiusT =
typename SettingsT::RadiusAttributeType;
730 const size_t ridx = leaf->attributeSet().find(settings.radius);
736 VaryingBandRadius<RadiusT, Vec3f> rad(ridx,
float(halfband),
Vec3f(radiusScale / vs));
747 if (interrupter) interrupter->start(
"Generating variable ellipsoidal surface topology");
753 op(
points.transform(), *transform, rad, halfband, indices);
754 tbb::parallel_reduce(manager.
leafRange(), op);
756 surface = rasterize_sdf_internal::initSdfFromMasks<SdfT, MaskTreeT>
757 (transform, background, op.mask(), op.maskoff());
759 width = op.getMaxDist();
761 if (interrupter) interrupter->end();
764 if (interrupter) interrupter->start(
"Rasterizing particles to level set using variable ellipses");
766 if constexpr (std::is_same_v<XformT, math::Mat3s>) {
767 grids = doRasterizeSurface<SdfT, EllipsoidTransferMat3, AttributeTypes, FilterT>
768 (
points, attributes, *surface,
769 width, rad,
points.transform(), filter, interrupter, *surface, indices);
772 grids = doRasterizeSurface<SdfT, EllipsoidTransferQuat, AttributeTypes, FilterT>
773 (
points, attributes, *surface,
774 width, rad,
points.transform(), filter, interrupter, *surface, indices);
778 if (interrupter) interrupter->end();
780 grids.insert(grids.begin(), surface);
784template <
typename PointDataGridT,
789 const SettingsT& settings,
790 const typename SettingsT::FilterType& filter)
792 if (
const auto leaf =
points.constTree().cbeginLeaf()) {
793 const auto& desc = leaf->attributeSet().descriptor();
796 const auto& attr = settings.rotation.empty() ? settings.xform : settings.rotation;
798 const size_t idx = desc.find(attr);
806 throw std::runtime_error(
"Wrong attribute type for attribute " +
807 attr +
", expected " +
#define OPENVDB_ASSERT(X)
Definition Assert.h:41
static Coord round(const Vec3< T > &xyz)
Return xyz rounded to the closest integer coordinates (cell centered conversion).
Definition Coord.h:51
Definition Exceptions.h:63
Axis-aligned bounding box of signed integer coordinates.
Definition Coord.h:252
bool empty() const
Return true if this bounding box is empty (i.e., encloses no coordinates).
Definition Coord.h:359
const Coord & min() const
Definition Coord.h:324
const Coord & max() const
Definition Coord.h:325
void intersect(const CoordBBox &bbox)
Intersect this bounding box with the given bounding box.
Definition Coord.h:447
Signed (x, y, z) 32-bit integer coordinates.
Definition Coord.h:26
Vec3d asVec3d() const
Definition Coord.h:144
Int32 y() const
Definition Coord.h:132
void maxComponent(const Coord &other)
Perform a component-wise maximum with the other Coord.
Definition Coord.h:184
Coord & reset(Int32 x, Int32 y, Int32 z)
Reset all three coordinates with the specified arguments.
Definition Coord.h:70
Int32 x() const
Definition Coord.h:131
Vec3i asVec3i() const
Definition Coord.h:146
Int32 z() const
Definition Coord.h:133
void setToRotation(const Quat< T > &q)
Set this matrix to the rotation matrix specified by the quaternion.
Definition Mat3.h:253
Mat3 transpose() const
returns transpose of this
Definition Mat3.h:454
Mat3 timesDiagonal(const Vec3< T > &diag) const
Treat diag as a diagonal matrix and return the product of this matrix with diag (from the right).
Definition Mat3.h:521
Vec3< T > col(int j) const
Get jth column, e.g. Vec3d v = m.col(0);.
Definition Mat3.h:168
void setSymmetric(const Vec3< T > &vdiag, const Vec3< T > &vtri)
Set diagonal and symmetric triangular components.
Definition Mat3.h:223
T * asPointer()
Definition Mat.h:101
T & x()
Reference to the component, e.g. v.x() = 4.5f;.
Definition Vec3.h:86
T length() const
Length of the vector.
Definition Vec3.h:201
T & y()
Definition Vec3.h:87
T & z()
Definition Vec3.h:88
T lengthSqr() const
Definition Vec3.h:212
bool normalize(T eps=T(1.0e-7))
this = normalized this
Definition Vec3.h:363
Definition AttributeArray.h:764
Index size() const
Definition AttributeArray.h:786
ValueType get(Index n, Index m=0) const
Definition AttributeArray.h:2058
An immutable object that stores name, type and AttributeSet position for a constant collection of att...
Definition AttributeSet.h:311
size_t find(const std::string &name) const
Return the position of the attribute array whose name is name, or INVALID_POS if no match is found.
const Name & valueType(size_t pos) const
Return the name of the attribute array's type.
@ INVALID_POS
Definition AttributeSet.h:42
This class manages a linear array of pointers to a given tree's leaf nodes, as well as optional auxil...
Definition LeafManager.h:86
LeafRange leafRange(size_t grainsize=1) const
Return a TBB-compatible LeafRange.
Definition LeafManager.h:346
LeafType LeafNodeType
Definition LeafManager.h:93
typename RootNodeType::LeafNodeType LeafNodeType
Definition Tree.h:203
Selectively extract and filter point data using a custom filter operator.
float Sqrt(float x)
Return the square root of a floating-point value.
Definition Math.h:832
Mat3< float > Mat3s
Definition Mat3.h:832
Vec3< double > Vec3d
Definition Vec3.h:665
Vec2< T > minComponent(const Vec2< T > &v1, const Vec2< T > &v2)
Return component-wise minimum of the two vectors.
Definition Vec2.h:504
Vec3< int32_t > Vec3i
Definition Vec3.h:662
Vec2< T > maxComponent(const Vec2< T > &v1, const Vec2< T > &v2)
Return component-wise maximum of the two vectors.
Definition Vec2.h:513
Quat< float > Quats
Definition Quat.h:611
Type Pow2(Type x)
Return x2.
Definition Math.h:573
Definition PointRasterizeEllipsoidsSDFImpl.h:24
GridPtrVec rasterizeEllipsoids(const PointDataGridT &points, const SettingsT &settings, const typename SettingsT::FilterType &filter)
Definition PointRasterizeEllipsoidsSDFImpl.h:633
math::Vec3d calcUnitEllipsoidBoundMaxSq(const math::Mat3s &ellipsoidTransform)
Definition PointRasterizeEllipsoidsSDFImpl.h:27
math::Vec3d calcEllipsoidBoundMax(const math::Mat3s &ellipsoidTransform)
Definition PointRasterizeEllipsoidsSDFImpl.h:42
Definition AttributeArray.h:42
std::vector< GridBase::Ptr > GridPtrVec
Definition Grid.h:508
Index32 Index
Definition Types.h:34
math::Vec3< float > Vec3f
Definition Types.h:55
double Real
Definition Types.h:40
@ GRID_LEVEL_SET
Definition Types.h:522
int64_t Int64
Definition Types.h:37
tree::Tree4< int64_t, 5, 4, 3 >::Type Int64Tree
Definition openvdb.h:58
uint64_t Index64
Definition Types.h:33
NumericAttributeTypes:: Append< Vec3AttributeTypes >:: Append< Mat3AttributeTypes >:: Append< Mat4AttributeTypes >:: Append< QuatAttributeTypes >:: Append< points::GroupAttributeArray >:: Append< points::StringAttributeArray >:: Append< points::TypedAttributeArray< bool > > AttributeTypes
The attribute array types which OpenVDB will register by default.
Definition openvdb.h:180
const char * typeNameAsString()
Definition Types.h:583
Definition Exceptions.h:13
#define OPENVDB_THROW(exception, message)
Definition Exceptions.h:74
Helper metafunction used to determine if the first template parameter is a specialization of the clas...
Definition Types.h:244
Definition PointRasterizeEllipsoidsSDFImpl.h:52
const size_t xform
Definition PointRasterizeEllipsoidsSDFImpl.h:64
bool hasWorldSpacePosition() const
Definition PointRasterizeEllipsoidsSDFImpl.h:62
const size_t positionws
Definition PointRasterizeEllipsoidsSDFImpl.h:64
EllipseIndicies(const points::AttributeSet::Descriptor &desc, const std::string &rotation, const std::string &pws, const bool xformIsQuat)
Definition PointRasterizeEllipsoidsSDFImpl.h:53
Definition PointRasterizeEllipsoidsSDFImpl.h:456
typename RadiusType::ValueType RadiusT
Definition PointRasterizeEllipsoidsSDFImpl.h:460
void operator()(const typename LeafManagerT::LeafRange &range)
Definition PointRasterizeEllipsoidsSDFImpl.h:570
static const Index DIM
Definition PointRasterizeEllipsoidsSDFImpl.h:462
void join(EllipseSurfaceMaskOp &other)
Definition PointRasterizeEllipsoidsSDFImpl.h:485
void fillFromStretchAndRotation(const typename LeafManagerT::LeafNodeType &leaf)
Fill activity by analyzing the axis aligned ellipse bounding boxes on points in this leaf....
Definition PointRasterizeEllipsoidsSDFImpl.h:495
Vec3i getMaxDist() const
Definition PointRasterizeEllipsoidsSDFImpl.h:483
rasterize_sdf_internal::SurfaceMaskOp< MaskTreeT > BaseT
Definition PointRasterizeEllipsoidsSDFImpl.h:457
EllipseSurfaceMaskOp(const EllipseSurfaceMaskOp &other, tbb::split)
Definition PointRasterizeEllipsoidsSDFImpl.h:476
EllipseSurfaceMaskOp(const math::Transform &src, const math::Transform &trg, const RadiusType &rad, const Real halfband, const EllipseIndicies &indices)
Definition PointRasterizeEllipsoidsSDFImpl.h:464
points::PointDataTree::LeafNodeType PointDataLeaf
Definition PointRasterizeEllipsoidsSDFImpl.h:458
tree::LeafManager< const points::PointDataTree > LeafManagerT
Definition PointRasterizeEllipsoidsSDFImpl.h:459
points::AttributeHandle< XformT > RotationHandleT
Definition PointRasterizeEllipsoidsSDFImpl.h:461
EllipsoidTransfer< SdfT, PositionCodecT, RadiusType, FilterType, CPG > BaseT
Definition PointRasterizeEllipsoidsSDFImpl.h:413
void rasterizePoint(const Coord &ijk, const Index id, const CoordBBox &bounds)
Definition PointRasterizeEllipsoidsSDFImpl.h:440
bool startPointLeaf(const PointDataTree::LeafNodeType &leaf)
Definition PointRasterizeEllipsoidsSDFImpl.h:433
points::AttributeHandle< math::Mat3s > XformHandleT
Definition PointRasterizeEllipsoidsSDFImpl.h:414
EllipsoidTransferMat3(const size_t pidx, const Vec3i width, const RadiusType &rt, const math::Transform &source, const FilterType &filter, util::NullInterrupter *interrupt, SdfT &surface, const EllipseIndicies &indices, Int64Tree *cpg=nullptr, const std::unordered_map< const PointDataTree::LeafNodeType *, Index > *ids=nullptr)
Definition PointRasterizeEllipsoidsSDFImpl.h:416
EllipsoidTransferMat3(const EllipsoidTransferMat3 &other)
Definition PointRasterizeEllipsoidsSDFImpl.h:429
EllipsoidTransfer< SdfT, PositionCodecT, RadiusType, FilterType, CPG > BaseT
Definition PointRasterizeEllipsoidsSDFImpl.h:364
void rasterizePoint(const Coord &ijk, const Index id, const CoordBBox &bounds)
Definition PointRasterizeEllipsoidsSDFImpl.h:391
points::AttributeHandle< math::Quats > QuatHandleT
Definition PointRasterizeEllipsoidsSDFImpl.h:365
bool startPointLeaf(const PointDataTree::LeafNodeType &leaf)
Definition PointRasterizeEllipsoidsSDFImpl.h:384
EllipsoidTransferQuat(const size_t pidx, const Vec3i width, const RadiusType &rt, const math::Transform &source, const FilterType &filter, util::NullInterrupter *interrupt, SdfT &surface, const EllipseIndicies &indices, Int64Tree *cpg=nullptr, const std::unordered_map< const PointDataTree::LeafNodeType *, Index > *ids=nullptr)
Definition PointRasterizeEllipsoidsSDFImpl.h:367
EllipsoidTransferQuat(const EllipsoidTransferQuat &other)
Definition PointRasterizeEllipsoidsSDFImpl.h:380
const EllipseIndicies & mIndices
Definition PointRasterizeEllipsoidsSDFImpl.h:343
rasterize_sdf_internal::SphericalTransfer< SdfT, PositionCodecT, RadiusType, FilterT, CPG > BaseT
Definition PointRasterizeEllipsoidsSDFImpl.h:94
EllipsoidTransfer(const size_t pidx, const Vec3i width, const RadiusType &rt, const math::Transform &source, const FilterT &filter, util::NullInterrupter *interrupt, SdfT &surface, const EllipseIndicies &indices, Int64Tree *cpg=nullptr, const std::unordered_map< const PointDataTree::LeafNodeType *, Index > *ids=nullptr)
Definition PointRasterizeEllipsoidsSDFImpl.h:106
static const Index DIM
Definition PointRasterizeEllipsoidsSDFImpl.h:98
double RealT
Definition PointRasterizeEllipsoidsSDFImpl.h:101
points::AttributeHandle< Vec3d > PwsHandleT
Definition PointRasterizeEllipsoidsSDFImpl.h:104
bool startPointLeaf(const PointDataTree::LeafNodeType &leaf)
Definition PointRasterizeEllipsoidsSDFImpl.h:125
void rasterizePoint(const Coord &ijk, const Index id, const CoordBBox &bounds, const Mat3s &xform)
Definition PointRasterizeEllipsoidsSDFImpl.h:134
static const Index LOG2DIM
Definition PointRasterizeEllipsoidsSDFImpl.h:99
EllipsoidTransfer(const EllipsoidTransfer &other)
Definition PointRasterizeEllipsoidsSDFImpl.h:120
points::AttributeHandle< Vec3f > PHandleT
Definition PointRasterizeEllipsoidsSDFImpl.h:103
Base class for interrupters.
Definition NullInterrupter.h:26
#define OPENVDB_VERSION_NAME
The version namespace name for this library version.
Definition version.h.in:121
#define OPENVDB_USE_VERSION_NAMESPACE
Definition version.h.in:218