def createGeometry(self, geom): geom = self.reprojectRubberBand(geom) if geom: layer = self.canvas.currentLayer() feature = QgsFeature() fields = layer.fields() feature.setGeometry(geom) feature.initAttributes(fields.count()) provider = layer.dataProvider() for i in range(fields.count()): defaultClauseCandidate = provider.defaultValueClause(i) if defaultClauseCandidate: feature.setAttribute(i, defaultClauseCandidate) form = QgsAttributeDialog(layer, feature, False) form.setMode(int(QgsAttributeForm.AddFeatureMode)) formSuppress = layer.editFormConfig().suppress() if formSuppress == QgsEditFormConfig.SuppressDefault: if self.getSuppressOptions( ): #this is calculated every time because user can switch options while using tool layer.addFeature(feature) else: if not form.exec_(): feature.setAttributes(form.feature().attributes()) elif formSuppress == QgsEditFormConfig.SuppressOff: if not form.exec_(): feature.setAttributes(form.feature().attributes()) else: layer.addFeature(feature) layer.endEditCommand() self.canvas.refresh() self.initVariable()
def showDocumentForm(self): if self._currentDocumentId is None: return layer = self.relation().referencingLayer() if self.nmRelation().isValid(): layer = self.nmRelation().referencedLayer() showDocumentFormDialog = QgsAttributeDialog( layer, layer.getFeature(self._currentDocumentId), False, self, True) showDocumentFormDialog.exec() self.updateUi()
def _newDialog(self, cloneFeature): feature = QgsFeature() if (cloneFeature): feature = QgsFeature(self._feature) else: feature = self._feature context = QgsAttributeEditorContext() myDa = QgsDistanceArea() myDa.setSourceCrs(self._layer.crs()) myDa.setEllipsoidalMode( self._iface.mapCanvas().mapSettings().hasCrsTransformEnabled()) myDa.setEllipsoid(QgsProject.instance().readEntry( 'Measure', '/Ellipsoid', GEO_NONE)[0]) context.setDistanceArea(myDa) context.setVectorLayerTools(self._iface.vectorLayerTools()) dialog = QgsAttributeDialog(self._layer, feature, cloneFeature, None, True, context) if (self._layer.actions().size() > 0): dialog.setContextMenuPolicy(Qt.ActionsContextMenu) a = QAction(self.tr('Run actions'), dialog) a.setEnabled(False) dialog.addAction(a) i = 0 for action in self._layer.actions(): if (action.runable()): a = FeatureAction(action.name(), feature, self._layer, i, -1, self._iface, dialog) dialog.addAction(a) a.triggered.connect(a.execute) pb = dialog.findChild(action.name()) if (pb): pb.clicked.connect(a.execute) i += 1 return dialog
def actionShowFormTriggered(self): if self.mFeaturesTreeWidget.currentItem() is None: QMessageBox.critical(self, self.tr("No feature selected"), self.tr("Please select a feature.")) return if self.mFeaturesTreeWidget.currentItem().data( 0, TreeWidgetItemRole.Type) != TreeWidgetItemType.Feature: QMessageBox.critical(self, self.tr("Selected item is not a feature"), self.tr("Please select a feature.")) return showDocumentFormDialog = QgsAttributeDialog( self.mFeaturesTreeWidget.currentItem().data( 0, TreeWidgetItemRole.Layer), self.mFeaturesTreeWidget.currentItem().data( 0, TreeWidgetItemRole.Feature), False, self, True) showDocumentFormDialog.exec() self.updateUi()
def addFeature(self, feature, layer, field, pointValue): fields = layer.fields() feature.initAttributes(fields.count()) provider = layer.dataProvider() for i in range(fields.count()): value = provider.defaultValue(i) if fields[i].name() != field else pointValue if value: feature.setAttribute(i, value) form = QgsAttributeDialog(layer, feature, False) form.setMode(QgsAttributeForm.AddFeatureMode) formSuppress = layer.editFormConfig().suppress() if formSuppress == QgsEditFormConfig.SuppressDefault: if self.getSuppressOptions(): #this is calculated every time because user can switch options while using tool layer.addFeature(feature, True) else: if not form.exec_(): feature.setAttributes(form.feature().attributes()) elif formSuppress == QgsEditFormConfig.SuppressOff: if not form.exec_(): feature.setAttributes(form.feature().attributes()) else: layer.addFeature(feature, True)
def createGeometry(self, geom): geom = self.reprojectRubberBand(geom) if geom : layer = self.canvas.currentLayer() feature = QgsFeature() fields = layer.pendingFields() feature.setGeometry(geom) feature.initAttributes(fields.count()) provider = layer.dataProvider() for i in range(fields.count()): feature.setAttribute(i, provider.defaultValue(i)) form = QgsAttributeDialog(layer, feature, False) form.setIsAddDialog(True) if not form.dialog().exec_(): ok = False else: ok = True if ok: feature.setAttributes(form.feature().attributes()) layer.endEditCommand() self.initVariable() else: self.initVariable()
def insert_line(self, method): layer = self.iface.activeLayer() if not isinstance(layer, QgsVectorLayer) or layer.geometryType() != QGis.Line: self.iface.messageBar().pushMessage( self.tr("ReconstructLine"), self. tr("Line can\'t be inserted! Select lines layer for inserting new geom!" ), level=QgsMessageBar.WARNING, duration=5) return if not layer.isEditable(): self.iface.messageBar().pushMessage( self.tr("ReconstructLine"), self.tr("Line can\'t be inserted! Layer is not editable!"), level=QgsMessageBar.WARNING, duration=5) return if not self._geom_buffer: self.iface.messageBar().pushMessage( self.tr("ReconstructLine"), self.tr("Line can\'t be inserted! Copy points first!"), level=QgsMessageBar.WARNING, duration=5) return #show message self.iface.messageBar().clearWidgets() self.iface.messageBar().pushMessage( self.tr("ReconstructLine"), self.tr("Processing points. Please wait..."), level=QgsMessageBar.INFO) QgsApplication.setOverrideCursor(Qt.WaitCursor) QgsApplication.processEvents() QgsApplication.processEvents() QgsApplication.processEvents() try: # Create line # QGS geoms to np points = [(in_geom.x(), in_geom.y()) for in_geom in self._geom_buffer] data = np.array(points) # Make line if method == 'MST': conn = MST(data) result = conn.connect() elif method == 'SOM': som = SOM1d(data) result = som.connect() else: raise ValueError #np to QGS lines = [] for line in result: lines.append( [QgsPoint(out_geom[0], out_geom[1]) for out_geom in line]) geom_list = [] if layer.wkbType() == QGis.WKBMultiLineString: geom_list.append(QgsGeometry.fromMultiPolyline(lines)) else: for line in lines: geom_list.append(QgsGeometry.fromPolyline(line)) # Check crs and reproject target_crs = layer.crs() if target_crs.srsid() != self._srid.srsid(): transf = QgsCoordinateTransform(self._srid, target_crs) for geom in geom_list: geom.transform(transf) # Insert feature(s) features = [] for geom in geom_list: feat = QgsFeature() feat.setFields(layer.dataProvider().fields()) feat.setGeometry(geom) features.append(feat) default_suppress = (method == 'MST') suppressForm = QSettings().value( "/qgis/digitizing/disable_enter_attribute_values_dialog", type=bool, defaultValue=default_suppress) if suppressForm: # quite insert feature result = layer.addFeatures(features) else: # show dialog QgsApplication.restoreOverrideCursor() for feat in features: attrDialog = QgsAttributeDialog(layer, feat, False) attrDialog.setIsAddDialog(True) result = attrDialog.exec_() # show message self.iface.messageBar().clearWidgets() if result: self.iface.messageBar().pushMessage( self.tr("ReconstructLine"), self.tr("%s line segment(s) was sucesfull added" % (len(features))), level=QgsMessageBar.INFO) else: self.iface.messageBar().pushMessage( self.tr("ReconstructLine"), self.tr("Line was not added"), level=QgsMessageBar.CRITICAL) self.iface.mapCanvas().refresh() finally: QgsApplication.restoreOverrideCursor()
def openFormAttribute(self): lyr = self.iface.mapCanvas().currentLayer() if lyr: f = lyr.selectedFeatures()[0] attrDialog = QgsAttributeDialog(lyr, f, False) result = attrDialog.exec_()
def get_feature_form(layer, feature, isadd=False): dlg = QgsAttributeDialog(layer, feature, False, None) dlg.setIsAddDialog(isadd) return dlg
# coding: utf-8 from qgis.gui import QgsAttributeDialog from qgis.utils import iface map_canvas = iface.mapCanvas() layer = map_canvas.currentLayer() feature = layer.getFeatures().next() attribute_dialog = QgsAttributeDialog(layer, feature, True) attribute_dialog.show() attribute_dialog_from_iface = iface.getFeatureForm(layer, feature) attribute_dialog_from_iface.show()