FreeFOAM The Cross-Platform CFD Toolkit
treeBoundBox Class Reference

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

#include <meshTools/treeBoundBox.H>


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.

+ Inheritance diagram for treeBoundBox:
+ Collaboration diagram for treeBoundBox:

List of all members.

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.
 treeBoundBox (const point &min, const point &max)
 Construct from components.
 treeBoundBox (const boundBox &bb)
 Construct from components.
 treeBoundBox (const UList< point > &)
 Construct as the bounding box of the given pointField.
 treeBoundBox (const UList< point > &, const UList< label > &meshPoints)
 Construct as subset of points.
 treeBoundBox (Istream &)
 Construct from Istream.
scalar typDim () const
 Typical dimension length,height,width.
pointField points () const
 vertex coordinates. In octant coding.
point corner (const direction) const
 Corner point given octant.
treeBoundBox subBbox (const direction) const
 Sub box given by octant number. Midpoint calculated.
treeBoundBox subBbox (const point &mid, const direction) const
 Sub box given by octant number. Midpoint provided.
direction subOctant (const point &pt) const
 Returns octant number given point and the calculated midpoint.
direction subOctant (const point &pt, bool &onEdge) const
 Returns octant number given point and the calculated midpoint.
void searchOrder (const point &pt, FixedList< direction, 8 > &octantOrder) const
 Calculates optimal order to look for nearest to point.
bool overlaps (const treeBoundBox &) const
 Overlaps other boundingbox?
bool overlaps (const point &, const scalar radiusSqr) const
 Overlaps boundingSphere (centre + sqr(radius))?
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,.
bool intersects (const point &start, const point &end, point &pt) const
 Like above but does not return faces point is on.
bool contains (const treeBoundBox &) const
 fully contains other boundingBox?
bool contains (const point &) const
 Contains point? (inside or on edge)
bool contains (const vector &dir, const point &) const
 Contains point (inside or on edge) and moving in direction.
direction faceBits (const point &pt) const
 Code position of pt on bounding box faces.
direction posBits (const point &) const
 Position of point relative to bounding box.
void calcExtremities (const point &pt, point &nearest, point &furthest) const
 Calculate nearest and furthest (to point) vertex coords of.
scalar maxDist (const point &) const
 Returns distance point to furthest away corner.
label distanceCmp (const point &, const treeBoundBox &other) const
 Compare distance to point with other bounding box.
treeBoundBox extend (Random &, const scalar s) const
 Return slightly wider bounding box.
- Public Member Functions inherited from boundBox
 boundBox ()
 Construct null, setting points to zero.
 boundBox (const point &min, const point &max)
 Construct from components.
 boundBox (const pointField &, const bool doReduce=true)
 Construct as the bounding box of the given pointField.
 boundBox (const tmp< pointField > &, const bool doReduce=true)
 Construct as the bounding box of the given temporary pointField.
 boundBox (Istream &)
 Construct from Istream.
const pointmin () const
 Minimum describing the bounding box.
const pointmax () const
 Maximum describing the bounding box.
pointmin ()
 Minimum describing the bounding box, non-const access.
pointmax ()
 Maximum describing the bounding box, non-const access.
point midpoint () const
 The midpoint of the bounding box.
vector span () const
 The bounding box span (from minimum to maximum)
scalar mag () const
 The magnitude of the bounding box span.
scalar minDim () const
 Smallest length/height/width dimension.
scalar maxDim () const
 Largest length/height/width dimension.
scalar avgDim () const
 Average length/height/width dimension.
bool overlaps (const boundBox &bb) const
 Overlaps/touches boundingBox?
bool containsInside (const point &pt) const
 Contains point? (inside only)

Static Public Member Functions

static direction neighbourFaceBits (const label &)
 Face on which neighbour is.
static direction subOctant (const point &mid, const point &pt)
 Returns octant number given point and midpoint.
static direction subOctant (const point &mid, const point &pt, bool &onEdge)
 Returns octant number given point and midpoint.
static direction subOctant (const point &mid, const vector &dir, const point &pt, bool &onEdge)
 Returns octant number given intersection and midpoint.

Static Public Attributes

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

Friends

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

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 100 of file treeBoundBox.H.

enum faceId

Face codes.

Enumerator:
LEFT 
RIGHT 
BOTTOM 
TOP 
BACK 
FRONT 

Definition at line 108 of file treeBoundBox.H.

enum faceBit

Bits used for face coding.

Enumerator:
NOFACE 
LEFTBIT 
RIGHTBIT 
BOTTOMBIT 
TOPBIT 
BACKBIT 
FRONTBIT 

Definition at line 119 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 132 of file treeBoundBox.H.


Constructor & Destructor Documentation

treeBoundBox ( )
inline

Construct null setting points to zero.

Definition at line 31 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 boundBox bb)
inlineexplicit

Construct from components.

Definition at line 43 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 115 of file treeBoundBox.C.

References UList< T >::empty(), Foam::endl(), boundBox::max(), boundBox::min(), UList< T >::size(), and WarningIn.

treeBoundBox ( const UList< point > &  points,
const UList< label > &  meshPoints 
)

Construct as subset of points.

Local processor domain only (no reduce as in boundBox)

Definition at line 143 of file treeBoundBox.C.

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

treeBoundBox ( Istream is)

Construct from Istream.

Definition at line 174 of file treeBoundBox.C.


Member Function Documentation

static direction neighbourFaceBits ( const label &  )
static

Face on which neighbour is.

Foam::scalar typDim ( ) const
inline

Typical dimension length,height,width.

Definition at line 51 of file treeBoundBoxI.H.

Foam::pointField points ( ) const

vertex coordinates. In octant coding.

Definition at line 182 of file treeBoundBox.C.

References forAll, and points.

Referenced by searchableBox::coordinates().

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

Corner point given octant.

Definition at line 57 of file treeBoundBoxI.H.

References Foam::max(), Foam::min(), and y.

Foam::treeBoundBox subBbox ( const direction  octant) const

Sub box given by octant number. Midpoint calculated.

Definition at line 194 of file treeBoundBox.C.

Referenced by indexedOctree< Type >::print(), and treeNode< Type >::setSubNodeType().

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

Returns octant number given point and the calculated midpoint.

Definition at line 69 of file treeBoundBoxI.H.

Referenced by indexedOctree< Type >::findNode().

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

Returns octant number given point and midpoint.

Definition at line 78 of file treeBoundBoxI.H.

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

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 107 of file treeBoundBoxI.H.

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 119 of file treeBoundBoxI.H.

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

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 164 of file treeBoundBoxI.H.

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

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 220 of file treeBoundBoxI.H.

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

Referenced by indexedOctree< Type >::findNearest().

bool overlaps ( const point centre,
const scalar  radiusSqr 
) const

Overlaps boundingSphere (centre + sqr(radius))?

Definition at line 253 of file treeBoundBox.C.

References Foam::mag(), Foam::max(), Foam::min(), and VectorSpace< Vector< scalar >, scalar, 3 >::nComponents.

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 310 of file treeBoundBox.C.

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

Referenced by triangleFuncs::intersectBb().

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

Like above but does not return faces point is on.

Definition at line 437 of file treeBoundBox.C.

bool contains ( const point pt) const
inline

Contains point? (inside or on edge)

Reimplemented from boundBox.

Definition at line 317 of file treeBoundBoxI.H.

References boundBox::contains().

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 455 of file treeBoundBox.C.

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

Foam::direction faceBits ( const point pt) const

Code position of pt on bounding box faces.

Definition at line 495 of file treeBoundBox.C.

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

Foam::direction posBits ( const point pt) const

Position of point relative to bounding box.

Definition at line 529 of file treeBoundBox.C.

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

Referenced by treeDataTriSurface::intersects(), treeDataCell::intersects(), and treeDataFace::intersects().

void calcExtremities ( const point pt,
point nearest,
point furthest 
) const
Foam::scalar maxDist ( const point pt) const

Returns distance point to furthest away corner.

Definition at line 613 of file treeBoundBox.C.

References Foam::mag().

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 626 of file treeBoundBox.C.

References treeBoundBox::calcExtremities(), Foam::sqr(), Vector< Cmpt >::x(), Vector< Cmpt >::y(), and Vector< Cmpt >::z().

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 325 of file treeBoundBoxI.H.

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

Referenced by meshRefinement::distribute(), triSurfaceMesh::edgeTree(), and triSurfaceMesh::tree().


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.

Reimplemented from boundBox.

Definition at line 90 of file treeBoundBox.H.

Referenced by octreeDataTriSurface::getSampleType(), and octreeDataFace::getSampleType().

const Foam::treeBoundBox greatBox
static

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

Reimplemented from boundBox.

Definition at line 93 of file treeBoundBox.H.

Referenced by octreeDataFaceList::getSampleType(), octreeDataTriSurface::getSampleType(), and octreeDataFace::getSampleType().

const Foam::treeBoundBox invertedBox
static

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

Reimplemented from boundBox.

Definition at line 96 of file treeBoundBox.H.

const Foam::faceList faces
static

Face to point addressing.

Definition at line 151 of file treeBoundBox.H.

Referenced by searchableBox::coordinates().

const Foam::edgeList edges
static

Edge to point addressing.

Definition at line 154 of file treeBoundBox.H.

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

Per face the unit normal.

Definition at line 157 of file treeBoundBox.H.

Referenced by searchableBox::getNormal().


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