Ejemplo n.º 1
0
 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()
Ejemplo n.º 2
0
    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()
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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()
Ejemplo n.º 5
0
 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)
Ejemplo n.º 6
0
 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()   
Ejemplo n.º 7
0
    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()
Ejemplo n.º 8
0
 def openFormAttribute(self):
     lyr = self.iface.mapCanvas().currentLayer()
     if lyr:
         f = lyr.selectedFeatures()[0]
         attrDialog = QgsAttributeDialog(lyr, f, False)
         result = attrDialog.exec_()
Ejemplo n.º 9
0
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()