FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

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.

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.

Friends

bool  operator== (const treeBoundBox &, const treeBoundBox &)
bool  operator!= (const treeBoundBox &, const treeBoundBox &)
Istream &  operator>> (Istream &is, treeBoundBox &)
Ostream &  operator<< (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  ) [inline, explicit]

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(), Foam::max(), boundBox::max(), Foam::min(), 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  
) [inline, static]

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  
) [inline, static]

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  
) [inline, static]

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< Cmpt >, Cmpt, 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(), treeDataFace::intersects(), and treeDataCell::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< Cmpt >, Cmpt, 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 octreeDataTriSurface::getSampleType(), octreeDataFace::getSampleType(), and octreeDataFaceList::getSampleType().

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.

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: