Classes | Public Member Functions | Static Public Member Functions | Friends | List of all members
dynamicIndexedOctree< Type > Class Template Reference

Non-pointer based hierarchical recursive searching. Storage is dynamic, so elements can be deleted. More...

Inheritance diagram for dynamicIndexedOctree< Type >:
Inheritance graph
[legend]
Collaboration diagram for dynamicIndexedOctree< Type >:
Collaboration graph
[legend]

Classes

class  node
 Tree node. Has up pointer and down pointers. More...
 

Public Member Functions

 dynamicIndexedOctree (const Type &shapes, const treeBoundBox &bb, const label maxLevels, const scalar maxLeafRatio, const scalar maxDuplicity )
 Construct from shapes. More...
 
autoPtr< dynamicIndexedOctree< Type > > clone () const
 Clone. More...
 
const Type & shapes () const
 Reference to shape. More...
 
const List< node > & nodes () const
 List of all nodes. More...
 
const contentListListcontents () const
 List of all contents (referenced by those nodes that are. More...
 
const treeBoundBoxbb () const
 Top bounding box. More...
 
pointIndexHit findNearest (const point &sample, const scalar nearestDistSqr) const
 Calculate nearest point on nearest shape. More...
 
void findNearest (const label nodeI, const point &, scalar &nearestDistSqr, label &nearestShapeI, point &nearestPoint) const
 Low level: calculate nearest starting from subnode. More...
 
pointIndexHit findNearest (const linePointRef &ln, treeBoundBox &tightest, point &linePoint) const
 Find nearest to line. More...
 
pointIndexHit findLine (const point &start, const point &end) const
 Find nearest intersection of line between start and end. More...
 
pointIndexHit findLineAny (const point &start, const point &end) const
 Find any intersection of line between start and end. More...
 
labelList findBox (const treeBoundBox &bb) const
 Find (in no particular order) indices of all shapes inside or. More...
 
labelList findSphere (const point &centre, const scalar radiusSqr) const
 Find (in no particular order) indices of all shapes inside or. More...
 
labelBits findNode (const label nodeI, const point &) const
 Find deepest node (as parent+octant) containing point. Starts. More...
 
label findInside (const point &) const
 Find shape containing point. Only implemented for certain. More...
 
const labelListfindIndices (const point &) const
 Find the shape indices that occupy the result of findNode. More...
 
volumeType getVolumeType (const point &) const
 Determine type (inside/outside/mixed) for point. unknown if. More...
 
template<class CompareOp >
void findNear (const scalar nearDist, const dynamicIndexedOctree< Type > &tree2, CompareOp &cop) const
 Find near pairs and apply CompareOp to them. More...
 
bool insert (label startIndex, label endIndex)
 Insert a new object into the tree. More...
 
bool insertIndex (const label nodIndex, const label index, label &nLevels)
 
bool remove (const label index)
 Remove an object from the tree. More...
 
label removeIndex (const label nodIndex, const label index)
 
void print (prefixOSstream &, const bool printContents, const label) const
 Print tree. Either print all indices (printContent = true) or. More...
 
bool write (Ostream &os) const
 
void writeTreeInfo () const
 

Static Public Member Functions

static scalar & perturbTol ()
 Get the perturbation tolerance. More...
 
static bool isContent (const labelBits i)
 
static bool isEmpty (const labelBits i)
 
static bool isNode (const labelBits i)
 
static label getContent (const labelBits i)
 
static label getNode (const labelBits i)
 
static direction getOctant (const labelBits i)
 
static volumeType getSide (const vector &outsideNormal, const vector &vec)
 Helper function to return the side. Returns outside if. More...
 
static bool overlaps (const point &bbMin, const point &bbMax, const scalar nearestDistSqr, const point &sample)
 Helper: does bb intersect a sphere around sample? Or is any. More...
 

Friends

Ostreamoperator (Ostream &, const dynamicIndexedOctree< Type > &)
 

Detailed Description

template<class Type>
class Foam::dynamicIndexedOctree< Type >

Non-pointer based hierarchical recursive searching. Storage is dynamic, so elements can be deleted.

Source files

Definition at line 55 of file dynamicIndexedOctree.H.

Constructor & Destructor Documentation

dynamicIndexedOctree ( const Type &  shapes,
const treeBoundBox bb,
const label  maxLevels,
const scalar  maxLeafRatio,
const scalar  maxDuplicity 
)

Construct from shapes.

Definition at line 2312 of file dynamicIndexedOctree.C.

References insert().

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

Here is the call graph for this function:

Here is the caller graph for this function:

Member Function Documentation

Foam::scalar & perturbTol ( )
static

Get the perturbation tolerance.

Definition at line 2348 of file dynamicIndexedOctree.C.

autoPtr<dynamicIndexedOctree<Type> > clone ( ) const
inline

Clone.

Definition at line 437 of file dynamicIndexedOctree.H.

const Type& shapes ( ) const
inline

Reference to shape.

Definition at line 451 of file dynamicIndexedOctree.H.

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

Here is the caller graph for this function:

const List<node>& nodes ( ) const
inline

List of all nodes.

Definition at line 457 of file dynamicIndexedOctree.H.

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

Here is the caller graph for this function:

const contentListList& contents ( ) const
inline

List of all contents (referenced by those nodes that are.

contents)

Definition at line 464 of file dynamicIndexedOctree.H.

Referenced by dynamicIndexedOctree< Type >::findNearest(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::nodes().

Here is the caller graph for this function:

const treeBoundBox& bb ( ) const
inline

Top bounding box.

Definition at line 470 of file dynamicIndexedOctree.H.

Referenced by dynamicIndexedOctree< Type >::findNear().

Here is the caller graph for this function:

static bool isContent ( const labelBits  i)
inlinestatic

Definition at line 483 of file dynamicIndexedOctree.H.

Referenced by dynamicIndexedOctree< Type >::findNearest(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getContent().

Here is the caller graph for this function:

static bool isEmpty ( const labelBits  i)
inlinestatic

Definition at line 488 of file dynamicIndexedOctree.H.

static bool isNode ( const labelBits  i)
inlinestatic

Definition at line 493 of file dynamicIndexedOctree.H.

Referenced by dynamicIndexedOctree< Type >::findNearest(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getNode().

Here is the caller graph for this function:

static label getContent ( const labelBits  i)
inlinestatic

Definition at line 498 of file dynamicIndexedOctree.H.

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

Here is the caller graph for this function:

static label getNode ( const labelBits  i)
inlinestatic

Definition at line 508 of file dynamicIndexedOctree.H.

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

Here is the caller graph for this function:

static direction getOctant ( const labelBits  i)
inlinestatic

Definition at line 518 of file dynamicIndexedOctree.H.

Foam::pointIndexHit findNearest ( const point sample,
const scalar  nearestDistSqr 
) const

Calculate nearest point on nearest shape.

Returns

  • bool : any point found nearer than nearestDistSqr
  • label: index in shapes
  • point: actual nearest point found

Definition at line 2356 of file dynamicIndexedOctree.C.

void findNearest ( const label  nodeI,
const point sample,
scalar &  nearestDistSqr,
label nearestShapeI,
point nearestPoint 
) const
Foam::pointIndexHit findNearest ( const linePointRef ln,
treeBoundBox tightest,
point linePoint 
) const

Find nearest to line.

Returns

  • bool : any point found?
  • label: index in shapes
  • point: actual nearest point found sets:
  • linePoint : corresponding nearest point on line

Definition at line 2384 of file dynamicIndexedOctree.C.

Foam::pointIndexHit findLine ( const point start,
const point end 
) const

Find nearest intersection of line between start and end.

Definition at line 2418 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::findLineAny().

Here is the call graph for this function:

Foam::pointIndexHit findLineAny ( const point start,
const point end 
) const

Find any intersection of line between start and end.

Definition at line 2430 of file dynamicIndexedOctree.C.

Referenced by dynamicIndexedOctree< Type >::findLine(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the caller graph for this function:

Foam::labelList findBox ( const treeBoundBox bb) const

Find (in no particular order) indices of all shapes inside or.

overlapping bounding box (i.e. all shapes not outside box)

Definition at line 2441 of file dynamicIndexedOctree.C.

References HashTable< T, Key, Hash >::toc().

Here is the call graph for this function:

Foam::labelList findSphere ( const point centre,
const scalar  radiusSqr 
) const

Find (in no particular order) indices of all shapes inside or.

overlapping a bounding sphere (i.e. all shapes not outside sphere)

Definition at line 2459 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::findNode(), and HashTable< T, Key, Hash >::toc().

Here is the call graph for this function:

Foam::labelBits findNode ( const label  nodeI,
const point sample 
) const

Find deepest node (as parent+octant) containing point. Starts.

off from starting index in nodes_ (use 0 to start from top) Use getNode and getOctant to extract info, or call findIndices.

Definition at line 2479 of file dynamicIndexedOctree.C.

References Foam::abort(), dynamicIndexedOctree< Type >::node::bb_, treeBoundBox::contains(), Foam::FatalError, FatalErrorIn, dynamicIndexedOctree< Type >::findInside(), dynamicIndexedOctree< Type >::node::subNodes_, and treeBoundBox::subOctant().

Referenced by dynamicIndexedOctree< Type >::findSphere(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

Foam::label findInside ( const point sample) const

Find shape containing point. Only implemented for certain.

shapes.

Definition at line 2526 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::findIndices(), forAll, and dynamicIndexedOctree< Type >::node::subNodes_.

Referenced by dynamicIndexedOctree< Type >::findNode(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

const Foam::labelList & findIndices ( const point sample) const

Find the shape indices that occupy the result of findNode.

Definition at line 2558 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::node::subNodes_.

Referenced by dynamicIndexedOctree< Type >::findInside(), and dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the caller graph for this function:

Foam::volumeType getVolumeType ( const point sample) const

Determine type (inside/outside/mixed) for point. unknown if.

cannot be determined (e.g. non-manifold surface)

Definition at line 2583 of file dynamicIndexedOctree.C.

References Foam::abort(), Foam::endl(), Foam::FatalError, FatalErrorIn, forAll, Foam::Pout, and Foam::type().

Here is the call graph for this function:

Foam::volumeType getSide ( const vector outsideNormal,
const vector vec 
)
static

Helper function to return the side. Returns outside if.

outsideNormal&vec >= 0, inside otherwise

Definition at line 470 of file dynamicIndexedOctree.C.

Referenced by dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant(), and dynamicIndexedOctree< Type >::overlaps().

Here is the caller graph for this function:

bool overlaps ( const point bbMin,
const point bbMax,
const scalar  nearestDistSqr,
const point sample 
)
static
void findNear ( const scalar  nearDist,
const dynamicIndexedOctree< Type > &  tree2,
CompareOp &  cop 
) const

Find near pairs and apply CompareOp to them.

tree2 can be *this or different tree.

Definition at line 2653 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::bb().

Here is the call graph for this function:

bool insert ( label  startIndex,
label  endIndex 
)

Insert a new object into the tree.

Definition at line 2675 of file dynamicIndexedOctree.C.

References Foam::divide(), dynamicIndexedOctree< Type >::insertIndex(), Foam::max(), and success.

Referenced by dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

bool insertIndex ( const label  nodIndex,
const label  index,
label nLevels 
)

Definition at line 2722 of file dynamicIndexedOctree.C.

References treeBoundBox::subBbox().

Referenced by dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant(), and dynamicIndexedOctree< Type >::insert().

Here is the call graph for this function:

Here is the caller graph for this function:

bool remove ( const label  index)

Remove an object from the tree.

Definition at line 2798 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::removeIndex().

Here is the call graph for this function:

Foam::label removeIndex ( const label  nodIndex,
const label  index 
)
void print ( prefixOSstream os,
const bool  printContents,
const label  nodeI 
) const

Print tree. Either print all indices (printContent = true) or.

just size of contents nodes.

Definition at line 2897 of file dynamicIndexedOctree.C.

References dynamicIndexedOctree< Type >::node::bb_, Foam::endl(), forAll, Foam::nl, dynamicIndexedOctree< Type >::node::parent_, prefixOSstream::prefix(), List< T >::size(), treeBoundBox::subBbox(), dynamicIndexedOctree< Type >::node::subNodes_, and Foam::meshTools::writeOBJ().

Referenced by dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant(), and dynamicIndexedOctree< Type >::removeIndex().

Here is the call graph for this function:

Here is the caller graph for this function:

bool write ( Ostream os) const

Definition at line 2996 of file dynamicIndexedOctree.C.

References Foam::endl(), forAll, and IOstream::good().

Referenced by dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

void writeTreeInfo ( ) const

Definition at line 2969 of file dynamicIndexedOctree.C.

References Foam::endl(), forAll, Foam::nl, and Foam::Pout.

Referenced by dynamicIndexedOctree< Foam::dynamicTreeDataPoint >::getOctant().

Here is the call graph for this function:

Here is the caller graph for this function:

Friends And Related Function Documentation

Ostream& operator ( Ostream ,
const dynamicIndexedOctree< Type > &   
)
friend

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