15 #include <vlutil/vlConfig.h>
16 #include <vlutil/vlFilename.h>
17 #include <matrix/vlVector.h>
20 #include <boost/unordered_set.hpp>
32 class DtGeodeticCoord;
114 virtual bool initialize();
124 virtual bool reinitialize();
127 virtual bool reset();
134 virtual bool loadParametersFromFile(
const DtFilename& filename);
141 virtual bool loadPhysicalWorldFile(
const DtFilename& filename);
144 virtual void processParameters();
148 const DtFilename& physicalWorldFile()
const;
151 virtual bool parametersLoaded()
const;
172 virtual bool isValidState()
const;
199 virtual void geocentricToDatabase(
const DtDcm& in, DtDcm& out)
const;
202 virtual void geocentricToDatabase(
const DtVector& vIn,
const DtDcm& dIn,
212 virtual void databaseToGeocentric(
const DtDcm& in, DtDcm& out)
const;
215 virtual void databaseToGeocentric(
const DtVector& vIn,
const DtDcm& dIn,
222 virtual void databaseToGeodetic(
const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition)
const;
225 virtual void databaseToGeodetic(
const DtVector& databasePosition,
DtVector& geodeticPosition)
const;
227 virtual void databaseToGeodetic(
const DtExtent& extent,
DtExtent& destExtent)
const;
230 virtual void geodeticToDatabase(
const DtExtent& extent,
DtExtent& destExtent)
const;
232 virtual void geodeticToDatabase(
const DtGeodeticCoord& geodeticPosition,
236 virtual void geodeticToDatabase(
const DtVector& geodeticPosition,
241 virtual void topoToDatabase(
const DtVector& databasePosition, DtDcm& topoToDatabase)
const;
244 virtual void databaseToTopo(
const DtVector& databasePosition, DtDcm& databaseToTopo)
const;
284 virtual double terrainHeight(
const DtPoint& databaseLocation,
285 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
286 virtual double terrainHeight(
double lat,
double lon,
bool* dataAvailable = 0,
287 bool overrideBlockingAssert =
false)
const;
288 virtual double terrainHeight(
const DtVector& databaseLocation,
289 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
314 virtual bool terrainHeight(
const DtPoint& databaseLocation,
double& height,
315 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
316 virtual bool terrainHeight(
double lat,
double lon,
double& height,
317 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
318 virtual bool terrainHeight(
const DtVector& databaseLocation,
double& height,
319 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
359 virtual bool terrainHeightAndSurface(
const DtPoint& databaseLocation,
360 double& height,
DtSurface& surface,
bool* dataAvailable = 0,
361 bool overrideBlockingAssert =
false)
const;
362 virtual bool terrainHeightAndSurface(
double lat,
double lon,
double& height,
363 DtSurface& surface,
bool* dataAvailable = 0,
364 bool overrideBlockingAssert =
false)
const;
365 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
366 double& height,
DtSurface& surface,
bool* dataAvailable = 0,
367 bool overrideBlockingAssert =
false)
const;
368 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
372 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
378 virtual bool terrainHeightAndSurfaceBelow(
const DtVector& databaseLocation,
379 double& heightAtLocation,
DtSurface& surfaceAtLocation,
380 bool* dataAvailable = 0,
381 bool overrideBlockingAssert =
false)
const;
443 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
446 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false);
480 virtual bool terrainSurface(
const DtPoint& databaseLocation,
481 DtSurface& surface,
bool* dataAvailable = 0,
482 bool overrideBlockingAssert =
false)
const;
483 virtual bool terrainSurface(
double lat,
double lon,
DtSurface& surface,
484 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
485 virtual bool terrainSurface(
const DtVector& databaseLocation,
486 DtSurface& surface,
bool* dataAvailable = 0,
487 bool overrideBlockingAssert =
false)
const;
490 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
491 virtual DtSurface terrainSurface(
double lat,
double lon,
492 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
494 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
527 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
528 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
529 bool overrideBlockingAssert =
false)
const;
533 virtual bool closestTerrainLocation(
double lat,
double lon,
534 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
535 bool overrideBlockingAssert =
false)
const;
538 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
539 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
540 bool overrideBlockingAssert =
false)
const;
544 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
547 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
550 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
553 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
557 virtual bool closestTerrainLocation(
double lat,
double lon,
560 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
563 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
566 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
596 virtual bool closestTerrainLocation(
const DtVector& curPosition,
598 bool overrideBlockingAssert =
false)
const;
630 virtual bool intersect(
const DtChord& chord,
DtPoint& intersectionPoint,
631 double& intersectionTime,
bool* dataAvailable = 0,
632 bool overrideBlockingAssert =
false)
const;
662 virtual bool intersect(
const DtChord& chord,
666 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
693 virtual bool allIntersectsAlongChord(
const DtChord& chord,
697 bool overrideBlockingAssert =
false)
const;
723 bool getVrfObjects(
DtChord& chord, std::list<DtVrfObject*>& objects);
724 bool getVrfObjects(
DtChord& chord, std::list<const DtVrfObject*>& objects)
const;
727 std::list<DtVrfObject*>& objects);
729 std::list<const DtVrfObject*>& objects)
const;
764 virtual void groundClamp(
DtPoint& databaseCoord,
float const offset = 0,
765 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
784 virtual void groundClamp(
DtVector& databaseCoord,
float const offset = 0,
785 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
791 virtual void getVrfObjectsAlongChord(
const DtVector& databaseStart,
792 const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList)
const;
808 virtual bool initializeSpatialVrfObjectOrganization();
833 static bool spatialOrganizationObjectFilterFcn(
const DtVrfObject* obj,
void* usr);
845 virtual bool processSpatialOrganizationObjectFilterFcn(
const DtVrfObject* obj);
848 static void querySpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
849 static void setSpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
852 static void requestSensorDomainsCallback(
DtSimMessage* msg,
void* usr);
853 virtual void sendSensorDomains();
857 virtual void processQuerySpatialSubdivisionConfiguration(
DtSimMessage* msg);
858 virtual void processSetSpatialSubdivisionConfiguration(
DtSimMessage* msg);
862 virtual bool useVrfObjectSpatialSub()
const;
863 virtual void setUseVrfObjectSpatialSub(
bool yesOrNo);
868 virtual bool isSpatialMgrResolutionUserSpecified()
const;
869 virtual void setSpatialMgrResolutionUserSpecified(
bool yesOrNo);
873 virtual unsigned int vrfObjectSpatialSubXResolution()
const;
874 virtual unsigned int vrfObjectSpatialSubYResolution()
const;
875 virtual unsigned int vrfObjectSpatialSubZResolution()
const;
882 virtual void setVrfObjectSpatialSubXResolution(
unsigned int newXResolution);
883 virtual void setVrfObjectSpatialSubYResolution(
unsigned int newYResolution);
884 virtual void setVrfObjectSpatialSubZResolution(
unsigned int newZResolution);
900 virtual void setSimManager(
DtSimManager* newSimManager);
949 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
951 bool* terrainDataAvailable = 0,
952 const DtString& featureQueryName =
"default",
953 DtVector* intersectionPoint = 0)
const;
968 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
970 bool* terrainDataAvailable = 0,
971 const DtString& featureQueryName =
"default",
972 DtVector* intersectionPoint = 0)
const;
987 virtual bool checkLineOfSight(
const DtVector& databaseViewingPoint,
988 const DtVrfObject& targetObject,
bool* terrainDataAvailable = 0,
989 const DtString& featureQueryName =
"default",
990 DtVector* intersectionPoint = 0)
const;
1002 virtual bool checkLineOfSightWithoutObjects(
1003 const DtVector& databaseViewingPoint,
1004 const DtVector& databaseTargetPoint,
1005 bool* terrainDataAvailable = 0,
1006 const DtString& featureQueryName =
"default",
1026 virtual bool checkLineOfFire(
const DtVrfObject& viewingObject,
1028 const DtVector& databaseTargetPoint,
1029 bool* terrainDataAvailable = 0,
1030 double* normIntersectDistance = 0,
1035 virtual bool checkLineOfFire(
const DtVrfObject& viewingObject,
1037 bool* terrainDataAvailable = 0,
1038 double* normIntersectDistance = 0,
1043 virtual bool checkLineOfFire(
const DtVector& databaseViewingPoint,
1044 const DtVector& databaseTargetPoint,
1045 bool* terrainDataAvailable = 0,
1046 double* normIntersectDistance = 0,
1062 virtual bool checkLineOfFireWithoutObjects(
1063 const DtVector& databaseViewingPoint,
1064 const DtVector& databaseTargetPoint,
1065 bool* terrainDataAvailable = 0,
1066 double* normIntersectDistance = 0,
1075 static void objectAboutToBeRemovedCb(
DtVrfObject * vrfObject,
void * usr);
1077 virtual void expireDataLoadRequestsBeforeTime(
const double& time);
1082 virtual double thermoclinePermeability(
1092 return myLineOfSightTestsToPerform;
1099 const DtChord createWorldIntersectionChord(
const DtVector& databaseLocation)
const;
1120 virtual void addInitialLosChecks();
1128 virtual void setDefaultLineOfSightTestOrder(
1130 virtual void setLineOfSightTestOrder(
1143 virtual void removeLineOfSightTest(
const DtLosTestKey& testKey);
1149 virtual void performTest(
const DtLosTestKey& testToRun);
1154 virtual void doNotPerformTest(
const DtLosTestKey& testToRun);
1166 static bool canBlockLineOfSight(
const DtVrfObject*
object,
void* usr);
1187 virtual bool checkVrfObjectsForLOS(
1192 virtual bool checkFeaturesForLOS(
1197 virtual bool checkTerrainForLOS(
1209 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1210 const DtVector& databaseStartPoint,
1220 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1228 virtual bool intersectsVrfObject(
const DtVrfObject& vrfObjectToTest,
1230 double& distToIntersect)
const;
1234 bool testInvariant()
const;
1256 virtual void processObjectAboutToBeRemoved(
DtVrfObject * vrfObject);
1260 virtual void performTerrainPreload();
1297 friend class IntersectVrfObjectFunctor;