Exemple #1
0
    def activate(self):
        cursor = QCursor()
        cursor.setShape(Qt.ArrowCursor)
        self.iface.mapCanvas().setCursor(cursor)

        myLayers = []
        # Editing
        layers = self.getLayers()
        for layer in layers:
            openedLayerPath = self.getLayerPath(layer)
            for name in self.ownMainLayers:
                layerPath = self.generatePath(self.ProjectDirectory, self.NetworkName + "_" + name + ".shp")
                if openedLayerPath == layerPath:
                    myLayers.append(layer)
                    if not layer.isEditable():
                        layer.startEditing()
        # Snapping
        self.snapper = QgsMapCanvasSnappingUtils(self.iface.mapCanvas())
        self.snapper.setMapSettings(self.iface.mapCanvas().mapSettings())
        config = QgsSnappingConfig(QgsProject.instance())
        config.setType(2)  # Vertex
        config.setMode(2)  # All layers
        config.setTolerance(1)
        config.setUnits(2)  # Pixels
        config.setEnabled(True)
        self.snapper.setConfig(config)
def configure_snapping_settings():
    my_snap_config = QgsSnappingConfig()
    my_snap_config.setEnabled(True)
    my_snap_config.setMode(QgsSnappingConfig.AllLayers)
    my_snap_config.setType(QgsSnappingConfig.Vertex)
    my_snap_config.setUnits(QgsTolerance.Pixels)
    my_snap_config.setTolerance(10)
    my_snap_config.setIntersectionSnapping(True)

    QgsProject.instance().setSnappingConfig(my_snap_config)
 def configSnapper(self, type):
     # Snapping
     self.snapper = QgsMapCanvasSnappingUtils(self.iface.mapCanvas())
     self.snapper.setMapSettings(self.iface.mapCanvas().mapSettings())
     config = QgsSnappingConfig(QgsProject.instance())
     config.setType(type)  # 1: Vertex; 2:Segment
     config.setMode(2)  # All layers
     config.setTolerance(10)
     config.setUnits(1)  # Pixels
     config.setEnabled(True)
     self.snapper.setConfig(config)
    def activate(self):
        QgsMapTool.activate(self)

        # Snapping
        self.snapper = QgsMapCanvasSnappingUtils(self.iface.mapCanvas())
        self.snapper.setMapSettings(self.iface.mapCanvas().mapSettings())
        config = QgsSnappingConfig(QgsProject.instance())
        config.setType(1)  # Vertex
        config.setMode(2)  # All layers
        config.setTolerance(2)
        config.setUnits(2)  # Pixels
        config.setEnabled(True)
        self.snapper.setConfig(config)
def run(id, gtotool, config, debug):
    try:
        #common tool objects
        iface = gtotool.iface
        info = gtotool.info
        gtomain = gtotool.gtomain
        #tool data
        activelayer = config.get('active_layer', None)
        active_tool = config['active_tool']
        snapmode = config['snap_mode']
        topologicalediting = config['topologicalediting']
        snapping_on_intersection = config['snapping_on_intersection']
        #default snappings
        default_snap_type = config['default_snap_type']
        default_snap_tolerance = config['default_snap_tolerance']
        default_snap_tolerance_unit = config['default_snap_tolerance_unit']
        #layers for advanced setting
        layers = config['layers']

        # needed objects
        prj = QgsProject.instance()
        snapconfig = QgsSnappingConfig(prj)
        avoidIntersectLayers = []

        if snapmode == 0:
            snapconfig.setEnabled(False)
        else:
            # set default snapping
            snapconfig.setMode(snapmode)
            snapconfig.setIntersectionSnapping(snapping_on_intersection)
            snapconfig.setType(default_snap_type)
            snapconfig.setUnits(default_snap_tolerance_unit)
            snapconfig.setTolerance(default_snap_tolerance)

            if snapmode == QgsSnappingConfig.AdvancedConfiguration:
                #disable snapping for all layers
                for maplayername, layer in prj.mapLayers().items():
                    if isinstance(layer, QgsVectorLayer):
                        snaplayer = snapconfig.individualLayerSettings(layer)
                        if layer.name() in layers:
                            snaplayer.setEnabled(True)
                        else:
                            snaplayer.setEnabled(False)
                        snapconfig.setIndividualLayerSettings(layer, snaplayer)
                #set settings for layers
                for setting in layers:
                    if debug: info.log("settings:", setting)
                    maplayer = prj.mapLayersByName(setting['name'])[0]
                    snaplayer = snapconfig.individualLayerSettings(maplayer)
                    snaplayer.setEnabled(
                        setting.get('snap', snaplayer.enabled()))
                    snaplayer.setUnits(setting.get('units', snaplayer.units()))
                    snaplayer.setTolerance(
                        setting.get('tolerance', snaplayer.tolerance()))
                    snaplayer.setType(
                        setting.get('mode',
                                    setting.get('snap_type',
                                                snaplayer.type())))
                    snapconfig.setIndividualLayerSettings(maplayer, snaplayer)
                    if setting.get('avoidintersection', True):
                        avoidIntersectLayers.append(maplayer)

                prj.avoidIntersectionsLayers = avoidIntersectLayers
            #enable the settings (snapping)
            snapconfig.setEnabled(True)

        #set topology editing for project
        prj.setTopologicalEditing(topologicalediting)
        #set snappingconfig to project
        prj.setSnappingConfig(snapconfig)
    except IndexError as e:
        info.err(e)
    try:
        #set activelayer
        activelayer = prj.mapLayersByName(activelayer)
        if activelayer: activelayer = activelayer[0]
        if isinstance(activelayer, QgsVectorLayer):
            iface.setActiveLayer(activelayer)
    except IndexError as e:
        info.err(e)
    try:
        #start editing
        layer = iface.activeLayer()
        if not layer.isEditable():
            layer.startEditing()
        # run active tool
        if active_tool:
            gtomain.runcmd(active_tool)
    except IndexError as e:
        info.err(e)