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;
157 virtual void addPreLoadParametersCallback(
159 virtual void removePreLoadParametersCallback(
166 virtual void addPostLoadParametersCallback(
168 virtual void removePostLoadParametersCallback(
191 virtual bool isValidState()
const;
218 virtual void geocentricToDatabase(
const DtDcm& in, DtDcm& out)
const;
221 virtual void geocentricToDatabase(
const DtVector& vIn,
const DtDcm& dIn,
231 virtual void databaseToGeocentric(
const DtDcm& in, DtDcm& out)
const;
234 virtual void databaseToGeocentric(
const DtVector& vIn,
const DtDcm& dIn,
241 virtual void databaseToGeodetic(
const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition)
const;
244 virtual void databaseToGeodetic(
const DtVector& databasePosition,
DtVector& geodeticPosition)
const;
246 virtual void databaseToGeodetic(
const DtExtent& extent,
DtExtent& destExtent)
const;
249 virtual void geodeticToDatabase(
const DtExtent& extent,
DtExtent& destExtent)
const;
251 virtual void geodeticToDatabase(
const DtGeodeticCoord& geodeticPosition,
255 virtual void geodeticToDatabase(
const DtVector& geodeticPosition,
260 virtual void topoToDatabase(
const DtVector& databasePosition, DtDcm& topoToDatabase)
const;
263 virtual void databaseToTopo(
const DtVector& databasePosition, DtDcm& databaseToTopo)
const;
303 virtual double terrainHeight(
const DtPoint& databaseLocation,
304 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
305 virtual double terrainHeight(
double lat,
double lon,
bool* dataAvailable = 0,
306 bool overrideBlockingAssert =
false)
const;
307 virtual double terrainHeight(
const DtVector& databaseLocation,
308 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
333 virtual bool terrainHeight(
const DtPoint& databaseLocation,
double& height,
334 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
335 virtual bool terrainHeight(
double lat,
double lon,
double& height,
336 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
337 virtual bool terrainHeight(
const DtVector& databaseLocation,
double& height,
338 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
378 virtual bool terrainHeightAndSurface(
const DtPoint& databaseLocation,
379 double& height,
DtSurface& surface,
bool* dataAvailable = 0,
380 bool overrideBlockingAssert =
false)
const;
381 virtual bool terrainHeightAndSurface(
double lat,
double lon,
double& height,
382 DtSurface& surface,
bool* dataAvailable = 0,
383 bool overrideBlockingAssert =
false)
const;
384 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
385 double& height,
DtSurface& surface,
bool* dataAvailable = 0,
386 bool overrideBlockingAssert =
false)
const;
387 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
391 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
397 virtual bool terrainHeightAndSurfaceBelow(
const DtVector& databaseLocation,
398 double& heightAtLocation,
DtSurface& surfaceAtLocation,
399 bool* dataAvailable = 0,
400 bool overrideBlockingAssert =
false)
const;
462 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
465 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false);
499 virtual bool terrainSurface(
const DtPoint& databaseLocation,
500 DtSurface& surface,
bool* dataAvailable = 0,
501 bool overrideBlockingAssert =
false)
const;
502 virtual bool terrainSurface(
double lat,
double lon,
DtSurface& surface,
503 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
504 virtual bool terrainSurface(
const DtVector& databaseLocation,
505 DtSurface& surface,
bool* dataAvailable = 0,
506 bool overrideBlockingAssert =
false)
const;
509 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
510 virtual DtSurface terrainSurface(
double lat,
double lon,
511 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
513 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
546 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
547 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
548 bool overrideBlockingAssert =
false)
const;
552 virtual bool closestTerrainLocation(
double lat,
double lon,
553 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
554 bool overrideBlockingAssert =
false)
const;
557 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
558 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
559 bool overrideBlockingAssert =
false)
const;
563 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
566 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
569 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
572 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
576 virtual bool closestTerrainLocation(
double lat,
double lon,
579 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
582 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
585 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
615 virtual bool closestTerrainLocation(
const DtVector& curPosition,
617 bool overrideBlockingAssert =
false)
const;
649 virtual bool intersect(
const DtChord& chord,
DtPoint& intersectionPoint,
650 double& intersectionTime,
bool* dataAvailable = 0,
651 bool overrideBlockingAssert =
false)
const;
681 virtual bool intersect(
const DtChord& chord,
685 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
712 virtual bool allIntersectsAlongChord(
const DtChord& chord,
716 bool overrideBlockingAssert =
false)
const;
742 bool getVrfObjects(
DtChord& chord, std::list<DtVrfObject*>& objects);
743 bool getVrfObjects(
DtChord& chord, std::list<const DtVrfObject*>& objects)
const;
746 std::list<DtVrfObject*>& objects);
748 std::list<const DtVrfObject*>& objects)
const;
783 virtual void groundClamp(
DtPoint& databaseCoord,
float const offset = 0,
784 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
803 virtual void groundClamp(
DtVector& databaseCoord,
float const offset = 0,
804 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
810 virtual void getVrfObjectsAlongChord(
const DtVector& databaseStart,
811 const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList)
const;
827 virtual bool initializeSpatialVrfObjectOrganization();
852 static bool spatialOrganizationObjectFilterFcn(
const DtVrfObject* obj,
void* usr);
864 virtual bool processSpatialOrganizationObjectFilterFcn(
const DtVrfObject* obj);
867 static void querySpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
868 static void setSpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
871 static void requestSensorDomainsCallback(
DtSimMessage* msg,
void* usr);
872 virtual void sendSensorDomains();
876 virtual void processQuerySpatialSubdivisionConfiguration(
DtSimMessage* msg);
877 virtual void processSetSpatialSubdivisionConfiguration(
DtSimMessage* msg);
881 virtual bool useVrfObjectSpatialSub()
const;
882 virtual void setUseVrfObjectSpatialSub(
bool yesOrNo);
887 virtual bool isSpatialMgrResolutionUserSpecified()
const;
888 virtual void setSpatialMgrResolutionUserSpecified(
bool yesOrNo);
892 virtual unsigned int vrfObjectSpatialSubXResolution()
const;
893 virtual unsigned int vrfObjectSpatialSubYResolution()
const;
894 virtual unsigned int vrfObjectSpatialSubZResolution()
const;
901 virtual void setVrfObjectSpatialSubXResolution(
unsigned int newXResolution);
902 virtual void setVrfObjectSpatialSubYResolution(
unsigned int newYResolution);
903 virtual void setVrfObjectSpatialSubZResolution(
unsigned int newZResolution);
919 virtual void setSimManager(
DtSimManager* newSimManager);
974 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
976 bool* terrainDataAvailable = 0,
977 const DtString& featureQueryName =
"default",
978 DtVector* intersectionPoint = 0)
const;
993 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
995 bool* terrainDataAvailable = 0,
996 const DtString& featureQueryName =
"default",
997 DtVector* intersectionPoint = 0)
const;
1012 virtual bool checkLineOfSight(
const DtVector& databaseViewingPoint,
1013 const DtVrfObject& targetObject,
bool* terrainDataAvailable = 0,
1014 const DtString& featureQueryName =
"default",
1015 DtVector* intersectionPoint = 0)
const;
1027 virtual bool checkLineOfSightWithoutObjects(
1028 const DtVector& databaseViewingPoint,
1029 const DtVector& databaseTargetPoint,
1030 bool* terrainDataAvailable = 0,
1031 const DtString& featureQueryName =
"default",
1051 virtual bool checkLineOfFire(
const DtVrfObject& viewingObject,
1053 const DtVector& databaseTargetPoint,
1054 bool* terrainDataAvailable = 0,
1055 double* normIntersectDistance = 0,
1060 virtual bool checkLineOfFire(
const DtVrfObject& viewingObject,
1062 bool* terrainDataAvailable = 0,
1063 double* normIntersectDistance = 0,
1068 virtual bool checkLineOfFire(
const DtVector& databaseViewingPoint,
1069 const DtVector& databaseTargetPoint,
1070 bool* terrainDataAvailable = 0,
1071 double* normIntersectDistance = 0,
1087 virtual bool checkLineOfFireWithoutObjects(
1088 const DtVector& databaseViewingPoint,
1089 const DtVector& databaseTargetPoint,
1090 bool* terrainDataAvailable = 0,
1091 double* normIntersectDistance = 0,
1100 static void objectAboutToBeRemovedCb(
DtVrfObject * vrfObject,
void * usr);
1102 virtual void expireDataLoadRequestsBeforeTime(
const double& time);
1107 virtual double thermoclinePermeability(
1117 return myLineOfSightTestsToPerform;
1124 const DtChord createWorldIntersectionChord(
const DtVector& databaseLocation)
const;
1145 virtual void addInitialLosChecks();
1153 virtual void setDefaultLineOfSightTestOrder(
1155 virtual void setLineOfSightTestOrder(
1168 virtual void removeLineOfSightTest(
const DtLosTestKey& testKey);
1174 virtual void performTest(
const DtLosTestKey& testToRun);
1179 virtual void doNotPerformTest(
const DtLosTestKey& testToRun);
1191 static bool canBlockLineOfSight(
const DtVrfObject*
object,
void* usr);
1212 virtual bool checkVrfObjectsForLOS(
1217 virtual bool checkFeaturesForLOS(
1222 virtual bool checkTerrainForLOS(
1235 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1236 const DtVector& databaseStartPoint,
1242 const std::list<DtUUID>& ignoreList = std::list<DtUUID>())
const;
1248 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1253 const std::list<DtUUID>& ignoreList = std::list<DtUUID>())
const;
1258 virtual bool intersectsVrfObject(
const DtVrfObject& vrfObjectToTest,
1260 double& distToIntersect,
DtVector* surfaceNormal = 0)
const;
1263 virtual bool embarkedOnSameLowFidelityObject(
const DtVrfObject& primaryVrfObject,
1268 bool testInvariant()
const;
1290 virtual void processObjectAboutToBeRemoved(
DtVrfObject * vrfObject);
1294 virtual void performTerrainPreload();
1336 friend class IntersectVrfObjectFunctor;