34 #include <boost/scoped_ptr.hpp>
35 #include <boost/ptr_container/ptr_list.hpp>
36 #include <boost/signals2.hpp>
41 class DtTerrainImplementationDescriptor;
47 class Dt3dBoundingVolume;
48 class DtTerrainIndexParameters;
54 class DtTerrainRecord;
55 class DtGenericTerrainRecord;
105 VrfSimulationBackEnd = 1,
106 NavGenerationTool = 2
133 virtual bool init(
bool createConsoleManager =
true);
136 virtual void setConfigFile(
const std::string&,
bool reload=
true);
145 virtual bool isSameTerrain(
const DtFilename&)
const;
150 return myTerrainImpl;
155 virtual void addTerrainImplementation(
const DtString& implementationName,
160 virtual void addFeatureLayer(boost::shared_ptr<MAKVRinTerra::DtFeatureSet>);
162 virtual void addGenericTerrainRecordCallback(
167 virtual void removeGenericTerrainRecordCallback(
172 virtual void invokeGenericTerrainRecordCallbacks(
184 virtual bool loadTerrain(
const DtString&
filename, LoadContext context = VrfSimulationBackEnd);
187 virtual bool unloadTerrain(
bool block =
true);
193 virtual bool loadModel(
const DtFilename& f,
const DtEntityType& t = DtEntityType(),
bool hasOceanLayer =
true);
197 virtual double modelHeightDifferencesFromAppearances(
int oldApp,
int newApp)
const;
200 virtual bool terrainIsLoaded();
203 virtual DtString loadedFilename()
const;
211 virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
212 const std::string& type,
213 const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>())
const;
217 virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
219 const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>())
const;
221 virtual std::auto_ptr<MAKVRinTerra::DtPathFeatureSet> paths(
const std::string& type)
const;
225 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> features(
226 const std::string& queryName)
const;
229 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeatures()
const;
233 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> featuresRaw(
234 const std::string& queryName)
const;
237 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeaturesRaw()
const;
240 virtual bool hasAerodromes()
const;
246 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::AerodromeData> aerodromesWithinRange(
const DtVector& center,
double range)
const;
249 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::AerodromeData> aerodromesInArea(
const std::vector<DtVector>&)
const;
252 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::AerodromeData> aerodromesAtLocation(
const DtVector& location)
const;
255 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::RunwayData> runwayAtLocation(
const DtVector& location)
const;
276 virtual double terrainHeightAboveSeaLevel(
const DtPoint& databaseLocation,
277 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
280 const DtPoint& databaseLocation,
310 virtual bool terrainHeightAndIntersection(
const DtVector& localLocation,
313 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
324 virtual bool terrainHeightAndIntersectionBelow(
const DtVector& localLocation,
327 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
465 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
468 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0) ;
523 virtual bool closestIntersection(
const DtVector& localLocation,
524 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
525 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
529 bool doNotAddDefaultRecord =
false,
555 virtual bool closestIntersection(
double lat,
double lon,
556 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
557 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
560 double lat,
double lon,
562 bool doNotAddDefaultRecord =
false,
595 virtual bool closestIntersection(
const DtVector& localLocation,
598 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
599 bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
604 bool doNotAddDefaultRecord =
false,
637 virtual bool closestIntersection(
double lat,
double lon,
641 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
644 double lat,
double lon,
646 bool doNotAddDefaultRecord =
false,
682 virtual bool closestIntersection(
const std::list<DtVector>& localLocationList,
685 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
686 bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
689 const std::list<DtVector>& localLocationList,
691 bool doNotAddDefaultRecord =
false,
725 virtual bool intersect(
const DtChord& chord,
DtPoint& intersectionPoint,
726 double& intersectionTime,
bool* dataAvailable = 0,
727 bool overrideBlockingAssert =
false,
int flags = 0)
const;
731 double& intersectionTime,
769 virtual bool intersect(
const DtChord& chord,
772 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
809 virtual bool allIntersectsAlongChord(
const DtChord& chord,
812 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
824 virtual bool allIntersectsAlongChordDebug(
const DtChord& chord,
826 bool* dataAvailable = 0,
827 bool overrideBlockingAssert =
false,
int flags = 0)
const;
869 virtual bool intersectList(
const std::list<DtChord>& chordList,
872 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
875 const std::list<DtChord>& chordList,
894 virtual void preloadTerrainAreas(
902 virtual void forceLoadTerrainAreas(
918 virtual bool addTerrainPassThroughLayer(
const DtString& layerType);
929 virtual void setAssertOnBlockingTerrainCalls(
bool assertBlock);
930 virtual bool assertOnBlockingTerrainCalls()
const;
935 virtual void setWarnOnBlockingTerrainCalls(
bool warnBlock);
936 virtual bool warnOnBlockingTerrainCalls()
const;
943 virtual void setIntersectDataLoadExpireTime(
const double& expireTime);
944 virtual void expireDataLoadRequestsBeforeTime(
const double& currentTime);
974 virtual boost::shared_ptr<DtAsyncJobMapEntry> makePathAsync(
976 const DtPoint& localDestination,
977 const std::string& type,
978 const double& maxSearchRadius,
979 const double& startProximityThreshold,
980 const DtAStarGraph::DtWeightFactorsList& weightFactors
981 = DtAStarGraph::DtWeightFactorsList());
996 virtual DtAStarGraph::Path makePath(
998 const DtPoint& localDestination,
999 const std::string& type,
1000 const double& maxSearchRadius,
1001 const double& startProximityThreshold,
1002 boost::function<
bool ()> cancelCheck,
1003 const DtAStarGraph::DtWeightFactorsList& weightFactors
1004 = DtAStarGraph::DtWeightFactorsList())
const;
1008 virtual bool onPathFeature(
1012 virtual DtAStarGraph::Ptr pathFinder(
const std::string&)
const;
1017 virtual boost::shared_ptr<DtAsyncJobMapEntry> addAsyncJob(
DtAsyncJob* job);
1026 const double topoDistance(
const DtPoint& start,
const DtPoint& end,
1039 const std::string& type,
const DtPoint& startingLocation,
1040 const double& searchRadius,
bool* dataAvailable = NULL);
1043 std::vector<DtChord>& chords)
const;
1045 void breakUpChord(
const DtChord& chord, std::vector<DtChord>& chords)
const;
1058 virtual void clearCache();
1068 const std::map<DtString, DtString>& keyValueChanges,
1069 const DtVector& centerLocation,
double radius);
1079 const std::map<DtString, DtString>& keyValueChanges,
1080 const std::vector<DtVector>& vertices,
double width);
1089 const std::map<DtString, DtString>& keyValueChanges,
1090 const std::list<DtVector>& vertices);
1113 virtual void dynamicTerrainFeaturesInArea(
1114 const DtVector& centerLocation,
double radius,
1115 std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo,
bool* dataAvailable = NULL,
1116 const DtString& filterKey = DtString::nullString());
1130 virtual void dynamicTerrainFeaturesInArea(
1131 const std::list<DtVector>& vertices,
double width,
1132 std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo,
bool* dataAvailable = NULL,
1133 const DtString& filterKey = DtString::nullString());
1146 virtual void dynamicTerrainFeaturesInArea(
1147 const std::list<DtVector>& vertices,
1148 std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo,
bool* dataAvailable = NULL,
1149 const DtString& filterKey = DtString::nullString());
1167 bool useOriginalGeometry =
false);
1169 virtual void queryCurrentDynamicTerrainFeatures(
1172 bool useOriginalGeometry =
false);
1176 virtual void cacheTerrainArea(
int requestId,
1177 unsigned minLOD,
unsigned maxLOD,
const DtExtent& cacheArea,
1181 virtual void cancelCacheTerrainArea(
int requestId);
1190 virtual bool oceanLayerPresent()
const;
1193 virtual void setOceanLayerPresent(
bool b);
1206 virtual bool nonPolygonalWaterHeight(
1208 double& height)
const;
1211 virtual void setNonPolygonalWaterHeight(
double d);
1216 virtual double defaultWaterDepth(
const DtVector& localLocation)
const;
1219 virtual void setDefaultWaterDepth(
double);
1224 virtual double defaultSurfaceElevation(
const DtVector& localLocation)
const;
1257 virtual double landAboveWaterMinimumSeparation()
const;
1260 virtual void setLandAboveWaterMinimumSeparation(
double);
1263 virtual void setAccumulateIntersections(
bool value);
1266 virtual bool accumulateIntersections()
const;
1269 virtual void getIntersections(std::vector<DtChord>& accumulatedChords, std::vector<DtPoint>& accumulatedIntersections)
const;
1271 virtual boost::signals2::connection connectToUnloadTerrain(
const DtTerrainUnloadSignalType::slot_type & slotIn);
1282 void insertNonPolyWaterIntoIntersectionList(
1294 const DtVector& localLocation,
const double height)
const;
1300 virtual bool nonPolygonalWaterIntersect(
1305 typedef std::map<DtString, DtGenericTerrainRecordCallbackListPtr >
1320 virtual void terrainPaging(
bool);
1376 bool myActive =
false;
1379 #define DtRegisterTerrainImplementationFunctionName "DtRegisterTerrainImplementation"
1386 #define DtDeregisterTerrainImplementationFunctionName "DtDeregisterTerrainImplementation"
Represents a set of DtFeature objects or others which conform to the DtFeature concept.
Definition: featureSet.h:101
DtString myLoadedFilename
The last filename that was passed to loadTerrain()
Definition: terrainInterface.h:1342
tbb::tick_count myLastDebugOutputTick
Definition: terrainInterface.h:1360
std::vector< DtPoint > myAccumulatedIntersectionPoints
Definition: terrainInterface.h:1373
boost::function< void(const makVrv::DtDynamicTerrainFeature &)> DtDynamicTerrainQueryCallback
Definition: terrainImplementation.h:139
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
Class DtTerrainInterfaceConfig is a readable-writable class holding terrain interface configuration o...
Definition: terrainInterfaceConfig.h:32
This is the abstract base class for all terrain implementations. A terrain implementation is used by ...
Definition: terrainImplementation.h:172
DtCallbackList< makArchives::DtGenericTerrainRecord * > DtGenericTerrainRecordCallbackList
Definition: terrainInterface.h:61
void(* DtDeregisterTerrainImplementationLibFcn)()
This function signature is used for terrain implementation shared libraries that deregister themselve...
Definition: terrainInterface.h:1390
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords. This is useful for followi...
Definition: vrfChordIntersectRecordList.h:31
An asynchronous job that can be added to and executed by a job server. Since this class derives from ...
Definition: asyncJob.h:48
DtGenericTerrainRecords allow the VR-Forces terrainInterface library to instantiate and configure the...
Definition: DtGenericTerrainRecord.h:34
void(* DtGenericTerrainRecordCallbackFunction)(makArchives::DtGenericTerrainRecord *record, void *userData)
Definition: terrainInterface.h:58
std::list< std::pair< DtPagingMetaDataPtr, DtTerrainPagingGeometryPtr > > DtTerrainPagingGeometryList
Definition: terrainPagingGeometry.h:104
bool present
False unless there is ocean layer data in the .mtf file. If false, the sea level and depth should not...
Definition: terrainInterface.h:116
boost::signals2::signal< void(bool)> signal_jobQueueStatusChanged
If the implementation is currently makeing a path plan (using the async job server) and the status ch...
Definition: terrainInterface.h:1277
Definition: aerodromeLoader.h:64
double landAboveWaterMinimumSeparation
Definition: terrainInterface.h:120
Represents (possibly infinite) area of space.
Definition: DtDynamicTerrainGeometry.h:20
std::vector< DtChord > myAccumulatedChords
Definition: terrainInterface.h:1372
class DtScenarioExplorer:
Definition: scenarioExplorer.h:26
Allows manipulating a terrain object. Returned by functions which create terrain objects.
Definition: terrainImplementation.h:143
DtGenericTerrainRecordCallbackListMap myGenericTerrainRecordCallbacklists
Definition: terrainInterface.h:1365
This class manages a set of DtTerrainImplementation subclasses by maintaining a factory for creating ...
Definition: terrainImplementationManager.h:30
double defaultSeaDepth
Global, implicit sea surface elevation.
Definition: terrainInterface.h:118
boost::shared_ptr< DtGenericTerrainRecordCallbackList > DtGenericTerrainRecordCallbackListPtr
Definition: terrainInterface.h:62
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:32
This is a class which maintains a list of string command names and the callback functions that are to...
Definition: consoleCommandManager.h:56
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
MAKVRinTerra::DtAStarGraph DtAStarGraph
Definition: terrainInterface.h:109
DtTerrainImplementationManager * myTerrainImplManager
Definition: terrainInterface.h:1339
Definition: surface.h:181
Definition: aStarGraph.h:79
static double theTerrainPagingMaxHeight
Definition: terrainInterface.h:1350
DtTerrainIntersectOptions Passed to terrain intersect functions to modify how intersect acts...
Definition: terrainIntersectOptions.h:15
bool myTerrainIsLoaded
Status publisher needs to keep track of when terrain is loaded and unloaded.
Definition: terrainInterface.h:1337
DtConsoleCommandManager * myConsoleCommandManager
Definition: terrainInterface.h:1340
Definition: coordSystem.h:54
bool(* DtRegisterTerrainImplementationLibFcn)(DtTerrainInterface *)
This function signature is used for terrain implementation shared libraries that register themselves ...
Definition: terrainInterface.h:1383
Feature system config file.
Record of a VR-Vantage terrain Contains: Terrain coordinate system Terrain patches Feature layers Ter...
Definition: DtTerrainRecord.h:29
DtString myUnresolvedFilename
Definition: terrainInterface.h:1343
Represents some coordinate system. The terms "coordinate system", "projection", "spatial reference"...
Definition: proj.h:44
Represents a set of characeters a DtFeature object can have. DtQuery objects are the way to communica...
Definition: query.h:38
void(* DtTerrainChangeNotificationCallbackFcn)(const DtExtent &spatExtent, void *userData)
Definition: terrainImplementation.h:49
double seaLevel
Definition: terrainInterface.h:117
#define DT_DLL_terrainInterface
This file is used to determine how to build.
Definition: terrainInterfaceDefines.h:25
DtFilename myTerrainOptionsFilename
Default config loaded in init Loading terrains will have a copy of this and may set their own specifi...
Definition: terrainInterface.h:1327
This class holds parameters which define the capabilities of the current terrain. The terrain impleme...
Definition: terrainCapabilities.h:28
Definition: noArgumentCallbackList.h:91
boost::shared_ptr< const DtProj > CPtr
Definition: proj.h:48
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:100
DtTerrainImplementation * terrainImplementation() const
Returns the current terrain implementation.
Definition: terrainInterface.h:148
DtTerrainImplementationFactory::DtCreatorFcn DtTerrainImplementationCreatorFcn
Definition: terrainImplementation.h:408
DtTerrainUnloadSignalType myUnloadTerrainSignal
Definition: terrainInterface.h:1375
Interface which abstracts the concept of a individually identifiable "thing" in the terrain...
Definition: DtDynamicTerrainFeature.h:83
LoadContext
Definition: terrainInterface.h:103
makArchives::DtTerrainRecord * myTerrainRecord
Definition: terrainInterface.h:1362
OceanLayer myGlobalOceanLayer
Definition: terrainInterface.h:1357
Definition: pathFeature.h:106
Definition: vrfChordIntersectionRecord.h:19
Definition: intersectionRecord.h:60
DtTerrainImplementation * myTerrainImpl
Definition: terrainInterface.h:1333
bool myAccumulateIntersections
check if we need to accumulate terrain intersections results for debug purpose
Definition: terrainInterface.h:1370
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtTerrainInterfaceConfig myFileConfig
Definition: terrainInterface.h:1328
MAKVRinTerra::DtProj::CPtr myProjObject
Definition: terrainInterface.h:1352
std::map< DtString, DtGenericTerrainRecordCallbackListPtr > DtGenericTerrainRecordCallbackListMap
Definition: terrainInterface.h:1306
void(* DtTriangleCallbackFcn)(DtTerrainTriangleStruct &triangle, void *usr)
Definition: terrainProcessPolygonsBox.h:109
boost::ptr_list< MAKVRinTerra::DtFeatureSet > FeatureSetList
Definition: terrainInterface.h:1330
DtAsyncJobServer myAsyncJobServer
Manages asynchronous path planning tasks.
Definition: terrainInterface.h:1355
boost::signals2::signal< void(bool)> signal_terrainPaging
If the implementation is currently paging in terrain, this signal will be sent for the start/stop of ...
Definition: terrainInterface.h:1274
Command which can be given to the dynamic terrain system to perform some change. This class is a simp...
Definition: DtDynamicTerrainChange.h:42
DtSurface::DtMedium defaultSurfaceMedium
Default depth. Positive, m below surface.
Definition: terrainInterface.h:119
void(* DtCacheProgressCallbackFunction)(int requestId, int current, bool completed, double elapsedTime, void *usr)
Callback for terrain caching.
Definition: terrainImplementation.h:47
Resource handle for a query which has been added to the system. Returned from DtTerrainImplementation...
Definition: terrainImplementation.h:108
Interface for getting terrain triangle data out of DtTerrainInterface::trianglesInArea. This object should always be created on the stack.
Definition: terrainProcessPolygonsBox.h:113
Manages async job objects.
Definition: asyncJobServer.h:75
DtMedium
Definition: surface.h:187
std::ofstream myDebugOutputFile
Definition: terrainInterface.h:1359
boost::signals2::signal< void()> DtTerrainUnloadSignalType
Definition: terrainInterface.h:68
Definition: featuresDebugger.h:33
Global ocean layer info; used in conjunction with the polygon data.
Definition: terrainInterface.h:112
Resource handle for a dynamic terrain change request which has been added to the system. Returned from DtTerrainImplementation::addDynamicTerrainChangeRequest(). Allows caller to manage request.
Definition: terrainImplementation.h:73
double myLastFileTime
Needed in case file is saved with same name and then reloaded.
Definition: terrainInterface.h:1348
Configuration object for processing areas.
Definition: areaFeature.h:47
DtTerrainIntersectStatus Contains information about result of terrain intersection.
Definition: terrainIntersectStatus.h:16
void(* DtTriangleCallbackFinalizeFcn)(int status, void *usr)
Definition: terrainProcessPolygonsBox.h:108
DtTerrainPagingGeometryList myForceLoadAreas
Definition: terrainInterface.h:1345
DtIntersectionType
Definition: intersectionRecord.h:41
Represents an area query which can be used to extract triangles from DtTerrainInterface. The box points are in local but the box is always projected against the local topo at the center point of the box.
Definition: terrainProcessPolygonsBox.h:39
FeatureSetList myFeatureLayers
Definition: terrainInterface.h:1331