@@ -135,7 +135,7 @@ void QgsGeometryMissingVertexCheck::processPolygon( const QgsCurvePolygon *polyg
135
135
const int numRings = polygon->numInteriorRings ();
136
136
for ( int i = 0 ; i < numRings; ++i )
137
137
{
138
- geomEngine = QgsGeometryCheckerUtils::createGeomEngine ( polygon->exteriorRing ( ), mContext ->tolerance );
138
+ geomEngine = QgsGeometryCheckerUtils::createGeomEngine ( polygon->interiorRing ( i ), mContext ->tolerance );
139
139
boundaries->addGeometry ( geomEngine->buffer ( mContext ->tolerance , 5 ) );
140
140
}
141
141
@@ -177,14 +177,36 @@ void QgsGeometryMissingVertexCheck::processPolygon( const QgsCurvePolygon *polyg
177
177
}
178
178
}
179
179
if ( !alreadyReported )
180
- errors.append ( new QgsGeometryCheckError ( this , layerFeature, QgsPointXY ( pt ) ) );
180
+ {
181
+ std::unique_ptr<QgsGeometryMissingVertexCheckError> error = qgis::make_unique<QgsGeometryMissingVertexCheckError>( this , layerFeature, QgsPointXY ( pt ) );
182
+ error->setAffectedAreaBBox ( contextBoundingBox ( polygon, vertexId, pt ) );
183
+
184
+ errors.append ( error.release () );
185
+ }
181
186
}
182
187
}
183
188
}
184
189
}
185
190
}
186
191
}
187
192
193
+ QgsRectangle QgsGeometryMissingVertexCheck::contextBoundingBox ( const QgsCurvePolygon *polygon, const QgsVertexId &vertexId, const QgsPoint &point ) const
194
+ {
195
+ QgsVertexId vertexBefore;
196
+ QgsVertexId vertexAfter;
197
+
198
+ polygon->adjacentVertices ( vertexId, vertexBefore, vertexAfter );
199
+
200
+ QgsPoint ptBefore = polygon->vertexAt ( vertexBefore );
201
+ QgsPoint ptAt = polygon->vertexAt ( vertexId );
202
+ QgsPoint ptAfter = polygon->vertexAt ( vertexAfter );
203
+
204
+ double length = std::abs ( ptAt.distance ( ptBefore ) ) + std::abs ( ptAt.distance ( ptAfter ) );
205
+
206
+ QgsRectangle rect ( point.x () - length / 2 , point.y () - length / 2 , point.x () + length / 2 , point.y () + length / 2 );
207
+ return rect;
208
+ }
209
+
188
210
QString QgsGeometryMissingVertexCheck::id () const
189
211
{
190
212
return factoryId ();
@@ -234,3 +256,19 @@ QgsGeometryCheck::CheckType QgsGeometryMissingVertexCheck::factoryCheckType()
234
256
{
235
257
return QgsGeometryCheck::LayerCheck;
236
258
}
259
+ // /@endcond private
260
+
261
+ QgsGeometryMissingVertexCheckError::QgsGeometryMissingVertexCheckError ( const QgsGeometryCheck *check, const QgsGeometryCheckerUtils::LayerFeature &layerFeature, const QgsPointXY &errorLocation, QgsVertexId vidx, const QVariant &value, QgsGeometryCheckError::ValueType valueType )
262
+ : QgsGeometryCheckError( check, layerFeature, errorLocation, vidx, value, valueType )
263
+ {
264
+ }
265
+
266
+ QgsRectangle QgsGeometryMissingVertexCheckError::affectedAreaBBox () const
267
+ {
268
+ return mAffectedAreaBBox ;
269
+ }
270
+
271
+ void QgsGeometryMissingVertexCheckError::setAffectedAreaBBox ( const QgsRectangle &affectedAreaBBox )
272
+ {
273
+ mAffectedAreaBBox = affectedAreaBBox;
274
+ }
0 commit comments