VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
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 
20 
21 #include <features/areaFeature.h>
22 
23 #include <list>
24 #include <set>
25 #include <vector>
26 #include <boost/unordered_set.hpp>
27 #include <boost/ptr_container/ptr_vector.hpp>
28 
29 class DtCollision;
30 class DtString;
31 class DtSimManager;
32 class Dt3dBoundingVolume;
33 class DtObjectType;
34 
37 template <typename T_Collision>
39 {
40 public:
42  virtual ~DtCollisionProcessor() {};
43 
44  virtual void processCollision(const T_Collision& collision) = 0;
45 };
46 
56 {
57 public:
58 
59  typedef std::set<DtObjectType> DtObjectObstructionIDContainer;
60  typedef boost::unordered_set<DtVrfObject*> DtObjectObstructionContainer;
61  typedef std::list<DtRwString> DtFeatureTypeContainer;
62 
72  DtCollisionDetector(DtSimManager* simManager);
73 
75  virtual ~DtCollisionDetector();
76 
77 private:
80 
82  DtCollisionDetector& operator=(const DtCollisionDetector& orig);
83 
84 public:
85 
87  virtual void setObjectToIgnore(DtVrfObject* vrfObject);
88 
91  virtual void addObjectObstructionID(const DtObjectType& objectObstructionID);
92  virtual void removeObjectObstructionID(const DtObjectType& objectObstructionID);
93 
95  virtual void setObjectObstructionIDs(const DtObjectObstructionIDContainer& objectIDs);
96 
98  virtual void setFeatureObstructionTypes(const DtFeatureTypeContainer& featureTypes);
100 
112  virtual bool detectPotentialCollision(Dt3dBoundingVolume& collisionBv,
113  const DtVector& localPosition, const DtDcm& bvOrientation,
114  DtCollision*& potentialCollision);
115 
118  virtual bool detectAllEntityCollisions(Dt3dBoundingVolume& collisionBv,
119  const DtVector& localPosition, const DtDcm& bvOrientation,
120  std::list<DtBoost::shared_ptr<DtEntityCollision> >& collisionList);
121 
140  virtual bool getObjectObstructions(DtObjectObstructionContainer& objectObstructions) const;
141  virtual bool getObjectObstructions(Dt3dBoundingVolume& boundingVolume,
142  const DtVector& bvLocation, const DtDcm& bvOrientation,
143  DtObjectObstructionContainer& objectObstructions) const;
144 
155  virtual bool vrfObjectObstructionPredicate(const DtVrfObject& vrfObjectToTest) const;
156 
166  virtual bool checkForCollision(Dt3dBoundingVolume& collisionBV,
167  DtCollision& potentialCollision, const DtVector& localPosition,
168  const DtDcm& bvOrientation) const;
169 
170 protected:
179  bool detectNewClosestCollision(Dt3dBoundingVolume& collisionBV, DtCollision*& potentialCollision,
180  const DtVector& localPosition, const DtDcm& bvOrientation) const;
181 
191  bool detectObjectCollision(Dt3dBoundingVolume& collisionBV,
192  DtCollisionProcessor<DtEntityCollision>& collisionProcessor, const DtVector& localPosition,
193  const DtDcm& bvOrientation) const;
194  bool detectFeatureCollision(Dt3dBoundingVolume& collisionBV,
195  DtCollisionProcessor<DtFeatureCollision>&, const DtVector& localPosition, const DtDcm& bvOrientation) const;
196 
198  DtCollision* primaryCollision(DtCollision* firstCollision, DtCollision* secondCollision) const;
199 
201  bool testInvariant() const;
202 
203 protected:
206 
208 
211  boost::shared_ptr<MAKVRinTerra::DtAreaFeatureSet::List> myObstructions;
212 
216 };
217 
219 bool DtSameOrAttached(const DtVrfObject* primaryEntity, const DtVrfObject& secondaryEntity);
220 
225 bool DtWithinDistance(const DtVector& startLocation,
226  const DtVector& endLocation,
227  double offset,
228  double distanceSquared,
229  double& actualDistanceSquared);
230 
231 
232 
235 template <typename T_Collision>
237 {
238 public:
239  DtClosestCollisionProcessor(T_Collision* initialCollision = 0);
241 
242  virtual void processCollision(const T_Collision& collision);
243 
244  virtual T_Collision* closestCollision();
245 
246 protected:
247  T_Collision* myClosestCollision;
249 
250 };
251 
254 template <typename T_Collision>
256 {
257 public:
258  typedef std::list<DtBoost::shared_ptr<T_Collision> > DtCollisionList;
259 
261  virtual ~DtAllCollisionProcessor();
262 
263  virtual void processCollision(const T_Collision& collision);
264 
265 protected:
267 };
268 
269 #define callbackList_inl_
270 #include "vrfmodel/collisionDetector.inl"
271 #undef callbackList_inl_
272 

Document ID: Generated on Mon Jul 4 01:00:18 EDT 2016 from SVN revision 166489
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)