![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /******************************************************************************* 00002 ** Copyright (c) 2009 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 *******************************************************************************/ 00005 00008 00010 00011 #pragma once 00012 00013 #include <geometry/intersectionRecord.h> 00014 #include <geometry/point.h> 00015 #include <vlutil/vlConfig.h> 00016 #include <vlutil/vlFilename.h> 00017 #include <list> 00018 #include <set> 00019 #include <map> 00020 #include "vrfobjcore/filteredObjList.h" 00021 #include "vrfobjcore/fltrFcnPred.h" 00022 #include "vrfobjcore/vrfLineOfSightFunctor.h" 00023 #include "vrfutil/consoleCommandManager.h" 00024 00025 class DtSimManager; 00026 00027 class DtFilename; 00028 class DtGeodeticCoord; 00029 class Coordinate_System; 00030 class DtTerrainInterface; 00031 class DtVrfObjectManager; 00032 class DtSpatialVrfObjectManagerInterface; 00033 class DtVectorObstructionManager; 00034 class DtEnvironmentalStateManager; 00035 class DtExtent; 00036 class DtChord; 00037 class DtSurface; 00038 00039 class DtVector; 00040 class DtPoint; 00041 00042 class DtVrfObjectPredicate; 00043 00044 class DtVrfObject; 00045 class DtDcm; 00046 class DtChordIntersectionRecord; 00047 class DtChordIntersectRecordList; 00048 class DtVectorNetworkIntersectionRecord; 00049 class DtVectorNetworkIntersectionRecordList; 00050 class DtVectorNetworkRecord; 00051 00052 class DtSimMessage; 00053 class DtPhysicalWorldParams; 00054 class DtSensorSignatureManager; 00055 class DtVrfLineOfSightCheckParams; 00056 class DtRwNLengthStringVector; 00057 00058 class DtExpireOlderThanCommand; 00059 00086 #include "vrfobjcore/vrfobjcoreDefines.h" 00087 class DT_DLL_vrfobjcore DtPhysicalWorld 00088 { 00089 public: 00090 00092 DtPhysicalWorld(DtSimManager* simManager); 00093 00095 virtual ~DtPhysicalWorld(); 00096 00097 private: 00099 DtPhysicalWorld(const DtPhysicalWorld& orig); 00100 00102 DtPhysicalWorld& operator=(const DtPhysicalWorld& orig); 00103 00104 public: 00105 00114 virtual bool initialize(); 00115 00124 virtual bool reinitialize(); 00125 00127 virtual bool reset(); 00128 00134 virtual bool loadParametersFromFile(const DtFilename& filename); 00135 00141 virtual bool loadPhysicalWorldFile(const DtFilename& filename); 00142 00144 virtual void processParameters(); 00145 00148 const DtFilename& physicalWorldFile() const; 00149 00151 virtual bool parametersLoaded() const; 00152 00172 virtual bool isValidState() const; 00173 00179 virtual void tick(); 00180 00181 00185 00191 00192 virtual Coordinate_System* coordinateSystem(); 00193 virtual const Coordinate_System* coordinateSystem() const; 00194 00196 virtual void geocentricToDatabase(const DtVector& in, DtVector& out) const; 00197 00199 virtual void geocentricToDatabase(const DtDcm& in, DtDcm& out) const; 00200 00202 virtual void geocentricToDatabase(const DtVector& vIn, const DtDcm& dIn, 00203 DtVector& vOut, DtDcm& dOut) const; 00204 00206 virtual void geocentricToDatabase(const DtExtent& in, DtExtent& out) const; 00207 00209 virtual void databaseToGeocentric(const DtVector& in, DtVector& out) const; 00210 00212 virtual void databaseToGeocentric(const DtDcm& in, DtDcm& out) const; 00213 00215 virtual void databaseToGeocentric(const DtVector& vIn, const DtDcm& dIn, 00216 DtVector& vOut, DtDcm& dOut) const; 00217 00219 virtual void databaseToGeocentric(const DtExtent& in, DtExtent& out) const; 00220 00222 virtual void databaseToGeodetic(const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition) const; 00224 virtual void databaseToGeodetic(const DtVector& databasePosition, DtVector& geodeticPosition) const; 00226 virtual void databaseToGeodetic(const DtExtent& extent, DtExtent& destExtent) const; 00227 00229 virtual void geodeticToDatabase(const DtExtent& extent, DtExtent& destExtent) const; 00231 virtual void geodeticToDatabase(const DtGeodeticCoord& geodeticPosition, 00232 DtVector& databasePosition) const; 00234 virtual void geodeticToDatabase(const DtVector& geodeticPosition, 00235 DtVector& databasePosition) const; 00236 00239 virtual void topoToDatabase(const DtVector& databasePosition, DtDcm& topoToDatabase) const; 00242 virtual void databaseToTopo(const DtVector& databasePosition, DtDcm& databaseToTopo) const; 00243 00251 virtual DtVector down(const DtVector& databasePosition) const; 00252 00277 virtual bool intersect(const DtChord& chord, 00278 const std::list<const DtVrfObject*> objectsToIgnore = 00279 std::list<const DtVrfObject*>(), bool* dataAvailable = 0, 00280 bool overrideBlockingAssert = false) const; 00281 00283 00284 00285 00286 00287 00288 00289 00290 00291 00292 00293 00294 00295 00296 00297 00298 00299 00300 00301 00302 00303 00304 00305 00306 00307 00308 00309 00310 00311 virtual double terrainHeight(const DtPoint& databaseLocation, 00312 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00313 virtual double terrainHeight(double lat, double lon, bool* dataAvailable = 0, 00314 bool overrideBlockingAssert = false) const; 00315 virtual double terrainHeight(const DtVector& databaseLocation, 00316 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00318 00320 00321 00322 00323 00324 00325 00326 00327 00328 00329 00330 00331 00332 00333 00334 00335 00336 00337 00338 00339 00340 00341 virtual bool terrainHeight(const DtPoint& databaseLocation, double& height, 00342 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00343 virtual bool terrainHeight(double lat, double lon, double& height, 00344 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00345 virtual bool terrainHeight(const DtVector& databaseLocation, double& height, 00346 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00348 00350 00351 00352 00353 00354 00355 00356 00357 00358 00359 00360 00361 00362 00363 00364 00365 00366 00367 00368 00369 00370 00371 00372 00373 00374 00375 00376 00377 00378 00379 00380 00381 00382 00383 00384 00385 00386 virtual bool terrainHeightAndSurface(const DtPoint& databaseLocation, 00387 double& height, DtSurface& surface, bool* dataAvailable = 0, 00388 bool overrideBlockingAssert = false) const; 00389 virtual bool terrainHeightAndSurface(double lat, double lon, double& height, 00390 DtSurface& surface, bool* dataAvailable = 0, 00391 bool overrideBlockingAssert = false) const; 00392 virtual bool terrainHeightAndSurface(const DtVector& databaseLocation, 00393 double& height, DtSurface& surface, bool* dataAvailable = 0, 00394 bool overrideBlockingAssert = false) const; 00395 virtual bool terrainHeightAndSurface(const DtVector& databaseLocation, 00396 double& heightAtLocation, DtChordIntersectionRecord& intersectionRec, 00397 DtIntersectionRecord::DtIntersectionType irtFlag = 00398 DtIntersectionRecord::INT_ALL_DATA, 00399 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00401 00403 00404 00405 00406 00407 00408 00409 00410 00411 00412 00413 00414 00415 00416 00417 00418 00419 00420 00421 00422 00423 00424 00425 00426 00427 00428 00429 00430 00431 00432 00433 virtual bool terrainSurface(const DtPoint& databaseLocation, 00434 DtSurface& surface, bool* dataAvailable = 0, 00435 bool overrideBlockingAssert = false) const; 00436 virtual bool terrainSurface(double lat, double lon, DtSurface& surface, 00437 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00438 virtual bool terrainSurface(const DtVector& databaseLocation, 00439 DtSurface& surface, bool* dataAvailable = 0, 00440 bool overrideBlockingAssert = false) const; 00441 00442 virtual DtSurface terrainSurface(const DtPoint& databaseLocation, 00443 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00444 virtual DtSurface terrainSurface(double lat, double lon, 00445 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00446 virtual DtSurface terrainSurface(const DtVector& databaseLocation, 00447 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00449 00486 virtual bool closestTerrainLocation(const DtPoint& databaseLocation, 00487 DtPoint& intersectionPoint, DtVectorNetworkRecord* vectorNetworkRecord =0, 00488 DtVectorNetworkIntersectionRecord* vecNetworkIntersectionRecord = 0, 00489 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00490 00493 virtual bool closestTerrainLocation(double lat, double lon, 00494 DtPoint& intersectionPoint, DtVectorNetworkRecord* vectorNetworkRecord =0, 00495 DtVectorNetworkIntersectionRecord* vecNetworkIntersectionRecord = 0, 00496 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00497 00499 virtual bool closestTerrainLocation(const DtVector& databaseLocation, 00500 DtPoint& intersectionPoint, DtVectorNetworkRecord* vectorNetworkRecord =0, 00501 DtVectorNetworkIntersectionRecord* vecNetworkIntersectionRecord = 0, 00502 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00503 00506 virtual bool closestTerrainLocation(const DtPoint& databaseLocation, 00507 DtChordIntersectionRecord& record, 00508 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA, 00509 DtVectorNetworkRecord* vectorDatarecord = 0, 00510 DtVectorNetworkIntersectionRecord* vectorIntersectionRecord = 0, 00511 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00512 00515 virtual bool closestTerrainLocation(double lat, double lon, 00516 DtChordIntersectionRecord& record, 00517 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA, 00518 DtVectorNetworkRecord* vectorDatarecord = 0, 00519 DtVectorNetworkIntersectionRecord* vectorIntersectionRecord = 0, 00520 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00521 00523 virtual bool closestTerrainLocation(const DtVector& databaseLocation, 00524 DtChordIntersectionRecord& record, 00525 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA, 00526 DtVectorNetworkRecord* vectorDatarecord = 0, 00527 DtVectorNetworkIntersectionRecord* vectorIntersectionRecord = 0, 00528 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00529 00558 virtual bool closestTerrainLocation(const DtVector& curPosition, 00559 DtVector& intersection, bool ignoreWater, bool* dataAvailable = 0, 00560 bool overrideBlockingAssert = false) const; 00561 00592 virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint, 00593 double& intersectionTime, DtVectorNetworkRecord *record = 0, 00594 DtVectorNetworkIntersectionRecord *intersectionRecord = 0, 00595 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00596 00625 virtual bool intersect(const DtChord& chord, 00626 DtChordIntersectionRecord& record, 00627 DtIntersectionRecord::DtIntersectionType irtFlag = 00628 DtIntersectionRecord::INT_ALL_DATA, 00629 DtVectorNetworkRecord *vectorDataRecord = 0, 00630 DtVectorNetworkIntersectionRecord *vectorIntersectionRecord = 0, 00631 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00632 00634 00635 00636 00637 00638 00639 00640 00641 00642 00643 00644 bool getVrfObjects(DtExtent& extent, std::set<const DtVrfObject*>& objects) const; 00645 bool getVrfObjects(DtExtent& extent, std::set<DtVrfObject*>& objects); 00646 00647 bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent, 00648 std::set<DtVrfObject*>& objects); 00649 00650 bool getVrfObjects(DtVrfObjectPredicate& predicate, DtExtent& extent, 00651 std::set<const DtVrfObject*>& objects) const; 00652 00653 bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects); 00654 bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects) const; 00655 00656 bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord, 00657 std::list<DtVrfObject*>& objects); 00658 bool getVrfObjects(DtVrfObjectPredicate& predicate, DtChord& chord, 00659 std::list<const DtVrfObject*>& objects) const; 00661 00663 00664 00665 00666 00667 00668 00669 00670 00671 00672 00673 void visitVrfObjects(const DtExtent& extent, class DtSpatialSelectionFunctor& callback) const; 00674 void visitVrfObjects(const DtChord& chord, class DtSpatialSelectionFunctor& callback) const; 00676 00694 virtual void groundClamp(DtPoint& databaseCoord, float const offset = 0, 00695 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00696 00714 virtual void groundClamp(DtVector& databaseCoord, float const offset = 0, 00715 bool* dataAvailable = 0, bool overrideBlockingAssert = false) const; 00716 00721 virtual void getVrfObjectsAlongChord(const DtVector& databaseStart, 00722 const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList) const; 00723 00731 virtual DtManagedObjectListConstPtr getSpatiallyManagedVrfObjectList(); 00732 00738 virtual bool initializeSpatialVrfObjectOrganization(); 00739 00751 virtual void calcSpatialMgrResolution(const DtManagedObjectListConstPtr& vrfObjList); 00752 00759 virtual DtFilterFunctionPredicate getSpatialOrganizationPredicate(); 00760 00763 static bool spatialOrganizationObjectFilterFcn(const DtVrfObject* obj, void* usr); 00764 00775 virtual bool processSpatialOrganizationObjectFilterFcn(const DtVrfObject* obj); 00776 00778 static void querySpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr); 00779 static void setSpatialSubdivisionConfigurationCallback(DtSimMessage* msg, void* usr); 00780 00783 virtual void processQuerySpatialSubdivisionConfiguration(DtSimMessage* msg); 00784 virtual void processSetSpatialSubdivisionConfiguration(DtSimMessage* msg); 00785 00788 virtual bool useVrfObjectSpatialSub() const; 00789 virtual void setUseVrfObjectSpatialSub(bool yesOrNo); 00790 00791 00794 virtual bool isSpatialMgrResolutionUserSpecified() const; 00795 virtual void setSpatialMgrResolutionUserSpecified(bool yesOrNo); 00796 00799 virtual unsigned int vrfObjectSpatialSubXResolution() const; 00800 virtual unsigned int vrfObjectSpatialSubYResolution() const; 00801 virtual unsigned int vrfObjectSpatialSubZResolution() const; 00803 00808 virtual void setVrfObjectSpatialSubXResolution(unsigned int newXResolution); 00809 virtual void setVrfObjectSpatialSubYResolution(unsigned int newYResolution); 00810 virtual void setVrfObjectSpatialSubZResolution(unsigned int newZResolution); 00812 00814 00815 00819 virtual DtVectorObstructionManager* vectorObstructionManager(); 00820 virtual const DtVectorObstructionManager* vectorObstructionManager() const; 00821 00823 virtual DtTerrainInterface* terrainInterface(); 00825 virtual const DtTerrainInterface* terrainInterface() const; 00826 00829 virtual void setTerrainInterface(DtTerrainInterface* newTerrainDatabase); 00830 00831 virtual DtSimManager* simManager(); 00832 virtual const DtSimManager* simManager() const; 00833 virtual void setSimManager(DtSimManager* newSimManager); 00834 00835 virtual DtVrfObjectManager* objectManager(); 00836 virtual const DtVrfObjectManager* objectManager() const; 00837 virtual void setVrfObjectManager(DtVrfObjectManager* newObjectMgr); 00838 00839 00840 virtual DtEnvironmentalStateManager * environmentalStateManager(); 00841 virtual const DtEnvironmentalStateManager * environmentalStateManager() const; 00842 virtual void setEnvironmentalStateManager(DtEnvironmentalStateManager * manager); 00843 00844 00846 00847 virtual DtPhysicalWorldParams* parameters(); 00848 virtual const DtPhysicalWorldParams* parameters() const; 00849 00850 00854 00855 virtual DtSensorSignatureManager* sensorSignatureManager(); 00856 virtual const DtSensorSignatureManager* sensorSignatureManager() const; 00857 00858 00867 virtual bool checkLineOfSight(const DtVrfObject& viewingObject, 00868 const DtVector& databaseViewingPoint, const DtVrfObject& targetObject, 00869 bool* terrainDataAvailable = 0) const; 00870 00878 virtual bool checkLineOfSight(const DtVector& databaseViewingPoint, 00879 const DtVrfObject& targetObject, bool* terrainDataAvailable = 0) const; 00880 00886 static void objectAboutToBeRemovedCb(DtVrfObject * vrfObject, void * usr); 00887 00888 virtual void expireDataLoadRequestsBeforeTime(const double& time); 00889 00890 protected: 00891 00892 00896 typedef DtString DtLosTestKey; 00897 00898 typedef std::map<DtLosTestKey, DtVrfLineOfSightFunctorSP> DtKeyedLineOfSightTestContainer; 00899 typedef DtKeyedLineOfSightTestContainer::iterator DtMasterLosTestIter; 00900 typedef DtKeyedLineOfSightTestContainer::const_iterator DtMasterLosTestConstIter; 00901 00902 DtKeyedLineOfSightTestContainer myMasterLineOfSightTestContainer; 00903 00904 typedef std::list<DtVrfLineOfSightFunctorSP> DtLineOfSightTestContainer; 00905 typedef DtLineOfSightTestContainer::iterator DtLosTestIter; 00906 typedef DtLineOfSightTestContainer::const_iterator DtLosTestConstIter; 00907 00908 DtLineOfSightTestContainer myLineOfSightTestsToPerform; 00909 00910 virtual void addInitialLosChecks(); 00911 00917 00918 virtual void setDefaultLineOfSightTestOrder( 00919 const DtRwNLengthStringVector& lineOfSightTestsAndOrder); 00920 virtual void setLineOfSightTestOrder( 00921 const DtRwNLengthStringVector& lineOfSightTestsAndOrder); 00922 00923 00929 virtual void addLineOfSightTest(const DtLosTestKey&, DtVrfLineOfSightFunctorSP losTest); 00930 00933 virtual void removeLineOfSightTest(const DtLosTestKey& testKey); 00934 00939 virtual void performTest(const DtLosTestKey& testToRun); 00940 00944 virtual void doNotPerformTest(const DtLosTestKey& testToRun); 00945 00949 virtual void doNotPerformTest(DtVrfLineOfSightFunctorSP losTest); 00950 00951 00953 static bool lineOfSightFilter(const DtVrfObject* object, void* usr); 00954 00955 virtual void createFeatureSpecificationList(DtVectorNetworkRecord& vecNetworkRecord) const; 00956 00959 virtual bool checkLineOfSight(const DtLineOfSightTestContainer& losTests, 00960 const DtVrfLineOfSightCheckParams& losCheckParams) const; 00961 00966 virtual DtVector localLineOfSightTestLocation(const DtVrfObject& object) const; 00967 00970 virtual bool checkVrfObjectsForLOS( 00971 const DtVrfLineOfSightCheckParams& losCheckParams) const; 00972 00975 virtual bool checkVectorNetworkForLOS( 00976 const DtVrfLineOfSightCheckParams& losCheckParams) const; 00977 00980 virtual bool checkTerrainForLOS( 00981 const DtVrfLineOfSightCheckParams& losCheckParams) const; 00982 00983 virtual bool intersectVrfObjects(const DtVrfObject& primaryVrfObject, 00984 const DtVector& databaseStartPoint, const DtVrfObject& secondaryVrfObject) const; 00985 00989 virtual bool intersectsVrfObject(const DtVrfObject& vrfObjectToTest, 00990 const DtVector& databaseStartPoint, const DtVector& databaseEndPoint, 00991 double& distToIntersect) const; 00992 00994 DtManagedObjectListConstPtr myLineOfSightFilterList; 00995 00996 protected: 00997 00998 bool testInvariant() const; 00999 01004 const DtChord createWorldIntersectionChord(const DtVector& databaseLocation) const; 01005 01006 01008 virtual DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager(); 01009 virtual const DtSpatialVrfObjectManagerInterface* spatialVrfObjectManager() const; 01010 virtual void setSpatialVrfObjectManager(DtSpatialVrfObjectManagerInterface* newSpatialVrfObjectMgr); 01011 01015 virtual DtPhysicalWorldParams* createParameters(); 01016 01019 virtual DtSensorSignatureManager* createSensorSignatureManager(); 01020 01026 virtual void processObjectAboutToBeRemoved(DtVrfObject * vrfObject); 01027 01030 virtual void performTerrainPreload(); 01031 01032 protected: 01033 01034 DtTerrainInterface* myTerrainInterface; 01035 01036 DtVectorObstructionManager* myVectorObstructionManager; 01037 01038 bool myUseVrfObjectSpatialManager; 01039 bool mySpatialMgrResolutionUserSpecified; 01040 unsigned int myVrfObjectSpatialSubXResolution; 01041 unsigned int myVrfObjectSpatialSubYResolution; 01042 unsigned int myVrfObjectSpatialSubZResolution; 01043 01044 DtSpatialVrfObjectManagerInterface* mySpatialVrfObjectManager; 01045 01046 DtManagedObjectListConstPtr mySpatiallyManagedVrfObjectList; 01047 01049 DtSimManager* mySimManager; 01051 DtVrfObjectManager* myVrfObjectManager; 01052 01054 DtPhysicalWorldParams* myParameters; 01055 01056 DtSensorSignatureManager* mySensorSignatureManager; 01057 01058 DtEnvironmentalStateManager * myEnvironmentalStateManager; 01059 01060 DtFilename myPhysicalWorldFile; 01061 01062 DtTime myLastPreloadTerrainTime; 01063 01064 DtExpireOlderThanCommand* myExpireOlderThanCommand; 01065 01066 friend class IntersectVrfObjectFunctor; 01067 }; 01068 01069 inline const DtFilename& DtPhysicalWorld::physicalWorldFile() const 01070 { 01071 return myPhysicalWorldFile; 01072 } 01073 01074 class DT_DLL_vrfobjcore DtExpireOlderThanCommand : public DtConsoleCommand 01075 { 01076 public: 01077 DtExpireOlderThanCommand(DtPhysicalWorld* physicalWorld); 01078 virtual bool execute(const DtString& parameters); 01079 virtual DtString help(const DtString& parameters); 01080 virtual bool showInHelp() const { return true; }; 01081 protected: 01082 DtPhysicalWorld* myPhysicalWorld; 01083 };