24using namespace Qt::StringLiterals;
28QString QgsOrthogonalizeAlgorithm::name()
const
30 return u
"orthogonalize"_s;
33QString QgsOrthogonalizeAlgorithm::displayName()
const
35 return QObject::tr(
"Orthogonalize" );
38QStringList QgsOrthogonalizeAlgorithm::tags()
const
40 return QObject::tr(
"rectangle,perpendicular,right,angles,square,quadrilateralise" ).split(
',' );
43QString QgsOrthogonalizeAlgorithm::group()
const
45 return QObject::tr(
"Vector geometry" );
48QString QgsOrthogonalizeAlgorithm::groupId()
const
50 return u
"vectorgeometry"_s;
53QString QgsOrthogonalizeAlgorithm::shortHelpString()
const
55 return QObject::tr(
"Takes a line or polygon layer and attempts to orthogonalize "
56 "all the geometries in the layer. This process shifts the nodes "
57 "in the geometries to try to make every angle in the geometry "
58 "either a right angle or a straight line.\n\n"
59 "The angle tolerance parameter is used to specify the maximum "
60 "deviation from a right angle or straight line a node can have "
61 "for it to be adjusted. Smaller tolerances mean that only nodes "
62 "which are already closer to right angles will be adjusted, and "
63 "larger tolerances mean that nodes which deviate further from "
64 "right angles will also be adjusted.\n\n"
65 "The algorithm is iterative. Setting a larger number for the maximum "
66 "iterations will result in a more orthogonal geometry at the cost of "
67 "extra processing time." );
70QString QgsOrthogonalizeAlgorithm::shortDescription()
const
72 return QObject::tr(
"Takes a line or polygon layer and attempts to orthogonalize "
73 "all the geometries in the layer." );
76QString QgsOrthogonalizeAlgorithm::outputName()
const
78 return QObject::tr(
"Orthogonalized" );
81QList<int> QgsOrthogonalizeAlgorithm::inputLayerTypes()
const
86QgsOrthogonalizeAlgorithm *QgsOrthogonalizeAlgorithm::createInstance()
const
88 return new QgsOrthogonalizeAlgorithm();
91void QgsOrthogonalizeAlgorithm::initParameters(
const QVariantMap & )
93 auto angleToleranceParam = std::make_unique<QgsProcessingParameterNumber>( u
"ANGLE_TOLERANCE"_s, QObject::tr(
"Maximum angle tolerance (degrees)" ),
Qgis::ProcessingNumberParameterType::Double, 15.0,
false, 0.0, 45.0 );
94 angleToleranceParam->setIsDynamic(
true );
96 angleToleranceParam->setDynamicLayerParameterName( u
"INPUT"_s );
97 addParameter( angleToleranceParam.release() );
99 auto maxIterations = std::make_unique<QgsProcessingParameterNumber>(
101 QObject::tr(
"Maximum algorithm iterations" ),
103 1000,
false, 1, 10000
106 addParameter( maxIterations.release() );
111 mAngleTolerance = parameterAsDouble( parameters, u
"ANGLE_TOLERANCE"_s, context );
113 if ( mDynamicAngleTolerance )
114 mAngleToleranceProperty = parameters.value( u
"ANGLE_TOLERANCE"_s ).value<
QgsProperty>();
116 mMaxIterations = parameterAsDouble( parameters, u
"MAX_ITERATIONS"_s, context );
127 double angleTolerance = mAngleTolerance;
128 if ( mDynamicAngleTolerance )
129 angleTolerance = mAngleToleranceProperty.valueAsDouble( context.
expressionContext(), angleTolerance );
132 if ( outputGeometry.
isNull() )
@ VectorPolygon
Vector polygon layers.
@ VectorLine
Vector line layers.
@ Advanced
Parameter is an advanced parameter which should be hidden from users by default.
@ Double
Double/float values.
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
bool hasGeometry() const
Returns true if the feature has an associated geometry.
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
A geometry is the spatial representation of a feature.
QgsGeometry orthogonalize(double tolerance=1.0E-8, int maxIterations=1000, double angleThreshold=15.0) const
Attempts to orthogonalize a line or polygon geometry by shifting vertices to make the geometries angl...
Contains information about the context in which a processing algorithm is executed.
QgsExpressionContext & expressionContext()
Returns the expression context.
Custom exception class for processing related exceptions.
Base class for providing feedback from a processing algorithm.
static bool isDynamic(const QVariantMap ¶meters, const QString &name)
Returns true if the parameter with matching name is a dynamic parameter, and must be evaluated once f...
Definition for a property.
@ Double
Double value (including negative values).
A store for object properties.
QList< QgsFeature > QgsFeatureList