VR-Forces 5.0.3 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Public Member Functions | Protected Attributes | Private Types | Private Member Functions
DtSpatialVrfObjectManagerHybrid Class Reference

Spatial object manager which uses both an octree and a spatialindex. It is a wrapper for the DtSpatialVrfObjectManagerOctree and DtSpatialVrfObjectManagerSpatialIndex classes The octree contains the multi-point objects - i.e. areas The spatialindex contains the single-point objects - i.e. humans It utilizes the better nehavior from both containers.

Inheritance diagram for DtSpatialVrfObjectManagerHybrid:
Inheritance graph
[legend]

Public Member Functions

 DtSpatialVrfObjectManagerHybrid (const DtManagedObjectListConstPtr &vrfObjList, const Coordinate_System *coordSys)
 
virtual ~DtSpatialVrfObjectManagerHybrid ()
 
virtual void addVrfObjects (const DtManagedObjectListConstPtr &vrfObjects) override
 
virtual void removeVrfObject (const DtSimObject *vrfObject) override
 
virtual bool setResolutions (unsigned int xRes, unsigned int yRes, unsigned int zRes) override
 
virtual void clearVrfObjects () override
 
virtual void reset (const DtManagedObjectListConstPtr &vrfObjects) override
 
virtual bool getVrfObjects (const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const override
 
virtual bool getVrfObjects (const DtVrfObjectPredicate &predicate, const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const override
 
virtual bool getVrfObjects (const DtChord &chord, std::list< const DtSimObject * > &objects) const override
 
virtual bool getVrfObjects (const DtVrfObjectPredicate &predicate, const DtChord &chord, std::list< const DtSimObject * > &objects) const override
 
virtual void visitVrfObjects (const DtExtent &extent, DtSpatialSelectionFunctor &callback) const override
 
virtual void visitVrfObjects (const DtChord &chord, DtSpatialSelectionFunctor &callback) const override
 
unsigned int numObjects () const override
 
- Public Member Functions inherited from DtSpatialVrfObjectManagerInterface
virtual ~DtSpatialVrfObjectManagerInterface ()
 

Protected Attributes

DtExtent myRootExtent
 
DtOctree< const DtSimObject > * myOctree
 
std::shared_ptr
< MAK::SpatialIndex< const
DtSimObject * > > 
mySpatialIndex
 
double myObjectMaxLength
 
double myObjectMaxWidth
 
double myObjectMaxHeight
 
Container myVrfObjectsMultiPoint
 
Container myVrfObjectsSinglePoint
 
double myLastTimeEvaluated
 
const Coordinate_SystemmyCoordSys
 

Private Types

typedef std::map< unsigned
long long,
DtSimObjectReference
Container
 

Private Member Functions

void splitVrfObjectsSingleMultiPoint (const DtManagedObjectListConstPtr &vrfObjects, Container &vrfObjectsMultiPoint, Container &vrfObjectsSinglePoint)
 
bool IsVrfObjectsSinglePoint (const DtSimObject *vrfObject)
 
void combineVrfObjectsSingleMultiPoint (const DtVrfConstObjectUniqueContainer &vrfObjectsMultiPoint, const DtVrfConstObjectUniqueContainer &vrfObjectsSinglePoint, DtVrfConstObjectUniqueContainer &vrfObjects) const
 
void combineVrfObjectsSingleMultiPoint (const std::list< const DtSimObject * > &vrfObjectsMultiPoint, const std::list< const DtSimObject * > &vrfObjectsSinglePoint, std::list< const DtSimObject * > &vrfObjects) const
 
void resetObjectMaxSize ()
 
void updateObjectMaxSize (const Dt3dBoundingVolume &boundingVolume)
 
void resetOctree (const Container &vrfObjects)
 
void addVrfObjectsOctree (const Container &vrfObjects)
 
void removeVrfObjectOctree (const DtSimObject *vrfObject)
 
void clearVrfObjectsOctree ()
 
bool getVrfObjectsOctree (const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const
 
bool getVrfObjectsOctree (const DtVrfObjectPredicate &predicate, const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const
 
bool getVrfObjectsOctree (const DtChord &chord, std::list< const DtSimObject * > &objects) const
 
bool getVrfObjectsOctree (const DtVrfObjectPredicate &predicate, const DtChord &chord, std::list< const DtSimObject * > &objects) const
 
void visitVrfObjectsOctree (const DtExtent &extent, DtSpatialSelectionFunctor &callback) const
 
void visitVrfObjectsOctree (const DtChord &chord, DtSpatialSelectionFunctor &callback) const
 
void resetSpatialIndex (const Container &vrfObjects)
 
void addVrfObjectsSpatialIndex (const Container &vrfObjects)
 
void removeVrfObjectSpatialIndex (const DtSimObject *vrfObject)
 
void clearVrfObjectsSpatialIndex ()
 
bool getVrfObjectsSpatialIndex (const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const
 
bool getVrfObjectsSpatialIndex (const DtVrfObjectPredicate &predicate, const DtExtent &extent, DtVrfConstObjectUniqueContainer &objects) const
 
bool getVrfObjectsSpatialIndex (const DtChord &chord, const double delta, std::list< const DtSimObject * > &objects) const
 
bool getVrfObjectsSpatialIndex (const DtVrfObjectPredicate &predicate, const DtChord &chord, const double delta, std::list< const DtSimObject * > &objects) const
 
void visitVrfObjectsSpatialIndex (const DtExtent &extent, DtSpatialSelectionFunctor &callback) const
 
void visitVrfObjectsSpatialIndex (const DtChord &chord, const double delta, DtSpatialSelectionFunctor &callback) const
 
DtExtent expandExtentSpatialIndex (const DtExtent &extent) const
 
DtChord expandChordSpatialIndex (const DtChord &chord) const
 
double getChordDeltaSpatialIndex () const
 
 DtSpatialVrfObjectManagerHybrid ()
 
 DtSpatialVrfObjectManagerHybrid (const DtSpatialVrfObjectManagerHybrid &orig)
 
DtSpatialVrfObjectManagerHybridoperator= (const DtSpatialVrfObjectManagerHybrid &orig)
 
bool getVrfObjectsWithinSpatialIndex (const MAK::Vector3d &min, const MAK::Vector3d &max, DtVrfConstObjectUniqueContainer &objects) const
 
bool getVrfObjectsWithinSpatialIndex (const DtVrfObjectPredicate &predicate, const MAK::Vector3d &min, const MAK::Vector3d &max, DtVrfConstObjectUniqueContainer &objects) const
 
bool getVrfObjectsNearChordSpatialIndex (const MAK::Vector3d &pointA, const MAK::Vector3d &pointB, const double delta, std::list< const DtSimObject * > &objects) const
 
bool getVrfObjectsNearChordSpatialIndex (const DtVrfObjectPredicate &predicate, const MAK::Vector3d &pointA, const MAK::Vector3d &pointB, const double delta, std::list< const DtSimObject * > &objects) const
 

Additional Inherited Members

- Public Types inherited from DtSpatialVrfObjectManagerInterface
typedef std::vector< const
DtSimObject * > 
DtVrfObjectUniqueContainer
 
typedef std::vector< const
DtSimObject * > 
DtVrfConstObjectUniqueContainer
 
typedef std::vector< const
DtSimObject * > 
DtVrfObjectContainer
 

Member Typedef Documentation

Private class implementation details.

common functions

Constructor & Destructor Documentation

DtSpatialVrfObjectManagerHybrid::DtSpatialVrfObjectManagerHybrid ( )
private

Not implemented.

DtSpatialVrfObjectManagerHybrid::DtSpatialVrfObjectManagerHybrid ( const DtSpatialVrfObjectManagerHybrid orig)
private

Not implemented.

DtSpatialVrfObjectManagerHybrid::DtSpatialVrfObjectManagerHybrid ( const DtManagedObjectListConstPtr vrfObjList,
const Coordinate_System coordSys 
)
virtual DtSpatialVrfObjectManagerHybrid::~DtSpatialVrfObjectManagerHybrid ( )
virtual

Member Function Documentation

DtSpatialVrfObjectManagerHybrid& DtSpatialVrfObjectManagerHybrid::operator= ( const DtSpatialVrfObjectManagerHybrid orig)
private

Not implemented.

virtual void DtSpatialVrfObjectManagerHybrid::addVrfObjects ( const DtManagedObjectListConstPtr vrfObjects)
overridevirtual

Spatially sorts the vrfObjects associated in the vrfObjects.

Implements DtSpatialVrfObjectManagerInterface.

virtual void DtSpatialVrfObjectManagerHybrid::removeVrfObject ( const DtSimObject vrfObject)
overridevirtual

Removes vrfObject from the set of vrfObjects we are maintaining.

Parameters
vrfObjectPointer to the object to be removed.

Implements DtSpatialVrfObjectManagerInterface.

virtual bool DtSpatialVrfObjectManagerHybrid::setResolutions ( unsigned int  xRes,
unsigned int  yRes,
unsigned int  zRes 
)
overridevirtual

Doesn't do anything. Only here for interface compatibility.

Implements DtSpatialVrfObjectManagerInterface.

virtual void DtSpatialVrfObjectManagerHybrid::clearVrfObjects ( )
overridevirtual

Clears all managed objects from the manager. Does not affect the spatial container, other than to empty its cells of any elements.

Implements DtSpatialVrfObjectManagerInterface.

virtual void DtSpatialVrfObjectManagerHybrid::reset ( const DtManagedObjectListConstPtr vrfObjects)
overridevirtual

Clears out the current subdivision, sets it to have the minimum extent, that contains all of the DtSimObjects specified, and adds the specified DtSimObjects.

Note
This is provided as a memory optimization. Deleting and reallocating the spatial subdivision every tick was inefficient. So the spatial container is just cleared and resized to adjust for entities moving, being created destroyed, etc. This has the benefit of not causing a large memory reallocation, but at the disadvantage of not allowing the spatial subdivision to change its resolution.

Implements DtSpatialVrfObjectManagerInterface.

unsigned int DtSpatialVrfObjectManagerHybrid::numObjects ( ) const
inlineoverridevirtual

Number of objects in the octree.

Implements DtSpatialVrfObjectManagerInterface.

void DtSpatialVrfObjectManagerHybrid::splitVrfObjectsSingleMultiPoint ( const DtManagedObjectListConstPtr vrfObjects,
Container vrfObjectsMultiPoint,
Container vrfObjectsSinglePoint 
)
private
bool DtSpatialVrfObjectManagerHybrid::IsVrfObjectsSinglePoint ( const DtSimObject vrfObject)
private
void DtSpatialVrfObjectManagerHybrid::combineVrfObjectsSingleMultiPoint ( const DtVrfConstObjectUniqueContainer vrfObjectsMultiPoint,
const DtVrfConstObjectUniqueContainer vrfObjectsSinglePoint,
DtVrfConstObjectUniqueContainer vrfObjects 
) const
private
void DtSpatialVrfObjectManagerHybrid::combineVrfObjectsSingleMultiPoint ( const std::list< const DtSimObject * > &  vrfObjectsMultiPoint,
const std::list< const DtSimObject * > &  vrfObjectsSinglePoint,
std::list< const DtSimObject * > &  vrfObjects 
) const
private
void DtSpatialVrfObjectManagerHybrid::resetObjectMaxSize ( )
private
void DtSpatialVrfObjectManagerHybrid::updateObjectMaxSize ( const Dt3dBoundingVolume &  boundingVolume)
private
void DtSpatialVrfObjectManagerHybrid::resetOctree ( const Container vrfObjects)
private

octree specific functions

void DtSpatialVrfObjectManagerHybrid::addVrfObjectsOctree ( const Container vrfObjects)
private
void DtSpatialVrfObjectManagerHybrid::removeVrfObjectOctree ( const DtSimObject vrfObject)
private
void DtSpatialVrfObjectManagerHybrid::clearVrfObjectsOctree ( )
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsOctree ( const DtExtent extent,
DtVrfConstObjectUniqueContainer objects 
) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsOctree ( const DtVrfObjectPredicate predicate,
const DtExtent extent,
DtVrfConstObjectUniqueContainer objects 
) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsOctree ( const DtChord chord,
std::list< const DtSimObject * > &  objects 
) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsOctree ( const DtVrfObjectPredicate predicate,
const DtChord chord,
std::list< const DtSimObject * > &  objects 
) const
private
void DtSpatialVrfObjectManagerHybrid::visitVrfObjectsOctree ( const DtExtent extent,
DtSpatialSelectionFunctor callback 
) const
private
void DtSpatialVrfObjectManagerHybrid::visitVrfObjectsOctree ( const DtChord chord,
DtSpatialSelectionFunctor callback 
) const
private
void DtSpatialVrfObjectManagerHybrid::resetSpatialIndex ( const Container vrfObjects)
private

spatialindex specific functions

void DtSpatialVrfObjectManagerHybrid::addVrfObjectsSpatialIndex ( const Container vrfObjects)
private
void DtSpatialVrfObjectManagerHybrid::removeVrfObjectSpatialIndex ( const DtSimObject vrfObject)
private
void DtSpatialVrfObjectManagerHybrid::clearVrfObjectsSpatialIndex ( )
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsSpatialIndex ( const DtExtent extent,
DtVrfConstObjectUniqueContainer objects 
) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsSpatialIndex ( const DtVrfObjectPredicate predicate,
const DtExtent extent,
DtVrfConstObjectUniqueContainer objects 
) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsSpatialIndex ( const DtChord chord,
const double  delta,
std::list< const DtSimObject * > &  objects 
) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsSpatialIndex ( const DtVrfObjectPredicate predicate,
const DtChord chord,
const double  delta,
std::list< const DtSimObject * > &  objects 
) const
private
void DtSpatialVrfObjectManagerHybrid::visitVrfObjectsSpatialIndex ( const DtExtent extent,
DtSpatialSelectionFunctor callback 
) const
private
void DtSpatialVrfObjectManagerHybrid::visitVrfObjectsSpatialIndex ( const DtChord chord,
const double  delta,
DtSpatialSelectionFunctor callback 
) const
private
DtExtent DtSpatialVrfObjectManagerHybrid::expandExtentSpatialIndex ( const DtExtent extent) const
private
DtChord DtSpatialVrfObjectManagerHybrid::expandChordSpatialIndex ( const DtChord chord) const
private
double DtSpatialVrfObjectManagerHybrid::getChordDeltaSpatialIndex ( ) const
private
bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsWithinSpatialIndex ( const MAK::Vector3d &  min,
const MAK::Vector3d &  max,
DtVrfConstObjectUniqueContainer objects 
) const
private

Note that Wolrd Coordinates (geocentric) must be used for all MAK::Vector3d parameters.

bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsWithinSpatialIndex ( const DtVrfObjectPredicate predicate,
const MAK::Vector3d &  min,
const MAK::Vector3d &  max,
DtVrfConstObjectUniqueContainer objects 
) const
private

Note that Wolrd Coordinates (geocentric) must be used for all MAK::Vector3d parameters.

bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsNearChordSpatialIndex ( const MAK::Vector3d &  pointA,
const MAK::Vector3d &  pointB,
const double  delta,
std::list< const DtSimObject * > &  objects 
) const
private

Note that Wolrd Coordinates (geocentric) must be used for all MAK::Vector3d parameters.

bool DtSpatialVrfObjectManagerHybrid::getVrfObjectsNearChordSpatialIndex ( const DtVrfObjectPredicate predicate,
const MAK::Vector3d &  pointA,
const MAK::Vector3d &  pointB,
const double  delta,
std::list< const DtSimObject * > &  objects 
) const
private

Note that Wolrd Coordinates (geocentric) must be used for all MAK::Vector3d parameters.

Member Data Documentation

DtExtent DtSpatialVrfObjectManagerHybrid::myRootExtent
protected

The extent of the octree.

DtOctree<const DtSimObject>* DtSpatialVrfObjectManagerHybrid::myOctree
protected

The octree being used to store the objects.

std::shared_ptr<MAK::SpatialIndex<const DtSimObject*> > DtSpatialVrfObjectManagerHybrid::mySpatialIndex
protected

The SpatialIndex being used to store the objects.

double DtSpatialVrfObjectManagerHybrid::myObjectMaxLength
protected
double DtSpatialVrfObjectManagerHybrid::myObjectMaxWidth
protected
double DtSpatialVrfObjectManagerHybrid::myObjectMaxHeight
protected
Container DtSpatialVrfObjectManagerHybrid::myVrfObjectsMultiPoint
protected
Container DtSpatialVrfObjectManagerHybrid::myVrfObjectsSinglePoint
protected
double DtSpatialVrfObjectManagerHybrid::myLastTimeEvaluated
protected
const Coordinate_System* DtSpatialVrfObjectManagerHybrid::myCoordSys
protected

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

Document ID: Generated on Thu Jun 1 17:58:13 EDT 2023 from SVN revision 255404
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)