def _getSymbolWidth(self, context, width, unit): scale = 1.0 if unit == QgsSymbolV2.MapUnit: scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor( context, QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor(context, QgsSymbolV2.MapUnit) width = max(width + 2 * self._buffer * scale, self._minWidth * scale) return width
def _getSymbolWidth(self, context, width, unit): scale = 1.0 if unit == QgsSymbolV2.MapUnit: scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor( context, QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor( context, QgsSymbolV2.MapUnit) width = max(width + 2 * self._buffer * scale, self._minWidth * scale) return width
def parse_xml(self): """Parse the xml file. Returns false if there is failure.""" xml_file = QFile(self._xml_path) if not xml_file.open(QIODevice.ReadOnly): return False document = QDomDocument() if not document.setContent(xml_file): return False xml_file.close() document_element = document.documentElement() if document_element.tagName() != 'qgis_style': return False # Get all the symbols self._symbols = [] symbols_element = document_element.firstChildElement('symbols') symbol_element = symbols_element.firstChildElement() while not symbol_element.isNull(): if symbol_element.tagName() == 'symbol': symbol = QgsSymbolLayerV2Utils.loadSymbol(symbol_element) if symbol: self._symbols.append({ 'name': symbol_element.attribute('name'), 'symbol': symbol }) symbol_element = symbol_element.nextSiblingElement() # Get all the colorramps self._colorramps = [] ramps_element = document_element.firstChildElement('colorramps') ramp_element = ramps_element.firstChildElement() while not ramp_element.isNull(): if ramp_element.tagName() == 'colorramp': colorramp = QgsSymbolLayerV2Utils.loadColorRamp(ramp_element) if colorramp: self._colorramps.append({ 'name': ramp_element.attribute('name'), 'colorramp': colorramp }) ramp_element = ramp_element.nextSiblingElement() return True
def updateShapeStyle(self): if (self.mComposerShape): self.mComposerShape.refreshSymbol() icon = QgsSymbolLayerV2Utils.symbolPreviewIcon( self.mComposerShape.shapeStyleSymbol(), self.mShapeStyleButton.iconSize()) self.mShapeStyleButton.setIcon(icon)
def updateLineSymbolMarker(self): if (not self.mArrow): return icon = QgsSymbolLayerV2Utils.symbolPreviewIcon( self.mArrow.lineSymbol(), self.mLineStyleButton.iconSize()) self.mLineStyleButton.setIcon(icon)
def categorized(defs, sln, layer, renderer, legendFolder, stylesFolder, layer_alpha): cluster = False defs += """ function categories_%s(feature, value, size, resolution, labelText, labelFont, labelFill) { switch(value.toString()) {""" % sln cats = [] useAnyMapUnits = False for cnt, cat in enumerate(renderer.categories()): legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( cat.symbol(), QSize(16, 16)) legendIcon.save( os.path.join(legendFolder, sln + "_" + unicode(cnt) + ".png")) if (cat.value() is not None and cat.value() != "" and not isinstance(cat.value(), QPyNullVariant)): categoryStr = "case '%s':" % unicode(cat.value()).replace( "'", "\\'") else: categoryStr = "default:" (style, pattern, setPattern, useMapUnits) = (getSymbolAsStyle(cat.symbol(), stylesFolder, layer_alpha, renderer, sln, layer)) if useMapUnits: useAnyMapUnits = True categoryStr += ''' return %s; break;''' % style cats.append(categoryStr) defs += "\n".join(cats) + "}};" style = """ var style = categories_%s(feature, value, size, resolution, labelText, labelFont, labelFill)""" % sln value = getValue(layer, renderer) return (style, pattern, setPattern, value, defs, useAnyMapUnits)
def testConvertToPainterUnits(self): #test QgsSymbolLayerV2Utils::convertToPainterUnits() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) #renderer scale should be about 1:291937841 #start with no min/max scale c = QgsMapUnitScale() size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 1.0, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 23.622047, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 2.0, places=5) #minimum size greater than the calculated size, so size should be limited to minSizeMM c.minSizeMM = 5 c.minSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 59.0551181, places=5) #only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 23.622047, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 2.0, places=5) c.minSizeMMEnabled = False #maximum size less than the calculated size, so size should be limited to maxSizeMM c.maxSizeMM = 0.1 c.maxSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 1.0, places=5) #only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 23.622047, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits( r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 2.0, places=5)
def testMapUnitScaleFactor(self): # test QgsSymbolLayerV2Utils::mapUnitScaleFactor() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) # renderer scale should be about 1:291937841 c = QgsMapUnitScale() sf = QgsSymbolLayerV2Utils.mapUnitScaleFactor(r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 1.0, places=5) sf = QgsSymbolLayerV2Utils.mapUnitScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 23.622047, places=5) sf = QgsSymbolLayerV2Utils.mapUnitScaleFactor(r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 2.0, places=5)
def singleSymbol(renderer, stylesFolder, layer_alpha, sln, legendFolder): symbol = renderer.symbol() (style, pattern, setPattern) = getSymbolAsStyle(symbol, stylesFolder, layer_alpha, renderer, sln) style = "var style = " + style legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( symbol, QSize(16, 16)) legendIcon.save(os.path.join(legendFolder, sln + ".png")) value = 'var value = ""' return (style, pattern, setPattern, value)
def create(dom_document): """ Create an instance of the 'SpatialFieldsConfiguration' object from a DOM document. Returns None if the dom_document is invalid. """ from stdm.ui.composer import SpatialFieldMapping dataSourceElem = dom_document.documentElement().firstChildElement( "DataSource") if dataSourceElem == None: return None spatialFieldsConfigElement = dataSourceElem.firstChildElement( "SpatialFields") spFieldsConfig = SpatialFieldsConfiguration() #Get spatial field mappings spatialFieldMappingList = spatialFieldsConfigElement.elementsByTagName( "SpatialField") numItems = spatialFieldMappingList.length() for i in range(numItems): spatialFieldMappingElement = spatialFieldMappingList.item( i).toElement() labelField = spatialFieldMappingElement.attribute("labelField") spatialField = spatialFieldMappingElement.attribute("name") itemId = spatialFieldMappingElement.attribute("itemid") srid = int(spatialFieldMappingElement.attribute("srid")) geomType = spatialFieldMappingElement.attribute("geomType") zoom = float(spatialFieldMappingElement.attribute("zoom")) zoom_type = spatialFieldMappingElement.attribute( 'zoomType', 'RELATIVE') #Create spatial field mapping spFieldMapping = SpatialFieldMapping(spatialField, labelField) spFieldMapping.setItemId(itemId) spFieldMapping.setSRID(srid) spFieldMapping.setGeometryType(geomType) spFieldMapping.setZoomLevel(zoom) spFieldMapping.zoom_type = zoom_type symbolElement = spatialFieldMappingElement.firstChildElement( "Symbol") if not symbolElement is None: layerType = symbolElement.attribute("layerType") layerProps = QgsSymbolLayerV2Utils.parseProperties( symbolElement) symbolLayer = QgsSymbolLayerV2Registry.instance( ).createSymbolLayer(layerType, layerProps) spFieldMapping.setSymbolLayer(symbolLayer) spFieldsConfig.addSpatialFieldMapping(spFieldMapping) return spFieldsConfig
def testPixelSizeScaleFactor(self): #test QgsSymbolLayerV2Utils::pixelSizeScaleFactor() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) #renderer scale should be about 1:291937841 #start with no min/max scale c = QgsMapUnitScale() sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor( r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 0.5, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 11.8110236, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor( r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 1.0, places=5) #minimum scale greater than the renderer scale, so should be limited to minScale c.minScale = 1 / 150000000.0 sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor( r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 3.8925045, places=5) #only conversion from mapunits should be affected sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 11.811023, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor( r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 1.0, places=5) c.minScale = 0 #maximum scale less than the renderer scale, so should be limited to maxScale c.maxScale = 1 / 350000000.0 sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor( r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 0.5, places=5) #only conversion from mapunits should be affected sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 11.8110236, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor( r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 1.0, places=5)
def set_hue(values, feature, parent): """ Sets the hue component of a color <p><h4>Syntax</h4> set_hue(<i>color</i>, <i>hue</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br> <i> hue</i> → a integer between 0 and 360<br></p> <p><h4>Example</h4> <!-- Show example of function.--> set_hue('0,255,0,255', 0) → '255,0,0,255'</p> """ try: color = QgsSymbolLayerV2Utils.decodeColor(values[0]) color.setHslF(values[1] / 360.0, color.saturationF(), color.lightnessF(), color.alphaF()) return QgsSymbolLayerV2Utils.encodeColor(color) except: return None
def set_hsv_value(values, feature, parent): """ Sets the value of a color <p><h4>Syntax</h4> set_hsv_value(<i>color</i>, <i>value</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br> <i> value</i> → a integer between 0 and 100<br></p> <p><h4>Example</h4> <!-- Show example of function.--> set_hsv_value('0,255,0,255', 50) → '0,128,0,255'</p> """ try: color = QgsSymbolLayerV2Utils.decodeColor(values[0]) color.setHsvF(color.hueF(), color.saturationF(), values[1] / 100.0, color.alphaF()) return QgsSymbolLayerV2Utils.encodeColor(color) except: return None
def set_alpha(values, feature, parent): """ Sets the alpha component of a color <p><h4>Syntax</h4> set_alpha(<i>color</i>, <i>alpha</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br> <i> alpha</i> → an alpha value between 0 and 255<br></p> <p><h4>Example</h4> <!-- Show example of function.--> set_alpha('255,255,255,255', 125) → '255,255,255,125'</p> """ try: color = QgsSymbolLayerV2Utils.decodeColor(values[0]) color.setAlpha(values[1]) return QgsSymbolLayerV2Utils.encodeColor(color) except: return None
def toDomElement(self, domDocument): """ Returns a QDomElement with the object instance settings """ spColumnElement = domDocument.createElement("SpatialField") spColumnElement.setAttribute("name",self._spatialField) spColumnElement.setAttribute("labelField",self._labelField) spColumnElement.setAttribute("itemid",self._itemId) spColumnElement.setAttribute("srid",self._srid) spColumnElement.setAttribute("geomType",self._geomType) spColumnElement.setAttribute("zoom",self._zoom_level) symbolElement = domDocument.createElement("Symbol") #Append symbol properties element if not self._symbol is None: prop = self._symbol.properties() QgsSymbolLayerV2Utils.saveProperties(prop,domDocument,symbolElement) symbolElement.setAttribute("layerType",self._layerType) spColumnElement.appendChild(symbolElement) return spColumnElement
def testConvertToPainterUnits(self): # test QgsSymbolLayerV2Utils::convertToPainterUnits() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) # renderer scale should be about 1:291937841 # start with no min/max scale c = QgsMapUnitScale() size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 1.0, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 23.622047, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 2.0, places=5) # minimum size greater than the calculated size, so size should be limited to minSizeMM c.minSizeMM = 5 c.minSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 59.0551181, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 23.622047, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 2.0, places=5) c.minSizeMMEnabled = False # maximum size less than the calculated size, so size should be limited to maxSizeMM c.maxSizeMM = 0.1 c.maxSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 1.0, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 23.622047, places=5) size = QgsSymbolLayerV2Utils.convertToPainterUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 2.0, places=5)
def toDomElement(self, domDocument): """ Returns a QDomElement with the object instance settings """ spColumnElement = domDocument.createElement("SpatialField") spColumnElement.setAttribute("name",self._spatialField) spColumnElement.setAttribute("labelField",self._labelField) spColumnElement.setAttribute("itemid",self._itemId) spColumnElement.setAttribute("srid",self._srid) spColumnElement.setAttribute("geomType",self._geomType) spColumnElement.setAttribute("zoom",str(self._zoom_level)) symbolElement = domDocument.createElement("Symbol") #Append symbol properties element if not self._symbol is None: prop = self._symbol.properties() QgsSymbolLayerV2Utils.saveProperties(prop,domDocument,symbolElement) symbolElement.setAttribute("layerType",self._layerType) spColumnElement.appendChild(symbolElement) return spColumnElement
def testEncodeDecode(self): # test encoding and decoding QgsMapUnitScale s = QgsMapUnitScale() s.minScale = 50 s.maxScale = 100 s.minSizeMMEnabled = True s.minSizeMM = 3 s.maxSizeMMEnabled = False s.maxSizeMM = 99 encode = QgsSymbolLayerV2Utils.encodeMapUnitScale(s) r = QgsSymbolLayerV2Utils.decodeMapUnitScale(encode) self.assertEqual(s, r) # check old style encoding encode = '9,78.3' r = QgsSymbolLayerV2Utils.decodeMapUnitScale(encode) self.assertEqual(r.minScale, 9) self.assertEqual(r.maxScale, 78.3) self.assertFalse(r.minSizeMMEnabled) self.assertEqual(r.minSizeMM, 0) self.assertFalse(r.maxSizeMMEnabled) self.assertEqual(r.maxSizeMM, 0)
def iconLegend(symbol, catr, outputProjectFileName, layerName, catLegend, cnt): try: iconSize = (symbol.size() * 4) + 5 except: iconSize = 16 legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap(symbol, QSize(iconSize, iconSize)) safeLabel = re.sub('[\W_]+', '', catr.label()) + unicode(cnt) legendIcon.save(os.path.join(outputProjectFileName, "legend", layerName + "_" + safeLabel + ".png")) catLegend += """<tr><td style="text-align: center;"><img src="legend/""" catLegend += layerName + "_" + safeLabel + """.png" /></td><td>""" catLegend += catr.label().replace("'", "\\'") + "</td></tr>" return catLegend
def testPixelSizeScaleFactor(self): # test QgsSymbolLayerV2Utils::pixelSizeScaleFactor() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) # renderer scale should be about 1:291937841 # start with no min/max scale c = QgsMapUnitScale() sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 0.5, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 11.8110236, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 1.0, places=5) # minimum scale greater than the renderer scale, so should be limited to minScale c.minScale = 1 / 150000000.0 sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 3.8925045, places=5) # only conversion from mapunits should be affected sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 11.811023, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 1.0, places=5) c.minScale = 0 # maximum scale less than the renderer scale, so should be limited to maxScale c.maxScale = 1 / 350000000.0 sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(sf, 0.5, places=5) # only conversion from mapunits should be affected sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.MM, c) self.assertAlmostEqual(sf, 11.8110236, places=5) sf = QgsSymbolLayerV2Utils.pixelSizeScaleFactor(r, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(sf, 1.0, places=5)
def create(dom_document): """ Create an instance of the 'SpatialFieldsConfiguration' object from a DOM document. Returns None if the dom_document is invalid. """ from stdm.ui.composer import SpatialFieldMapping dataSourceElem = dom_document.documentElement().firstChildElement("DataSource") if dataSourceElem == None: return None spatialFieldsConfigElement = dataSourceElem.firstChildElement("SpatialFields") spFieldsConfig = SpatialFieldsConfiguration() #Get spatial field mappings spatialFieldMappingList = spatialFieldsConfigElement.elementsByTagName("SpatialField") numItems = spatialFieldMappingList.length() for i in range(numItems): spatialFieldMappingElement = spatialFieldMappingList.item(i).toElement() labelField = spatialFieldMappingElement.attribute("labelField") spatialField = spatialFieldMappingElement.attribute("name") itemId = spatialFieldMappingElement.attribute("itemid") srid = int(spatialFieldMappingElement.attribute("srid")) geomType = spatialFieldMappingElement.attribute("geomType") zoom = float(spatialFieldMappingElement.attribute("zoom")) zoom_type = spatialFieldMappingElement.attribute('zoomType', 'RELATIVE') #Create spatial field mapping spFieldMapping = SpatialFieldMapping(spatialField,labelField) spFieldMapping.setItemId(itemId) spFieldMapping.setSRID(srid) spFieldMapping.setGeometryType(geomType) spFieldMapping.setZoomLevel(zoom) spFieldMapping.zoom_type = zoom_type symbolElement = spatialFieldMappingElement.firstChildElement("Symbol") if not symbolElement is None: layerType = symbolElement.attribute("layerType") layerProps = QgsSymbolLayerV2Utils.parseProperties(symbolElement) symbolLayer = QgsSymbolLayerV2Registry.instance().createSymbolLayer(layerType,layerProps) spFieldMapping.setSymbolLayer(symbolLayer) spFieldsConfig.addSpatialFieldMapping(spFieldMapping) return spFieldsConfig
def alpha(values, feature, parent): """ Returns the alpha component of a color <p><h4>Syntax</h4> alpha(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> alpha('255,255,255,125') → 125</p> """ try: return QgsSymbolLayerV2Utils.decodeColor(values[0]).alpha() except: return None
def blue(values, feature, parent): """ Returns the blue component of a color <p><h4>Syntax</h4> blue(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> blue('0,0,255') → 255</p> """ try: return QgsSymbolLayerV2Utils.decodeColor(values[0]).blue() except: return None
def singleLayer(renderer, outputProjectFileName, safeLayerName, wfsLayers, layer, labeltext, cluster, json, usedFields, legends, markerType): symbol = renderer.symbol() legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( symbol, QSize(16, 16)) legendIcon.save( os.path.join(outputProjectFileName, "legend", safeLayerName + ".png")) legends[safeLayerName] = '<img src="legend/' + safeLayerName + '.png" /> ' legends[safeLayerName] += layer.name() if layer.geometryType() == QGis.Point: (new_obj, wfsLayers) = pointLayer(layer, safeLayerName, labeltext, cluster, usedFields, json, wfsLayers, markerType, renderer.symbol()) else: new_obj, wfsLayers = nonPointLayer(layer, safeLayerName, usedFields, json, wfsLayers) return new_obj, legends, wfsLayers
def saturation(values, feature, parent): """ Returns the saturation of a color, an integer between 0-100 <p><h4>Syntax</h4> saturation(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> saturation('125,255,125') → 50</p> """ try: # Saturation ranges from 0 - 100 return int(QgsSymbolLayerV2Utils.decodeColor(values[0]).saturationF() * 100) except: return None
def lightness(values, feature, parent): """ Returns the lightness of a color, an integer between 0-100 <p><h4>Syntax</h4> lightness(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> lightness('125,255,125') → 74</p> """ try: # Lightness ranges from 0 - 100 return int(QgsSymbolLayerV2Utils.decodeColor(values[0]).lightnessF() * 100) except: return None
def hue(values, feature, parent): """ Returns the hue component of a color, an integer between 0-360 <p><h4>Syntax</h4> hue(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> hue('255,0,0') → 0</p> """ try: # Hue ranges from 0 - 360 return int(QgsSymbolLayerV2Utils.decodeColor(values[0]).hueF() * 360) except: return None
def hsv_value(values, feature, parent): """ Returns the hsv value component of a color, an integer between 0-100 <p><h4>Syntax</h4> hsv_value(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> hsv_value('125,255,125') → 100</p> """ try: # Value ranges from 0 - 100 return int(QgsSymbolLayerV2Utils.decodeColor(values[0]).valueF() * 100) except: return None
def lightness(values, feature, parent): """ Returns the lightness of a color, an integer between 0-100 <p><h4>Syntax</h4> lightness(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> lightness('125,255,125') → 74</p> """ try: # Lightness ranges from 0 - 100 return int( QgsSymbolLayerV2Utils.decodeColor(values[0]).lightnessF() * 100) except: return None
def saturation(values, feature, parent): """ Returns the saturation of a color, an integer between 0-100 <p><h4>Syntax</h4> saturation(<i>color</i>)</p> <p><h4>Arguments</h4> <i> color</i> → a color<br></p> <p><h4>Example</h4> <!-- Show example of function.--> saturation('125,255,125') → 50</p> """ try: # Saturation ranges from 0 - 100 return int( QgsSymbolLayerV2Utils.decodeColor(values[0]).saturationF() * 100) except: return None
def graduated(layer, renderer, legendFolder, sln, stylesFolder, layer_alpha): cluster = False ranges = [] elseif = "" for cnt, ran in enumerate(renderer.ranges()): legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( ran.symbol(), QSize(16, 16)) legendIcon.save( os.path.join(legendFolder, sln + "_" + unicode(cnt) + ".png")) (symbolstyle, pattern, setPattern) = getSymbolAsStyle(ran.symbol(), stylesFolder, layer_alpha, renderer, sln) ranges.append( """%sif (value > %f && value <= %f) { style = %s }""" % (elseif, ran.lowerValue(), ran.upperValue(), symbolstyle)) elseif = " else " style = "".join(ranges) value = getValue(layer, renderer) return (style, pattern, setPattern, value)
def exportStyles(layers, folder, clustered): stylesFolder = os.path.join(folder, "styles") QDir().mkpath(stylesFolder) legendFolder = os.path.join(stylesFolder, "legend") QDir().mkpath(legendFolder) for count, (layer, cluster) in enumerate(zip(layers, clustered)): sln = safeName(layer.name()) + unicode(count) if layer.type() != layer.VectorLayer: continue labelsEnabled = unicode( layer.customProperty("labeling/enabled")).lower() == "true" if (labelsEnabled): labelField = layer.customProperty("labeling/fieldName") if labelField != "": if unicode(layer.customProperty( "labeling/isExpression")).lower() == "true": exprFilename = os.path.join(folder, "resources", "qgis2web_expressions.js") fieldName = layer.customProperty("labeling/fieldName") name = compile_to_file(fieldName, "label_%s" % sln, "OpenLayers3", exprFilename) js = "%s(context)" % (name) js = js.strip() labelText = js else: fieldIndex = layer.pendingFields().indexFromName( labelField) editFormConfig = layer.editFormConfig() editorWidget = editFormConfig.widgetType(fieldIndex) if (editorWidget == QgsVectorLayer.Hidden or editorWidget == 'Hidden'): labelField = "q2wHide_" + labelField labelText = ('feature.get("%s")' % labelField.replace('"', '\\"')) else: labelText = '""' else: labelText = '""' defs = "var size = 0;\n" try: renderer = layer.rendererV2() layer_alpha = layer.layerTransparency() if isinstance(renderer, QgsSingleSymbolRendererV2): symbol = renderer.symbol() style = "var style = " + getSymbolAsStyle( symbol, stylesFolder, layer_alpha, renderer) legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( symbol, QSize(16, 16)) legendIcon.save(os.path.join(legendFolder, sln + ".png")) value = 'var value = ""' elif isinstance(renderer, QgsCategorizedSymbolRendererV2): cluster = False defs += """function categories_%s(feature, value, size) { switch(value.toString()) {""" % sln cats = [] for cnt, cat in enumerate(renderer.categories()): legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( cat.symbol(), QSize(16, 16)) legendIcon.save( os.path.join(legendFolder, sln + "_" + unicode(cnt) + ".png")) if (cat.value() is not None and cat.value() != "" and not isinstance(cat.value(), QPyNullVariant)): categoryStr = "case '%s':" % unicode( cat.value()).replace("'", "\\'") else: categoryStr = "default:" categoryStr += ''' return %s; break;''' % (getSymbolAsStyle(cat.symbol(), stylesFolder, layer_alpha, renderer)) cats.append(categoryStr) defs += "\n".join(cats) + "}};" classAttr = renderer.classAttribute() fieldIndex = layer.pendingFields().indexFromName(classAttr) editFormConfig = layer.editFormConfig() editorWidget = editFormConfig.widgetType(fieldIndex) if (editorWidget == QgsVectorLayer.Hidden or editorWidget == 'Hidden'): classAttr = "q2wHide_" + classAttr value = ('var value = feature.get("%s");' % classAttr) style = ('var style = categories_%s(feature, value, size)' % sln) elif isinstance(renderer, QgsGraduatedSymbolRendererV2): cluster = False varName = "ranges_" + sln defs += "var %s = [" % varName ranges = [] for cnt, ran in enumerate(renderer.ranges()): legendIcon = QgsSymbolLayerV2Utils.symbolPreviewPixmap( ran.symbol(), QSize(16, 16)) legendIcon.save( os.path.join(legendFolder, sln + "_" + unicode(cnt) + ".png")) symbolstyle = getSymbolAsStyle(ran.symbol(), stylesFolder, layer_alpha, renderer) ranges.append( '[%f, %f, %s]' % (ran.lowerValue(), ran.upperValue(), symbolstyle)) defs += ",\n".join(ranges) + "];" classAttr = renderer.classAttribute() fieldIndex = layer.pendingFields().indexFromName(classAttr) editFormConfig = layer.editFormConfig() editorWidget = editFormConfig.widgetType(fieldIndex) if (editorWidget == QgsVectorLayer.Hidden or editorWidget == 'Hidden'): classAttr = "q2wHide_" + classAttr value = ('var value = feature.get("%s");' % classAttr) style = '''var style = %(v)s[0][2]; for (i = 0; i < %(v)s.length; i++){ var range = %(v)s[i]; if (value > range[0] && value<=range[1]){ style = range[2]; } }''' % { "v": varName } elif isinstance(renderer, QgsRuleBasedRendererV2): cluster = False template = """ function rules_%s(feature, value) { var context = { feature: feature, variables: {} }; // Start of if blocks and style check logic %s else { return %s; } } var style = rules_%s(feature, value); """ elsejs = "[]" js = "" root_rule = renderer.rootRule() rules = root_rule.children() expFile = os.path.join(folder, "resources", "qgis2web_expressions.js") ifelse = "if" for count, rule in enumerate(rules): symbol = rule.symbol() styleCode = getSymbolAsStyle(symbol, stylesFolder, layer_alpha, renderer) name = "".join((sln, "rule", unicode(count))) exp = rule.filterExpression() if rule.isElse(): elsejs = styleCode continue name = compile_to_file(exp, name, "OpenLayers3", expFile) js += """ %s (%s(context)) { return %s; } """ % (ifelse, name, styleCode) js = js.strip() ifelse = "else if" value = ("var value = '';") style = template % (sln, js, elsejs, sln) else: style = "" if layer.customProperty("labeling/fontSize"): size = float(layer.customProperty("labeling/fontSize")) * 1.3 else: size = 10 italic = layer.customProperty("labeling/fontItalic") bold = layer.customProperty("labeling/fontWeight") r = layer.customProperty("labeling/textColorR") g = layer.customProperty("labeling/textColorG") b = layer.customProperty("labeling/textColorB") if (r or g or b) is None: color = "rgba(0, 0, 0, 1)" else: color = "rgba(%s, %s, %s, 1)" % (r, g, b) face = layer.customProperty("labeling/fontFamily") if face is None: face = "," else: face = " \\'%s\\'," % face palyr = QgsPalLayerSettings() palyr.readFromLayer(layer) sv = palyr.scaleVisibility if sv: min = float(palyr.scaleMin) max = float(palyr.scaleMax) if min != 0: min = 1 / ((1 / min) * 39.37 * 90.7) max = 1 / ((1 / max) * 39.37 * 90.7) labelRes = " && resolution > %(min)d " % {"min": min} labelRes += "&& resolution < %(max)d" % {"max": max} else: labelRes = "" buffer = palyr.bufferDraw if buffer: bufferColor = palyr.bufferColor.name() bufferWidth = palyr.bufferSize stroke = """ stroke: new ol.style.Stroke({ color: "%s", width: %d }),""" % (bufferColor, bufferWidth) else: stroke = "" if style != "": style = getStyle(style, cluster, labelRes, labelText, sln, size, face, color, value) else: style = "''" except Exception, e: style = """{ /* """ + traceback.format_exc() + " */}" QgsMessageLog.logMessage(traceback.format_exc(), "qgis2web", level=QgsMessageLog.CRITICAL) path = os.path.join(stylesFolder, sln + "_style.js") with codecs.open(path, "w", "utf-8") as f: f.write('''%(defs)s var styleCache_%(name)s={} var style_%(name)s = %(style)s;''' % { "defs": defs, "name": sln, "style": style })
def check_pat_symbols(): pat_xml = os.path.join(PLUGIN_DIR, 'PAT_Symbols.xml') if not os.path.exists(pat_xml): return loaded_date = read_setting(PLUGIN_NAME + "/PAT_SYMBOLOGY") if loaded_date is not None: loaded_date = datetime.strptime(loaded_date,'%Y-%m-%d %H:%M:%S') xml_date = datetime.fromtimestamp(os.path.getmtime(pat_xml)).replace(microsecond=0) if loaded_date is None or xml_date > loaded_date: style = QgsStyleV2.defaultStyle() # add a group if it doesn't exist. group_id = style.groupId('PAT') if group_id == 0: group_id = style.addGroup('PAT') xml_file = QFile(pat_xml) document = QDomDocument() if not document.setContent(xml_file): LOGGER.debug('Could not open file {}'.format(xml_file)) return xml_file.close() document_element = document.documentElement() if document_element.tagName() != 'qgis_style': LOGGER.debug("File {} doesn't contain qgis styles".format(xml_file)) return # Get all the symbols symbols = [] symbols_element = document_element.firstChildElement('symbols') symbol_element = symbols_element.firstChildElement() while not symbol_element.isNull(): if symbol_element.tagName() == 'symbol': symbol = QgsSymbolLayerV2Utils.loadSymbol(symbol_element) if symbol: symbols.append({ 'name': symbol_element.attribute('name'), 'symbol': symbol }) symbol_element = symbol_element.nextSiblingElement() # Get all the colorramps colorramps = [] ramps_element = document_element.firstChildElement('colorramps') ramp_element = ramps_element.firstChildElement() while not ramp_element.isNull(): if ramp_element.tagName() == 'colorramp': colorramp = QgsSymbolLayerV2Utils.loadColorRamp(ramp_element) if colorramp: colorramps.append({ 'name': ramp_element.attribute('name'), 'colorramp': colorramp }) ramp_element = ramp_element.nextSiblingElement() for symbol in symbols: if style.addSymbol(symbol['name'], symbol['symbol'], True): style.group(QgsStyleV2.SymbolEntity, symbol['name'], group_id) for colorramp in colorramps: if style.addColorRamp(colorramp['name'], colorramp['colorramp'], True): style.group(QgsStyleV2.ColorrampEntity, colorramp['name'], group_id) LOGGER.info( 'Loaded {} symbols and {} colour ramps into group {}'.format(len(symbols), len(colorramps), style.groupName(group_id))) write_setting(PLUGIN_NAME + '/PAT_SYMBOLOGY', xml_date.strftime('%Y-%m-%d %H:%M:%S')) return
def updateCenterIcon(self): if (self.mMarkerSymbol == None): return icon = QgsSymbolLayerV2Utils.symbolPreviewIcon( self.mMarkerSymbol, self.mMapMarkerButton.iconSize()) self.mMapMarkerButton.setIcon(icon)
def testQgsGraduatedSymbolRendererV2_1(self): """Test QgsGraduatedSymbolRendererV2: Basic get/set functions """ # Create a renderer renderer = QgsGraduatedSymbolRendererV2() symbol = createMarkerSymbol() renderer.setSourceSymbol(symbol.clone()) self.assertEqual(symbol.dump(), renderer.sourceSymbol().dump(), "Get/set renderer source symbol") attr = '"value"*"value"' renderer.setClassAttribute(attr) self.assertEqual(attr, renderer.classAttribute(), "Get/set renderer class attribute") for m in ( QgsGraduatedSymbolRendererV2.Custom, QgsGraduatedSymbolRendererV2.EqualInterval, QgsGraduatedSymbolRendererV2.Quantile, QgsGraduatedSymbolRendererV2.Jenks, QgsGraduatedSymbolRendererV2.Pretty, QgsGraduatedSymbolRendererV2.StdDev, ): renderer.setMode(m) self.assertEqual(m, renderer.mode(), "Get/set renderer mode") format = createLabelFormat() renderer.setLabelFormat(format) self.assertEqual(dumpLabelFormat(format), dumpLabelFormat(renderer.labelFormat()), "Get/set renderer label format") ramp = createColorRamp() renderer.setSourceColorRamp(ramp) self.assertEqual(dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") renderer.setInvertedColorRamp(True) self.assertTrue(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") renderer.setInvertedColorRamp(False) self.assertFalse(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") value = '"value"*2' exp = QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr = QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setRotationField(value) self.assertEqual(valuestr, renderer.rotationField(), "Get/set renderer rotation field") value = '"value"*3' exp = QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr = QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setSizeScaleField(value) self.assertEqual(valuestr, renderer.sizeScaleField(), "Get/set renderer size scale field") renderer.setSourceColorRamp(ramp) self.assertEqual(dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") for sm in ( QgsSymbolV2.ScaleArea, QgsSymbolV2.ScaleDiameter, ): renderer.setScaleMethod(sm) self.assertEqual(str(sm), str(renderer.scaleMethod()), "Get/set renderer scale method") # test for classificatio with varying size renderer.setGraduatedMethod(QgsGraduatedSymbolRendererV2.GraduatedSize) renderer.setSourceColorRamp(None) renderer.addClassLowerUpper(0, 2) renderer.addClassLowerUpper(2, 4) renderer.addClassLowerUpper(4, 6) renderer.setSymbolSizes(2, 13) self.assertEqual(renderer.maxSymbolSize(), 13) self.assertEqual(renderer.minSymbolSize(), 2) refSizes = [2, (13 + 2) * .5, 13] ctx = QgsRenderContext() for idx, symbol in enumerate(renderer.symbols(ctx)): self.assertEqual(symbol.size(), refSizes[idx])
def testConvertToMapUnits(self): # test QgsSymbolLayerV2Utils::convertToMapUnits() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) # renderer scale should be about 1:291937841 # start with no min/max scale c = QgsMapUnitScale() size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMapUnits, c) self.assertEqual(size, 2.0) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMillimeters, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderPixels, c) self.assertAlmostEqual(size, 4.0, places=5) # minimum size greater than the calculated size, so size should be limited to minSizeMM c.minSizeMM = 5 c.minSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMapUnits, c) self.assertAlmostEqual(size, 118.1102362, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMillimeters, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderPixels, c) self.assertAlmostEqual(size, 4.0, places=5) c.minSizeMMEnabled = False # maximum size less than the calculated size, so size should be limited to maxSizeMM c.maxSizeMM = 0.05 c.maxSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMapUnits, c) self.assertAlmostEqual(size, 1.1811023622047245, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMillimeters, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderPixels, c) self.assertAlmostEqual(size, 4.0, places=5) c.maxSizeMMEnabled = False # test with minimum scale set c.minScale = 1 / 150000000.0 size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMapUnits, c) self.assertAlmostEqual(size, 15.57001821, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMillimeters, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderPixels, c) self.assertAlmostEqual(size, 4.0, places=5) c.minScale = 0 # test with maximum scale set c.maxScale = 1 / 1550000000.0 size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMapUnits, c) self.assertAlmostEqual(size, 1.50677595625, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderMillimeters, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsUnitTypes.RenderPixels, c) self.assertAlmostEqual(size, 4.0, places=5) c.maxScale = 0
def testConvertToMapUnits(self): # test QgsSymbolLayerV2Utils::convertToMapUnits() using QgsMapUnitScale ms = QgsMapSettings() ms.setExtent(QgsRectangle(0, 0, 100, 100)) ms.setOutputSize(QSize(100, 50)) ms.setOutputDpi(300) r = QgsRenderContext.fromMapSettings(ms) # renderer scale should be about 1:291937841 # start with no min/max scale c = QgsMapUnitScale() size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertEqual(size, 2.0) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 4.0, places=5) # minimum size greater than the calculated size, so size should be limited to minSizeMM c.minSizeMM = 5 c.minSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 118.1102362, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 4.0, places=5) c.minSizeMMEnabled = False # maximum size less than the calculated size, so size should be limited to maxSizeMM c.maxSizeMM = 0.05 c.maxSizeMMEnabled = True size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 1.1811023622047245, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 4.0, places=5) c.maxSizeMMEnabled = False # test with minimum scale set c.minScale = 1 / 150000000.0 size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 15.57001821, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 4.0, places=5) c.minScale = 0 # test with maximum scale set c.maxScale = 1 / 1550000000.0 size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MapUnit, c) self.assertAlmostEqual(size, 1.50677595625, places=5) # only conversion from mapunits should be affected size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.MM, c) self.assertAlmostEqual(size, 47.244094, places=5) size = QgsSymbolLayerV2Utils.convertToMapUnits(r, 2, QgsSymbolV2.Pixel, c) self.assertAlmostEqual(size, 4.0, places=5) c.maxScale = 0
def updatePageStyle(self): if ( self.mComposition ): icon = QgsSymbolLayerV2Utils.symbolPreviewIcon( self.mComposition.pageStyleSymbol(), self.mPageStyleButton.iconSize() ) self.mPageStyleButton.setIcon( icon )
def testQgsGraduatedSymbolRendererV2_1(self): """Test QgsGraduatedSymbolRendererV2: Basic get/set functions """ # Create a renderer renderer = QgsGraduatedSymbolRendererV2() symbol = createMarkerSymbol() renderer.setSourceSymbol(symbol.clone()) self.assertEqual(symbol.dump(), renderer.sourceSymbol().dump(), "Get/set renderer source symbol") attr = '"value"*"value"' renderer.setClassAttribute(attr) self.assertEqual(attr, renderer.classAttribute(), "Get/set renderer class attribute") for m in ( QgsGraduatedSymbolRendererV2.Custom, QgsGraduatedSymbolRendererV2.EqualInterval, QgsGraduatedSymbolRendererV2.Quantile, QgsGraduatedSymbolRendererV2.Jenks, QgsGraduatedSymbolRendererV2.Pretty, QgsGraduatedSymbolRendererV2.StdDev, ): renderer.setMode(m) self.assertEqual(m, renderer.mode(), "Get/set renderer mode") format = createLabelFormat() renderer.setLabelFormat(format) self.assertEqual(dumpLabelFormat(format), dumpLabelFormat(renderer.labelFormat()), "Get/set renderer label format") ramp = createColorRamp() renderer.setSourceColorRamp(ramp) self.assertEqual(dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") renderer.setInvertedColorRamp(True) self.assertTrue(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") renderer.setInvertedColorRamp(False) self.assertFalse(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") value = '"value"*2' exp = QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr = QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setRotationField(value) self.assertEqual(valuestr, renderer.rotationField(), "Get/set renderer rotation field") value = '"value"*3' exp = QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr = QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setSizeScaleField(value) self.assertEqual(valuestr, renderer.sizeScaleField(), "Get/set renderer size scale field") renderer.setSourceColorRamp(ramp) self.assertEqual(dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") for sm in ( QgsSymbolV2.ScaleArea, QgsSymbolV2.ScaleDiameter, ): renderer.setScaleMethod(sm) self.assertEqual(str(sm), str(renderer.scaleMethod()), "Get/set renderer scale method")
def testQgsGraduatedSymbolRendererV2_1(self): """Test QgsGraduatedSymbolRendererV2: Basic get/set functions """ # Create a renderer renderer = QgsGraduatedSymbolRendererV2() symbol = createMarkerSymbol() renderer.setSourceSymbol(symbol.clone()) self.assertEqual(symbol.dump(), renderer.sourceSymbol().dump(), "Get/set renderer source symbol") attr = '"value"*"value"' renderer.setClassAttribute(attr) self.assertEqual(attr, renderer.classAttribute(), "Get/set renderer class attribute") for m in ( QgsGraduatedSymbolRendererV2.Custom, QgsGraduatedSymbolRendererV2.EqualInterval, QgsGraduatedSymbolRendererV2.Quantile, QgsGraduatedSymbolRendererV2.Jenks, QgsGraduatedSymbolRendererV2.Pretty, QgsGraduatedSymbolRendererV2.StdDev, ): renderer.setMode(m) self.assertEqual(m, renderer.mode(), "Get/set renderer mode") format = createLabelFormat() renderer.setLabelFormat(format) self.assertEqual( dumpLabelFormat(format), dumpLabelFormat(renderer.labelFormat()), "Get/set renderer label format") ramp = createColorRamp() renderer.setSourceColorRamp(ramp) self.assertEqual( dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") renderer.setInvertedColorRamp(True) self.assertTrue(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") renderer.setInvertedColorRamp(False) self.assertFalse(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") value = '"value"*2' exp = QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr = QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setRotationField(value) self.assertEqual(valuestr, renderer.rotationField(), "Get/set renderer rotation field") value = '"value"*3' exp = QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr = QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setSizeScaleField(value) self.assertEqual(valuestr, renderer.sizeScaleField(), "Get/set renderer size scale field") renderer.setSourceColorRamp(ramp) self.assertEqual( dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") for sm in ( QgsSymbolV2.ScaleArea, QgsSymbolV2.ScaleDiameter, ): renderer.setScaleMethod(sm) self.assertEqual(str(sm), str(renderer.scaleMethod()), "Get/set renderer scale method") # test for classificatio with varying size renderer.setGraduatedMethod(QgsGraduatedSymbolRendererV2.GraduatedSize) renderer.setSourceColorRamp(None) renderer.addClassLowerUpper(0, 2) renderer.addClassLowerUpper(2, 4) renderer.addClassLowerUpper(4, 6) renderer.setSymbolSizes(2, 13) self.assertEqual(renderer.maxSymbolSize(), 13) self.assertEqual(renderer.minSymbolSize(), 2) refSizes = [2, (13 + 2) * .5, 13] ctx = QgsRenderContext() for idx, symbol in enumerate(renderer.symbols2(ctx)): self.assertEqual(symbol.size(), refSizes[idx])
def testQgsGraduatedSymbolRendererV2_1(self): """Test QgsGraduatedSymbolRendererV2: Basic get/set functions """ # Create a renderer renderer=QgsGraduatedSymbolRendererV2() symbol=createMarkerSymbol() renderer.setSourceSymbol(symbol.clone()) self.assertEqual(symbol.dump(),renderer.sourceSymbol().dump(),"Get/set renderer source symbol") attr='"value"*"value"' renderer.setClassAttribute(attr) self.assertEqual(attr,renderer.classAttribute(),"Get/set renderer class attribute") for m in ( QgsGraduatedSymbolRendererV2.Custom, QgsGraduatedSymbolRendererV2.EqualInterval, QgsGraduatedSymbolRendererV2.Quantile, QgsGraduatedSymbolRendererV2.Jenks, QgsGraduatedSymbolRendererV2.Pretty, QgsGraduatedSymbolRendererV2.StdDev, ): renderer.setMode(m) self.assertEqual(m,renderer.mode(),"Get/set renderer mode") format=createLabelFormat() renderer.setLabelFormat(format) self.assertEqual( dumpLabelFormat(format), dumpLabelFormat(renderer.labelFormat()), "Get/set renderer label format") ramp=createColorRamp() renderer.setSourceColorRamp(ramp) self.assertEqual( dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") renderer.setInvertedColorRamp(True) self.assertTrue(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") renderer.setInvertedColorRamp(False) self.assertFalse(renderer.invertedColorRamp(), "Get/set renderer inverted color ramp") value='"value"*2' exp=QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr=QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setRotationField(value) self.assertEqual(valuestr,renderer.rotationField(), "Get/set renderer rotation field") value='"value"*3' exp=QgsSymbolLayerV2Utils.fieldOrExpressionToExpression(value) valuestr=QgsSymbolLayerV2Utils.fieldOrExpressionFromExpression(exp) renderer.setSizeScaleField(value) self.assertEqual(valuestr,renderer.sizeScaleField(), "Get/set renderer size scale field") renderer.setSourceColorRamp(ramp) self.assertEqual( dumpColorRamp(ramp), dumpColorRamp(renderer.sourceColorRamp()), "Get/set renderer color ramp") for sm in ( QgsSymbolV2.ScaleArea, QgsSymbolV2.ScaleDiameter, ): renderer.setScaleMethod(sm) self.assertEqual(str(sm),str(renderer.scaleMethod()), "Get/set renderer scale method")