OpenVDB 12.1.0
Loading...
Searching...
No Matches
OpenTriangularPrismVoxelizer< GridType, InterruptT > Class Template Reference

Class used to generate a grid of type GridType containing a narrow-band level set representation of an open prism. The only parts of the level set populated are along both normals of the triangle. Negative background tiles that fit inside the closed dilated triangle are also populated. More...

#include <openvdb/tools/impl/LevelSetDilatedMeshImpl.h>

Inheritance diagram for OpenTriangularPrismVoxelizer< GridType, InterruptT >:
ConvexVoxelizer< GridType, OpenTriangularPrismVoxelizer< GridType, util::NullInterrupter >, util::NullInterrupter >

Public Member Functions

 OpenTriangularPrismVoxelizer (GridPtr &grid, const bool &threaded=false, InterruptT *interrupter=nullptr)
 Constructor.
template<typename ScalarType>
void operator() (const math::Vec3< ScalarType > &pt1, const math::Vec3< ScalarType > &pt2, const math::Vec3< ScalarType > &pt3, const ScalarType &radius)
 Create an open prism.
ValueT voxelSize () const
 Return the voxel size of the grid.
ValueT halfWidth () const
 Return the half width of the narrow-band level set.

Protected Types

using Vec2T

Protected Member Functions

void iterate ()
 The function the derived class calls to create the level set, working in index space other than setting signed distance values.

Static Protected Member Functions

static ValueT tileCeil (const ValueT &x, const ValueT &step)
 Rounds an input scalar up to the nearest valid ordinate of tile of a specified size.
static ValueT tileFloor (const ValueT &x, const ValueT &step)
 Rounds an input scalar down to the nearest valid ordinate of tile of a specified size.
static ValueT circleBottom (const ValueT &x0, const ValueT &y0, const ValueT &r, const ValueT &x)
 Computes the bottom y-coordinate of a circle at a given x position.
static ValueT circleTop (const ValueT &x0, const ValueT &y0, const ValueT &r, const ValueT &x)
 Computes the top y-coordinate of a circle at a given x position.
static ValueT sphereBottom (const ValueT &x0, const ValueT &y0, const ValueT &z0, const ValueT &r, const ValueT &x, const ValueT &y)
 Computes the bottom z-coordinate of a sphere at a given (x, y) position.
static ValueT sphereTop (const ValueT &x0, const ValueT &y0, const ValueT &z0, const ValueT &r, const ValueT &x, const ValueT &y)
 Computes the top z-coordinate of a sphere at a given (x, y) position.

Protected Attributes

std::function< bool(ValueT &, ValueT &, const ValueT &, const ValueT &)> bottomTop
 Find where a vertical infinite line intersects a convex region dilated by the half width.

Friends

class ConvexVoxelizer< GridType, OpenTriangularPrismVoxelizer< GridType, InterruptT >, InterruptT >

Detailed Description

template<typename GridType, typename InterruptT = util::NullInterrupter>
class openvdb::v12_1::tools::lvlset::OpenTriangularPrismVoxelizer< GridType, InterruptT >

Class used to generate a grid of type GridType containing a narrow-band level set representation of an open prism. The only parts of the level set populated are along both normals of the triangle. Negative background tiles that fit inside the closed dilated triangle are also populated.

Note
GridType::ValueType must be a floating-point scalar.

Member Typedef Documentation

◆ Vec2T

using Vec2T
protectedinherited

Constructor & Destructor Documentation

◆ OpenTriangularPrismVoxelizer()

template<typename GridType, typename InterruptT = util::NullInterrupter>
OpenTriangularPrismVoxelizer ( GridPtr & grid,
const bool & threaded = false,
InterruptT * interrupter = nullptr )
inline

Constructor.

Parameters
gridscalar grid to populate the level set in
threadedcenter of the sphere in world units
interrupterpointer to optional interrupter. Use template argument util::NullInterrupter if no interruption is desired.
Note
The voxel size and half width are determined from the input grid, meaning the voxel size and background value need to be set prior to voxelization

Member Function Documentation

◆ circleBottom()

ValueT circleBottom ( const ValueT & x0,
const ValueT & y0,
const ValueT & r,
const ValueT & x )
inlinestaticprotectedinherited

Computes the bottom y-coordinate of a circle at a given x position.

Parameters
x0X-coordinate of the circle's center.
y0Y-coordinate of the circle's center.
rRadius of the circle.
xX-coordinate for which to compute the bottom y-coordinate.
Returns
The y-coordinate at the bottom of the circle for the given x position.

◆ circleTop()

ValueT circleTop ( const ValueT & x0,
const ValueT & y0,
const ValueT & r,
const ValueT & x )
inlinestaticprotectedinherited

Computes the top y-coordinate of a circle at a given x position.

Parameters
x0X-coordinate of the circle's center.
y0Y-coordinate of the circle's center.
rRadius of the circle.
xX-coordinate for which to compute the top y-coordinate.
Returns
The y-coordinate at the top of the circle for the given x position.

◆ halfWidth()

ValueT halfWidth ( ) const
inlineinherited

Return the half width of the narrow-band level set.

◆ iterate()

void iterate ( )
inlineprotectedinherited

The function the derived class calls to create the level set, working in index space other than setting signed distance values.

Note
This function handles both parallel and serial iterations. If running in serial mode, it flood fills the tile topology immediately; otherwise, it avoids duplicating nontrivial tree topology over multiple threads. This method also checks for background tiles that are too thin to fit and delegates accordingly.

◆ operator()()

template<typename GridType, typename InterruptT = util::NullInterrupter>
template<typename ScalarType>
void operator() ( const math::Vec3< ScalarType > & pt1,
const math::Vec3< ScalarType > & pt2,
const math::Vec3< ScalarType > & pt3,
const ScalarType & radius )
inline

Create an open prism.

Parameters
pt1point 1 of the triangle in world units
pt2point 2 of the triangle in world units
pt3point 3 of the triangle in world units
radiusradius of the open prism in world units

◆ sphereBottom()

ValueT sphereBottom ( const ValueT & x0,
const ValueT & y0,
const ValueT & z0,
const ValueT & r,
const ValueT & x,
const ValueT & y )
inlinestaticprotectedinherited

Computes the bottom z-coordinate of a sphere at a given (x, y) position.

Parameters
x0X-coordinate of the sphere's center.
y0Y-coordinate of the sphere's center.
z0Z-coordinate of the sphere's center.
rRadius of the sphere.
xX-coordinate for which to compute the bottom z-coordinate.
yY-coordinate for which to compute the bottom z-coordinate.
Returns
The z-coordinate at the bottom of the sphere for the given (x, y) position.

◆ sphereTop()

ValueT sphereTop ( const ValueT & x0,
const ValueT & y0,
const ValueT & z0,
const ValueT & r,
const ValueT & x,
const ValueT & y )
inlinestaticprotectedinherited

Computes the top z-coordinate of a sphere at a given (x, y) position.

Parameters
x0X-coordinate of the sphere's center.
y0Y-coordinate of the sphere's center.
z0Z-coordinate of the sphere's center.
rRadius of the sphere.
xX-coordinate for which to compute the top z-coordinate.
yY-coordinate for which to compute the top z-coordinate.
Returns
The z-coordinate at the top of the sphere for the given (x, y) position.

◆ tileCeil()

ValueT tileCeil ( const ValueT & x,
const ValueT & step )
inlinestaticprotectedinherited

Rounds an input scalar up to the nearest valid ordinate of tile of a specified size.

Parameters
xInput value.
stepTile step size.
Returns
The ceiling of the value based on the tile size.

◆ tileFloor()

ValueT tileFloor ( const ValueT & x,
const ValueT & step )
inlinestaticprotectedinherited

Rounds an input scalar down to the nearest valid ordinate of tile of a specified size.

Parameters
xInput value.
stepTile step size.
Returns
The ceiling of the value based on the tile size.

◆ voxelSize()

ValueT voxelSize ( ) const
inlineinherited

Return the voxel size of the grid.

◆ ConvexVoxelizer< GridType, OpenTriangularPrismVoxelizer< GridType, InterruptT >, InterruptT >

template<typename GridType, typename InterruptT = util::NullInterrupter>
friend class ConvexVoxelizer< GridType, OpenTriangularPrismVoxelizer< GridType, InterruptT >, InterruptT >
friend

Member Data Documentation

◆ bottomTop

std::function<bool(ValueT&, ValueT&, const ValueT&, const ValueT&)> bottomTop
protectedinherited

Find where a vertical infinite line intersects a convex region dilated by the half width.

Parameters
[out]zbReference to the z ordinate where the bottom intersection occurs.
[out]ztReference to the z ordinate where the top intersection occurs.
[in]xThe x ordinate of the infinte line.
[in]yThe y ordinate of the infinte line.
Returns
true if an intersection occurs; otherwise false.
Note
The derived class can override this lambda to implement different behavior for degenerate cases.