def updateAttributesAfterAdding(self): """ Updates feature attributes according to the button configuration :return: """ layer = self.sender() while self.addedFeatures: featureId = self.addedFeatures.pop() #begining the edit command # layer.beginEditCommand(self.tr("DSG Tools reclassification tool: adjusting feature's attributes")) #accessing added features editBuffer = layer.editBuffer() features = editBuffer.addedFeatures() for key in features: #just checking the newly added feature, the other I don't care if key == featureId: feature = features[key] #setting the attributes using the reclassification dictionary self.setFeatureAttributes(feature, editBuffer) # layer.endEditCommand() if 'openForm' in self.reclassificationDict[self.category][ self.edgvClass][self.buttonName]['buttonProp']: layer.updateFeature(feature) form = QgsAttributeDialog(layer, feature, False) form.setMode(int(QgsAttributeForm.SingleEditMode)) form.exec_() layer.updateFeature(feature)
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 createFeature(self, Id): lyr = self.iface.mapCanvas().currentLayer() formValue = self.botaoConfig[self.getButton()][1] if (lyr) and (Id < 0) and (formValue != u"sim"): lyr.select(Id) f = lyr.selectedFeatures()[0] lyr.deselect(Id) provider = lyr.dataProvider() fields = lyr.pendingFields() try: attr = f.initAttributes(len(fields)) for i in range(len(fields)): f.setAttribute(i, provider.defaultValue(i)) except AttributeError: for i in fields: f.addAttribute(i, provider.defaultValue(i)) attrDialog = QgsAttributeDialog(lyr, f, False) self.attributeForm(attrDialog, lyr) result = attrDialog.exec_() if not result: lyr.deleteFeature(Id) self.iface.mapCanvas().refresh() elif (lyr) and (Id < 0) and (formValue == u"sim"): lyr.select(Id) f = lyr.selectedFeatures()[0] lyr.deselect(Id) self.autoAttribute(lyr, f)
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 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 insert_line(self): 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 som = SOM1d(data) result = som.connect() #np to QGS self._geom_buffer = [QgsPoint(out_geom[0], out_geom[1]) for out_geom in result] if layer.wkbType() == QGis.WKBMultiLineString: geom = QgsGeometry.fromMultiPolyline([self._geom_buffer]) else: geom = QgsGeometry.fromPolyline(self._geom_buffer) # Check crs and reproject target_crs = layer.crs() if target_crs.srsid() != self._srid.srsid(): transf = QgsCoordinateTransform(self._srid, target_crs) geom.transform(transf) # Insert feature feat = QgsFeature() feat.setFields(layer.dataProvider().fields()) feat.setGeometry(geom) suppressForm = QSettings().value("/qgis/digitizing/disable_enter_attribute_values_dialog", type=bool, defaultValue=False) if suppressForm: # quite insert feature result = layer.addFeatures([feat]) else: # show dialog QgsApplication.restoreOverrideCursor() 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("One line was sucesfull added"), 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()