34 #include <boost/ptr_container/ptr_list.hpp>
35 #include <boost/signals2.hpp>
39 class DtTerrainImplementationDescriptor;
44 class Dt3dBoundingVolume;
45 class DtTerrainIndexParameters;
51 class DtTerrainRecord;
52 class DtGenericTerrainRecord;
98 VrfSimulationBackEnd = 1,
126 virtual bool init(
bool createConsoleManager =
true,
unsigned maxThreads = 0);
129 virtual void setConfigFile(
const std::string&,
bool reload=
true);
138 virtual bool isSameTerrain(
const DtFilename&)
const;
143 return myTerrainImpl;
148 virtual void addTerrainImplementation(
const DtString& implementationName,
153 virtual void addFeatureLayer(std::shared_ptr<MAKVRinTerra::DtFeatureSet>);
155 virtual void addGenericTerrainRecordCallback(
160 virtual void removeGenericTerrainRecordCallback(
165 virtual void invokeGenericTerrainRecordCallbacks(
177 virtual void cancelAllJobsAndWait();
180 virtual bool loadTerrain(
const DtString&
filename, LoadContext context = VrfSimulationBackEnd);
183 virtual bool unloadTerrain(
bool block =
true);
189 virtual bool loadModel(
const DtFilename& f,
const DtEntityType& t = DtEntityType(),
bool hasOceanLayer =
true);
193 virtual double modelHeightDifferencesFromAppearances(
int oldApp,
int newApp)
const;
196 virtual bool terrainIsLoaded();
199 virtual DtString loadedFilename()
const;
207 virtual std::unique_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
208 const std::string& type,
209 const std::shared_ptr<DtVrfCallbackQueue>& = std::shared_ptr<DtVrfCallbackQueue>())
const;
213 virtual std::unique_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
215 const std::shared_ptr<DtVrfCallbackQueue>& = std::shared_ptr<DtVrfCallbackQueue>())
const;
217 virtual std::unique_ptr<MAKVRinTerra::DtPathFeatureSet> paths(
const std::string& type)
const;
221 virtual std::unique_ptr<MAKVRinTerra::DtFeatureSet> features(
222 const std::string& queryName)
const;
225 virtual std::unique_ptr<MAKVRinTerra::DtFeatureSet> allFeatures()
const;
229 virtual std::unique_ptr<MAKVRinTerra::DtFeatureSet> featuresRaw(
230 const std::string& queryName)
const;
233 virtual std::unique_ptr<MAKVRinTerra::DtFeatureSet> allFeaturesRaw()
const;
236 virtual bool hasAerodromes()
const;
242 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::AerodromeData> aerodromesWithinRange(
const DtVector& center,
double range)
const;
245 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::AerodromeData> aerodromesInArea(
const std::vector<DtVector>&)
const;
248 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::AerodromeData> aerodromesAtLocation(
const DtVector& location)
const;
251 virtual std::vector<MAKVRinTerra::DtAerodromeLoader::RunwayData> runwayAtLocation(
const DtVector& location)
const;
272 virtual double terrainHeightAboveSeaLevel(
const DtPoint& databaseLocation,
273 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
276 const DtPoint& databaseLocation,
306 virtual bool terrainHeightAndIntersection(
const DtVector& localLocation,
309 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
312 const DtVector& localLocation,
320 virtual bool terrainHeightAndIntersectionBelow(
const DtVector& localLocation,
323 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
326 const DtVector& localLocation,
461 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
462 double& groundHeight,
DtSurface& groundSurface, DtVector& groundNormal,
464 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0) ;
467 const DtVector& databaseLocation,
468 double& groundHeight,
DtSurface& groundSurface, DtVector& groundNormal,
519 virtual bool closestIntersection(
const DtVector& localLocation,
520 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
521 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
524 const DtVector& localLocation,
DtPoint& intersectionPoint,
525 bool doNotAddDefaultRecord =
false,
551 virtual bool closestIntersection(
double lat,
double lon,
552 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
553 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
556 double lat,
double lon,
558 bool doNotAddDefaultRecord =
false,
591 virtual bool closestIntersection(
const DtVector& localLocation,
594 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
595 bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
598 const DtVector& localLocation,
600 bool doNotAddDefaultRecord =
false,
633 virtual bool closestIntersection(
double lat,
double lon,
637 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
640 double lat,
double lon,
642 bool doNotAddDefaultRecord =
false,
678 virtual bool closestIntersection(
const std::list<DtVector>& localLocationList,
681 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
682 bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
685 const std::list<DtVector>& localLocationList,
687 bool doNotAddDefaultRecord =
false,
721 virtual bool intersect(
const DtChord& chord,
DtPoint& intersectionPoint,
722 double& intersectionTime,
bool* dataAvailable = 0,
723 bool overrideBlockingAssert =
false,
int flags = 0)
const;
727 double& intersectionTime,
765 virtual bool intersect(
const DtChord& chord,
768 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
805 virtual bool allIntersectsAlongChord(
const DtChord& chord,
808 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
820 virtual bool allIntersectsAlongChordDebug(
const DtChord& chord,
822 bool* dataAvailable = 0,
823 bool overrideBlockingAssert =
false,
int flags = 0)
const;
865 virtual bool intersectList(
const std::list<DtChord>& chordList,
868 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
871 const std::list<DtChord>& chordList,
890 virtual void preloadTerrainAreas(
898 virtual void forceLoadTerrainAreas(
914 virtual bool addTerrainPassThroughLayer(
const DtString& layerType);
925 virtual void setAssertOnBlockingTerrainCalls(
bool assertBlock);
926 virtual bool assertOnBlockingTerrainCalls()
const;
931 virtual void setWarnOnBlockingTerrainCalls(
bool warnBlock);
932 virtual bool warnOnBlockingTerrainCalls()
const;
939 virtual void setIntersectDataLoadExpireTime(
const double& expireTime);
940 virtual void expireDataLoadRequestsBeforeTime(
const double& currentTime);
982 virtual std::shared_ptr<DtAsyncJobMapEntry> makePathAsync(
984 ,
const DtPoint& localDestination
985 ,
const std::string& type
986 ,
const double& maxSearchRadius
987 ,
const double& startProximityThreshold
988 ,
const DtAStarGraph::DtWeightFactorsList& weightFactors = DtAStarGraph::DtWeightFactorsList()
989 ,
const double& offRoadPathWeight = 10.0);
1004 virtual DtAStarGraph::Path makePath(
1006 const DtPoint& localDestination,
1007 const std::string& type,
1008 const double& maxSearchRadius,
1009 const double& startProximityThreshold,
1010 boost::function<
bool ()> cancelCheck,
1011 const DtAStarGraph::DtWeightFactorsList& weightFactors
1012 = DtAStarGraph::DtWeightFactorsList())
const;
1016 virtual bool onPathFeature(
1020 virtual DtAStarGraph::Ptr pathFinder(
const std::string&)
const;
1025 virtual std::shared_ptr<DtAsyncJobMapEntry> addAsyncJob(
DtAsyncJob* job);
1034 const double topoDistance(
const DtPoint& start,
const DtPoint& end,
1047 const std::string& type,
const DtPoint& startingLocation,
1048 const double& searchRadius,
bool* dataAvailable = NULL);
1051 std::vector<DtChord>& chords)
const;
1053 void breakUpChord(
const DtChord& chord, std::vector<DtChord>& chords)
const;
1066 virtual void clearCache();
1076 const std::map<DtString, DtString>& keyValueChanges,
1077 const DtVector& centerLocation,
double radius);
1087 const std::map<DtString, DtString>& keyValueChanges,
1088 const std::vector<DtVector>& vertices,
double width);
1097 const std::map<DtString, DtString>& keyValueChanges,
1098 const std::list<DtVector>& vertices);
1121 virtual void dynamicTerrainFeaturesInArea(
1122 const DtVector& centerLocation,
double radius,
1123 std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo,
bool* dataAvailable = NULL,
1124 const DtString& filterKey = DtString::nullString());
1138 virtual void dynamicTerrainFeaturesInArea(
1139 const std::list<DtVector>& vertices,
double width,
1140 std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo,
bool* dataAvailable = NULL,
1141 const DtString& filterKey = DtString::nullString());
1154 virtual void dynamicTerrainFeaturesInArea(
1155 const std::list<DtVector>& vertices,
1156 std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo,
bool* dataAvailable = NULL,
1157 const DtString& filterKey = DtString::nullString());
1175 bool useOriginalGeometry =
false);
1177 virtual void queryCurrentDynamicTerrainFeatures(
1180 bool useOriginalGeometry =
false);
1184 virtual void cacheTerrainArea(
int requestId,
1185 unsigned minLOD,
unsigned maxLOD,
const DtExtent& cacheArea,
1189 virtual void cancelCacheTerrainArea(
int requestId);
1198 virtual bool oceanLayerPresent()
const;
1201 virtual void setOceanLayerPresent(
bool b);
1214 virtual bool nonPolygonalWaterHeight(
1216 double& height)
const;
1219 virtual void setNonPolygonalWaterHeight(
double d);
1224 virtual double defaultWaterDepth(
const DtVector& localLocation)
const;
1227 virtual void setDefaultWaterDepth(
double);
1232 virtual double defaultSurfaceElevation(
const DtVector& localLocation)
const;
1265 virtual double landAboveWaterMinimumSeparation()
const;
1268 virtual void setLandAboveWaterMinimumSeparation(
double);
1271 virtual void setAccumulateIntersections(
bool value);
1274 virtual bool accumulateIntersections()
const;
1277 virtual void getIntersections(std::vector<DtChord>& accumulatedChords, std::vector<DtPoint>& accumulatedIntersections)
const;
1279 virtual boost::signals2::connection connectToUnloadTerrain(
const DtTerrainUnloadSignalType::slot_type & slotIn);
1288 void setBlockOnAsynchronousOperations(
bool shouldBlock);
1293 void insertNonPolyWaterIntoIntersectionList(
1305 const DtVector& localLocation,
const double height)
const;
1311 virtual bool nonPolygonalWaterIntersect(
1316 typedef std::map<DtString, DtGenericTerrainRecordCallbackListPtr >
1331 virtual void terrainPaging(
bool);
1387 bool myActive =
false;
1393 #define DtRegisterTerrainImplementationFunctionName "DtRegisterTerrainImplementation"
1400 #define DtDeregisterTerrainImplementationFunctionName "DtDeregisterTerrainImplementation"
Represents a set of DtFeature objects or others which conform to the DtFeature concept.
Definition: featureSet.h:105
DtString myLoadedFilename
The last filename that was passed to loadTerrain()
Definition: terrainInterface.h:1353
tbb::tick_count myLastDebugOutputTick
Definition: terrainInterface.h:1371
void(* DtTerrainChangeNotificationCallbackFcn)(const DtTerrainChangeNotificationInfo &terrainChangeInfo, void *userData)
Callback function for terrain change notifications.
Definition: terrainImplementation.h:121
std::vector< DtPoint > myAccumulatedIntersectionPoints
Definition: terrainInterface.h:1384
boost::function< void(const makVrv::DtDynamicTerrainFeature &)> DtDynamicTerrainQueryCallback
Definition: terrainImplementation.h:211
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:33
This is the abstract base class for all terrain implementations. A terrain implementation is used by ...
Definition: terrainImplementation.h:244
DtCallbackList< makArchives::DtGenericTerrainRecord * > DtGenericTerrainRecordCallbackList
Definition: terrainInterface.h:58
DtAsyncJobServer * myAsyncJobServer
Manages asynchronous path planning tasks.
Definition: terrainInterface.h:1366
void(* DtDeregisterTerrainImplementationLibFcn)()
This function signature is used for terrain implementation shared libraries that deregister themselve...
Definition: terrainInterface.h:1404
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:46
std::shared_ptr< const DtProj > CPtr
Definition: proj.h:56
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:55
std::list< std::pair< DtPagingMetaDataPtr, DtTerrainPagingGeometryPtr > > DtTerrainPagingGeometryList
Definition: terrainPagingGeometry.h:111
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:109
boost::signals2::signal< void(bool)> signal_jobQueueStatusChanged
If the implementation is currently making a path plan (using the async job server) and the status cha...
Definition: terrainInterface.h:1285
Definition: aerodromeLoader.h:63
double landAboveWaterMinimumSeparation
Definition: terrainInterface.h:113
Represents (possibly infinite) area of space.
Definition: DtDynamicTerrainGeometry.h:20
std::vector< DtChord > myAccumulatedChords
Definition: terrainInterface.h:1383
class DtScenarioExplorer:
Definition: scenarioExplorer.h:26
Allows manipulating a terrain object. Returned by functions which create terrain objects.
Definition: terrainImplementation.h:215
DtGenericTerrainRecordCallbackListMap myGenericTerrainRecordCallbacklists
Definition: terrainInterface.h:1376
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:111
Simple asynchronous callback queue.
Definition: vrfCallbackQueue.h:29
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:102
DtTerrainImplementationManager * myTerrainImplManager
Definition: terrainInterface.h:1350
Definition: surface.h:181
Definition: aStarGraph.h:86
static double theTerrainPagingMaxHeight
Definition: terrainInterface.h:1361
std::shared_ptr< DtGenericTerrainRecordCallbackList > DtGenericTerrainRecordCallbackListPtr
Definition: terrainInterface.h:59
unsigned int DtTerrainGeometryId
Unique ID numbers that reference a specific geometry (or set of triangles) in the terrain...
Definition: terrainProcessPolygonsBox.h:38
DtTerrainIntersectOptions Passed to terrain intersect functions to modify how intersect acts...
Definition: terrainIntersectOptions.h:22
bool myTerrainIsLoaded
Status publisher needs to keep track of when terrain is loaded and unloaded.
Definition: terrainInterface.h:1348
DtConsoleCommandManager * myConsoleCommandManager
Definition: terrainInterface.h:1351
Definition: coordSystem.h:54
bool(* DtRegisterTerrainImplementationLibFcn)(DtTerrainInterface *)
This function signature is used for terrain implementation shared libraries that register themselves ...
Definition: terrainInterface.h:1397
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:1354
Represents some coordinate system. The terms "coordinate system", "projection", "spatial reference"...
Definition: proj.h:52
Represents a set of characeters a DtFeature object can have. DtQuery objects are the way to communica...
Definition: query.h:37
double seaLevel
Definition: terrainInterface.h:110
#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:1338
This class holds parameters which define the capabilities of the current terrain. The terrain impleme...
Definition: terrainCapabilities.h:28
Definition: noArgumentCallbackList.h:90
DtTerrainInterface allows access to common terrain calls without having to know the terrain implement...
Definition: terrainInterface.h:93
DtTerrainImplementation * terrainImplementation() const
Returns the current terrain implementation.
Definition: terrainInterface.h:141
Terrain which represents buildings and other structures. There should be terrain skin under these...
Definition: rwTerrainCategoryMask.h:23
DtTerrainImplementationFactory::DtCreatorFcn DtTerrainImplementationCreatorFcn
Definition: terrainImplementation.h:484
DtTerrainUnloadSignalType myUnloadTerrainSignal
Definition: terrainInterface.h:1386
Interface which abstracts the concept of a individually identifiable "thing" in the terrain...
Definition: DtDynamicTerrainFeature.h:83
LoadContext
Definition: terrainInterface.h:96
makArchives::DtTerrainRecord * myTerrainRecord
Definition: terrainInterface.h:1373
OceanLayer myGlobalOceanLayer
Definition: terrainInterface.h:1368
Definition: pathFeature.h:99
Definition: vrfChordIntersectionRecord.h:19
Definition: intersectionRecord.h:60
DtTerrainImplementation * myTerrainImpl
Definition: terrainInterface.h:1344
unsigned int DtTerrainCategoryMask
This bitmask is made using DtTerrainCategory values.
Definition: rwTerrainCategoryMask.h:27
bool myAccumulateIntersections
check if we need to accumulate terrain intersections results for debug purpose
Definition: terrainInterface.h:1381
DT_DLL_DEBUGDRAWRENDERER void init(makVrv::DtDe &de)
Work function for the plugin initialization.
DtTerrainInterfaceConfig myFileConfig
Definition: terrainInterface.h:1339
MAKVRinTerra::DtProj::CPtr myProjObject
Definition: terrainInterface.h:1363
std::map< DtString, DtGenericTerrainRecordCallbackListPtr > DtGenericTerrainRecordCallbackListMap
Definition: terrainInterface.h:1317
void(* DtTriangleCallbackFcn)(DtTerrainTriangleStruct &triangle, void *usr)
Definition: terrainProcessPolygonsBox.h:130
boost::ptr_list< MAKVRinTerra::DtFeatureSet > FeatureSetList
Definition: terrainInterface.h:1341
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:1282
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:112
void(* DtCacheProgressCallbackFunction)(int requestId, int current, bool completed, double elapsedTime, void *usr)
Callback for terrain caching.
Definition: terrainImplementation.h:117
Resource handle for a query which has been added to the system. Returned from DtTerrainImplementation...
Definition: terrainImplementation.h:180
Interface for getting terrain triangle data out of DtTerrainInterface::trianglesInArea. This object should always be created on the stack.
Definition: terrainProcessPolygonsBox.h:134
Manages async job objects.
Definition: asyncJobServer.h:61
DtMedium
Definition: surface.h:187
std::ofstream myDebugOutputFile
Definition: terrainInterface.h:1370
boost::signals2::signal< void()> DtTerrainUnloadSignalType
Definition: terrainInterface.h:61
Definition: featuresDebugger.h:33
Global ocean layer info; used in conjunction with the polygon data.
Definition: terrainInterface.h:105
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:145
bool myBlockOnAsynchronousOperations
Definition: terrainInterface.h:1389
double myLastFileTime
Needed in case file is saved with same name and then reloaded.
Definition: terrainInterface.h:1359
Configuration object for processing areas.
Definition: areaFeature.h:47
DtTerrainIntersectStatus Contains information about status of "data available" when an intersection c...
Definition: terrainIntersectStatus.h:23
void(* DtTriangleCallbackFinalizeFcn)(int status, void *usr)
Definition: terrainProcessPolygonsBox.h:129
DtTerrainPagingGeometryList myForceLoadAreas
Definition: terrainInterface.h:1356
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:60
FeatureSetList myFeatureLayers
Definition: terrainInterface.h:1342