![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 1999 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: gndColAvoid.h,v $ $Revision: 1.41 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #ifndef DtGroundCollisionAvoidanceController_H_ 00016 #define DtGroundCollisionAvoidanceController_H_ 00017 00018 00019 #include "vrfmodel/gndAutoCntlr.h" 00020 #include "vrfobjcore/vrfObjIter.h" 00021 #include <vl/hostStructs.h> 00022 #include "vrfobjcore/automotivePSR.h" 00023 00024 class DtString; 00025 class DtSimManager; 00026 class Dt3dBoundingVolume; 00027 class DtGroundFollowEntityController; 00028 class DtVrfObjectStateRepository; 00029 class DtInputControlPortGroup; 00030 class DtCollisionInputPort; 00031 class DtCollision; 00032 class DtStringInputPort; 00033 00038 #include "vrfmodel/vrfmodelDefines.h" 00039 class DT_DLL_vrfmodel DtGroundCollisionAvoidanceController : public 00040 DtGroundAutoControllerComponent 00041 { 00042 00043 public: 00044 00047 DtGroundCollisionAvoidanceController(const DtString& name, 00048 DtVrfObject* owner, 00049 DtSimManager* simManager, 00050 DtComponentDescriptor* desc = 0, 00051 DtReaderWriterRegistry* parentRegistry = 0); 00052 00055 virtual ~DtGroundCollisionAvoidanceController(); 00056 00060 virtual bool init(); 00061 00071 virtual void tick(); 00072 00076 virtual double distanceSquaredToDestination(DtVector offsetVector); 00077 00083 virtual void avoidCollision(const DtCollision& potentialCollision); 00084 00087 virtual void clearCollision(); 00088 00093 virtual void clearingCollision(); 00094 00097 virtual DtString type() const; 00098 00102 static DtSimComponent * creator(const DtString& name, 00103 DtVrfObject* owner, 00104 DtSimManager* simManager, 00105 DtComponentDescriptor* desc = 0, 00106 DtReaderWriterRegistry* parentRegistry = 0); 00107 00108 protected: 00111 DtGroundCollisionAvoidanceController(); 00112 00114 DtGroundCollisionAvoidanceController(const 00115 DtGroundCollisionAvoidanceController & orig); 00116 00118 const DtGroundCollisionAvoidanceController & operator=(const 00119 DtGroundCollisionAvoidanceController & orig); 00120 00125 bool isAppreciablyMoving(DtVector velocity, double velocityTolerance) const; 00126 00136 bool setDefaultPortValuesForAvoidance(DtAutoTransmissionGear currentGear); 00137 00144 bool determineObstructionMovementDirection(DtDcm obstructionLocalOrientationMatrix, 00145 const DtVector& obstructionVelocity, 00146 int& obstructionDirectionSign) const; 00147 00151 bool followingObstruction(const DtEntityIdentifier& entityID) const; 00152 00165 void avoidMovingObstruction(const DtCollision& potentialCollision); 00166 00177 void avoidNonMovingObstruction(const DtCollision& potentialCollision); 00178 00188 void startClearingCollision(double clearingDistance); 00189 00203 bool calculateCollisionBV(); 00204 00205 bool createPortGroups(); 00206 bool createPorts(); 00207 00208 protected: 00209 00211 double myClearingDistance; 00212 00213 bool myAvoidingCollision; 00214 Dt3dBoundingVolume* myCollisionBV; 00215 00216 DtEntityIdentifier myObjectId; 00217 bool myHavePortGroup; 00218 00219 DtString myFollowEntityName; 00220 00223 00229 DtCollisionInputPort* myCollisionAvoidancePort; 00230 00233 DtInputPortGroup* myCollisionAvoidancePortGroup; 00234 00240 DtStringInputPort* myFollowEntityInputPort; 00241 00246 DtBooleanOutputPort* myCollisionPort; 00248 00250 }; 00251 00252 #endif 00253 00254 00255 00256