コード例 #1
0
    def canvasMoveEvent(self, event: QgsMapMouseEvent):
        if self.is_tracking and not self.capturing or self.editvertex is None:
            return

        point = QgsGeometry(point_from_event(event, self.snapping)).asPoint()
        if not self.editmode:
            self.pointband.movePoint(point)

        if self.capturing:
            self.band.movePoint(point)

        if self.editmode and self.editvertex is not None:
            found, vertexid = self.geom.vertexIdFromVertexNr(self.editvertex)
            self.geom.get().moveVertex(vertexid, QgsPoint(point))
            self.feature.setGeometry(self.geom)
            self.currentVectorLayer().updateFeature(self.feature)
            self.pointband.setToGeometry(self.toMultiPoint(self.geom),
                                         self.currentVectorLayer())
            self.band.setToGeometry(self.geom, self.currentVectorLayer())
コード例 #2
0
    def endcapture(self):
        # if not self.editmode:
        #     self.band.removeLastPoint()

        self.update_valid_state()
        errors = self.has_errors()
        if errors and self.config.get("geometry_validation", True):
            self.error.emit("Invalid geometry. <br>"
                            "Please recapture. Last capture shown in grey <br>"
                            "<h2>Errors</h2> {0}".format("<br>".join(
                                error.what() for error in errors)))
            self.endinvalidcapture(errors)
            return

        self.capturing = False
        self.set_tracking(False)
        self.captureaction.setChecked(True)
        self.undoaction.setEnabled(False)
        self.endcaptureaction.setEnabled(False)
        self.clearErrors()
        self.geometryComplete.emit(QgsGeometry(self.get_geometry()))
コード例 #3
0
    def canvasPressEvent(self, event):
        geom = self.band.asGeometry()
        if not geom:
            return

        point = QgsGeometry(point_from_event(event, self.snapping)).asPoint()
        if self.editmode:
            layer = self.currentVectorLayer()
            event.snapToGrid(layer.geometryOptions().geometryPrecision(),
                             layer.crs())
            tol = QgsTolerance.vertexSearchRadius(self.canvas.mapSettings())
            loc = self.canvas.snappingUtils().locatorForLayer(layer)
            matches = loc.verticesInRect(point, tol)
            if matches:
                for match in matches:
                    if match.featureId() != self.feature.id():
                        continue

                    self.editpart = 0
                    self.editvertex = match.vertexIndex()
                    break
            else:
                self.editvertex = None
                self.editpart = 0
コード例 #4
0
ファイル: polylinetool.py プロジェクト: skylning/Roam
 def toMultiPoint(self, geom):
     points = QgsMultiPoint()
     for count, v in enumerate(geom.vertices()):
         points.addGeometry(v.clone())
     newgeom = QgsGeometry(points)
     return newgeom