def setStyleIcon(self, svg): #Dato il path di un'icona svg la setta come stile per le sole features selezionate nel layer dei beni vlayer = self.getLayerBeni() if len(vlayer.selectedFeatures()) == 1: svgStyle = { "name": svg, "outline": "#000000", "size": "15", } svgLayer = QgsSvgMarkerSymbolLayer.create(svgStyle) svgSymbol = QgsMarkerSymbol() svgSymbol.changeSymbolLayer(0, svgLayer) symbol = QgsSymbol.defaultSymbol(vlayer.geometryType()) symbol.setColor(QColor("Blue")) centroid = QgsCentroidFillSymbolLayer() centroid.setSubSymbol(svgSymbol) selectedSymbol = QgsFillSymbol() selectedSymbol.changeSymbolLayer(0, centroid) renderer = QgsRuleBasedRenderer(symbol) rule = QgsRuleBasedRenderer.Rule(selectedSymbol, label="Selected", filterExp="is_selected()") renderer.rootRule().appendChild(rule) vlayer.setRenderer(renderer) vlayer.triggerRepaint()
def testQgsCentroidFillSymbolLayer(self): """ Create a new style from a .sld file and match test """ mTestName = 'QgsCentroidFillSymbolLayer' mFilePath = QDir.toNativeSeparators('%s/symbol_layer/%s.sld' % (unitTestDataPath(), mTestName)) mDoc = QDomDocument(mTestName) mFile = QFile(mFilePath) mFile.open(QIODevice.ReadOnly) mDoc.setContent(mFile, True) mFile.close() mSymbolLayer = QgsCentroidFillSymbolLayer.createFromSld( mDoc.elementsByTagName('PointSymbolizer').item(0).toElement()) mExpectedValue = type(QgsCentroidFillSymbolLayer()) mValue = type(mSymbolLayer) mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = QgsSimpleMarkerSymbolLayerBase.Star mValue = mSymbolLayer.subSymbol().symbolLayer(0).shape() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = '#55aaff' mValue = mSymbolLayer.subSymbol().symbolLayer(0).color().name() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = '#00ff00' mValue = mSymbolLayer.subSymbol().symbolLayer(0).strokeColor().name() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = False mValue = mSymbolLayer.pointOnAllParts() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage ctx = QgsRenderContext() self.assertCountEqual(mSymbolLayer.usedAttributes(ctx), {}) # test colors, need to make sure colors are passed/retrieved from subsymbol mSymbolLayer.setColor(QColor(150, 50, 100)) self.assertEqual(mSymbolLayer.color(), QColor(150, 50, 100)) self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(150, 50, 100)) mSymbolLayer.subSymbol().setColor(QColor(250, 150, 200)) self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(250, 150, 200)) self.assertEqual(mSymbolLayer.color(), QColor(250, 150, 200))
def createRenderer(self): renderer = QgsCategorizedSymbolRenderer() renderer.setClassAttribute('Value < 12') cf1 = QgsCentroidFillSymbolLayer() cf1.setSubSymbol( QgsMarkerSymbol.createSimple({ 'color': '#aa1111', 'outline_style': 'no', 'size': '8' })) sym1 = QgsFillSymbol([cf1]) cf2 = QgsCentroidFillSymbolLayer() cf2.setSubSymbol( QgsMarkerSymbol.createSimple({ 'color': '#1111dd', 'outline_style': 'no', 'size': '8' })) sym2 = QgsFillSymbol([cf2]) renderer.addCategory(QgsRendererCategory('1', sym1, '1')) renderer.addCategory(QgsRendererCategory('0', sym2, '0')) return renderer
def createRenderer(self): renderer = QgsCategorizedSymbolRenderer() renderer.setClassAttribute('Name') cf1 = QgsCentroidFillSymbolLayer() cf1.setSubSymbol( QgsMarkerSymbol.createSimple({ 'color': '#33aa33', 'outline_style': 'no', 'size': '5' })) sym1 = QgsFillSymbol([cf1]) cf2 = QgsCentroidFillSymbolLayer() cf2.setSubSymbol( QgsMarkerSymbol.createSimple({ 'color': '#aa33aa', 'outline_style': 'no', 'size': '5' })) sym2 = QgsFillSymbol([cf2]) renderer.addCategory(QgsRendererCategory('Dam', sym1, 'Dam')) renderer.addCategory(QgsRendererCategory('Lake', sym2, 'Lake')) return renderer
def testMap(): # Parámetros mapa colorFill = mv.MAP_COLORS['Blau'] colorOut = mv.MAP_CONTORNS['Blanc'] inc = 8 opacity = 0.55 field = "RESULTAT" name = "DESCRIPCIO" decs = 0 capa = leyenda.currentLayer() # Capa de polígonos a mapificar geom = capa.geometryType() if (geom == QgsWkbTypes.GeometryType.PolygonGeometry): # Creamos simbología del punto centroide symbology = QgsCentroidFillSymbolLayer() symbology.setPointOnAllParts(False) symbology.setPointOnSurface(False) # Ajustamos valores del símbolo proporcional layerSymbol = symbology.subSymbol().symbolLayer( 0) # QgsSimpleMarkerSymbolLayer layerSymbol.setFillColor(colorFill) layerSymbol.setStrokeColor(colorOut) layerSymbol.setStrokeStyle(Qt.SolidLine) layerSymbol.setStrokeWidth(1.0) layerSymbol.setStrokeWidthUnit(QgsUnitTypes.RenderPixels) expr = calcExpr(field, inc) prop = QgsProperty.fromExpression(expr) layerSymbol.setDataDefinedProperty(QgsSymbolLayer.PropertySize, prop) # Crear símbolo y asignarle la simbología sym = QgsFillSymbol.createSimple({ 'color': '{}'.format(colorFill.name()), 'outline_color': '{}'.format(colorOut.name()) }) sym.changeSymbolLayer(0, symbology) # Crear renderer y asignar a la capa renderer = QgsSingleSymbolRenderer(sym) capa.setRenderer(renderer) capa.setOpacity(opacity) expr = calcTip(field, name, decs) capa.setMapTipTemplate(expr) capa.triggerRepaint() return
def testQgsCentroidFillSymbolLayer(self): """ Create a new style from a .sld file and match test """ mTestName = 'QgsCentroidFillSymbolLayer' mFilePath = QDir.toNativeSeparators('%s/symbol_layer/%s.sld' % (unitTestDataPath(), mTestName)) mDoc = QDomDocument(mTestName) mFile = QFile(mFilePath) mFile.open(QIODevice.ReadOnly) mDoc.setContent(mFile, True) mFile.close() mSymbolLayer = QgsCentroidFillSymbolLayer.createFromSld( mDoc.elementsByTagName('PointSymbolizer').item(0).toElement()) mExpectedValue = type(QgsCentroidFillSymbolLayer()) mValue = type(mSymbolLayer) mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = QgsSimpleMarkerSymbolLayerBase.Star mValue = mSymbolLayer.subSymbol().symbolLayer(0).shape() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = '#55aaff' mValue = mSymbolLayer.subSymbol().symbolLayer(0).color().name() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = '#00ff00' mValue = mSymbolLayer.subSymbol().symbolLayer(0).strokeColor().name() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage mExpectedValue = False mValue = mSymbolLayer.pointOnAllParts() mMessage = 'Expected "%s" got "%s"' % (mExpectedValue, mValue) assert mExpectedValue == mValue, mMessage # test colors, need to make sure colors are passed/retrieved from subsymbol mSymbolLayer.setColor(QColor(150, 50, 100)) self.assertEqual(mSymbolLayer.color(), QColor(150, 50, 100)) self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(150, 50, 100)) mSymbolLayer.subSymbol().setColor(QColor(250, 150, 200)) self.assertEqual(mSymbolLayer.subSymbol().color(), QColor(250, 150, 200)) self.assertEqual(mSymbolLayer.color(), QColor(250, 150, 200))
def calcRender(self, capa): renderer = None geom = capa.geometryType() if (geom == QgsWkbTypes.GeometryType.PolygonGeometry): # Creamos simbología del punto centroide symbology = QgsCentroidFillSymbolLayer() symbology.setPointOnAllParts(False) symbology.setPointOnSurface(False) # Ajustamos valores del símbolo proporcional self.setStrokeSymbology(symbology.subSymbol()) # Crear símbolo y asignarle la simbología sym = QgsFillSymbol.createSimple({ 'color': '{}'.format(self.params.colorBase.name()), 'outline_color': '{}'.format(self.params.colorContorn.name()) }) sym.changeSymbolLayer(0, symbology) # Crear renderer y asignar a la capa renderer = QgsSingleSymbolRenderer(sym) # from qgis.core import QgsDataDefinedSizeLegend # lgd = QgsDataDefinedSizeLegend() # lgd.setTitle('Titulo') # lgd.setClasses([ # QgsDataDefinedSizeLegend.SizeClass(1000, '1.000'), # QgsDataDefinedSizeLegend.SizeClass(3000, '3.000'), # QgsDataDefinedSizeLegend.SizeClass(6000, '6.000')]) # lgd.setLegendType(QgsDataDefinedSizeLegend.LegendCollapsed) # lgd.setVerticalAlignment(QgsDataDefinedSizeLegend.AlignBottom) # renderer.setDataDefinedSizeLegend(lgd) capa.setRenderer(renderer) capa.setOpacity(self.params.opacity) capa.setMapTipTemplate(self.params.calcTip()) capa.triggerRepaint() return renderer