예제 #1
0
 def runalgIterating(self):
     try:
         outputs = {}
         #store output values to use them later as basenames for all outputs
         for out in self.algorithm.outputs:
             outputs[out.name] = out.value
         i = 1
         for f in self.filelist:
             self.algorithm.setParameterValue(self.parameterToIterate, f)
             for out in self.algorithm.outputs:
                 filename = outputs[out.name]
                 if filename:
                     filename = filename[:filename.rfind(".")] + "_" + str(
                         i) + filename[filename.rfind("."):]
                 out.value = filename
             self.progress.setText("Executing iteration " + str(i) + "/" +
                                   str(len(self.filelist)) + "...")
             self.progress.setPercentage((i * 100) / len(self.filelist))
             self.runalg()
             SextantePostprocessing.handleAlgorithmResults(
                 self.algorithm, self.progress, False)
             self.iterated.emit(i)
             i += 1
         self.algExecuted.emit()
     except BaseException, e:
         self.error.emit(str(e))
         print "Error iterating " + str(e)
    def accept(self):
        self.algs = []
        self.load = []
        for row in range(self.table.rowCount()):
            alg = self.alg.getCopy()  #copy.deepcopy(self.alg)
            col = 0
            for param in alg.parameters:
                if param.hidden:
                    continue
                widget = self.table.cellWidget(row, col)
                if not self.setParameterValueFromWidget(param, widget, alg):
                    self.progressLabel.setText("<b>Missing parameter value: " +
                                               param.description + " (row " +
                                               str(row + 1) + ")</b>")
                    self.algs = None
                    return
                col += 1
            for out in alg.outputs:
                if out.hidden:
                    continue
                widget = self.table.cellWidget(row, col)
                text = widget.getValue()
                if text.strip() != "":
                    out.value = text
                    col += 1
                else:
                    self.progressLabel.setText(
                        "<b>Wrong or missing parameter value: " +
                        out.description + " (row " + str(row + 1) + ")</b>")
                    self.algs = None
                    return
            self.algs.append(alg)
            widget = self.table.cellWidget(row, col)
            self.load.append(widget.currentIndex() == 0)

        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
        self.table.setEnabled(False)
        if SextanteConfig.getSetting(SextanteConfig.USE_THREADS):
            self.tabWidget.setCurrentIndex(1)
            self.nextAlg(0)
        else:
            i = 0
            self.progress.setMaximum(len(self.algs))
            for alg in self.algs:
                self.setBaseText("Processing algorithm " + str(i + 1) + "/" +
                                 str(len(self.algs)) + "...")
                if UnthreadedAlgorithmExecutor.runalg(alg, self):
                    if self.load[i]:
                        SextantePostprocessing.handleAlgorithmResults(
                            alg, self, False)
                    i += 1
                else:
                    QApplication.restoreOverrideCursor()
                    return

            self.finishAll()
 def finish(self, i):
     if not self.stop:
         if self.load[i]:
             SextantePostprocessing.handleAlgorithmResults(self.algs[i], self, False)
         i += 1
         if len(self.algs) == i:
             self.finishAll()
             self.algEx = None
         else:
             self.nextAlg(i)
예제 #4
0
 def finish(self, i):
     if self.load[i]:
         SextantePostprocessing.handleAlgorithmResults(self.algs[i], self, False)
     i += 1
     #self.progress.setValue(i)
     if len(self.algs) == i:
         self.finishAll()
         self.algEx = None
     else:
         self.nextAlg(i)
예제 #5
0
 def finish(self, i):
     if not self.stop:
         if self.load[i]:
             SextantePostprocessing.handleAlgorithmResults(self.algs[i], self, False)
         i += 1
         if len(self.algs) == i:
             self.finishAll()
             self.algEx = None
         else:
             self.nextAlg(i)
    def accept(self):
        self.algs = []
        self.load = []
        for row in range(self.table.rowCount()):
            alg = self.alg.getCopy()#copy.deepcopy(self.alg)
            col = 0
            for param in alg.parameters:
                if param.hidden:
                    continue
                widget = self.table.cellWidget(row, col)
                if not self.setParameterValueFromWidget(param, widget, alg):
                    self.progressLabel.setText("<b>Missing parameter value: " + param.description + " (row " + str(row + 1) + ")</b>")
                    #QMessageBox.critical(self, "Unable to execute batch process", "Wrong or missing parameter values")
                    self.algs = None
                    return
                col+=1
            for out in alg.outputs:
                if out.hidden:
                    continue
                widget = self.table.cellWidget(row, col)
                text = widget.getValue()
                if text.strip() != "":
                    out.value = text
                    col+=1
                else:
                    self.progressLabel.setText("<b>Wrong or missing parameter value: " + out.description + " (row " + str(row + 1) + ")</b>")
                    #QMessageBox.critical(self, "Unable to execute batch process", "Wrong or missing parameter values")
                    self.algs = None
                    return
            self.algs.append(alg)
            widget = self.table.cellWidget(row, col)
            self.load.append(widget.currentIndex() == 0)

        QApplication.setOverrideCursor(QCursor(Qt.WaitCursor))
        self.table.setEnabled(False)
        if SextanteConfig.getSetting(SextanteConfig.USE_THREADS):
            self.nextAlg(0)
        else:
            i=0
            self.progress.setMaximum(len(self.algs))
            for alg in self.algs:
                self.setBaseText("Processing algorithm " + str(i+1) + "/" + str(len(self.algs)) + "...")
                if UnthreadedAlgorithmExecutor.runalg(alg, self):
                    #self.progress.setValue(i)
                    #self.loadHTMLResults(alg, i)
                    if self.load[i]:
                        SextantePostprocessing.handleAlgorithmResults(alg, self, False)
                    i+=1
                else:
                    QApplication.restoreOverrideCursor()
                    return

            self.finishAll()
예제 #7
0
    def runalgIterating(alg, paramToIter, progress):
        #generate all single-feature layers
        settings = QSettings()
        systemEncoding = settings.value("/UI/encoding", "System").toString()
        layerfile = alg.getParameterValue(paramToIter)
        layer = QGisLayers.getObjectFromUri(layerfile, False)
        provider = layer.dataProvider()
        allAttrs = provider.attributeIndexes()
        provider.select(allAttrs)
        feat = QgsFeature()
        filelist = []
        outputs = {}
        while provider.nextFeature(feat):
            output = SextanteUtils.getTempFilename("shp")
            filelist.append(output)
            writer = QgsVectorFileWriter(output, systemEncoding,
                                         provider.fields(),
                                         provider.geometryType(), layer.crs())
            writer.addFeature(feat)
            del writer

        #store output values to use them later as basenames for all outputs
        for out in alg.outputs:
            outputs[out.name] = out.value

        #now run all the algorithms
        i = 1
        for f in filelist:
            alg.setParameterValue(paramToIter, f)
            for out in alg.outputs:
                filename = outputs[out.name]
                if filename:
                    filename = filename[:filename.rfind(".")] + "_" + str(
                        i) + filename[filename.rfind("."):]
                out.value = filename
            progress.setText("Executing iteration " + str(i) + "/" +
                             str(len(filelist)) + "...")
            progress.setPercentage((i * 100) / len(filelist))
            if UnthreadedAlgorithmExecutor.runalg(alg, SilentProgress()):
                SextantePostprocessing.handleAlgorithmResults(
                    alg, progress, False)
                i += 1
            else:
                return False

        return True
    def runalgIterating(alg, paramToIter, progress):
        # generate all single-feature layers
        settings = QSettings()
        systemEncoding = settings.value("/UI/encoding", "System").toString()
        layerfile = alg.getParameterValue(paramToIter)
        layer = QGisLayers.getObjectFromUri(layerfile, False)
        provider = layer.dataProvider()
        allAttrs = provider.attributeIndexes()
        provider.select(allAttrs)
        feat = QgsFeature()
        filelist = []
        outputs = {}
        while provider.nextFeature(feat):
            output = SextanteUtils.getTempFilename("shp")
            filelist.append(output)
            writer = QgsVectorFileWriter(
                output, systemEncoding, provider.fields(), provider.geometryType(), layer.crs()
            )
            writer.addFeature(feat)
            del writer

        # store output values to use them later as basenames for all outputs
        for out in alg.outputs:
            outputs[out.name] = out.value

        # now run all the algorithms
        i = 1
        for f in filelist:
            alg.setParameterValue(paramToIter, f)
            for out in alg.outputs:
                filename = outputs[out.name]
                if filename:
                    filename = filename[: filename.rfind(".")] + "_" + str(i) + filename[filename.rfind(".") :]
                out.value = filename
            progress.setText("Executing iteration " + str(i) + "/" + str(len(filelist)) + "...")
            progress.setPercentage((i * 100) / len(filelist))
            if UnthreadedAlgorithmExecutor.runalg(alg, SilentProgress()):
                SextantePostprocessing.handleAlgorithmResults(alg, progress, False)
                i += 1
            else:
                return False

        return True
예제 #9
0
 def runalgIterating(self):
     try:
         outputs = {}
         #store output values to use them later as basenames for all outputs
         for out in self.algorithm.outputs:
             outputs[out.name] = out.value
         i = 1
         for f in self.filelist:
             self.algorithm.setParameterValue(self.parameterToIterate, f)
             for out in self.algorithm.outputs:
                 filename = outputs[out.name]
                 if filename:
                     filename = filename[:filename.rfind(".")] + "_" + str(i) + filename[filename.rfind("."):]
                 out.value = filename
             self.progress.setText("Executing iteration " + str(i) + "/" + str(len(self.filelist)) + "...")
             self.progress.setPercentage((i * 100) / len(self.filelist))
             self.runalg()
             SextantePostprocessing.handleAlgorithmResults(self.algorithm, self.progress, False)
             self.iterated.emit(i)
             i += 1
         self.algExecuted.emit()
     except BaseException, e:
         self.error.emit(str(e))
         print "Error iterating " + str(e)