15 #include <vlutil/vlConfig.h>
16 #include <vlutil/vlFilename.h>
17 #include <matrix/vlVector.h>
20 #include <boost/unordered_set.hpp>
33 class DtGeodeticCoord;
115 virtual bool initialize();
125 virtual bool reinitialize();
128 virtual bool reset();
135 virtual bool loadParametersFromFile(
const DtFilename&
filename);
142 virtual bool loadPhysicalWorldFile(
const DtFilename&
filename);
145 virtual void processParameters();
149 const DtFilename& physicalWorldFile()
const;
152 virtual bool parametersLoaded()
const;
173 virtual bool isValidState()
const;
200 virtual void geocentricToDatabase(
const DtDcm& in, DtDcm& out)
const;
203 virtual void geocentricToDatabase(
const DtVector& vIn,
const DtDcm& dIn,
213 virtual void databaseToGeocentric(
const DtDcm& in, DtDcm& out)
const;
216 virtual void databaseToGeocentric(
const DtVector& vIn,
const DtDcm& dIn,
223 virtual void databaseToGeodetic(
const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition)
const;
226 virtual void databaseToGeodetic(
const DtVector& databasePosition,
DtVector& geodeticPosition)
const;
228 virtual void databaseToGeodetic(
const DtExtent& extent,
DtExtent& destExtent)
const;
231 virtual void geodeticToDatabase(
const DtExtent& extent,
DtExtent& destExtent)
const;
233 virtual void geodeticToDatabase(
const DtGeodeticCoord& geodeticPosition,
237 virtual void geodeticToDatabase(
const DtVector& geodeticPosition,
242 virtual void topoToDatabase(
const DtVector& databasePosition, DtDcm& topoToDatabase)
const;
245 virtual void databaseToTopo(
const DtVector& databasePosition, DtDcm& databaseToTopo)
const;
285 virtual double terrainHeight(
const DtPoint& databaseLocation,
286 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
287 virtual double terrainHeight(
double lat,
double lon,
bool* dataAvailable = 0,
288 bool overrideBlockingAssert =
false)
const;
289 virtual double terrainHeight(
const DtVector& databaseLocation,
290 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
315 virtual bool terrainHeight(
const DtPoint& databaseLocation,
double& height,
316 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
317 virtual bool terrainHeight(
double lat,
double lon,
double& height,
318 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
319 virtual bool terrainHeight(
const DtVector& databaseLocation,
double& height,
320 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
360 virtual bool terrainHeightAndSurface(
const DtPoint& databaseLocation,
361 double& height,
DtSurface& surface,
bool* dataAvailable = 0,
362 bool overrideBlockingAssert =
false)
const;
363 virtual bool terrainHeightAndSurface(
double lat,
double lon,
double& height,
364 DtSurface& surface,
bool* dataAvailable = 0,
365 bool overrideBlockingAssert =
false)
const;
366 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
367 double& height,
DtSurface& surface,
bool* dataAvailable = 0,
368 bool overrideBlockingAssert =
false)
const;
369 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
373 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
379 virtual bool terrainHeightAndSurfaceBelow(
const DtVector& databaseLocation,
380 double& heightAtLocation,
DtSurface& surfaceAtLocation,
381 bool* dataAvailable = 0,
382 bool overrideBlockingAssert =
false)
const;
444 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
447 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false);
481 virtual bool terrainSurface(
const DtPoint& databaseLocation,
482 DtSurface& surface,
bool* dataAvailable = 0,
483 bool overrideBlockingAssert =
false)
const;
484 virtual bool terrainSurface(
double lat,
double lon,
DtSurface& surface,
485 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
486 virtual bool terrainSurface(
const DtVector& databaseLocation,
487 DtSurface& surface,
bool* dataAvailable = 0,
488 bool overrideBlockingAssert =
false)
const;
491 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
492 virtual DtSurface terrainSurface(
double lat,
double lon,
493 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
495 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
528 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
529 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
530 bool overrideBlockingAssert =
false)
const;
534 virtual bool closestTerrainLocation(
double lat,
double lon,
535 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
536 bool overrideBlockingAssert =
false)
const;
539 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
540 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
541 bool overrideBlockingAssert =
false)
const;
545 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
548 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
551 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
554 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
558 virtual bool closestTerrainLocation(
double lat,
double lon,
561 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
564 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
567 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
597 virtual bool closestTerrainLocation(
const DtVector& curPosition,
599 bool overrideBlockingAssert =
false)
const;
631 virtual bool intersect(
const DtChord& chord,
DtPoint& intersectionPoint,
632 double& intersectionTime,
bool* dataAvailable = 0,
633 bool overrideBlockingAssert =
false)
const;
663 virtual bool intersect(
const DtChord& chord,
667 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
694 virtual bool allIntersectsAlongChord(
const DtChord& chord,
698 bool overrideBlockingAssert =
false)
const;
724 bool getVrfObjects(
DtChord& chord, std::list<DtVrfObject*>& objects);
725 bool getVrfObjects(
DtChord& chord, std::list<const DtVrfObject*>& objects)
const;
728 std::list<DtVrfObject*>& objects);
730 std::list<const DtVrfObject*>& objects)
const;
765 virtual void groundClamp(
DtPoint& databaseCoord,
float const offset = 0,
766 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
785 virtual void groundClamp(
DtVector& databaseCoord,
float const offset = 0,
786 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
792 virtual void getVrfObjectsAlongChord(
const DtVector& databaseStart,
793 const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList)
const;
809 virtual bool initializeSpatialVrfObjectOrganization();
834 static bool spatialOrganizationObjectFilterFcn(
const DtVrfObject* obj,
void* usr);
846 virtual bool processSpatialOrganizationObjectFilterFcn(
const DtVrfObject* obj);
849 static void querySpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
850 static void setSpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
853 static void requestSensorDomainsCallback(
DtSimMessage* msg,
void* usr);
854 virtual void sendSensorDomains();
858 virtual void processQuerySpatialSubdivisionConfiguration(
DtSimMessage* msg);
859 virtual void processSetSpatialSubdivisionConfiguration(
DtSimMessage* msg);
863 virtual bool useVrfObjectSpatialSub()
const;
864 virtual void setUseVrfObjectSpatialSub(
bool yesOrNo);
869 virtual bool isSpatialMgrResolutionUserSpecified()
const;
870 virtual void setSpatialMgrResolutionUserSpecified(
bool yesOrNo);
874 virtual unsigned int vrfObjectSpatialSubXResolution()
const;
875 virtual unsigned int vrfObjectSpatialSubYResolution()
const;
876 virtual unsigned int vrfObjectSpatialSubZResolution()
const;
883 virtual void setVrfObjectSpatialSubXResolution(
unsigned int newXResolution);
884 virtual void setVrfObjectSpatialSubYResolution(
unsigned int newYResolution);
885 virtual void setVrfObjectSpatialSubZResolution(
unsigned int newZResolution);
901 virtual void setSimManager(
DtSimManager* newSimManager);
956 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
958 bool* terrainDataAvailable = 0,
959 const DtString& featureQueryName =
"default",
960 DtVector* intersectionPoint = 0)
const;
975 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
977 bool* terrainDataAvailable = 0,
978 const DtString& featureQueryName =
"default",
979 DtVector* intersectionPoint = 0)
const;
994 virtual bool checkLineOfSight(
const DtVector& databaseViewingPoint,
995 const DtVrfObject& targetObject,
bool* terrainDataAvailable = 0,
996 const DtString& featureQueryName =
"default",
997 DtVector* intersectionPoint = 0)
const;
1009 virtual bool checkLineOfSightWithoutObjects(
1010 const DtVector& databaseViewingPoint,
1011 const DtVector& databaseTargetPoint,
1012 bool* terrainDataAvailable = 0,
1013 const DtString& featureQueryName =
"default",
1033 virtual bool checkLineOfFire(
const DtVrfObject& viewingObject,
1035 const DtVector& databaseTargetPoint,
1036 bool* terrainDataAvailable = 0,
1037 double* normIntersectDistance = 0,
1042 virtual bool checkLineOfFire(
const DtVrfObject& viewingObject,
1044 bool* terrainDataAvailable = 0,
1045 double* normIntersectDistance = 0,
1050 virtual bool checkLineOfFire(
const DtVector& databaseViewingPoint,
1051 const DtVector& databaseTargetPoint,
1052 bool* terrainDataAvailable = 0,
1053 double* normIntersectDistance = 0,
1069 virtual bool checkLineOfFireWithoutObjects(
1070 const DtVector& databaseViewingPoint,
1071 const DtVector& databaseTargetPoint,
1072 bool* terrainDataAvailable = 0,
1073 double* normIntersectDistance = 0,
1082 static void objectAboutToBeRemovedCb(
DtVrfObject * vrfObject,
void * usr);
1084 virtual void expireDataLoadRequestsBeforeTime(
const double& time);
1089 virtual double thermoclinePermeability(
1099 return myLineOfSightTestsToPerform;
1106 const DtChord createWorldIntersectionChord(
const DtVector& databaseLocation)
const;
1127 virtual void addInitialLosChecks();
1135 virtual void setDefaultLineOfSightTestOrder(
1137 virtual void setLineOfSightTestOrder(
1150 virtual void removeLineOfSightTest(
const DtLosTestKey& testKey);
1156 virtual void performTest(
const DtLosTestKey& testToRun);
1161 virtual void doNotPerformTest(
const DtLosTestKey& testToRun);
1173 static bool canBlockLineOfSight(
const DtVrfObject*
object,
void* usr);
1194 virtual bool checkVrfObjectsForLOS(
1199 virtual bool checkFeaturesForLOS(
1204 virtual bool checkTerrainForLOS(
1217 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1218 const DtVector& databaseStartPoint,
1224 const std::list<DtUUID>& ignoreList = std::list<DtUUID>())
const;
1230 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1235 const std::list<DtUUID>& ignoreList = std::list<DtUUID>())
const;
1240 virtual bool intersectsVrfObject(
const DtVrfObject& vrfObjectToTest,
1242 double& distToIntersect,
DtVector* surfaceNormal = 0)
const;
1246 virtual void cacheInformationForTerrainArea(
int requestId,
int lowestLOD,
int highestLOD,
const DtExtent& cacheArea,
1247 double& estimatedTime,
double& estimatedSize, std::vector<std::string>& elevationLayers, std::vector<std::string>& modelLayers)
const;
1254 virtual void cancelCacheTerrainArea(
int requestId);
1258 bool testInvariant()
const;
1280 virtual void processObjectAboutToBeRemoved(
DtVrfObject * vrfObject);
1284 virtual void performTerrainPreload();
1323 friend class IntersectVrfObjectFunctor;