28 #include <osgTerrain/TerrainTile>
29 #include <osgEarth/Profile>
30 #include <osgEarth/TileKey>
31 #include <osgEarth/MapNode>
32 #include <osgEarth/TerrainTileModel>
38 #include <boost/ptr_container/ptr_vector.hpp>
40 #include <tbb/spin_rw_mutex.h>
46 class DtGeodeticCoord;
72 explicit Extent(
const osgEarth::TileKey&);
81 const osgEarth::TileKey& key);
106 virtual bool insideValidArea(
const DtPoint& p)
const;
114 virtual bool extentInsideValidArea(
double x1,
double y1,
double x2,
double y2)
const;
120 virtual bool extentOutsideValidArea(
double x1,
double y1,
double x2,
double y2)
const;
127 virtual bool addActiveTileKey(
const osgEarth::TileKey& key) = 0;
134 virtual void recomputeActiveTileKeyAreas() = 0;
144 virtual std::string description()
const = 0;
147 virtual unsigned numberOfVertices()
const = 0;
152 virtual unsigned numberOfTrianglesForVertices()
const;
155 virtual void getTriangleVertices(
unsigned xindex,
unsigned yindex,
double& x,
double& y)
const = 0;
159 virtual void heightfieldIndexForTriangleIndex(
160 unsigned triangleXIndex,
unsigned triangleYIndex,
161 unsigned& heightFieldXUsed,
unsigned& heightFieldYUsed)
const = 0;
164 virtual double interpolateHeight(
165 unsigned triangleXIndex,
unsigned triangleYIndex,
166 unsigned* heightFieldXUsed = 0,
unsigned* heightFieldYUsed = 0)
const = 0;
188 virtual bool findIntersections(
190 unsigned x1,
unsigned y1,
unsigned x2,
unsigned y2,
192 bool singleCell =
false,
193 bool insideValidAreaChecked =
false)
const;
197 virtual bool findIntersections(
207 virtual void findTriangles(
209 unsigned x1,
unsigned y1,
unsigned x2,
unsigned y2,
211 bool singleCell =
false,
212 bool insideValidAreaChecked =
false)
const;
216 virtual void findTriangles(
233 osgEarth::MapNode* mapNode);
238 virtual bool useRawElevation()
const;
242 virtual unsigned getMaxLOD()
const;
243 virtual void setMaxLOD(
unsigned);
252 virtual double triangleOutputMergeTolerance()
const;
253 virtual void setTriangleOutputMergeTolerance(
double tol);
254 virtual double intersetionTriangleMergeTolerance()
const;
255 virtual void setIntersectionTriangleMergeTolerance(
double tol);
262 virtual double maskTolerance()
const;
263 virtual void setMaskTolerance(
double tol);
267 virtual unsigned tileCount()
const;
270 virtual unsigned cellCount()
const;
275 virtual void addPagedInTile(
276 const osgEarth::TileKey& tilekey,
277 const boost::shared_ptr<DtTileData>& tileData);
280 virtual void removePagedInTile(
const osgEarth::TileKey tileKey);
291 virtual bool findHeightFieldIntersections(
294 bool* dataAvailable = 0)
const;
296 virtual void processTriangles(
325 virtual void drawElevation();
332 virtual osgEarth::TileKey getBestTileKey(
const osgEarth::TileKey&)
const;
357 bool chordIntersects(
const DtChord& chord)
const;
358 bool extentIntersects(
const DtExtent& extent)
const;
359 bool sphereIntersects(
const DtSphere& sphere)
const;
361 bool chordIntersectsSubTile(
const DtChord& chord,
int i)
const;
362 bool extentIntersectsSubTile(
const DtExtent& shape,
int i)
const;
363 bool sphereIntersectsSubTile(
const DtSphere& sphere,
int i)
const;
372 std::vector< boost::shared_ptr<DtTileData> >& data)
const;
374 boost::shared_ptr<DtTileData> findOldest()
const;
376 bool addTile(
const osgEarth::TileKey& key,
const boost::shared_ptr<DtTileData>& data);
377 void removeTile(
const osgEarth::TileKey& tilekey);
378 unsigned tileCount()
const;
379 unsigned cellCount()
const;
381 const osgEarth::TileKey
tileKey()
const {
return myTileKey; }
385 void getSubTileExtent(
unsigned i,
DtVector& lower,
DtVector& upper,
bool useElevation =
true)
const;
388 bool isTileEmpty()
const;
392 virtual void recomputePagedInData();
420 virtual void convertGeometry(
422 std::vector<DtTerrainPagingGeometryPtr>& output)
const;
424 virtual bool convertGeometry(
426 std::vector<DtTerrainPagingGeometryPtr>& output)
const;
428 virtual bool convertGeometry(
430 std::vector<DtTerrainPagingGeometryPtr>& output)
const;
432 virtual bool convertGeometry(
434 std::vector<DtTerrainPagingGeometryPtr>& output)
const;
436 virtual bool nearCenterOfEarth(
const DtChord& chord)
const;
438 virtual bool findData(
440 std::vector< boost::shared_ptr<DtTileData> >& data,
443 virtual void findMissing(
447 virtual boost::shared_ptr<DtTileData> findOldest()
const;
448 virtual boost::shared_ptr<DtTileData> findOldestUnlocked()
const;