31 #include <boost/scoped_ptr.hpp>
32 #include <boost/ptr_container/ptr_list.hpp>
35 class DtTerrainImplementationDescriptor;
41 class Dt3dBoundingVolume;
45 class DtTerrainRecord;
46 class DtGenericTerrainRecord;
80 VrfSimulationBackEnd = 1,
106 virtual bool init(
bool createConsoleManager =
true);
109 virtual void setConfigFile(
const std::string&,
bool reload=
true);
118 virtual bool isSameTerrain(
const DtFilename&)
const;
121 virtual bool isHighFidelityTerrain()
const;
126 return myTerrainImpl;
131 virtual void addTerrainImplementation(
const DtString& implementationName,
136 virtual void addFeatureLayer(boost::shared_ptr<MAKVRinTerra::DtFeatureSet>);
138 virtual void addGenericTerrainRecordCallback(
143 virtual void removeGenericTerrainRecordCallback(
148 virtual void invokeGenericTerrainRecordCallbacks(
152 virtual bool loadTerrain(
const DtString& filename, LoadContext context = VrfSimulationBackEnd);
155 virtual bool unloadTerrain(
bool block =
true);
160 virtual bool loadModel(
const DtFilename& f,
const DtEntityType& t = DtEntityType());
164 virtual double modelHeightDifferencesFromAppearances(
int oldApp,
int newApp)
const;
167 virtual bool createFromExtent(
const Dt3dBoundingVolume&);
170 virtual bool terrainIsLoaded();
173 virtual DtString loadedFilename()
const;
180 virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
181 const std::string& type,
182 const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>())
const;
186 virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
188 const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>())
const;
191 virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> LOSfeatures()
const;
193 virtual std::auto_ptr<MAKVRinTerra::DtPathFeatureSet> paths(
const std::string& type)
const;
197 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> features(
198 const std::string& queryName)
const;
201 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeatures()
const;
205 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> featuresRaw(
206 const std::string& queryName)
const;
209 virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeaturesRaw()
const;
227 virtual double terrainHeightAboveSeaLevel(
const DtPoint& databaseLocation,
228 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0)
const;
253 virtual bool terrainHeightAndIntersection(
const DtVector& localLocation,
257 bool overrideBlockingAssert =
false,
int flags = 0)
const;
261 virtual bool terrainHeightAndIntersectionBelow(
const DtVector& localLocation,
265 bool overrideBlockingAssert =
false,
int flags = 0)
const;
395 virtual bool terrainHeightUnderWater(
const DtVector& databaseLocation,
398 bool* dataAvailable = 0,
bool overrideBlockingAssert =
false,
int flags = 0) ;
403 virtual bool terrainHeightUnderWaterDebug(
const DtVector& databaseLocation,
407 bool* dataAvailable =0,
bool overrideBlockingAssert =
false,
int flags = 0) ;
453 virtual bool closestIntersection(
const DtVector& localLocation,
454 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
455 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
477 virtual bool closestIntersection(
double lat,
double lon,
478 DtPoint& intersectionPoint,
bool* dataAvailable = 0,
479 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
507 virtual bool closestIntersection(
const DtVector& localLocation,
511 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
539 virtual bool closestIntersection(
double lat,
double lon,
543 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
574 virtual bool closestIntersection(
const std::list<DtVector>& localLocationList,
578 bool overrideBlockingAssert =
false,
bool doNotAddDefaultRecord =
false,
int flags = 0)
const;
607 virtual bool intersect(
const DtChord& chord,
DtPoint& intersectionPoint,
608 double& intersectionTime,
bool* dataAvailable = 0,
609 bool overrideBlockingAssert =
false,
int flags = 0)
const;
642 virtual bool intersect(
const DtChord& chord,
646 bool overrideBlockingAssert =
false,
int flags = 0)
const;
674 virtual bool allIntersectsAlongChord(
const DtChord& chord,
678 bool overrideBlockingAssert =
false,
int flags = 0)
const;
683 virtual bool allIntersectsAlongChordDebug(
const DtChord& chord,
685 bool* dataAvailable = 0,
686 bool overrideBlockingAssert =
false,
int flags = 0)
const;
719 virtual bool intersectList(
const std::list<DtChord>& chordList,
723 bool overrideBlockingAssert =
false,
int flags = 0)
const;
739 virtual void preloadTerrainAreas(
747 virtual void forceLoadTerrainAreas(
760 virtual bool addTerrainPassThroughLayer(
const DtString& layerType);
771 virtual void setAssertOnBlockingTerrainCalls(
bool assertBlock);
772 virtual bool assertOnBlockingTerrainCalls()
const;
777 virtual void setWarnOnBlockingTerrainCalls(
bool warnBlock);
778 virtual bool warnOnBlockingTerrainCalls()
const;
785 virtual void setIntersectDataLoadExpireTime(
const double& expireTime);
786 virtual void expireDataLoadRequestsBeforeTime(
const double& currentTime);
804 virtual boost::shared_ptr<DtAsyncJobMapEntry> makePathAsync(
806 const DtPoint& localDestination,
807 const std::string& type,
808 const double& maxSearchRadius,
809 const double& startProximityThreshold,
810 const DtAStarGraph::DtWeightFactorsList& weightFactors
811 = DtAStarGraph::DtWeightFactorsList());
826 virtual DtAStarGraph::Path makePath(
828 const DtPoint& localDestination,
829 const std::string& type,
830 const double& maxSearchRadius,
831 const double& startProximityThreshold,
832 boost::function<
bool ()> cancelCheck,
833 const DtAStarGraph::DtWeightFactorsList& weightFactors
834 = DtAStarGraph::DtWeightFactorsList())
const;
838 virtual bool onPathFeature(
842 virtual DtAStarGraph::Ptr pathFinder(
const std::string&)
const;
847 virtual boost::shared_ptr<DtAsyncJobMapEntry> addAsyncJob(
DtAsyncJob* job);
856 const double topoDistance(
const DtPoint& start,
const DtPoint& end,
869 const std::string& type,
const DtPoint& startingLocation,
870 const double& searchRadius,
bool* dataAvailable = NULL);
873 std::vector<DtChord>& chords)
const;
875 void breakUpChord(
const DtChord& chord, std::vector<DtChord>& chords)
const;
889 virtual bool nonPolygonalWaterHeight(
const DtVector& localLocation,
890 double& height)
const;
895 virtual double defaultWaterDepth(
const DtVector& localLocation)
const;
899 virtual double defaultSurfaceElevation(
const DtVector& localLocation)
const;
929 virtual double landAboveWaterMinimumSeparation()
const;
933 void insertNonPolyWaterIntoIntersectionList(
945 const DtVector& localLocation,
const double height)
const;
951 virtual bool nonPolygonalWaterIntersect(
const DtChord& chord,
998 typedef std::map<DtString, DtGenericTerrainRecordCallbackList>
1003 #define DtRegisterTerrainImplementationFunctionName "DtRegisterTerrainImplementation"
1010 #define DtDeregisterTerrainImplementationFunctionName "DtDeregisterTerrainImplementation"