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 
110  virtual bool shouldRun();
111 
114  virtual void clearCollisionStateData();
115 
120  virtual void clearingCollision();
121 
124  virtual bool isInsideObstruction(const DtCollision* potentialCollision, double& clearingDistance);
125 
126 
128  virtual void registerTaskMsgCallbacks();
129 
132  static void taskCompleteReportCallback(DtSimMessage * msg, void * usr);
133  virtual void processTaskComplete(DtSimMessage * msg);
134 
139  bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
140 
149  bool setDefaultPortValuesForAvoidance();
150 
157  bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
158  const DtVector& obstructionVelocity,
159  int& obstructionDirectionSign) const;
160 
173  void avoidMovingObstruction(const DtCollision& potentialCollision);
174 
182  void avoidNonMovingObstruction(const DtCollision& potentialCollision);
183 
186  virtual void calculateAvoidanceByVertices(const DtVector & vertex1,const DtVector & vertex2,double entityBoundingVolumeRadius,
187  DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
188 
190  virtual void calculateAvoidanceUsingBoundingVolume(const DtCollision& potentialCollision,
191  double entityBoundingVolumeRadius,DtVector & localVectorToDestination,
192  DtVector & localVectorToObstruciton);
193 
203  void startClearingCollision(double clearingDistance);
204 
218  bool calculateMyEntityCollisionBV();
219 
220  bool createPortGroups();
221  bool createPorts();
222 
228  virtual bool createPSR();
229 
230  virtual void computeClearingHeading(const DtVector& localVertex1,
231  const DtVector& localVertex2, const DtVector & localObstaclePos,
232  double& clearingHeading) const;
233 
234  virtual void getObstructionFootprint(const DtCollision& collision,
235  DtLocalVertexList& localObstructionFootprint) const;
236 
237 protected:
238 
241 
243  Dt3dBoundingVolume* myCollisionBV;
245 
247 
249 
253 
256 
263 
270 
274 
277 
283 
291 
298 
304 
310 
312 
313 };

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)