[QGIS-Developer] help needed for QgsMapToolEmitPoint
Johannes Grösbrink
groesbrink at gmx.de
Sun Oct 27 09:19:41 PDT 2019
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/qgis-developer/attachments/20191027/c00007bf/attachment.html>
More information about the QGIS-Developer
mailing list