23QString QgsOrthogonalizeAlgorithm::name()
const
25 return QStringLiteral(
"orthogonalize" );
28QString QgsOrthogonalizeAlgorithm::displayName()
const
30 return QObject::tr(
"Orthogonalize" );
33QStringList QgsOrthogonalizeAlgorithm::tags()
const
35 return QObject::tr(
"rectangle,perpendicular,right,angles,square,quadrilateralise" ).split(
',' );
38QString QgsOrthogonalizeAlgorithm::group()
const
40 return QObject::tr(
"Vector geometry" );
43QString QgsOrthogonalizeAlgorithm::groupId()
const
45 return QStringLiteral(
"vectorgeometry" );
48QString QgsOrthogonalizeAlgorithm::shortHelpString()
const
50 return QObject::tr(
"Takes a line or polygon layer and attempts to orthogonalize "
51 "all the geometries in the layer. This process shifts the nodes "
52 "in the geometries to try to make every angle in the geometry "
53 "either a right angle or a straight line.\n\n"
54 "The angle tolerance parameter is used to specify the maximum "
55 "deviation from a right angle or straight line a node can have "
56 "for it to be adjusted. Smaller tolerances mean that only nodes "
57 "which are already closer to right angles will be adjusted, and "
58 "larger tolerances mean that nodes which deviate further from "
59 "right angles will also be adjusted.\n\n"
60 "The algorithm is iterative. Setting a larger number for the maximum "
61 "iterations will result in a more orthogonal geometry at the cost of "
62 "extra processing time." );
65QString QgsOrthogonalizeAlgorithm::outputName()
const
67 return QObject::tr(
"Orthogonalized" );
70QList<int> QgsOrthogonalizeAlgorithm::inputLayerTypes()
const
75QgsOrthogonalizeAlgorithm *QgsOrthogonalizeAlgorithm::createInstance()
const
77 return new QgsOrthogonalizeAlgorithm();
80void QgsOrthogonalizeAlgorithm::initParameters(
const QVariantMap & )
82 auto angleToleranceParam = std::make_unique < QgsProcessingParameterNumber >( QStringLiteral(
"ANGLE_TOLERANCE" ), QObject::tr(
"Maximum angle tolerance (degrees)" ),
84 angleToleranceParam->setIsDynamic(
true );
86 angleToleranceParam->setDynamicLayerParameterName( QStringLiteral(
"INPUT" ) );
87 addParameter( angleToleranceParam.release() );
89 std::unique_ptr< QgsProcessingParameterNumber> maxIterations = std::make_unique< QgsProcessingParameterNumber >(
90 QStringLiteral(
"MAX_ITERATIONS" ),
91 QObject::tr(
"Maximum algorithm iterations" ),
93 1000,
false, 1, 10000 );
95 addParameter( maxIterations.release() );
100 mAngleTolerance = parameterAsDouble( parameters, QStringLiteral(
"ANGLE_TOLERANCE" ), context );
102 if ( mDynamicAngleTolerance )
103 mAngleToleranceProperty = parameters.value( QStringLiteral(
"ANGLE_TOLERANCE" ) ).value<
QgsProperty >();
105 mMaxIterations = parameterAsDouble( parameters, QStringLiteral(
"MAX_ITERATIONS" ), context );
116 double angleTolerance = mAngleTolerance;
117 if ( mDynamicAngleTolerance )
118 angleTolerance = mAngleToleranceProperty.valueAsDouble( context.
expressionContext(), angleTolerance );
121 if ( outputGeometry.
isNull() )
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.
@ FlagAdvanced
Parameter is an advanced parameter which should be hidden from users by default.
@ Double
Double/float values.
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...
@ TypeVectorLine
Vector line layers.
@ TypeVectorPolygon
Vector polygon layers.
Definition for a property.
@ Double
Double value (including negative values)
A store for object properties.
QList< QgsFeature > QgsFeatureList