QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgselevationmap.h
Go to the documentation of this file.
1/***************************************************************************
2 qgselevationmap.h
3 --------------------------------------
4 Date : August 2022
5 Copyright : (C) 2022 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#ifndef QGSELEVATIONMAP_H
17#define QGSELEVATIONMAP_H
18
19#include "qgis.h"
20#include "qgis_sip.h"
21
22#include <QImage>
23#include <memory>
24
25class QgsRasterBlock;
26
42class CORE_EXPORT QgsElevationMap
43{
44 public:
45
47 QgsElevationMap() = default;
48
50 explicit QgsElevationMap( const QSize &size, float devicePixelRatio = 1.0 );
51
59 explicit QgsElevationMap( const QImage &image );
60
62 QgsElevationMap( const QgsElevationMap &other );
63
79 void applyEyeDomeLighting( QImage &image, int distance, float strength, float rendererScale ) const;
80
99 void applyHillshading( QImage &image, bool multiDirectional, double altitude, double azimuth, double zFactor, double cellSizeX, double cellSizeY ) const;
100
102 QImage rawElevationImage() const { return mElevationImage; }
103
104#ifndef SIP_RUN
105
110 QRgb *rawElevationImageData() { return reinterpret_cast<QRgb *>( mElevationImage.bits() ); }
111#endif
112
114 QPainter *painter() const;
115
125 void combine( const QgsElevationMap &otherElevationMap, Qgis::ElevationMapCombineMethod method );
126
131 void fillWithRasterBlock( QgsRasterBlock *block, int top, int left, double zScale = 1.0, double offset = 0.0 ) SIP_SKIP;
132
138 bool isValid() const;
139
141 static QRgb encodeElevation( float z );
143 static float decodeElevation( QRgb colorRaw );
144
146 static std::unique_ptr<QgsElevationMap> fromRasterBlock( QgsRasterBlock *block ) SIP_SKIP;
147
149 inline bool isNoData( QRgb colorRaw ) const {return colorRaw == 0;}
150
152 inline float noDataValue() const {return decodeElevation( 0 );}
153
154 QgsElevationMap &operator=( const QgsElevationMap &other );
155
156 private:
157
158 mutable QImage mElevationImage;
159 mutable std::unique_ptr<QPainter> mPainter;
160};
161
162#endif // QGSELEVATIONMAP_H
ElevationMapCombineMethod
Methods used to select the elevation when two elevation maps are combined.
Definition: qgis.h:4026
Stores digital elevation model in a raster image which may get updated as a part of map layer renderi...
QgsElevationMap()=default
Default constructor.
float noDataValue() const
Returns the no data value for the elevation map.
QImage rawElevationImage() const
Returns raw elevation image with elevations encoded as color values.
QRgb * rawElevationImageData()
Returns pointer to the actual elevation image data.
Raster data container.
std::unique_ptr< GEOSGeometry, GeosDeleter > unique_ptr
Scoped GEOS pointer.
Definition: qgsgeos.h:73
#define SIP_SKIP
Definition: qgis_sip.h:126