@@ -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 ();
@@ -236,3 +258,18 @@ QgsGeometryCheck::CheckType QgsGeometryMissingVertexCheck::factoryCheckType()
236
258
return QgsGeometryCheck::LayerCheck;
237
259
}
238
260
// /@endcond private
261
+
262
+ QgsGeometryMissingVertexCheckError::QgsGeometryMissingVertexCheckError ( const QgsGeometryCheck *check, const QgsGeometryCheckerUtils::LayerFeature &layerFeature, const QgsPointXY &errorLocation, QgsVertexId vidx, const QVariant &value, QgsGeometryCheckError::ValueType valueType )
263
+ : QgsGeometryCheckError( check, layerFeature, errorLocation, vidx, value, valueType )
264
+ {
265
+ }
266
+
267
+ QgsRectangle QgsGeometryMissingVertexCheckError::affectedAreaBBox () const
268
+ {
269
+ return mAffectedAreaBBox ;
270
+ }
271
+
272
+ void QgsGeometryMissingVertexCheckError::setAffectedAreaBBox ( const QgsRectangle &affectedAreaBBox )
273
+ {
274
+ mAffectedAreaBBox = affectedAreaBBox;
275
+ }
0 commit comments