Пример #1
0
    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()
Пример #2
0
    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))
Пример #3
0
    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()
Пример #4
0
 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))
Пример #5
0
 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()
Пример #6
0
 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)
Пример #7
0
    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)
Пример #9
0
    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()
Пример #10
0
    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()
Пример #11
0
    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()
Пример #12
0
    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()
Пример #13
0
    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)
Пример #14
0
 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)
Пример #16
0
    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)