QGIS API Documentation  3.37.0-Master (a5b4d9743e8)
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 
44 void 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  } );
125  return sPropertyDefinitions;
126 }
127 
128 void 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  };
137 }
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 & dataDefinedProperties()
Returns a reference to the object's property collection, used for data defined overrides.
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 ...
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.
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.
virtual bool isVisibleInZRange(const QgsDoubleRange &range) const
Returns true if the layer should be visible and rendered for the specified z range.
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:5089
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference)
Definition: qgis.h:5172
QMap< int, QgsPropertyDefinition > QgsPropertiesDefinition
Definition of available properties.