QGIS API Documentation  3.16.0-Hannover (43b64b13f3)
qgsgeometryoptions.cpp
Go to the documentation of this file.
1 /***************************************************************************
2  qgsgeometryoptions.cpp
3  -------------------
4  begin : Aug 23, 2018
5  copyright : (C) 2018 by Matthias Kuhn
6  email : [email protected]
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 
18 #include "qgsgeometryoptions.h"
19 
20 #include "qgsxmlutils.h"
21 
22 #include "qgssettings.h"
23 
25 {
26  mGeometryChecks = QgsSettings().value( QStringLiteral( "geometry_validation/default_checks" ) ).toString().split( ',' ) ;
27 }
28 
30 {
31  return mRemoveDuplicateNodes;
32 }
33 
35 {
36  mRemoveDuplicateNodes = value;
38 }
39 
41 {
42  return mGeometryPrecision;
43 }
44 
46 {
47  mGeometryPrecision = value;
49 }
50 
52 {
53  return mGeometryPrecision != 0.0 || mRemoveDuplicateNodes;
54 }
55 
56 void QgsGeometryOptions::apply( QgsGeometry &geometry ) const
57 {
58  if ( mGeometryPrecision != 0.0 )
59  geometry = geometry.snappedToGrid( mGeometryPrecision, mGeometryPrecision );
60 
61  if ( mRemoveDuplicateNodes )
62  geometry.removeDuplicateNodes( 4 * std::numeric_limits<double>::epsilon(), true );
63 }
64 
66 {
67  return mGeometryChecks;
68 }
69 
70 void QgsGeometryOptions::setGeometryChecks( const QStringList &geometryChecks )
71 {
72  mGeometryChecks = geometryChecks;
73  emit geometryChecksChanged();
74 }
75 
76 QVariantMap QgsGeometryOptions::checkConfiguration( const QString &checkId ) const
77 {
78  return mCheckConfiguration.value( checkId ).toMap();
79 }
80 
81 void QgsGeometryOptions::setCheckConfiguration( const QString &checkId, const QVariantMap &checkConfiguration )
82 {
83  mCheckConfiguration[checkId] = checkConfiguration;
85 }
86 
87 void QgsGeometryOptions::writeXml( QDomNode &node ) const
88 {
89  QDomDocument doc = node.ownerDocument();
90  QDomElement geometryOptionsElement = doc.createElement( QStringLiteral( "geometryOptions" ) );
91  node.appendChild( geometryOptionsElement );
92 
93  geometryOptionsElement.setAttribute( QStringLiteral( "removeDuplicateNodes" ), mRemoveDuplicateNodes ? 1 : 0 );
94  geometryOptionsElement.setAttribute( QStringLiteral( "geometryPrecision" ), mGeometryPrecision );
95 
96  QDomElement activeCheckListElement = QgsXmlUtils::writeVariant( mGeometryChecks, doc );
97  activeCheckListElement.setTagName( QStringLiteral( "activeChecks" ) );
98  geometryOptionsElement.appendChild( activeCheckListElement );
99  QDomElement checkConfigurationElement = QgsXmlUtils::writeVariant( mCheckConfiguration, doc );
100  checkConfigurationElement.setTagName( QStringLiteral( "checkConfiguration" ) );
101  geometryOptionsElement.appendChild( checkConfigurationElement );
102 }
103 
104 void QgsGeometryOptions::readXml( const QDomNode &node )
105 {
106  QDomElement geometryOptionsElement = node.toElement();
107  setGeometryPrecision( geometryOptionsElement.attribute( QStringLiteral( "geometryPrecision" ), QStringLiteral( "0.0" ) ).toDouble() );
108  setRemoveDuplicateNodes( geometryOptionsElement.attribute( QStringLiteral( "removeDuplicateNodes" ), QStringLiteral( "0" ) ).toInt() == 1 );
109 
110  QDomElement activeChecksElem = node.namedItem( QStringLiteral( "activeChecks" ) ).toElement();
111  const QVariant activeChecks = QgsXmlUtils::readVariant( activeChecksElem );
112  setGeometryChecks( activeChecks.toStringList() );
113 
114  QDomElement checkConfigurationElem = node.namedItem( QStringLiteral( "checkConfiguration" ) ).toElement();
115  const QVariant checkConfiguration = QgsXmlUtils::readVariant( checkConfigurationElem );
116  mCheckConfiguration = checkConfiguration.toMap();
117 }
QgsGeometryOptions::checkConfigurationChanged
void checkConfigurationChanged()
Access the configuration for the check checkId.
QgsGeometryOptions::geometryPrecision
double geometryPrecision() const
The precision in which geometries on this layer should be saved.
Definition: qgsgeometryoptions.cpp:40
QgsGeometryOptions::removeDuplicateNodesChanged
void removeDuplicateNodesChanged()
Automatically remove duplicate nodes on all geometries which are edited on this layer.
QgsSettings::value
QVariant value(const QString &key, const QVariant &defaultValue=QVariant(), Section section=NoSection) const
Returns the value for setting key.
Definition: qgssettings.cpp:174
QgsGeometry::removeDuplicateNodes
bool removeDuplicateNodes(double epsilon=4 *std::numeric_limits< double >::epsilon(), bool useZValues=false)
Removes duplicate nodes from the geometry, wherever removing the nodes does not result in a degenerat...
Definition: qgsgeometry.cpp:1120
QgsGeometryOptions::geometryChecks
QStringList geometryChecks() const
A list of activated geometry checks.
Definition: qgsgeometryoptions.cpp:65
QgsSettings
This class is a composition of two QSettings instances:
Definition: qgssettings.h:62
QgsGeometryOptions::setGeometryChecks
void setGeometryChecks(const QStringList &geometryChecks)
A list of activated geometry checks.
Definition: qgsgeometryoptions.cpp:70
QgsGeometryOptions::removeDuplicateNodes
bool removeDuplicateNodes() const
Automatically remove duplicate nodes on all geometries which are edited on this layer.
Definition: qgsgeometryoptions.cpp:29
QgsGeometryOptions::isActive
bool isActive() const
Determines if at least one fix is enabled.
Definition: qgsgeometryoptions.cpp:51
QgsXmlUtils::readVariant
static QVariant readVariant(const QDomElement &element)
Read a QVariant from a QDomElement.
Definition: qgsxmlutils.cpp:251
QgsGeometryOptions::apply
void apply(QgsGeometry &geometry) const
Apply any fixes configured on this class to geometry.
Definition: qgsgeometryoptions.cpp:56
QgsGeometryOptions::writeXml
void writeXml(QDomNode &node) const
Write the geometry options to the node.
Definition: qgsgeometryoptions.cpp:87
QgsGeometryOptions::setGeometryPrecision
void setGeometryPrecision(double value)
The precision in which geometries on this layer should be saved.
Definition: qgsgeometryoptions.cpp:45
qgsxmlutils.h
QgsGeometryOptions::QgsGeometryOptions
QgsGeometryOptions()
Create a new QgsGeometryOptions object.
Definition: qgsgeometryoptions.cpp:24
QgsGeometryOptions::geometryPrecisionChanged
void geometryPrecisionChanged()
The precision in which geometries on this layer should be saved.
QgsGeometryOptions::setRemoveDuplicateNodes
void setRemoveDuplicateNodes(bool value)
Automatically remove duplicate nodes on all geometries which are edited on this layer.
Definition: qgsgeometryoptions.cpp:34
QgsGeometry
A geometry is the spatial representation of a feature.
Definition: qgsgeometry.h:124
QgsGeometry::snappedToGrid
QgsGeometry snappedToGrid(double hSpacing, double vSpacing, double dSpacing=0, double mSpacing=0) const
Returns a new geometry with all points or vertices snapped to the closest point of the grid.
Definition: qgsgeometry.cpp:1111
QgsGeometryOptions::setCheckConfiguration
void setCheckConfiguration(const QString &checkId, const QVariantMap &checkConfiguration)
Set the configuration for the check checkId.
Definition: qgsgeometryoptions.cpp:81
qgssettings.h
QgsGeometryOptions::geometryChecksChanged
void geometryChecksChanged()
A list of activated geometry checks.
qgsgeometryoptions.h
QgsXmlUtils::writeVariant
static QDomElement writeVariant(const QVariant &value, QDomDocument &doc)
Write a QVariant to a QDomElement.
Definition: qgsxmlutils.cpp:106
QgsGeometryOptions::checkConfiguration
QVariantMap checkConfiguration(const QString &checkId) const
Access the configuration for the check checkId.
Definition: qgsgeometryoptions.cpp:76
QgsGeometryOptions::readXml
void readXml(const QDomNode &node)
Read the geometry options from node.
Definition: qgsgeometryoptions.cpp:104