[Qgis-developer] Refresh SVG symbols drawn by a plugin

Billant Jérémy billant at cerege.fr
Wed Jul 9 05:13:15 PDT 2014


Hi,

I am making a plugin drawing focal mechanisms (a symbol indicating how 
move a fault when an earthquake occurs) and there is one last problem 
before the release that i can't solve.

Anyway, the plugin draws the SVG symbol using the attributes and save 
them in a folder, each SVG symbol have the name of the feature Id. Then, 
symbology is applied to the layer using :

symbol_layer = 
QgsSvgMarkerSymbolLayerV2().create({'name_expression':'concat(\''+dirNameSymbol+'/\',\"'+self.ui.idField.currentText()+'\",\'.svg\')'})
layer.rendererV2().symbols()[0].changeSymbolLayer(0, symbol_layer)
iface.mapCanvas().refreshMap()

It works but only the first time. If i run the plugin a second time 
(i.e. to changed the color of the symbols), the new SVG symbol are well 
drawn in the folder, but don't displayed in the map canvas (the first 
are still displayed).

I understand it is probably because of cache memory (because if i close 
and re-open qgis or generate the new symbols in a different folder it 
works) but i'm not able to find the right way to refresh the view.

I have tried the following functions but no one make the job :

QgsMapRendererCache().clearCacheImage(layer.id())

or

if hasattr(layer, "setCacheImage"): layer.setCacheImage(None)
             layer.triggerRepaint()

or

layer.dataProvider().reloadData()
layer.triggerRepaint()

Thank you for your help.


-- 
Billant Jérémy - PhD student
CEREGE - UMR 7330
Europôle méditerranéen de l'Arbois
Avenue Louis Philibert
BP 80 13545 Aix-en-Provence Cedex 04
04 42 97 16 79



More information about the Qgis-developer mailing list