def remove_mask_filter(layer): if not isinstance(layer, QgsVectorLayer): return False # check if a layer has already a mask filter enabled if layer.labeling() is None: return False settings = layer.labeling().settings() try: if settings.dataDefinedProperties().hasProperty(QgsPalLayerSettings.Show) and \ settings.dataDefinedProperties().property(QgsPalLayerSettings.Show).expressionString().startswith(SPATIAL_FILTER): # new settings settings = QgsPalLayerSettings(layer.labeling().settings()) settings.dataDefinedProperties().setProperty(QgsPalLayerSettings.Show, True) if isinstance(layer.labeling(), QgsVectorLayerSimpleLabeling): layer.setLabeling(QgsVectorLayerSimpleLabeling(settings)) except Exception as e: for m in e.args: QgsMessageLog.logMessage(m, 'Extensions')
def add_mask_filter(layer): if not isinstance(layer, QgsVectorLayer): return False # check if a layer has already a mask filter enabled if layer.labeling() is None: return False try: expr = "%s(%d)" % (SPATIAL_FILTER, layer.crs().postgisSrid()) prop = QgsProperty() prop.setExpressionString(expr) # new settings settings = QgsPalLayerSettings(layer.labeling().settings()) settings.dataDefinedProperties().setProperty(QgsPalLayerSettings.Show, prop) if isinstance(layer.labeling(), QgsVectorLayerSimpleLabeling): layer.setLabeling(QgsVectorLayerSimpleLabeling(settings)) except Exception as e: for m in e.args: QgsMessageLog.logMessage(m, 'Extensions')
def add_mask_filter(layer): if not isinstance(layer, QgsVectorLayer): return False # check if a layer has already a mask filter enabled if layer.labeling() is None: return False try: expr = "%s(%d)" % (SPATIAL_FILTER, layer.crs().postgisSrid()) prop = QgsProperty() prop.setExpressionString(expr) # new settings settings = QgsPalLayerSettings(layer.labeling().settings()) settings.dataDefinedProperties().setProperty(QgsPalLayerSettings.Show, prop) if isinstance(layer.labeling(), QgsVectorLayerSimpleLabeling): layer.setLabeling(QgsVectorLayerSimpleLabeling(settings)) except Exception as e: for m in e.args: QgsMessageLog.logMessage(m, "Extensions")
def remove_mask_filter(layer): if not isinstance(layer, QgsVectorLayer): return False # check if a layer has already a mask filter enabled if layer.labeling() is None: return False settings = layer.labeling().settings() try: if settings.dataDefinedProperties().hasProperty( QgsPalLayerSettings.Show) and settings.dataDefinedProperties( ).property(QgsPalLayerSettings.Show).expressionString( ).startswith(SPATIAL_FILTER): # new settings settings = QgsPalLayerSettings(layer.labeling().settings()) settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.Show, True) if isinstance(layer.labeling(), QgsVectorLayerSimpleLabeling): layer.setLabeling(QgsVectorLayerSimpleLabeling(settings)) except Exception as e: for m in e.args: QgsMessageLog.logMessage(m, "Extensions")
def testCreateProperty(self): s = QgsAuxiliaryStorage() self.assertTrue(s.isValid()) # Create a new auxiliary layer with 'pk' as key vl = createLayer() pkf = vl.fields().field(vl.fields().indexOf('pk')) al = s.createAuxiliaryLayer(pkf, vl) self.assertTrue(al.isValid()) vl.setAuxiliaryLayer(al) # Create a new labeling property on layer without labels key = QgsPalLayerSettings.PositionX index = QgsAuxiliaryLayer.createProperty(key, vl) self.assertEqual(index, -1) vl.setLabeling(QgsVectorLayerSimpleLabeling(QgsPalLayerSettings())) index = QgsAuxiliaryLayer.createProperty(key, vl) p = QgsPalLayerSettings.propertyDefinitions()[key] afName = QgsAuxiliaryLayer.nameFromProperty(p, True) afIndex = vl.fields().indexOf(afName) self.assertEqual(index, afIndex) # with existing property key = QgsPalLayerSettings.PositionY settings = QgsPalLayerSettings() settings.dataDefinedProperties().setProperty(key, QgsProperty.fromExpression('$y + 20')) vl.setLabeling(QgsVectorLayerSimpleLabeling(settings)) # without overwriting existing, property should be upgraded to coalesce("aux field", 'existing expression') type index = QgsAuxiliaryLayer.createProperty(key, vl, False) p = QgsPalLayerSettings.propertyDefinitions()[key] afName = QgsAuxiliaryLayer.nameFromProperty(p, True) afIndex = vl.fields().indexOf(afName) self.assertEqual(index, afIndex) settings = vl.labeling().settings() self.assertTrue(settings.dataDefinedProperties().property(key).isActive()) self.assertEqual(settings.dataDefinedProperties().property(key).asExpression(), 'coalesce("auxiliary_storage_labeling_positiony",$y + 20)') # with existing but invalid field name key = QgsPalLayerSettings.PositionY settings = QgsPalLayerSettings() settings.dataDefinedProperties().setProperty(key, QgsProperty.fromField('')) vl.setLabeling(QgsVectorLayerSimpleLabeling(settings)) # even when asked to not overwrite existing, this is an invalid property and should be overwritten index = QgsAuxiliaryLayer.createProperty(key, vl, False) p = QgsPalLayerSettings.propertyDefinitions()[key] afName = QgsAuxiliaryLayer.nameFromProperty(p, True) afIndex = vl.fields().indexOf(afName) self.assertEqual(index, afIndex) settings = vl.labeling().settings() self.assertTrue(settings.dataDefinedProperties().property(key).isActive()) self.assertEqual(settings.dataDefinedProperties().property(key).asExpression(), '"auxiliary_storage_labeling_positiony"') # with existing valid field name key = QgsPalLayerSettings.PositionY settings = QgsPalLayerSettings() settings.dataDefinedProperties().setProperty(key, QgsProperty.fromField('asd')) vl.setLabeling(QgsVectorLayerSimpleLabeling(settings)) index = QgsAuxiliaryLayer.createProperty(key, vl, False) p = QgsPalLayerSettings.propertyDefinitions()[key] afName = QgsAuxiliaryLayer.nameFromProperty(p, True) afIndex = vl.fields().indexOf(afName) self.assertEqual(index, afIndex) settings = vl.labeling().settings() self.assertTrue(settings.dataDefinedProperties().property(key).isActive()) self.assertEqual(settings.dataDefinedProperties().property(key).asExpression(), 'coalesce("auxiliary_storage_labeling_positiony","asd")') # with overwrite existing key = QgsPalLayerSettings.Show settings = QgsPalLayerSettings() settings.dataDefinedProperties().setProperty(key, QgsProperty.fromExpression('$y > 20')) vl.setLabeling(QgsVectorLayerSimpleLabeling(settings)) # existing property should be discarded index = QgsAuxiliaryLayer.createProperty(key, vl, True) p = QgsPalLayerSettings.propertyDefinitions()[key] afName = QgsAuxiliaryLayer.nameFromProperty(p, True) afIndex = vl.fields().indexOf(afName) self.assertEqual(index, afIndex) settings = vl.labeling().settings() self.assertTrue(settings.dataDefinedProperties().property(key).isActive()) self.assertEqual(settings.dataDefinedProperties().property(key).field(), 'auxiliary_storage_labeling_show')
def convert_fdo_annotations(dest_layer: QgsVectorLayer, context): # pylint: disable=unused-argument """ Converts FDO annotations """ # one label class, use simple labeling label_settings = QgsPalLayerSettings() label_settings.fieldName = 'TextString' label_settings.drawLabels = True label_settings.placement = QgsPalLayerSettings.OverPoint label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.Family, QgsProperty.fromField('FontName')) label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.Size, QgsProperty.fromField('FontSize')) label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.Bold, QgsProperty.fromField('Bold')) label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.Italic, QgsProperty.fromField('Italic')) label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.Underline, QgsProperty.fromField('Underline')) quadrant_property = QgsProperty.fromExpression("""case when "VerticalAlignment" = 0 then -- top case when "HorizontalAlignment" = 0 then 0 when "HorizontalAlignment" = 1 then 1 when "HorizontalAlignment" = 2 then 2 end when "VerticalAlignment" = 1 then -- center case when "HorizontalAlignment" = 0 then 3 when "HorizontalAlignment" = 1 then 4 when "HorizontalAlignment" = 2 then 5 end when "VerticalAlignment" in (2,3) then -- baseline, bottom case when "HorizontalAlignment" = 0 then 6 when "HorizontalAlignment" = 1 then 7 when "HorizontalAlignment" = 2 then 8 end end""") label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.OffsetQuad, quadrant_property) label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.LabelRotation, QgsProperty.fromExpression('360-"Angle"')) label_settings.dataDefinedProperties().setProperty( QgsPalLayerSettings.OffsetXY, QgsProperty.fromExpression( ' concat( "XOffset" ,\',\', "YOffset" )')) labeling = QgsVectorLayerSimpleLabeling(label_settings) dest_layer.setLabeling(labeling)