VR-Forces 4.8 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
osgEarthTerrainSourceTracker.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2020 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
10 
18 
20 
21 #include <vrfutil/vertexList.h>
22 
23 //Mak Terrain Toolkit includes
24 #include <geometry/sphere.h>
25 
26 #include <osgTerrain/TerrainTile>
27 #include <osgEarth/LandCoverLayer>
28 #include <osgEarth/Profile>
29 #include <osgEarth/TileKey>
30 #include <osgEarth/MapNode>
31 #include <osgEarth/TerrainTileModel>
32 
33 #include <string>
34 #include <list>
35 #include <vector>
36 
37 #include <boost/ptr_container/ptr_vector.hpp>
38 
39 #include <tbb/spin_rw_mutex.h>
40 
41 #undef final
42 
46 class DtPoint;
47 class DtGeodeticCoord;
55 
56 namespace makVrf
57 {
59 }
60 
62 {
63 public:
64  class OsgEarthTileDataCallback;
65 
68  osgEarth::MapNode* mapNode);
69 
71  virtual bool useRawElevation() const;
72 
73  virtual bool useLandCoverData() const;
74 
75  unsigned getHighestLodForLandCover() const;
76 
77  void setLandCoverSurfaceCharacteristicsMapper(makVrf::DtSurfaceCharacteristicMap * mapper);
78 
79  DtSurface getSoilFromString(const std::string & soilType) const;
80 
81  virtual const osg::ref_ptr<osgEarth::LandCoverLayer> getBestLandCoverLayer(const osgEarth::TileKey& key) const;
82 
84  virtual boost::optional<DtTerrainIntersectOptions::Fidelity> intersectFidelity() const;
85 
88  virtual unsigned maxLOD() const;
89  virtual void setMaxLOD(unsigned);
91 
95  virtual unsigned getMaxLODForBilinearIntersection() const;
96  virtual void setMaxLODForBilinearIntersection(unsigned);
98 
105  virtual double triangleOutputMergeTolerance() const;
106  virtual void setTriangleOutputMergeTolerance(double tol);
107  virtual double intersetionTriangleMergeTolerance() const;
108  virtual void setIntersectionTriangleMergeTolerance(double tol);
110 
113  virtual unsigned minElevationIndexLOD() const;
114  virtual void setMinElevationIndexLOD(unsigned);
115  virtual unsigned maxElevationIndexLOD() const;
116  virtual void setMaxElevationIndexLOD(unsigned);
118 
121  virtual double maxChordLengthBeforeSplitSquared() const;
122  virtual void setMaxChordLengthBeforeSplit(double);
124 
127  virtual unsigned maxElevationChordSplitTestLOD() const;
128  virtual void setMaxElevationChordSplitTestLOD(unsigned);
130 
132  virtual unsigned tileCount() const;
133 
135  virtual unsigned cellCount() const;
136 
138  virtual bool init(DtTerrainSourcePager&);
139 
143  virtual void addPagedInTile(
144  const osgEarth::TileKey& tilekey,
145  const boost::shared_ptr<DtTileData>& tileData);
146 
148  virtual void removePagedInTile(const osgEarth::TileKey tileKey);
149 
156  virtual bool dataAvailable(DtPagingMetaDataPtr metaData,
157  DtTerrainPagingGeometryPtr geometry);
158 
164  virtual bool findHeightFieldIntersections(
165  DtTerrainIntersectStatus& status,
166  const DtChord& chord,
168  const DtTerrainIntersectOptions& options) const;
169 
174  virtual bool halveChordAndFindHeightFieldIntrx(
175  const DtChord& chord, DtChord convertedChord,
176  const DtTerrainIntersectOptions& options,
177  DtTerrainIntersectStatus& status,
178  DtVrfChordIntersectRecordList& intList) const;
179 
183  virtual bool splitChordAt180AndFindHeightFieldIntrx(
184  const DtChord& chord,
185  const DtTerrainIntersectOptions& options,
186  DtTerrainIntersectStatus& status,
187  DtVrfChordIntersectRecordList& intList) const;
188 
192  virtual void processTriangles(
194  const DtTerrainProcessPolygonsBox& box) const;
195 
203  virtual void pageInData(DtPagingMetaDataPtr metaData,
204  DtTerrainPagingGeometryPtr geometry);
205 
211  virtual DtTerrainIntersectIDType findOldestPagedData(unsigned int& numTrianglesOut);
212 
215  virtual void pageOutOldestData(const int priority);
216 
218  virtual bool canPageOutData(DtTerrainIntersectIDType intersectId);
219 
220 
227  virtual osgEarth::TileKey getBestTileKey(const osgEarth::TileKey&) const;
228 
230  virtual void findMissingTiles(const DtTerrainPagingGeometryPtr& geometry, DtTileKeyList& tiles) const;
231 
233  void findPagedInTilesWithinExtent(std::vector<osgEarth::TileKey> & tileKeysPagedIn, const osgEarth::GeoExtent & extent) const;
234 
235  void findPagesAtLodWithinExtents(std::vector<osgEarth::TileKey> &tileKeysFound, const osgEarth::GeoExtent & extent, unsigned lod) const;
236 
238  virtual void writeIndex(IndexInterface&, IndexOutputInterface&) const;
241  virtual bool writeIndexLayers(IndexInterface&, unsigned precision) const;
242 
245  {
246  public:
248  static std::auto_ptr<IndexInputInterface> Create(const DtFilename&);
249 
250  virtual ~IndexInputInterface();
251 
252  virtual bool read(unsigned& lod, unsigned& x, unsigned& y, double& min, double& max, bool& valid) = 0;
253  };
254 
257  {
258  std::string name;
259  osgEarth::URI file;
260  bool isDefault;
261  double minTolerance, maxTolerance;
262  unsigned minlod, maxlod;
263  osgEarth::GeoExtent extent;
264 
265  explicit IndexConfig(const DtOsgEarthTerrainSourceTracker&, const osgEarth::Config&);
267  };
268 
270  virtual std::vector<IndexConfig> getIndexConfigInfoForLayer(
271  const osgEarth::ElevationLayer& layer) const;
272 
274  virtual void readIndex(
276  unsigned layerNumber,
277  const IndexConfig& idxConfig);
278 
281  virtual bool readIndexLayers();
282 
283 protected:
284 
285  virtual DtPageInTilesCommand* createPageInTilesCommand(
286  DtPagingMetaDataPtr metaData);
287 
288  virtual DtPageOutTilesCommand* createPageOutTilesCommand(
289  DtPagingMetaDataPtr metaData);
290 
291  virtual bool aboveAllTerrain(
292  const DtChord& geocentricChord,
293  const DtChord& geodeticCoord) const;
294 
297  virtual bool shortEnoughForIntersection(
298  const DtChord& geocentricChord,
299  const DtChord& geodeticChord,
300  double chordLengthSq) const;
301 
304  virtual bool crosses180Lon(const DtChord& geodeticChord) const;
305 
306  virtual bool findData(
307  const DtTerrainPagingGeometry* geometry,
308  std::vector< boost::shared_ptr<DtTileData> >& data,
309  const DtPagingMetaDataPtr& metaData = DtPagingMetaDataPtr(),
310  OsgEarthTileDataCallback* callback = 0) const;
311 
312  virtual bool findData(
313  const DtTerrainPagingGeometry* geometry,
314  std::vector< boost::shared_ptr<DtTileData> >& data,
315  OsgEarthTileDataCallback* callback) const;
316 
317  virtual void findMissing(
318  const DtTerrainPagingGeometry& geometry,
319  DtTileKeyList& missing) const;
320 
321  virtual boost::shared_ptr<DtTileData> findOldest() const;
322  virtual boost::shared_ptr<DtTileData> findOldestUnlocked() const;
323 
324  typedef boost::ptr_vector<TileSpatialIndex> TileRoots;
325 
327  osgEarth::ElevationLayerVector myElevationLayers;
328 
330  osgEarth::ElevationLayerVector myFlattenedElevationLayers;
331 
333 
334  std::vector<osg::ref_ptr<osgEarth::LandCoverLayer> > myLandCoverLayers;
335 
337 
339  const bool myUseRawElevation;
340 
342 
344  unsigned int myMaxLOD;
345 
348 
352 
356 
359 
362 
365 
367  const double myWorldWidth;
368 
371 
373  boost::weak_ptr<DtTileData> myOldestData;
374  boost::weak_ptr<DtTileData> myOldestLandData;
375 };
376 
378 {
379 public:
380  explicit OsgEarthTileDataCallback();
381 
382  virtual bool operator()(const boost::shared_ptr<DtTileData>& tile) = 0;
383 
384 private:
386 };
boost::ptr_vector< TileSpatialIndex > TileRoots
Definition: osgEarthTerrainSourceTracker.h:324
boost::weak_ptr< DtTileData > myOldestData
cached pointer to oldest tile data
Definition: osgEarthTerrainSourceTracker.h:373
virtual unsigned minElevationIndexLOD() const
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
std::list< osgEarth::TileKey > DtTileKeyList
Definition: tileSpatialIndex.h:27
DtBoost::shared_ptr< DtTerrainPagingGeometry > DtTerrainPagingGeometryPtr
Definition: terrainPagingGeometry.h:41
A terrain paging geometry which defines the paging area to be along a given shape.
Definition: terrainPagingShape.h:19
unsigned myMaxElevationIndexLOD
Definition: osgEarthTerrainSourceTracker.h:355
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords.
Definition: vrfChordIntersectRecordList.h:31
double myTriangleOutputMergeTolerance
max error tolerances used to decide when it&#39;s not necessary triangle elevation to full resolution ...
Definition: osgEarthTerrainSourceTracker.h:350
Definition: osgEarthCommands.h:41
double myMaxChordLengthBeforeSplitSquared
max chord length squared before chords are split
Definition: osgEarthTerrainSourceTracker.h:358
DtTerrainSourcePager is the base class for terrain pagers.
Definition: terrainSourcePager.h:53
A terrain paging geometry which defines the paging area to be along a given set of local vertices...
Definition: terrainPagingSphere.h:20
DtOsgEarthTerrainSourcePager is a derived terrainSourcePager that handles a streaming terrain source...
Definition: osgEarthTerrainSourcePager.h:40
virtual unsigned getMaxLODForBilinearIntersection() const
unsigned myMaxElevationChordSplitLOD
max lod used for estimated max elevation under chord for spliting chords
Definition: osgEarthTerrainSourceTracker.h:361
unsigned minlod
Definition: osgEarthTerrainSourceTracker.h:262
virtual bool useLandCoverData() const
Return true if the current tracker use land cover data.
unsigned long long DtTerrainIntersectIDType
Definition: terrainInterfaceDefines.h:28
double minTolerance
Definition: osgEarthTerrainSourceTracker.h:261
unsigned myMinElevationIndexLOD
range of LODs where elevation from index will be used
Definition: osgEarthTerrainSourceTracker.h:354
virtual bool init(DtTerrainSourcePager &)
Called after options are set.
virtual void pageInData(DtPagingMetaDataPtr metaData, DtTerrainPagingGeometryPtr geometry)=0
Page in data within geometry.
double myIntersetionTriangleMergeTolerance
Definition: osgEarthTerrainSourceTracker.h:351
const bool myUseRawElevation
use elevation (if false old geometry system will be used)
Definition: osgEarthTerrainSourceTracker.h:339
const double myWorldWidth
width of world in osgearth coord sys, used for wrapping coords
Definition: osgEarthTerrainSourceTracker.h:367
bool isDefault
Definition: osgEarthTerrainSourceTracker.h:260
virtual void pageOutOldestData(const int priority)=0
Adds a page out command for the least-recently-used tileID to myCommandQueue.
Definition: surface.h:179
std::string name
Definition: osgEarthTerrainSourceTracker.h:258
tbb::concurrent_queue< DtTerrainPagerCommand * > DtPagerCommandQueue
Definition: vantageTerrainImplementationUtil.h:29
virtual bool useRawElevation() const
Return true if the current tracker use raw elevation.
virtual unsigned maxLOD() const
Return the max lod.
DtTerrainIntersectOptions::Fidelity myFidelity
intersect fidelity for this layer
Definition: osgEarthTerrainSourceTracker.h:370
virtual bool dataAvailable(DtPagingMetaDataPtr metaData, DtTerrainPagingGeometryPtr geometry)=0
unsigned int myMaxLOD
max LOD of the whole system
Definition: osgEarthTerrainSourceTracker.h:344
Definition: surfaceCharacteristicMap.h:27
unsigned int myMaxLODForBilinearIntersection
max LOD which will use exact intersection with bilinear surface
Definition: osgEarthTerrainSourceTracker.h:347
Definition: osgEarthTerrainSourceTracker.h:61
Generic interface for reading from index.
Definition: osgEarthTerrainSourceTracker.h:244
osgEarth::ElevationLayerVector myFlattenedElevationLayers
flattens composite layers
Definition: osgEarthTerrainSourceTracker.h:330
DtTerrainIntersectOptions Passed to terrain intersect functions to modify how intersect acts...
Definition: terrainIntersectOptions.h:15
Definition: surfaceCharacteristicsMap.h:25
virtual DtSurface getSoilFromString(const std::string &soilType) const
virtual osgEarth::TileKey getBestTileKey(const osgEarth::TileKey &) const
Return the best tile key to use (based on the tracker) for a pass tilekey.
virtual double intersetionTriangleMergeTolerance() const
Base class for Terrain Source trackers.
Definition: terrainSourceTracker.h:40
virtual bool operator()(const boost::shared_ptr< DtTileData > &tile)=0
makVrf::DtSurfaceCharacteristicMap * myLandCoverCharacteristicsMap
Definition: osgEarthTerrainSourceTracker.h:332
Information about each individual index file.
Definition: osgEarthTerrainSourceTracker.h:256
virtual boost::optional< DtTerrainIntersectOptions::Fidelity > intersectFidelity() const
Fidelity that this tracker is configured for.
Definition: terrainSourceTracker.h:171
Generic interface for writing to index.
Definition: indexOutputInterface.h:16
osgEarth::GeoExtent extent
Definition: osgEarthTerrainSourceTracker.h:263
virtual unsigned maxElevationIndexLOD() const
Definition: osgEarthCommands.h:19
Abstract base class for defining geometric areas for paging of terrain.
Definition: terrainPagingGeometry.h:22
virtual double triangleOutputMergeTolerance() const
bool myUseLandCover
Definition: osgEarthTerrainSourceTracker.h:341
Fidelity
Allows the system to use differently fidelity data for intersecting against.
Definition: terrainIntersectOptions.h:76
A terrain paging geometry which defines the paging area to be along a given chord.
Definition: terrainPagingChord.h:19
#define DT_DLL_vantageTerrainImplementation
This file is used to determine how to build.
Definition: vantageTerrainImplementationDefines.h:28
osgEarth::URI file
Definition: osgEarthTerrainSourceTracker.h:259
std::vector< osg::ref_ptr< osgEarth::LandCoverLayer > > myLandCoverLayers
Definition: osgEarthTerrainSourceTracker.h:334
unsigned myHighestLodForLandCover
Definition: osgEarthTerrainSourceTracker.h:336
boost::weak_ptr< DtTileData > myOldestLandData
Definition: osgEarthTerrainSourceTracker.h:374
Interface for getting terrain triangle data out of DtTerrainInterface::trianglesInArea.
Definition: terrainProcessPolygonsBox.h:113
This class wraps the VR-Vantage Display Engine, and uses as a terrain loader and intersector.
Definition: vantageTerrainEngine.h:93
virtual bool canPageOutData(DtTerrainIntersectIDType intersectId)=0
DtBoost::shared_ptr< DtPagingMetaData > DtPagingMetaDataPtr
Definition: terrainPagingGeometry.h:89
Interface for allowing users to monitor/control the indexing process.
Definition: indexInterface.h:13
osgEarth::ElevationLayerVector myElevationLayers
top level elevation layers
Definition: osgEarthTerrainSourceTracker.h:327
Definition: point.h:34
DtTerrainIntersectStatus Contains information about result of terrain intersection.
Definition: terrainIntersectStatus.h:16
virtual DtTerrainIntersectIDType findOldestPagedData(unsigned int &numTriangles)=0
Finds the least-recently-used tile and set myOldestPagedObject to it.
TileRoots myTileSpatialIndexRoots
roots of the quad tree (not necessarily 4, geodetic usually has 2)
Definition: osgEarthTerrainSourceTracker.h:364
Represents an area query which can be used to extract triangles from DtTerrainInterface.
Definition: terrainProcessPolygonsBox.h:39

Document ID: Generated on Thu Aug 27 10:56:05 EDT 2020 from SVN revision 217100
Copyright © 2005-2020 MAK Technologies. All Rights Reserved (www.mak.com)