QGIS API Documentation 3.41.0-Master (3440c17df1d)
Loading...
Searching...
No Matches
qgsterraingenerator.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsterraingenerator.cpp
3 --------------------------------------
4 Date : July 2017
5 Copyright : (C) 2017 by Martin Dobias
6 Email : wonder dot sk at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#include "qgsterraingenerator.h"
17#include "moc_qgsterraingenerator.cpp"
18
19#include "qgs3dmapsettings.h"
20#include "qgs3dutils.h"
22
24{
26
27 float hMin, hMax;
28 rootChunkHeightRange( hMin, hMax );
29 return QgsBox3D( te.xMinimum(), te.yMinimum(), hMin * map.terrainVerticalScale(),
30 te.xMaximum(), te.yMaximum(), hMax * map.terrainVerticalScale() );
31}
32
34{
36
37 // use texel size as the error
38 return te.width() / map.mapTileResolution();
39}
40
41void QgsTerrainGenerator::rootChunkHeightRange( float &hMin, float &hMax ) const
42{
43 // TODO: makes sense to have kind of default implementation?
44 hMin = 0;
45 hMax = 400;
46}
47
48float QgsTerrainGenerator::heightAt( double x, double y, const Qgs3DRenderContext &context ) const
49{
50 Q_UNUSED( x )
51 Q_UNUSED( y )
52 Q_UNUSED( context )
53 return 0.f;
54}
55
57{
58 switch ( type )
59 {
61 return QStringLiteral( "flat" );
63 return QStringLiteral( "dem" );
65 return QStringLiteral( "online" );
67 return QStringLiteral( "mesh" );
69 return QStringLiteral( "quantizedmesh" );
70 }
71 return QString();
72}
73
75{
76 return mIsValid;
77}
double terrainVerticalScale() const
Returns vertical scale (exaggeration) of terrain.
int mapTileResolution() const
Returns resolution (in pixels) of the texture of a terrain tile.
QgsCoordinateReferenceSystem crs() const
Returns coordinate reference system used in the 3D scene.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context, which stores various information regarding which datum tran...
static QgsRectangle tryReprojectExtent2D(const QgsRectangle &extent, const QgsCoordinateReferenceSystem &crs1, const QgsCoordinateReferenceSystem &crs2, const QgsCoordinateTransformContext &context)
Reprojects extent from crs1 to crs2 coordinate reference system with context context.
A 3-dimensional box composed of x, y, z coordinates.
Definition qgsbox3d.h:43
A rectangle specified with double values.
double xMinimum
double yMinimum
double xMaximum
double yMaximum
Type
Enumeration of the available terrain generators.
@ QuantizedMesh
Terrain is built from quantized mesh tiles.
@ Dem
Terrain is built from raster layer with digital elevation model.
@ Online
Terrain is built from downloaded tiles with digital elevation model.
@ Mesh
Terrain is built from mesh layer with z value on vertices.
@ Flat
The whole terrain is flat area.
virtual Type type() const =0
What texture generator implementation is this.
virtual QgsBox3D rootChunkBox3D(const Qgs3DMapSettings &map) const
Returns 3D box (in map coordinates) of the root chunk.
virtual float rootChunkError(const Qgs3DMapSettings &map) const
Returns error of the root chunk in world coordinates.
static QString typeToString(Type type)
Converts terrain generator type enumeration into a string.
virtual QgsRectangle rootChunkExtent() const =0
extent of the terrain's root chunk in terrain's CRS
virtual void rootChunkHeightRange(float &hMin, float &hMax) const
Returns height range of the root chunk in world coordinates.
virtual float heightAt(double x, double y, const Qgs3DRenderContext &context) const
Returns height at (x,y) in map's CRS.
virtual QgsCoordinateReferenceSystem crs() const
Returns CRS of the terrain.
bool isValid() const
Returns whether the terrain generator is valid.