VR-Forces 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 
17 
18 #include <features/areaFeature.h>
22 
24 #include <boost/ptr_container/ptr_vector.hpp>
25 
27 #include <list>
28 #include <set>
29 #include <vector>
30 
31 class DtCollision;
32 class DtString;
34 class Dt3dBoundingVolume;
35 class DtEntityType;
36 
39 template <typename T_Collision>
41 {
42 public:
44  virtual ~DtCollisionProcessor() {};
45 
46  virtual void processCollision(const T_Collision& collision) = 0;
47 };
48 
58 {
59 public:
60 
61  typedef std::set<DtEntityType> DtObjectObstructionIDContainer;
62  typedef std::vector<const DtSimObject*> DtObjectObstructionContainer;
63  typedef std::list<DtRwString> DtFeatureTypeContainer;
64 
66  DtCollisionDetector(const DtSimulationServices* simServices);
67 
69  virtual ~DtCollisionDetector();
70 
71 private:
74 
76  DtCollisionDetector& operator=(const DtCollisionDetector& orig);
77 
78 public:
79 
81  virtual void setObjectToIgnore(const DtSimObject* vrfObject);
82 
85  virtual void addObjectObstructionID(const DtEntityType& objectObstructionType);
86  virtual void removeObjectObstructionID(const DtEntityType& objectObstructionType);
87 
89  virtual void setObjectObstructionIDs(const DtObjectObstructionIDContainer& objectTypes);
90 
92  virtual void setFeatureObstructionTypes(const DtFeatureTypeContainer& featureTypes);
94 
106  virtual bool detectPotentialCollision(const Dt3dBoundingVolume& collisionBv,
107  const DtVector& localPosition, const DtDcm& bvOrientation,
108  DtCollision*& potentialCollision);
109 
112  virtual bool detectAllEntityCollisions(const Dt3dBoundingVolume& collisionBv,
113  const DtVector& localPosition, const DtDcm& bvOrientation,
114  std::list<std::shared_ptr<DtEntityCollision> >& collisionList);
115 
134  virtual bool getObjectObstructions(DtObjectObstructionContainer& objectObstructions) const;
135  virtual bool getObjectObstructions(Dt3dBoundingVolume& boundingVolume,
136  const DtVector& bvLocation, const DtDcm& bvOrientation,
137  DtObjectObstructionContainer& objectObstructions) const;
138 
149  virtual bool vrfObjectObstructionPredicate(const DtSimObject& vrfObjectToTest) const;
150 
160  virtual bool checkForCollision(const Dt3dBoundingVolume& collisionBV,
161  DtCollision& potentialCollision, const DtVector& localPosition,
162  const DtDcm& bvOrientation) const;
163 
164 protected:
173  bool detectNewClosestCollision(const Dt3dBoundingVolume& collisionBV, DtCollision*& potentialCollision,
174  const DtVector& localPosition, const DtDcm& bvOrientation) const;
175 
185  bool detectObjectCollision(const Dt3dBoundingVolume& collisionBV,
186  DtCollisionProcessor<DtEntityCollision>& collisionProcessor, const DtVector& localPosition,
187  const DtDcm& bvOrientation) const;
188  bool detectFeatureCollision(const Dt3dBoundingVolume& collisionBV,
189  DtCollisionProcessor<DtFeatureCollision>&, const DtVector& localPosition, const DtDcm& bvOrientation) const;
190 
192  DtCollision* primaryCollision(DtCollision* firstCollision, DtCollision* secondCollision) const;
193 
195  bool testInvariant() const;
196 
197 protected:
200 
202 
205  std::shared_ptr<MAKVRinTerra::DtAreaFeatureSet::List> myObstructions;
206 
210 };
211 
213 bool DtSameOrAttached(const DtSimObject* primaryEntity, const DtSimObject& secondaryEntity);
214 
219 bool DtWithinDistance(const DtVector& startLocation,
220  const DtVector& endLocation,
221  double offset,
222  double distanceSquared,
223  double& actualDistanceSquared);
224 
225 
226 
229 template <typename T_Collision>
231 {
232 public:
233  DtClosestCollisionProcessor(T_Collision* initialCollision = 0);
234  virtual ~DtClosestCollisionProcessor() override;
235 
236  virtual void processCollision(const T_Collision& collision) override;
237 
238  virtual T_Collision* closestCollision();
239 
240 protected:
241  T_Collision* myClosestCollision;
243 
244 };
245 
248 template <typename T_Collision>
250 {
251 public:
252  typedef std::list<std::shared_ptr<T_Collision> > DtCollisionList;
253 
255  virtual ~DtAllCollisionProcessor() override;
256 
257  virtual void processCollision(const T_Collision& collision) override;
258 
259 protected:
261 };
262 
263 #define callbackList_inl_
264 #include "vrfmodel/collisionDetector.inl"
265 #undef callbackList_inl_
266 
DtFeatureTypeContainer myObstructionTypes
Feature obstructions.
Definition: collisionDetector.h:204
Abstract base class used by DtCollisionDetector as a functor when finding collisions.
Definition: collisionDetector.h:40
#define DT_DLL_vrfmodel
This file is used to determine how to build.
Definition: vrfmodelDefines.h:24
DtCollisionProcessor()
Definition: collisionDetector.h:43
virtual ~DtClosestCollisionProcessor() override
const DtSimulationServices * mySimulationServices
Definition: collisionDetector.h:201
std::list< DtRwString > DtFeatureTypeContainer
Definition: collisionDetector.h:63
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:209
double myClosestCollisionDistanceSquared
Definition: collisionDetector.h:242
virtual T_Collision * closestCollision()
std::set< DtEntityType > DtObjectObstructionIDContainer
Definition: collisionDetector.h:61
virtual void processCollision(const T_Collision &collision) override
virtual ~DtCollisionProcessor()
Definition: collisionDetector.h:44
bool DtWithinDistance(const DtVector &startLocation, const DtVector &endLocation, double offset, double distanceSquared, double &actualDistanceSquared)
std::shared_ptr< MAKVRinTerra::DtAreaFeatureSet::List > myObstructions
Definition: collisionDetector.h:205
T_Collision * myClosestCollision
Definition: collisionDetector.h:241
The DtCollisionDetector is a class used to detect collisions between a specified list of obstructions...
Definition: collisionDetector.h:57
Collision processor used by DtCollisionDetector which finds only the closest collision.
Definition: collisionDetector.h:230
DtClosestCollisionProcessor(T_Collision *initialCollision=0)
std::vector< const DtSimObject * > DtObjectObstructionContainer
Definition: collisionDetector.h:62
Definition: collision.h:25
Central access point of all non-object-specific the services and managers that are available for use ...
Definition: simulationServices.h:96
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:80
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.
DtObjectObstructionIDContainer myObjectObstructionTypes
The object obstruction typess.
Definition: collisionDetector.h:199
std::list< std::shared_ptr< T_Collision > > DtCollisionList
Definition: collisionDetector.h:252
virtual void processCollision(const T_Collision &collision) override
DtCollisionProcessor which collects a list of all the processed collisions and returns that...
Definition: collisionDetector.h:249
voidpf uLong offset
Definition: ioapi.h:42
DtAllCollisionProcessor(DtCollisionList &collisionList)
virtual ~DtAllCollisionProcessor() override
DtCollisionList & myCollisionList
Definition: collisionDetector.h:260
virtual void processCollision(const T_Collision &collision)=0

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)