VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties 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 
9 #pragma once
10 
12 #include <vl/hostStructs.h>
15 
16 class DtString;
17 class DtSimManager;
18 class Dt3dBoundingVolume;
20 class DtInputControlPortGroup;
22 class DtCollision;
26 class DtVectorInputPort;
28 class DtBooleanInputPort;
30 
37 {
38 
39 public:
40 
44  DtVrfObject* owner,
45  DtSimManager* simManager,
46  DtComponentDescriptor* desc = 0,
47  DtReaderWriterRegistry* parentRegistry = 0);
48 
52 
56  virtual bool init();
57 
67  virtual void tick();
68 
72  virtual double distanceSquaredToDestination(DtVector offsetVector);
73 
79  virtual void avoidCollision(const DtCollision& potentialCollision);
80 
83  virtual const char* type() const;
84 
88  static DtSimComponent * creator(const DtString& name,
89  DtVrfObject* owner,
90  DtSimManager* simManager,
91  DtComponentDescriptor* desc = 0,
92  DtReaderWriterRegistry* parentRegistry = 0);
93 
94 protected:
98 
102 
106 
108  virtual bool shouldRun();
109 
112  virtual void clearCollisionStateData();
113 
118  virtual void clearingCollision();
119 
122  virtual bool isInsideObstruction(const DtCollision* potentialCollision, double& clearingDistance);
123 
124 
126  virtual void registerTaskMsgCallbacks();
127 
130  static void taskCompleteReportCallback(DtSimMessage * msg, void * usr);
131  virtual void processTaskComplete(DtSimMessage * msg);
132 
137  bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
138 
147  bool setDefaultPortValuesForAvoidance();
148 
155  bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
156  const DtVector& obstructionVelocity,
157  int& obstructionDirectionSign) const;
158 
171  void avoidMovingObstruction(const DtCollision& potentialCollision);
172 
180  void avoidNonMovingObstruction(const DtCollision& potentialCollision);
181 
184  virtual void calculateAvoidanceByVertices(const DtVector & vertex1,const DtVector & vertex2,double entityBoundingVolumeRadius,
185  DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
186 
188  virtual void calculateAvoidanceUsingBoundingVolume(const DtCollision& potentialCollision,
189  double entityBoundingVolumeRadius,DtVector & localVectorToDestination,
190  DtVector & localVectorToObstruciton);
191 
201  void startClearingCollision(double clearingDistance);
202 
216  bool calculateMyEntityCollisionBV();
217 
218  bool createPortGroups();
219  bool createPorts();
220 
226  virtual bool createPSR();
227 
228  virtual void computeClearingHeading(const DtVector& localVertex1,
229  const DtVector& localVertex2, const DtVector & localObstaclePos,
230  double& clearingHeading) const;
231 
232  virtual void getObstructionFootprint(const DtCollision& collision,
233  DtLocalVertexList& localObstructionFootprint) const;
234 
235 protected:
236 
239 
241  Dt3dBoundingVolume* myCollisionBV;
242 
244 
246 
250 
253 
260 
268 
275 
279 
282 
288 
296 
303 
309 
315 
317 
318 };

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)