VR-Forces 4.0.4 Class Documentation
include/vrfmodel/collisionDetector.h
Go to the documentation of this file.
00001 /*******************************************************************************
00002 ** Copyright (c) 2004 MAK Technologies, Inc.
00003 ** All rights reserved.
00004 *******************************************************************************/
00005 /*******************************************************************************
00006 ** $RCSfile: collisionDetector.h,v $ $Revision: 1.16 $ $State: Exp $
00007 *******************************************************************************/
00008 
00009 
00012 
00015 
00016 #ifndef collisionDetector_H_
00017 #define collisionDetector_H_
00018 
00019 #include "vrfmodel/vrfmodelDefines.h"
00020 #include "vrfobjcore/simCmpnt.h"
00021 #include "vrfobjcore/vrfObjMgr.h"
00022 #include "vrfobjcore/vectorObstruction.h"
00023 #include "vrfobjcore/entityCollision.h"
00024 #include "vrfobjcore/vectorObstructionCollision.h"
00025 #include "vrfobjcore/vectorObstructionID.h"
00026 #include "vlutil/vlSmartPointers.h"
00027 
00028 #include <list>
00029 #include <set>
00030 #include <vector>
00031 
00032 class DtCollision;
00033 class DtString;
00034 class DtSimManager;
00035 class Dt3dBoundingVolume;
00036 class DtObjectType;
00037 
00040 template <typename T_Collision>
00041 class DtCollisionProcessor
00042 {
00043 public:
00044    DtCollisionProcessor() {};
00045    virtual ~DtCollisionProcessor() {};
00046 
00047    virtual void processCollision(const T_Collision& collision) = 0;
00048 };
00049 
00057 class DT_DLL_vrfmodel DtCollisionDetector
00058 {
00059 public:
00060    
00061    typedef std::set<DtObjectType> DtObjectObstructionIDContainer;
00062    typedef DtObjectObstructionIDContainer::iterator DtObjectObstructionIDIter;
00063    typedef DtObjectObstructionIDContainer::const_iterator DtObjectObstructionIDConstIter;
00064    
00065    typedef std::list<DtVectorObstructionID> DtVectorObstructionIDContainer;
00066    typedef DtVectorObstructionIDContainer::iterator DtVectorObstructionIDIter;
00067    typedef DtVectorObstructionIDContainer::const_iterator DtVectorObstructionIDConstIter;
00068       
00069    typedef std::set<DtVrfObject*> DtObjectObstructionContainer;
00070    typedef DtObjectObstructionContainer::iterator DtObjectObstructionIter;
00071    typedef DtObjectObstructionContainer::const_iterator DtObjectObstructionConstIter;
00072 
00073    typedef std::set<DtVectorObstruction*> DtVectorObstructionContainer;
00074    typedef DtVectorObstructionContainer::iterator DtVectorObstructionIter;
00075    typedef DtVectorObstructionContainer::const_iterator DtVectorObstructionConstIter;
00076 
00077 
00087    DtCollisionDetector(DtSimManager* simManager);
00088 
00090    virtual ~DtCollisionDetector();
00091 
00092 private:
00094    DtCollisionDetector(const DtCollisionDetector& orig);
00095 
00097    DtCollisionDetector& operator=(const DtCollisionDetector& orig);
00098 
00099 public:
00100 
00102    virtual void setObjectToIgnore(DtVrfObject* vrfObject);
00103 
00106    virtual void addObjectObstructionID(const DtObjectType& objectObstructionID);
00107    virtual void addVectorObstructionID(const DtVectorObstructionID& vectorObstructionIDs);
00108 
00109    virtual void removeObjectObstructionID(const DtObjectType& objectObstructionID);
00110    virtual void removeVectorObstructionID(const DtVectorObstructionID& vectorObstructionID);
00111   
00113    virtual void setObjectObstructionIDs(const DtObjectObstructionIDContainer& objectIDs);
00115    virtual void setVectorObstructionIDs(const DtVectorObstructionIDContainer& vectorIDs);
00117 
00120    virtual DtObjectObstructionIDIter objectIDsBegin();
00121    virtual DtObjectObstructionIDConstIter objectIDsBegin() const;
00122 
00123    virtual DtVectorObstructionIDIter vectorIDsBegin();
00124    virtual DtVectorObstructionIDConstIter vectorIDsBegin() const;
00125 
00126    virtual DtObjectObstructionIDIter objectIDsEnd();
00127    virtual DtObjectObstructionIDConstIter objectIDsEnd() const;
00128 
00129    virtual DtVectorObstructionIDIter vectorIDsEnd();
00130    virtual DtVectorObstructionIDConstIter vectorIDsEnd() const;
00132 
00144    virtual bool detectPotentialCollision(Dt3dBoundingVolume& collisionBv,
00145       const DtVector& localPosition, const DtDcm& bvOrientation,
00146       DtCollision*& potentialCollision);
00147 
00150    virtual bool detectAllEntityCollisions(Dt3dBoundingVolume& collisionBv,
00151       const DtVector& localPosition, const DtDcm& bvOrientation,
00152       std::list<DtBoost::shared_ptr<DtEntityCollision> >& collisionList);
00153 
00172    virtual bool getObjectObstructions(DtObjectObstructionContainer& objectObstructions) const;
00173    virtual bool getObjectObstructions(Dt3dBoundingVolume& boundingVolume, 
00174       const DtVector& bvLocation, const DtDcm& bvOrientation,
00175       DtObjectObstructionContainer& objectObstructions) const;
00176 
00187    virtual bool vrfObjectObstructionPredicate(const DtVrfObject& vrfObjectToTest) const;
00188 
00189 
00206    virtual bool getVectorObstructions(DtVectorObstructionContainer& vectorObstructions) const;
00207    virtual bool getVectorObstructions(Dt3dBoundingVolume& boundingVolume, 
00208       const DtVector& bvLocation, const DtDcm& bvOrientation,
00209       DtVectorObstructionContainer& obstructionsToTest) const;
00210 
00220    virtual bool checkForCollision(Dt3dBoundingVolume& collisionBV, 
00221       DtCollision& potentialCollision, const DtVector& localPosition,
00222       const DtDcm& bvOrientation) const;
00223 
00224 protected:
00233    bool detectNewClosestCollision(Dt3dBoundingVolume& collisionBV, DtCollision*& potentialCollision,
00234       const DtVector& localPosition, const DtDcm& bvOrientation) const;
00235 
00245    bool detectObjectCollision(Dt3dBoundingVolume& collisionBV, 
00246       DtCollisionProcessor<DtEntityCollision>& collisionProcessor, const DtVector& localPosition, 
00247       const DtDcm& bvOrientation) const;
00248    bool detectVectorCollision(Dt3dBoundingVolume& collisionBV, 
00249       DtCollisionProcessor<DtVectorObstructionCollision>&, const DtVector& localPosition, const DtDcm& bvOrientation) const;
00250 
00252    DtCollision* primaryCollision(DtCollision* firstCollision, DtCollision* secondCollision) const;
00253 
00255    bool testInvariant() const;
00256 
00257 protected:
00259    DtObjectObstructionIDContainer myObjectObstructionIDs;
00260    DtVectorObstructionIDContainer myVectorObstructionIDs;
00261 
00262    DtSimManager* mySimManager;
00263 
00266    DtVrfObject* myObjectToIgnore;
00267 };
00268 
00270 bool DtSameOrAttached(const DtVrfObject* primaryEntity, const DtVrfObject& secondaryEntity);
00271 
00276 bool DtWithinDistance(const DtVector& startLocation,
00277                       const DtVector& endLocation,
00278                       double offset,
00279                       double distanceSquared,
00280                       double& actualDistanceSquared);
00281 
00282 
00283 
00286 template <typename T_Collision>
00287 class DtClosestCollisionProcessor : public DtCollisionProcessor<T_Collision>
00288 {
00289 public:
00290    DtClosestCollisionProcessor(T_Collision* initialCollision = 0);
00291    virtual ~DtClosestCollisionProcessor();
00292 
00293    virtual void processCollision(const T_Collision& collision);
00294 
00295    virtual T_Collision* closestCollision();
00296 
00297 protected:
00298    T_Collision* myClosestCollision;
00299    double myClosestCollisionDistanceSquared;
00300 
00301 };
00302 
00305 template <typename T_Collision>
00306 class DtAllCollisionProcessor : public DtCollisionProcessor<T_Collision>
00307 {
00308 public:
00309    typedef std::list<DtBoost::shared_ptr<T_Collision> > DtCollisionList;
00310 
00311    DtAllCollisionProcessor(DtCollisionList& collisionList);
00312    virtual ~DtAllCollisionProcessor();
00313 
00314    virtual void processCollision(const T_Collision& collision);
00315 
00316 protected:
00317    DtCollisionList& myCollisionList;
00318 };
00319 
00320 #define callbackList_inl_
00321 #include "vrfmodel/collisionDetector.inl"
00322 #undef  callbackList_inl_
00323 
00324 #endif

Document ID: Generated on Fri Jun 29 16:33:32 EDT 2012 from SVN revision 116588
Copyright © 2005-2012 VT MÄK Inc. All Rights Reserved (www.mak.com)