OpenVDB 12.1.0
Loading...
Searching...
No Matches
EllipsoidSettings< AttributeTs, RadiusAttributeT, FilterT > Struct Template Reference

Anisotropic point rasterization based on the principal component analysis of point neighbours. See the struct member documentation for detailed behavior. More...

#include <openvdb/points/PointRasterizeSDF.h>

Inheritance diagram for EllipsoidSettings< AttributeTs, RadiusAttributeT, FilterT >:
SphereSettings< TypeList<>, Vec3f, NullFilter >

Public Types

using BaseT = SphereSettings<AttributeTs, RadiusAttributeT, FilterT>
using AttributeTypes = typename BaseT::AttributeTypes
using RadiusAttributeType = typename BaseT::RadiusAttributeType
using FilterType = typename BaseT::FilterType

Public Attributes

std::string rotation = "rotation"
std::string pws = ""
Real halfband
math::Transform::Ptr transform
std::vector< std::string > attributes
const FilterT * filter
util::NullInterrupterinterrupter
std::string radius
RadiusScaleT radiusScale

Protected Types

using RadiusScaleT

Detailed Description

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
struct openvdb::v12_1::points::EllipsoidSettings< AttributeTs, RadiusAttributeT, FilterT >

Anisotropic point rasterization based on the principal component analysis of point neighbours. See the struct member documentation for detailed behavior.

This rasterization technique is typically used with the accompanying PCA tools in PrincipalComponentAnalysis.h which initializes the required attributes. These attributes define the rotational and affine transformations which can be used to construct ellipsoids for each point. Typically (for our intended surfacing) these transformations are built by analysing each points neighbourhood distributions and constructing tight ellipsoids that orient themselves to follow these point distributions.

Note
Protected inheritance prevents accidental struct slicing

Member Typedef Documentation

◆ AttributeTypes

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
using AttributeTypes = typename BaseT::AttributeTypes

◆ BaseT

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
using BaseT = SphereSettings<AttributeTs, RadiusAttributeT, FilterT>

◆ FilterType

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
using FilterType = typename BaseT::FilterType

◆ RadiusAttributeType

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
using RadiusAttributeType = typename BaseT::RadiusAttributeType

◆ RadiusScaleT

using RadiusScaleT
inherited
Parameters
radiusScalethe scale applied to every world space radius value
Note
If no radius attribute is provided, this is used as the uniform world space radius for every point. Most surfacing operations will perform faster if they are able to assume a uniform radius (so use this value instead of setting the radius parameter if radii are uniform).
Type of the scale is always double precision (the Promote exists as this could be a vector scale - see EllipsoidSettings).

Member Data Documentation

◆ attributes

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
std::vector<std::string> attributes
Parameters
attributeslist of attributes to transfer

if the attributes vector is empty, only the surface is built. Otherwise, every voxel's closest point is used to transfer each attribute in the attributes parameter to a new grid of matching topology. The built surface is always the first grid returned from the surfacing operation, followed by attribute grids in the order that they appear in this vector.

The AttributeTs template parameter should be a TypeList of the required or possible attributes types. Example:

// compile support for int, double and Vec3f attribute transferring
using SupportedTypes = TypeList<int, double, Vec3f>;
// Produce 4 additional grids from the "v", "Cd", "id" and "density"
// attributes. Their attribute value types must be available in the
// provided TypeList
s.attributes = {"v", "Cd", "id", "density"};
A list of types (not necessarily unique)
Definition TypeList.h:578
Generic settings for narrow band spherical stamping with a uniform or varying radius and optionally w...
Definition PointRasterizeSDF.h:157
std::vector< std::string > attributes
Definition PointRasterizeSDF.h:216

A runtime error will be thrown if no equivalent type for a given attribute is found in the AttributeTs TypeList.

Note
The destination types of these grids is equal to the ValueConverter result of the attribute type applied to the PointDataGridT.

◆ filter

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
const FilterT* filter
Parameters
filtera filter to apply to points. Only points that evaluate to true using this filter are rasterized, regardless of any other filtering derived schemes may use.

◆ halfband

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
Real halfband
Parameters
halfbandthe half band width of the generated surface.

◆ interrupter

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
util::NullInterrupter* interrupter
Parameters
interrupteroptional interrupter

◆ pws

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
std::string pws = ""
Parameters
pwsAn optional attribute which represents the world space position of a point.

This can be useful to override the position of a point in index space. If it exists, it must be a Vec3d type.

◆ radius

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
std::string radius
Note
For ellipsoid rasterization, the radius attribute and scale need to be Vec3f types (RadiusAttributeT defaults to this). This represents each ellipsoids stretch and squash coefficients.

◆ radiusScale

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
RadiusScaleT radiusScale

◆ rotation

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
std::string rotation = "rotation"
Parameters
rotationthe attribute containing each points orthogonal rotation matrix.

This attribute must exist and represents the rotation of each points ellipse. Must be a Mat3s type.

◆ transform

template<typename AttributeTs = TypeList<>, typename RadiusAttributeT = Vec3f, typename FilterT = NullFilter>
math::Transform::Ptr transform
Parameters
transformthe target transform for the surface. Most surfacing operations impose linear restrictions on the target transform.