VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 
19 
20 #include <features/areaFeature.h>
21 
22 #include <list>
23 #include <set>
24 #include <vector>
25 #include <boost/unordered_set.hpp>
26 #include <boost/ptr_container/ptr_vector.hpp>
27 
28 class DtCollision;
29 class DtString;
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::vector<const DtSimObject*> DtObjectObstructionContainer;
60  typedef std::list<DtRwString> DtFeatureTypeContainer;
61 
63  DtCollisionDetector(const DtSimulationServices* simServices);
64 
66  virtual ~DtCollisionDetector();
67 
68 private:
71 
73  DtCollisionDetector& operator=(const DtCollisionDetector& orig);
74 
75 public:
76 
78  virtual void setObjectToIgnore(const DtSimObject* vrfObject);
79 
82  virtual void addObjectObstructionID(const DtObjectType& objectObstructionID);
83  virtual void removeObjectObstructionID(const DtObjectType& objectObstructionID);
84 
86  virtual void setObjectObstructionIDs(const DtObjectObstructionIDContainer& objectIDs);
87 
89  virtual void setFeatureObstructionTypes(const DtFeatureTypeContainer& featureTypes);
91 
103  virtual bool detectPotentialCollision(const Dt3dBoundingVolume& collisionBv,
104  const DtVector& localPosition, const DtDcm& bvOrientation,
105  DtCollision*& potentialCollision);
106 
109  virtual bool detectAllEntityCollisions(const Dt3dBoundingVolume& collisionBv,
110  const DtVector& localPosition, const DtDcm& bvOrientation,
111  std::list<DtBoost::shared_ptr<DtEntityCollision> >& collisionList);
112 
131  virtual bool getObjectObstructions(DtObjectObstructionContainer& objectObstructions) const;
132  virtual bool getObjectObstructions(Dt3dBoundingVolume& boundingVolume,
133  const DtVector& bvLocation, const DtDcm& bvOrientation,
134  DtObjectObstructionContainer& objectObstructions) const;
135 
146  virtual bool vrfObjectObstructionPredicate(const DtSimObject& vrfObjectToTest) const;
147 
157  virtual bool checkForCollision(const Dt3dBoundingVolume& collisionBV,
158  DtCollision& potentialCollision, const DtVector& localPosition,
159  const DtDcm& bvOrientation) const;
160 
161 protected:
170  bool detectNewClosestCollision(const Dt3dBoundingVolume& collisionBV, DtCollision*& potentialCollision,
171  const DtVector& localPosition, const DtDcm& bvOrientation) const;
172 
182  bool detectObjectCollision(const Dt3dBoundingVolume& collisionBV,
183  DtCollisionProcessor<DtEntityCollision>& collisionProcessor, const DtVector& localPosition,
184  const DtDcm& bvOrientation) const;
185  bool detectFeatureCollision(const Dt3dBoundingVolume& collisionBV,
186  DtCollisionProcessor<DtFeatureCollision>&, const DtVector& localPosition, const DtDcm& bvOrientation) const;
187 
189  DtCollision* primaryCollision(DtCollision* firstCollision, DtCollision* secondCollision) const;
190 
192  bool testInvariant() const;
193 
194 protected:
197 
199 
202  boost::shared_ptr<MAKVRinTerra::DtAreaFeatureSet::List> myObstructions;
203 
207 };
208 
210 bool DtSameOrAttached(const DtSimObject* primaryEntity, const DtSimObject& secondaryEntity);
211 
216 bool DtWithinDistance(const DtVector& startLocation,
217  const DtVector& endLocation,
218  double offset,
219  double distanceSquared,
220  double& actualDistanceSquared);
221 
222 
223 
226 template <typename T_Collision>
228 {
229 public:
230  DtClosestCollisionProcessor(T_Collision* initialCollision = 0);
232 
233  virtual void processCollision(const T_Collision& collision);
234 
235  virtual T_Collision* closestCollision();
236 
237 protected:
238  T_Collision* myClosestCollision;
240 
241 };
242 
245 template <typename T_Collision>
247 {
248 public:
249  typedef std::list<DtBoost::shared_ptr<T_Collision> > DtCollisionList;
250 
252  virtual ~DtAllCollisionProcessor();
253 
254  virtual void processCollision(const T_Collision& collision);
255 
256 protected:
258 };
259 
260 #define callbackList_inl_
261 #include "vrfmodel/collisionDetector.inl"
262 #undef callbackList_inl_
263 
DtFeatureTypeContainer myObstructionTypes
Feature obstructions.
Definition: collisionDetector.h:201
Abstract base class used by DtCollisionDetector as a functor when finding collisions.
Definition: collisionDetector.h:37
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
DtCollisionProcessor()
Definition: collisionDetector.h:40
virtual ~DtAllCollisionProcessor()
const DtSimulationServices * mySimulationServices
Definition: collisionDetector.h:198
std::list< DtRwString > DtFeatureTypeContainer
Definition: collisionDetector.h:60
const DtSimObject * myObjectToIgnore
This object (if set) will not be reported as a collision. Typically, this is the object that the coll...
Definition: collisionDetector.h:206
double myClosestCollisionDistanceSquared
Definition: collisionDetector.h:239
std::list< DtBoost::shared_ptr< T_Collision > > DtCollisionList
Definition: collisionDetector.h:249
virtual T_Collision * closestCollision()
Definition: objectType.h:27
virtual ~DtCollisionProcessor()
Definition: collisionDetector.h:41
virtual void processCollision(const T_Collision &collision)
bool DtWithinDistance(const DtVector &startLocation, const DtVector &endLocation, double offset, double distanceSquared, double &actualDistanceSquared)
std::set< DtObjectType > DtObjectObstructionIDContainer
Definition: collisionDetector.h:58
DtObjectObstructionIDContainer myObjectObstructionIDs
The object obstruction IDs.
Definition: collisionDetector.h:196
T_Collision * myClosestCollision
Definition: collisionDetector.h:238
The DtCollisionDetector is a class used to detect collisions between a specified list of obstructions...
Definition: collisionDetector.h:54
Collision processor used by DtCollisionDetector which finds only the closest collision.
Definition: collisionDetector.h:227
DtClosestCollisionProcessor(T_Collision *initialCollision=0)
std::vector< const DtSimObject * > DtObjectObstructionContainer
Definition: collisionDetector.h:59
Definition: collision.h:25
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:90
Represents a single simulation object in the exercise. Object may be VRF simulation, or non-VRF simulated, and may be simulated by the local sim engine, or by a remote sim engine. Only public (external) state of the object is available. All data is read-only. All access to data of the object is thread safe within the simulation frame.
Definition: simObject.h:79
bool DtSameOrAttached(const DtSimObject *primaryEntity, const DtSimObject &secondaryEntity)
Determines if the specified secondary entity is part of or attached to the primary entity...
Contains the DtSimComponent class declaration.
DtCollisionProcessor which collects a list of all the processed collisions and returns that...
Definition: collisionDetector.h:246
virtual ~DtClosestCollisionProcessor()
voidpf uLong offset
Definition: ioapi.h:42
boost::shared_ptr< MAKVRinTerra::DtAreaFeatureSet::List > myObstructions
Definition: collisionDetector.h:202
DtAllCollisionProcessor(DtCollisionList &collisionList)
virtual void processCollision(const T_Collision &collision)
DtCollisionList & myCollisionList
Definition: collisionDetector.h:257
virtual void processCollision(const T_Collision &collision)=0

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)