VR-Forces 4.6.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes
DtTerrainInterface Class Reference

DtTerrainInterface allows access to common terrain calls without having to know the terrain implementation. More...

Classes

struct  OceanLayer
 Global ocean layer info; used in conjunction with the polygon data. More...

Public Types

enum  LoadContext { VrfSimulationBackEnd = 1, NavGenerationTool = 2 }
typedef MAKVRinTerra::DtAStarGraph DtAStarGraph

Public Member Functions

 DtTerrainInterface ()
 Constructor.
virtual ~DtTerrainInterface ()
 Destructor.
virtual bool init (bool createConsoleManager=true)
 Virtual initialization.
virtual void setConfigFile (const std::string &, bool reload=true)
 Set the config file which will attempt to be loaded during init.
virtual const
DtTerrainInterfaceConfig
configOptions () const
 Current config options.
virtual void tick ()
 Cleans up finished async server jobs, and checks for path finder removal.
virtual bool isSameTerrain (const DtFilename &) const
 Returns true if this terrain is the same terrain as is currently open.
DtTerrainImplementationterrainImplementation () const
 Returns the current terrain implementation.
virtual void addTerrainImplementation (const DtString &implementationName, DtTerrainImplementationCreatorFcn creatorFcn)
 Add a terrain implementation type to the set of terrain implementations that can be used by this interface.
virtual void addFeatureLayer (MAKVRinTerra::DtFeatureSet *)
 Add a feature layer that will be added to the feature database.
virtual void addFeatureLayer (boost::shared_ptr< MAKVRinTerra::DtFeatureSet >)
virtual void addGenericTerrainRecordCallback (const DtString &recordType, DtGenericTerrainRecordCallbackFunction fcn, void *user)
virtual void removeGenericTerrainRecordCallback (const DtString &recordType, DtGenericTerrainRecordCallbackFunction fcn, void *user)
virtual void invokeGenericTerrainRecordCallbacks (makArchives::DtGenericTerrainRecord *record)
virtual bool loadTerrain (const DtString &filename, LoadContext context=VrfSimulationBackEnd)
 Settings will be merged into existing – not replace.
virtual bool unloadTerrain (bool block=true)
virtual bool loadModel (const DtFilename &f, const DtEntityType &t=DtEntityType(), bool hasOceanLayer=true)
 Loads a model from the specified file.
virtual double modelHeightDifferencesFromAppearances (int oldApp, int newApp) const
 If supported by the interface, return the height difference from the currently loaded model as a transition from the old appearance to the new appearance.
virtual bool terrainIsLoaded ()
 Creates a terrain from the given extent.
virtual DtString loadedFilename () const
virtual const Coordinate_SystemcoordinateSystem () const
virtual Coordinate_SystemcoordinateSystem ()
virtual std::auto_ptr
< MAKVRinTerra::DtAreaFeatureSet
areas (const std::string &type, const boost::shared_ptr< DtVrfCallbackQueue > &=boost::shared_ptr< DtVrfCallbackQueue >()) const
 Returns a DtAreaFeatureSet configured using the provided type.
virtual std::auto_ptr
< MAKVRinTerra::DtAreaFeatureSet
areas (const MAKVRinTerra::DtAreaFeatureSetAdapter::Config &config, const boost::shared_ptr< DtVrfCallbackQueue > &=boost::shared_ptr< DtVrfCallbackQueue >()) const
 Returns a DtAreaFeatureSet configured using the provided type and parameters.
virtual std::auto_ptr
< MAKVRinTerra::DtAreaFeatureSet
LOSfeatures () const
 Returns a DtAreaFeatureSet configured for line of sight blocking features.
virtual std::auto_ptr
< MAKVRinTerra::DtPathFeatureSet
paths (const std::string &type) const
virtual std::auto_ptr
< MAKVRinTerra::DtFeatureSet
features (const std::string &queryName) const
 Access filtered features.
virtual std::auto_ptr
< MAKVRinTerra::DtFeatureSet
allFeatures () const
 Access all features.
virtual std::auto_ptr
< MAKVRinTerra::DtFeatureSet
featuresRaw (const std::string &queryName) const
 Access all features.
virtual std::auto_ptr
< MAKVRinTerra::DtFeatureSet
allFeaturesRaw () const
 Access all features directly from the source.
virtual double terrainHeightAboveSeaLevel (const DtPoint &databaseLocation, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Returns the height above sea level for the topmost terrain intersection at databaseLocation.
virtual bool terrainHeightAndIntersection (const DtVector &localLocation, double &height, DtVrfChordIntersectionRecord &record, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Returns whether there is a terrain intersection and if so sets height and record from the topmost terrain intersection point.
virtual bool terrainHeightAndIntersectionBelow (const DtVector &localLocation, double &height, DtVrfChordIntersectionRecord &record, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Like terrainHeightAndIntersection(), but only looks for intersections below the given local location.
virtual bool closestIntersection (const DtVector &localLocation, DtPoint &intersectionPoint, bool *dataAvailable=0, bool overrideBlockingAssert=false, bool doNotAddDefaultRecord=false, int flags=0) const
 Similar to the terrainHeight functions above.
virtual bool closestIntersection (double lat, double lon, DtPoint &intersectionPoint, bool *dataAvailable=0, bool overrideBlockingAssert=false, bool doNotAddDefaultRecord=false, int flags=0) const
 Same as above function, but accepts location in lat/lon.
virtual bool closestIntersection (const DtVector &localLocation, DtVrfChordIntersectionRecord &record, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, bool doNotAddDefaultRecord=false, int flags=0) const
 Same as above function, but returns the entire intersection record, and not just the intersection point.
virtual bool closestIntersection (double lat, double lon, DtVrfChordIntersectionRecord &record, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, bool doNotAddDefaultRecord=false, int flags=0) const
 Same as above function, but accepts location in lat/lon.
virtual bool closestIntersection (const std::list< DtVector > &localLocationList, DtVrfChordIntersectRecordList &recordList, int &numIntersections, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, bool doNotAddDefaultRecord=false, int flags=0) const
 Returns complete intersection information about the closest terrain intersection point for each location in the list in Database Coordinates.
virtual bool intersect (const DtChord &chord, DtPoint &intersectionPoint, double &intersectionTime, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Calculates the first terrain intersection point along a chord given in Database Coordinates.
virtual bool intersect (const DtChord &chord, DtVrfChordIntersectionRecord &record, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Returns complete intersection information about the first terrain intersection point along a chord given in Database Coordinates.
virtual bool allIntersectsAlongChord (const DtChord &chord, DtVrfChordIntersectRecordList &intList, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Computes the list of all intersections of a chord (in Database Coordinates) with the terrain database.
virtual bool allIntersectsAlongChordDebug (const DtChord &chord, DtVrfChordIntersectRecordList &intList, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Same as allIntersectsAlongChord, but prints debug info about all surfaces found.
virtual bool intersectList (const std::list< DtChord > &chordList, DtVrfChordIntersectRecordList &recordList, int &numTerrainIntersections, DtIntersectionRecord::DtIntersectionType irtFlag=DtIntersectionRecord::INT_ALL_DATA, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0) const
 Returns complete intersection information about the first terrain intersection points along each of a list of DtChords given in Database Coordinates.
virtual void preloadTerrainAreas (const DtTerrainPagingGeometryList &preloadGeometry)
 Specifies a list of terrain areas that should be preloaded by the terrain implementation, in the case of a paging or streaming terrain source.
virtual void forceLoadTerrainAreas (const DtTerrainPagingGeometryList &forceLoadGeometry)
 Functions like preloadTerrainAreas except the geometries are saved and will be kept loaded.
virtual bool dataAvailable (const DtTerrainPagingGeometryList &geometry)
 Returns true if all of the terrain which intersects the geometry list is paged in.
virtual const
DtTerrainCapabilities
terrainCapabilities () const
virtual bool addTerrainPassThroughLayer (const DtString &layerType)
 Adds a pass though layer registered with the specified type to the currently loaded terrain implementation.
virtual void setIntersectDataLoadExpireTime (const double &expireTime)
 Set the default expiration time for data load requests generated by intersect calls that require data that has not been loaded (paged-in).
virtual void expireDataLoadRequestsBeforeTime (const double &currentTime)
virtual void trianglesInArea (DtTriangleCallbackFcn func, DtTriangleCallbackFinalizeFcn finalize, DtTerrainProcessPolygonsBox &box, void *usr) const
 Calls the function in the first argument on each triangle in the area specified by the box.
virtual void trianglesInArea (DtTriangleOutputInterface &func, DtTerrainProcessPolygonsBox &box) const
 Calls the object in the first argument on each triangle in the area specified by the box.
virtual boost::shared_ptr
< DtAsyncJobMapEntry
makePathAsync (const DtPoint &localStart, const DtPoint &localDestination, const std::string &type, const double &maxSearchRadius, const double &startProximityThreshold, const DtAStarGraph::DtWeightFactorsList &weightFactors=DtAStarGraph::DtWeightFactorsList())
 Register asynchronous path finding task.
virtual DtAStarGraph::Path makePath (const DtPoint &localStart, const DtPoint &localDestination, const std::string &type, const double &maxSearchRadius, const double &startProximityThreshold, boost::function< bool()> cancelCheck, const DtAStarGraph::DtWeightFactorsList &weightFactors=DtAStarGraph::DtWeightFactorsList()) const
 Make a path from start to destination on features configured using the provided type.
virtual bool onPathFeature (const DtPoint &location, const DtString &type, double buffer=0.5)
 returns whether the given point is within "offset" distance of any edge on the path graph.
virtual DtAStarGraph::Ptr pathFinder (const std::string &) const
 Return the DtAStarGraph object for the given feature type.
virtual boost::shared_ptr
< DtAsyncJobMapEntry
addAsyncJob (DtAsyncJob *job)
 Add an user defined async job type to the job queue.
MAKVRinTerra::DtProj::CPtr localProj () const
 Returns the local DtProj object for the current terrain.
MAKVRinTerra::DtFeaturesDebuggerdebugger () const
MAKVRinTerra::DtQuery findQuery (const std::string &name) const
const double topoDistance (const DtPoint &start, const DtPoint &end, const MAKVRinTerra::DtProj &localProj)
MAKVRinTerra::DtClosestPathFeatureFinder closestFeatureOnNetwork (const std::string &type, const DtPoint &startingLocation, const double &searchRadius, bool *dataAvailable=NULL)
 Finds the closest feature on the feature network to startingLocation.
void breakUpChord (const MAKVRinTerra::DtProj &, const DtChord &chord, std::vector< DtChord > &chords) const
void breakUpChord (const DtChord &chord, std::vector< DtChord > &chords) const
virtual DtTerrainGeometryHandlecreateEntityGeometry (const DtFilename &file)
 Create geometry in the terrain which represents the entity.
virtual
DtDynamicTerrainRequestHandle 
addDynamicTerrainChangeRequest (double time, const std::map< DtString, DtString > &keyValueChanges, const DtVector &centerLocation, double radius)
 Add a dynamic terrain change request defined by a spherical geometry to the system.
virtual
DtDynamicTerrainRequestHandle 
addDynamicTerrainChangeRequest (double time, const std::map< DtString, DtString > &keyValueChanges, const std::list< DtVector > &vertices, double width)
 Add a dynamic terrain change request defined by a linear geometry to the system.
virtual
DtDynamicTerrainRequestHandle 
addDynamicTerrainChangeRequest (double time, const std::map< DtString, DtString > &keyValueChanges, const std::list< DtVector > &vertices)
 Add a dynamic terrain change request defined by a polygonal geometry to the system.
virtual
DtDynamicTerrainRequestHandle 
addDynamicTerrainChangeRequest (double time, makVrv::DtDynamicTerrainChange *command)
 Add a dynamic terrain change request to the system.
virtual void dynamicTerrainFeaturesInArea (const DtVector &centerLocation, double radius, std::list< DtRwDynamicTerrainInformation > &dynamicTerrainInfo, bool *dataAvailable=NULL, const DtString &filterKey=DtString::nullString())
 Gets the list of all dynamic terrain features and potential values in the given spherical geometry.
virtual void dynamicTerrainFeaturesInArea (const std::list< DtVector > &vertices, double width, std::list< DtRwDynamicTerrainInformation > &dynamicTerrainInfo, bool *dataAvailable=NULL, const DtString &filterKey=DtString::nullString())
 Gets the list of all dynamic terrain features and potential values in the given linear geometry.
virtual void dynamicTerrainFeaturesInArea (const std::list< DtVector > &vertices, std::list< DtRwDynamicTerrainInformation > &dynamicTerrainInfo, bool *dataAvailable=NULL, const DtString &filterKey=DtString::nullString())
 Gets the list of all dynamic terrain features and potential values in the given polygonal geometry.
virtual bool extractDynamicTerrainFeatureInformation (const makVrv::DtDynamicTerrainFeature &feature, DtRwDynamicTerrainInformation &dynamicTerrainInfo, const DtString &filterKey=DtString::nullString()) const
 Extracts information out of a makVrv::DtDynamicTerrainFeature and stores in DtRwDynamicTerrainInformation.
virtual DtDynamicTerrainQueryHandle queryDynamicTerrainFeatures (const DtDynamicTerrainQueryCallback &callback, makVrv::DtDynamicTerrainGeometry *geometry=0, bool useOriginalGeometry=false)
 Install a query which will call the supplied callback on matching dynamic terrain features as they are paged in.
virtual void queryCurrentDynamicTerrainFeatures (const DtDynamicTerrainQueryCallback &callback, makVrv::DtDynamicTerrainGeometry *geometry=0, bool useOriginalGeometry=false)
virtual void cacheInformationForTerrainArea (unsigned minLOD, unsigned maxLOD, const DtExtent &cacheArea, double &estimatedTime, double &estimatedSize, std::vector< std::string > &elevationLayers, std::vector< std::string > &modelLayers, std::vector< std::string > &featureLayers) const
 Returns information about what terrain data the sim can cache.
virtual void cacheTerrainArea (int requestId, unsigned minLOD, unsigned maxLOD, const DtExtent &cacheArea, DtCacheProgressCallbackFunction fcn=0, void *usr=0)
 Call this to start the process of caching terain data (if supported for the open terrain) using the given request id and extent.
virtual void cancelCacheTerrainArea (int requestId)
 Call this routine to cancel a potential cache in progress.
virtual bool oceanLayerPresent () const
 Returns whether or not an ocean layer is present in this terrain.
virtual void setOceanLayerPresent (bool b)
 Sets whether or not the ocean layer is present in this terrain.
virtual bool nonPolygonalWaterHeight (const DtChord &localLocation, double &height) const
 Function to return the water level defined for water regions that aren't defined with surface water polygons.
virtual void setNonPolygonalWaterHeight (double d)
 Sets the non polygonal water height to use as referenced in nonPolygonalWaterHeight.
virtual double defaultWaterDepth (const DtVector &localLocation) const
 Defines the default water depth when floor and surface levels are not defined in the database.
virtual void setDefaultWaterDepth (double)
 Sets the default water depth.
virtual double defaultSurfaceElevation (const DtVector &localLocation) const
 Defines the elevation of the terrain surface when there is no data.
virtual DtSurface::DtMedium mediumForUnspecPolygonsUnderWater () const
 Defines what to do in terrainHeightUnderWater when a polygon with medium "unspecified" is encountered below a water surface.
virtual void setMediumForUnspecPolygonsUnderWater (DtSurface::DtMedium m)
 Sets the medium for mediumForUnspecPolygonsUnderWater.
virtual double landAboveWaterMinimumSeparation () const
 This function returns a constant threshold value that determines how far an unspecified-medium polygon has to be above a water surface for it to be considered above-sea-level land.
virtual void setLandAboveWaterMinimumSeparation (double)
 Sets landAboveWaterMinimumSeparation.
virtual bool terrainHeightUnderWater (const DtVector &databaseLocation, double &groundHeight, DtSurface &groundSurface, DtVector &groundNormal, double &waterHeight, DtSurface::DtMedium &topSurfaceMedium, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0)
 This function gets the ground and water (if it exists) surfaces at the given location.
virtual bool terrainHeightUnderWaterDebug (const DtVector &databaseLocation, double &groundHeight, DtSurface &groundSurface, DtVector &groundNormal, double &waterHeight, DtSurface::DtMedium &topSurfaceMedium, bool debug, bool *dataAvailable=0, bool overrideBlockingAssert=false, int flags=0)
 Performs the computations for terrainHeightUnderWater.
virtual void setAssertOnBlockingTerrainCalls (bool assertBlock)
 Determines if an exception should be thrown if a blocking terrain call is made.
virtual bool assertOnBlockingTerrainCalls () const
virtual void setWarnOnBlockingTerrainCalls (bool warnBlock)
 Determines if a warning should be printed out if a blocking terrain call is made.
virtual bool warnOnBlockingTerrainCalls () const

Protected Types

typedef boost::ptr_list
< MAKVRinTerra::DtFeatureSet
FeatureSetList
typedef std::map< DtString,
DtGenericTerrainRecordCallbackList
DtGenericTerrainRecordCallbackListMap

Protected Member Functions

void insertNonPolyWaterIntoIntersectionList (DtVrfChordIntersectionRecord &waterInterx, DtVrfChordIntersectRecordList &intrxList) const
 Insert the given intersection record into the intersection list based on intersection time order.
virtual
DtVrfChordIntersectionRecord 
blankSurfaceIntersectionRecord (const DtVector &localLocation, const double height) const
 Creates a chord intersection record corresponding to a surface with unspecified soil type (and medium).
virtual bool nonPolygonalWaterIntersect (const DtChord &chord, DtVrfChordIntersectRecordList &waterRecords) const
 If there is non-polygonal water, this function computes the intersection records for the chord with this water.

Protected Attributes

DtFilename myTerrainOptionsFilename
 Default config loaded in init Loading terrains will have a copy of this and may set their own specific values internally, and these will be active for the duration it is loaded.
DtTerrainInterfaceConfig myFileConfig
FeatureSetList myFeatureLayers
DtTerrainImplementationmyTerrainImpl
bool myTerrainIsLoaded
 Status publisher needs to keep track of when terrain is loaded and unloaded.
DtTerrainImplementationManagermyTerrainImplManager
DtConsoleCommandManagermyConsoleCommandManager
DtString myLoadedFilename
 The last filename that was passed to loadTerrain()
DtString myUnresolvedFilename
DtTerrainPagingGeometryList myForceLoadAreas
double myLastFileTime
 Needed in case file is saved with same name and then reloaded.
MAKVRinTerra::DtProj::CPtr myProjObject
DtAsyncJobServer myAsyncJobServer
 Manages asynchronous path planning tasks.
OceanLayer myGlobalOceanLayer
std::ofstream myDebugOutputFile
tbb::tick_count myLastDebugOutputTick
makArchives::DtTerrainRecordmyTerrainRecord
DtGenericTerrainRecordCallbackListMap myGenericTerrainRecordCallbacklists

Static Protected Attributes

static double theTerrainPagingMaxHeight

Detailed Description

DtTerrainInterface allows access to common terrain calls without having to know the terrain implementation.

Additional terrain implementations can be added as well.

Synchronous and Asynchronous Calls with Paged Terrains

The terrain intersection functions in this class will by default block if the requested data needs to be paged in. In general making a blocking call from any tick-based function will cause a long delay resulting in a long frame which will most likely cause very undesirable effects on the simulation. In order to make an asynchronous call a bool pointer called "dataAvailable" must be specified. If the data for the requested location(s) has already been paged in and the result is immediately available, dataAvailble will be set to true and the results returned will reflect the contents of the terrain database. Otherwise, the terrain intersection call will cause the terrain implementation to queue the loading of the corresponding terrain page and the call will return immediately and set dataAvailable to false. In this case, the return value of the function should not be used and it does not reflect the terrain database. For most terrain implementations the cost of making terrain intersections on unavailable databases pages should be minimal and its expected that callers can poll for the data by making repeated intersection calls.

Member Typedef Documentation

Member Enumeration Documentation

Enumerator:
VrfSimulationBackEnd 
NavGenerationTool 

Constructor & Destructor Documentation

DtTerrainInterface::DtTerrainInterface ( )

Constructor.

virtual DtTerrainInterface::~DtTerrainInterface ( )
virtual

Destructor.

Member Function Documentation

virtual bool DtTerrainInterface::init ( bool  createConsoleManager = true)
virtual

Virtual initialization.

Call this after construction, and before calling any other members on the class. Creates the terrain implementation manager

virtual void DtTerrainInterface::setConfigFile ( const std::string &  ,
bool  reload = true 
)
virtual

Set the config file which will attempt to be loaded during init.

virtual const DtTerrainInterfaceConfig& DtTerrainInterface::configOptions ( ) const
virtual

Current config options.

virtual void DtTerrainInterface::tick ( )
virtual

Cleans up finished async server jobs, and checks for path finder removal.

virtual bool DtTerrainInterface::isSameTerrain ( const DtFilename &  ) const
virtual

Returns true if this terrain is the same terrain as is currently open.

DtTerrainImplementation* DtTerrainInterface::terrainImplementation ( ) const
inline

Returns the current terrain implementation.

virtual void DtTerrainInterface::addTerrainImplementation ( const DtString implementationName,
DtTerrainImplementationCreatorFcn  creatorFcn 
)
virtual

Add a terrain implementation type to the set of terrain implementations that can be used by this interface.

virtual void DtTerrainInterface::addFeatureLayer ( MAKVRinTerra::DtFeatureSet )
virtual

Add a feature layer that will be added to the feature database.

virtual void DtTerrainInterface::addFeatureLayer ( boost::shared_ptr< MAKVRinTerra::DtFeatureSet )
virtual
virtual void DtTerrainInterface::addGenericTerrainRecordCallback ( const DtString recordType,
DtGenericTerrainRecordCallbackFunction  fcn,
void *  user 
)
virtual
virtual void DtTerrainInterface::removeGenericTerrainRecordCallback ( const DtString recordType,
DtGenericTerrainRecordCallbackFunction  fcn,
void *  user 
)
virtual
virtual void DtTerrainInterface::invokeGenericTerrainRecordCallbacks ( makArchives::DtGenericTerrainRecord record)
virtual
virtual bool DtTerrainInterface::loadTerrain ( const DtString filename,
LoadContext  context = VrfSimulationBackEnd 
)
virtual

Settings will be merged into existing – not replace.

virtual bool DtTerrainInterface::unloadTerrain ( bool  block = true)
virtual
Parameters
blockwhether this function should block until all resources are cleaned up
virtual bool DtTerrainInterface::loadModel ( const DtFilename &  f,
const DtEntityType &  t = DtEntityType(),
bool  hasOceanLayer = true 
)
virtual

Loads a model from the specified file.

This is different from loadTerrain in that, if the implementation supports it, will not load this file into the main terrain, but rather will create a separate database that contains just this model. Supply option entity for for use by implementation to mutate loaded model based on appearance. If hasOceanLayer is false, the configuration of the terrain implementation will be changed to disable the ocean layer.

virtual double DtTerrainInterface::modelHeightDifferencesFromAppearances ( int  oldApp,
int  newApp 
) const
virtual

If supported by the interface, return the height difference from the currently loaded model as a transition from the old appearance to the new appearance.

virtual bool DtTerrainInterface::terrainIsLoaded ( )
virtual

Creates a terrain from the given extent.

virtual DtString DtTerrainInterface::loadedFilename ( ) const
virtual
Returns
The last filename that was passed to loadTerrain() and successfully loaded.
virtual const Coordinate_System* DtTerrainInterface::coordinateSystem ( ) const
virtual
virtual Coordinate_System* DtTerrainInterface::coordinateSystem ( )
virtual
virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> DtTerrainInterface::areas ( const std::string &  type,
const boost::shared_ptr< DtVrfCallbackQueue > &  = boost::shared_ptr< DtVrfCallbackQueue >() 
) const
virtual

Returns a DtAreaFeatureSet configured using the provided type.

See appData/settings/featureconfig.txt for types.

virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> DtTerrainInterface::areas ( const MAKVRinTerra::DtAreaFeatureSetAdapter::Config config,
const boost::shared_ptr< DtVrfCallbackQueue > &  = boost::shared_ptr< DtVrfCallbackQueue >() 
) const
virtual

Returns a DtAreaFeatureSet configured using the provided type and parameters.

See appData/settings/featureconfig.txt for types.

virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> DtTerrainInterface::LOSfeatures ( ) const
virtual

Returns a DtAreaFeatureSet configured for line of sight blocking features.

virtual std::auto_ptr<MAKVRinTerra::DtPathFeatureSet> DtTerrainInterface::paths ( const std::string &  type) const
virtual
virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> DtTerrainInterface::features ( const std::string &  queryName) const
virtual

Access filtered features.

Parameters
queryNameName of config query identifying features which will be returned.
virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> DtTerrainInterface::allFeatures ( ) const
virtual

Access all features.

virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> DtTerrainInterface::featuresRaw ( const std::string &  queryName) const
virtual

Access all features.

Features will be read directly from the source

virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> DtTerrainInterface::allFeaturesRaw ( ) const
virtual

Access all features directly from the source.

virtual double DtTerrainInterface::terrainHeightAboveSeaLevel ( const DtPoint databaseLocation,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Returns the height above sea level for the topmost terrain intersection at databaseLocation.

Parameters
Input
databaseLocationthe location to test
Output
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false and zero will be returned.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
terrainHeight (or zero if the terrain is not yet available)
virtual bool DtTerrainInterface::terrainHeightAndIntersection ( const DtVector localLocation,
double height,
DtVrfChordIntersectionRecord record,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Returns whether there is a terrain intersection and if so sets height and record from the topmost terrain intersection point.

Parameters
Input
localLocationthe location to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Output
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, height will be set to zero, and the record will not reflect any results.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
truea terrain intersection was found
falseif dataAvailable was specified and returns true, then the database does not have an intersection at localLocation. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::terrainHeightAndIntersectionBelow ( const DtVector localLocation,
double height,
DtVrfChordIntersectionRecord record,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Like terrainHeightAndIntersection(), but only looks for intersections below the given local location.

virtual bool DtTerrainInterface::terrainHeightUnderWater ( const DtVector databaseLocation,
double groundHeight,
DtSurface groundSurface,
DtVector groundNormal,
double waterHeight,
DtSurface::DtMedium topSurfaceMedium,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
)
virtual

This function gets the ground and water (if it exists) surfaces at the given location.

It provides the ground height, the surface structure for the ground, the normal of that surface, the height of the water surface, and a flag indicating whether there is actually water.

Note
1 - This function does NOT intersect vector or geometric feature data - they are intended for finding the "ground" height.
2 - This function determines the topmost terrain surfaces. Thus if there are multiple levels of terrain, the highest intersection point will be returned as the height. In order to get the closest intersection points with terrain (and possibly features data, use the closestIntersection() function below; but that function will not attempt to interpret unspecified surfaces, or synthesize a sea-floor surface.
3 - This function will make assumptions about "unspecified" surfaces, and will synthesize terrain heights if the location is off the known terrain, using default heights and water depths in the database or the code. Thus it will always return a ground surface. It will interpret unspecified surfaces as water if they are over a ground surface, and as ground if they are under a water surface.

This function may find one or more surfaces, which may be labeled as ground, water, or unspecified. The database may have a global sea level altitude specified, and may have a default ocean depth specified. The function interprets different combinations of data as follows:

  • Terrain is not available (i.e., tiled data is not paged in): the function sets the dataAvailable flag and the return value to false. Other output data is undefined.
  • No surfaces are found, and the terrain database has a global sea level: This case should not come up, as a water surface is synthesized to correspond to the global sea level, and thus a water surface should be found. However, if it comes up, the topSurfaceMedium is set to be water, with waterHeight at the global sea level. A surface is synthesized for the sea floor at a default depth under the water height. If the database has a global ocean depth, that is used; otherwise, the default depth is 500m.
  • No surfaces are found, and the terrain database does NOT have a global sea level: The topSurfaceMedium is set to be water, with waterHeight at an altitude of 0; the sea floor is synthesized at the default depth (database global depth or default of 500m).
  • Only one surface is found, of medium type "unspecified": The altitude of this surface is returned in waterHeight, but the topSurfaceMedium is left as "unspecified;" the calling code must decide whether to interpret this as actual water, or as ground. A sea floor surface is synthesized at the default depth under the unspecified surface.
    Note that this case should only come up if there is no global sea level in the terrain database.
  • Ground surface found on top: This is returned as the ground level. Any surfaces below this one are ignored.
  • Only one surface is found, of type "water surface": This surface determines the waterHeight, and a default depth is used to generate a sea floor ground surface.
  • Water surface found on top, with other surfaces below: The top surface type is set to water, and waterHeight is determined by the top surface. For other surfaces:
    1) If another water surface is found, it is ignored.
    2) If a ground surface is found, it determines the groundSurface, and all lower surfaces are ignored. If no ground surfaces are present, then treat this case the same as a single water surface (above).
    3) If an unspecified surface is found, then treat as water or ground according to mediumForUnspecPolygonsUnderWater(). This function is Ground by default, which is appropriate when the surface is supposed to represent sea floor when it is under sea level (i.e., a global sea level).
    Note that if the terrain database has a global sea level, then it is not possible for it to represent [dry] ground or water that is below sea level, since the global sea level is always represented by an implied water surface.
  • "Unspecified" surface found on top, with other surfaces below:
    1) if a ground surface is found under it, the unspecified surface is assumed to be water;
    2) if an unspecified surface is found under it, the top one is assumed to be water and the bottom one ground;
    3) if a water surface is found, then the top surface is usually interpreted to be ground. However, the unspecified surface may be interpreted as water and ignored in one special case. Some terrain databases may use unspecified polygons to represent the sea surface (vs. the sea floor), in addition to specifying a global sea level. For these databases, mediumForUnspecPolygonsUnderWater should be made to return Water Surface. Because these polygons are flat approximations to the earth's surface, their corners may stick up above the global sea level. To prevent these corners from being interpreted as land, they will be interpreted as water if they are less than a threshold (1.0m) above a water surface. So, unspecified polygons above water are interpreted as water if mediumFor...() is Water Surface and the height above the water is < 1.0m.
Parameters
databaseLocationThe only input to the function; the location to be tested, in database coordinates.
groundHeightThe altitude of the ground at the location, either under a water surface or as the top surface.
groundSurfaceThe surface (structure) of the ground (either the top surface if it is ground, or the sea bottom if the top is water).
waterHeightThe altitude of the water surface at the location. NOT VALID IF TOP SURFACE IS GROUND.
topSurfaceMediumThe medium (see surface.h) of the top surface. This returns one of three values: Ground, WaterSurface, or UnspecifiedMedium. If Ground, then the waterHeight parameter is not meaningful. Ground is returned if the medium is Ground, Above Ground, Below Ground, Above Water, or Under Water. If UnspecifiedMedium, then the calling code can interpret this as it needs to. For example, if this function finds only an unspecified surface, it will return its height in waterHeight as if it were water, and synthesize a bottom surface for groundHeight. The calling code could choose to treat the unspecified surface as ground though. Note that the algorithm treats a surface as Unspecified if the soil type is Unspecified, no medium bits are set, or the medium water-surface bit is set AND some other medium bit is set.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the terrain data is not yet paged in, dataAvailable will be set to false.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the data availability
Return values
trueAll source terrain was available, so the output parameter values are valid. Note that the query may be outside the region of source data, but the function will still return true, with default values in the parameters.
falseIf some source data for the location was not yet available, i.e. not paged in.
virtual bool DtTerrainInterface::terrainHeightUnderWaterDebug ( const DtVector databaseLocation,
double groundHeight,
DtSurface groundSurface,
DtVector groundNormal,
double waterHeight,
DtSurface::DtMedium topSurfaceMedium,
bool  debug,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
)
virtual

Performs the computations for terrainHeightUnderWater.

If debug is true, dumps information about the surfaces it finds to the Warn simulation console.

virtual bool DtTerrainInterface::closestIntersection ( const DtVector localLocation,
DtPoint intersectionPoint,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
bool  doNotAddDefaultRecord = false,
int  flags = 0 
) const
virtual

Similar to the terrainHeight functions above.

Function to determine the closest intersection to a specified location, either in local (DB) coordinates or in lat/lon. The closest intersection is defined as the closest intersection in the down or up direction from location. Thus if there are multiple terrain levels, it will not necessarily return an intersection with the topmost as the terrainHeight functions do.

Note
Unlike the terrainHeight functions, if the vectorNetworkRecord and vectorNetworkIntersectionRecord are non-NULL, it will compute an intersection with the vector network and return the best intersection as defined by the metrics in the vectorNetworkRecord.

Return Values: True if any intersection, vector data or terrain, is found. If a vector data intersection is found, then the vecNetworkIntersectionRecord is set appropriately. If at least one terrain intersection is found, the intersectionPoint parameter is set to the closest intersection point.

Parameters
Input
localLocationthe location to test
Output
intersectionPointthe point of intersection, left unchanged if dataAvailable is set to false.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, intersectionPoint will not be modified and false will be returned.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
doNotAddDefaultRecordthe closest intersection, when all else fails, will add a default record at the location. Set this flag to true to not add a record and return false
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
truea terrain intersection was found
falseif dataAvailable was specified and returns true, then the database does not have an intersection at localLocation. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::closestIntersection ( double  lat,
double  lon,
DtPoint intersectionPoint,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
bool  doNotAddDefaultRecord = false,
int  flags = 0 
) const
virtual

Same as above function, but accepts location in lat/lon.

Parameters
Input
latthe latitude to test
lonthe longitude to test
Output
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, intersectionPoint will not be modified and false will be returned.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
Returns
result of the terrain intersection or data availability
Return values
truea terrain intersection was found
falseif dataAvailable was specified and returns true, then the database does not have an intersection at localLocation. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::closestIntersection ( const DtVector localLocation,
DtVrfChordIntersectionRecord record,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
bool  doNotAddDefaultRecord = false,
int  flags = 0 
) const
virtual

Same as above function, but returns the entire intersection record, and not just the intersection point.

Parameters
Input
localLocationthe location to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Output
recordthe result of the terrain intersection
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, record will not be modified and false will be returned.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
doNotAddDefaultRecordthe closest intersection, when all else fails, will add a default record at the location. Set this flag to true to not add a record and return false
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
truea terrain intersection was found
falseif dataAvailable was specified and returns true, then the database does not have an intersection at localLocation. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::closestIntersection ( double  lat,
double  lon,
DtVrfChordIntersectionRecord record,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
bool  doNotAddDefaultRecord = false,
int  flags = 0 
) const
virtual

Same as above function, but accepts location in lat/lon.

Parameters
Input
latthe latitude to test
lonthe longitude to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Output
recordthe result of the terrain intersection
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, intersectionPoint will not be modified and false will be returned.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
doNotAddDefaultRecordthe closest intersection, when all else fails, will add a default record at the location. Set this flag to true to not add a record and return false
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
truea terrain intersection was found
falseif dataAvailable was specified and returns true, then the database does not have an intersection at localLocation. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::closestIntersection ( const std::list< DtVector > &  localLocationList,
DtVrfChordIntersectRecordList recordList,
int numIntersections,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
bool  doNotAddDefaultRecord = false,
int  flags = 0 
) const
virtual

Returns complete intersection information about the closest terrain intersection point for each location in the list in Database Coordinates.

Parameters
Input
localLocationListlist of locations to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Output
recordLista DtVrfChordIntersectionRecordList (one record for each localLocation).
numIntersectionsset to the number of intersections that occur for the list of locations.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, recordList will not represent any intersections and numIntersections will be set to 0.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
doNotAddDefaultRecordthe closest intersection, when all else fails, will add a default record at the location. Set this flag to true to not add a record and return false
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
trueany chord intersects the terrain
falseif dataAvailable was specified and returns true, then none of the chords intersect the terrain. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::intersect ( const DtChord chord,
DtPoint intersectionPoint,
double intersectionTime,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Calculates the first terrain intersection point along a chord given in Database Coordinates.

Parameters
Input
chordthe chord to test
Output
intersectionPointlocation of the intersection or left unchanged if there's no intersection or the data is not yet available (see dataAvailable).
intersectionTimetime of the intersection along the input chord or left unchanged if there's no intersection or the data is not yet available (see dataAvailable).
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, and intersectionPoint and intersectionTime will be left unchanged.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
trueif the chord intersects the terrain
falseif dataAvailable was specified and returns true, then the chord does not intersect the terrain. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::intersect ( const DtChord chord,
DtVrfChordIntersectionRecord record,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Returns complete intersection information about the first terrain intersection point along a chord given in Database Coordinates.

The irtFlag value specifies which data should be calculated and returned for each intersection point.

Parameters
Input
chordthe chord to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Output
recordthe result of the terrain intersection. Not filled in if dataAvailable is false, unless the chord hit global water, in which case it will contain water surface data.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, record will not reflect any terrain intersections (except possibly global water).
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
true&ndash;if the chord intersects the terrain. The function will return true if dataAvailable is false but the chord hits global water.
false&ndash;if dataAvailable was specified and returns true, then a false return means that the chord does not intersect any terrain. If dataAvailable is false, then a false value just confirms that no terrain data was available.
virtual bool DtTerrainInterface::allIntersectsAlongChord ( const DtChord chord,
DtVrfChordIntersectRecordList intList,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Computes the list of all intersections of a chord (in Database Coordinates) with the terrain database.

Parameters
Input
chordthe chord to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Note
that passing an irtFlag value of INT_EXISTS will probably never return more than one intersection.
Parameters
Output
intListthe result of the terrain intersection
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false and intList will not reflect any terrain intersections
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
trueif the chord intersects the terrain
falseif dataAvailable was specified and returns true, then the chord does not intersect the terrain. Otherwise false indicates that the data is not yet available.
virtual bool DtTerrainInterface::allIntersectsAlongChordDebug ( const DtChord chord,
DtVrfChordIntersectRecordList intList,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Same as allIntersectsAlongChord, but prints debug info about all surfaces found.

Prints to sim console at "warn" notify level. Always gets all data from intersections.

virtual bool DtTerrainInterface::intersectList ( const std::list< DtChord > &  chordList,
DtVrfChordIntersectRecordList recordList,
int numTerrainIntersections,
DtIntersectionRecord::DtIntersectionType  irtFlag = DtIntersectionRecord::INT_ALL_DATA,
bool dataAvailable = 0,
bool  overrideBlockingAssert = false,
int  flags = 0 
) const
virtual

Returns complete intersection information about the first terrain intersection points along each of a list of DtChords given in Database Coordinates.

The returned record list is a DtVrfChordIntersectionRecordList (one record for each chord).

Parameters
Input
chordListthe chords to test
irtFlagspecifies which data should be calculated and returned for each intersection point
Output
numTerrainIntersectionsnumber of chords that intersected with the terrain
numVectorNetworkIntersectionsnumber of chords that intersected with the vector network
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false, numTerrainIntersections and numVectorNetworkIntersections will be set to zero and the recordList will not reflect any intersections.
overrideBlockingAssertwhen set to true this parameter will prevent an assertion from being thrown when the terrain implementation has myAssertOnBlockingTerrainCalls set to true. This should only be done when the call is being made from outside the main simulation thread and a blocking call would not cause a a problem.
flagsoptional flags to pass into the intersector. The flags are implementation dependent
Returns
result of the terrain intersection or data availability
Return values
trueif any chord intersected the terrain (or vector network if specified)
falseif dataAvailable was specified and returns true, then the chord does not intersect the terrain. Otherwise false indicates that the data is not yet available.
virtual void DtTerrainInterface::preloadTerrainAreas ( const DtTerrainPagingGeometryList preloadGeometry)
virtual

Specifies a list of terrain areas that should be preloaded by the terrain implementation, in the case of a paging or streaming terrain source.

The typical use of this is to specify parts of the terrain that are expected to be needed in the near future.

The terrain may not be loaded immediately upon making this call, and there is no guarantee that the terrain areas will be available for intersection immediately after making this call.

Parameters
preloadGeometryA list of the geometric areas that should be preloaded. They can be specified using any of the subclasses of DtTerrainPagingGeometry.
Note
The geometry set with this call completely replaces any geometry previously set using this call.
This call may be a noop depending on what type of terrain is loaded.
virtual void DtTerrainInterface::forceLoadTerrainAreas ( const DtTerrainPagingGeometryList forceLoadGeometry)
virtual

Functions like preloadTerrainAreas except the geometries are saved and will be kept loaded.

Use this function when you want to pin terrain areas in memory. Only the set of geometries from the last call to this function will be saved. This command is not thread safe.

virtual bool DtTerrainInterface::dataAvailable ( const DtTerrainPagingGeometryList geometry)
virtual

Returns true if all of the terrain which intersects the geometry list is paged in.

virtual const DtTerrainCapabilities* DtTerrainInterface::terrainCapabilities ( ) const
virtual
Returns
A class which describes the capabilities of the currently loaded terrain. This provides a guide on particular features of the terrain implementation that are supported or not supported, and should guide the user of the DtTerrainInterface API when interacting with this terrain. If no terrain is loaded, this will return a null pointer.
virtual bool DtTerrainInterface::addTerrainPassThroughLayer ( const DtString layerType)
virtual

Adds a pass though layer registered with the specified type to the currently loaded terrain implementation.

This is typically a debugging or analysis activity.

virtual void DtTerrainInterface::setAssertOnBlockingTerrainCalls ( bool  assertBlock)
virtual

Determines if an exception should be thrown if a blocking terrain call is made.

This can help to track down blocking terrain calls which are causing problems with a running simulation. Note that calling the blocking form of any terrain intersection function will cause an assertion; it is not necessary for the call to actually block and even non-paging implementations will assert. This is done to make it easier to find potential problems regardless of the particular terrain or location being used.

virtual bool DtTerrainInterface::assertOnBlockingTerrainCalls ( ) const
virtual
virtual void DtTerrainInterface::setWarnOnBlockingTerrainCalls ( bool  warnBlock)
virtual

Determines if a warning should be printed out if a blocking terrain call is made.

virtual bool DtTerrainInterface::warnOnBlockingTerrainCalls ( ) const
virtual
virtual void DtTerrainInterface::setIntersectDataLoadExpireTime ( const double expireTime)
virtual

Set the default expiration time for data load requests generated by intersect calls that require data that has not been loaded (paged-in).

Parameters
expireTimeThe expiration time to be assigned to data load requests generated by intersect calls on the terrain implementation.
virtual void DtTerrainInterface::expireDataLoadRequestsBeforeTime ( const double currentTime)
virtual
virtual void DtTerrainInterface::trianglesInArea ( DtTriangleCallbackFcn  func,
DtTriangleCallbackFinalizeFcn  finalize,
DtTerrainProcessPolygonsBox box,
void *  usr 
) const
virtual

Calls the function in the first argument on each triangle in the area specified by the box.

Once all of the triangles have been processed, it calls the finalize function to signify it has completed.

Parameters
funcFunction that will handle a single terrain triangle
finalizeFunction that will handle when this function is completed
boxThe area (in local coordinates) in which to get terrain triangles from
usrThe object that owns both the first and second argument of this function
Note
This may return additional triangles that are outside the specified box.
This will force paging in of all terrain within the box, which may take a significant amount of time and may also consume large amounts of memory.
virtual void DtTerrainInterface::trianglesInArea ( DtTriangleOutputInterface func,
DtTerrainProcessPolygonsBox box 
) const
virtual

Calls the object in the first argument on each triangle in the area specified by the box.

Once all of the triangles have been processed, it calls the finalize function to signify it has completed.

Parameters
funcUser supplied interface to triangle output.
boxThe area (in local coordinates) in which to get terrain triangles from
Note
This may return additional triangles that are outside the specified box.
virtual boost::shared_ptr<DtAsyncJobMapEntry> DtTerrainInterface::makePathAsync ( const DtPoint localStart,
const DtPoint localDestination,
const std::string &  type,
const double maxSearchRadius,
const double startProximityThreshold,
const DtAStarGraph::DtWeightFactorsList weightFactors = DtAStarGraph::DtWeightFactorsList() 
)
virtual

Register asynchronous path finding task.

Once token's status is "complete", result can be used. See makePath.

virtual DtAStarGraph::Path DtTerrainInterface::makePath ( const DtPoint localStart,
const DtPoint localDestination,
const std::string &  type,
const double maxSearchRadius,
const double startProximityThreshold,
boost::function< bool()>  cancelCheck,
const DtAStarGraph::DtWeightFactorsList weightFactors = DtAStarGraph::DtWeightFactorsList() 
) const
virtual

Make a path from start to destination on features configured using the provided type.

See appData/settings/featureconfig.txt for types. Note that this function may take a long time to return. To calculate a path in another thread see makePathAsync. Do not call this function in the main thread.

Parameters
localStartStart point in local
localDestinationDestination point in local
typeType of features to path plan on, for example "MAK_ROAD"
maxSearchradiusA vertex more than this distance from the destination will not cause more feature data to be paged in.
cancelCheckA function that returns true when the task should be canceled.
weightFactorsList of modifications to edge weights based on DtQueries
virtual bool DtTerrainInterface::onPathFeature ( const DtPoint location,
const DtString type,
double  buffer = 0.5 
)
virtual

returns whether the given point is within "offset" distance of any edge on the path graph.

virtual DtAStarGraph::Ptr DtTerrainInterface::pathFinder ( const std::string &  ) const
virtual

Return the DtAStarGraph object for the given feature type.

virtual boost::shared_ptr<DtAsyncJobMapEntry> DtTerrainInterface::addAsyncJob ( DtAsyncJob job)
virtual

Add an user defined async job type to the job queue.

Parameters
jobPointer to job object, should be initialized with operator new (tbb::task::allocate_root()).
MAKVRinTerra::DtProj::CPtr DtTerrainInterface::localProj ( ) const

Returns the local DtProj object for the current terrain.

MAKVRinTerra::DtFeaturesDebugger& DtTerrainInterface::debugger ( ) const
MAKVRinTerra::DtQuery DtTerrainInterface::findQuery ( const std::string &  name) const
const double DtTerrainInterface::topoDistance ( const DtPoint start,
const DtPoint end,
const MAKVRinTerra::DtProj localProj 
)
MAKVRinTerra::DtClosestPathFeatureFinder DtTerrainInterface::closestFeatureOnNetwork ( const std::string &  type,
const DtPoint startingLocation,
const double searchRadius,
bool dataAvailable = NULL 
)

Finds the closest feature on the feature network to startingLocation.

Returns false if no features are found.

Parameters
startingLocationlocation in local to which the closest feature on the feature network is found.
searchRadiusThe radius used to load in features
dataAvailableIf NULL, function will block for up to 20 seconds, and return false if the data is not loaded. Otherwise, being feature loading, but do not block. If the features are not fully loaded, it will find the closest feature using whichever features are loaded.
void DtTerrainInterface::breakUpChord ( const MAKVRinTerra::DtProj ,
const DtChord chord,
std::vector< DtChord > &  chords 
) const
void DtTerrainInterface::breakUpChord ( const DtChord chord,
std::vector< DtChord > &  chords 
) const
virtual DtTerrainGeometryHandle* DtTerrainInterface::createEntityGeometry ( const DtFilename &  file)
virtual

Create geometry in the terrain which represents the entity.

virtual DtDynamicTerrainRequestHandle DtTerrainInterface::addDynamicTerrainChangeRequest ( double  time,
const std::map< DtString, DtString > &  keyValueChanges,
const DtVector centerLocation,
double  radius 
)
virtual

Add a dynamic terrain change request defined by a spherical geometry to the system.

Parameters
timeTime at which this request takes place.
keyValueChangesKey/value pairs that define what changes should be made.
centerLocationCenter, in local coordinates, of the spherical area being changed.
radiusRadius of the spherical area being changed.
Return values
Handleobject for removing this request.
virtual DtDynamicTerrainRequestHandle DtTerrainInterface::addDynamicTerrainChangeRequest ( double  time,
const std::map< DtString, DtString > &  keyValueChanges,
const std::list< DtVector > &  vertices,
double  width 
)
virtual

Add a dynamic terrain change request defined by a linear geometry to the system.

Parameters
timeTime at which this request takes place.
keyValueChangesKey/value pairs that define what changes should be made.
verticesVertices of the line, in local coordinates.
widthWidth of the line.
Return values
Handleobject for removing this request.
virtual DtDynamicTerrainRequestHandle DtTerrainInterface::addDynamicTerrainChangeRequest ( double  time,
const std::map< DtString, DtString > &  keyValueChanges,
const std::list< DtVector > &  vertices 
)
virtual

Add a dynamic terrain change request defined by a polygonal geometry to the system.

Parameters
timeTime at which this request takes place.
keyValueChangesKey/value pairs that define what changes should be made.
verticesVertices of the closed area, in local coordinates.
Return values
Handleobject for removing this request.
virtual DtDynamicTerrainRequestHandle DtTerrainInterface::addDynamicTerrainChangeRequest ( double  time,
makVrv::DtDynamicTerrainChange command 
)
virtual

Add a dynamic terrain change request to the system.

Parameters
timeTime at which this request takes place.
commandCommand which describes this change. Takes ownership.
geometryOnly change features which match this geometry. Takes ownership.
Return values
Handleobject for removing this request.
virtual void DtTerrainInterface::dynamicTerrainFeaturesInArea ( const DtVector centerLocation,
double  radius,
std::list< DtRwDynamicTerrainInformation > &  dynamicTerrainInfo,
bool dataAvailable = NULL,
const DtString filterKey = DtString::nullString() 
)
virtual

Gets the list of all dynamic terrain features and potential values in the given spherical geometry.

Parameters
centerLocationCenter, in local coordinates, of the spherical area being queried.
radiusRadius of the spherical area being queried.
dynamicTerrainInfoThe result of this query, a list of potential dynamic terrain changes in the designated area.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false and dynamicTerrainInfo will not reflect any terrain intersections
filterKeyIf not empty, specifies a specific key of interest. Only dynamic terrain changes with this key will be returned.
virtual void DtTerrainInterface::dynamicTerrainFeaturesInArea ( const std::list< DtVector > &  vertices,
double  width,
std::list< DtRwDynamicTerrainInformation > &  dynamicTerrainInfo,
bool dataAvailable = NULL,
const DtString filterKey = DtString::nullString() 
)
virtual

Gets the list of all dynamic terrain features and potential values in the given linear geometry.

Parameters
verticesVertices of the line, in local coordinates.
widthWidth of the line.
dynamicTerrainInfoThe result of this query, a list of potential dynamic terrain changes in the designated area.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false and dynamicTerrainInfo will not reflect any terrain intersections
filterKeyIf not empty, specifies a specific key of interest. Only dynamic terrain changes with this key will be returned.
virtual void DtTerrainInterface::dynamicTerrainFeaturesInArea ( const std::list< DtVector > &  vertices,
std::list< DtRwDynamicTerrainInformation > &  dynamicTerrainInfo,
bool dataAvailable = NULL,
const DtString filterKey = DtString::nullString() 
)
virtual

Gets the list of all dynamic terrain features and potential values in the given polygonal geometry.

Parameters
verticesVertices of the closed area, in local coordinates.
dynamicTerrainInfoThe result of this query, a list of potential dynamic terrain changes in the designated area.
dataAvailablePlease see Synchronous and Asynchronous Calls with Paged Terrains for information on how to specify that this function be blocking or non-blocking. If the data is not yet paged in, dataAvailable will be set to false and dynamicTerrainInfo will not reflect any terrain intersections
filterKeyIf not empty, specifies a specific key of interest. Only dynamic terrain changes with this key will be returned.
virtual bool DtTerrainInterface::extractDynamicTerrainFeatureInformation ( const makVrv::DtDynamicTerrainFeature feature,
DtRwDynamicTerrainInformation dynamicTerrainInfo,
const DtString filterKey = DtString::nullString() 
) const
virtual

Extracts information out of a makVrv::DtDynamicTerrainFeature and stores in DtRwDynamicTerrainInformation.

Parameters
featureThe dynamic terrain feature whose information we want to extract.
dynamicTerrainInfoThe result of this operation, extracted information about this feature.
filterKeyIf not empty, specifies a specific key of interest. Only if the dynamic terrain feature contains this key will be it processed.
Return values
Trueif the information was successfully extracted, false if the operation failed or the feature did not contain the filterKey.
virtual DtDynamicTerrainQueryHandle DtTerrainInterface::queryDynamicTerrainFeatures ( const DtDynamicTerrainQueryCallback callback,
makVrv::DtDynamicTerrainGeometry geometry = 0,
bool  useOriginalGeometry = false 
)
virtual

Install a query which will call the supplied callback on matching dynamic terrain features as they are paged in.

Callbacks can then be installed on the feature itself to monitor it for changes and page out.

virtual void DtTerrainInterface::queryCurrentDynamicTerrainFeatures ( const DtDynamicTerrainQueryCallback callback,
makVrv::DtDynamicTerrainGeometry geometry = 0,
bool  useOriginalGeometry = false 
)
virtual
virtual void DtTerrainInterface::cacheInformationForTerrainArea ( unsigned  minLOD,
unsigned  maxLOD,
const DtExtent cacheArea,
double estimatedTime,
double estimatedSize,
std::vector< std::string > &  elevationLayers,
std::vector< std::string > &  modelLayers,
std::vector< std::string > &  featureLayers 
) const
virtual

Returns information about what terrain data the sim can cache.

virtual void DtTerrainInterface::cacheTerrainArea ( int  requestId,
unsigned  minLOD,
unsigned  maxLOD,
const DtExtent cacheArea,
DtCacheProgressCallbackFunction  fcn = 0,
void *  usr = 0 
)
virtual

Call this to start the process of caching terain data (if supported for the open terrain) using the given request id and extent.

Note that the extent coordinates are in lat/lon degrees (not radians). The callback is given to give progress on the load

virtual void DtTerrainInterface::cancelCacheTerrainArea ( int  requestId)
virtual

Call this routine to cancel a potential cache in progress.

virtual bool DtTerrainInterface::oceanLayerPresent ( ) const
virtual

Returns whether or not an ocean layer is present in this terrain.

virtual void DtTerrainInterface::setOceanLayerPresent ( bool  b)
virtual

Sets whether or not the ocean layer is present in this terrain.

virtual bool DtTerrainInterface::nonPolygonalWaterHeight ( const DtChord localLocation,
double height 
) const
virtual

Function to return the water level defined for water regions that aren't defined with surface water polygons.

If this database has water defined this way, terrainCapabilities()->hasNonPolygonalWaterRegions() will return true.

Parameters
localLocationLocation of intersection.
HeightThe height of the water is returned in the height parameter.
Returns
Boolean indicating the success of the request.
Return values
TrueIf there is non-polygonal water at this location.
FalseIf there is no non-polygonal water at this location.
virtual void DtTerrainInterface::setNonPolygonalWaterHeight ( double  d)
virtual

Sets the non polygonal water height to use as referenced in nonPolygonalWaterHeight.

virtual double DtTerrainInterface::defaultWaterDepth ( const DtVector localLocation) const
virtual

Defines the default water depth when floor and surface levels are not defined in the database.

The location argument is provided for future extension.

virtual void DtTerrainInterface::setDefaultWaterDepth ( double  )
virtual

Sets the default water depth.

virtual double DtTerrainInterface::defaultSurfaceElevation ( const DtVector localLocation) const
virtual

Defines the elevation of the terrain surface when there is no data.

The location argument is provided for future extension. This returns seaLevel (as in nonPolygonalWaterHeight). Override this method to return a different value.

virtual DtSurface::DtMedium DtTerrainInterface::mediumForUnspecPolygonsUnderWater ( ) const
virtual

Defines what to do in terrainHeightUnderWater when a polygon with medium "unspecified" is encountered below a water surface.

If a database uses "unspecified" for all ground and water surfaces, then it is appropriate for this function to return WaterSurface. I.e. the unspecified polygons below non-poly water are redundant and ignored. (Unspecified polygons above water are still treated as ground; "above" means landAboveWaterMinimumSeparation() above the water surface.)

However, if a database uses "unspecified" for ground polygons, including the sea floor, then this function should return a Ground, signifying that the unspecified polygons below water are ground.

Returns
Ground or WaterSurface.
virtual void DtTerrainInterface::setMediumForUnspecPolygonsUnderWater ( DtSurface::DtMedium  m)
virtual

Sets the medium for mediumForUnspecPolygonsUnderWater.

virtual double DtTerrainInterface::landAboveWaterMinimumSeparation ( ) const
virtual

This function returns a constant threshold value that determines how far an unspecified-medium polygon has to be above a water surface for it to be considered above-sea-level land.

If the unspecified polygon is below this threshold, it is considered "below" and will be classified according to mediumForUnspecPolygonsUnderWater().

This value could be very tiny, but on a curved-earth terrain with unspecified-medium polygons being used (redundantly) as the sea surface, e.g. alongside non-polygonal sea-level data, the polygons will be tangent to the curved earth and may stick up above sea level at their edges.

virtual void DtTerrainInterface::setLandAboveWaterMinimumSeparation ( double  )
virtual
void DtTerrainInterface::insertNonPolyWaterIntoIntersectionList ( DtVrfChordIntersectionRecord waterInterx,
DtVrfChordIntersectRecordList intrxList 
) const
protected

Insert the given intersection record into the intersection list based on intersection time order.

virtual DtVrfChordIntersectionRecord DtTerrainInterface::blankSurfaceIntersectionRecord ( const DtVector localLocation,
const double  height 
) const
protectedvirtual

Creates a chord intersection record corresponding to a surface with unspecified soil type (and medium).

This is used in terrainHeightAndIntersection and closestIntersection. The surface intersection is set at a point on a vertical line through the localLocation, at the given altitude. The normal of the surface is set to point up. The "time" in the intersection record is set to 0.5.

virtual bool DtTerrainInterface::nonPolygonalWaterIntersect ( const DtChord chord,
DtVrfChordIntersectRecordList waterRecords 
) const
protectedvirtual

If there is non-polygonal water, this function computes the intersection records for the chord with this water.

The chord is in local (database) coordinates.

Returns
True if there was an intersection with non-poly water.

Member Data Documentation

DtFilename DtTerrainInterface::myTerrainOptionsFilename
protected

Default config loaded in init Loading terrains will have a copy of this and may set their own specific values internally, and these will be active for the duration it is loaded.

A new terrain would use the original values in these variables though.

DtTerrainInterfaceConfig DtTerrainInterface::myFileConfig
protected
FeatureSetList DtTerrainInterface::myFeatureLayers
protected
DtTerrainImplementation* DtTerrainInterface::myTerrainImpl
protected
bool DtTerrainInterface::myTerrainIsLoaded
protected

Status publisher needs to keep track of when terrain is loaded and unloaded.

DtTerrainImplementationManager* DtTerrainInterface::myTerrainImplManager
protected
DtConsoleCommandManager* DtTerrainInterface::myConsoleCommandManager
protected
DtString DtTerrainInterface::myLoadedFilename
protected

The last filename that was passed to loadTerrain()

DtString DtTerrainInterface::myUnresolvedFilename
protected
DtTerrainPagingGeometryList DtTerrainInterface::myForceLoadAreas
protected
double DtTerrainInterface::myLastFileTime
protected

Needed in case file is saved with same name and then reloaded.

double DtTerrainInterface::theTerrainPagingMaxHeight
staticprotected
MAKVRinTerra::DtProj::CPtr DtTerrainInterface::myProjObject
protected
DtAsyncJobServer DtTerrainInterface::myAsyncJobServer
protected

Manages asynchronous path planning tasks.

OceanLayer DtTerrainInterface::myGlobalOceanLayer
protected
std::ofstream DtTerrainInterface::myDebugOutputFile
protected
tbb::tick_count DtTerrainInterface::myLastDebugOutputTick
protected
makArchives::DtTerrainRecord* DtTerrainInterface::myTerrainRecord
protected
DtGenericTerrainRecordCallbackListMap DtTerrainInterface::myGenericTerrainRecordCallbacklists
protected

The documentation for this class was generated from the following file:

Document ID: Generated on Wed Jul 25 16:57:45 EDT 2018 from SVN revision 190790
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)