def resetSnapping(self):
     self.unlink_mode = False
     # disable previous snapping setting
     proj = QgsProject.instance()
     snapConfig = QgsSnappingConfig()
     if self.settings[0] != '' and self.settings[0]:
         # proj.writeEntry('Digitizing', 'SnappingMode', 'advanced')
         layer = lfh.getLayerByName(self.settings[0])
         if layer:  # layer might have been removed
             snapConfig.setMode(QgsSnappingConfig.AdvancedConfiguration)
             layerSnapConfig = QgsSnappingConfig.IndividualLayerSettings(False, QgsSnappingConfig.Vertex,
                                                                         self.settings[2], QgsTolerance.LayerUnits)
             snapConfig.setIndividualLayerSettings(layer, layerSnapConfig)
             proj.setAvoidIntersectionsLayers([layer])
     if self.settings[1] != 'no unlinks' and self.settings[1]:
         # proj.writeEntry('Digitizing', 'SnappingMode', 'advanced')
         layer = lfh.getLayerByName(self.settings[1])
         if layer:
             snapConfig.setMode(QgsSnappingConfig.AdvancedConfiguration)
             layerSnapConfig = QgsSnappingConfig.IndividualLayerSettings(False, QgsSnappingConfig.Vertex,
                                                                         self.settings[2], QgsTolerance.LayerUnits)
             snapConfig.setIndividualLayerSettings(layer, layerSnapConfig)
             proj.setAvoidIntersectionsLayers([])
     snapConfig.setIntersectionSnapping(False)
     proj.setSnappingConfig(snapConfig)
     return
Esempio n. 2
0
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 setUnlinkSnapping(self):
        # disable previous snapping setting if segment
        self.resetSnapping()

        # snap to vertex
        if self.settings[1] != 'no unlinks':
            self.resetIcons()
            unlink_icon = QPixmap(os.path.dirname(__file__) + "/custom_icons/unlink.png")
            self.unlinksButton.setIcon(QIcon(unlink_icon))
            self.unlinksButton.setIconSize(QSize(40, 40))
            proj = QgsProject.instance()
            # fix_print_with_import
            # fix_print_with_import
            print(proj, 'un')
            proj.writeEntry('Digitizing', 'SnappingMode', 'advanced')
            layer = lfh.getLayerByName(self.settings[0])
            unlinks_layer = lfh.getLayerByName(self.settings[1])
            # if unlinks_layer.isEditable():
            #    unlinks_layer.commitChanges()
            # else:
            #    unlinks_layer.startEditing()
            self.iface.setActiveLayer(unlinks_layer)
            snapConfig = QgsSnappingConfig()
            snapConfig.setMode(QgsSnappingConfig.AdvancedConfiguration)
            layerSnapConfig = QgsSnappingConfig.IndividualLayerSettings(True, QgsSnappingConfig.Vertex,
                                                                        self.settings[2], QgsTolerance.LayerUnits)
            snapConfig.setIndividualLayerSettings(layer, layerSnapConfig)
            proj.setAvoidIntersectionsLayers([layer])
            snapConfig.setIntersectionSnapping(True)
            snapConfig.setEnabled(True)
            QgsProject.instance().setSnappingConfig(snapConfig)
            proj.setTopologicalEditing(False)
            self.unlink_mode = True
        else:
            self.iface.messageBar().pushMessage("Unlinks layer not specified!", Qgis.Critical, duration=5)
            self.unlink_mode = False
        return
Esempio n. 4
0
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)