13 #include <geometry/intersectionRecord.h>
14 #include <geometry/point.h>
15 #include <vlutil/vlConfig.h>
16 #include <vlutil/vlFilename.h>
19 #include <boost/unordered_set.hpp>
25 #include "geometry/surface.h"
30 class DtGeodeticCoord;
31 class Coordinate_System;
47 class DtChordIntersectionRecord;
48 class DtChordIntersectRecordList;
113 virtual bool initialize();
123 virtual bool reinitialize();
126 virtual bool reset();
133 virtual bool loadParametersFromFile(
const DtFilename& filename);
140 virtual bool loadPhysicalWorldFile(
const DtFilename& filename);
143 virtual void processParameters();
147 const DtFilename& physicalWorldFile()
const;
150 virtual bool parametersLoaded()
const;
171 virtual bool isValidState()
const;
191 virtual Coordinate_System* coordinateSystem();
192 virtual const Coordinate_System* coordinateSystem()
const;
198 virtual void geocentricToDatabase(
const DtDcm& in, DtDcm& out)
const;
201 virtual void geocentricToDatabase(
const DtVector& vIn,
const DtDcm& dIn,
205 virtual void geocentricToDatabase(
const DtExtent& in, DtExtent& out)
const;
211 virtual void databaseToGeocentric(
const DtDcm& in, DtDcm& out)
const;
214 virtual void databaseToGeocentric(
const DtVector& vIn,
const DtDcm& dIn,
218 virtual void databaseToGeocentric(
const DtExtent& in, DtExtent& out)
const;
221 virtual void databaseToGeodetic(
const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition)
const;
224 virtual void databaseToGeodetic(
const DtVector& databasePosition,
DtVector& geodeticPosition)
const;
226 virtual void databaseToGeodetic(
const DtExtent& extent, DtExtent& destExtent)
const;
229 virtual void geodeticToDatabase(
const DtExtent& extent, DtExtent& destExtent)
const;
231 virtual void geodeticToDatabase(
const DtGeodeticCoord& geodeticPosition,
235 virtual void geodeticToDatabase(
const DtVector& geodeticPosition,
240 virtual void topoToDatabase(
const DtVector& databasePosition, DtDcm& topoToDatabase)
const;
243 virtual void databaseToTopo(
const DtVector& databasePosition, DtDcm& databaseToTopo)
const;
283 virtual double terrainHeight(
const DtPoint& databaseLocation,
284 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
285 virtual double terrainHeight(
double lat,
double lon,
bool* dataAvailable = 0,
286 bool overrideBlockingAssert =
false)
const;
287 virtual double terrainHeight(
const DtVector& databaseLocation,
288 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
313 virtual bool terrainHeight(
const DtPoint& databaseLocation,
double& height,
314 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
315 virtual bool terrainHeight(
double lat,
double lon,
double& height,
316 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
317 virtual bool terrainHeight(
const DtVector& databaseLocation,
double& height,
318 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
358 virtual bool terrainHeightAndSurface(
const DtPoint& databaseLocation,
359 double& height, DtSurface& surface,
bool* dataAvailable = 0,
360 bool overrideBlockingAssert =
false)
const;
361 virtual bool terrainHeightAndSurface(
double lat,
double lon,
double& height,
362 DtSurface& surface,
bool* dataAvailable = 0,
363 bool overrideBlockingAssert =
false)
const;
364 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
365 double& height, DtSurface& surface,
bool* dataAvailable = 0,
366 bool overrideBlockingAssert =
false)
const;
367 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
368 double& heightAtLocation, DtChordIntersectionRecord& intersectionRec,
369 DtIntersectionRecord::DtIntersectionType irtFlag =
370 DtIntersectionRecord::INT_ALL_DATA,
371 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
434 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
435 double& groundHeight, DtSurface& groundSurface,
DtVector& groundNormal,
436 double& waterHeight, DtSurface::DtMedium & topSurfaceMedium,
437 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false);
471 virtual bool terrainSurface(
const DtPoint& databaseLocation,
472 DtSurface& surface,
bool* dataAvailable = 0,
473 bool overrideBlockingAssert =
false)
const;
474 virtual bool terrainSurface(
double lat,
double lon, DtSurface& surface,
475 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
476 virtual bool terrainSurface(
const DtVector& databaseLocation,
477 DtSurface& surface,
bool* dataAvailable = 0,
478 bool overrideBlockingAssert =
false)
const;
480 virtual DtSurface terrainSurface(
const DtPoint& databaseLocation,
481 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
482 virtual DtSurface terrainSurface(
double lat,
double lon,
483 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
484 virtual DtSurface terrainSurface(
const DtVector& databaseLocation,
485 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
518 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
519 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
520 bool overrideBlockingAssert =
false)
const;
524 virtual bool closestTerrainLocation(
double lat,
double lon,
525 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
526 bool overrideBlockingAssert =
false)
const;
529 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
530 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
531 bool overrideBlockingAssert =
false)
const;
535 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
536 DtChordIntersectionRecord& record,
537 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
538 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
541 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
542 DtChordIntersectionRecord& record,
const DtString& vectorFeatureLookup,
543 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
544 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
548 virtual bool closestTerrainLocation(
double lat,
double lon,
549 DtChordIntersectionRecord& record,
550 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
551 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
554 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
555 DtChordIntersectionRecord& record,
556 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
557 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
587 virtual bool closestTerrainLocation(
const DtVector& curPosition,
589 bool overrideBlockingAssert =
false)
const;
621 virtual bool intersect(
const DtChord& chord, DtPoint& intersectionPoint,
622 double& intersectionTime,
bool* dataAvailable = 0,
623 bool overrideBlockingAssert =
false)
const;
653 virtual bool intersect(
const DtChord& chord,
654 DtChordIntersectionRecord& record,
655 DtIntersectionRecord::DtIntersectionType irtFlag =
656 DtIntersectionRecord::INT_ALL_DATA,
657 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
684 virtual bool allIntersectsAlongChord(
const DtChord& chord,
685 DtChordIntersectRecordList& intList,
686 DtIntersectionRecord::DtIntersectionType irtFlag =
687 DtIntersectionRecord::INT_ALL_DATA,
bool* dataAvailable = 0,
688 bool overrideBlockingAssert =
false)
const;
714 bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects);
715 bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects)
const;
718 std::list<DtVrfObject*>& objects);
720 std::list<const DtVrfObject*>& objects)
const;
755 virtual void groundClamp(DtPoint& databaseCoord,
float const offset = 0,
756 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
775 virtual void groundClamp(
DtVector& databaseCoord,
float const offset = 0,
776 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
782 virtual void getVrfObjectsAlongChord(
const DtVector& databaseStart,
783 const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList)
const;
799 virtual bool initializeSpatialVrfObjectOrganization();
824 static bool spatialOrganizationObjectFilterFcn(
const DtVrfObject* obj,
void* usr);
836 virtual bool processSpatialOrganizationObjectFilterFcn(
const DtVrfObject* obj);
839 static void querySpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
840 static void setSpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
843 static void requestSensorDomainsCallback(
DtSimMessage* msg,
void* usr);
844 virtual void sendSensorDomains();
848 virtual void processQuerySpatialSubdivisionConfiguration(
DtSimMessage* msg);
849 virtual void processSetSpatialSubdivisionConfiguration(
DtSimMessage* msg);
853 virtual bool useVrfObjectSpatialSub()
const;
854 virtual void setUseVrfObjectSpatialSub(
bool yesOrNo);
859 virtual bool isSpatialMgrResolutionUserSpecified()
const;
860 virtual void setSpatialMgrResolutionUserSpecified(
bool yesOrNo);
864 virtual unsigned int vrfObjectSpatialSubXResolution()
const;
865 virtual unsigned int vrfObjectSpatialSubYResolution()
const;
866 virtual unsigned int vrfObjectSpatialSubZResolution()
const;
873 virtual void setVrfObjectSpatialSubXResolution(
unsigned int newXResolution);
874 virtual void setVrfObjectSpatialSubYResolution(
unsigned int newYResolution);
875 virtual void setVrfObjectSpatialSubZResolution(
unsigned int newZResolution);
891 virtual void setSimManager(
DtSimManager* newSimManager);
935 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
937 bool* terrainDataAvailable = 0,
938 const DtString& featureQueryName =
"default")
const;
953 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
955 bool* terrainDataAvailable = 0,
956 const DtString& featureQueryName =
"default")
const;
971 virtual bool checkLineOfSight(
const DtVector& databaseViewingPoint,
972 const DtVrfObject& targetObject,
bool* terrainDataAvailable = 0,
973 const DtString& featureQueryName =
"default")
const;
985 virtual bool checkLineOfSightWithoutObjects(
986 const DtVector& databaseViewingPoint,
987 const DtVector& databaseTargetPoint,
988 bool* terrainDataAvailable = 0,
989 const DtString& featureQueryName =
"default");
997 static void objectAboutToBeRemovedCb(
DtVrfObject * vrfObject,
void * usr);
999 virtual void expireDataLoadRequestsBeforeTime(
const double& time);
1004 virtual double thermoclinePermeability(
1005 const DtPoint& startPoint,
const DtPoint& endPoint)
const;
1014 return myLineOfSightTestsToPerform;
1021 const DtChord createWorldIntersectionChord(
const DtVector& databaseLocation)
const;
1042 virtual void addInitialLosChecks();
1050 virtual void setDefaultLineOfSightTestOrder(
1052 virtual void setLineOfSightTestOrder(
1065 virtual void removeLineOfSightTest(
const DtLosTestKey& testKey);
1071 virtual void performTest(
const DtLosTestKey& testToRun);
1076 virtual void doNotPerformTest(
const DtLosTestKey& testToRun);
1088 static bool canBlockLineOfSight(
const DtVrfObject*
object,
void* usr);
1098 virtual bool checkVrfObjectsForLOS(
1103 virtual bool checkFeaturesForLOS(
1108 virtual bool checkTerrainForLOS(
1118 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1119 const DtVector& databaseStartPoint,
1121 const DtVector& databaseEndPoint = DtVector::zero(),
1128 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1135 virtual bool intersectsVrfObject(
const DtVrfObject& vrfObjectToTest,
1137 double& distToIntersect)
const;
1141 bool testInvariant()
const;
1163 virtual void processObjectAboutToBeRemoved(
DtVrfObject * vrfObject);
1167 virtual void performTerrainPreload();
1203 friend class IntersectVrfObjectFunctor;