Hello!

I try to develop some Python modules for construction in landsurveying projects. Therefore these tools must be able to snap to existiing vertices in a map. I found a class,which snaps to existing vertices, settings are taken from qgis, which uses QgsMapToolEmitPoint

class ShowOnMapTool(QgsMapToolEmitPoint):

    def __init__(self, iface, *PointXY*):
        QgsMapToolEmitPoint.__init__(self, iface.mapCanvas())
        self.iface = iface
        self.canvas = iface.mapCanvas()
        self.marker = None
        self.vertex = None
*self.rtnPoint = PointXY*

...

    def canvasPressEvent(self, event):
        '''Capture the coordinate when the mouse button has been released,
        format it, and copy it to the clipboard.'''
        self.*rtnPoint* = self.snappoint(event.originalPixelPoint())
        self.removeVertexMarker()

        if self.marker is None:
            self.marker = QgsVertexMarker(self.canvas)
            self.marker.setIconSize(18)
            self.marker.setPenWidth(2)
            self.marker.setIconType(QgsVertexMarker.ICON_CROSS)
        self.marker.setCenter(*self.rtnPoint*)

...

In my form I want to use the snapped coordinates in textboxes. Therefore I added the rtnPoint in the init-procedere and in the canvasPressEvent-Function listed above.

In my own class I did this:

class InputMeasurepoints:
    def __init__(self, iface):
        self.iface = iface
        self.plugin_dir = os.path.dirname(__file__)
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(
            self.plugin_dir,
            'i18n',
            'InputMeasurepoints_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)
QCoreApplication.installTranslator(self.translator)

        self.actions = []
        self.menu = self.tr(u'&SurveyingTools')
        self.first_start = None
        self.canvas = iface.mapCanvas()
*        self.Point=QgsPointXY() **
**        self.ShowMapTool = ShowOnMapTool(self.iface,self.Point)*

        self.marker = None
        self.vertex = None

...

    def onMouseClick(self,button):
        self.dlg.ledt_Rechts.setText(format("%.3f" %*self.ShowMapTool.rtnPoint.x()*))         self.dlg.ledt_Hoch.setText(format("%.3f" %*self.ShowMapTool.rtnPoint.y()*))

    def getPoint(self):
        self.canvas.setMapTool(self.ShowMapTool)
self.ShowMapTool.canvasClicked.connect(self.onMouseClick)

    def run(self):
        if self.first_start == True:
            self.first_start = False
            self.dlg = InputMeasurepointsDialog()
            self.dlg.btnPickXY.clicked.connect(self.getPoint)

Nothing happens, the Programm does not reach the onMouseClick-Function, and the ShowMapTool does not stop. How can I get the rtnPoint of the ShowOnMapTool-Class, what is wrong? I found no example Code in the web, I do not understand how QgsMapToolEmitPoint and the Mouse events work together. Is there any document with simple examples?

Thank you for investing your time in a stupid beginner like me!

Sugarfox

_______________________________________________
QGIS-Developer mailing list
[email protected]
List info: https://lists.osgeo.org/mailman/listinfo/qgis-developer
Unsubscribe: https://lists.osgeo.org/mailman/listinfo/qgis-developer

Reply via email to