VR-Forces 4.1 Class Documentation
humanCollisionAvoidController.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 
14 #include "vrfobjcore/vrfObjIter.h"
15 #include <vl/hostStructs.h>
18 
19 class DtString;
20 class DtSimManager;
21 class Dt3dBoundingVolume;
23 class DtInputControlPortGroup;
25 class DtCollision;
29 class DtVectorInputPort;
31 
38 {
39 
40 public:
41 
45  DtVrfObject* owner,
46  DtSimManager* simManager,
47  DtComponentDescriptor* desc = 0,
48  DtReaderWriterRegistry* parentRegistry = 0);
49 
53 
57  virtual bool init();
58 
68  virtual void tick();
69 
73  virtual double distanceSquaredToDestination(DtVector offsetVector);
74 
80  virtual void avoidCollision(const DtCollision& potentialCollision);
81 
84  virtual DtString type() const;
85 
89  static DtSimComponent * creator(const DtString& name,
90  DtVrfObject* owner,
91  DtSimManager* simManager,
92  DtComponentDescriptor* desc = 0,
93  DtReaderWriterRegistry* parentRegistry = 0);
94 
95 protected:
99 
103 
107 
110  virtual void clearCollisionStateData();
111 
116  virtual void clearingCollision();
117 
120  virtual bool isInsideObstruction(const DtCollision* potentialCollision, double& clearingDistance);
121 
122 
124  virtual void registerTaskMsgCallbacks();
125 
128  static void taskCompleteReportCallback(DtSimMessage * msg, void * usr);
129  virtual void processTaskComplete(DtSimMessage * msg);
130 
135  bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const;
136 
145  bool setDefaultPortValuesForAvoidance();
146 
153  bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix,
154  const DtVector& obstructionVelocity,
155  int& obstructionDirectionSign) const;
156 
169  void avoidMovingObstruction(const DtCollision& potentialCollision);
170 
178  void avoidNonMovingObstruction(const DtCollision& potentialCollision);
179 
182  virtual void calculateAvoidanceByVertices(const DtVector & vertex1,const DtVector & vertex2,double entityBoundingVolumeRadius,
183  DtVector & localVectorToDestination,DtVector & localVectorToObstruciton);
184 
186  virtual void calculateAvoidanceUsingBoundingVolume(const DtCollision& potentialCollision,
187  double entityBoundingVolumeRadius,DtVector & localVectorToDestination,
188  DtVector & localVectorToObstruciton);
189 
199  void startClearingCollision(double clearingDistance);
200 
214  bool calculateMyEntityCollisionBV();
215 
216  bool createPortGroups();
217  bool createPorts();
218 
224  virtual bool createPSR();
225 
226  virtual void computeClearingHeading(const DtVector& localVertex1,
227  const DtVector& localVertex2, const DtVector & localObstaclePos,
228  double& clearingHeading) const;
229 
230  virtual void getObstructionFootprint(const DtCollision& collision,
231  DtLocalVertexList& localObstructionFootprint) const;
232 
233 protected:
234 
237 
239  Dt3dBoundingVolume* myCollisionBV;
240 
241  DtEntityIdentifier myObjectId;
243 
245 
249 
252 
259 
266 
270 
273 
280 
287 
293 
299 
301 };

Document ID: Generated on Tue Jan 29 18:21:16 EST 2013 from SVN revision 123193
Copyright © 2005-2013 VT MÄK Inc. All Rights Reserved (www.mak.com)