Beispiel #1
0
    def testOpenIteratorAfterLayerRemoval(self):
        """
        Test that removing layer after opening an iterator does not crash. All required
        information should be captured in the iterator's source and there MUST be no
        links between the iterators and the layer's data provider
        """
        if not getattr(self, 'getEditableLayer', None):
            return

        l = self.getEditableLayer()
        self.assertTrue(l.isValid())

        # store the source
        source = QgsVectorLayerFeatureSource(l)

        # delete the layer
        del l

        # get the features
        pks = []
        for f in source.getFeatures():
            pks.append(f['pk'])
        self.assertEqual(set(pks), {1, 2, 3, 4, 5})
    def testOpenIteratorAfterLayerRemoval(self):
        """
        Test that removing layer after opening an iterator does not crash. All required
        information should be captured in the iterator's source and there MUST be no
        links between the iterators and the layer's data provider
        """
        if not getattr(self, 'getEditableLayer', None):
            return

        l = self.getEditableLayer()
        self.assertTrue(l.isValid())

        # store the source
        source = QgsVectorLayerFeatureSource(l)

        # delete the layer
        del l

        # get the features
        pks = []
        for f in source.getFeatures():
            pks.append(f['pk'])
        self.assertEqual(set(pks), {1, 2, 3, 4, 5})
Beispiel #3
0
    def createRenderer(self) -> QgsSingleSymbolRenderer:  # pylint: disable=missing-function-docstring
        filtering = SettingsRegistry.label_filtering()

        topological = self.topological and self.layer.selectedFeatureCount(
        ) == 2

        if filtering == SettingsRegistry.LABEL_NONE:
            return QgsNullSymbolRenderer()
        if filtering == SettingsRegistry.LABEL_SELECTED:
            if self.feature_id is None or self.vertex_number is None:
                # labeling selected vertex only, and no selection => no renderer
                return QgsNullSymbolRenderer()
            selection = {self.feature_id}
            vertex_number = self.vertex_number
        else:
            selection = self.layer.selectedFeatureIds()
            vertex_number = None

        if topological:
            request = QgsFeatureRequest().setFilterFids(
                self.layer.selectedFeatureIds()).setNoAttributes()
            topological_geometries = {
                f.id(): f.geometry()
                for f in self.layer.getFeatures(request)
            }
        else:
            topological_geometries = None

        layer_source = QgsVectorLayerFeatureSource(self.layer)

        return VertexHighlighterRenderer(
            source=layer_source,
            layer_type=self.layer_type,
            selection=selection,
            vertex_number=vertex_number,
            topological_geometries=topological_geometries,
        )