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 __init__(self, iface: QgisInterface, layer): QgepMapToolAddFeature.__init__(self, iface, layer) self.snapping_marker = None self.node_layer = QgepLayerManager.layer('vw_wastewater_node') assert self.node_layer is not None self.reach_layer = QgepLayerManager.layer('vw_qgep_reach') assert self.reach_layer is not None self.setAdvancedDigitizingAllowed(True) self.setAutoSnapEnabled(True) layer_snapping_configs = [{ 'layer': self.node_layer, 'mode': QgsSnappingConfig.Vertex }, { 'layer': self.reach_layer, 'mode': QgsSnappingConfig.VertexAndSegment }] self.snapping_configs = [] self.snapping_utils = QgsMapCanvasSnappingUtils(self.iface.mapCanvas()) for lsc in layer_snapping_configs: config = QgsSnappingConfig() config.setMode(QgsSnappingConfig.AdvancedConfiguration) config.setEnabled(True) settings = QgsSnappingConfig.IndividualLayerSettings( True, lsc['mode'], 10, QgsTolerance.Pixels) config.setIndividualLayerSettings(lsc['layer'], settings) self.snapping_configs.append(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 setSnapLayers(self, snapper, layers): config = QgsSnappingConfig() config.setMode(QgsSnappingConfig.AdvancedConfiguration) config.setEnabled(True) for layer in layers: if layer: ils = QgsSnappingConfig.IndividualLayerSettings( True, QgsSnappingConfig.VertexAndSegment, 16, QgsTolerance.Pixels) config.setIndividualLayerSettings(layer, ils) snapper.setConfig(config)
def init_snapper(self): """ Initialize snapper """ if not self.snapper: self.node_layer = self.network_analyzer.getNodeLayer() self.snapper = QgsMapCanvasSnappingUtils(self.canvas) config = QgsSnappingConfig() config.setMode(QgsSnappingConfig.AdvancedConfiguration) config.setEnabled(True) ils = QgsSnappingConfig.IndividualLayerSettings(True, QgsSnappingConfig.VertexAndSegment, 16, QgsTolerance.Pixels) config.setIndividualLayerSettings(self.node_layer, ils) self.snapper.setConfig(config)
def setSnapLayers(self, snapper, layers): config = QgsSnappingConfig() config.setMode(QgsSnappingConfig.AdvancedConfiguration) config.setEnabled(True) for layer in layers: if layer: ils = QgsSnappingConfig.IndividualLayerSettings(True, QgsSnappingConfig.VertexAndSegment, 16, QgsTolerance.Pixels) config.setIndividualLayerSettings(layer, ils) layer.destroyed.connect(self.deactivate) snapper.setConfig(config) snapper.layer_priority = layers
def setAxialSnapping(self): # keep button pressed # un press other buttons # disable previous snapping setting self.resetSnapping() # self.axialButton.setCheckable(True) self.resetIcons() axial_icon = QPixmap(os.path.dirname(__file__) + "/custom_icons/axial.png") self.axialButton.setIcon(QIcon(axial_icon)) self.axialButton.setIconSize(QSize(40, 40)) # snap to nothing if self.settings[0] != '': proj = QgsProject.instance() # fix_print_with_import # fix_print_with_import print(proj, 'ax') proj.writeEntry('Digitizing', 'SnappingMode', 'advanced') layer = lfh.getLayerByName(self.settings[0]) self.iface.setActiveLayer(layer) # if layer.isEditable(): # layer.commitChanges() # else: # layer.startEditing() snapConfig = QgsSnappingConfig() snapConfig.setMode(QgsSnappingConfig.AdvancedConfiguration) layerSnapConfig = QgsSnappingConfig.IndividualLayerSettings(False, QgsSnappingConfig.Vertex, self.settings[2], QgsTolerance.LayerUnits) snapConfig.setIndividualLayerSettings(layer, layerSnapConfig) snapConfig.setEnabled(False) proj.setAvoidIntersectionsLayers([layer]) proj.setSnappingConfig(snapConfig) proj.setTopologicalEditing(False) self.axial_mode = True else: self.iface.messageBar().pushMessage("Network layer not specified!", Qgis.Critical, duration=5) self.axial_mode = False return
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
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)