[QGIS-Developer] Returning whether feature is rendered (feature visibility) using pyqgis

Ben Wirf ben.wirf at gmail.com
Mon Feb 17 20:09:11 PST 2020


Just to provide some resolution, this was answered thoroughly with good
code examples by another GIS Stack Exchange user in this question:

https://gis.stackexchange.com/questions/350807/checking-if-feature-visible-using-pyqgis


On Sun, Feb 16, 2020 at 2:11 PM Ben Wirf <ben.wirf at gmail.com> wrote:

>   Hi all,
>
> I am having trouble working out how to use the willRenderFeature() method
> of QgsFeatureRenderer classes. There have been a couple of questions
> related to this on gis,stackexchange.com recently, and I thought I would
> try to find an answer- but I've hit a dead end!
> The latest documentation contains a snippet specifically around dealing
> only with visible features:
>
> https://qgis.org/api/classQgsFeatureRenderer.html#a981b574dd6813bcc3cd849822af8929b
>
>
>> <https://qgis.org/api/classQgsFeatureRenderer.html#a981b574dd6813bcc3cd849822af8929b>
> capabilities()
> virtual QgsFeatureRenderer::Capabilities QgsFeatureRenderer::capabilities
> ( ) inlinevirtual
>
> Returns details about internals of this renderer.
>
> E.g. if you only want to deal with visible features:
> if not renderer.capabilities().testFlag(QgsFeatureRenderer.Filter) or
> renderer.willRenderFeature(feature, context):
> deal_with_my_feature()
> else:
> skip_the_curren_feature()
>
> Reimplemented in QgsRuleBasedRenderer
> <https://qgis.org/api/classQgsRuleBasedRenderer.html#a1576aa5317eb1d9276f403313db68823>
> , QgsCategorizedSymbolRenderer
> <https://qgis.org/api/classQgsCategorizedSymbolRenderer.html#aed3ba97c9757f065e74f15d9aaa6cae7>
> , QgsPointDistanceRenderer
> <https://qgis.org/api/classQgsPointDistanceRenderer.html#a8ae8d6e2151b3ebb4038fec2d2bccc35>
> , QgsInvertedPolygonRenderer
> <https://qgis.org/api/classQgsInvertedPolygonRenderer.html#a389777639662b9e3e03fa5245bc802de>
> , QgsSingleSymbolRenderer
> <https://qgis.org/api/classQgsSingleSymbolRenderer.html#a6bdbfdee8d84d92168ffd2a45d2c81d8>,
> and QgsGraduatedSymbolRenderer
> <https://qgis.org/api/classQgsGraduatedSymbolRenderer.html#a7e3e3c9e1ce38d984503de720ce94297>
> .
>
> Definition at line 274
> <https://qgis.org/api/qgsrenderer_8h_source.html#l00274> of file
> qgsrenderer.h <https://qgis.org/api/qgsrenderer_8h_source.html>.
> But I cannot work out how to implement this logic.
> E.g. I have a vector layer which is symbolized with a
> QgsCategorizedSymbolRenderer and I would like to exclude features belonging
> to categories which are unchecked in the TOC from, for example, an
> intersection test against a QgsRectangle. If I run the following in the
> Python console, QGIS crashes when passing a QgsRenderContext object as the
> second argument of the renderer.willRenderFeature() method.
> Firstly passing an empty instance:
>
> layer = iface.activeLayer()
> feat = layer.getFeature(3)
> renderer = layer.renderer()
> test = renderer.willRenderFeature(feat, QgsRenderContext())
> # LINE BELOW CRASHES QGIS
> test = renderer.willRenderFeature(feat, QgsRenderContext())
>
> And secondly, I tried constructing a QgsRenderContext object with the
> fromMapSettings() method and passing the canvas.mapSettings() to its
> constructor:
>
> layer = iface.activeLayer()
> feat = layer.getFeature(3)
> renderer = layer.renderer()
> settings = iface.mapCanvas().mapSettings()
> context = QgsRenderContext().fromMapSettings(settings)
> # LINE BELOW CRASHES QGIS
> test = renderer.willRenderFeature(feat, context)
>
> I'm sure I am doing something wrong because I don't have a thorough
> understanding of how to properly construct or use this context object.
>
> Incidentally, if I run the following line:
>
> renderer.capabilities().testFlag(QgsFeatureRenderer.Filter)
>
> I get an attribute error that Capabilities object has no attribute
> 'testFlag'
>
> So at this point I'm a bit stumped. Any help or guidance would be greatly
> appreciated.
>
> Best regards,
>
> Ben
>
> Related GIS Stack Exchange questions:
>
> https://gis.stackexchange.com/questions/350807/checking-if-feature-visible-using-pyqgis
>
>
> https://gis.stackexchange.com/questions/347951/selecting-only-visible-features-from-different-layers-using-pyqgis
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20200218/544d1621/attachment.html>


More information about the QGIS-Developer mailing list