VR-Forces 4.6 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 
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;
97  };
98 
99 public:
102 
104  virtual ~DtTerrainInterface();
105 
109  virtual bool init(bool createConsoleManager = true);
110 
112  virtual void setConfigFile(const std::string&, bool reload=true);
113 
115  virtual const DtTerrainInterfaceConfig& configOptions() const;
116 
118  virtual void tick();
119 
121  virtual bool isSameTerrain(const DtFilename&) const;
122 
124  DtTerrainImplementation* terrainImplementation() const
125  {
126  return myTerrainImpl;
127  }
128 
131  virtual void addTerrainImplementation(const DtString& implementationName,
133 
135  virtual void addFeatureLayer(MAKVRinTerra::DtFeatureSet*);
136  virtual void addFeatureLayer(boost::shared_ptr<MAKVRinTerra::DtFeatureSet>);
137 
138  virtual void addGenericTerrainRecordCallback(
139  const DtString& recordType,
141  void* user);
142 
143  virtual void removeGenericTerrainRecordCallback(
144  const DtString& recordType,
146  void* user);
147 
148  virtual void invokeGenericTerrainRecordCallbacks(
150 
152  virtual bool loadTerrain(const DtString& filename, LoadContext context = VrfSimulationBackEnd);
153 
155  virtual bool unloadTerrain(bool block = true);
156 
161  virtual bool loadModel(const DtFilename& f, const DtEntityType& t = DtEntityType(), bool hasOceanLayer = true);
162 
165  virtual double modelHeightDifferencesFromAppearances(int oldApp, int newApp) const;
166 
168  virtual bool terrainIsLoaded();
171  virtual DtString loadedFilename() const;
172 
173  virtual const Coordinate_System* coordinateSystem() const;
174  virtual Coordinate_System* coordinateSystem();
175 
178  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
179  const std::string& type,
180  const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>()) const;
181 
184  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> areas(
186  const boost::shared_ptr<DtVrfCallbackQueue>& = boost::shared_ptr<DtVrfCallbackQueue>()) const;
187 
189  virtual std::auto_ptr<MAKVRinTerra::DtAreaFeatureSet> LOSfeatures() const;
190 
191  virtual std::auto_ptr<MAKVRinTerra::DtPathFeatureSet> paths(const std::string& type) const;
192 
195  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> features(
196  const std::string& queryName) const;
197 
199  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeatures() const;
200 
203  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> featuresRaw(
204  const std::string& queryName) const;
205 
207  virtual std::auto_ptr<MAKVRinTerra::DtFeatureSet> allFeaturesRaw() const;
208 
225  virtual double terrainHeightAboveSeaLevel(const DtPoint& databaseLocation,
226  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) const;
227 
251  virtual bool terrainHeightAndIntersection(const DtVector& localLocation,
252  double& height, DtVrfChordIntersectionRecord& record,
254  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
255  bool overrideBlockingAssert = false, int flags = 0) const;
256 
259  virtual bool terrainHeightAndIntersectionBelow(const DtVector& localLocation,
260  double& height, DtVrfChordIntersectionRecord& record,
262  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
263  bool overrideBlockingAssert = false, int flags = 0) const;
264 
266 
267 
268 
269 
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  virtual bool terrainHeightUnderWater(const DtVector& databaseLocation,
394  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
395  double& waterHeight, DtSurface::DtMedium &topSurfaceMedium,
396  bool* dataAvailable = 0, bool overrideBlockingAssert = false, int flags = 0) ;
397 
401  virtual bool terrainHeightUnderWaterDebug(const DtVector& databaseLocation,
402  double& groundHeight, DtSurface& groundSurface, DtVector& groundNormal,
403  double& waterHeight, DtSurface::DtMedium &topSurfaceMedium,
404  bool debug,
405  bool* dataAvailable =0, bool overrideBlockingAssert = false, int flags = 0) ;
407 
451  virtual bool closestIntersection(const DtVector& localLocation,
452  DtPoint& intersectionPoint, bool* dataAvailable = 0,
453  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
454 
475  virtual bool closestIntersection(double lat, double lon,
476  DtPoint& intersectionPoint, bool* dataAvailable = 0,
477  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
478 
505  virtual bool closestIntersection(const DtVector& localLocation,
508  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
509  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
510 
537  virtual bool closestIntersection(double lat, double lon,
540  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
541  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
542 
572  virtual bool closestIntersection(const std::list<DtVector>& localLocationList,
573  DtVrfChordIntersectRecordList& recordList, int& numIntersections,
575  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
576  bool overrideBlockingAssert = false, bool doNotAddDefaultRecord = false, int flags = 0) const;
577 
605  virtual bool intersect(const DtChord& chord, DtPoint& intersectionPoint,
606  double& intersectionTime, bool* dataAvailable = 0,
607  bool overrideBlockingAssert = false, int flags = 0) const;
608 
640  virtual bool intersect(const DtChord& chord,
643  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
644  bool overrideBlockingAssert = false, int flags = 0) const;
645 
672  virtual bool allIntersectsAlongChord(const DtChord& chord,
675  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
676  bool overrideBlockingAssert = false, int flags = 0) const;
677 
681  virtual bool allIntersectsAlongChordDebug(const DtChord& chord,
683  bool* dataAvailable = 0,
684  bool overrideBlockingAssert = false, int flags = 0) const;
685 
717  virtual bool intersectList(const std::list<DtChord>& chordList,
718  DtVrfChordIntersectRecordList& recordList, int& numTerrainIntersections,
720  DtIntersectionRecord::INT_ALL_DATA, bool* dataAvailable = 0,
721  bool overrideBlockingAssert = false, int flags = 0) const;
722 
737  virtual void preloadTerrainAreas(
738  const DtTerrainPagingGeometryList& preloadGeometry);
739 
745  virtual void forceLoadTerrainAreas(
746  const DtTerrainPagingGeometryList& forceLoadGeometry);
747 
749  virtual bool dataAvailable(const DtTerrainPagingGeometryList& geometry);
750 
756  virtual const DtTerrainCapabilities* terrainCapabilities() const;
757 
761  virtual bool addTerrainPassThroughLayer(const DtString& layerType);
762 
772  virtual void setAssertOnBlockingTerrainCalls(bool assertBlock);
773  virtual bool assertOnBlockingTerrainCalls() const;
775 
778  virtual void setWarnOnBlockingTerrainCalls(bool warnBlock);
779  virtual bool warnOnBlockingTerrainCalls() const;
781 
786  virtual void setIntersectDataLoadExpireTime(const double& expireTime);
787  virtual void expireDataLoadRequestsBeforeTime(const double& currentTime);
788 
799  virtual void trianglesInArea(DtTriangleCallbackFcn func,
800  DtTriangleCallbackFinalizeFcn finalize, DtTerrainProcessPolygonsBox& box, void* usr) const;
801 
808  virtual void trianglesInArea(DtTriangleOutputInterface& func, DtTerrainProcessPolygonsBox& box) const;
809 
813  virtual boost::shared_ptr<DtAsyncJobMapEntry> makePathAsync(
814  const DtPoint& localStart,
815  const DtPoint& localDestination,
816  const std::string& type,
817  const double& maxSearchRadius,
818  const double& startProximityThreshold,
819  const DtAStarGraph::DtWeightFactorsList& weightFactors
820  = DtAStarGraph::DtWeightFactorsList());
821 
835  virtual DtAStarGraph::Path makePath(
836  const DtPoint& localStart,
837  const DtPoint& localDestination,
838  const std::string& type,
839  const double& maxSearchRadius,
840  const double& startProximityThreshold,
841  boost::function<bool ()> cancelCheck,
842  const DtAStarGraph::DtWeightFactorsList& weightFactors
843  = DtAStarGraph::DtWeightFactorsList()) const;
844 
847  virtual bool onPathFeature(
848  const DtPoint& location, const DtString& type, double buffer = 0.5);
849 
851  virtual DtAStarGraph::Ptr pathFinder(const std::string&) const;
852 
856  virtual boost::shared_ptr<DtAsyncJobMapEntry> addAsyncJob(DtAsyncJob* job);
857 
859  MAKVRinTerra::DtProj::CPtr localProj() const;
860 
861  MAKVRinTerra::DtFeaturesDebugger& debugger() const;
862 
863  MAKVRinTerra::DtQuery findQuery(const std::string& name) const;
864 
865  const double topoDistance(const DtPoint& start, const DtPoint& end,
866  const MAKVRinTerra::DtProj& localProj);
867 
877  MAKVRinTerra::DtClosestPathFeatureFinder closestFeatureOnNetwork(
878  const std::string& type, const DtPoint& startingLocation,
879  const double& searchRadius, bool* dataAvailable = NULL);
880 
881  void breakUpChord(const MAKVRinTerra::DtProj&, const DtChord& chord,
882  std::vector<DtChord>& chords) const;
883 
884  void breakUpChord(const DtChord& chord, std::vector<DtChord>& chords) const;
885 
887  virtual DtTerrainGeometryHandle* createEntityGeometry(const DtFilename& file);
888 
895  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
896  double time,
897  const std::map<DtString, DtString>& keyValueChanges,
898  const DtVector& centerLocation, double radius);
899 
906  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
907  double time,
908  const std::map<DtString, DtString>& keyValueChanges,
909  const std::list<DtVector>& vertices, double width);
910 
916  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
917  double time,
918  const std::map<DtString, DtString>& keyValueChanges,
919  const std::list<DtVector>& vertices);
920 
926  virtual DtDynamicTerrainRequestHandle addDynamicTerrainChangeRequest(
927  double time,
929 
942  virtual void dynamicTerrainFeaturesInArea(
943  const DtVector& centerLocation, double radius,
944  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
945  const DtString& filterKey = DtString::nullString());
946 
959  virtual void dynamicTerrainFeaturesInArea(
960  const std::list<DtVector>& vertices, double width,
961  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
962  const DtString& filterKey = DtString::nullString());
963 
975  virtual void dynamicTerrainFeaturesInArea(
976  const std::list<DtVector>& vertices,
977  std::list<DtRwDynamicTerrainInformation>& dynamicTerrainInfo, bool* dataAvailable = NULL,
978  const DtString& filterKey = DtString::nullString());
979 
987  virtual bool extractDynamicTerrainFeatureInformation(const makVrv::DtDynamicTerrainFeature& feature,
988  DtRwDynamicTerrainInformation& dynamicTerrainInfo, const DtString& filterKey = DtString::nullString()) const;
989 
993  virtual DtDynamicTerrainQueryHandle queryDynamicTerrainFeatures(
994  const DtDynamicTerrainQueryCallback& callback,
995  makVrv::DtDynamicTerrainGeometry* geometry = 0,
996  bool useOriginalGeometry = false);
997 
998  virtual void queryCurrentDynamicTerrainFeatures(
999  const DtDynamicTerrainQueryCallback& callback,
1000  makVrv::DtDynamicTerrainGeometry* geometry = 0,
1001  bool useOriginalGeometry = false);
1002 
1004  virtual void cacheInformationForTerrainArea(
1005  unsigned minLOD, unsigned maxLOD, const DtExtent& cacheArea,
1006  double& estimatedTime, double& estimatedSize,
1007  std::vector<std::string>& elevationLayers,
1008  std::vector<std::string>& modelLayers,
1009  std::vector<std::string>& featureLayers) const;
1010 
1013  virtual void cacheTerrainArea(int requestId,
1014  unsigned minLOD, unsigned maxLOD, const DtExtent& cacheArea,
1015  DtCacheProgressCallbackFunction fcn = 0, void* usr = 0);
1016 
1018  virtual void cancelCacheTerrainArea(int requestId);
1019 
1021  virtual bool oceanLayerPresent() const;
1022 
1024  virtual void setOceanLayerPresent(bool b);
1025 
1037  virtual bool nonPolygonalWaterHeight(
1038  const DtChord& localLocation,
1039  double& height) const;
1040 
1042  virtual void setNonPolygonalWaterHeight(double d);
1043 
1047  virtual double defaultWaterDepth(const DtVector& localLocation) const;
1048 
1050  virtual void setDefaultWaterDepth(double);
1051 
1055  virtual double defaultSurfaceElevation(const DtVector& localLocation) const;
1056 
1072  virtual DtSurface::DtMedium mediumForUnspecPolygonsUnderWater() const;
1073 
1075  virtual void setMediumForUnspecPolygonsUnderWater(DtSurface::DtMedium m);
1076 
1088  virtual double landAboveWaterMinimumSeparation() const;
1089 
1091  virtual void setLandAboveWaterMinimumSeparation(double);
1092 
1093 protected:
1096  void insertNonPolyWaterIntoIntersectionList(
1097  DtVrfChordIntersectionRecord& waterInterx,
1098  DtVrfChordIntersectRecordList& intrxList) const;
1099 
1107  virtual DtVrfChordIntersectionRecord blankSurfaceIntersectionRecord(
1108  const DtVector& localLocation, const double height) const;
1109 
1114  virtual bool nonPolygonalWaterIntersect(
1115  const DtChord& chord,
1116  DtVrfChordIntersectRecordList& waterRecords) const;
1117 
1118 protected:
1125 
1126  typedef boost::ptr_list<MAKVRinTerra::DtFeatureSet> FeatureSetList;
1128 
1130 
1134 
1140 
1142 
1145 
1147 
1149 
1152 
1154 
1155  std::ofstream myDebugOutputFile;
1156  tbb::tick_count myLastDebugOutputTick;
1157 
1159 
1160  typedef std::map<DtString, DtGenericTerrainRecordCallbackList>
1163 };
1164 
1165 #define DtRegisterTerrainImplementationFunctionName "DtRegisterTerrainImplementation"
1166 
1170 
1171 
1172 #define DtDeregisterTerrainImplementationFunctionName "DtDeregisterTerrainImplementation"
1173 

Document ID: Generated on Thu Apr 12 03:15:37 EDT 2018 from SVN revision 187986
Copyright © 2005-2018 VT MÄK. All Rights Reserved (www.mak.com)