@@ -636,6 +636,7 @@ QgsPointLocator::QgsPointLocator( QgsVectorLayer *layer, const QgsCoordinateRefe
636
636
connect ( mLayer , &QgsVectorLayer::featureAdded, this , &QgsPointLocator::onFeatureAdded );
637
637
connect ( mLayer , &QgsVectorLayer::featureDeleted, this , &QgsPointLocator::onFeatureDeleted );
638
638
connect ( mLayer , &QgsVectorLayer::geometryChanged, this , &QgsPointLocator::onGeometryChanged );
639
+ connect ( mLayer , &QgsVectorLayer::attributeValueChanged, this , &QgsPointLocator::onAttributeValueChanged );
639
640
connect ( mLayer , &QgsVectorLayer::dataChanged, this , &QgsPointLocator::destroyIndex );
640
641
}
641
642
@@ -834,6 +835,30 @@ void QgsPointLocator::onFeatureAdded( QgsFeatureId fid )
834
835
if ( !f.hasGeometry () )
835
836
return ;
836
837
838
+ std::unique_ptr< QgsFeatureRenderer > renderer ( mLayer ->renderer () ? mLayer ->renderer ()->clone () : nullptr );
839
+ QgsRenderContext *ctx = nullptr ;
840
+ if ( mContext )
841
+ {
842
+ mContext ->expressionContext () << QgsExpressionContextUtils::layerScope ( mLayer );
843
+ ctx = mContext .get ();
844
+ if ( renderer && ctx )
845
+ {
846
+ bool pass = false ;
847
+ renderer->startRender ( *ctx, mLayer ->fields () );
848
+
849
+ ctx->expressionContext ().setFeature ( f );
850
+ if ( !renderer->willRenderFeature ( f, *ctx ) )
851
+ {
852
+ pass = true ;
853
+ }
854
+
855
+ renderer->stopRender ( *ctx );
856
+ renderer.release ();
857
+ if ( pass )
858
+ return ;
859
+ }
860
+ }
861
+
837
862
if ( mTransform .isValid () )
838
863
{
839
864
try
@@ -884,6 +909,14 @@ void QgsPointLocator::onGeometryChanged( QgsFeatureId fid, const QgsGeometry &ge
884
909
onFeatureAdded ( fid );
885
910
}
886
911
912
+ void QgsPointLocator::onAttributeValueChanged ( QgsFeatureId fid, int idx, const QVariant &value )
913
+ {
914
+ Q_UNUSED ( idx );
915
+ Q_UNUSED ( value );
916
+ onFeatureDeleted ( fid );
917
+ onFeatureAdded ( fid );
918
+ }
919
+
887
920
888
921
QgsPointLocator::Match QgsPointLocator::nearestVertex ( const QgsPointXY &point, double tolerance, MatchFilter *filter )
889
922
{
0 commit comments