QGIS API Documentation 3.37.0-Master (fdefdf9c27f)
qgsmaplayerelevationproperties.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmaplayerelevationproperties.cpp
3 ---------------
4 begin : November 2020
5 copyright : (C) 2020 by Nyall Dawson
6 email : nyall dot dawson dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
19#include <mutex>
20
21
23
25 : QObject( parent )
26{
27}
28
30{
31 return false;
32}
33
35{
36
37}
38
40{
41 return QString();
42}
43
44void QgsMapLayerElevationProperties::writeCommonProperties( QDomElement &element, QDomDocument &doc, const QgsReadWriteContext & )
45{
46 QDomElement elemDataDefinedProperties = doc.createElement( QStringLiteral( "data-defined-properties" ) );
47 mDataDefinedProperties.writeXml( elemDataDefinedProperties, propertyDefinitions() );
48 element.appendChild( elemDataDefinedProperties );
49
50 element.setAttribute( QStringLiteral( "zoffset" ), qgsDoubleToString( mZOffset ) );
51 element.setAttribute( QStringLiteral( "zscale" ), qgsDoubleToString( mZScale ) );
52}
53
55{
56 const QDomElement elemDataDefinedProperties = element.firstChildElement( QStringLiteral( "data-defined-properties" ) );
57 if ( !elemDataDefinedProperties.isNull() )
58 mDataDefinedProperties.readXml( elemDataDefinedProperties, propertyDefinitions() );
59
60 mZOffset = element.attribute( QStringLiteral( "zoffset" ), QStringLiteral( "0" ) ).toDouble();
61 mZScale = element.attribute( QStringLiteral( "zscale" ), QStringLiteral( "1" ) ).toDouble();
62}
63
65{
67 mZScale = other->zScale();
68 mZOffset = other->zOffset();
69}
70
72{
73 return true;
74}
75
77{
78 return QgsDoubleRange();
79}
80
82{
83 return false;
84}
85
87{
88 if ( qgsDoubleNear( offset, mZOffset ) )
89 return;
90
91 mZOffset = offset;
92 emit changed();
93 emit zOffsetChanged();
95}
96
98{
99 if ( qgsDoubleNear( scale, mZScale ) )
100 return;
101
102 mZScale = scale;
103 emit changed();
104 emit zScaleChanged();
106}
107
109{
110 if ( mDataDefinedProperties == collection )
111 return;
112
113 mDataDefinedProperties = collection;
114 emit changed();
116}
117
119{
120 static std::once_flag initialized;
121 std::call_once( initialized, [ = ]( )
122 {
123 initPropertyDefinitions();
124 } );
126}
127
128void QgsMapLayerElevationProperties::initPropertyDefinitions()
129{
130 const QString origin = QStringLiteral( "elevation" );
131
133 {
134 { static_cast< int >( QgsMapLayerElevationProperties::Property::ZOffset ), QgsPropertyDefinition( "ZOffset", QObject::tr( "Offset" ), QgsPropertyDefinition::Double, origin ) },
135 { static_cast< int >( QgsMapLayerElevationProperties::Property::ExtrusionHeight ), QgsPropertyDefinition( "ExtrusionHeight", QObject::tr( "Extrusion height" ), QgsPropertyDefinition::DoublePositive, origin ) },
136 { static_cast< int >( QgsMapLayerElevationProperties::Property::RasterPerBandLowerElevation ), QgsPropertyDefinition( "RasterPerBandLowerElevation", QObject::tr( "Lower elevation for band" ), QgsPropertyDefinition::Double, origin ) },
137 { static_cast< int >( QgsMapLayerElevationProperties::Property::RasterPerBandUpperElevation ), QgsPropertyDefinition( "RasterPerBandUpperElevation", QObject::tr( "Upper elevation for band" ), QgsPropertyDefinition::Double, origin ) },
138 };
139}
virtual bool readXml(const QDomElement &collectionElem, const QgsPropertiesDefinition &definitions)
Reads property collection state from an XML element.
virtual bool writeXml(QDomElement &collectionElem, const QgsPropertiesDefinition &definitions) const
Writes the current state of the property collection into an XML element.
QgsRange which stores a range of double values.
Definition: qgsrange.h:231
Base class for storage of map layer elevation properties.
void zScaleChanged()
Emitted when the z scale changes.
QgsPropertyCollection mDataDefinedProperties
Property collection for data defined elevation settings.
void writeCommonProperties(QDomElement &element, QDomDocument &doc, const QgsReadWriteContext &context)
Writes common class properties to a DOM element, to be used later with readXml().
void profileGenerationPropertyChanged()
Emitted when any of the elevation properties which relate solely to generation of elevation profiles ...
virtual bool isVisibleInZRange(const QgsDoubleRange &range, QgsMapLayer *layer=nullptr) const
Returns true if the layer should be visible and rendered for the specified z range.
QgsPropertyCollection & dataDefinedProperties()
Returns a reference to the object's property collection, used for data defined overrides.
void setDataDefinedProperties(const QgsPropertyCollection &collection)
Sets the object's property collection, used for data defined overrides.
QgsMapLayerElevationProperties(QObject *parent)
Constructor for QgsMapLayerElevationProperties, with the specified parent object.
void readCommonProperties(const QDomElement &element, const QgsReadWriteContext &context)
Reads common class properties from a DOM element previously written by writeXml().
virtual QString htmlSummary() const
Returns a HTML formatted summary of the properties.
static QgsPropertiesDefinition propertyDefinitions()
Returns the definitions for data defined properties available for use in elevation properties.
void changed()
Emitted when any of the elevation properties have changed.
void copyCommonProperties(const QgsMapLayerElevationProperties *other)
Copies common properties from another object.
@ RasterPerBandUpperElevation
Upper elevation for each raster band (since QGIS 3.38)
@ RasterPerBandLowerElevation
Lower elevation for each raster band (since QGIS 3.38)
void zOffsetChanged()
Emitted when the z offset changes.
double zScale() const
Returns the z scale, which is a scaling factor which should be applied to z values from the layer.
void setZOffset(double offset)
Sets the z offset, which is a fixed offset amount which will be added to z values from the layer.
virtual bool showByDefaultInElevationProfilePlots() const
Returns true if the layer should be visible by default in newly created elevation profile plots.
static QgsPropertiesDefinition sPropertyDefinitions
Property definitions.
virtual QgsDoubleRange calculateZRange(QgsMapLayer *layer) const
Attempts to calculate the overall elevation or z range for the specified layer, using the settings de...
virtual void setDefaultsFromLayer(QgsMapLayer *layer)
Sets default properties based on sensible choices for the given map layer.
void setZScale(double scale)
Sets the z scale, which is a scaling factor which will be applied to z values from the layer.
virtual bool hasElevation() const
Returns true if the layer has an elevation or z component.
double zOffset() const
Returns the z offset, which is a fixed offset amount which should be added to z values from the layer...
Base class for all map layer types.
Definition: qgsmaplayer.h:75
A grouped map of multiple QgsProperty objects, each referenced by a integer key value.
Definition for a property.
Definition: qgsproperty.h:45
@ Double
Double value (including negative values)
Definition: qgsproperty.h:55
@ DoublePositive
Positive double value (including 0)
Definition: qgsproperty.h:56
The class is used as a container of context for various read/write operations on other objects.
QString qgsDoubleToString(double a, int precision=17)
Returns a string representation of a double.
Definition: qgis.h:5124
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:5207
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.