Hold the state for a 3-D closest point transform. More...
Public Types | |
typedef Base::Number | Number |
The number type. | |
typedef Base::Point | Point |
A point in 3-D. | |
typedef Base::IndexedFace | IndexedFace |
An indexed face in 3-D. | |
typedef Base::Index | Index |
An index in 3-D. | |
typedef Base::Range | Range |
An index range in 3-D. | |
typedef Base::BBox | BBox |
A bounding box. | |
typedef Base::Lattice | Lattice |
The grid geometry. | |
typedef Base::Grid | Grid |
The grid. | |
typedef Base::BRep | BRep |
The b-rep. | |
Public Member Functions | |
Constructors, etc. | |
State () | |
Default constructor. | |
~State () | |
Destructor. | |
Closest point transform. | |
std::pair< int, int > | computeClosestPointTransform () |
Compute the closest point transform for signed distance. | |
std::pair< int, int > | computeClosestPointTransformUnsigned () |
Compute the closest point transform for unsigned distance. | |
Inside/outside. | |
template<bool A1, bool A2> | |
std::pair< int, int > | determinePointsInside (const BBox &domain, ads::Array< 3, bool, A1 > *areInside, ads::Array< 3, Number, A2 > *distance) |
Determine which grid points are inside the solid (non-positive distance). | |
std::pair< int, int > | determinePointsInside (const Number *domain, const int *extents, bool *areInside, Number *distance) |
Wrapper for the above function. | |
template<bool A1> | |
std::pair< int, int > | determinePointsInside (const BBox &domain, ads::Array< 3, bool, A1 > *areInside) |
Determine which grid points are inside the solid (non-positive distance). | |
std::pair< int, int > | determinePointsInside (const Number *domain, const int *extents, bool *areInside) |
Wrapper for the above function. | |
template<bool A1, bool A2> | |
std::pair< int, int > | determinePointsOutside (const BBox &domain, ads::Array< 3, bool, A1 > *areOutside, ads::Array< 3, Number, A2 > *distance) |
Determine which grid points are outside the solid (positive distance). | |
std::pair< int, int > | determinePointsOutside (const Number *domain, const int *extents, bool *areOutside, Number *distance) |
Wrapper for the above function. | |
template<bool A1> | |
std::pair< int, int > | determinePointsOutside (const BBox &domain, ads::Array< 3, bool, A1 > *areOutside) |
Determine which grid points are outside the solid (positive distance). | |
std::pair< int, int > | determinePointsOutside (const Number *domain, const int *extents, bool *areOutside) |
Wrapper for the above function. |
Hold the state for a 3-D closest point transform.
Most of the functionality is dimension independent and is thus implemented in the base class cpt::StateBase.
To perform the closest point transform, you must call:
max_distance
parameter is no larger than needed.To compute the CPT for a new b-rep, call:
To compute the CPT for a different set of grids, call the following:
For AMR grids, one must follow these steps for each each level of the AMR grid. (Each level of the AMR grid is a separate lattice.)
To determine which grid points are inside/outside the solid, call:
std::pair< int, int > State< 3, T >::computeClosestPointTransform | ( | ) | [inline] |
Compute the closest point transform for signed distance.
Compute the signed distance. Compute the gradient of the distance, the closest face and closest point if their arrays specified in insertGrid() are nonzero.
The algorithm uses polyhedron scan conversion to determine which grid points are close to the shapes comprising the surface.
The unknown distances, gradients, and closest points are set to std::numeric_limits<Number>::max()
. The unknown closest faces are set to -1.
References StateBase< N, T >::getNumberOfGrids(), StateBase< N, T >::hasBRepBeenSet(), and StateBase< N, T >::initializeGrids().
std::pair< int, int > State< 3, T >::computeClosestPointTransformUnsigned | ( | ) | [inline] |
Compute the closest point transform for unsigned distance.
Compute the unsigned distance. Compute the gradient of the distance, the closest face and closest point if their arrays specified in insertGrid() are nonzero.
The algorithm uses polyhedron scan conversion to determine which grid points are close to the shapes comprising the surface.
The unknown distances, gradients, and closest points are set to std::numeric_limits<Number>::max()
. The unknown closest faces are set to -1.
References StateBase< N, T >::getNumberOfGrids(), StateBase< N, T >::hasBRepBeenSet(), and StateBase< N, T >::initializeGrids().
std::pair< int, int > State< 3, T >::determinePointsInside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areInside | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, zmin, xmax, ymax, zmax}. | |
extents | The array extents. | |
areInside | Boolean array is set to whether each grid point is inside the solid. |
std::pair<int,int> State< 3, T >::determinePointsInside | ( | const BBox & | domain, | |
ads::Array< 3, bool, A1 > * | areInside | |||
) | [inline] |
Determine which grid points are inside the solid (non-positive distance).
Use this interface if you only determine which points are inside one time. This function allocates a distance array and calls the function above.
std::pair< int, int > State< 3, T >::determinePointsInside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areInside, | |||
Number * | distance | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, zmin, xmax, ymax, zmax}. | |
extents | The array extents. | |
areInside | Boolean array is set to whether each grid point is inside the solid. | |
distance | Number array that is used in the computation. |
std::pair< int, int > State< 3, T >::determinePointsInside | ( | const BBox & | domain, | |
ads::Array< 3, bool, A1 > * | areInside, | |||
ads::Array< 3, Number, A2 > * | distance | |||
) | [inline] |
Determine which grid points are inside the solid (non-positive distance).
Use this interface if you repeatedly determine which points are inside. The distance array is needed for determining the sign of the distance. With this interface, the distance array is not allocated anew for each function call.
References StateBase< N, T >::clearGrids(), computeMaximum(), StateBase< N, T >::floodFillAtBoundary(), StateBase< N, T >::insertGrid(), StateBase< N, T >::setLattice(), and StateBase< N, T >::setParameters().
std::pair< int, int > State< 3, T >::determinePointsOutside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areOutside | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, zmin, xmax, ymax, zmax}. | |
extents | The array extents. | |
areOutside | Boolean array is set to whether each grid point is outside the solid. |
std::pair<int,int> State< 3, T >::determinePointsOutside | ( | const BBox & | domain, | |
ads::Array< 3, bool, A1 > * | areOutside | |||
) | [inline] |
Determine which grid points are outside the solid (positive distance).
Use this interface if you only determine which points are outside one time. This function allocates a distance array and calls the function above.
std::pair< int, int > State< 3, T >::determinePointsOutside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areOutside, | |||
Number * | distance | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, zmin, xmax, ymax, zmax}. | |
extents | The array extents. | |
areOutside | Boolean array is set to whether each grid point is outside the solid. | |
distance | Number array that is used in the computation. |
std::pair<int,int> State< 3, T >::determinePointsOutside | ( | const BBox & | domain, | |
ads::Array< 3, bool, A1 > * | areOutside, | |||
ads::Array< 3, Number, A2 > * | distance | |||
) | [inline] |
Determine which grid points are outside the solid (positive distance).
Use this interface if you repeatedly determine which points are outside. The distance array is needed for determining the sign of the distance. With this interface, the distance array is not allocated anew for each function call.