def snap(self, pos): """ Snap to nearby points on the wastewater node layer which may be used as connection points for this reach. :param pos: The position to snap :return: The snapped position """ snapper = QgsSnapper(self.iface.mapCanvas().mapSettings()) snap_nodelayer = QgsSnapper.SnapLayer() snap_nodelayer.mLayer = self.nodeLayer snap_nodelayer.mTolerance = 10 snap_nodelayer.mUnitType = QgsTolerance.Pixels snap_nodelayer.mSnapTo = QgsSnapper.SnapToVertex snapper.setSnapLayers([snap_nodelayer]) (_, snappedPoints) = snapper.snapPoint(pos) if snappedPoints: self.currentSnappingResult = snappedPoints[0] return self.currentSnappingResult.snappedVertex else: snapper = QgsSnapper(self.iface.mapCanvas().mapSettings()) snap_reachlayer = QgsSnapper.SnapLayer() snap_reachlayer.mLayer = self.reachLayer snap_reachlayer.mTolerance = 10 snap_reachlayer.mUnitType = QgsTolerance.Pixels snap_reachlayer.mSnapTo = QgsSnapper.SnapToVertexAndSegment snapper.setSnapLayers([snap_reachlayer]) (_, snappedPoints) = snapper.snapPoint(pos) if snappedPoints: self.currentSnappingResult = snappedPoints[0] return self.currentSnappingResult.snappedVertex else: self.currentSnappingResult = None return pos
def getSnapper(self): """ Getter for the snapper """ self.snapper = QgsSnapper(self.iface.mapCanvas().mapRenderer()) snap_layer = QgsSnapper.SnapLayer() snap_layer.mLayer = self.nodeLayer snap_layer.mTolerance = 10 snap_layer.mUnitType = QgsTolerance.Pixels snap_layer.mSnapTo = QgsSnapper.SnapToVertex self.snapper.setSnapLayers([snap_layer]) return self.snapper
def set_up_snap_layer(vlayer, tolerance=None, snapping_type=QgsSnapper.SnapToVertex): snap_layer = QgsSnapper.SnapLayer() snap_layer.mLayer = vlayer if tolerance is None or tolerance < 0: (a, b, c, d, tolerance, f) = QgsProject.instance().snapSettingsForLayer(vlayer.id()) snap_layer.mTolerance = tolerance else: snap_layer.mTolerance = tolerance snap_layer.mUnitType = QgsTolerance.MapUnits snap_layer.mSnapTo = snapping_type return snap_layer
def activate(self): QgsMapTool.activate(self) self.rubber.setWidth(self.settings.value("rubberWidth")) self.rubber.setColor(self.settings.value("rubberColor")) lineLayer = MemoryLayers(self.iface).lineLayer() # unset this tool if the layer is removed lineLayer.layerDeleted.connect(self.unsetMapTool) self.layerId = lineLayer.id() # create snapper for this layer self.snapLayer = QgsSnapper.SnapLayer() self.snapLayer.mLayer = lineLayer self.snapLayer.mSnapTo = QgsSnapper.SnapToVertexAndSegment self.snapLayer.mTolerance = self.settings.value("selectTolerance") if self.settings.value("selectUnits") == "map": self.snapLayer.mUnitType = QgsTolerance.MapUnits else: self.snapLayer.mUnitType = QgsTolerance.Pixels