VR-Forces 5.0.2 Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
tileData.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2022 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
8 
9 #pragma once
11 
14 
15 #include <osgEarth/Feature>
16 #include <osgEarth/TerrainTileModel>
17 #include <osgEarth/TileKey>
18 
20 
21 #include <terrainCS/coordSystem.h>
22 
23 #include <geometry/surface.h>
24 #include <geometry/chord.h>
25 
26 #include <boost/shared_ptr.hpp>
27 
28 #include <tbb/atomic.h>
29 #include <tbb/spin_rw_mutex.h>
30 
31 #include <vector>
32 #include <string>
33 #include <map>
34 
36 
39 {
40  enum TileType
41  {
43  Empty
44  };
45 
48  {
49  typedef std::vector<Extent> Vector;
50 
52  static Vector Simplify(const Vector& extents);
53 
54  explicit Extent(const osgEarth::TileKey&);
55  explicit Extent(const DtVector& min, const DtVector& max);
56  bool operator==(const Extent & rhs) const;
57 
58  DtVector min, max;
59  };
60 
63  {
64  typedef std::vector<IndexExtent> Vector;
65 
66  explicit IndexExtent(const DtTileData& tile, const Extent& extent);
67 
68  unsigned minx, miny, maxx, maxy;
69  };
70 
72  explicit DtTileData(
73  const DtTerrainSourceTracker& tracker,
74  const osgEarth::TileKey& key);
75 
77  virtual ~DtTileData();
78 
81 
84 
87 
89  const osgEarth::TileKey tileKey;
90 
93 
98 
101  bool setSoilType(const DtPoint & geodeticPt, DtSurface & surface, bool blockIfUnavailable, bool& landDataAvailable) const;
102 
104  DtSurface setSoilType(const DtTerrainTriangleStruct & tri, bool blockIfUnavailable) const;
105 
107  virtual void addMaskExtents(const Extent::Vector& extents);
108 
110  virtual void addMaskExtent(const Extent& extent);
111 
113  virtual void removeMaskExtent(const Extent& extent);
114 
116  virtual void getMaskExtents(Extent::Vector& extents);
117 
123  virtual bool insideValidArea(const DtPoint& p) const;
124 
131  virtual bool extentInsideValidArea(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const;
132 
138  virtual bool extentOutsideValidArea(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const;
139 
145  virtual bool addActiveTileKey(const osgEarth::TileKey& key) = 0;
146 
152  virtual void recomputeActiveTileKeyAreas() = 0;
153 
156 
159  std::vector< osg::ref_ptr<osg::Node> > geometries;
160 
163  std::vector< osg::ref_ptr<osg::Node> > features;
164 
168  std::vector < osgEarth::TileKey > featuresTileKey;
169  std::vector < std::string > featuresLayerName;
170 
172  virtual std::string description() const = 0;
173 
175  virtual unsigned numberOfVertices() const = 0;
176 
180  virtual unsigned numberOfTrianglesForVertices() const;
181 
183  virtual void getTriangleVerticesGridSpaced(unsigned xindex, unsigned yindex, double& x, double& y) const = 0;
184 
186  virtual void getTriangleVertices(unsigned xindex, unsigned yindex, double& x, double& y) const = 0;
187 
188 
190  virtual void getTriangleIndices(double x, double y, unsigned& xindex, unsigned& yindex) const = 0;
191 
193  virtual double getTriangleIdxVsHeightFieldIdxRatio() const;
194 
196  virtual double interpolateHeight(
197  unsigned triangleXIndex, unsigned triangleYIndex,
198  unsigned* heightFieldXUsed = 0, unsigned* heightFieldYUsed = 0) const = 0;
199 
201  virtual double heightField(unsigned col, unsigned row) const = 0;
202 
204  virtual bool getLandCoverName(const DtPoint & pt, std::string & landCoverName, bool &dataAvailable, bool blockOnUnavailable) const = 0;
205 
207  virtual int getLandCoverValue(const DtPoint & pt, bool & dataAvailable, bool blockOnUnavailable) const = 0;
208 
211  tbb::atomic<unsigned int> numTriangles;
212 
216 
218  virtual DtTerrainIntersectIDType getLastUsed() const = 0;
219 
221  virtual bool updateLastUsed(DtTerrainIntersectIDType value) = 0;
222 
227  virtual bool findIntersectionsNonRecursive(
228  const DtChord& chord,
229  unsigned x1, unsigned y1, unsigned x2, unsigned y2,
231  const DtTerrainIntersectOptions& options,
233 
234 
237  virtual bool findIntersections(
238  const DtChord& chord,
240  const DtTerrainIntersectOptions& options) const = 0;
241 
248  virtual void findTriangles(
249  const DtTerrainProcessPolygonsBox& box,
250  unsigned x1, unsigned y1, unsigned x2, unsigned y2,
252  bool singleCell = false,
253  bool insideValidAreaChecked = false) const;
254 
257  virtual void findTriangles(
258  const DtTerrainProcessPolygonsBox& box,
259  DtTriangleOutputInterface&) const = 0;
260 
262  virtual osgEarth::FeatureList& groundFeatureList();
263 
264  virtual void forceLoadAllData(bool isBlocking = true) { }
265 protected:
266 
268  virtual void checkIntersect(const DtChord& chord, const int& cellX, const int& cellY,
270  const DtTerrainIntersectOptions& options,
272  bool tileLargeEnoughForBilinear,
273  bool& foundIntersection) const;
274 
275  mutable tbb::spin_rw_mutex maskExtentsMutex;
276 
277 
281 
283 
286 
288  osgEarth::FeatureList myGroundFeatureList;
289 };
290 
291 class TileData : public DtTileData
292 {
293 public:
295  const osgEarth::TileKey& key);
296 
298 
300 
305  bool addActiveTileKey(const osgEarth::TileKey& key);
306 
308 
309  bool insideValidArea(const DtPoint& p) const;
310 
311  bool extentInsideValidArea(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const;
312 
313  bool extentOutsideValidArea(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const;
314 
315  bool getLandCoverName(const DtPoint & pt, std::string & landCoverName, bool & dataAvailable, bool blockOnUnavailable) const;
316 
317  int getLandCoverValue(const DtPoint & pt, bool & dataAvailable, bool blockOnUnavailable) const;
318 
319 
320 protected:
321  tbb::atomic<DtTerrainIntersectIDType> myLastUsed;
322 
323  typedef std::set<osgEarth::TileKey> TileKeySet;
324 
327 
328  mutable tbb::spin_rw_mutex myInactiveAreasMutex;
331 };
332 
333 typedef std::map< osgEarth::TileKey, boost::shared_ptr<DtTileData> > DtTerrainTileMap;
334 
DtTileData is tracked by the DtOsgEarthTerrainSourceTracker for paging out tiles. ...
Definition: tileData.h:38
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
void recomputeActiveTileKeyAreas()
Should be called to enable a tilekey subarea once everything else needed for it is setup...
DtVrfChordIntersectionRecord represents a list of DtChordIntersectRecords. This is useful for followi...
Definition: vrfChordIntersectRecordList.h:31
unsigned miny
Definition: tileData.h:68
bool getLandCoverName(const DtPoint &pt, std::string &landCoverName, bool &dataAvailable, bool blockOnUnavailable) const
Return the land cover name for a location.
bool pendingRemoval
Whether this tile has had a page out command issued for it and should be ignored when calculating the...
Definition: tileData.h:215
TileData(const DtTerrainSourceTracker &tracker, const osgEarth::TileKey &key)
virtual void forceLoadAllData(bool isBlocking=true)
Definition: tileData.h:264
int getLandCoverValue(const DtPoint &pt, bool &dataAvailable, bool blockOnUnavailable) const
Return the land cover index value for a location.
Definition: tileData.h:42
CS_Type cstype
tracker coord system
Definition: tileData.h:86
DT_DLL_terrainCS bool operator==(const DtDegMinSec &lhs, const DtDegMinSec &rhs)
const DtTerrainSourceTracker & tracker
Tracker that owns this tile.
Definition: tileData.h:80
std::set< GroundFeatureProcess > groundFeatureList
Definition: GroundFeatureProcess.h:43
bool updateLastUsed(DtTerrainIntersectIDType value)
Update last intersect id.
Extent::Vector unSimplifiedMaskExtents
Definition: tileData.h:282
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
Axis aligned extents in osgearth coordinate system.
Definition: tileData.h:47
osgEarth::FeatureList myGroundFeatureList
Ground Feature List (procedural trees from osgEarth)
Definition: tileData.h:288
tbb::spin_rw_mutex myInactiveAreasMutex
Definition: tileData.h:328
Definition: surface.h:179
Extent::Vector myInactiveAreas
Definition: tileData.h:329
Axis aligned extent whose coordinates are in triangle vertex indices.
Definition: tileData.h:62
std::set< osgEarth::TileKey > TileKeySet
Definition: tileData.h:323
DtTerrainIntersectOptions Passed to terrain intersect functions to modify how intersect acts...
Definition: terrainIntersectOptions.h:15
bool insideValidArea(const DtPoint &p) const
Returns true if the point is inside a valid area. Invalid areas are areas which are covered by a mask...
tbb::atomic< DtTerrainIntersectIDType > myLastUsed
Definition: tileData.h:321
std::vector< osg::ref_ptr< osg::Node > > geometries
Geometries associated with this tile. Could be geometry for tile or just the skirt part if it exists...
Definition: tileData.h:159
Definition: terrainProcessPolygonsBox.h:25
DtExtent dtExtent
DtExtent of the tile.
Definition: tileData.h:97
TileKeySet myActiveTileKeys
Definition: tileData.h:326
bool extentOutsideValidArea(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const
Returns true if the extent is entirely outside the valid area. This means that there is no data to in...
std::map< osgEarth::TileKey, boost::shared_ptr< DtTileData > > DtTerrainTileMap
Definition: tileData.h:333
std::vector< Extent > Vector
Definition: tileData.h:49
TileType type
Abstract notion of type so we can annotate tiles.
Definition: tileData.h:155
std::vector< std::string > featuresLayerName
Definition: tileData.h:169
Base class for Terrain Source trackers. Determines if the necessary data To perform an intersection i...
Definition: terrainSourceTracker.h:75
TileKeySet myInactiveTileKeys
Definition: tileData.h:325
IndexExtent::Vector maskIndexExtents
Same masks as maskExtents but in triangle index coordinates.
Definition: tileData.h:285
Extent
Definition: DtAxisAlignedBoundingBox.h:16
std::vector< osgEarth::TileKey > featuresTileKey
List of ground features key generated associated with the current tileKey (groundcover is often not a...
Definition: tileData.h:168
Extent::Vector maskExtents
Masks computed from masked out areas in osgearth. Points inside these extents are not part of this ti...
Definition: tileData.h:280
DtTerrainIntersectIDType getLastUsed() const
Return the last intersect id which touch this tile.
const osgEarth::TileKey tileKey
TileKey for this tile.
Definition: tileData.h:89
tbb::spin_rw_mutex maskExtentsMutex
Definition: tileData.h:275
CS_Type
Definition: coordSystem.h:35
std::vector< IndexExtent > Vector
Definition: tileData.h:64
IndexExtent::Vector myInactiveIndexAreas
Definition: tileData.h:330
bool addActiveTileKey(const osgEarth::TileKey &key)
Activate this tile (i.e a subregion) of this tile. This complexity is b/c sometimes tiles are only va...
A DtChord is a finite line segment in 3-space, represented by two points. Data derived from the two e...
bool extentInsideValidArea(unsigned x1, unsigned y1, unsigned x2, unsigned y2) const
Returns true if the extent is entirely inside a valid area (doesn&#39;t intersect any invalid areas)...
TileType
Definition: tileData.h:40
#define DT_DLL_vantageTerrainImplementation
This file is used to determine how to build.
Definition: vantageTerrainImplementationDefines.h:28
double elevationTolerance
Tracker elevation tolerance.
Definition: tileData.h:83
Interface for getting terrain triangle data out of DtTerrainInterface::trianglesInArea. This object should always be created on the stack.
Definition: terrainProcessPolygonsBox.h:113
Definition: tileData.h:291
osg::ref_ptr< osgEarth::TerrainTileModel > tileModel
osgearth tile model if using elevation.
Definition: tileData.h:92
std::vector< osg::ref_ptr< osg::Node > > features
list of geometries box created from the features like sim trees
Definition: tileData.h:163
Extent extent
Extent of tile.
Definition: tileData.h:95
DtVector min
Definition: tileData.h:58
tbb::atomic< unsigned int > numTriangles
The number of triangles this tile, and therefore its collision object, contain. Used for estimating p...
Definition: tileData.h:211
Definition: point.h:34
DtIntersectionType
Definition: intersectionRecord.h:41
Represents an area query which can be used to extract triangles from DtTerrainInterface. The box points are in local but the box is always projected against the local topo at the center point of the box.
Definition: terrainProcessPolygonsBox.h:39

Document ID: Generated on Sun Dec 4 20:22:03 EST 2022 from SVN revision 249613
Copyright © 2005-2021 MAK Technologies. All Rights Reserved (www.mak.com)