VR-Forces 4.2 Class Documentation
collisionDetector.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2004 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
6 
9 
12 
13 #pragma once
14 
16 #include "vrfobjcore/simCmpnt.h"
17 #include "vrfobjcore/vrfObjMgr.h"
20 
22 
23 #include <list>
24 #include <set>
25 #include <vector>
26 #include <boost/ptr_container/ptr_vector.hpp>
27 
28 class DtCollision;
29 class DtString;
30 class DtSimManager;
31 class Dt3dBoundingVolume;
32 class DtObjectType;
33 
36 template <typename T_Collision>
38 {
39 public:
41  virtual ~DtCollisionProcessor() {};
42 
43  virtual void processCollision(const T_Collision& collision) = 0;
44 };
45 
55 {
56 public:
57 
58  typedef std::set<DtObjectType> DtObjectObstructionIDContainer;
59  typedef std::set<DtVrfObject*> DtObjectObstructionContainer;
60  typedef std::list<DtRwString> DtFeatureTypeContainer;
61 
71  DtCollisionDetector(DtSimManager* simManager);
72 
74  virtual ~DtCollisionDetector();
75 
76 private:
79 
81  DtCollisionDetector& operator=(const DtCollisionDetector& orig);
82 
83 public:
84 
86  virtual void setObjectToIgnore(DtVrfObject* vrfObject);
87 
90  virtual void addObjectObstructionID(const DtObjectType& objectObstructionID);
91  virtual void removeObjectObstructionID(const DtObjectType& objectObstructionID);
92 
94  virtual void setObjectObstructionIDs(const DtObjectObstructionIDContainer& objectIDs);
95 
97  virtual void setFeatureObstructionTypes(const DtFeatureTypeContainer& featureTypes);
99 
111  virtual bool detectPotentialCollision(Dt3dBoundingVolume& collisionBv,
112  const DtVector& localPosition, const DtDcm& bvOrientation,
113  DtCollision*& potentialCollision);
114 
117  virtual bool detectAllEntityCollisions(Dt3dBoundingVolume& collisionBv,
118  const DtVector& localPosition, const DtDcm& bvOrientation,
119  std::list<DtBoost::shared_ptr<DtEntityCollision> >& collisionList);
120 
139  virtual bool getObjectObstructions(DtObjectObstructionContainer& objectObstructions) const;
140  virtual bool getObjectObstructions(Dt3dBoundingVolume& boundingVolume,
141  const DtVector& bvLocation, const DtDcm& bvOrientation,
142  DtObjectObstructionContainer& objectObstructions) const;
143 
154  virtual bool vrfObjectObstructionPredicate(const DtVrfObject& vrfObjectToTest) const;
155 
165  virtual bool checkForCollision(Dt3dBoundingVolume& collisionBV,
166  DtCollision& potentialCollision, const DtVector& localPosition,
167  const DtDcm& bvOrientation) const;
168 
169 protected:
178  bool detectNewClosestCollision(Dt3dBoundingVolume& collisionBV, DtCollision*& potentialCollision,
179  const DtVector& localPosition, const DtDcm& bvOrientation) const;
180 
190  bool detectObjectCollision(Dt3dBoundingVolume& collisionBV,
191  DtCollisionProcessor<DtEntityCollision>& collisionProcessor, const DtVector& localPosition,
192  const DtDcm& bvOrientation) const;
193  bool detectFeatureCollision(Dt3dBoundingVolume& collisionBV,
194  DtCollisionProcessor<DtFeatureCollision>&, const DtVector& localPosition, const DtDcm& bvOrientation) const;
195 
197  DtCollision* primaryCollision(DtCollision* firstCollision, DtCollision* secondCollision) const;
198 
200  bool testInvariant() const;
201 
202 protected:
205 
207 
210  boost::shared_ptr<MAKVRinTerra::DtObstacleFeatureSet::List> myObstructions;
211 
215 };
216 
218 bool DtSameOrAttached(const DtVrfObject* primaryEntity, const DtVrfObject& secondaryEntity);
219 
224 bool DtWithinDistance(const DtVector& startLocation,
225  const DtVector& endLocation,
226  double offset,
227  double distanceSquared,
228  double& actualDistanceSquared);
229 
230 
231 
234 template <typename T_Collision>
236 {
237 public:
238  DtClosestCollisionProcessor(T_Collision* initialCollision = 0);
240 
241  virtual void processCollision(const T_Collision& collision);
242 
243  virtual T_Collision* closestCollision();
244 
245 protected:
246  T_Collision* myClosestCollision;
248 
249 };
250 
253 template <typename T_Collision>
255 {
256 public:
257  typedef std::list<DtBoost::shared_ptr<T_Collision> > DtCollisionList;
258 
260  virtual ~DtAllCollisionProcessor();
261 
262  virtual void processCollision(const T_Collision& collision);
263 
264 protected:
266 };
267 
268 #define callbackList_inl_
269 #include "vrfmodel/collisionDetector.inl"
270 #undef callbackList_inl_
271 

Document ID: Generated on Sun Nov 24 19:49:21 EST 2013 from SVN revision 133924
Copyright © 2005-2013 VT MÄK. All Rights Reserved (www.mak.com)