Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Friends | List of all members
treeBoundBox Class Reference

Standard boundBox + extra functionality for use in octree. More...

Inheritance diagram for treeBoundBox:
Inheritance graph
[legend]
Collaboration diagram for treeBoundBox:
Collaboration graph
[legend]

Public Types

enum  octantBit { RIGHTHALF = 0x1 << 0, TOPHALF = 0x1 << 1, FRONTHALF = 0x1 << 2 }
 Bits used for octant/point coding. More...
 
enum  faceId {
  LEFT = 0, RIGHT = 1, BOTTOM = 2, TOP = 3,
  BACK = 4, FRONT = 5
}
 Face codes. More...
 
enum  faceBit {
  NOFACE = 0, LEFTBIT = 0x1 << LEFT, RIGHTBIT = 0x1 << RIGHT, BOTTOMBIT = 0x1 << BOTTOM,
  TOPBIT = 0x1 << TOP, BACKBIT = 0x1 << BACK, FRONTBIT = 0x1 << FRONT
}
 Bits used for face coding. More...
 
enum  edgeId {
  E01 = 0, E13 = 1, E23 = 2, E02 = 3,
  E45 = 4, E57 = 5, E67 = 6, E46 = 7,
  E04 = 8, E15 = 9, E37 = 10, E26 = 11
}
 Edges codes. More...
 

Public Member Functions

 treeBoundBox ()
 Construct null setting points to zero. More...
 
 treeBoundBox (const boundBox &bb)
 Construct from a boundBox. More...
 
 treeBoundBox (const point &min, const point &max)
 Construct from components. More...
 
 treeBoundBox (const UList< point > &)
 Construct as the bounding box of the given pointField. More...
 
 treeBoundBox (const UList< point > &, const labelUList &indices)
 Construct as subset of points. More...
 
template<unsigned Size>
 treeBoundBox (const UList< point > &, const FixedList< label, Size > &indices)
 Construct as subset of points. More...
 
 treeBoundBox (Istream &)
 Construct from Istream. More...
 
scalar typDim () const
 Typical dimension length,height,width. More...
 
tmp< pointFieldpoints () const
 Vertex coordinates. In octant coding. More...
 
point corner (const direction) const
 Corner point given octant. More...
 
treeBoundBox subBbox (const direction) const
 Sub box given by octant number. Midpoint calculated. More...
 
treeBoundBox subBbox (const point &mid, const direction) const
 Sub box given by octant number. Midpoint provided. More...
 
direction subOctant (const point &pt) const
 Returns octant number given point and the calculated midpoint. More...
 
direction subOctant (const point &pt, bool &onEdge) const
 Returns octant number given point and the calculated midpoint. More...
 
void searchOrder (const point &pt, FixedList< direction, 8 > &octantOrder) const
 Calculates optimal order to look for nearest to point. More...
 
bool intersects (const point &overallStart, const vector &overallVec, const point &start, const point &end, point &pt, direction &ptBits) const
 Intersects segment; set point to intersection position and face,. More...
 
bool intersects (const point &start, const point &end, point &pt) const
 Like above but does not return faces point is on. More...
 
bool contains (const vector &dir, const point &) const
 Contains point (inside or on edge) and moving in direction. More...
 
direction faceBits (const point &) const
 Code position of point on bounding box faces. More...
 
direction posBits (const point &) const
 Position of point relative to bounding box. More...
 
void calcExtremities (const point &pt, point &nearest, point &furthest) const
 Calculate nearest and furthest (to point) vertex coords of. More...
 
scalar maxDist (const point &) const
 Returns distance point to furthest away corner. More...
 
label distanceCmp (const point &, const treeBoundBox &other) const
 Compare distance to point with other bounding box. More...
 
treeBoundBox extend (Random &, const scalar s) const
 Return slightly wider bounding box. More...
 
- Public Member Functions inherited from boundBox
 boundBox ()
 Construct null, setting points to zero. More...
 
 boundBox (const point &min, const point &max)
 Construct from components. More...
 
 boundBox (const UList< point > &, const bool doReduce=true)
 Construct as the bounding box of the given points. More...
 
 boundBox (const tmp< pointField > &, const bool doReduce=true)
 Construct as the bounding box of the given temporary pointField. More...
 
 boundBox (const UList< point > &, const labelUList &indices, const bool doReduce=true)
 Construct bounding box as subset of the pointField. More...
 
template<unsigned Size>
 boundBox (const UList< point > &, const FixedList< label, Size > &indices, const bool doReduce=true)
 Construct bounding box as subset of the pointField. More...
 
 boundBox (Istream &)
 Construct from Istream. More...
 
const pointmin () const
 Minimum describing the bounding box. More...
 
const pointmax () const
 Maximum describing the bounding box. More...
 
pointmin ()
 Minimum describing the bounding box, non-const access. More...
 
pointmax ()
 Maximum describing the bounding box, non-const access. More...
 
point midpoint () const
 The midpoint of the bounding box. More...
 
vector span () const
 The bounding box span (from minimum to maximum) More...
 
scalar mag () const
 The magnitude of the bounding box span. More...
 
scalar volume () const
 The volume of the bound box. More...
 
scalar minDim () const
 Smallest length/height/width dimension. More...
 
scalar maxDim () const
 Largest length/height/width dimension. More...
 
scalar avgDim () const
 Average length/height/width dimension. More...
 
tmp< pointFieldpoints () const
 Return corner points in an order corresponding to a 'hex' cell. More...
 
void inflate (const scalar s)
 Inflate box by factor*mag(span) in all dimensions. More...
 
bool overlaps (const boundBox &) const
 Overlaps/touches boundingBox? More...
 
bool overlaps (const point &, const scalar radiusSqr) const
 Overlaps boundingSphere (centre + sqr(radius))? More...
 
bool contains (const point &) const
 Contains point? (inside or on edge) More...
 
bool contains (const boundBox &) const
 Fully contains other boundingBox? More...
 
bool containsInside (const point &) const
 Contains point? (inside only) More...
 
bool contains (const UList< point > &) const
 Contains all of the points? (inside or on edge) More...
 
bool contains (const UList< point > &, const labelUList &indices) const
 Contains all of the points? (inside or on edge) More...
 
template<unsigned Size>
bool contains (const UList< point > &, const FixedList< label, Size > &indices) const
 Contains all of the points? (inside or on edge) More...
 
bool containsAny (const UList< point > &) const
 Contains any of the points? (inside or on edge) More...
 
bool containsAny (const UList< point > &, const labelUList &indices) const
 Contains any of the points? (inside or on edge) More...
 
template<unsigned Size>
bool containsAny (const UList< point > &, const FixedList< label, Size > &indices) const
 Contains any of the points? (inside or on edge) More...
 
point nearest (const point &) const
 Return the nearest point on the boundBox to the supplied point. More...
 

Static Public Member Functions

static direction subOctant (const point &mid, const point &pt)
 Returns octant number given point and midpoint. More...
 
static direction subOctant (const point &mid, const point &pt, bool &onEdge)
 Returns octant number given point and midpoint. More...
 
static direction subOctant (const point &mid, const vector &dir, const point &pt, bool &onEdge)
 Returns octant number given intersection and midpoint. More...
 
- Static Public Member Functions inherited from boundBox
static faceList faces ()
 Return faces with correct point order. More...
 

Static Public Attributes

static const scalar great
 The great value used for greatBox and invertedBox. More...
 
static const treeBoundBox greatBox
 As per boundBox::greatBox, but with GREAT instead of VGREAT. More...
 
static const treeBoundBox invertedBox
 As per boundBox::invertedBox, but with GREAT instead of VGREAT. More...
 
static const faceList faces
 Face to point addressing. More...
 
static const edgeList edges
 Edge to point addressing. More...
 
static const FixedList< vector, 6 > faceNormals
 Per face the unit normal. More...
 
- Static Public Attributes inherited from boundBox
static const scalar great
 The great value used for greatBox and invertedBox. More...
 
static const boundBox greatBox
 A very large boundBox: min/max == -/+ VGREAT. More...
 
static const boundBox invertedBox
 A very large inverted boundBox: min/max == +/- VGREAT. More...
 

Friends

bool operator== (const treeBoundBox &, const treeBoundBox &)
 
bool operator!= (const treeBoundBox &, const treeBoundBox &)
 
Istreamoperator>> (Istream &is, treeBoundBox &)
 
Ostreamoperator<< (Ostream &os, const treeBoundBox &)
 

Detailed Description

Standard boundBox + extra functionality for use in octree.

Numbering of corner points is according to octant numbering.

On the back plane (z=0):

    Y
    ^
    |
    +--------+
    |2      3|
    |        |
    |        |
    |        |
    |0      1|
    +--------+->X

For the front plane add 4 to the point labels.

Source files

Definition at line 75 of file treeBoundBox.H.

Member Enumeration Documentation

enum octantBit

Bits used for octant/point coding.

Every octant/corner point is the combination of three faces.

Enumerator
RIGHTHALF 
TOPHALF 
FRONTHALF 

Definition at line 103 of file treeBoundBox.H.

enum faceId

Face codes.

Enumerator
LEFT 
RIGHT 
BOTTOM 
TOP 
BACK 
FRONT 

Definition at line 111 of file treeBoundBox.H.

enum faceBit

Bits used for face coding.

Enumerator
NOFACE 
LEFTBIT 
RIGHTBIT 
BOTTOMBIT 
TOPBIT 
BACKBIT 
FRONTBIT 

Definition at line 122 of file treeBoundBox.H.

enum edgeId

Edges codes.

E01 = edge between 0 and 1.

Enumerator
E01 
E13 
E23 
E02 
E45 
E57 
E67 
E46 
E04 
E15 
E37 
E26 

Definition at line 135 of file treeBoundBox.H.

Constructor & Destructor Documentation

treeBoundBox ( )
inline

Construct null setting points to zero.

Definition at line 31 of file treeBoundBoxI.H.

Referenced by treeBoundBox::treeBoundBox().

Here is the caller graph for this function:

treeBoundBox ( const boundBox bb)
inlineexplicit

Construct from a boundBox.

Definition at line 43 of file treeBoundBoxI.H.

treeBoundBox ( const point min,
const point max 
)
inline

Construct from components.

Definition at line 37 of file treeBoundBoxI.H.

treeBoundBox ( const UList< point > &  points)
explicit

Construct as the bounding box of the given pointField.

Local processor domain only (no reduce as in boundBox)

Definition at line 127 of file treeBoundBox.C.

References UList< T >::empty(), Foam::endl(), treeBoundBox::treeBoundBox(), and WarningIn.

Here is the call graph for this function:

treeBoundBox ( const UList< point > &  points,
const labelUList indices 
)

Construct as subset of points.

Local processor domain only (no reduce as in boundBox)

Definition at line 145 of file treeBoundBox.C.

References UList< T >::empty(), Foam::endl(), and WarningIn.

Here is the call graph for this function:

treeBoundBox ( const UList< point > &  points,
const FixedList< label, Size > &  indices 
)

Construct as subset of points.

The indices could be from edge/triFace etc. Local processor domain only (no reduce as in boundBox)

Definition at line 35 of file treeBoundBoxTemplates.C.

References UList< T >::empty(), Foam::endl(), and WarningIn.

Here is the call graph for this function:

treeBoundBox ( Istream is)
inline

Construct from Istream.

Definition at line 49 of file treeBoundBoxI.H.

Member Function Documentation

Foam::scalar typDim ( ) const
inline

Typical dimension length,height,width.

Definition at line 57 of file treeBoundBoxI.H.

References boundBox::avgDim().

Here is the call graph for this function:

Foam::tmp< Foam::pointField > points ( ) const

Vertex coordinates. In octant coding.

Definition at line 168 of file treeBoundBox.C.

References treeBoundBox::corner(), and forAll.

Referenced by searchableBox::boundingSpheres(), searchableBox::coordinates(), indexedOctree< Type >::findLine(), dynamicIndexedOctree< Type >::findNearest(), and searchableBox::points().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::point corner ( const direction  octant) const
inline

Corner point given octant.

Definition at line 63 of file treeBoundBoxI.H.

References treeBoundBox::FRONTHALF, boundBox::max(), boundBox::min(), treeBoundBox::RIGHTHALF, treeBoundBox::TOPHALF, x, and y.

Referenced by treeBoundBox::points().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::treeBoundBox subBbox ( const direction  octant) const
Foam::treeBoundBox subBbox ( const point mid,
const direction  octant 
) const

Sub box given by octant number. Midpoint provided.

Definition at line 191 of file treeBoundBox.C.

References Foam::abort(), Foam::FatalError, FatalErrorIn, treeBoundBox::FRONTHALF, treeBoundBox::intersects(), boundBox::max(), boundBox::min(), treeBoundBox::RIGHTHALF, treeBoundBox::TOPHALF, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Here is the call graph for this function:

Foam::direction subOctant ( const point pt) const
inline

Returns octant number given point and the calculated midpoint.

Definition at line 75 of file treeBoundBoxI.H.

References boundBox::midpoint().

Referenced by dynamicIndexedOctree< Type >::findNode(), indexedOctree< Type >::findNode(), dynamicIndexedOctree< Type >::overlaps(), indexedOctree< Type >::overlaps(), and treeBoundBox::subOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::direction subOctant ( const point mid,
const point pt 
)
inlinestatic

Returns octant number given point and midpoint.

Definition at line 84 of file treeBoundBoxI.H.

References treeBoundBox::FRONTHALF, treeBoundBox::RIGHTHALF, treeBoundBox::subOctant(), treeBoundBox::TOPHALF, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Here is the call graph for this function:

Foam::direction subOctant ( const point pt,
bool &  onEdge 
) const
inline

Returns octant number given point and the calculated midpoint.

onEdge set if the point is on edge of subOctant

Definition at line 113 of file treeBoundBoxI.H.

References boundBox::midpoint(), and treeBoundBox::subOctant().

Here is the call graph for this function:

Foam::direction subOctant ( const point mid,
const point pt,
bool &  onEdge 
)
inlinestatic

Returns octant number given point and midpoint.

onEdge set if the point is on edge of subOctant

Definition at line 125 of file treeBoundBoxI.H.

References treeBoundBox::FRONTHALF, treeBoundBox::RIGHTHALF, treeBoundBox::subOctant(), treeBoundBox::TOPHALF, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Here is the call graph for this function:

Foam::direction subOctant ( const point mid,
const vector dir,
const point pt,
bool &  onEdge 
)
inlinestatic

Returns octant number given intersection and midpoint.

onEdge set if the point is on edge of subOctant If onEdge, the direction vector determines which octant to use (acc. to which octant the point would be if it were moved along dir)

Definition at line 170 of file treeBoundBoxI.H.

References treeBoundBox::FRONTHALF, treeBoundBox::RIGHTHALF, treeBoundBox::searchOrder(), treeBoundBox::TOPHALF, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Here is the call graph for this function:

void searchOrder ( const point pt,
FixedList< direction, 8 > &  octantOrder 
) const
inline

Calculates optimal order to look for nearest to point.

First will be the octant containing the point, second the octant with boundary nearest to the point etc.

Definition at line 226 of file treeBoundBoxI.H.

References treeBoundBox::extend(), treeBoundBox::FRONTHALF, boundBox::max(), boundBox::midpoint(), boundBox::min(), treeBoundBox::RIGHTHALF, treeBoundBox::TOPHALF, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Referenced by dynamicIndexedOctree< Type >::findNearest(), indexedOctree< Type >::findNearest(), and treeBoundBox::subOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

bool intersects ( const point overallStart,
const vector overallVec,
const point start,
const point end,
point pt,
direction ptBits 
) const

Intersects segment; set point to intersection position and face,.

return true if intersection found. (pt argument used during calculation even if not intersecting). Calculates intersections from outside supplied vector (overallStart, overallVec). This is so when e.g. tracking through lots of consecutive boxes (typical octree) we're not accumulating truncation errors. Set to start, (end-start) if not used.

Definition at line 260 of file treeBoundBox.C.

References treeBoundBox::BACKBIT, treeBoundBox::BOTTOMBIT, treeBoundBox::faceBits(), treeBoundBox::FRONTBIT, treeBoundBox::LEFTBIT, Foam::mag(), boundBox::max(), boundBox::min(), treeBoundBox::posBits(), treeBoundBox::RIGHTBIT, s(), treeBoundBox::TOPBIT, Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Referenced by indexedOctree< Type >::findLine(), dynamicIndexedOctree< Type >::findNearest(), indexedOctree< Type >::findNearest(), triangleFuncs::intersectBb(), treeBoundBox::intersects(), NamedEnum< Enum, nEnum >::names(), treeDataEdge::overlaps(), and treeBoundBox::subBbox().

Here is the call graph for this function:

Here is the caller graph for this function:

bool intersects ( const point start,
const point end,
point pt 
) const

Like above but does not return faces point is on.

Definition at line 391 of file treeBoundBox.C.

References treeBoundBox::intersects().

Here is the call graph for this function:

bool contains ( const vector dir,
const point pt 
) const

Contains point (inside or on edge) and moving in direction.

dir would cause it to go inside.

Definition at line 402 of file treeBoundBox.C.

References boundBox::max(), and boundBox::min().

Referenced by dynamicTreeDataPoint::findNearest(), dynamicIndexedOctree< Type >::findNearest(), indexedOctree< Type >::findNearest(), dynamicIndexedOctree< Type >::findNode(), indexedOctree< Type >::findNode(), conformalVoronoiMesh::maxSurfaceProtrusion(), NamedEnum< Enum, nEnum >::names(), dynamicTreeDataPoint::overlaps(), and treeDataPoint::overlaps().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::direction faceBits ( const point pt) const
Foam::direction posBits ( const point pt) const
void calcExtremities ( const point pt,
point nearest,
point furthest 
) const

Calculate nearest and furthest (to point) vertex coords of.

bounding box

Definition at line 513 of file treeBoundBox.C.

References Foam::mag(), boundBox::max(), boundBox::min(), x, Vector< Cmpt >::x(), y, Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Referenced by treeBoundBox::distanceCmp(), treeBoundBox::maxDist(), and treeBoundBox::posBits().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::scalar maxDist ( const point pt) const

Returns distance point to furthest away corner.

Definition at line 560 of file treeBoundBox.C.

References treeBoundBox::calcExtremities(), treeBoundBox::distanceCmp(), and Foam::mag().

Here is the call graph for this function:

Foam::label distanceCmp ( const point pt,
const treeBoundBox other 
) const

Compare distance to point with other bounding box.

return: -1 : all vertices of my bounding box are nearer than any of other +1 : all vertices of my bounding box are further away than any of other 0 : none of the above.

Definition at line 573 of file treeBoundBox.C.

References Foam::constant::physicoChemical::b, treeBoundBox::calcExtremities(), Foam::operator!=(), Foam::operator<<(), Foam::operator==(), Foam::operator>>(), Foam::sqr(), Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

Referenced by treeBoundBox::maxDist().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::treeBoundBox extend ( Random rndGen,
const scalar  s 
) const
inline

Return slightly wider bounding box.

Extends all dimensions with s*span*Random::scalar01() and guarantees in any direction s*mag(span) minimum width

Definition at line 317 of file treeBoundBoxI.H.

References Foam::cmptMultiply(), Foam::mag(), boundBox::max(), Foam::max(), boundBox::min(), VectorSpace< Vector< Cmpt >, Cmpt, 3 >::nComponents, boundBox::span(), and Random::vector01().

Referenced by meshSearch::boundaryTree(), meshSearch::cellTree(), polyMesh::cellTree(), meshRefinement::distribute(), triSurfaceMesh::edgeTree(), nearestEqOp::operator()(), refinementFeatures::regionEdgeTrees(), treeBoundBox::searchOrder(), triSurfaceSearch::tree(), and triSurfaceRegionSearch::treeByRegion().

Here is the call graph for this function:

Here is the caller graph for this function:

Friends And Related Function Documentation

bool operator== ( const treeBoundBox ,
const treeBoundBox  
)
friend
bool operator!= ( const treeBoundBox ,
const treeBoundBox  
)
friend
Istream& operator>> ( Istream is,
treeBoundBox  
)
friend
Ostream& operator<< ( Ostream os,
const treeBoundBox  
)
friend

Member Data Documentation

const Foam::scalar great
static

The great value used for greatBox and invertedBox.

Definition at line 93 of file treeBoundBox.H.

const Foam::treeBoundBox greatBox
static

As per boundBox::greatBox, but with GREAT instead of VGREAT.

Definition at line 96 of file treeBoundBox.H.

const Foam::treeBoundBox invertedBox
static

As per boundBox::invertedBox, but with GREAT instead of VGREAT.

Definition at line 99 of file treeBoundBox.H.

const Foam::faceList faces
static

Face to point addressing.

Definition at line 154 of file treeBoundBox.H.

const Foam::edgeList edges
static

Edge to point addressing.

Definition at line 157 of file treeBoundBox.H.

const Foam::FixedList< Foam::vector, 6 > faceNormals
static

Per face the unit normal.

Definition at line 160 of file treeBoundBox.H.

Referenced by searchableBox::getNormal().


The documentation for this class was generated from the following files: