Beispiel #1
0
    def fillTree(self):
        useCategories = SextanteConfig.getSetting(SextanteConfig.USE_CATEGORIES)
        if useCategories:
            self.fillTreeUsingCategories()
        else:
            self.fillTreeUsingProviders()

        self.algorithmTree.sortItems(0, Qt.AscendingOrder)

        showRecent = SextanteConfig.getSetting(SextanteConfig.SHOW_RECENT_ALGORITHMS)
        if showRecent:
            recent = SextanteLog.getRecentAlgorithms()
            if len(recent) != 0:
                found = False
                recentItem = QTreeWidgetItem()
                recentItem.setText(0, self.tr("Recently used algorithms"))
                for algname in recent:
                    alg = Sextante.getAlgorithm(algname)
                    if alg is not None:
                        algItem = TreeAlgorithmItem(alg)
                        recentItem.addChild(algItem)
                        found = True
                if found:
                    self.algorithmTree.insertTopLevelItem(0, recentItem)
                    recentItem.setExpanded(True)

            self.algorithmTree.setWordWrap(True)
Beispiel #2
0
    def load(fileName, name=None, crs=None, style=None):
        if fileName == None:
            return
        prjSetting = None
        settings = QSettings()
        if crs != None:
            prjSetting = settings.value("/Projections/defaultBehaviour")
            settings.setValue("/Projections/defaultBehaviour", QVariant(""))
        if name == None:
            name = path.split(fileName)[1]
        qgslayer = QgsVectorLayer(fileName, name, 'ogr')
        if qgslayer.isValid():
            if crs is not None and qgslayer.crs() is None:
                qgslayer.setCrs(crs, False)
            if style == None:
                if qgslayer.geometryType == 0:
                    style = SextanteConfig.getSetting(
                        SextanteConfig.VECTOR_POINT_STYLE)
                elif qgslayer.geometryType == 1:
                    style = SextanteConfig.getSetting(
                        SextanteConfig.VECTOR_LINE_STYLE)
                else:
                    style = SextanteConfig.getSetting(
                        SextanteConfig.VECTOR_POLYGON_STYLE)
            qgslayer.loadNamedStyle(style)
            QgsMapLayerRegistry.instance().addMapLayers([qgslayer])
        else:
            qgslayer = QgsRasterLayer(fileName, name)
            if qgslayer.isValid():
                if crs != None:
                    qgslayer.setCrs(crs, False)
                if style == None:
                    style = SextanteConfig.getSetting(
                        SextanteConfig.RASTER_STYLE)
                qgslayer.loadNamedStyle(style)
                QgsMapLayerRegistry.instance().addMapLayers([qgslayer])
                QGisLayers.iface.legendInterface().refreshLayerSymbology(
                    qgslayer)
            else:
                if prjSetting:
                    settings.setValue("/Projections/defaultBehaviour",
                                      prjSetting)
                raise RuntimeError(
                    "Could not load layer: " + unicode(fileName) +
                    "\nCheck the SEXTANTE log to look for errors")
        if prjSetting:
            settings.setValue("/Projections/defaultBehaviour", prjSetting)

        return qgslayer
Beispiel #3
0
 def executeSaga(progress):
     if SextanteUtils.isWindows():
         command = ["cmd.exe", "/C ", SagaUtils.sagaBatchJobFilename()]
     else:
         os.chmod(SagaUtils.sagaBatchJobFilename(), stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE)
         command = [SagaUtils.sagaBatchJobFilename()]
     loglines = []
     loglines.append("SAGA execution console output")
     proc = subprocess.Popen(
         command,
         shell=True,
         stdout=subprocess.PIPE,
         stdin=subprocess.PIPE,
         stderr=subprocess.STDOUT,
         universal_newlines=True,
     ).stdout
     for line in iter(proc.readline, ""):
         if "%" in line:
             s = "".join([x for x in line if x.isdigit()])
             try:
                 progress.setPercentage(int(s))
             except:
                 pass
         else:
             line = line.strip()
             if line != "/" and line != "-" and line != "\\" and line != "|":
                 loglines.append(line)
                 progress.setConsoleInfo(line)
     if SextanteConfig.getSetting(SagaUtils.SAGA_LOG_CONSOLE):
         SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
Beispiel #4
0
    def checkBeforeOpeningParametersDialog(self):
        if SextanteUtils.isWindows():
            path = RUtils.RFolder()
            if path == "":
                return "R folder is not configured.\nPlease configure it before running R scripts."

        R_INSTALLED = "R_INSTALLED"
        settings = QSettings()
        if settings.contains(R_INSTALLED):
            return
        if SextanteUtils.isWindows():
            if SextanteConfig.getSetting(RUtils.R_USE64):
                execDir = "x64"
            else:
                execDir = "i386"
            command = [
                RUtils.RFolder() + os.sep + "bin" + os.sep + execDir + os.sep +
                "R.exe --version"
            ]
        else:
            command = ["R --version"]
        proc = subprocess.Popen(command,
                                shell=True,
                                stdout=subprocess.PIPE,
                                stdin=subprocess.PIPE,
                                stderr=subprocess.STDOUT,
                                universal_newlines=True).stdout

        for line in iter(proc.readline, ""):
            if "R version" in line:
                settings.setValue(R_INSTALLED, True)
                return
        return "It seems that R is not correctly installed in your system.\nPlease install it before running R Scripts."
 def exportVectorLayer(self, orgFilename):
     #TODO: improve this. We are now exporting if it is not a shapefile,
     #but the functionality of v.in.ogr could be used for this.
     #We also export if there is a selection
     if not os.path.exists(orgFilename) or not orgFilename.endswith("shp"):
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             filename = LayerExporter.exportVectorLayer(layer)
     else:
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             useSelection = SextanteConfig.getSetting(SextanteConfig.USE_SELECTED)
             if useSelection and layer.selectedFeatureCount() != 0:
                 filename = LayerExporter.exportVectorLayer(layer)
             else:
                 filename = orgFilename
         else:
             filename = orgFilename
     destFilename = self.getTempFilename()
     self.exportedLayers[orgFilename]= destFilename
     command = "v.in.ogr"
     min_area = self.getParameterValue(self.GRASS_MIN_AREA_PARAMETER);
     command += " min_area=" + str(min_area)
     snap = self.getParameterValue(self.GRASS_SNAP_TOLERANCE_PARAMETER);
     command += " snap=" + str(snap)
     command += " dsn=\"" + os.path.dirname(filename) + "\""
     command += " layer=" + os.path.basename(filename)[:-4]
     command += " output=" + destFilename;
     command += " --overwrite -o"
     return command
    def executeRAlgorithm(alg, progress):
        RUtils.verboseCommands = alg.getVerboseCommands()
        RUtils.createRScriptFromRCommands(alg.getFullSetOfRCommands())
        if SextanteUtils.isWindows():
            if SextanteConfig.getSetting(RUtils.R_USE64):
                execDir = "x64"
            else:
                execDir = "i386"
            command = [
                RUtils.RFolder() + os.sep + "bin" + os.sep + execDir + os.sep +
                "R.exe", "CMD", "BATCH", "--vanilla",
                RUtils.getRScriptFilename(),
                RUtils.getConsoleOutputFilename()
            ]
        else:
            os.chmod(RUtils.getRScriptFilename(),
                     stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE)
            command = "R CMD BATCH --vanilla " + RUtils.getRScriptFilename(
            ) + " " + RUtils.getConsoleOutputFilename()

        proc = subprocess.Popen(command,
                                shell=True,
                                stdout=subprocess.PIPE,
                                stdin=subprocess.PIPE,
                                stderr=subprocess.STDOUT,
                                universal_newlines=True)
        proc.wait()
        RUtils.createConsoleOutput()
        loglines = []
        loglines.append("R execution console output")
        loglines += RUtils.allConsoleResults
        for line in loglines:
            progress.setConsoleInfo(line)
        SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
 def handleAlgorithmResults(alg, progress, showResults=True):
     wrongLayers = []
     htmlResults = False
     progress.setText("Loading resulting layers")
     i = 0
     for out in alg.outputs:
         progress.setPercentage(100 * i / float(len(alg.outputs)))
         if out.hidden or not out.open:
             continue
         if isinstance(out, (OutputRaster, OutputVector, OutputTable)):
             try:
                 if out.value.startswith("memory:"):
                     layer = out.memoryLayer
                     QgsMapLayerRegistry.instance().addMapLayers([layer])
                 else:
                     if SextanteConfig.getSetting(
                             SextanteConfig.USE_FILENAME_AS_LAYER_NAME):
                         name = os.path.basename(out.value)
                     else:
                         name = out.description
                     QGisLayers.load(
                         out.value, name, alg.crs,
                         RenderingStyles.getStyle(alg.commandLineName(),
                                                  out.name))
             except Exception, e:
                 wrongLayers.append(out)
                 #QMessageBox.critical(None, "Error", str(e))
         elif isinstance(out, OutputHTML):
             SextanteResults.addResult(out.description, out.value)
             htmlResults = True
Beispiel #8
0
 def exportVectorLayer(self, orgFilename):
     #TODO: improve this. We are now exporting if it is not a shapefile,
     #but the functionality of v.in.ogr could be used for this.
     #We also export if there is a selection
     if not os.path.exists(orgFilename) or not orgFilename.endswith("shp"):
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             filename = LayerExporter.exportVectorLayer(layer)
     else:
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             useSelection = SextanteConfig.getSetting(
                 SextanteConfig.USE_SELECTED)
             if useSelection and layer.selectedFeatureCount() != 0:
                 filename = LayerExporter.exportVectorLayer(layer)
             else:
                 filename = orgFilename
         else:
             filename = orgFilename
     destFilename = self.getTempFilename()
     self.exportedLayers[orgFilename] = destFilename
     command = "v.in.ogr"
     min_area = self.getParameterValue(self.GRASS_MIN_AREA_PARAMETER)
     command += " min_area=" + str(min_area)
     snap = self.getParameterValue(self.GRASS_SNAP_TOLERANCE_PARAMETER)
     command += " snap=" + str(snap)
     command += " dsn=\"" + os.path.dirname(filename) + "\""
     command += " layer=" + os.path.basename(filename)[:-4]
     command += " output=" + destFilename
     command += " --overwrite -o"
     return command
Beispiel #9
0
    def modelsFolder():
        folder = SextanteConfig.getSetting(ModelerUtils.MODELS_FOLDER)
        if folder == None:
            folder = unicode(os.path.join(SextanteUtils.userFolder(), "models"))
        mkdir(folder)

        return os.path.abspath(folder)
Beispiel #10
0
 def runIli2c(args, progress):
     #ili2c USAGE
     #  ili2c [Options] file1.ili file2.ili ...
     #
     #OPTIONS
     #
     #--no-auto             don't look automatically after required models.
     #-o0                   Generate no output (default).
     #-o1                   Generate INTERLIS-1 output.
     #-o2                   Generate INTERLIS-2 output.
     #-oXSD                 Generate an XML-Schema.
     #-oFMT                 Generate an INTERLIS-1 Format.
     #-oIMD                 Generate Model as IlisMeta INTERLIS-Transfer (XTF).
     #-oIOM                 (deprecated) Generate Model as INTERLIS-Transfer (XTF).
     #--out file/dir        file or folder for output.
     #--ilidirs %ILI_DIR;http://models.interlis.ch/;%JAR_DIR list of directories with ili-files.
     #--proxy host          proxy server to access model repositories.
     #--proxyPort port      proxy port to access model repositories.
     #--with-predefined     Include the predefined MODEL INTERLIS in
     #                      the output. Usually, this is omitted.
     #--without-warnings    Report only errors, no warnings. Usually,
     #                      warnings are generated as well.
     #--trace               Display detailed trace messages.
     #--quiet               Suppress info messages.
     #-h|--help             Display this help text.
     #-u|--usage            Display short information about usage.
     #-v|--version          Display the version of ili2c.
     IliUtils.runJava( SextanteConfig.getSetting(IliUtils.ILI2C_JAR), args, progress )
Beispiel #11
0
 def exportVectorLayer(layer):
     '''Takes a QgsVectorLayer and returns the filename to refer to it, which allows external
     apps which support only file-based layers to use it. It performs the necessary export
     in case the input layer is not in a standard format suitable for most applications, it is
     a remote one or db-based (non-file based) one, or if there is a selection and it should be
     used, exporting just the selected features.
     Currently, the output is restricted to shapefiles, so anything that is not in a shapefile
     will get exported.
     It also export to a new file if the original one contains non-ascii characters'''
     settings = QSettings()
     systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
     output = SextanteUtils.getTempFilename("shp")
     provider = layer.dataProvider()
     useSelection = SextanteConfig.getSetting(SextanteConfig.USE_SELECTED)
     if useSelection and layer.selectedFeatureCount() != 0:
         writer = QgsVectorFileWriter(output, systemEncoding, layer.pendingFields(), provider.geometryType(), layer.crs())
         selection = layer.selectedFeatures()
         for feat in selection:
             writer.addFeature(feat)
         del writer
         return output
     else:
         isASCII=True
         try:
             unicode(layer.source()).decode("ascii")
         except UnicodeEncodeError:
             isASCII=False
         if (not unicode(layer.source()).endswith("shp") or not isASCII):
             writer = QgsVectorFileWriter( output, systemEncoding, layer.pendingFields(), provider.geometryType(), layer.crs() )
             for feat in layer.getFeatures():
                 writer.addFeature(feat)
             del writer
             return output
         else:
             return unicode(layer.source())
Beispiel #12
0
    def RScriptsFolder():
        folder = SextanteConfig.getSetting(RUtils.RSCRIPTS_FOLDER)
        if folder == None:
            folder = os.path.join(os.path.dirname(__file__), "scripts")
        mkdir(folder)

        return folder
Beispiel #13
0
    def modelsFolder():
        folder = SextanteConfig.getSetting(ModelerUtils.MODELS_FOLDER)
        if folder == None:
            folder = SextanteUtils.userFolder() + os.sep + "models"
        mkdir(folder)

        return folder
 def saveToFile(self):
     filefilter = self.output.getFileFilter(self.alg)
     settings = QSettings()
     if settings.contains("/SextanteQGIS/LastOutputPath"):
         path = settings.value("/SextanteQGIS/LastOutputPath")
     else:
         path = SextanteConfig.getSetting(SextanteConfig.OUTPUT_FOLDER)
     lastEncoding = settings.value("/SextanteQGIS/encoding", "System")
     fileDialog = QgsEncodingFileDialog(self, "Save file", path, filefilter,
                                        lastEncoding)
     fileDialog.setFileMode(QFileDialog.AnyFile)
     fileDialog.setAcceptMode(QFileDialog.AcceptSave)
     fileDialog.setConfirmOverwrite(True)
     if fileDialog.exec_() == QDialog.Accepted:
         files = fileDialog.selectedFiles()
         encoding = unicode(fileDialog.encoding())
         self.output.encoding = encoding
         filename = unicode(files[0])
         selectedFilefilter = unicode(fileDialog.selectedNameFilter())
         if not filename.lower().endswith(
                 tuple(re.findall("\*(\.[a-z]{1,5})", filefilter))):
             ext = re.search("\*(\.[a-z]{1,5})", selectedFilefilter)
             if ext:
                 filename = filename + ext.group(1)
         self.text.setText(filename)
         settings.setValue("/SextanteQGIS/LastOutputPath",
                           os.path.dirname(filename))
         settings.setValue("/SextanteQGIS/encoding", encoding)
Beispiel #15
0
    def processAlgorithm(self, progress):
        '''Here is where the processing itself takes place'''

        db = self.getParameterValue(self.DBNAME)

        connoptions = {
            "host": self.getParameterValue(self.HOST),
            "port": self.getParameterValue(self.PORT),
            "username": self.getParameterValue(self.USER),
            "password": self.getParameterValue(self.PASSWORD),
            "template": self.getParameterValue(self.TEMPLATE)
        }
        connargs = ['--no-password']
        for k, v in connoptions.items():
            if len(v) > 0 and k <> 'password':
                connargs.append("--%s=%s" % (k, v))

        #output = self.getOutputValue(self.OUTPUT)

        IliUtils.runShellCmd([
            SextanteConfig.getSetting(IliUtils.CREATEDB_EXEC),
            ' '.join(connargs), db
        ], progress)

        DbConnection.add_connection(db, connoptions["host"],
                                    connoptions["port"], db,
                                    connoptions["username"],
                                    connoptions["password"])
Beispiel #16
0
 def otbPath():
     folder = SextanteConfig.getSetting(OTBUtils.OTB_FOLDER)
     if folder == None:
         folder = ""
         #try to configure the path automatically
         if SextanteUtils.isMac():
             testfolder = os.path.join(str(QgsApplication.prefixPath()), "bin")
             if os.path.exists(os.path.join(testfolder, "otbcli")):
                 folder = testfolder
             else:
                 testfolder = "/usr/local/bin"
                 if os.path.exists(os.path.join(testfolder, "otbcli")):
                     folder = testfolder
         elif SextanteUtils.isWindows():
             testfolder = os.path.dirname(str(QgsApplication.prefixPath()))
             testfolder = os.path.dirname(testfolder)
             testfolder = os.path.join(testfolder,  "bin")
             path = os.path.join(testfolder, "otbcli.bat")
             if os.path.exists(path):
                 folder = testfolder
         else:
             testfolder = "/usr/bin"
             if os.path.exists(os.path.join(testfolder, "otbcli")):
                 folder = testfolder
     return folder
Beispiel #17
0
 def getRecentAlgorithms():
     recentAlgsSetting = SextanteConfig.getSetting(SextanteConfig.RECENT_ALGORITHMS)
     try:
         SextanteLog.recentAlgs = recentAlgsSetting.split(';')
     except:
         pass
     return SextanteLog.recentAlgs
Beispiel #18
0
    def scriptsFolder():
        folder = SextanteConfig.getSetting(ScriptUtils.SCRIPTS_FOLDER)
        if folder == None:
            folder = SextanteUtils.userFolder() + os.sep + "scripts"
        mkdir(folder)

        return folder
Beispiel #19
0
    def modelsFolder():
        folder = SextanteConfig.getSetting(ModelerUtils.MODELS_FOLDER)
        if folder == None:
            folder = os.path.join(os.path.dirname(__file__), "models")
        mkdir(folder)

        return folder
Beispiel #20
0
    def addRecentAlgorithms(self, updating):
        showRecent = SextanteConfig.getSetting(
            SextanteConfig.SHOW_RECENT_ALGORITHMS)
        if showRecent:
            recent = SextanteLog.getRecentAlgorithms()
            if len(recent) != 0:
                found = False
                if updating:
                    recentItem = self.algorithmTree.topLevelItem(0)
                    treeWidget = recentItem.treeWidget()
                    treeWidget.takeTopLevelItem(
                        treeWidget.indexOfTopLevelItem(recentItem))
                    #self.algorithmTree.removeItemWidget(first, 0)

                recentItem = QTreeWidgetItem()
                recentItem.setText(0, self.tr("Recently used algorithms"))
                for algname in recent:
                    alg = Sextante.getAlgorithm(algname)
                    if alg is not None:
                        algItem = TreeAlgorithmItem(alg)
                        recentItem.addChild(algItem)
                        found = True
                if found:
                    self.algorithmTree.insertTopLevelItem(0, recentItem)
                    recentItem.setExpanded(True)

            self.algorithmTree.setWordWrap(True)
Beispiel #21
0
 def executeGrass(commands, progress):
     if SextanteUtils.isWindows():
         GrassUtils.createGrassScript(commands)
         command = ["cmd.exe", "/C ", GrassUtils.grassScriptFilename()]
     else:
         gisrc =  SextanteUtils.userFolder() + os.sep + "sextante.gisrc"
         os.putenv("GISRC", gisrc)
         os.putenv("GRASS_MESSAGE_FORMAT", "gui")
         os.putenv("GRASS_BATCH_JOB", GrassUtils.grassBatchJobFilename())
         GrassUtils.createGrassBatchJobFileFromGrassCommands(commands)
         os.chmod(GrassUtils.grassBatchJobFilename(), stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE)
         if SextanteUtils.isMac():
             command = GrassUtils.grassPath() + os.sep + "grass.sh " + GrassUtils.grassMapsetFolder() + "/user"
         else:
             command = "grass64 " + GrassUtils.grassMapsetFolder() + "/user"
     loglines = []
     loglines.append("GRASS execution console output")
     proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout
     for line in iter(proc.readline, ""):
         if "GRASS_INFO_PERCENT" in line:
             try:
                 progress.setPercentage(int(line[len("GRASS_INFO_PERCENT")+ 2:]))
             except:
                 pass
         else:
             loglines.append(line)
             progress.setConsoleInfo(line)
     if SextanteConfig.getSetting(GrassUtils.GRASS_LOG_CONSOLE):
         SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
     shutil.rmtree(GrassUtils.grassMapsetFolder(), True)
Beispiel #22
0
 def runIli2c(args, progress):
     # ili2c USAGE
     #  ili2c [Options] file1.ili file2.ili ...
     #
     # OPTIONS
     #
     #--no-auto             don't look automatically after required models.
     #-o0                   Generate no output (default).
     #-o1                   Generate INTERLIS-1 output.
     #-o2                   Generate INTERLIS-2 output.
     #-oXSD                 Generate an XML-Schema.
     #-oFMT                 Generate an INTERLIS-1 Format.
     #-oIMD                 Generate Model as IlisMeta INTERLIS-Transfer (XTF).
     #-oIOM                 (deprecated) Generate Model as INTERLIS-Transfer (XTF).
     #--out file/dir        file or folder for output.
     #--ilidirs %ILI_DIR;http://models.interlis.ch/;%JAR_DIR list of directories with ili-files.
     #--proxy host          proxy server to access model repositories.
     #--proxyPort port      proxy port to access model repositories.
     #--with-predefined     Include the predefined MODEL INTERLIS in
     #                      the output. Usually, this is omitted.
     #--without-warnings    Report only errors, no warnings. Usually,
     #                      warnings are generated as well.
     #--trace               Display detailed trace messages.
     #--quiet               Suppress info messages.
     #-h|--help             Display this help text.
     #-u|--usage            Display short information about usage.
     #-v|--version          Display the version of ili2c.
     IliUtils.runJava(SextanteConfig.getSetting(IliUtils.ILI2C_JAR), args,
                      progress)
 def WpsDescriptionFolder():
     folder = SextanteConfig.getSetting(
         WpsAlgorithmProvider.WPS_DESCRIPTIONS)
     if folder == None:
         folder = unicode(os.path.join(SextanteUtils.userFolder(), "wps"))
     mkdir(folder)
     return os.path.abspath(folder)
Beispiel #24
0
 def saveToFile(self):
     filefilter = self.output.getFileFilter(self.alg)
     settings = QSettings()
     if settings.contains("/SextanteQGIS/LastOutputPath"):
         path = str(
             settings.value("/SextanteQGIS/LastOutputPath",
                            QVariant("")).toString())
     else:
         path = SextanteConfig.getSetting(SextanteConfig.OUTPUT_FOLDER)
     lastEncoding = settings.value("/SextanteQGIS/encoding",
                                   "System").toString()
     fileDialog = QgsEncodingFileDialog(self, "Save file", QString(path),
                                        filefilter, lastEncoding)
     fileDialog.setFileMode(QFileDialog.AnyFile)
     fileDialog.setAcceptMode(QFileDialog.AcceptSave)
     fileDialog.setConfirmOverwrite(True)
     if fileDialog.exec_() == QDialog.Accepted:
         files = fileDialog.selectedFiles()
         encoding = unicode(fileDialog.encoding())
         self.output.encoding = encoding
         filename = unicode(files.first())
         self.text.setText(filename)
         settings.setValue("/SextanteQGIS/LastOutputPath",
                           os.path.dirname(str(filename)))
         settings.setValue("/SextanteQGIS/encoding", encoding)
Beispiel #25
0
 def getRecentAlgorithms():
     recentAlgsSetting = SextanteConfig.getSetting(SextanteConfig.RECENT_ALGORITHMS)
     try:
         SextanteLog.recentAlgs = recentAlgsSetting.split(';')
     except:
         pass
     return SextanteLog.recentAlgs
Beispiel #26
0
 def exportVectorLayer(layer):
     '''Takes a QgsVectorLayer and returns the filename to refer to it, which allows external
     apps which support only file-based layers to use it. It performs the necessary export
     in case the input layer is not in a standard format suitable for most applications, it is
     a remote one or db-based (non-file based) one, or if there is a selection and it should be
     used, exporting just the selected features.
     Currently, the output is restricted to shapefiles, so anything that is not in a shapefile
     will get exported'''
     settings = QSettings()
     systemEncoding = settings.value( "/UI/encoding", "System" ).toString()
     output = SextanteUtils.getTempFilename("shp")
     provider = layer.dataProvider()
     allAttrs = provider.attributeIndexes()
     provider.select( allAttrs )
     useSelection = SextanteConfig.getSetting(SextanteConfig.USE_SELECTED)
     if useSelection and layer.selectedFeatureCount() != 0:
         writer = QgsVectorFileWriter( output, systemEncoding,provider.fields(), provider.geometryType(), provider.crs() )
         selection = layer.selectedFeatures()
         for feat in selection:
             writer.addFeature(feat)
         del writer
         return output
     else:
         if (not unicode(layer.source()).endswith("shp")):
             writer = QgsVectorFileWriter( output, systemEncoding,provider.fields(), provider.geometryType(), provider.crs() )
             feat = QgsFeature()
             while provider.nextFeature(feat):
                 writer.addFeature(feat)
             del writer
             return output
         else:
             return unicode(layer.source())
Beispiel #27
0
 def executeGrass(commands, progress):
     if SextanteUtils.isWindows():
         GrassUtils.createGrassScript(commands)
         command = ["cmd.exe", "/C ", GrassUtils.grassScriptFilename()]
     else:
         gisrc =  SextanteUtils.userFolder() + os.sep + "sextante.gisrc"
         os.putenv("GISRC", gisrc)
         os.putenv("GRASS_MESSAGE_FORMAT", "gui")
         os.putenv("GRASS_BATCH_JOB", GrassUtils.grassBatchJobFilename())
         GrassUtils.createGrassBatchJobFileFromGrassCommands(commands)
         os.chmod(GrassUtils.grassBatchJobFilename(), stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE)
         if SextanteUtils.isMac():
             command = GrassUtils.grassPath() + os.sep + "grass.sh " + GrassUtils.grassMapsetFolder() + "/user"
         else:
             command = "grass64 " + GrassUtils.grassMapsetFolder() + "/user"
     loglines = []
     loglines.append("GRASS execution console output")
     proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout
     for line in iter(proc.readline, ""):
         if "GRASS_INFO_PERCENT" in line:
             try:
                 progress.setPercentage(int(line[len("GRASS_INFO_PERCENT")+ 2:]))
             except:
                 pass
         else:
             loglines.append(line)
             progress.setConsoleInfo(line)
     if SextanteConfig.getSetting(GrassUtils.GRASS_LOG_CONSOLE):
         SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
Beispiel #28
0
    def processAlgorithm(self, progress):
        commands.append(os.path.join(TauDEMUtils.mpiexecPath(), "mpiexec"))

        processNum = SextanteConfig.getSetting(TauDEMUtils.MPI_PROCESSES)
        if processNum <= 0:
          raise GeoAlgorithmExecutionException("Wrong number of MPI processes used.\nPlease set correct number before running TauDEM algorithms.")

        commands.append("-n")
        commands.append(str(processNum))
        commands.append(os.path.join(TauDEMUtils.taudemPath(), self.cmdName))
        commands.append("-ad8")
        commands.append(self.getParameterValue(self.D8_CONTRIB_AREA_GRID))
        commands.append("-p")
        commands.append(self.getParameterValue(self.D8_FLOW_DIR_GRID))
        commands.append("-fel")
        commands.append(self.getParameterValue(self.PIT_FILLED_GRID))
        commands.append("-ssa")
        commands.append(self.getParameterValue(self.ACCUM_STREAM_SOURCE_GRID))
        commands.append("-o")
        commands.append(self.getParameterValue(self.OUTLETS_SHAPE))
        commands.append("-par")
        commands.append(str(self.getParameterValue(self.MIN_TRESHOLD)))
        commands.append(str(self.getParameterValue(self.MAX_THRESHOLD)))
        commands.append(str(self.getParameterValue(self.TRESHOLD_NUM)))
        commands.append(str(self.getParameterValue(self.STEPS)))
        commands.append("-drp")
        commands.append(self.getOutputValue(self.DROP_ANALYSIS_FILE))

        loglines = []
        loglines.append("TauDEM execution command")
        for line in commands:
            loglines.append(line)
        SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)

        TauDEMUtils.executeTauDEM(commands, progress)
Beispiel #29
0
 def exportVectorLayer(self, orgFilename):
     #only export to an intermediate shp if the layer is not file-based.
     #We assume that almost all file formats will be supported by ogr
     #We also export if there is a selection
     if not os.path.exists(orgFilename):
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             filename = LayerExporter.exportVectorLayer(layer)
     else:
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             useSelection = SextanteConfig.getSetting(SextanteConfig.USE_SELECTED)
             if useSelection and layer.selectedFeatureCount() != 0:
                 filename = LayerExporter.exportVectorLayer(layer)
             else:
                 filename = orgFilename
         else:
             filename = orgFilename
     destFilename = self.getTempFilename()
     self.exportedLayers[orgFilename]= destFilename
     command = "v.in.ogr"
     command += " min_area=-1"
     command +=" dsn=\"" + os.path.dirname(filename) + "\""
     command +=" layer=" + os.path.basename(filename)[:-4]
     command +=" output=" + destFilename;
     command +=" --overwrite -o"
     return command
Beispiel #30
0
    def processAlgorithm(self, progress):
        commands = []
        commands.append(os.path.join(TauDEMUtils.mpiexecPath(), "mpiexec"))

        processNum = SextanteConfig.getSetting(TauDEMUtils.MPI_PROCESSES)
        if processNum <= 0:
          raise GeoAlgorithmExecutionException("Wrong number of MPI processes used.\nPlease set correct number before running TauDEM algorithms.")

        commands.append("-n")
        commands.append(str(processNum))
        commands.append(os.path.join(TauDEMUtils.taudemPath(), self.cmdName))
        commands.append("-plen")
        commands.append(self.getParameterValue(self.LENGTH_GRID))
        commands.append("-ad8")
        commands.append(self.getParameterValue(self.CONTRIB_AREA_GRID))
        commands.append("-par")
        commands.append(str(self.getParameterValue(self.THRESHOLD)))
        commands.append(str(self.getParameterValue(self.EXPONENT)))
        commands.append("-ss")
        commands.append(self.getOutputValue(self.STREAM_SOURCE_GRID))

        loglines = []
        loglines.append("TauDEM execution command")
        for line in commands:
            loglines.append(line)
        SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)

        TauDEMUtils.executeTauDEM(commands, progress)
Beispiel #31
0
    def scriptsFolder():
        folder = SextanteConfig.getSetting(ScriptUtils.SCRIPTS_FOLDER)
        if folder == None:
            folder = SextanteUtils.userFolder() + os.sep + "scripts"
        mkdir(folder)

        return folder
 def handleAlgorithmResults(alg, progress, showResults = True):
     wrongLayers = []
     htmlResults = False;
     progress.setText("Loading resulting layers")
     i =  0
     for out in alg.outputs:
         progress.setPercentage(100 * i / float(len(alg.outputs)))
         if out.hidden or not out.open:
             continue
         if isinstance(out, (OutputRaster, OutputVector, OutputTable)):
             try:
                 if out.value.startswith("memory:"):
                     layer = out.memoryLayer
                     QgsMapLayerRegistry.instance().addMapLayers([layer])
                 else:
                     if SextanteConfig.getSetting(SextanteConfig.USE_FILENAME_AS_LAYER_NAME):
                         name = os.path.basename(out.value)
                     else:
                         name = out.description
                     QGisLayers.load(out.value, name, alg.crs, RenderingStyles.getStyle(alg.commandLineName(),out.name))
             except Exception, e:
                 wrongLayers.append(out)
                 #QMessageBox.critical(None, "Error", str(e))
         elif isinstance(out, OutputHTML):
             SextanteResults.addResult(out.description, out.value)
             htmlResults = True
Beispiel #33
0
    def RScriptsFolder():
        folder = SextanteConfig.getSetting(RUtils.RSCRIPTS_FOLDER)
        if folder == None:
            folder = os.path.join(os.path.dirname(__file__), "scripts")
        mkdir(folder)

        return folder
 def getExtendedLayerName(self, layer):
     authid = layer.crs().authid()
     if SextanteConfig.getSetting(
             SextanteConfig.SHOW_CRS_DEF) and authid is not None:
         return layer.name() + " [" + str(authid) + "]"
     else:
         return layer.name()
Beispiel #35
0
 def handleAlgorithmResults(alg, showResults=True):
     htmlResults = False
     for out in alg.outputs:
         if out.hidden or not out.open:
             continue
         if isinstance(out, (OutputRaster, OutputVector, OutputTable)):
             try:
                 if out.value.startswith("memory:"):
                     layer = out.memoryLayer
                     QgsMapLayerRegistry.instance().addMapLayer(layer)
                 else:
                     if SextanteConfig.getSetting(
                             SextanteConfig.USE_FILENAME_AS_LAYER_NAME):
                         name = os.path.basename(out.value)
                     else:
                         name = out.description
                     QGisLayers.load(
                         out.value, name, alg.crs,
                         RenderingStyles.getStyle(alg.commandLineName(),
                                                  out.name))
             except Exception, e:
                 QMessageBox.critical(None, "Error", str(e))
         elif isinstance(out, OutputHTML):
             SextanteResults.addResult(out.description, out.value)
             htmlResults = True
 def otbLibPath():
     folder = SextanteConfig.getSetting(OTBUtils.OTB_LIB_FOLDER)
     if folder == None:
         folder = ""
         #try to configure the path automatically
         if SextanteUtils.isMac():
             testfolder = os.path.join(str(QgsApplication.prefixPath()),
                                       "lib/otb/applications")
             if os.path.exists(testfolder):
                 folder = testfolder
             else:
                 testfolder = "/usr/local/lib/otb/applications"
                 if os.path.exists(testfolder):
                     folder = testfolder
         elif SextanteUtils.isWindows():
             testfolder = os.path.dirname(str(QgsApplication.prefixPath()))
             testfolder = os.path.join(testfolder, "orfeotoolbox")
             testfolder = os.path.join(testfolder, "applications")
             if os.path.exists(testfolder):
                 folder = testfolder
         else:
             testfolder = "/usr/lib/otb/applications"
             if os.path.exists(testfolder):
                 folder = testfolder
     return folder
Beispiel #37
0
    def checkBeforeOpeningParametersDialog(self):
        if SextanteUtils.isWindows():
            path = RUtils.RFolder()
            if path == "":
                return "R folder is not configured.\nPlease configure it before running R scripts."
    
        R_INSTALLED = "R_INSTALLED"
        settings = QSettings()
        if settings.contains(R_INSTALLED):
            return
        if SextanteUtils.isWindows(): 
            if SextanteConfig.getSetting(RUtils.R_USE64):
                execDir = "x64"
            else:
                execDir = "i386"
            command = [RUtils.RFolder() + os.sep + "bin" + os.sep + execDir + os.sep + "R.exe --version"]
        else:
            command = ["R --version"]
        proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout

        for line in iter(proc.readline, ""):
            if "R version" in line:
                settings.setValue(R_INSTALLED, True)
                return
        return "It seems that R is not correctly installed in your system.\nPlease install it before running R Scripts."
 def saveToFile(self):
     filefilter = self.output.getFileFilter(self.alg)
     settings = QSettings()
     if settings.contains("/SextanteQGIS/LastOutputPath"):
         path = settings.value( "/SextanteQGIS/LastOutputPath")
     else:
         path = SextanteConfig.getSetting(SextanteConfig.OUTPUT_FOLDER)
     lastEncoding = settings.value("/SextanteQGIS/encoding", "System")
     fileDialog = QgsEncodingFileDialog(self, "Save file", path, filefilter, lastEncoding)
     fileDialog.setFileMode(QFileDialog.AnyFile)
     fileDialog.setAcceptMode(QFileDialog.AcceptSave)
     fileDialog.setConfirmOverwrite(True)
     if fileDialog.exec_() == QDialog.Accepted:
         files = fileDialog.selectedFiles()
         encoding = unicode(fileDialog.encoding())
         self.output.encoding = encoding
         filename = unicode(files[0])
         selectedFilefilter = unicode(fileDialog.selectedNameFilter())
         if not filename.lower().endswith(tuple(re.findall("\*(\.[a-z]{1,5})", filefilter))):
             ext = re.search("\*(\.[a-z]{1,5})", selectedFilefilter)
             if ext:
                 filename = filename + ext.group(1)
         self.text.setText(filename)
         settings.setValue("/SextanteQGIS/LastOutputPath", os.path.dirname(filename))
         settings.setValue("/SextanteQGIS/encoding", encoding)
Beispiel #39
0
    def checkRIsInstalled(ignoreRegistrySettings=False):
        if SextanteUtils.isWindows():
            path = RUtils.RFolder()
            if path == "":
                return "R folder is not configured.\nPlease configure it before running R scripts."

        R_INSTALLED = "R_INSTALLED"
        settings = QSettings()
        if not ignoreRegistrySettings:
            if settings.contains(R_INSTALLED):
                return
        if SextanteUtils.isWindows():
            if SextanteConfig.getSetting(RUtils.R_USE64):
                execDir = "x64"
            else:
                execDir = "i386"
            command = [RUtils.RFolder() + os.sep + "bin" + os.sep + execDir + os.sep + "R.exe", "--version"]
        else:
            command = ["R --version"]
        proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout

        for line in iter(proc.readline, ""):
            if "R version" in line:
                settings.setValue(R_INSTALLED, True)
                return
        html = ("<p>This algorithm requires R to be run."
            "Unfortunately, it seems that R is not installed in your system, or it is not correctly configured to be used from QGIS</p>"
            '<p><a href= "http://docs.qgis.org/2.0/html/en/docs/user_manual/sextante/3rdParty.html">Click here</a>'
             'to know more about how to install and configure R to be used with SEXTANTE</p>')
        return html
Beispiel #40
0
 def getExtendedLayerName(self, layer):
     authid = layer.crs().authid()
     if SextanteConfig.getSetting(
             SextanteConfig.SHOW_CRS_DEF) and authid is not None:
         return layer.name() + " [" + str(authid) + "]"
     else:
         return layer.name()
Beispiel #41
0
    def processAlgorithm(self, progress):
        commands = []
        commands.append(os.path.join(TauDEMUtils.mpiexecPath(), "mpiexec"))

        processNum = SextanteConfig.getSetting(TauDEMUtils.MPI_PROCESSES)
        if processNum <= 0:
          raise GeoAlgorithmExecutionException("Wrong number of MPI processes used.\nPlease set correct number before running TauDEM algorithms.")

        commands.append("-n")
        commands.append(str(processNum))
        commands.append(os.path.join(TauDEMUtils.taudemPath(), self.cmdName))
        commands.append("-ang")
        commands.append(self.getParameterValue(self.DINF_FLOW_DIR_GRID))
        commands.append("-fel")
        commands.append(self.getParameterValue(self.PIT_FILLED_GRID))
        commands.append("-m")
        commands.append(str(self.STAT_DICT[self.getParameterValue(self.STAT_METHOD)]))
        commands.append(str(self.DIST_DICT[self.getParameterValue(self.DIST_METHOD)]))
        commands.append("-thresh")
        commands.append(str(self.getParameterValue(self.THRESHOLD)))
        if str(self.getParameterValue(self.EDGE_CONTAM)).lower() == "false":
            commands.append("-nc")
        commands.append("-du")
        commands.append(self.getOutputValue(self.DIST_UP_GRID))

        loglines = []
        loglines.append("TauDEM execution command")
        for line in commands:
            loglines.append(line)
        SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)

        TauDEMUtils.executeTauDEM(commands, progress)
Beispiel #42
0
 def exportVectorLayer(self, orgFilename):
     #only export to an intermediate shp if the layer is not file-based.
     #We assume that almost all file formats will be supported by ogr
     #We also export if there is a selection
     if not os.path.exists(orgFilename):
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             filename = LayerExporter.exportVectorLayer(layer)
     else:
         layer = QGisLayers.getObjectFromUri(orgFilename, False)
         if layer:
             useSelection = SextanteConfig.getSetting(
                 SextanteConfig.USE_SELECTED)
             if useSelection and layer.selectedFeatureCount() != 0:
                 filename = LayerExporter.exportVectorLayer(layer)
             else:
                 filename = orgFilename
         else:
             filename = orgFilename
     destFilename = self.getTempFilename()
     self.exportedLayers[orgFilename] = destFilename
     command = "v.in.ogr"
     command += " min_area=-1"
     command += " dsn=\"" + os.path.dirname(filename) + "\""
     command += " layer=" + os.path.basename(filename)[:-4]
     command += " output=" + destFilename
     command += " --overwrite -o"
     return command
 def executeAlgorithm(self):
     item = self.algorithmTree.currentItem()
     if isinstance(item, TreeAlgorithmItem):
         alg = Sextante.getAlgorithm(item.alg.commandLineName())
         message = alg.checkBeforeOpeningParametersDialog()
         if message:
             dlg = MissingDependencyDialog(message)
             dlg.exec_()
             #QMessageBox.warning(self, self.tr("Warning"), message)
             return
         alg = alg.getCopy()
         dlg = alg.getCustomParametersDialog()
         if not dlg:
             dlg = ParametersDialog(alg)
         canvas = QGisLayers.iface.mapCanvas()
         prevMapTool = canvas.mapTool()
         dlg.show()
         dlg.exec_()
         if canvas.mapTool()!=prevMapTool:
             try:
                 canvas.mapTool().reset()
             except:
                 pass
             canvas.setMapTool(prevMapTool)
         if dlg.executed:
             showRecent = SextanteConfig.getSetting(SextanteConfig.SHOW_RECENT_ALGORITHMS)
             if showRecent:
                 self.addRecentAlgorithms(True)
     if isinstance(item, TreeActionItem):
         action = item.action
         action.setData(self)
         action.execute()
Beispiel #44
0
    def executeGrass(commands, progress, outputCommands = None):
        loglines = []
        loglines.append("GRASS execution console output")
        grassOutDone = False
        command = GrassUtils.prepareGrassExecution(commands)
        proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout
        for line in iter(proc.readline, ""):
            if "GRASS_INFO_PERCENT" in line:
                try:
                    progress.setPercentage(int(line[len("GRASS_INFO_PERCENT")+ 2:]))
                except:
                    pass
            else:
                if "r.out" in line or "v.out" in line:
                    grassOutDone = True
                loglines.append(line)
                progress.setConsoleInfo(line)
        # Some GRASS scripts, like r.mapcalculator or r.fillnulls, call other GRASS scripts during execution. This may override any commands that are
        # still to be executed by the subprocess, which are usually the output ones. If that is the case runs the output commands again.
        if not grassOutDone and outputCommands:
            command = GrassUtils.prepareGrassExecution(outputCommands)
            proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout
            for line in iter(proc.readline, ""):
                if "GRASS_INFO_PERCENT" in line:
                    try:
                        progress.setPercentage(int(line[len("GRASS_INFO_PERCENT")+ 2:]))
                    except:
                        pass
                else:
                    loglines.append(line)
                    progress.setConsoleInfo(line)

        if SextanteConfig.getSetting(GrassUtils.GRASS_LOG_CONSOLE):
            SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
        return loglines;
    def addRecentAlgorithms(self, updating):
        showRecent = SextanteConfig.getSetting(SextanteConfig.SHOW_RECENT_ALGORITHMS)
        if showRecent:
            recent = SextanteLog.getRecentAlgorithms()
            if len(recent) != 0:
                found = False
                if updating:
                    recentItem = self.algorithmTree.topLevelItem(0)
                    treeWidget = recentItem.treeWidget()
                    treeWidget.takeTopLevelItem(treeWidget.indexOfTopLevelItem(recentItem))
                    #self.algorithmTree.removeItemWidget(first, 0)

                recentItem = QTreeWidgetItem()
                recentItem.setText(0, self.tr("Recently used algorithms"))
                for algname in recent:
                    alg = Sextante.getAlgorithm(algname)
                    if alg is not None:
                        algItem = TreeAlgorithmItem(alg)
                        recentItem.addChild(algItem)
                        found = True
                if found:
                    self.algorithmTree.insertTopLevelItem(0, recentItem)
                    recentItem.setExpanded(True)

            self.algorithmTree.setWordWrap(True)
Beispiel #46
0
    def executeGrass(commands, progress, outputCommands = None):
        loglines = []
        loglines.append("GRASS execution console output")
        grassOutDone = False
        command = GrassUtils.prepareGrassExecution(commands)
        proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout
        for line in iter(proc.readline, ""):
            if "GRASS_INFO_PERCENT" in line:
                try:
                    progress.setPercentage(int(line[len("GRASS_INFO_PERCENT")+ 2:]))
                except:
                    pass
            else:
                if "r.out" in line or "v.out" in line:
                    grassOutDone = True
                loglines.append(line)
                progress.setConsoleInfo(line)
        # Some GRASS scripts, like r.mapcalculator or r.fillnulls, call other GRASS scripts during execution. This may override any commands that are
        # still to be executed by the subprocess, which are usually the output ones. If that is the case runs the output commands again.
        if not grassOutDone and outputCommands:
            command = GrassUtils.prepareGrassExecution(outputCommands)
            proc = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stdin=subprocess.PIPE,stderr=subprocess.STDOUT, universal_newlines=True).stdout
            for line in iter(proc.readline, ""):
                if "GRASS_INFO_PERCENT" in line:
                    try:
                        progress.setPercentage(int(line[len("GRASS_INFO_PERCENT")+ 2:]))
                    except:
                        pass
                else:
                    loglines.append(line)
                    progress.setConsoleInfo(line)

        if SextanteConfig.getSetting(GrassUtils.GRASS_LOG_CONSOLE):
            SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
        return loglines;
Beispiel #47
0
 def executeSaga(progress):
     if SextanteUtils.isWindows():
         command = ["cmd.exe", "/C ", SagaUtils.sagaBatchJobFilename()]
     else:
         os.chmod(SagaUtils.sagaBatchJobFilename(),
                  stat.S_IEXEC | stat.S_IREAD | stat.S_IWRITE)
         command = [SagaUtils.sagaBatchJobFilename()]
     loglines = []
     loglines.append("SAGA execution console output")
     proc = subprocess.Popen(command,
                             shell=True,
                             stdout=subprocess.PIPE,
                             stdin=subprocess.PIPE,
                             stderr=subprocess.STDOUT,
                             universal_newlines=True).stdout
     for line in iter(proc.readline, ""):
         if "%" in line:
             s = "".join([x for x in line if x.isdigit()])
             try:
                 progress.setPercentage(int(s))
             except:
                 pass
         else:
             line = line.strip()
             if line != "/" and line != "-" and line != "\\" and line != "|":
                 loglines.append(line)
                 progress.setConsoleInfo(line)
     if SextanteConfig.getSetting(SagaUtils.SAGA_LOG_CONSOLE):
         SextanteLog.addToLog(SextanteLog.LOG_INFO, loglines)
 def otbPath():
     folder = SextanteConfig.getSetting(OTBUtils.OTB_FOLDER)
     if folder == None:
         folder = ""
         #try to configure the path automatically
         if SextanteUtils.isMac():
             testfolder = os.path.join(str(QgsApplication.prefixPath()),
                                       "bin")
             if os.path.exists(os.path.join(testfolder, "otbcli")):
                 folder = testfolder
             else:
                 testfolder = "/usr/local/bin"
                 if os.path.exists(os.path.join(testfolder, "otbcli")):
                     folder = testfolder
         elif SextanteUtils.isWindows():
             testfolder = os.path.dirname(str(QgsApplication.prefixPath()))
             testfolder = os.path.dirname(testfolder)
             testfolder = os.path.join(testfolder, "bin")
             path = os.path.join(testfolder, "otbcli.bat")
             if os.path.exists(path):
                 folder = testfolder
         else:
             testfolder = "/usr/bin"
             if os.path.exists(os.path.join(testfolder, "otbcli")):
                 folder = testfolder
     return folder
Beispiel #49
0
    def RScriptsFolder():
        folder = SextanteConfig.getSetting(RUtils.RSCRIPTS_FOLDER)
        if folder == None:
            folder = unicode(os.path.join(SextanteUtils.userFolder(), "rscripts"))
        mkdir(folder)

        return os.path.abspath(folder)
Beispiel #50
0
 def executeAlgorithm(self):
     item = self.algorithmTree.currentItem()
     if isinstance(item, TreeAlgorithmItem):
         alg = Sextante.getAlgorithm(item.alg.commandLineName())
         message = alg.checkBeforeOpeningParametersDialog()
         if message:
             QtGui.QMessageBox.warning(self, "Warning", message)
             return
         alg = alg.getCopy()  #copy.deepcopy(alg)
         dlg = alg.getCustomParametersDialog()
         if not dlg:
             dlg = ParametersDialog(alg)
         canvas = QGisLayers.iface.mapCanvas()
         prevMapTool = canvas.mapTool()
         dlg.show()
         dlg.exec_()
         if canvas.mapTool() != prevMapTool:
             try:
                 canvas.mapTool().reset()
             except:
                 pass
             canvas.setMapTool(prevMapTool)
         if dlg.executed:
             showRecent = SextanteConfig.getSetting(
                 SextanteConfig.SHOW_RECENT_ALGORITHMS)
             if showRecent:
                 self.fillTree()
     if isinstance(item, TreeActionItem):
         action = item.action
         action.setData(self)
         action.execute()
Beispiel #51
0
    def grassWinShell():
        folder = SextanteConfig.getSetting(GrassUtils.GRASS_WIN_SHELL)
        if folder == None:
            folder = plugin_installer.__file__
            idx = folder.find('qgis')
            folder = folder[:idx] + "msys"

        return folder
Beispiel #52
0
 def __init__(self, layer):
     self.layer = layer
     self.selection = False;
     if SextanteConfig.getSetting(SextanteConfig.USE_SELECTED):
         self.selected = layer.selectedFeatures()
         if len(self.selected) > 0:
             self.selection = True
             self.idx = 0;
Beispiel #53
0
    def grassWinShell():
        folder = SextanteConfig.getSetting(GrassUtils.GRASS_WIN_SHELL)
        if folder == None:
            folder = plugin_installer.__file__
            idx = folder.find('qgis')
            folder = folder[:idx] + "msys"

        return folder
 def fillTree(self):
     useCategories = SextanteConfig.getSetting(SextanteConfig.USE_CATEGORIES)
     if useCategories:
         self.fillTreeUsingCategories()
     else:
         self.fillTreeUsingProviders()
     self.algorithmTree.sortItems(0, Qt.AscendingOrder)
     self.addRecentAlgorithms(False)
Beispiel #55
0
    def scriptsFolder():
        folder = SextanteConfig.getSetting(ScriptUtils.SCRIPTS_FOLDER)
        if folder == None:
            #folder = os.path.join(os.path.dirname(__file__), "scripts")
            folder = SextanteUtils.userFolder() + os.sep + "scripts"
        mkdir(folder)

        return folder
Beispiel #56
0
    def otbPath():
        folder = SextanteConfig.getSetting(OTBUtils.OTB_FOLDER)
        if folder == None:
            folder = ""

            if os.path.exists("/usr/bin/otbcli"):
                folder = "/usr/bin"
        return folder
    def RScriptsFolder():
        folder = SextanteConfig.getSetting(RUtils.RSCRIPTS_FOLDER)
        if folder == None:
            folder = unicode(
                os.path.join(SextanteUtils.userFolder(), "rscripts"))
        mkdir(folder)

        return os.path.abspath(folder)