![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2004 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 /******************************************************************************* 00006 ** $RCSfile: obstructionSens.h,v $ $Revision: 1.20 $ $State: Exp $ 00007 *******************************************************************************/ 00008 00011 00014 00015 #ifndef obstructionSensor_H_ 00016 #define obstructionSensor_H_ 00017 00018 #include "vrfobjcore/simCmpnt.h" 00019 #include "vrfutil/vlClock.h" 00020 #include "vrfobjcore/vrfObjMgr.h" 00021 #include <vl/hostStructs.h> 00022 #include <vl/objIdHashLst.h> 00023 #include "vrfobjcore/collisionIOPort.h" 00024 #include "gdb/specification.h" 00025 #include "vrfobjcore/vectorObstructionID.h" 00026 #include "vrfmodel/collisionDetector.h" 00027 00028 #include <list> 00029 00030 class DtString; 00031 class DtSimManager; 00032 class Dt3dBoundingVolume; 00033 class DtVectorObstructionID; 00034 class DtObstructionSensorDescriptor; 00035 class DtObstructionSensorPSR; 00036 class DtRwVectorObstructionType; 00037 00042 #include "vrfmodel/vrfmodelDefines.h" 00043 class DT_DLL_vrfmodel DtObstructionSensor : public DtSimComponent 00044 { 00045 00046 public: 00047 00050 DtObstructionSensor(const DtString& name, 00051 DtVrfObject* owner, 00052 DtSimManager* simManager, 00053 DtComponentDescriptor* desc = 0, 00054 DtReaderWriterRegistry* parentRegistry = 0); 00055 00057 virtual ~DtObstructionSensor(); 00058 00059 private: 00061 DtObstructionSensor(const DtObstructionSensor& orig); 00062 00064 DtObstructionSensor& operator=(const DtObstructionSensor& orig); 00065 00066 00067 public: 00073 virtual bool init(); 00074 00083 virtual void tick(); 00084 00087 virtual DtString type() const; 00088 00089 protected: 00090 00096 virtual bool createPSR(); 00097 00099 virtual bool createCollisionDetector(); 00100 00106 virtual bool setObstructionIDsInCollisionDetector(); 00107 00111 virtual bool initializeCollisionBV(); 00112 00127 virtual bool calculateStoppingDistance(const DtObstructionSensorDescriptor& obstructionSensorDesc, 00128 double& stoppingDistance); 00129 00137 virtual bool calculateCollisionBV(); 00138 00140 virtual void registerMessageCallbacks(); 00141 00143 static void setCollisionAvoidTypesCallback(DtSimMessage* msg, void* usr); 00144 00147 virtual void processCollisionAvoidTypes(DtSimMessage* msg); 00148 00152 virtual bool addVectorObstructionType(const DtRwVectorObstructionType& obsId); 00153 00157 virtual bool removeVectorObstructionType(const DtRwVectorObstructionType& obsId); 00158 00163 virtual DtRwVectorObstructionType buildingVectorObstructionType() const; 00164 00169 virtual DtRwVectorObstructionType treeVectorObstructionType() const; 00170 00171 virtual double decelerationSoilFactor() const; 00172 00173 public: 00177 static DtSimComponent * creator(const DtString& name, 00178 DtVrfObject* owner, 00179 DtSimManager* simManager, 00180 DtComponentDescriptor* desc = 0, 00181 DtReaderWriterRegistry* parentRegistry = 0); 00182 00183 protected: 00184 00189 virtual bool createPorts(); 00190 00194 virtual bool createPortGroups(); 00195 00196 protected: 00197 00200 00207 DtCollisionOutputPort* myPotentialCollisionInfoPort; 00208 00211 DtOutputPortGroup* myObstructionInfoPortGroup; 00212 00214 00215 Dt3dBoundingVolume* myCollisionBV; 00216 DtCollisionDetector* myCollisionDetector; 00217 DtCollisionDetector::DtObjectObstructionIDContainer myObjectObstructionIDs; 00218 DtCollisionDetector::DtVectorObstructionIDContainer myVectorObstructionIDs; 00219 const DtObstructionSensorDescriptor* myObstructionSensorDesc; 00220 00223 DtObstructionSensorPSR* myProcessState; 00224 00225 bool myFirstTick; 00226 00227 protected: 00228 mutable DtCollision* myPotentialCollision; 00229 }; 00230 00231 #endif 00232 00233 00234 00235 00236 00237 00238