VR-Forces 4.5 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator 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 
16 
17 #include "vrfutil/asyncJobServer.h"
21 
22 #include <features/feature.h>
23 #include <features/pathFeature.h>
24 #include <features/aStarGraph.h>
25 #include <features/areaFeature.h>
29 
30 #include <fstream>
31 
32 #include <boost/scoped_ptr.hpp>
33 #include <boost/ptr_container/ptr_list.hpp>
34 
36 class DtTerrainImplementationDescriptor;
40 class DtVrfCallbackQueue;
42 class Dt3dBoundingVolume;
43 
44 namespace makArchives
45 {
46  class DtTerrainRecord;
47  class DtGenericTerrainRecord;
48 }
49 
51  makArchives::DtGenericTerrainRecord* record, void* userData);
52 
54 
77 {
78 public:
80  {
81  VrfSimulationBackEnd = 1,
82  NavGenerationTool = 2
83  };
84 
86 
88  struct OceanLayer
89  {
92  bool present;
93  double seaLevel;
94  double defaultSeaDepth;
95  };
96 
97 public:
100 
102  virtual ~DtTerrainInterface();
103 
107  virtual bool init(bool createConsoleManager = true);
108 
110  virtual void setConfigFile(const std::string&, bool reload=true);
111 
113  virtual const DtTerrainInterfaceConfig& configOptions() const;
114 
116  virtual void tick();
117 
119  virtual bool isSameTerrain(const DtFilename&) const;
120 
122  virtual bool isHighFidelityTerrain() const;
123 
125  DtTerrainImplementation* terrainImplementation() const
126  {
127  return myTerrainImpl;
128  }
129 
132  virtual void addTerrainImplementation(const DtString& implementationName,
134 
136  virtual void addFeatureLayer(MAKVRinTerra::DtFeatureSet*);
137  virtual void addFeatureLayer(boost::shared_ptr<MAKVRinTerra::DtFeatureSet>);
138 
139  virtual void addGenericTerrainRecordCallback(
140  const DtString& recordType,
142  void* user);
143 
144  virtual void removeGenericTerrainRecordCallback(
145  const DtString& recordType,
147  void* user);
148 
149  virtual void invokeGenericTerrainRecordCallbacks(
151 
153  virtual bool loadTerrain(const DtString& filename, LoadContext context = VrfSimulationBackEnd);
154 
156  virtual bool unloadTerrain(bool block = true);
157 
162  virtual bool loadModel(const DtFilename& f, const DtEntityType& t = DtEntityType(), bool hasOceanLayer = true);
163 
166  virtual double modelHeightDifferencesFromAppearances(int oldApp, int newApp) const;
167 
169  virtual bool createFromExtent(const Dt3dBoundingVolume&);
170 
172  virtual bool terrainIsLoaded();
175  virtual DtString loadedFilename() const;
176 
177  virtual const Coordinate_System* coordinateSystem() const;
178  virtual Coordinate_System* coordinateSystem();
179 
182  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
183  const std::string& type,
184  const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>()) const;
185 
188  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
190  const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>()) const;
191 
193  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> LOSfeatures() const;
194 
195  virtual std::auto_ptr<MAKVRinTerra::DtPathFeatureSet> paths(const std::string& type) const;
196 
199  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> features(
200  const std::string& queryName) const;
201 
203  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeatures() const;
204 
207  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> featuresRaw(
208  const std::string& queryName) const;
209 
211  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeaturesRaw() const;
212 
229  virtual double terrainHeightAboveSeaLevel(const DtPoint& databaseLocation,
230  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
231 
255  virtual bool terrainHeightAndIntersection(const DtVector& localLocation,
256  double& height, DtVrfChordIntersectionRecord& record,
258  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
259  bool overrideBlockingAssert = false, int flags = 0) const;
260 
263  virtual bool terrainHeightAndIntersectionBelow(const DtVector& localLocation,
264  double& height, DtVrfChordIntersectionRecord& record,
266  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
267  bool overrideBlockingAssert = false, int flags = 0) const;
268 
270 
271 
272 
273 
274 
275 
276 
277 
278 
279 
280 
281 
282 
283 
284 
285 
286 
287 
288 
289 
290 
291 
292 
293 
294 
295 
296 
297 
298 
299 
300 
301 
302 
303 
304 
305 
306 
307 
308 
309 
310 
311 
312 
313 
314 
315 
316 
317 
318 
319 
320 
321 
322 
323 
324 
325 
326 
327 
328 
329 
330 
331 
332 
333 
334 
335 
336 
337 
338 
339 
340 
341 
342 
343 
344 
345 
346 
347 
348 
349 
350 
351 
352 
353 
354 
355 
356 
357 
358 
359 
360 
361 
362 
363 
364 
365 
366 
367 
368 
369 
370 
371 
372 
373 
374 
375 
376 
377 
378 
379 
380 
381 
382 
383 
384 
385 
386 
387 
388 
389 
390 
391 
392 
393 
394 
395 
396 
397  virtual bool terrainHeightUnderWater(const DtVector& databaseLocation,
398  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
399  double& waterHeight, DtSurface::DtMedium &topSurfaceMedium,
400  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) ;
401 
405  virtual bool terrainHeightUnderWaterDebug(const DtVector& databaseLocation,
406  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
407  double& waterHeight, DtSurface::DtMedium &topSurfaceMedium,
408  bool debug,
409  bool* dataAvailable =0, bool overrideBlockingAssert = false, int flags = 0) ;
411 
455  virtual bool closestIntersection(const DtVector& localLocation,
456  DtPoint& intersectionPoint, bool* dataAvailable = 0,
457  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
458 
479  virtual bool closestIntersection(double lat, double lon,
480  DtPoint& intersectionPoint, bool* dataAvailable = 0,
481  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
482 
509  virtual bool closestIntersection(const DtVector& localLocation,
512  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
513  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
514 
541  virtual bool closestIntersection(double lat, double lon,
544  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
545  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
546 
576  virtual bool closestIntersection(const std::list<DtVector>& localLocationList,
577  DtVrfChordIntersectRecordList& recordList, int& numIntersections,
579  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
580  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
581 
609  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
610  double& intersectionTime, bool* dataAvailable = 0,
611  bool overrideBlockingAssert = false, int flags = 0) const;
612 
644  virtual bool intersect(const DtChord& chord,
647  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
648  bool overrideBlockingAssert = false, int flags = 0) const;
649 
676  virtual bool allIntersectsAlongChord(const DtChord& chord,
679  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
680  bool overrideBlockingAssert = false, int flags = 0) const;
681 
685  virtual bool allIntersectsAlongChordDebug(const DtChord& chord,
687  bool* dataAvailable = 0,
688  bool overrideBlockingAssert = false, int flags = 0) const;
689 
721  virtual bool intersectList(const std::list<DtChord>& chordList,
722  DtVrfChordIntersectRecordList& recordList, int& numTerrainIntersections,
724  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
725  bool overrideBlockingAssert = false, int flags = 0) const;
726 
741  virtual void preloadTerrainAreas(
742  const DtTerrainPagingGeometryList& preloadGeometry);
743 
749  virtual void forceLoadTerrainAreas(
750  const DtTerrainPagingGeometryList& forceLoadGeometry);
751 
757  virtual const DtTerrainCapabilities* terrainCapabilities() const;
758 
762  virtual bool addTerrainPassThroughLayer(const DtString& layerType);
763 
773  virtual void setAssertOnBlockingTerrainCalls(bool assertBlock);
774  virtual bool assertOnBlockingTerrainCalls() const;
776 
779  virtual void setWarnOnBlockingTerrainCalls(bool warnBlock);
780  virtual bool warnOnBlockingTerrainCalls() const;
782 
787  virtual void setIntersectDataLoadExpireTime(const double& expireTime);
788  virtual void expireDataLoadRequestsBeforeTime(const double& currentTime);
789 
800  virtual void trianglesInArea(DtTriangleCallbackFcn func,
801  DtTriangleCallbackFinalizeFcn finalize, DtTerrainProcessPolygonsBox& box, void* usr) const;
802 
806  virtual boost::shared_ptr<DtAsyncJobMapEntry> makePathAsync(
807  const DtPoint& localStart,
808  const DtPoint& localDestination,
809  const std::string& type,
810  const double& maxSearchRadius,
811  const double& startProximityThreshold,
812  const DtAStarGraph::DtWeightFactorsList& weightFactors
813  = DtAStarGraph::DtWeightFactorsList());
814 
828  virtual DtAStarGraph::Path makePath(
829  const DtPoint& localStart,
830  const DtPoint& localDestination,
831  const std::string& type,
832  const double& maxSearchRadius,
833  const double& startProximityThreshold,
834  boost::function<bool ()> cancelCheck,
835  const DtAStarGraph::DtWeightFactorsList& weightFactors
836  = DtAStarGraph::DtWeightFactorsList()) const;
837 
840  virtual bool onPathFeature(
841  const DtPoint& location, const DtString& type, double buffer = 0.5);
842 
844  virtual DtAStarGraph::Ptr pathFinder(const std::string&) const;
845 
849  virtual boost::shared_ptr<DtAsyncJobMapEntry> addAsyncJob(DtAsyncJob* job);
850 
852  MAKVRinTerra::DtProj::CPtr localProj() const;
853 
854  MAKVRinTerra::DtFeaturesDebugger& debugger() const;
855 
856  MAKVRinTerra::DtQuery findQuery(const std::string& name) const;
857 
858  const double topoDistance(const DtPoint& start, const DtPoint& end,
859  const MAKVRinTerra::DtProj& localProj);
860 
870  MAKVRinTerra::DtClosestPathFeatureFinder closestFeatureOnNetwork(
871  const std::string& type, const DtPoint& startingLocation,
872  const double& searchRadius, bool* dataAvailable = NULL);
873 
874  void breakUpChord(const MAKVRinTerra::DtProj&, const DtChord& chord,
875  std::vector<DtChord>& chords) const;
876 
877  void breakUpChord(const DtChord& chord, std::vector<DtChord>& chords) const;
878 
885  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
886  double time,
887  const std::map<DtString, DtString>& keyValueChanges,
888  const DtVector& centerLocation, double radius);
889 
896  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
897  double time,
898  const std::map<DtString, DtString>& keyValueChanges,
899  const std::list<DtVector>& vertices, double width);
900 
906  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
907  double time,
908  const std::map<DtString, DtString>& keyValueChanges,
909  const std::list<DtVector>& vertices);
910 
916  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
917  double time,
919 
932  virtual void dynamicTerrainFeaturesInArea(
933  const DtVector& centerLocation, double radius,
934  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
935  const DtString& filterKey = DtString::nullString());
936 
949  virtual void dynamicTerrainFeaturesInArea(
950  const std::list<DtVector>& vertices, double width,
951  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
952  const DtString& filterKey = DtString::nullString());
953 
965  virtual void dynamicTerrainFeaturesInArea(
966  const std::list<DtVector>& vertices,
967  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
968  const DtString& filterKey = DtString::nullString());
969 
977  virtual bool extractDynamicTerrainFeatureInformation(const makVrv::DtDynamicTerrainFeature& feature,
978  DtRwDynamicTerrainInformation& dynamicTerrainInfo, const DtString& filterKey = DtString::nullString()) const;
979 
983  virtual DtDynamicTerrainQueryHandle queryDynamicTerrainFeatures(
984  const DtDynamicTerrainQueryCallback& callback,
985  makVrv::DtDynamicTerrainGeometry* geometry = 0);
986 
987  virtual void queryCurrentDynamicTerrainFeatures(
988  const DtDynamicTerrainQueryCallback& callback,
989  makVrv::DtDynamicTerrainGeometry* geometry = 0);
990 
992  virtual void cacheInformationForTerrainArea(int requestId, int lowestLOD, int highestLOD, const DtExtent& cacheArea,
993  double& estimatedTime, double& estimatedSize, std::vector<std::string>& elevationLayers, std::vector<std::string>& modelLayers) const;
994 
997  virtual void cacheTerrainArea(int requestId, int lowestLOD, int highestLOD, const DtExtent& cacheArea, DtCacheProgressCallbackFunction fcn = 0, void* usr = 0);
998 
1000  virtual void cancelCacheTerrainArea(int requestId);
1001 
1002 protected:
1003 
1014  virtual bool nonPolygonalWaterHeight(const DtVector& localLocation,
1015  double& height) const;
1016 
1020  virtual double defaultWaterDepth(const DtVector& localLocation) const;
1021 
1024  virtual double defaultSurfaceElevation(const DtVector& localLocation) const;
1025 
1041  virtual DtSurface::DtMedium mediumForUnspecPolygonsUnderWater() const;
1042 
1054  virtual double landAboveWaterMinimumSeparation() const;
1055 
1058  void insertNonPolyWaterIntoIntersectionList(
1059  DtVrfChordIntersectionRecord& waterInterx,
1060  DtVrfChordIntersectRecordList& intrxList) const;
1061 
1069  virtual DtVrfChordIntersectionRecord blankSurfaceIntersectionRecord(
1070  const DtVector& localLocation, const double height) const;
1071 
1076  virtual bool nonPolygonalWaterIntersect(const DtChord& chord,
1077  DtVrfChordIntersectionRecord& waterInterxRecord) const;
1078 
1079 protected:
1086 
1087  typedef boost::ptr_list<MAKVRinTerra::DtFeatureSet> FeatureSetList;
1089 
1091 
1095 
1101 
1103 
1106 
1108 
1110 
1113 
1115 
1116  std::ofstream myDebugOutputFile;
1117  tbb::tick_count myLastDebugOutputTick;
1118 
1120 
1122 
1123  typedef std::map<DtString, DtGenericTerrainRecordCallbackList>
1126 };
1127 
1128 #define DtRegisterTerrainImplementationFunctionName "DtRegisterTerrainImplementation"
1129 
1133 
1134 
1135 #define DtDeregisterTerrainImplementationFunctionName "DtDeregisterTerrainImplementation"
1136 

Document ID: Generated on Thu Mar 23 18:54:12 EDT 2017 from SVN revision 174804
Copyright © 2005-2017 VT MÄK. All Rights Reserved (www.mak.com)