VR-Forces 4.1 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 
212  typedef boost::ptr_vector<MAKVRinTerra::DtObstacleFeatureSet> ObstacleSetVector;
214 
218 };
219 
221 bool DtSameOrAttached(const DtVrfObject* primaryEntity, const DtVrfObject& secondaryEntity);
222 
227 bool DtWithinDistance(const DtVector& startLocation,
228  const DtVector& endLocation,
229  double offset,
230  double distanceSquared,
231  double& actualDistanceSquared);
232 
233 
234 
237 template <typename T_Collision>
239 {
240 public:
241  DtClosestCollisionProcessor(T_Collision* initialCollision = 0);
243 
244  virtual void processCollision(const T_Collision& collision);
245 
246  virtual T_Collision* closestCollision();
247 
248 protected:
249  T_Collision* myClosestCollision;
251 
252 };
253 
256 template <typename T_Collision>
258 {
259 public:
260  typedef std::list<DtBoost::shared_ptr<T_Collision> > DtCollisionList;
261 
263  virtual ~DtAllCollisionProcessor();
264 
265  virtual void processCollision(const T_Collision& collision);
266 
267 protected:
269 };
270 
271 #define callbackList_inl_
272 #include "vrfmodel/collisionDetector.inl"
273 #undef callbackList_inl_
274 

Document ID: Generated on Tue Jan 29 18:21:16 EST 2013 from SVN revision 123193
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)