VR-Forces Development_Version Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
humanCollisionAvoidanceController.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 1999 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
11 #pragma once
12 
15 #include <vl/hostStructs.h>
18 
19 class DtString;
20 class DtSimManager;
21 class Dt3dBoundingVolume;
23 class DtInputControlPortGroup;
25 class DtCollision;
29 class DtVectorInputPort;
32 
39 {
40 
41 public:
42 
46  DtVrfObject* owner,
47  DtSimManager* simManager,
48  DtComponentDescriptor* desc = 0,
49  DtReaderWriterRegistry* parentRegistry = 0);
50 
54 
58  virtual bool init();
59 
69  virtual void tick();
70 
74  virtual double distanceSquaredToDestination(DtVector offsetVector);
75 
81  virtual void avoidCollision(const DtCollision& potentialCollision);
82 
85  virtual const char* type() const;
86 
90  static DtSimComponent * creator(const DtString& name,
91  DtVrfObject* owner,
92  DtSimManager* simManager,
93  DtComponentDescriptor* desc = 0,
94  DtReaderWriterRegistry* parentRegistry = 0);
95 
96 protected:
100 
104 
108 
111  virtual void clearCollisionStateData();
112 
117  virtual void clearingCollision();
118 
121  virtual bool isInsideObstruction(const DtCollision* potentialCollision, double& clearingDistance);
122 
123 
125  virtual void registerTaskMsgCallbacks();
126 
129  static void taskCompleteReportCallback(DtSimMessage * msg, void * usr);
130  virtual void processTaskComplete(DtSimMessage * msg);
131 
136  bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
137 
146  bool setDefaultPortValuesForAvoidance();
147 
154  bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
155  const DtVector& obstructionVelocity,
156  int& obstructionDirectionSign) const;
157 
170  void avoidMovingObstruction(const DtCollision& potentialCollision);
171 
179  void avoidNonMovingObstruction(const DtCollision& potentialCollision);
180 
183  virtual void calculateAvoidanceByVertices(const DtVector & vertex1,const DtVector & vertex2,double entityBoundingVolumeRadius,
184  DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
185 
187  virtual void calculateAvoidanceUsingBoundingVolume(const DtCollision& potentialCollision,
188  double entityBoundingVolumeRadius,DtVector & localVectorToDestination,
189  DtVector & localVectorToObstruciton);
190 
200  void startClearingCollision(double clearingDistance);
201 
215  bool calculateMyEntityCollisionBV();
216 
217  bool createPortGroups();
218  bool createPorts();
219 
225  virtual bool createPSR();
226 
227  virtual void computeClearingHeading(const DtVector& localVertex1,
228  const DtVector& localVertex2, const DtVector & localObstaclePos,
229  double& clearingHeading) const;
230 
231  virtual void getObstructionFootprint(const DtCollision& collision,
232  DtLocalVertexList& localObstructionFootprint) const;
233 
234 protected:
235 
238 
240  Dt3dBoundingVolume* myCollisionBV;
242 
244 
246 
250 
253 
260 
267 
271 
274 
280 
288 
295 
301 
307 
309 
310 };

Document ID: Generated on Tue Mar 8 22:13:38 EST 2016 from SVN revision 162938
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)