[Qgis-developer] symbolForFeature() does not works?

Alexander Bruy alexander.bruy at gmail.com
Thu Jul 3 23:14:09 PDT 2014


Hi Minoru,

thanks for information. As I can see from ticket, this was fixed about
month ago, but now exists again. Also this issue still exists with
other renderers.

I will reopen 10096 and add more information to tickets about other
renderers


2014-07-04 3:54 GMT+03:00 Minoru Akagi <akaginch at gmail.com>:
> Hi Alexander,
>
> 2014-07-04 0:53 GMT+09:00 Alexander Bruy <alexander.bruy at gmail.com>:
>> Hi all,
>>
>> seems symbolForFeature() method does not works as expected for most
>> renderers:
>>  * QgsSingleSymbolRendererV2 — returns feature symbol
>>  * QgsCategorizedSymbolRendererV2 — returns None and in debug output
>>     I have message saying "there are no hashed symbols!!!"
>>  * QgsGraduatedSymbolRendererV2 — just crashes QGIS
>>  * QgsRuleBasedRendererV2 — returns None
>>
>> All tests made with point shapefile. Here is code snipped I used (load vector
>> layer and activate it first):
>>
>> layer = iface.mapCanvas().currentLayer()
>> feat = layer.getFeatures().next()
>> renderer = layer.rendererV2()
>> symbol = renderer.symbolForFeature(feat)
>>
>> For me this is major issue that makes difficult to develop plugins that works
>> with layer symbology (e.g. symbology import/export/conversion)
>>
>> Anyone confirms? Should I open a ticket?
>
> Matthias Kuhn showed me a workaround
> (http://hub.qgis.org/issues/10096#note-1). My code is like this:
>
> # initialize symbol rendering
> renderer = QgsMapRenderer()
> layer.rendererV2().startRender(renderer.rendererContext(),
>                                              layer.pendingFields() if
> apiChanged23 else layer)
>
> for f in layer.getFeatures():
>   symbol = layer.rendererV2().symbolForFeature(f)
>   print symbol.color().name()
>
> layer.rendererV2().stopRender(renderer.rendererContext())
>
> --
> Regards,
> Minoru



-- 
Alexander Bruy


More information about the Qgis-developer mailing list