VR-Forces 4.7 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
terrainInterface.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2013 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 
10 
11 #pragma once
12 
18 
19 #include "vrfutil/asyncJobServer.h"
23 
24 #include <features/feature.h>
25 #include <features/pathFeature.h>
26 #include <features/aStarGraph.h>
27 #include <features/areaFeature.h>
30 
31 #include <fstream>
32 
33 #include <boost/scoped_ptr.hpp>
34 #include <boost/ptr_container/ptr_list.hpp>
35 
37 class DtTerrainImplementationDescriptor;
41 class DtVrfCallbackQueue;
43 class Dt3dBoundingVolume;
44 class DtTerrainIndexParameters;
45 
46 namespace makArchives
47 {
48  class DtTerrainRecord;
49  class DtGenericTerrainRecord;
50 }
51 
53  makArchives::DtGenericTerrainRecord* record, void* userData);
54 
56 typedef boost::shared_ptr<DtGenericTerrainRecordCallbackList> DtGenericTerrainRecordCallbackListPtr;
57 
83 {
84 public:
86  {
87  VrfSimulationBackEnd = 1,
88  NavGenerationTool = 2
89  };
90 
92 
94  struct OceanLayer
95  {
98  bool present;
99  double seaLevel;
103  };
104 
105 public:
108 
110  virtual ~DtTerrainInterface();
111 
115  virtual bool init(bool createConsoleManager = true);
116 
118  virtual void setConfigFile(const std::string&, bool reload=true);
119 
121  virtual const DtTerrainInterfaceConfig& configOptions() const;
122 
124  virtual void tick();
125 
127  virtual bool isSameTerrain(const DtFilename&) const;
128 
130  DtTerrainImplementation* terrainImplementation() const
131  {
132  return myTerrainImpl;
133  }
134 
137  virtual void addTerrainImplementation(const DtString& implementationName,
139 
141  virtual void addFeatureLayer(MAKVRinTerra::DtFeatureSet*);
142  virtual void addFeatureLayer(boost::shared_ptr<MAKVRinTerra::DtFeatureSet>);
143 
144  virtual void addGenericTerrainRecordCallback(
145  const DtString& recordType,
147  void* user);
148 
149  virtual void removeGenericTerrainRecordCallback(
150  const DtString& recordType,
152  void* user);
153 
154  virtual void invokeGenericTerrainRecordCallbacks(
156 
158  virtual bool loadTerrain(const DtString& filename, LoadContext context = VrfSimulationBackEnd);
159 
161  virtual bool unloadTerrain(bool block = true);
162 
167  virtual bool loadModel(const DtFilename& f, const DtEntityType& t = DtEntityType(), bool hasOceanLayer = true);
168 
171  virtual double modelHeightDifferencesFromAppearances(int oldApp, int newApp) const;
172 
174  virtual bool terrainIsLoaded();
177  virtual DtString loadedFilename() const;
178 
179  virtual const Coordinate_System* coordinateSystem() const;
180  virtual Coordinate_System* coordinateSystem();
181 
184  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
185  const std::string& type,
186  const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>()) const;
187 
190  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
192  const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>()) const;
193 
195  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> LOSfeatures() const;
196 
197  virtual std::auto_ptr<MAKVRinTerra::DtPathFeatureSet> paths(const std::string& type) const;
198 
201  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> features(
202  const std::string& queryName) const;
203 
205  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeatures() const;
206 
209  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> featuresRaw(
210  const std::string& queryName) const;
211 
213  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeaturesRaw() const;
214 
234  virtual double terrainHeightAboveSeaLevel(const DtPoint& databaseLocation,
235  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
236 
237  virtual double terrainHeightAboveSeaLevel(DtTerrainIntersectStatus& status,
238  const DtPoint& databaseLocation,
239  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
241 
268  virtual bool terrainHeightAndIntersection(const DtVector& localLocation,
269  double& height, DtVrfChordIntersectionRecord& record,
271  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
272 
273  virtual bool terrainHeightAndIntersection(DtTerrainIntersectStatus& status,
274  const DtVector& localLocation,
275  double& height, DtVrfChordIntersectionRecord& record,
276  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
278 
282  virtual bool terrainHeightAndIntersectionBelow(const DtVector& localLocation,
283  double& height, DtVrfChordIntersectionRecord& record,
285  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
286 
287  virtual bool terrainHeightAndIntersectionBelow(DtTerrainIntersectStatus& status,
288  const DtVector& localLocation,
289  double& height, DtVrfChordIntersectionRecord& record,
290  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
292 
423  virtual bool terrainHeightUnderWater(const DtVector& databaseLocation,
424  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
425  double& waterHeight, DtSurface::DtMedium &topSurfaceMedium,
426  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) ;
427 
428  virtual bool terrainHeightUnderWater(DtTerrainIntersectStatus& status,
429  const DtVector& databaseLocation,
430  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
431  double& waterHeight, DtSurface::DtMedium &topSurfaceMedium,
434 
481  virtual bool closestIntersection(const DtVector& localLocation,
482  DtPoint& intersectionPoint, bool* dataAvailable = 0,
483  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
484 
485  virtual bool closestIntersection(DtTerrainIntersectStatus& status,
486  const DtVector& localLocation, DtPoint& intersectionPoint,
487  bool doNotAddDefaultRecord = false,
488  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
490 
513  virtual bool closestIntersection(double lat, double lon,
514  DtPoint& intersectionPoint, bool* dataAvailable = 0,
515  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
516 
517  virtual bool closestIntersection(DtTerrainIntersectStatus& status,
518  double lat, double lon,
519  DtPoint& intersectionPoint,
520  bool doNotAddDefaultRecord = false,
521  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
523 
553  virtual bool closestIntersection(const DtVector& localLocation,
556  bool* dataAvailable = 0, bool overrideBlockingAssert = false,
557  bool doNotAddDefaultRecord = false, int flags = 0) const;
558 
559  virtual bool closestIntersection(DtTerrainIntersectStatus& status,
560  const DtVector& localLocation,
562  bool doNotAddDefaultRecord = false,
563  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
565 
595  virtual bool closestIntersection(double lat, double lon,
598  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
599  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
600 
601  virtual bool closestIntersection(DtTerrainIntersectStatus& status,
602  double lat, double lon,
604  bool doNotAddDefaultRecord = false,
605  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
607 
640  virtual bool closestIntersection(const std::list<DtVector>& localLocationList,
641  DtVrfChordIntersectRecordList& recordList, int& numIntersections,
643  bool* dataAvailable = 0, bool overrideBlockingAssert = false,
644  bool doNotAddDefaultRecord = false, int flags = 0) const;
645 
646  virtual bool closestIntersection(DtTerrainIntersectStatus& status,
647  const std::list<DtVector>& localLocationList,
648  DtVrfChordIntersectRecordList& recordList, int& numIntersections,
649  bool doNotAddDefaultRecord = false,
650  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
652 
683  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
684  double& intersectionTime, bool* dataAvailable = 0,
685  bool overrideBlockingAssert = false, int flags = 0) const;
686 
687  virtual bool intersect(DtTerrainIntersectStatus& status,
688  const DtChord& chord, DtPoint& intersectionPoint,
689  double& intersectionTime,
690  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
692 
727  virtual bool intersect(const DtChord& chord,
730  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
731 
732  virtual bool intersect(DtTerrainIntersectStatus& status,
733  const DtChord& chord,
735  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
737 
767  virtual bool allIntersectsAlongChord(const DtChord& chord,
770  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
771 
772  virtual bool allIntersectsAlongChord(DtTerrainIntersectStatus& status,
773  const DtChord& chord,
775  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
777 
782  virtual bool allIntersectsAlongChordDebug(const DtChord& chord,
784  bool* dataAvailable = 0,
785  bool overrideBlockingAssert = false, int flags = 0) const;
786 
787  virtual bool allIntersectsAlongChordDebug(DtTerrainIntersectStatus& status,
788  const DtChord& chord,
790  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
792 
827  virtual bool intersectList(const std::list<DtChord>& chordList,
828  DtVrfChordIntersectRecordList& recordList, int& numTerrainIntersections,
830  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
831 
832  virtual bool intersectList(DtTerrainIntersectStatus& status,
833  const std::list<DtChord>& chordList,
834  DtVrfChordIntersectRecordList& recordList, int& numTerrainIntersections,
835  const DtTerrainIntersectOptions& options = DtTerrainIntersectOptions()) const;
837 
852  virtual void preloadTerrainAreas(
853  const DtTerrainPagingGeometryList& preloadGeometry);
854 
860  virtual void forceLoadTerrainAreas(
861  const DtTerrainPagingGeometryList& forceLoadGeometry);
862 
864  virtual bool dataAvailable(const DtTerrainPagingGeometryList& geometry);
865 
871  virtual const DtTerrainCapabilities* terrainCapabilities() const;
872 
876  virtual bool addTerrainPassThroughLayer(const DtString& layerType);
877 
887  virtual void setAssertOnBlockingTerrainCalls(bool assertBlock);
888  virtual bool assertOnBlockingTerrainCalls() const;
890 
893  virtual void setWarnOnBlockingTerrainCalls(bool warnBlock);
894  virtual bool warnOnBlockingTerrainCalls() const;
896 
901  virtual void setIntersectDataLoadExpireTime(const double& expireTime);
902  virtual void expireDataLoadRequestsBeforeTime(const double& currentTime);
903 
914  virtual void trianglesInArea(DtTriangleCallbackFcn func,
915  DtTriangleCallbackFinalizeFcn finalize, DtTerrainProcessPolygonsBox& box, void* usr) const;
916 
923  virtual void trianglesInArea(DtTriangleOutputInterface& func, DtTerrainProcessPolygonsBox& box) const;
924 
928  virtual boost::shared_ptr<DtAsyncJobMapEntry> makePathAsync(
929  const DtPoint& localStart,
930  const DtPoint& localDestination,
931  const std::string& type,
932  const double& maxSearchRadius,
933  const double& startProximityThreshold,
934  const DtAStarGraph::DtWeightFactorsList& weightFactors
935  = DtAStarGraph::DtWeightFactorsList());
936 
950  virtual DtAStarGraph::Path makePath(
951  const DtPoint& localStart,
952  const DtPoint& localDestination,
953  const std::string& type,
954  const double& maxSearchRadius,
955  const double& startProximityThreshold,
956  boost::function<bool ()> cancelCheck,
957  const DtAStarGraph::DtWeightFactorsList& weightFactors
958  = DtAStarGraph::DtWeightFactorsList()) const;
959 
962  virtual bool onPathFeature(
963  const DtPoint& location, const DtString& type, double buffer = 0.5);
964 
966  virtual DtAStarGraph::Ptr pathFinder(const std::string&) const;
967 
971  virtual boost::shared_ptr<DtAsyncJobMapEntry> addAsyncJob(DtAsyncJob* job);
972 
974  MAKVRinTerra::DtProj::CPtr localProj() const;
975 
976  MAKVRinTerra::DtFeaturesDebugger& debugger() const;
977 
978  MAKVRinTerra::DtQuery findQuery(const std::string& name) const;
979 
980  const double topoDistance(const DtPoint& start, const DtPoint& end,
981  const MAKVRinTerra::DtProj& localProj);
982 
992  MAKVRinTerra::DtClosestPathFeatureFinder closestFeatureOnNetwork(
993  const std::string& type, const DtPoint& startingLocation,
994  const double& searchRadius, bool* dataAvailable = NULL);
995 
996  void breakUpChord(const MAKVRinTerra::DtProj&, const DtChord& chord,
997  std::vector<DtChord>& chords) const;
998 
999  void breakUpChord(const DtChord& chord, std::vector<DtChord>& chords) const;
1000 
1002  virtual DtTerrainGeometryHandle* createEntityGeometry(const DtFilename& file);
1003 
1010  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
1011  double time,
1012  const std::map<DtString, DtString>& keyValueChanges,
1013  const DtVector& centerLocation, double radius);
1014 
1021  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
1022  double time,
1023  const std::map<DtString, DtString>& keyValueChanges,
1024  const std::list<DtVector>& vertices, double width);
1025 
1031  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
1032  double time,
1033  const std::map<DtString, DtString>& keyValueChanges,
1034  const std::list<DtVector>& vertices);
1035 
1041  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
1042  double time,
1044 
1057  virtual void dynamicTerrainFeaturesInArea(
1058  const DtVector& centerLocation, double radius,
1059  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
1060  const DtString& filterKey = DtString::nullString());
1061 
1074  virtual void dynamicTerrainFeaturesInArea(
1075  const std::list<DtVector>& vertices, double width,
1076  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
1077  const DtString& filterKey = DtString::nullString());
1078 
1090  virtual void dynamicTerrainFeaturesInArea(
1091  const std::list<DtVector>& vertices,
1092  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
1093  const DtString& filterKey = DtString::nullString());
1094 
1102  virtual bool extractDynamicTerrainFeatureInformation(const makVrv::DtDynamicTerrainFeature& feature,
1103  DtRwDynamicTerrainInformation& dynamicTerrainInfo, const DtString& filterKey = DtString::nullString()) const;
1104 
1108  virtual DtDynamicTerrainQueryHandle queryDynamicTerrainFeatures(
1109  const DtDynamicTerrainQueryCallback& callback,
1110  makVrv::DtDynamicTerrainGeometry* geometry = 0,
1111  bool useOriginalGeometry = false);
1112 
1113  virtual void queryCurrentDynamicTerrainFeatures(
1114  const DtDynamicTerrainQueryCallback& callback,
1115  makVrv::DtDynamicTerrainGeometry* geometry = 0,
1116  bool useOriginalGeometry = false);
1117 
1119  virtual void cacheInformationForTerrainArea(
1120  unsigned minLOD, unsigned maxLOD, const DtExtent& cacheArea,
1121  double& estimatedTime, double& estimatedSize,
1122  std::vector<std::string>& elevationLayers,
1123  std::vector<std::string>& modelLayers,
1124  std::vector<std::string>& featureLayers) const;
1125 
1128  virtual void cacheTerrainArea(int requestId,
1129  unsigned minLOD, unsigned maxLOD, const DtExtent& cacheArea,
1130  DtCacheProgressCallbackFunction fcn = 0, void* usr = 0);
1131 
1133  virtual void cancelCacheTerrainArea(int requestId);
1134 
1139  virtual void writeTerrainIndex(const DtString& name = DtString());
1140 
1142  virtual bool oceanLayerPresent() const;
1143 
1145  virtual void setOceanLayerPresent(bool b);
1146 
1158  virtual bool nonPolygonalWaterHeight(
1159  const DtChord& localLocation,
1160  double& height) const;
1161 
1163  virtual void setNonPolygonalWaterHeight(double d);
1164 
1168  virtual double defaultWaterDepth(const DtVector& localLocation) const;
1169 
1171  virtual void setDefaultWaterDepth(double);
1172 
1176  virtual double defaultSurfaceElevation(const DtVector& localLocation) const;
1177 
1193  virtual DtSurface::DtMedium mediumForUnspecPolygonsUnderWater() const;
1194 
1196  virtual void setMediumForUnspecPolygonsUnderWater(DtSurface::DtMedium m);
1197 
1209  virtual double landAboveWaterMinimumSeparation() const;
1210 
1212  virtual void setLandAboveWaterMinimumSeparation(double);
1213 
1214 protected:
1217  void insertNonPolyWaterIntoIntersectionList(
1218  DtVrfChordIntersectionRecord& waterInterx,
1219  DtVrfChordIntersectRecordList& intrxList) const;
1220 
1228  virtual DtVrfChordIntersectionRecord blankSurfaceIntersectionRecord(
1229  const DtVector& localLocation, const double height) const;
1230 
1235  virtual bool nonPolygonalWaterIntersect(
1236  const DtChord& chord,
1237  DtVrfChordIntersectRecordList& waterRecords,
1239 
1240  typedef std::map<DtString, DtGenericTerrainRecordCallbackListPtr >
1242 
1246  const DtString& recordType);
1247 
1248 protected:
1255 
1256  typedef boost::ptr_list<MAKVRinTerra::DtFeatureSet> FeatureSetList;
1258 
1260 
1264 
1270 
1272 
1275 
1277 
1279 
1282 
1284 
1285  std::ofstream myDebugOutputFile;
1286  tbb::tick_count myLastDebugOutputTick;
1287 
1289 
1290 
1292 
1293 
1294 };
1295 
1296 #define DtRegisterTerrainImplementationFunctionName "DtRegisterTerrainImplementation"
1297 
1301 
1302 
1303 #define DtDeregisterTerrainImplementationFunctionName "DtDeregisterTerrainImplementation"
1304 

Document ID: Generated on Fri Apr 26 21:53:14 EDT 2019 from SVN revision 197883
Copyright © 2005-2019 VT MAK. All Rights Reserved (www.mak.com)