dtexchangegeometry.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. # -*- coding: utf-8 -*-
  2. """
  3. dtexchangegeometry
  4. `````````````
  5. """
  6. """
  7. Part of DigitizingTools, a QGIS plugin that
  8. subsumes different tools neded during digitizing sessions
  9. Tool: Exchange the geometry between two features
  10. * begin : 2015-12-09
  11. * copyright : (C) 2015 by Bernhard Ströbl
  12. * email : bernhard.stroebl@jena.de
  13. This program is free software; you can redistribute it and/or modify
  14. it under the terms of the GNU General Public License as published by
  15. the Free Software Foundation; either version 2 of the License, or
  16. (at your option) any later version.
  17. """
  18. from qgis.PyQt import QtCore, QtGui
  19. from qgis.core import *
  20. import dtutils
  21. import dt_icons_rc
  22. from dttools import DtSingleButton
  23. class DtExchangeGeometry(DtSingleButton):
  24. def __init__(self, iface, toolBar):
  25. super().__init__(iface, toolBar,
  26. QtGui.QIcon(":/exchangeGeometry.png"),
  27. QtCore.QCoreApplication.translate("digitizingtools",
  28. "Exchange attributes between selected features"),
  29. geometryTypes = [1, 2, 3, 4, 5, 6], dtName = "dtExchangeGeometry")
  30. self.enable()
  31. def process(self):
  32. layer = self.iface.mapCanvas().currentLayer()
  33. feats = layer.selectedFeatures()
  34. feature1 = feats[0]
  35. geom1 = QgsGeometry(feature1.geometry())
  36. feature2 = feats[1]
  37. geom2 = QgsGeometry(feature2.geometry())
  38. layer.beginEditCommand(QtCore.QCoreApplication.translate(
  39. "editcommand", "Exchange attributes"))
  40. feature1.setGeometry(geom2)
  41. layer.updateFeature(feature1)
  42. feature2.setGeometry(geom1)
  43. layer.updateFeature(feature2)
  44. layer.endEditCommand()
  45. self.canvas.refresh()
  46. def enable(self):
  47. '''Enables/disables the corresponding button.'''
  48. DtSingleButton.enable(self) # call parent's method
  49. if self.act.isEnabled():
  50. layer = self.iface.activeLayer()
  51. try:
  52. layer.selectionChanged.disconnect(self.enable) # disconnect, will be reconnected
  53. except:
  54. pass
  55. doEnable = layer.selectedFeatureCount() == 2
  56. self.act.setEnabled(doEnable)
  57. layer.selectionChanged.connect(self.enable)