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 <[email protected]> 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 > > >
_______________________________________________ QGIS-Developer mailing list [email protected] List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer
