Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsgeometryoptions.cpp 3 : : ------------------- 4 : : begin : Aug 23, 2018 5 : : copyright : (C) 2018 by Matthias Kuhn 6 : : email : matthias@opengis.ch 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 : : 24 : 78 : QgsGeometryOptions::QgsGeometryOptions() 25 : 156 : { 26 : 156 : mGeometryChecks = QgsSettings().value( QStringLiteral( "geometry_validation/default_checks" ) ).toString().split( ',' ) ; 27 : 78 : } 28 : : 29 : 0 : bool QgsGeometryOptions::removeDuplicateNodes() const 30 : : { 31 : 0 : return mRemoveDuplicateNodes; 32 : : } 33 : : 34 : 0 : void QgsGeometryOptions::setRemoveDuplicateNodes( bool value ) 35 : : { 36 : 0 : mRemoveDuplicateNodes = value; 37 : 0 : emit removeDuplicateNodesChanged(); 38 : 0 : } 39 : : 40 : 0 : double QgsGeometryOptions::geometryPrecision() const 41 : : { 42 : 0 : return mGeometryPrecision; 43 : : } 44 : : 45 : 0 : void QgsGeometryOptions::setGeometryPrecision( double value ) 46 : : { 47 : 0 : mGeometryPrecision = value; 48 : 0 : emit geometryPrecisionChanged(); 49 : 0 : } 50 : : 51 : 2 : bool QgsGeometryOptions::isActive() const 52 : : { 53 : 2 : return mGeometryPrecision != 0.0 || mRemoveDuplicateNodes; 54 : : } 55 : : 56 : 0 : void QgsGeometryOptions::apply( QgsGeometry &geometry ) const 57 : : { 58 : 0 : if ( mGeometryPrecision != 0.0 ) 59 : 0 : geometry = geometry.snappedToGrid( mGeometryPrecision, mGeometryPrecision ); 60 : : 61 : 0 : if ( mRemoveDuplicateNodes ) 62 : 0 : geometry.removeDuplicateNodes( 4 * std::numeric_limits<double>::epsilon(), true ); 63 : 0 : } 64 : : 65 : 0 : QStringList QgsGeometryOptions::geometryChecks() const 66 : : { 67 : 0 : return mGeometryChecks; 68 : : } 69 : : 70 : 0 : void QgsGeometryOptions::setGeometryChecks( const QStringList &geometryChecks ) 71 : : { 72 : 0 : mGeometryChecks = geometryChecks; 73 : 0 : emit geometryChecksChanged(); 74 : 0 : } 75 : : 76 : 0 : QVariantMap QgsGeometryOptions::checkConfiguration( const QString &checkId ) const 77 : : { 78 : 0 : return mCheckConfiguration.value( checkId ).toMap(); 79 : 0 : } 80 : : 81 : 0 : void QgsGeometryOptions::setCheckConfiguration( const QString &checkId, const QVariantMap &checkConfiguration ) 82 : : { 83 : 0 : mCheckConfiguration[checkId] = checkConfiguration; 84 : 0 : emit checkConfigurationChanged(); 85 : 0 : } 86 : : 87 : 0 : void QgsGeometryOptions::writeXml( QDomNode &node ) const 88 : : { 89 : 0 : QDomDocument doc = node.ownerDocument(); 90 : 0 : QDomElement geometryOptionsElement = doc.createElement( QStringLiteral( "geometryOptions" ) ); 91 : 0 : node.appendChild( geometryOptionsElement ); 92 : : 93 : 0 : geometryOptionsElement.setAttribute( QStringLiteral( "removeDuplicateNodes" ), mRemoveDuplicateNodes ? 1 : 0 ); 94 : 0 : geometryOptionsElement.setAttribute( QStringLiteral( "geometryPrecision" ), mGeometryPrecision ); 95 : : 96 : 0 : QDomElement activeCheckListElement = QgsXmlUtils::writeVariant( mGeometryChecks, doc ); 97 : 0 : activeCheckListElement.setTagName( QStringLiteral( "activeChecks" ) ); 98 : 0 : geometryOptionsElement.appendChild( activeCheckListElement ); 99 : 0 : QDomElement checkConfigurationElement = QgsXmlUtils::writeVariant( mCheckConfiguration, doc ); 100 : 0 : checkConfigurationElement.setTagName( QStringLiteral( "checkConfiguration" ) ); 101 : 0 : geometryOptionsElement.appendChild( checkConfigurationElement ); 102 : 0 : } 103 : : 104 : 0 : void QgsGeometryOptions::readXml( const QDomNode &node ) 105 : : { 106 : 0 : QDomElement geometryOptionsElement = node.toElement(); 107 : 0 : setGeometryPrecision( geometryOptionsElement.attribute( QStringLiteral( "geometryPrecision" ), QStringLiteral( "0.0" ) ).toDouble() ); 108 : 0 : setRemoveDuplicateNodes( geometryOptionsElement.attribute( QStringLiteral( "removeDuplicateNodes" ), QStringLiteral( "0" ) ).toInt() == 1 ); 109 : : 110 : 0 : QDomElement activeChecksElem = node.namedItem( QStringLiteral( "activeChecks" ) ).toElement(); 111 : 0 : const QVariant activeChecks = QgsXmlUtils::readVariant( activeChecksElem ); 112 : 0 : setGeometryChecks( activeChecks.toStringList() ); 113 : : 114 : 0 : QDomElement checkConfigurationElem = node.namedItem( QStringLiteral( "checkConfiguration" ) ).toElement(); 115 : 0 : const QVariant checkConfiguration = QgsXmlUtils::readVariant( checkConfigurationElem ); 116 : 0 : mCheckConfiguration = checkConfiguration.toMap(); 117 : 0 : }