13 #include <geometry/intersectionRecord.h>
14 #include <geometry/point.h>
15 #include <vlutil/vlConfig.h>
16 #include <vlutil/vlFilename.h>
25 #include "geometry/surface.h"
30 class DtGeodeticCoord;
31 class Coordinate_System;
47 class DtChordIntersectionRecord;
48 class DtChordIntersectRecordList;
111 virtual bool initialize();
121 virtual bool reinitialize();
124 virtual bool reset();
131 virtual bool loadParametersFromFile(
const DtFilename& filename);
138 virtual bool loadPhysicalWorldFile(
const DtFilename& filename);
141 virtual void processParameters();
145 const DtFilename& physicalWorldFile()
const;
148 virtual bool parametersLoaded()
const;
169 virtual bool isValidState()
const;
189 virtual Coordinate_System* coordinateSystem();
190 virtual const Coordinate_System* coordinateSystem()
const;
196 virtual void geocentricToDatabase(
const DtDcm& in, DtDcm& out)
const;
199 virtual void geocentricToDatabase(
const DtVector& vIn,
const DtDcm& dIn,
203 virtual void geocentricToDatabase(
const DtExtent& in, DtExtent& out)
const;
209 virtual void databaseToGeocentric(
const DtDcm& in, DtDcm& out)
const;
212 virtual void databaseToGeocentric(
const DtVector& vIn,
const DtDcm& dIn,
216 virtual void databaseToGeocentric(
const DtExtent& in, DtExtent& out)
const;
219 virtual void databaseToGeodetic(
const DtVector& databasePosition, DtGeodeticCoord& geodeticPosition)
const;
222 virtual void databaseToGeodetic(
const DtVector& databasePosition,
DtVector& geodeticPosition)
const;
224 virtual void databaseToGeodetic(
const DtExtent& extent, DtExtent& destExtent)
const;
227 virtual void geodeticToDatabase(
const DtExtent& extent, DtExtent& destExtent)
const;
229 virtual void geodeticToDatabase(
const DtGeodeticCoord& geodeticPosition,
233 virtual void geodeticToDatabase(
const DtVector& geodeticPosition,
238 virtual void topoToDatabase(
const DtVector& databasePosition, DtDcm& topoToDatabase)
const;
241 virtual void databaseToTopo(
const DtVector& databasePosition, DtDcm& databaseToTopo)
const;
281 virtual double terrainHeight(
const DtPoint& databaseLocation,
282 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
283 virtual double terrainHeight(
double lat,
double lon,
bool* dataAvailable = 0,
284 bool overrideBlockingAssert =
false)
const;
285 virtual double terrainHeight(
const DtVector& databaseLocation,
286 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
311 virtual bool terrainHeight(
const DtPoint& databaseLocation,
double& height,
312 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
313 virtual bool terrainHeight(
double lat,
double lon,
double& height,
314 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
315 virtual bool terrainHeight(
const DtVector& databaseLocation,
double& height,
316 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
356 virtual bool terrainHeightAndSurface(
const DtPoint& databaseLocation,
357 double& height, DtSurface& surface,
bool* dataAvailable = 0,
358 bool overrideBlockingAssert =
false)
const;
359 virtual bool terrainHeightAndSurface(
double lat,
double lon,
double& height,
360 DtSurface& surface,
bool* dataAvailable = 0,
361 bool overrideBlockingAssert =
false)
const;
362 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
363 double& height, DtSurface& surface,
bool* dataAvailable = 0,
364 bool overrideBlockingAssert =
false)
const;
365 virtual bool terrainHeightAndSurface(
const DtVector& databaseLocation,
366 double& heightAtLocation, DtChordIntersectionRecord& intersectionRec,
367 DtIntersectionRecord::DtIntersectionType irtFlag =
368 DtIntersectionRecord::INT_ALL_DATA,
369 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
432 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
433 double& groundHeight, DtSurface& groundSurface,
DtVector& groundNormal,
434 double& waterHeight, DtSurface::DtMedium & topSurfaceMedium,
435 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false);
469 virtual bool terrainSurface(
const DtPoint& databaseLocation,
470 DtSurface& surface,
bool* dataAvailable = 0,
471 bool overrideBlockingAssert =
false)
const;
472 virtual bool terrainSurface(
double lat,
double lon, DtSurface& surface,
473 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
474 virtual bool terrainSurface(
const DtVector& databaseLocation,
475 DtSurface& surface,
bool* dataAvailable = 0,
476 bool overrideBlockingAssert =
false)
const;
478 virtual DtSurface terrainSurface(
const DtPoint& databaseLocation,
479 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
480 virtual DtSurface terrainSurface(
double lat,
double lon,
481 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
482 virtual DtSurface terrainSurface(
const DtVector& databaseLocation,
483 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
516 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
517 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
518 bool overrideBlockingAssert =
false)
const;
522 virtual bool closestTerrainLocation(
double lat,
double lon,
523 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
524 bool overrideBlockingAssert =
false)
const;
527 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
528 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
529 bool overrideBlockingAssert =
false)
const;
533 virtual bool closestTerrainLocation(
const DtPoint& databaseLocation,
534 DtChordIntersectionRecord& record,
535 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
536 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
540 virtual bool closestTerrainLocation(
double lat,
double lon,
541 DtChordIntersectionRecord& record,
542 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
543 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
546 virtual bool closestTerrainLocation(
const DtVector& databaseLocation,
547 DtChordIntersectionRecord& record,
548 DtIntersectionRecord::DtIntersectionType irtFlag = DtIntersectionRecord::INT_ALL_DATA,
549 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
579 virtual bool closestTerrainLocation(
const DtVector& curPosition,
581 bool overrideBlockingAssert =
false)
const;
613 virtual bool intersect(
const DtChord& chord, DtPoint& intersectionPoint,
614 double& intersectionTime,
bool* dataAvailable = 0,
615 bool overrideBlockingAssert =
false)
const;
645 virtual bool intersect(
const DtChord& chord,
646 DtChordIntersectionRecord& record,
647 DtIntersectionRecord::DtIntersectionType irtFlag =
648 DtIntersectionRecord::INT_ALL_DATA,
649 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
662 bool getVrfObjects(DtExtent& extent, std::set<DtVrfObject*>& objects);
663 bool getVrfObjects(DtExtent& extent, std::set<const DtVrfObject*>& objects)
const;
667 std::set<DtVrfObject*>& objects);
670 std::set<const DtVrfObject*>& objects)
const;
672 bool getVrfObjects(DtChord& chord, std::list<DtVrfObject*>& objects);
673 bool getVrfObjects(DtChord& chord, std::list<const DtVrfObject*>& objects)
const;
676 std::list<DtVrfObject*>& objects);
678 std::list<const DtVrfObject*>& objects)
const;
713 virtual void groundClamp(DtPoint& databaseCoord,
float const offset = 0,
714 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
733 virtual void groundClamp(
DtVector& databaseCoord,
float const offset = 0,
734 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false)
const;
740 virtual void getVrfObjectsAlongChord(
const DtVector& databaseStart,
741 const DtVector& databaseEnd, std::list<const DtVrfObject*>& orderedList)
const;
757 virtual bool initializeSpatialVrfObjectOrganization();
782 static bool spatialOrganizationObjectFilterFcn(
const DtVrfObject* obj,
void* usr);
794 virtual bool processSpatialOrganizationObjectFilterFcn(
const DtVrfObject* obj);
797 static void querySpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
798 static void setSpatialSubdivisionConfigurationCallback(
DtSimMessage* msg,
void* usr);
802 virtual void processQuerySpatialSubdivisionConfiguration(
DtSimMessage* msg);
803 virtual void processSetSpatialSubdivisionConfiguration(
DtSimMessage* msg);
807 virtual bool useVrfObjectSpatialSub()
const;
808 virtual void setUseVrfObjectSpatialSub(
bool yesOrNo);
813 virtual bool isSpatialMgrResolutionUserSpecified()
const;
814 virtual void setSpatialMgrResolutionUserSpecified(
bool yesOrNo);
818 virtual unsigned int vrfObjectSpatialSubXResolution()
const;
819 virtual unsigned int vrfObjectSpatialSubYResolution()
const;
820 virtual unsigned int vrfObjectSpatialSubZResolution()
const;
827 virtual void setVrfObjectSpatialSubXResolution(
unsigned int newXResolution);
828 virtual void setVrfObjectSpatialSubYResolution(
unsigned int newYResolution);
829 virtual void setVrfObjectSpatialSubZResolution(
unsigned int newZResolution);
845 virtual void setSimManager(
DtSimManager* newSimManager);
885 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
887 bool* terrainDataAvailable = 0)
const;
902 virtual bool checkLineOfSight(
const DtVrfObject& viewingObject,
904 bool* terrainDataAvailable = 0)
const;
919 virtual bool checkLineOfSight(
const DtVector& databaseViewingPoint,
920 const DtVrfObject& targetObject,
bool* terrainDataAvailable = 0)
const;
932 virtual bool checkLineOfSightWithoutObjects(
933 const DtVector& databaseViewingPoint,
934 const DtVector& databaseTargetPoint,
935 bool* terrainDataAvailable = 0);
943 static void objectAboutToBeRemovedCb(
DtVrfObject * vrfObject,
void * usr);
945 virtual void expireDataLoadRequestsBeforeTime(
const double& time);
950 virtual double thermoclinePermeability(
951 const DtPoint& startPoint,
const DtPoint& endPoint)
const;
973 virtual void addInitialLosChecks();
981 virtual void setDefaultLineOfSightTestOrder(
983 virtual void setLineOfSightTestOrder(
996 virtual void removeLineOfSightTest(
const DtLosTestKey& testKey);
1002 virtual void performTest(
const DtLosTestKey& testToRun);
1007 virtual void doNotPerformTest(
const DtLosTestKey& testToRun);
1019 static bool canBlockLineOfSight(
const DtVrfObject*
object,
void* usr);
1034 virtual bool checkVrfObjectsForLOS(
1039 virtual bool checkFeaturesForLOS(
1044 virtual bool checkTerrainForLOS(
1051 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1052 const DtVector& databaseStartPoint,
1053 const DtVrfObject*
const secondaryVrfObject)
const;
1058 virtual bool intersectVrfObjects(
const DtVrfObject*
const primaryVrfObject,
1059 const DtVector& databaseStartPoint,
const DtVector& databaseEndPoint)
const;
1064 virtual bool intersectsVrfObject(
const DtVrfObject& vrfObjectToTest,
1066 double& distToIntersect)
const;
1070 bool testInvariant()
const;
1076 const DtChord createWorldIntersectionChord(
const DtVector& databaseLocation)
const;
1098 virtual void processObjectAboutToBeRemoved(
DtVrfObject * vrfObject);
1102 virtual void performTerrainPreload();
1138 friend class IntersectVrfObjectFunctor;