Beispiel #1
0
 def run(self):
     print "into thread"
     print self.lyr
     wkr = Import(self.lyr)
     self.msg_bar_item = QgsMessageBarItem("", "Import des entités", self.progress_bar)
     iface.messageBar().pushItem(self.msg_bar_item)
     wkr.progress.connect(self.update_progress_bar)
     wkr.run()
Beispiel #2
0
 def makeImport(self, layer):
     self.addProgressBar()
     self.thread = QThread()
     self.worker = Import(layer)
     self.worker.moveToThread(self.thread)
     #        self.worker.run()
     self.thread.started.connect(self.worker.run)
     self.worker.progress.connect(self.updateProgressBar)
     self.worker.finished.connect(self.worker.deleteLater)
     self.thread.finished.connect(self.thread.deleteLater)
     self.worker.finished.connect(self.thread.quit)
     self.worker.finished.connect(self.closeImport)
     self.thread.start()
Beispiel #3
0
class ImportLayer(object):
    """
    /***************************************************************************
     ImportLayer Class
            
            Do the stuff import features from shapefile to carhab layer.
     ***************************************************************************/
     """

    def __init__(self):
        """Constructor."""
        self.canvas = iface.mapCanvas()
        self.progressBar = None
        self.lockProgressBar = False

    def addProgressBar(self):
        self.progressBar = loadUi(os.path.join(pluginDirectory, "progress_bar.ui"))
        self.msgBarItem = QgsMessageBarItem("", "Import des entités", self.progressBar)
        iface.messageBar().pushItem(self.msgBarItem)
        self.progressBar.destroyed.connect(self.removeProgressBar)

    def updateProgressBar(self, progressValue):
        QgsApplication.processEvents()
        if self.progressBar and not self.lockProgressBar:
            self.lockProgressBar = True
            self.progressBar.setValue(progressValue)
            self.progressValue = progressValue
            self.lockProgressBar = False

    def removeProgressBar(self, msgBarItem):
        self.progressBar = None
        if self.progressValue != 100:  # To recognize an abortement by user of import.
            QgsApplication.processEvents()
            self.worker.stop = True

    def makeDifference(self, importLayer):
        # Launch difference processing.
        processingResult = general.runalg("qgis:difference", importLayer, iface.mapCanvas().currentLayer(), None)
        # Get the tmp shp path corresponding to the difference processing result layer
        differenceLayerPath = processingResult["OUTPUT"]
        return self.createQgisVectorLayer(differenceLayerPath)

    def closeImport(self, success, code):
        if not success:
            if code == 0:
                popup("Erreur inconnue : aucune entité ajoutée.")
            elif code == 1:
                popup("Pas de couche carhab initialisée : aucune entité ajoutée.")
            elif code == 2:
                popup("Import annulé : aucune entité ajoutée")
        if self.progressBar:
            self.progressBar.setValue(100)
            self.progressValue = 100
            iface.messageBar().popWidget(self.msgBarItem)
        self.canvas.currentLayer().updateExtents()
        self.canvas.setExtent(self.canvas.currentLayer().extent())
        self.canvas.refresh()

    def makeImport(self, layer):
        self.addProgressBar()
        self.thread = QThread()
        self.worker = Import(layer)
        self.worker.moveToThread(self.thread)
        #        self.worker.run()
        self.thread.started.connect(self.worker.run)
        self.worker.progress.connect(self.updateProgressBar)
        self.worker.finished.connect(self.worker.deleteLater)
        self.thread.finished.connect(self.thread.deleteLater)
        self.worker.finished.connect(self.thread.quit)
        self.worker.finished.connect(self.closeImport)
        self.thread.start()

    def createQgisVectorLayer(self, layerFilePath):
        settings = QSettings()
        oldProjValue = settings.value("/Projections/defaultBehaviour", "prompt", type=str)
        settings.setValue("/Projections/defaultBehaviour", "useProject")
        qgisLayer = QgsVectorLayer(layerFilePath, "geometry", "ogr")
        qgisLayer.setCrs(QgsCoordinateReferenceSystem(2154, QgsCoordinateReferenceSystem.EpsgCrsId))
        settings.setValue("/Projections/defaultBehaviour", oldProjValue)
        return qgisLayer

    def launch_import(self, file_name):
        # Set corresponding layer.
        importLayer = self.createQgisVectorLayer(file_name)
        # Carhab layer should not overlaps itself. Calculate difference between layers.
        diffLayer = self.makeDifference(importLayer)

        if diffLayer:
            if diffLayer.featureCount() == 0:
                popup(
                    ("Emprise de la couche à importer déjà peuplée " "dans la couche Carhab : aucune entité ajoutée.")
                )
            else:
                # Import only difference between layers.
                self.makeImport(diffLayer)
        else:
            popup(("Erreur inconnue : aucune entité ajoutée."))

    def run(self):
        """Specific stuff at tool activating."""
        if not iface.mapCanvas().currentLayer():
            no_vector_lyr_msg()
            return
        # Retrieve shapefile selected by the user
        selectedFileName = execFileDialog()
        if selectedFileName:
            self.launch_import(selectedFileName)