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 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 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 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)
from qgis.core import QgsSnappingUtils from qgis.gui import QgsMapCanvasSnappingUtils from qgis.utils import iface canvas = iface.mapCanvas() snapping_utils = QgsSnappingUtils() print(snapping_utils.snapToMapMode()) # Change the mode through the GUI print(snapping_utils.snapToMapMode()) # Retrieve information from the project snapping_utils.readConfigFromProject() # Alternate way to above code snapping_utils = canvas.snappingUtils() # TODO: cast QgsMapCanvasSnappingUtils snapping_utils.defaultSettings() # Find the mode in a readable way print([ i for i in ['SnapCurrentLayer', 'SnapAdvanced', 'SnapAllLayers'] if snapping_utils.snapToMapMode() == getattr(QgsSnappingUtils, i) ][0]) print(snapping_utils.layers()) print(snapping_utils.defaultSettings() ) # where values are type, tolerance and unit map_canvas_snapping_utils = QgsMapCanvasSnappingUtils(canvas) canvas.setSnappingUtils(map_canvas_snapping_utils)