Guest User

Untitled

a guest
Jan 23rd, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.37 KB | None | 0 0
  1. class myToolbar:
  2.  
  3. def __init__(self, iface, toolBar):
  4. # References to QGIS interface
  5. self.iface = iface
  6. self.canvas = iface.mapCanvas()
  7.  
  8. # Actions
  9. self.addFeatureAction = QAction(QIcon(
  10. ":/myPlugin/images/icon.png"),
  11. u"Add nodes or edges",
  12. self.iface.mainWindow())
  13. self.addFeatureAction.setWhatsThis(u"MyPlugin: Add nodes or edges")
  14. self.addFeatureAction.setStatusTip(u"MyPlugin: Add nodes or edges")
  15.  
  16. # Set checkable
  17. self.addFeatureAction.setCheckable(True)
  18.  
  19. # Disable tools
  20. self.addFeatureAction.setEnabled(False)
  21.  
  22. # Connect signals
  23. self.addFeatureAction.triggered.connect(self.newFeatureRun)
  24.  
  25. # Add action to toolBar
  26. toolBar.addAction(self.anadirFeatureAction)
  27.  
  28. # Create tools
  29. self.newFeatureTool = addFeaturesTool(self.iface)
  30. self.newFeatureTool.setAction(self.addFeatureAction)
  31.  
  32. # Store previous tool
  33. self.previousTool = self.canvas.mapTool()
  34.  
  35. # Activate tools on layer change
  36. QObject.connect(self.iface, SIGNAL("currentLayerChanged(QgsMapLayer*)"), self.onCurrentLayerChanged)
  37. QObject.connect(self.iface.mapCanvas(), SIGNAL("layersChanged()"), self.onCurrentLayerChanged)
  38.  
  39. def onCurrentLayerChanged(self):
  40. try:
  41. layer = self.canvas.currentLayer()
  42.  
  43. if layer == None or layer.type() != QgsMapLayer.VectorLayer
  44. or not self.iface.legendInterface().isLayerVisible(layer):
  45. self.addFeatureAction.setEnabled(False)
  46. return
  47.  
  48. # Activate according geometry
  49. if layer.geometryType() == QGis.Point:
  50. if layer.customProperty("customEditable"):
  51. self.addFeatureAction.setEnabled(True)
  52. else:
  53. self.addFeatureAction.setEnabled(False)
  54. elif layer.geometryType() == QGis.Line:
  55. if layer.customProperty("customEditable"):
  56. self.addFeatureAction.setEnabled(True)
  57. else:
  58. self.addFeatureAction.setEnabled(False)
  59. else:
  60. self.addFeatureAction.setEnabled(False)
  61. except Exception as e:
  62. QgsMessageLog.logMessage( "ERROR onCurrentLayerChanged: {0}".format(e), "issueLayers", 2)
  63.  
  64. def newFeatureRun(self):
  65. if self.addFeatureAction.isChecked():
  66. # Save last tool and select new one
  67. self.previousTool = self.canvas.mapTool()
  68. self.canvas.setMapTool(self.newFeatureTool)
  69. else:
  70. tmpTool = self.canvas.mapTool()
  71. self.canvas.setMapTool(self.previousTool)
  72.  
  73. class addFeaturesTool(QgsMapTool):
  74.  
  75. def __init__(self, iface):
  76.  
  77. QgsMapTool.__init__(self, iface.mapCanvas())
  78.  
  79. self.iface = iface
  80. self.canvas = iface.mapCanvas()
  81.  
  82. self.layer = None
  83.  
  84. self.previousNode = QgsPoint(0,0)
  85. self.nextNode = QgsPoint(0,0)
  86.  
  87. # Rubberband
  88. self.rubber = QgsRubberBand(self.canvas, False)
  89.  
  90. # Lists to store initial and end nodes
  91. self.capturedNodes = []
  92. self.markers = []
  93.  
  94. self.cursor = QCursor(QPixmap(["16 16 3 1",
  95. " c None",
  96. ". c #FF0000",
  97. "+ c #FFFFFF",
  98. " ",
  99. " +.+ ",
  100. " ++.++ ",
  101. " +.....+ ",
  102. " +. .+ ",
  103. " +. . .+ ",
  104. " +. . .+ ",
  105. " ++. . .++",
  106. " ... ...+... ...",
  107. " ++. . .++",
  108. " +. . .+ ",
  109. " +. . .+ ",
  110. " ++. .+ ",
  111. " ++.....+ ",
  112. " ++.++ ",
  113. " +.+ "]))
  114.  
  115.  
  116. def canvasPressEvent(self,event):
  117. pass
  118.  
  119. def canvasMoveEvent(self,event):
  120. ptCursor = self.toMapCoordinates(event.pos())
  121.  
  122. self.rubber.movePoint(ptCursor)
  123. pass
  124.  
  125. def canvasReleaseEvent(self,event):
  126. if event.button() == Qt.LeftButton:
  127. coordinates = self.toMapCoordinates(event.pos())
  128. if self.layer.geometryType() == QGis.Point:
  129. self.addNode( coordinates )
  130. elif self.layer.geometryType() == QGis.Line:
  131. self.addEdgeExtrem( coordenadas )
  132. else:
  133. self.resetCaptura()
  134. pass
  135.  
  136. def activate(self):
  137. self.layer = self.canvas.currentLayer()
  138.  
  139. caps = self.layer.dataProvider().capabilities()
  140. if not caps & QgsVectorDataProvider.AddFeatures:
  141. QMessageBox.critical(None, "MyPlugin",
  142. u"Layer provider does not allow to add new elements")
  143. return
  144.  
  145. QgsMapTool.activate(self)
  146. self.canvas.setCursor(self.cursor)
  147.  
  148. def deactivate(self):
  149. self.resetCapture()
  150. QgsMapTool.deactivate(self)
  151.  
  152. def resetCapture(self):
  153. self.capturedNodes = []
  154.  
  155. self.rubber.reset(False)
  156.  
  157. for mItem in self.markers:
  158. self.canvas.scene().removeItem(mItem)
  159. del mItem
  160.  
  161. def isZoomTool(self):
  162. return False
  163.  
  164. def isTransient(self):
  165. return False
  166.  
  167. def isEditTool(self):
  168. return True
  169.  
  170. def addNode(self, coord):
  171. # Adds node
  172.  
  173. def saveNode(self, point):
  174. # Saves node to layer
  175.  
  176. def addEdgeExtrem(self, coord):
  177. # Add extrems to edge
  178.  
  179. def addEdge(self, previousNode, currentNode):
  180. # adds new edge
Add Comment
Please, Sign In to add comment