Example #1
0
    def testConvertFromEmbedded(self):
        """
        Test converting an embedded symbol renderer to a rule based renderer
        """
        points_layer = QgsVectorLayer('Point', 'Polys', 'memory')
        f = QgsFeature()
        f.setGeometry(QgsGeometry.fromWkt('Point(-100 30)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({'name': 'triangle', 'size': 10, 'color': '#ff0000', 'outline_style': 'no'}))
        self.assertTrue(points_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Point(-110 40)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({'name': 'square', 'size': 7, 'color': '#00ff00', 'outline_style': 'no'}))
        self.assertTrue(points_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Point(-90 50)'))
        f.setEmbeddedSymbol(None)
        self.assertTrue(points_layer.dataProvider().addFeature(f))

        renderer = QgsEmbeddedSymbolRenderer(defaultSymbol=QgsMarkerSymbol.createSimple({'name': 'star', 'size': 10, 'color': '#ff00ff', 'outline_style': 'no'}))
        points_layer.setRenderer(renderer)

        rule_based = QgsRuleBasedRenderer.convertFromRenderer(renderer, points_layer)
        self.assertEqual(len(rule_based.rootRule().children()), 3)
        rule_0 = rule_based.rootRule().children()[0]
        self.assertEqual(rule_0.filterExpression(), '$id=1')
        self.assertEqual(rule_0.label(), '1')
        self.assertEqual(rule_0.symbol().color().name(), '#ff0000')
        rule_1 = rule_based.rootRule().children()[1]
        self.assertEqual(rule_1.filterExpression(), '$id=2')
        self.assertEqual(rule_1.label(), '2')
        self.assertEqual(rule_1.symbol().color().name(), '#00ff00')
        rule_2 = rule_based.rootRule().children()[2]
        self.assertEqual(rule_2.filterExpression(), 'ELSE')
        self.assertEqual(rule_2.label(), 'All other features')
        self.assertEqual(rule_2.symbol().color().name(), '#ff00ff')
    def testPoints(self):
        points_layer = QgsVectorLayer('Point', 'Polys', 'memory')
        f = QgsFeature()
        f.setGeometry(QgsGeometry.fromWkt('Point(-100 30)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({'name': 'triangle', 'size': 10, 'color': '#ff0000', 'outline_style': 'no'}))
        self.assertTrue(points_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Point(-110 40)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({'name': 'square', 'size': 7, 'color': '#00ff00', 'outline_style': 'no'}))
        self.assertTrue(points_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Point(-90 50)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({'name': 'circle', 'size': 9, 'color': '#0000ff', 'outline_style': 'no'}))
        self.assertTrue(points_layer.dataProvider().addFeature(f))

        renderer = QgsEmbeddedSymbolRenderer(defaultSymbol=QgsMarkerSymbol.createSimple({'name': 'star', 'size': 10, 'color': '#ff0000', 'outline_style': 'no'}))
        points_layer.setRenderer(renderer)

        self.mapsettings.setLayers([points_layer])

        renderchecker = QgsMultiRenderChecker()
        renderchecker.setMapSettings(self.mapsettings)
        renderchecker.setControlPathPrefix('embedded')
        renderchecker.setControlName('expected_embedded_points')
        res = renderchecker.runTest('embedded_points')
        TestQgsEmbeddedSymbolRenderer.report += renderchecker.report()
        self.assertTrue(res)
    def testLines(self):
        line_layer = QgsVectorLayer('LineString', 'Polys', 'memory')
        f = QgsFeature()
        f.setGeometry(QgsGeometry.fromWkt('LineString(-100 30, -120 30)'))
        f.setEmbeddedSymbol(QgsLineSymbol.createSimple({'line_width': 3, 'line_color': '#ff0000'}))
        self.assertTrue(line_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('LineString(-110 40, -130 40)'))
        f.setEmbeddedSymbol(QgsLineSymbol.createSimple({'line_width': 1.5, 'line_color': '#00ff00'}))
        self.assertTrue(line_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('LineString(-90 50, -140 50)'))
        f.setEmbeddedSymbol(
            QgsLineSymbol.createSimple({'line_width': 2, 'line_color': '#0000ff', 'line_style': 'dash'}))
        self.assertTrue(line_layer.dataProvider().addFeature(f))

        renderer = QgsEmbeddedSymbolRenderer(defaultSymbol=QgsLineSymbol.createSimple({'line_width': 10, 'line_color': '#ff0000'}))
        line_layer.setRenderer(renderer)

        self.mapsettings.setLayers([line_layer])

        renderchecker = QgsMultiRenderChecker()
        renderchecker.setMapSettings(self.mapsettings)
        renderchecker.setControlPathPrefix('embedded')
        renderchecker.setControlName('expected_embedded_lines')
        res = renderchecker.runTest('embedded_lines')
        TestQgsEmbeddedSymbolRenderer.report += renderchecker.report()
        self.assertTrue(res)
    def testFills(self):
        line_layer = QgsVectorLayer('Polygon', 'Polys', 'memory')
        f = QgsFeature()
        f.setGeometry(QgsGeometry.fromWkt('Polygon((-100 30, -120 30, -110 20, -100 30))'))
        f.setEmbeddedSymbol(QgsFillSymbol.createSimple({'color': '#ff0000', 'outline_style': 'no'}))
        self.assertTrue(line_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Polygon((-110 40, -130 40, -120 50, -110 40))'))
        f.setEmbeddedSymbol(QgsFillSymbol.createSimple({'color': '#00ff00', 'outline_style': 'no'}))
        self.assertTrue(line_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Polygon((-90 50, -140 50, -110 60, -90 50))'))
        f.setEmbeddedSymbol(QgsFillSymbol.createSimple({'color': '#0000ff', 'outline_style': 'no'}))
        self.assertTrue(line_layer.dataProvider().addFeature(f))

        renderer = QgsEmbeddedSymbolRenderer(defaultSymbol=QgsFillSymbol.createSimple({'color': '#ffff00', 'outline_style': 'no'}))
        line_layer.setRenderer(renderer)

        self.mapsettings.setLayers([line_layer])

        renderchecker = QgsMultiRenderChecker()
        renderchecker.setMapSettings(self.mapsettings)
        renderchecker.setControlPathPrefix('embedded')
        renderchecker.setControlName('expected_embedded_polys')
        res = renderchecker.runTest('embedded_polys')
        TestQgsEmbeddedSymbolRenderer.report += renderchecker.report()
        self.assertTrue(res)
    def testConvertFromEmbedded(self):
        """
        Test converting an embedded symbol renderer to a categorized renderer
        """
        points_layer = QgsVectorLayer('Point', 'Polys', 'memory')
        f = QgsFeature()
        f.setGeometry(QgsGeometry.fromWkt('Point(-100 30)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({
                'name': 'triangle',
                'size': 10,
                'color': '#ff0000',
                'outline_style': 'no'
            }))
        self.assertTrue(points_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Point(-110 40)'))
        f.setEmbeddedSymbol(
            QgsMarkerSymbol.createSimple({
                'name': 'square',
                'size': 7,
                'color': '#00ff00',
                'outline_style': 'no'
            }))
        self.assertTrue(points_layer.dataProvider().addFeature(f))
        f.setGeometry(QgsGeometry.fromWkt('Point(-90 50)'))
        f.setEmbeddedSymbol(None)
        self.assertTrue(points_layer.dataProvider().addFeature(f))

        renderer = QgsEmbeddedSymbolRenderer(
            defaultSymbol=QgsMarkerSymbol.createSimple({
                'name': 'star',
                'size': 10,
                'color': '#ff00ff',
                'outline_style': 'no'
            }))
        points_layer.setRenderer(renderer)

        categorized = QgsCategorizedSymbolRenderer.convertFromRenderer(
            renderer, points_layer)
        self.assertEqual(categorized.classAttribute(), '$id')
        self.assertEqual(len(categorized.categories()), 3)
        cc = categorized.categories()[0]
        self.assertEqual(cc.value(), 1)
        self.assertEqual(cc.label(), '1')
        self.assertEqual(cc.symbol().color().name(), '#ff0000')
        cc = categorized.categories()[1]
        self.assertEqual(cc.value(), 2)
        self.assertEqual(cc.label(), '2')
        self.assertEqual(cc.symbol().color().name(), '#00ff00')
        cc = categorized.categories()[2]
        self.assertEqual(cc.value(), None)
        self.assertEqual(cc.label(), '')
        self.assertEqual(cc.symbol().color().name(), '#ff00ff')