Hold the state for a 2-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. | |
Manipulators. | |
void | setParameters (const BBox &domain, const Number maximumDistance, const bool areUsingLocalClipping=false, const int globalClippingMethod=0, const int decimationFactor=1) |
Set parameters for the closest point transform. | |
void | setParameters (const Number *domain, const Number maximumDistance, const bool areUsingLocalClipping=false, const int globalClippingMethod=0, const int decimationFactor=1) |
Set parameters for the closest point transform. | |
std::pair< int, int > | computeClosestPointTransform () |
Compute the closest point transform. | |
std::pair< int, int > | computeClosestPointTransformUnsigned () |
Compute the closest point transform. | |
Inside/outside. | |
template<bool A1, bool A2> | |
std::pair< int, int > | determinePointsInside (const BBox &domain, ads::Array< 2, bool, A1 > *areInside, ads::Array< 2, 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< 2, 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< 2, bool, A1 > *areOutside, ads::Array< 2, 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< 2, 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. | |
I/O. | |
void | displayInformation (std::ostream &out) |
Display information about the state of the closest point transform. |
Hold the state for a 2-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:
maximumDistance
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.)
std::pair< int, int > State< 2, T >::computeClosestPointTransform | ( | ) | [inline] |
Compute the closest point transform.
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 polygon 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< 2, T >::computeClosestPointTransformUnsigned | ( | ) | [inline] |
Compute the closest point transform.
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 polygon 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< 2, 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< 2, T >::determinePointsInside | ( | const BBox & | domain, | |
ads::Array< 2, 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< 2, T >::determinePointsInside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areInside, | |||
Number * | distance | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, xmax, ymax}. | |
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< 2, T >::determinePointsInside | ( | const BBox & | domain, | |
ads::Array< 2, bool, A1 > * | areInside, | |||
ads::Array< 2, 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< 2, T >::determinePointsOutside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areOutside | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, xmax, ymax}. | |
extents | The array extents. | |
areOutside | Boolean array is set to whether each grid point is outside the solid. |
std::pair<int,int> State< 2, T >::determinePointsOutside | ( | const BBox & | domain, | |
ads::Array< 2, 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< 2, T >::determinePointsOutside | ( | const Number * | domain, | |
const int * | extents, | |||
bool * | areOutside, | |||
Number * | distance | |||
) | [inline] |
Wrapper for the above function.
domain | The array {xmin, ymin, xmax, ymax}. | |
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< 2, T >::determinePointsOutside | ( | const BBox & | domain, | |
ads::Array< 2, bool, A1 > * | areOutside, | |||
ads::Array< 2, 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.
void State< 2, T >::setParameters | ( | const Number * | domain, | |
const Number | maximumDistance, | |||
const bool | areUsingLocalClipping = false , |
|||
const int | globalClippingMethod = 0 , |
|||
const int | decimationFactor = 1 | |||
) | [inline] |
Set parameters for the closest point transform.
This function must be called at least once before calls to setBRep() or computeClosestPointTransform().
domain | is the Cartesian domain that contains all grids. (All grids on all lattices.) This domain (expanded by the max distance) will be used to clip the b-rep in any subsequent calls to setBRep(). | |
maximumDistance | The distance will be computed up to maximumDistance away from the curve. | |
areUsingLocalClipping | indicates if adjacent faces should be used to clip the characteristic face polygons. | |
globalClippingMethod | indicates if/how a decimated mesh should be used to clip the characteristic polyhedra. 0 corresponds to no global clipping; 1 corresponds to limited global clipping; 2 corresponds to full global clipping. | |
decimationFactor | is the factor used to decimate the mesh for use in global clipping. |
The distance for grid points whose distance is larger than maximumDistance will be set to std::numeric_limits<Number>::max()
. Each component of the closest point of these far away points will be set to std::numeric_limits<Number>::max()
. The closest face of far away points will be set to -1.
References StateBase< N, T >::setParameters().
void State< 2, T >::setParameters | ( | const BBox & | domain, | |
const Number | maximumDistance, | |||
const bool | areUsingLocalClipping = false , |
|||
const int | globalClippingMethod = 0 , |
|||
const int | decimationFactor = 1 | |||
) | [inline] |
Set parameters for the closest point transform.
This function must be called at least once before calls to setBRep() or computeClosestPointTransform().
domain | is the Cartesian domain that contains all grids. (All grids on all lattices.) This domain (expanded by the max distance) will be used to clip the b-rep in any subsequent calls to setBRep(). | |
maximumDistance | The distance will be computed up to maximumDistance away from the curve. | |
areUsingLocalClipping | indicates if adjacent faces should be used to clip the characteristic face polygons. | |
globalClippingMethod | indicates if/how a decimated mesh should be used to clip the characteristic polyhedra. 0 corresponds to no global clipping; 1 corresponds to limited global clipping; 2 corresponds to full global clipping. | |
decimationFactor | is the factor used to decimate the mesh for use in global clipping. |
The distance for grid points whose distance is larger than maximumDistance will be set to std::numeric_limits<Number>::max()
. Each component of the closest point of these far away points will be set to std::numeric_limits<Number>::max()
. The closest face of far away points will be set to -1.