def __init__(self, edit_dialog): """Constructor""" ProductionChanges.__init__(self, edit_dialog) iface.actionToggleEditing().trigger() # set editing to edit polygon iface.actionVertexTool().trigger() selecttools = iface.attributesToolBar().findChildren(QToolButton) # selection actions iface.building_toolbar.addSeparator() for sel in selecttools: if sel.text() == "Select Feature(s)": for a in sel.actions()[0:3]: iface.building_toolbar.addAction(a) # editing actions iface.building_toolbar.addSeparator() for dig in iface.digitizeToolBar().actions(): if dig.objectName() in ["mActionVertexTool", "mActionMoveFeature"]: iface.building_toolbar.addAction(dig) # advanced Actions iface.building_toolbar.addSeparator() for adv in iface.advancedDigitizeToolBar().actions(): if adv.objectName() in [ "mActionUndo", "mActionRedo", "mActionReshapeFeatures", "mActionOffsetCurve" ]: iface.building_toolbar.addAction(adv) iface.building_toolbar.show() self.disable_UI_functions()
def endDrawLine(self): iface.actionToggleEditing().triggered.disconnect(self.endDrawLine) self.show() vlayer = iface.activeLayer() selection = vlayer.getFeatures() count = vlayer.featureCount() #print("当前选择层有特征数:%d" % count) for feature in selection: geom = feature.geometry() geomSingleType = QgsWkbTypes.isSingleType(geom.wkbType()) if geom.type() == QgsWkbTypes.LineGeometry: if geomSingleType: x = geom.asPolyline() print("Line: ", x, "length: ", geom.length()) pstr_list = [] for index in range(len(x) - 1): resStr = "{},{},{},{}".format(x[index].x(), x[index].y(), x[index + 1].x(), x[index + 1].y()) pstr_list.append(resStr) print(pstr_list) self.startEndPointEdt.setText(';'.join(pstr_list))
def testImportFeature(self): '''Simulate user moves and check results.''' # Open python console iface.actionShowPythonDialog().trigger() # Get map tool action that is activated previousActivatedMapToolActionName = iface.mapCanvas().mapTool().action().text() #Add test layers to map registry layerDest = self.addTestVectorLayer() layerSource = self.addTestVectorLayer('test/data/segment2.shp') iface.setActiveLayer(layerDest) # Simulate click on edit mode button self.clickOnWidgetByActionName(iface.actionToggleEditing().text()) # Simulate click on plugin fusion button self.clickOnWidgetByActionName('Import Feature') # Move and click on the feature to import self.clickOnMapPoint(QgsPoint(785519,6528705)) # Feature must have been added if not self.printTest(38, self.featuresCount(layerDest), 'Import feature', 'Features count'): return # End of test ? if self.TESTS_TO_CHECK == 'up_to_import_feature': return # Test undo action self.ctrlZ() if not self.printTest(37, self.featuresCount(layerDest), 'Undo Import feature(Ctrl + z)', 'Features count'): return # End of test ? if self.TESTS_TO_CHECK == 'up_to_undo_import_feat': return # Quit edit mode self.clickOnWidgetByActionName(iface.actionToggleEditing().text()) # Fusion button must be enabled if not self.printTest(False, self.findButtonByActionName('Import Feature').isEnabled(), 'Disable fusion button', 'Fusion button status'): return # Previous map tool button must be re-checked if not self.printTest(True, self.findButtonByActionName(previousActivatedMapToolActionName).isChecked(), 'Check previous map tool button ('+previousActivatedMapToolActionName+')', 'Previous map tool button ('+previousActivatedMapToolActionName+') status'): return # End of test ? if self.TESTS_TO_CHECK == 'up_to_quit_edit_import_feat': return # Clear layers #QgsMapLayerRegistry.instance().removeAllMapLayers() iface.mapCanvas().refresh()
def createArea(self): l = self.proj.mapLayersByName('Beräkningsområde') if l: l = l[0] iface.setActiveLayer(l) iface.actionToggleEditing().trigger() iface.actionAddFeature().trigger() #l.featureAdded.connect(lambda fid: self.areaAdded(fid, l)) l.featureAdded.connect(lambda fid: self.showSaveDialog(fid, l))
def edit_reset_clicked(self): """ When production frame btn_edit_reset clicked """ self.editing_layer.geometryChanged.disconnect(self.geometry_changed) iface.actionCancelEdits().trigger() self.editing_layer.geometryChanged.connect(self.geometry_changed) self.edit_dialog.geoms = {} # restart editing iface.actionToggleEditing().trigger() iface.actionVertexTool().trigger() iface.activeLayer().removeSelection() # reset and disable comboboxes self.disable_UI_functions()
def selectLinePushButton_clicked(self): #self.hide() vectorDraftLyr = QgsVectorLayer('LineString?crs=epsg:4326', 'Please Draw A Line for Planning', "memory") QgsProject().instance().addMapLayer(vectorDraftLyr) # set layer active self.hide() iface.setActiveLayer(vectorDraftLyr) # start edit iface.actionToggleEditing().trigger() # enable tool iface.actionAddFeature().trigger() #self.show() iface.actionToggleEditing().triggered.connect(self.endDrawLine)
def __init__(self, dockwidget, parent=None): """Constructor.""" super(NewCaptureSourceArea, self).__init__(parent) self.setupUi(self) self.db = db self.db.connect() self.dockwidget = dockwidget self.layer_registry = LayerRegistry() self.error_dialog = None self.current_layer = None self.added_building_ids = [] self.geom = None self.add_capture_source_area_layer() self.init_table() self.setup_toolbar() self.le_area_title.setDisabled(True) self.le_external_id.setDisabled(True) self.mcb_selection_layer.setDisabled(True) self.mcb_selection_layer.setExceptedLayerList( [self.capture_source_area]) self.rb_select_from_layer.setChecked(False) self.capture_source_area.featureAdded.connect( self.creator_feature_added) self.capture_source_area.featureDeleted.connect( self.creator_feature_deleted) self.capture_source_area.geometryChanged.connect( self.creator_geometry_changed) self.rb_select_from_layer.toggled.connect( self.rb_select_from_layer_clicked) self.btn_save.clicked.connect( partial(self.save_clicked, commit_status=True)) self.btn_reset.clicked.connect(self.reset_clicked) self.btn_exit.clicked.connect(self.exit_clicked) QgsProject.instance().layerWillBeRemoved.connect(self.layers_removed) iface.actionToggleEditing().trigger() iface.actionAddFeature().trigger()
def onDelete(self): """Delete selected features. Ask user to confirm this action. """ layer = self.getActiveLayer() if not layer: return count = layer.selectedFeatureCount() if count > 0: # ask if features should be really deleted (no undo avaialble) reply = QtWidgets.QMessageBox.question( self, self.tr("Delete?"), self.tr("Do you want to delete {} selected features? " "This operation cannot be reverted.").format(count), QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No) if reply == QtWidgets.QMessageBox.Yes: # delete selected features from currently selected layer # iface.messageBar().pushMessage( # self.tr("Info"), # self.tr("Updating attributes..."), # level=Qgis.Info, # duration=1 # ) layer.setReadOnly(False) iface.actionToggleEditing().trigger() iface.actionDeleteSelected().trigger() iface.actionSaveActiveLayerEdits().trigger() iface.actionToggleEditing().trigger() layer.setReadOnly(True) self._layers[layer.id()].recalculateAttributes() # self.actionUpdateStatsPlot.trigger() else: # inform user - no features selected, nothing to be deleted iface.messageBar().pushMessage( self.tr("Info"), self.tr("No features selected. Nothing to be deleled."), level=Qgis.Info, duration=3) # disable deselect/delete buttons self.actionDeselect.setEnabled(False) self.actionDelete.setEnabled(False)
def endDrawPolygon(self): iface.actionToggleEditing().triggered.disconnect(self.endDrawPolygon) self.show() vlayer = iface.activeLayer() selection = vlayer.getFeatures() count = vlayer.featureCount() #print("当前选择层有特征数:%d" % count) for feature in selection: geom = feature.geometry() geomSingleType = QgsWkbTypes.isSingleType(geom.wkbType()) if geom.type() == QgsWkbTypes.PolygonGeometry: if geomSingleType: x = geom.asPolygon() #print("Polygon: ", x, "length: ", geom.length(),"area: ", geom.area()) #print(geom.asWkt()) self.wkt_polygon = geom.asWkt()
def edit_reset_clicked(self): """ When production frame btn_edit_reset clicked """ self.editing_layer.geometryChanged.disconnect( self.creator_geometry_changed) iface.actionCancelEdits().trigger() self.editing_layer.geometryChanged.connect( self.creator_geometry_changed) # restart editing iface.actionToggleEditing().trigger() iface.actionAddFeature().trigger() # reset and disable comboboxes if self.parent_frame.polyline: self.parent_frame.polyline.reset() iface.mapCanvas().refresh() self.disable_UI_functions() self.edit_dialog.geom = None self.edit_dialog.added_geoms = OrderedDict()
def reset_clicked(self): """Called When reset is clicked""" self.geom = None self.added_building_ids = [] self.le_area_title.clear() self.le_area_title.setDisabled(True) self.le_external_id.setDisabled(True) self.rb_select_from_layer.setChecked(False) self.mcb_selection_layer.setDisabled(True) self.l_wrong_projection.setText("") iface.setActiveLayer(self.capture_source_area) self.capture_source_area.geometryChanged.disconnect( self.creator_geometry_changed) iface.actionCancelEdits().trigger() self.capture_source_area.geometryChanged.connect( self.creator_geometry_changed) # restart editing iface.actionToggleEditing().trigger() iface.actionAddFeature().trigger()
def edit_reset_clicked(self): """ When bulk load frame btn_reset_save clicked """ self.editing_layer.geometryChanged.disconnect( self.creator_geometry_changed) iface.actionCancelEdits().trigger() self.editing_layer.geometryChanged.connect( self.creator_geometry_changed) # restart editing iface.actionToggleEditing().trigger() if not self.parent_frame.circle_action.isChecked(): iface.actionAddFeature().trigger() # reset and disable comboboxes self.disable_UI_functions() if self.parent_frame.polyline: self.parent_frame.polyline.reset() self.edit_dialog.geom = None self.edit_dialog.added_geoms = OrderedDict()
def selectPolygonBtn_clicked(self): vectorDraftLyr = QgsVectorLayer('Polygon?crs=epsg:4326', 'Please Draw A Polygon for Planning', "memory") QgsProject().instance().addMapLayer(vectorDraftLyr) #vectorDraftLyr.startEditing() # remove the original myvl #QgsProject.instance().layerTreeRoot().removeChildNode(myvl) # set layer active self.hide() iface.setActiveLayer(vectorDraftLyr) # start edit iface.actionToggleEditing().trigger() # enable tool iface.actionAddFeature().trigger() #self.show() iface.actionToggleEditing().triggered.connect(self.endDrawPolygon)
def toggleEdit(self): iface.actionToggleEditing().trigger()
# Function source: https://gis.stackexchange.com/a/216110/55741 def setColumnVisibility( layer, columnName, visible ): config = layer.attributeTableConfig() form = layer.editFormConfig() form.setWidgetType(layer.fieldNameIndex(columnName), "Hidden") columns = config.columns() for column in columns: if column.name == columnName: column.hidden = not visible break config.setColumns( columns ) layer.setAttributeTableConfig( config ) lager = iface.activeLayer() if not lager.isEditable(): iface.actionToggleEditing().trigger() lager.dataProvider().addAttributes([QgsField("Text_X", QVariant.Double, 'double', 10, 5), QgsField("Text_Y", QVariant.Double, 'double', 10, 5), QgsField("Text_Ri", QVariant.Double, 'double', 3, 2), QgsField("Text_Vis", QVariant.Int, "", 3)]) lager.updateFields() lager.commitChanges() lager.setDefaultValueExpression(lager.fieldNameIndex("Text_Vis"), '1') palager = QgsPalLayerSettings() palager.readFromLayer(lager) palager.enabled = True palager.setDataDefinedProperty(QgsPalLayerSettings.PositionX, True, False, '', "Text_X") palager.setDataDefinedProperty(QgsPalLayerSettings.PositionY, True, False, '', "Text_Y") palager.setDataDefinedProperty(QgsPalLayerSettings.Rotation, True, False, '', "Text_Ri") palager.setDataDefinedProperty(QgsPalLayerSettings.Show, True, False, '', "Text_Vis") setColumnVisibility( lager, 'Text_X', False) setColumnVisibility( lager, 'Text_Y', False) setColumnVisibility( lager, 'Text_Ri', False)
def __init__(self, iconPath, text, enabledFlag=True, addToMenu=True, addToToolbar=True, statusTip=None, whatsThis=None, parent=None, editModeOnly=True, featureSelectedOnly=False, mapTool=None, callback=None, checkable=True): ''' Constructor : :param iconPath: Path to the icon for this action. Can be a resource path (e.g. ':/plugins/foo/bar.png') or a normal file system path. :type icon_path: str :param text: Text that should be shown in menu items for this action. :type text: str :param enabledFlag: A flag indicating if the action should be enabled by default. Defaults to True. :type enabled_flag: bool :param addToMenu: Flag indicating whether the action should also be added to the menu. Defaults to True. :type addToMenu: bool :param addToToolbar: Flag indicating whether the action should also be added to the toolbar. Defaults to True. :type addToToolbar: bool :param statusTip: Optional text to show in a popup when mouse pointer hovers over the action. :type statusTip: str :param whatsThis: Optional text to show in the status bar when the mouse pointer hovers over the action. :type whatsThis: str :param parent: Parent widget for the new action. Defaults None. :type parent: QWidget :param editModeOnly: Flag indicating whether the action should be enabled only if edit mode is activated. Defaults to True. :type editModeOnly: bool :param mapTool: Optional instance of QgsMapTool that will be binded with the action and then called when the action is triggered. :type mapTool: QgsMapTool :param callback: Function to be called when the action is triggered. :type callback: function :param checkable: Flag indicating whether the action should be checkable. Defaults to True :type checkable: bool ''' # Declare inheritance to QAction class. super(QAction, self).__init__(QIcon(iconPath), text, parent) self.addToMenu = addToMenu self.addToToolbar = addToToolbar self.editModeOnly = editModeOnly self.featureSelectedOnly= featureSelectedOnly self.mapTool = mapTool self.callback = callback self.setEnabled(enabledFlag) self.setCheckable(checkable) if statusTip: self.setStatusTip(statusTip) if whatsThis: self.setWhatsThis(whatsThis) if self.mapTool and not isinstance(self.mapTool, QgsMapTool): raise ValueError('mapTool must be QgsMapTool instance') # To retrieve previous state of QGIS toolbar when the action is deactivated. self.previousActivatedMapTool = None self.triggered.connect(self.activateAction) if editModeOnly: # Enable/disable action when editing mode is activated/deactivated iface.actionToggleEditing().triggered.connect(self.enableActionAtEditModeChange) # Check if new current layer is in editing mode iface.mapCanvas().currentLayerChanged.connect(self.enableActionAtCurrentLayerChange) if featureSelectedOnly: # Enable action when a feature is selected only. QgsMapLayerRegistry.instance().layersAdded.connect(self.setFeatureSelectedBehaviourToLayers) # Check if new current layer is in editing mode iface.mapCanvas().currentLayerChanged.connect(self.enableActionAtCurrentLayerChange)