diff --git a/CHANGELOG b/CHANGELOG index 701cf30..9108364 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,18 @@ +0.9 (09.11.2020) +- Move plugin to his self toolbar + +0.8 (23.05.2020) +- fix import resources + +0.7 (17.05.2020) +- fix save layer to file +- remove unattended column in temporary layer + +0.6 (10.11.2019) +- updated to QGIS 3.x +- fix projection according to project coordinates +- quick documentation + 0.5 (24.11.2013) -updated to QGIS 2.0 API (thanks to Matthew Petroff) -fix unicode error @@ -21,4 +36,4 @@ smoothing: Hermite Spline Interpolation -supported algorithms: generalization: Remove small objects simplifying: Douglas-Peucker, Lang, Vertex Reduction -smoothing: Boyle's Forward-Looking, Chaiken's, McMaster's Distance-Weighting, McMaster's Sliding Averaging \ No newline at end of file +smoothing: Boyle's Forward-Looking, Chaiken's, McMaster's Distance-Weighting, McMaster's Sliding Averaging diff --git a/README.md b/README.md new file mode 100644 index 0000000..3ada28d --- /dev/null +++ b/README.md @@ -0,0 +1,53 @@ +# ![Logo Generalizer](icon.png)Generalizer +Generalizer plugin for QGIS 3. Originally written by Piotr Pociask + +Plugin to Generalize, Simplify or Smooth lines in QGIS + +Functions : +- Remove small objects + +- Simplify : + * Douglas-Peucker Algorithm + + ![Douglas](https://grass.osgeo.org/grass79/manuals/v_generalize_simplify.png "Original line is black") + + * Jenk's Algorithm + * Lang Algorithm + * Reumann-Witkam Algorithm + * Vertex Reduction + + - Smooth : + * Boyle's Forward-Looking Algorithm + + ![Boyle's](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic15.png/400px-V.generalize.pic15.png "Original line is black") + + * Chaiken's Algorithm + + ![Chaiken's smooth](https://grass.osgeo.org/grass79/manuals/v_generalize_smooth.png "Original line is black") + + ![Chaiken's](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic7.png/400px-V.generalize.pic7.png "Original is black") + + * Hermite Spline Interpolation + + ![Hermite](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic8.png/400px-V.generalize.pic8.png "Original is black") + + ![Hermite and Chaiken](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic9.png/400px-V.generalize.pic9.png "Original = black, Green = Chaiken, Blue = Hermite") + + * McMaster's Distance-Weighting Algorithm + + ![Distance Weighting](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic13.png/400px-V.generalize.pic13.png "Original line is black") + + * McMaster's Sliding Averaging Algorithm + + ![Sliding](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic11.png/400px-V.generalize.pic11.png "Original line is black") + + ![Sliding2](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic12.png/400px-V.generalize.pic12.png "Original line is black") + + * Snakes Algorithm : + Slowest smoothing algorithm + + ![Snakes](https://grasswiki.osgeo.org/w/images/thumb/V.generalize.pic14.png/400px-V.generalize.pic14.png "Original line is black") + + + +Which algorithm to choose : https://grasswiki.osgeo.org/wiki/V.generalize_tutorial diff --git a/__init__.py b/__init__.py index 7f2a335..fcf688b 100644 --- a/__init__.py +++ b/__init__.py @@ -19,7 +19,8 @@ ***************************************************************************/ This script initializes the plugin, making it known to QGIS. """ +from __future__ import absolute_import def classFactory(iface): # load generalizer class from file generalizer - from generalizer import generalizer + from .generalizer import generalizer return generalizer(iface) diff --git a/dialogs.py b/dialogs.py index f13d061..5f4f0b9 100644 --- a/dialogs.py +++ b/dialogs.py @@ -1,5 +1,7 @@ -from PyQt4.QtGui import * -from PyQt4.QtCore import * +from builtins import str +from PyQt5.QtGui import * +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * from os.path import splitext, dirname @@ -9,14 +11,14 @@ def saveDialog(parent): key = '/UI/lastShapefileDir' outDir = settings.value(key) - filter = 'Shapefiles (*.shp)' - outFilePath = QFileDialog.getSaveFileName(parent, parent.tr('Save output shapefile'), outDir, filter) - outFilePath = unicode(outFilePath) + filter = 'GeoPackage (*.gpkg)' + outFilePath, __ = QFileDialog.getSaveFileName(parent, parent.tr('Save output GeoPackage'), outDir, filter) + outFilePath = str(outFilePath) if outFilePath: root, ext = splitext(outFilePath) - if ext.upper() != '.SHP': - outFilePath = '%s.shp' % outFilePath + if ext.upper() != '.GPKG': + outFilePath = '%s.gpkg' % outFilePath outDir = dirname(outFilePath) settings.setValue(key, outDir) diff --git a/generalizer.py b/generalizer.py index 3f69971..083ad9a 100644 --- a/generalizer.py +++ b/generalizer.py @@ -7,6 +7,8 @@ begin : 2011-08-17 copyright : (C) 2011 by Piotr Pociask email : ppociask (at) o2 pl + adapted to QGIS 3 : 2019-11-10 by Sylvain POULAIN + email : sylvain.poulain (at) giscan.com ***************************************************************************/ /*************************************************************************** @@ -18,36 +20,161 @@ * * ***************************************************************************/ """ +from __future__ import absolute_import # Import the PyQt and QGIS libraries -from PyQt4.QtCore import * -from PyQt4.QtGui import * +from builtins import object +from PyQt5.QtCore import * +from PyQt5.QtGui import * + +from PyQt5.QtWidgets import QAction, QMessageBox + + from qgis.core import * # Initialize Qt resources from file resources.py -import resources +from .resources import * # Import the code for the dialog -from generalizerdialog import generalizerDialog, getLayersNames +from .generalizerdialog import generalizerDialog, getLayersNames +import os.path + class generalizer: def __init__(self, iface): # Save reference to the QGIS interface self.iface = iface + + self.canvas = iface.mapCanvas() + + # initialize plugin directory + self.plugin_dir = os.path.dirname(__file__) + + # Declare instance attributes + self.actions = [] + self.menu = self.tr(u'&Generalizer') + # TODO: We are going to let the user set this up in a future iteration + self.toolbar = self.iface.addToolBar(u'Generalizer') + self.toolbar.setObjectName(u'Generalizer') + + #print "** INITIALIZING Generalizer" + + self.pluginIsActive = False + self.dockwidget = None + + self.output_layer = None + + # noinspection PyMethodMayBeStatic + def tr(self, message): + """Get the translation for a string using Qt translation API. + + We implement this ourselves since we do not inherit QObject. + + :param message: String for translation. + :type message: str, QString + + :returns: Translated version of message. + :rtype: QString + """ + # noinspection PyTypeChecker,PyArgumentList,PyCallByClass + return QCoreApplication.translate('Generalizer', message) + + def add_action( + self, + icon_path, + text, + callback, + enabled_flag=True, + add_to_menu=True, + add_to_toolbar=True, + status_tip=None, + whats_this=None, + parent=None): + """Add a toolbar icon to the toolbar. + + :param icon_path: 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 callback: Function to be called when the action is triggered. + :type callback: function + + :param enabled_flag: A flag indicating if the action should be enabled + by default. Defaults to True. + :type enabled_flag: bool + + :param add_to_menu: Flag indicating whether the action should also + be added to the menu. Defaults to True. + :type add_to_menu: bool + + :param add_to_toolbar: Flag indicating whether the action should also + be added to the toolbar. Defaults to True. + :type add_to_toolbar: bool + + :param status_tip: Optional text to show in a popup when mouse pointer + hovers over the action. + :type status_tip: str + + :param parent: Parent widget for the new action. Defaults None. + :type parent: QWidget + + :param whats_this: Optional text to show in the status bar when the + mouse pointer hovers over the action. + + :returns: The action that was created. Note that the action is also + added to self.actions list. + :rtype: QAction + """ + + icon = QIcon(icon_path) + text = "Generalizer" + action = QAction(icon, text, parent) + action.triggered.connect(callback) + action.setEnabled(enabled_flag) + + if status_tip is not None: + action.setStatusTip(status_tip) + + if whats_this is not None: + action.setWhatsThis(whats_this) + + if add_to_toolbar: + self.toolbar.addAction(action) + + if add_to_menu: + self.iface.addPluginToVectorMenu( + self.menu, + action) + + self.actions.append(action) + + return action + def initGui(self): - # Create action that will start plugin configuration - self.action = QAction(QIcon(":/plugins/generalizer/icon.png"), \ - "Generalizer", self.iface.mainWindow()) - # connect the action to the run method - self.action.triggered.connect( self.run ) + """Create the menu entries and toolbar icons inside the QGIS GUI.""" + + icon_path = ':/plugins/Generalizer3/icon.png' + self.add_action( + icon_path, + text=self.tr(u''), + callback=self.run, + parent=self.iface.mainWindow()) - # Add toolbar button and menu item - self.iface.addToolBarIcon(self.action) - self.iface.addPluginToMenu("&Generalizer", self.action) def unload(self): - # Remove the plugin menu item and icon - self.iface.removePluginMenu("&Generalizer",self.action) - self.iface.removeToolBarIcon(self.action) + """Removes the plugin menu item and icon from QGIS GUI.""" + + #print "** UNLOAD Generalizer" + + for action in self.actions: + self.iface.removePluginVectorMenu( + self.tr(u'&Generalizer'), + action) + self.iface.removeToolBarIcon(action) + # remove the toolbar + del self.toolbar # run method that performs all the real work def run(self): diff --git a/generalizerdialog.py b/generalizerdialog.py index c09aff0..b3ad45d 100644 --- a/generalizerdialog.py +++ b/generalizerdialog.py @@ -7,6 +7,8 @@ begin : 2011-08-17 copyright : (C) 2011 by Piotr Pociask email : ppociask (at) o2 pl + adapted to QGIS 3 : 2019-11-10 by Sylvain POULAIN + email : sylvain.poulain (at) giscan.com ***************************************************************************/ /*************************************************************************** @@ -18,17 +20,23 @@ * * ***************************************************************************/ """ +from __future__ import absolute_import -from PyQt4.QtCore import * -from PyQt4.QtGui import * +from builtins import str +from builtins import range +from PyQt5.QtCore import * +from PyQt5.QtGui import * + +from PyQt5.QtWidgets import QAction, QDialog, QMessageBox +from qgis.utils import Qgis from qgis.core import * from qgis.gui import * -import smooth, simplify, points -from dialogs import * +from . import smooth, simplify, points +from .dialogs import * -from ui_generalizer import Ui_generalizer +from .ui_generalizer import Ui_generalizer #global variable with short to full algorithm names algorithm = {'remove':'Remove small objects', @@ -45,6 +53,7 @@ 'RW':'Reumann-Witkam Algorithm' } +crs = QgsProject.instance().crs() class generalizerDialog(QDialog): def __init__(self, iface): @@ -318,16 +327,15 @@ def BatchOn(self, state): def showHelp(self): #show information about plugin QMessageBox.information(self, 'Generalizer', """Generalizer -Version 0.5 +Version 0.6 -Created by +Originally created by Piotr Pociask +Adapted to QGIS3 by +Sylvain POULAIN -This plugin is marked as experimental. -If you find any bugs or have suggestions, -please contact with me: -opengis84 (at) gmail (dot) com - +Documentation available : +https://github.com/giscan/Generalizer/wiki """) def outFile(self): @@ -470,8 +478,8 @@ def LoadLayers(self, fileList): else: out_name = filePath[(len(filePath) - filePath.rfind("/")) - 1:] - if out_name.endswith(".shp"): - out_name = out_name[:len(out_name) - 4] + if out_name.endswith(".gpkg"): + out_name = out_name[:len(out_name) - 5] self.iface.addVectorLayer(filePath, out_name, "ogr") @@ -484,10 +492,16 @@ def doGeneralize(self, iLayerName, iLayer, oPath, func, arguments): fields = iProvider.fields() if oPath == 'memory': #create memory layer - if iLayer.wkbType() == QGis.WKBLineString: - mLayer = QgsVectorLayer('LineString', iLayerName + '_memory', 'memory')#self.NameFromFunc(func, arguments), 'memory') + #if iLayer.wkbType() == QgsWkbTypes.LineString: + # mLayer = QgsVectorLayer('LineString', iLayerName + '_memory', 'memory')#self.NameFromFunc(func, arguments), 'memory') + #else: + # mLayer = QgsVectorLayer('MultiLineString', iLayerName + '_memory', 'memory')#self.NameFromFunc(func, arguments), 'memory') + if iLayer.wkbType() == QgsWkbTypes.LineString: + #mLayer = QgsVectorLayer('LineString?crs=' + crs.authid() + '&field=MYNYM:integer&field=MYTXT:string', iLayerName + '_memory', 'memory')#self.NameFromFunc(func, arguments), 'memory') + mLayer = QgsVectorLayer("LineString?crs=" + QgsProject.instance().crs().authid(), iLayerName + "_memory", "memory") else: - mLayer = QgsVectorLayer('MultiLineString', iLayerName + '_memory', 'memory')#self.NameFromFunc(func, arguments), 'memory') + #mLayer = QgsVectorLayer('MultiLineString?crs=' + crs.authid() + '&field=MYNYM:integer&field=MYTXT:string', iLayerName + '_memory', 'memory')#self.NameFromFunc(func, arguments), 'memory') + mLayer = QgsVectorLayer("MultiLineString?crs=" + QgsProject.instance().crs().authid(), iLayerName + "_memory", "memory") mProvider = mLayer.dataProvider() mProvider.addAttributes( [key for key in fields] ) @@ -501,13 +515,13 @@ def doGeneralize(self, iLayerName, iLayer, oPath, func, arguments): p = func(ls, **arguments) l2 = [] for n in range(p.n_points): - l2.append(QgsPoint(p.x[n], p.y[n])) + l2.append(QgsPointXY(p.x[n], p.y[n])) if len(l2) > 1: l.append(l2) if len(l) > 1: - fet.setGeometry(QgsGeometry.fromMultiPolyline(l)) + fet.setGeometry(QgsGeometry.fromMultiPolylineXY(l)) elif len(l) == 1: #jesli z obiektu wieloczesciowego zostaje tylko jedna linia (np. przy usuwaniu malych obiektow) - fet.setGeometry(QgsGeometry.fromPolyline(l[0])) + fet.setGeometry(QgsGeometry.fromPolylineXY(l[0])) else: ls = geom.asPolyline() p = func(ls, **arguments) @@ -525,7 +539,8 @@ def doGeneralize(self, iLayerName, iLayer, oPath, func, arguments): return mLayer else: #write shapefile on disk - writer = QgsVectorFileWriter(oPath, iProvider.encoding(), fields, QGis.WKBLineString, iLayer.crs()) + #writer = QgsVectorFileWriter(oPath, iProvider.encoding(), fields, QGis.WKBLineString, iLayer.crs()) + writer = QgsVectorFileWriter(oPath, iProvider.encoding(), fields, QgsWkbTypes.LineString, iLayer.crs()) if writer.hasError() != QgsVectorFileWriter.NoError: QMessageBox.critical(None, 'Generalizer', 'Error when creating shapefile: %s' % (writer.hasError())) @@ -545,7 +560,7 @@ def doGeneralize(self, iLayerName, iLayer, oPath, func, arguments): l.append(l2) if len(l) > 1: #QInputDialog.getText( self.iface.mainWindow(), "m", "e", QLineEdit.Normal, str(l) ) - fet.setGeometry(QgsGeometry.fromMultiPolyline(l)) + fet.setGeometry(QgsGeometry.fromMultiPolylineXY(l)) else: ls = geom.asPolyline() #QInputDialog.getText( self.iface.mainWindow(), "m", "e", QLineEdit.Normal, str(ls) ) @@ -585,16 +600,16 @@ def batchGeneralize(self, layers): #QInputDialog.getText( self.iface.mainWindow(), "m", "e", QLineEdit.Normal, str(i) ) path = self.ui.eDir.text() if path.contains("\\"): - out_name = path + '\\' + layer + '_new.shp' + out_name = path + '\\' + layer + '_new.gpkg' else: - out_name = path + '/' + layer + '_new.shp' + out_name = path + '/' + layer + '_new.gpkg' outNames.append(out_name) vLayer = self.doGeneralize(layer, vLayer, out_name, func, arguments) else: vLayer = self.doGeneralize(layer, vLayer, 'memory', func, arguments) if not self.ui.cbOutDir.isChecked(): - QgsMapLayerRegistry.instance().addMapLayer(vLayer) + QgsProject.instance().addMapLayer(vLayer) if self.ui.cbOutDir.isChecked(): self.LoadLayers(outNames) @@ -631,7 +646,7 @@ def generalize(self): self.LoadLayers([filePath]) else: mLayer = self.doGeneralize(self.ui.cbInput.currentText(), getMapLayerByName(self.ui.cbInput.currentText()), 'memory', func, arguments) - QgsMapLayerRegistry.instance().addMapLayer(mLayer) + QgsProject.instance().addMapLayer(mLayer) #self.close() #refresh layer list @@ -746,18 +761,18 @@ def reumann_witkam(self,l, **kwargs): def getLayersNames(): - layermap = QgsMapLayerRegistry.instance().mapLayers() + layermap = QgsProject.instance().mapLayers() layerlist = [] - for name, layer in layermap.iteritems(): + for name, layer in layermap.items(): if layer.type() == QgsMapLayer.VectorLayer: - if layer.geometryType() == QGis.Line: - layerlist.append( unicode( layer.name() ) ) + if layer.geometryType() == QgsWkbTypes.LineGeometry: + layerlist.append( str( layer.name() ) ) return layerlist def getMapLayerByName(myName): - layermap = QgsMapLayerRegistry.instance().mapLayers() - for name, layer in layermap.iteritems(): + layermap = QgsProject.instance().mapLayers() + for name, layer in layermap.items(): if layer.name() == myName: if layer.isValid(): return layer diff --git a/matrix.py b/matrix.py index d67f8c0..10f24e1 100644 --- a/matrix.py +++ b/matrix.py @@ -1,3 +1,4 @@ +from builtins import object class MATRIX(object): def __init__(self, rows, cols): self.rows = rows @@ -104,4 +105,4 @@ def matrix_mult(a, b): i = i+1 - return res \ No newline at end of file + return res diff --git a/metadata.txt b/metadata.txt index 0bfca62..8827fa8 100644 --- a/metadata.txt +++ b/metadata.txt @@ -1,32 +1,74 @@ -# This file contains metadata for your plugin. Beginning -# with version 1.8 this is the preferred way to supply information about a -# plugin. The current method of embedding metadata in __init__.py will -# be supported until version 2.0 - -# This file should be included when you package your plugin. - -# Mandatory items: - - [general] -name=Generalizer -qgisMinimumVersion=2.0 +name=Generalizer3 +email=sylvain.poulain@giscan.com +qgisMinimumVersion=3.0 description=Lines generalization and smoothing (partially based on v.generalize GRASS module) -version=0.5 -author=Piotr Pociask -email= +about=Plugin to Generalize, Simplify or Smooth lines in QGIS + Functions : + Remove small objects + Simplify : + Douglas-Peucker Algorithm + Jenk's Algorithm + Lang Algorithm + Reumann-Witkam Algorithm + Vertex Reduction + Smooth : + Boyle's Forward-Looking Algorithm + Chaiken's Algorithm + Hermite Spline Interpolation + McMaster's Distance-Weighting Algorithm + Distance Weighting + McMaster's Sliding Averaging Algorithm + Snakes Algorithm : Slowest smoothing algorithm +version=0.9 +author=Piotr Pociask, Matthew Petroff, Sylvain POULAIN + # end of mandatory metadata # Optional items: -homepage=https://github.com/p0cisk/Generalizer -tracker=https://github.com/p0cisk/Generalizer/issues -repository=https://github.com/p0cisk/Generalizer +homepage=https://github.com/giscan/Generalizer +tracker=https://github.com/giscan/Generalizer/issues +repository=https://github.com/giscan/Generalizer icon=icon.png +tags=line,vector,smooth,simplify # experimental flag -experimental=True +experimental=False # deprecated flag (applies to the whole plugin, not just a single version deprecated=False + +changelog= + 0.9 (09.11.2020) + - Move plugin to his self toolbar + 0.8 (23.05.2020) + - fix import resources + 0.7 (17.05.2020) + - fix save layer to file + - remove unattended column in temporary layer + 0.6 (10.11.2019) + - updated to QGIS 3.x + - fix projection according to project coordinates + - quick documentation + 0.5 (24.11.2013) + -updated to QGIS 2.0 API (thanks to Matthew Petroff) + -fix unicode error + 0.4 (27.10.2013) + -add setDecimal() method in batch mode. Added by Bakhtiar Hasmanan + 0.3 (15.09.2011) + -new algorithms: + smoothing: Snakes Algorithm + simplifying: Jenk's Algorithm, Reumann-Witkam Algorithm + 0.2 (11.09.2011) + -added batch mode + -choose to save layer(s) on disk or to store in memory + -new algorithms: + smoothing: Hermite Spline Interpolation + 0.1 (28.08.2011) + -first release + -supported algorithms: + generalization: Remove small objects + simplifying: Douglas-Peucker, Lang, Vertex Reduction + smoothing: Boyle's Forward-Looking, Chaiken's, McMaster's Distance-Weighting, McMaster's Sliding Averaging diff --git a/points.py b/points.py index 382b57f..566955c 100644 --- a/points.py +++ b/points.py @@ -1,4 +1,5 @@ -from PyQt4.QtGui import * +from builtins import object +from PyQt5.QtGui import * from math import sqrt, acos, pi, fabs class line_pnts(object): @@ -28,8 +29,8 @@ def add_points(self, pts): self.n_points = len(self.x) def repleace_point(self, index, p): - self.x[index] = p.x - self.y[index] = p.y + self.x[int(index)] = p.x + self.y[int(index)] = p.y def repleace_all_pts(self, pts): self.x = pts.x[:] @@ -73,8 +74,8 @@ def point_substract(a, b, res): res.y = a.y - b.y def point_assign(points, index, res): - res.x = points.x[index] - res.y = points.y[index] + res.x = points.x[int(index)] + res.y = points.y[int(index)] def point_dist(a, b): @@ -160,4 +161,4 @@ def compare_points(a, b): tmp = line_pnts(pts) pts.add_point(p2) -print tmp.n_points, pts.n_points""" \ No newline at end of file +print tmp.n_points, pts.n_points""" diff --git a/resources.py b/resources.py index a45ea74..2d7ba17 100644 --- a/resources.py +++ b/resources.py @@ -2,14 +2,13 @@ # Resource object code # -# Created: N 28. sie 10:51:26 2011 -# by: The Resource Compiler for PyQt (Qt v4.7.1) +# Created by: The Resource Compiler for PyQt5 (Qt v5.15.1) # # WARNING! All changes made in this file will be lost! -from PyQt4 import QtCore +from PyQt5 import QtCore -qt_resource_data = "\ +qt_resource_data = b"\ \x00\x00\x17\xc5\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -395,32 +394,51 @@ \xae\x42\x60\x82\ " -qt_resource_name = "\ +qt_resource_name = b"\ \x00\x07\ \x07\x3b\xe0\xb3\ \x00\x70\ \x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\ -\x00\x0b\ -\x08\xd8\x99\x42\ -\x00\x67\ -\x00\x65\x00\x6e\x00\x65\x00\x72\x00\x61\x00\x6c\x00\x69\x00\x7a\x00\x65\x00\x72\ +\x00\x0c\ +\x01\x89\x95\x73\ +\x00\x47\ +\x00\x65\x00\x6e\x00\x65\x00\x72\x00\x61\x00\x6c\x00\x69\x00\x7a\x00\x65\x00\x72\x00\x33\ \x00\x08\ \x0a\x61\x5a\xa7\ \x00\x69\ \x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ " -qt_resource_struct = "\ +qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ \x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ -\x00\x00\x00\x30\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ " +qt_resource_struct_v2 = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x14\x00\x02\x00\x00\x00\x01\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x32\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x73\x87\x86\xe3\x8a\ +" + +qt_version = [int(v) for v in QtCore.qVersion().split('.')] +if qt_version < [5, 8, 0]: + rcc_version = 1 + qt_resource_struct = qt_resource_struct_v1 +else: + rcc_version = 2 + qt_resource_struct = qt_resource_struct_v2 + def qInitResources(): - QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) def qCleanupResources(): - QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) qInitResources() diff --git a/resources.qrc b/resources.qrc index dd94b82..adf8cb0 100644 --- a/resources.qrc +++ b/resources.qrc @@ -1,5 +1,5 @@ - + icon.png diff --git a/simplify.py b/simplify.py index 787b5a6..72a4a88 100644 --- a/simplify.py +++ b/simplify.py @@ -1,5 +1,7 @@ -from PyQt4.QtGui import * -from points import * +from __future__ import absolute_import +from builtins import range +from PyQt5.QtGui import * +from .points import * import math @@ -270,4 +272,4 @@ def reumann_witkam(points, thresh): print l print 'X,Y' for i in range(len(p.x)): - print p.x[i], ',', p.y[i]""" \ No newline at end of file + print p.x[i], ',', p.y[i]""" diff --git a/smooth.py b/smooth.py index c6640b9..ca8b7e2 100644 --- a/smooth.py +++ b/smooth.py @@ -1,6 +1,9 @@ -from PyQt4.QtGui import * -from points import * -from matrix import * +from __future__ import print_function +from __future__ import absolute_import +from builtins import range +from qgis.PyQt.QtWidgets import * +from .points import * +from .matrix import * GRASS_EPSILON = 1.0e-15 @@ -77,7 +80,7 @@ def sliding_averaging(points, slide, look_ahead): point_assign(points, i, s) point_scalar(s, 1. - slide, s) point_scalar(p, sc*slide, tmp) - points_add(tmp, s, res[i]) + points_add(tmp, s, res[int(i)]) if i+half+1 < n: point_assign(points, i-half, tmp) point_substract(p, tmp, p) @@ -87,7 +90,7 @@ def sliding_averaging(points, slide, look_ahead): i = half while i+half < n: - points.repleace_point(i, res[i]) + points.repleace_point(i, res[int(i)]) i = i + 1 @@ -153,12 +156,12 @@ def distance_weighting(points, slide, look_ahead): else: point_scalar(s, slide/dists, tmp) point_scalar(c, 1.-slide, s) - points_add(s, tmp, res[i]) + points_add(s, tmp, res[int(i)]) i = i + 1 i = half while i+half < n: - points.repleace_point(i, res[i]) + points.repleace_point(i, res[int(i)]) i = i + 1 @@ -386,14 +389,19 @@ def snakes(points, alpha, beta): g.a[i][i]= g.a[i][i] + 1. i = i+1 - print 2 + # fix_print_with_import + print(2) ginv = matrix_inverse(g) - print 3 + # fix_print_with_import + # fix_print_with_import + print(3) xout = matrix_mult(ginv, xcoord) yout = matrix_mult(ginv, ycoord) - print 4 + # fix_print_with_import + # fix_print_with_import + print(4) i = 1 while i < n-1: @@ -412,4 +420,4 @@ def snakes(points, alpha, beta): print l print 'X;Y' for i in range(len(p.x)): - print p.x[i], ';', p.y[i]""" \ No newline at end of file + print p.x[i], ';', p.y[i]""" diff --git a/ui_generalizer.py b/ui_generalizer.py index ee4aa1f..b88c781 100644 --- a/ui_generalizer.py +++ b/ui_generalizer.py @@ -1,25 +1,26 @@ # -*- coding: utf-8 -*- -# Form implementation generated from reading ui file 'C:\Documents and Settings\Pocisk\.qgis\python\plugins\generalizer\ui_generalizer.ui' +# Form implementation generated from reading ui file 'ui_generalizer.ui' # -# Created: Tue Sep 13 17:03:23 2011 -# by: PyQt4 UI code generator 4.8.3 +# Created by: PyQt5 UI code generator 5.13.1 # # WARNING! All changes made in this file will be lost! -from PyQt4 import QtCore, QtGui + +from PyQt5 import QtCore, QtGui, QtWidgets + class Ui_generalizer(object): def setupUi(self, generalizer): generalizer.setObjectName("generalizer") generalizer.resize(493, 348) - self.gridLayout_20 = QtGui.QGridLayout(generalizer) + self.gridLayout_20 = QtWidgets.QGridLayout(generalizer) self.gridLayout_20.setObjectName("gridLayout_20") - self.cbBatch = QtGui.QCheckBox(generalizer) + self.cbBatch = QtWidgets.QCheckBox(generalizer) self.cbBatch.setObjectName("cbBatch") self.gridLayout_20.addWidget(self.cbBatch, 0, 0, 1, 1) - self.bHelp = QtGui.QPushButton(generalizer) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) + self.bHelp = QtWidgets.QPushButton(generalizer) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bHelp.sizePolicy().hasHeightForWidth()) @@ -27,38 +28,38 @@ def setupUi(self, generalizer): self.bHelp.setFlat(True) self.bHelp.setObjectName("bHelp") self.gridLayout_20.addWidget(self.bHelp, 0, 2, 1, 1) - self.bOk = QtGui.QPushButton(generalizer) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Fixed) + self.bOk = QtWidgets.QPushButton(generalizer) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.bOk.sizePolicy().hasHeightForWidth()) self.bOk.setSizePolicy(sizePolicy) self.bOk.setObjectName("bOk") self.gridLayout_20.addWidget(self.bOk, 2, 1, 1, 1) - self.bCancel = QtGui.QPushButton(generalizer) + self.bCancel = QtWidgets.QPushButton(generalizer) self.bCancel.setObjectName("bCancel") self.gridLayout_20.addWidget(self.bCancel, 2, 2, 1, 1) - self.stackBatch = QtGui.QStackedWidget(generalizer) + self.stackBatch = QtWidgets.QStackedWidget(generalizer) self.stackBatch.setObjectName("stackBatch") - self.page_6 = QtGui.QWidget() + self.page_6 = QtWidgets.QWidget() self.page_6.setObjectName("page_6") - self.gridLayout_19 = QtGui.QGridLayout(self.page_6) + self.gridLayout_19 = QtWidgets.QGridLayout(self.page_6) self.gridLayout_19.setObjectName("gridLayout_19") - self.label = QtGui.QLabel(self.page_6) + self.label = QtWidgets.QLabel(self.page_6) self.label.setObjectName("label") self.gridLayout_19.addWidget(self.label, 0, 0, 1, 1) - self.cbInput = QtGui.QComboBox(self.page_6) + self.cbInput = QtWidgets.QComboBox(self.page_6) self.cbInput.setObjectName("cbInput") self.gridLayout_19.addWidget(self.cbInput, 1, 0, 1, 2) - self.groupBox = QtGui.QGroupBox(self.page_6) + self.groupBox = QtWidgets.QGroupBox(self.page_6) self.groupBox.setObjectName("groupBox") - self.gridLayout_2 = QtGui.QGridLayout(self.groupBox) + self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox) self.gridLayout_2.setObjectName("gridLayout_2") - self.label_3 = QtGui.QLabel(self.groupBox) + self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setObjectName("label_3") self.gridLayout_2.addWidget(self.label_3, 0, 0, 1, 1) - self.cbAlgorithm = QtGui.QComboBox(self.groupBox) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Fixed) + self.cbAlgorithm = QtWidgets.QComboBox(self.groupBox) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.cbAlgorithm.sizePolicy().hasHeightForWidth()) @@ -80,16 +81,16 @@ def setupUi(self, generalizer): self.cbAlgorithm.addItem("") self.cbAlgorithm.addItem("") self.gridLayout_2.addWidget(self.cbAlgorithm, 0, 1, 1, 1) - self.stackOptions = QtGui.QStackedWidget(self.groupBox) + self.stackOptions = QtWidgets.QStackedWidget(self.groupBox) self.stackOptions.setObjectName("stackOptions") - self.page_11 = QtGui.QWidget() + self.page_11 = QtWidgets.QWidget() self.page_11.setObjectName("page_11") - self.gridLayout_11 = QtGui.QGridLayout(self.page_11) + self.gridLayout_11 = QtWidgets.QGridLayout(self.page_11) self.gridLayout_11.setObjectName("gridLayout_11") - self.label_12 = QtGui.QLabel(self.page_11) + self.label_12 = QtWidgets.QLabel(self.page_11) self.label_12.setObjectName("label_12") self.gridLayout_11.addWidget(self.label_12, 0, 0, 1, 1) - self.sbRemove_thresh = QtGui.QDoubleSpinBox(self.page_11) + self.sbRemove_thresh = QtWidgets.QDoubleSpinBox(self.page_11) self.sbRemove_thresh.setDecimals(4) self.sbRemove_thresh.setMinimum(0.0001) self.sbRemove_thresh.setMaximum(9999999.9999) @@ -97,14 +98,14 @@ def setupUi(self, generalizer): self.sbRemove_thresh.setObjectName("sbRemove_thresh") self.gridLayout_11.addWidget(self.sbRemove_thresh, 0, 1, 1, 1) self.stackOptions.addWidget(self.page_11) - self.page_12 = QtGui.QWidget() + self.page_12 = QtWidgets.QWidget() self.page_12.setObjectName("page_12") - self.gridLayout_12 = QtGui.QGridLayout(self.page_12) + self.gridLayout_12 = QtWidgets.QGridLayout(self.page_12) self.gridLayout_12.setObjectName("gridLayout_12") - self.label_18 = QtGui.QLabel(self.page_12) + self.label_18 = QtWidgets.QLabel(self.page_12) self.label_18.setObjectName("label_18") self.gridLayout_12.addWidget(self.label_18, 0, 0, 1, 1) - self.sbDP_thresh = QtGui.QDoubleSpinBox(self.page_12) + self.sbDP_thresh = QtWidgets.QDoubleSpinBox(self.page_12) self.sbDP_thresh.setDecimals(4) self.sbDP_thresh.setMinimum(0.0001) self.sbDP_thresh.setMaximum(9999999.9999) @@ -112,152 +113,152 @@ def setupUi(self, generalizer): self.sbDP_thresh.setObjectName("sbDP_thresh") self.gridLayout_12.addWidget(self.sbDP_thresh, 0, 1, 1, 1) self.stackOptions.addWidget(self.page_12) - self.page_2 = QtGui.QWidget() + self.page_2 = QtWidgets.QWidget() self.page_2.setObjectName("page_2") - self.gridLayout_4 = QtGui.QGridLayout(self.page_2) + self.gridLayout_4 = QtWidgets.QGridLayout(self.page_2) self.gridLayout_4.setObjectName("gridLayout_4") - self.label_7 = QtGui.QLabel(self.page_2) + self.label_7 = QtWidgets.QLabel(self.page_2) self.label_7.setObjectName("label_7") self.gridLayout_4.addWidget(self.label_7, 0, 0, 1, 1) - self.sbJenks_thresh = QtGui.QDoubleSpinBox(self.page_2) + self.sbJenks_thresh = QtWidgets.QDoubleSpinBox(self.page_2) self.sbJenks_thresh.setDecimals(4) self.sbJenks_thresh.setMaximum(9999999.9999) self.sbJenks_thresh.setProperty("value", 0.0001) self.sbJenks_thresh.setObjectName("sbJenks_thresh") self.gridLayout_4.addWidget(self.sbJenks_thresh, 0, 1, 1, 1) - self.label_8 = QtGui.QLabel(self.page_2) + self.label_8 = QtWidgets.QLabel(self.page_2) self.label_8.setObjectName("label_8") self.gridLayout_4.addWidget(self.label_8, 1, 0, 1, 1) - self.sbJenks_angle = QtGui.QDoubleSpinBox(self.page_2) + self.sbJenks_angle = QtWidgets.QDoubleSpinBox(self.page_2) self.sbJenks_angle.setMaximum(180.0) self.sbJenks_angle.setProperty("value", 3.0) self.sbJenks_angle.setObjectName("sbJenks_angle") self.gridLayout_4.addWidget(self.sbJenks_angle, 1, 1, 1, 1) self.stackOptions.addWidget(self.page_2) - self.page_13 = QtGui.QWidget() + self.page_13 = QtWidgets.QWidget() self.page_13.setObjectName("page_13") - self.gridLayout_3 = QtGui.QGridLayout(self.page_13) + self.gridLayout_3 = QtWidgets.QGridLayout(self.page_13) self.gridLayout_3.setObjectName("gridLayout_3") - self.label_13 = QtGui.QLabel(self.page_13) + self.label_13 = QtWidgets.QLabel(self.page_13) self.label_13.setObjectName("label_13") self.gridLayout_3.addWidget(self.label_13, 0, 0, 1, 1) - self.sbLang_thresh = QtGui.QDoubleSpinBox(self.page_13) + self.sbLang_thresh = QtWidgets.QDoubleSpinBox(self.page_13) self.sbLang_thresh.setDecimals(4) self.sbLang_thresh.setMinimum(0.0001) self.sbLang_thresh.setMaximum(9999999.9999) self.sbLang_thresh.setProperty("value", 0.0001) self.sbLang_thresh.setObjectName("sbLang_thresh") self.gridLayout_3.addWidget(self.sbLang_thresh, 0, 1, 1, 1) - self.label_19 = QtGui.QLabel(self.page_13) + self.label_19 = QtWidgets.QLabel(self.page_13) self.label_19.setObjectName("label_19") self.gridLayout_3.addWidget(self.label_19, 1, 0, 1, 1) - self.sbLang_LA = QtGui.QSpinBox(self.page_13) + self.sbLang_LA = QtWidgets.QSpinBox(self.page_13) self.sbLang_LA.setMinimum(1) self.sbLang_LA.setMaximum(9999) self.sbLang_LA.setProperty("value", 8) self.sbLang_LA.setObjectName("sbLang_LA") self.gridLayout_3.addWidget(self.sbLang_LA, 1, 1, 1, 1) self.stackOptions.addWidget(self.page_13) - self.page_4 = QtGui.QWidget() + self.page_4 = QtWidgets.QWidget() self.page_4.setObjectName("page_4") - self.gridLayout_6 = QtGui.QGridLayout(self.page_4) + self.gridLayout_6 = QtWidgets.QGridLayout(self.page_4) self.gridLayout_6.setObjectName("gridLayout_6") - self.label_11 = QtGui.QLabel(self.page_4) + self.label_11 = QtWidgets.QLabel(self.page_4) self.label_11.setObjectName("label_11") self.gridLayout_6.addWidget(self.label_11, 0, 0, 1, 1) - self.sbRW_thresh = QtGui.QDoubleSpinBox(self.page_4) + self.sbRW_thresh = QtWidgets.QDoubleSpinBox(self.page_4) self.sbRW_thresh.setDecimals(4) self.sbRW_thresh.setMaximum(9999999.9999) self.sbRW_thresh.setProperty("value", 0.0001) self.sbRW_thresh.setObjectName("sbRW_thresh") self.gridLayout_6.addWidget(self.sbRW_thresh, 0, 1, 1, 1) self.stackOptions.addWidget(self.page_4) - self.page_14 = QtGui.QWidget() + self.page_14 = QtWidgets.QWidget() self.page_14.setObjectName("page_14") - self.gridLayout_14 = QtGui.QGridLayout(self.page_14) + self.gridLayout_14 = QtWidgets.QGridLayout(self.page_14) self.gridLayout_14.setObjectName("gridLayout_14") - self.label_20 = QtGui.QLabel(self.page_14) + self.label_20 = QtWidgets.QLabel(self.page_14) self.label_20.setObjectName("label_20") self.gridLayout_14.addWidget(self.label_20, 0, 0, 1, 1) - self.sbReduction_thresh = QtGui.QDoubleSpinBox(self.page_14) + self.sbReduction_thresh = QtWidgets.QDoubleSpinBox(self.page_14) self.sbReduction_thresh.setDecimals(4) self.sbReduction_thresh.setMinimum(0.0001) self.sbReduction_thresh.setMaximum(9999999.9999) self.sbReduction_thresh.setObjectName("sbReduction_thresh") self.gridLayout_14.addWidget(self.sbReduction_thresh, 0, 1, 1, 1) self.stackOptions.addWidget(self.page_14) - self.page_15 = QtGui.QWidget() + self.page_15 = QtWidgets.QWidget() self.page_15.setObjectName("page_15") - self.gridLayout_15 = QtGui.QGridLayout(self.page_15) + self.gridLayout_15 = QtWidgets.QGridLayout(self.page_15) self.gridLayout_15.setObjectName("gridLayout_15") - self.label_21 = QtGui.QLabel(self.page_15) + self.label_21 = QtWidgets.QLabel(self.page_15) self.label_21.setObjectName("label_21") self.gridLayout_15.addWidget(self.label_21, 0, 0, 1, 1) - self.sbBoyle_LA = QtGui.QSpinBox(self.page_15) + self.sbBoyle_LA = QtWidgets.QSpinBox(self.page_15) self.sbBoyle_LA.setMinimum(2) self.sbBoyle_LA.setMaximum(999) self.sbBoyle_LA.setProperty("value", 7) self.sbBoyle_LA.setObjectName("sbBoyle_LA") self.gridLayout_15.addWidget(self.sbBoyle_LA, 0, 1, 1, 1) self.stackOptions.addWidget(self.page_15) - self.page_16 = QtGui.QWidget() + self.page_16 = QtWidgets.QWidget() self.page_16.setObjectName("page_16") - self.gridLayout_16 = QtGui.QGridLayout(self.page_16) + self.gridLayout_16 = QtWidgets.QGridLayout(self.page_16) self.gridLayout_16.setObjectName("gridLayout_16") - self.label_22 = QtGui.QLabel(self.page_16) + self.label_22 = QtWidgets.QLabel(self.page_16) self.label_22.setObjectName("label_22") self.gridLayout_16.addWidget(self.label_22, 0, 0, 1, 1) - self.sbChaiken_level = QtGui.QSpinBox(self.page_16) + self.sbChaiken_level = QtWidgets.QSpinBox(self.page_16) self.sbChaiken_level.setMinimum(1) self.sbChaiken_level.setMaximum(99) self.sbChaiken_level.setObjectName("sbChaiken_level") self.gridLayout_16.addWidget(self.sbChaiken_level, 0, 1, 1, 1) - self.label_23 = QtGui.QLabel(self.page_16) + self.label_23 = QtWidgets.QLabel(self.page_16) self.label_23.setObjectName("label_23") self.gridLayout_16.addWidget(self.label_23, 1, 0, 1, 1) - self.sbChaiken_weight = QtGui.QDoubleSpinBox(self.page_16) + self.sbChaiken_weight = QtWidgets.QDoubleSpinBox(self.page_16) self.sbChaiken_weight.setMinimum(1.0) self.sbChaiken_weight.setProperty("value", 3.0) self.sbChaiken_weight.setObjectName("sbChaiken_weight") self.gridLayout_16.addWidget(self.sbChaiken_weight, 1, 1, 1, 1) self.stackOptions.addWidget(self.page_16) - self.page = QtGui.QWidget() + self.page = QtWidgets.QWidget() self.page.setObjectName("page") - self.gridLayout = QtGui.QGridLayout(self.page) + self.gridLayout = QtWidgets.QGridLayout(self.page) self.gridLayout.setObjectName("gridLayout") - self.label_2 = QtGui.QLabel(self.page) + self.label_2 = QtWidgets.QLabel(self.page) self.label_2.setObjectName("label_2") self.gridLayout.addWidget(self.label_2, 0, 0, 1, 1) - self.label_4 = QtGui.QLabel(self.page) + self.label_4 = QtWidgets.QLabel(self.page) self.label_4.setObjectName("label_4") self.gridLayout.addWidget(self.label_4, 1, 0, 1, 1) - self.sbHermite_tightness = QtGui.QDoubleSpinBox(self.page) + self.sbHermite_tightness = QtWidgets.QDoubleSpinBox(self.page) self.sbHermite_tightness.setProperty("value", 0.5) self.sbHermite_tightness.setObjectName("sbHermite_tightness") self.gridLayout.addWidget(self.sbHermite_tightness, 1, 1, 1, 1) - self.sbHermite_steps = QtGui.QDoubleSpinBox(self.page) + self.sbHermite_steps = QtWidgets.QDoubleSpinBox(self.page) self.sbHermite_steps.setDecimals(4) self.sbHermite_steps.setMaximum(9999999.9999) self.sbHermite_steps.setProperty("value", 0.0001) self.sbHermite_steps.setObjectName("sbHermite_steps") self.gridLayout.addWidget(self.sbHermite_steps, 0, 1, 1, 1) self.stackOptions.addWidget(self.page) - self.page_17 = QtGui.QWidget() + self.page_17 = QtWidgets.QWidget() self.page_17.setObjectName("page_17") - self.gridLayout_17 = QtGui.QGridLayout(self.page_17) + self.gridLayout_17 = QtWidgets.QGridLayout(self.page_17) self.gridLayout_17.setObjectName("gridLayout_17") - self.label_24 = QtGui.QLabel(self.page_17) + self.label_24 = QtWidgets.QLabel(self.page_17) self.label_24.setObjectName("label_24") self.gridLayout_17.addWidget(self.label_24, 0, 0, 1, 1) - self.sbDist_slide = QtGui.QDoubleSpinBox(self.page_17) + self.sbDist_slide = QtWidgets.QDoubleSpinBox(self.page_17) self.sbDist_slide.setSingleStep(0.1) self.sbDist_slide.setProperty("value", 0.5) self.sbDist_slide.setObjectName("sbDist_slide") self.gridLayout_17.addWidget(self.sbDist_slide, 0, 1, 1, 1) - self.label_25 = QtGui.QLabel(self.page_17) + self.label_25 = QtWidgets.QLabel(self.page_17) self.label_25.setObjectName("label_25") self.gridLayout_17.addWidget(self.label_25, 1, 0, 1, 1) - self.sbDist_LA = QtGui.QSpinBox(self.page_17) + self.sbDist_LA = QtWidgets.QSpinBox(self.page_17) self.sbDist_LA.setMinimum(3) self.sbDist_LA.setMaximum(999) self.sbDist_LA.setSingleStep(2) @@ -265,22 +266,22 @@ def setupUi(self, generalizer): self.sbDist_LA.setObjectName("sbDist_LA") self.gridLayout_17.addWidget(self.sbDist_LA, 1, 1, 1, 1) self.stackOptions.addWidget(self.page_17) - self.page_18 = QtGui.QWidget() + self.page_18 = QtWidgets.QWidget() self.page_18.setObjectName("page_18") - self.gridLayout_18 = QtGui.QGridLayout(self.page_18) + self.gridLayout_18 = QtWidgets.QGridLayout(self.page_18) self.gridLayout_18.setObjectName("gridLayout_18") - self.label_26 = QtGui.QLabel(self.page_18) + self.label_26 = QtWidgets.QLabel(self.page_18) self.label_26.setObjectName("label_26") self.gridLayout_18.addWidget(self.label_26, 0, 0, 1, 1) - self.sbSlide_slide = QtGui.QDoubleSpinBox(self.page_18) + self.sbSlide_slide = QtWidgets.QDoubleSpinBox(self.page_18) self.sbSlide_slide.setSingleStep(0.1) self.sbSlide_slide.setProperty("value", 0.5) self.sbSlide_slide.setObjectName("sbSlide_slide") self.gridLayout_18.addWidget(self.sbSlide_slide, 0, 1, 1, 1) - self.label_27 = QtGui.QLabel(self.page_18) + self.label_27 = QtWidgets.QLabel(self.page_18) self.label_27.setObjectName("label_27") self.gridLayout_18.addWidget(self.label_27, 1, 0, 1, 1) - self.sbSlide_LA = QtGui.QSpinBox(self.page_18) + self.sbSlide_LA = QtWidgets.QSpinBox(self.page_18) self.sbSlide_LA.setMinimum(3) self.sbSlide_LA.setMaximum(999) self.sbSlide_LA.setSingleStep(2) @@ -288,22 +289,22 @@ def setupUi(self, generalizer): self.sbSlide_LA.setObjectName("sbSlide_LA") self.gridLayout_18.addWidget(self.sbSlide_LA, 1, 1, 1, 1) self.stackOptions.addWidget(self.page_18) - self.page_3 = QtGui.QWidget() + self.page_3 = QtWidgets.QWidget() self.page_3.setObjectName("page_3") - self.gridLayout_5 = QtGui.QGridLayout(self.page_3) + self.gridLayout_5 = QtWidgets.QGridLayout(self.page_3) self.gridLayout_5.setObjectName("gridLayout_5") - self.label_9 = QtGui.QLabel(self.page_3) + self.label_9 = QtWidgets.QLabel(self.page_3) self.label_9.setObjectName("label_9") self.gridLayout_5.addWidget(self.label_9, 0, 0, 1, 1) - self.sbSnakes_alpha = QtGui.QDoubleSpinBox(self.page_3) + self.sbSnakes_alpha = QtWidgets.QDoubleSpinBox(self.page_3) self.sbSnakes_alpha.setMaximum(9999.99) self.sbSnakes_alpha.setProperty("value", 1.0) self.sbSnakes_alpha.setObjectName("sbSnakes_alpha") self.gridLayout_5.addWidget(self.sbSnakes_alpha, 0, 1, 1, 1) - self.label_10 = QtGui.QLabel(self.page_3) + self.label_10 = QtWidgets.QLabel(self.page_3) self.label_10.setObjectName("label_10") self.gridLayout_5.addWidget(self.label_10, 1, 0, 1, 1) - self.sbSnakes_beta = QtGui.QDoubleSpinBox(self.page_3) + self.sbSnakes_beta = QtWidgets.QDoubleSpinBox(self.page_3) self.sbSnakes_beta.setMaximum(9999.99) self.sbSnakes_beta.setProperty("value", 0.5) self.sbSnakes_beta.setObjectName("sbSnakes_beta") @@ -311,32 +312,32 @@ def setupUi(self, generalizer): self.stackOptions.addWidget(self.page_3) self.gridLayout_2.addWidget(self.stackOptions, 1, 0, 1, 2) self.gridLayout_19.addWidget(self.groupBox, 2, 0, 1, 2) - self.eOutput = QtGui.QLineEdit(self.page_6) + self.eOutput = QtWidgets.QLineEdit(self.page_6) self.eOutput.setEnabled(False) self.eOutput.setObjectName("eOutput") self.gridLayout_19.addWidget(self.eOutput, 4, 0, 1, 1) - self.bBrowse = QtGui.QPushButton(self.page_6) + self.bBrowse = QtWidgets.QPushButton(self.page_6) self.bBrowse.setEnabled(False) self.bBrowse.setObjectName("bBrowse") self.gridLayout_19.addWidget(self.bBrowse, 4, 1, 1, 1) - self.cbOutFile = QtGui.QCheckBox(self.page_6) + self.cbOutFile = QtWidgets.QCheckBox(self.page_6) self.cbOutFile.setObjectName("cbOutFile") self.gridLayout_19.addWidget(self.cbOutFile, 3, 0, 1, 1) self.stackBatch.addWidget(self.page_6) - self.page_10 = QtGui.QWidget() + self.page_10 = QtWidgets.QWidget() self.page_10.setObjectName("page_10") - self.gridLayout_21 = QtGui.QGridLayout(self.page_10) + self.gridLayout_21 = QtWidgets.QGridLayout(self.page_10) self.gridLayout_21.setObjectName("gridLayout_21") - self.lstLayers = QtGui.QListWidget(self.page_10) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + self.lstLayers = QtWidgets.QListWidget(self.page_10) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.lstLayers.sizePolicy().hasHeightForWidth()) self.lstLayers.setSizePolicy(sizePolicy) self.lstLayers.setObjectName("lstLayers") self.gridLayout_21.addWidget(self.lstLayers, 1, 0, 1, 1) - self.tblBatchAlg = QtGui.QTableWidget(self.page_10) - sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding) + self.tblBatchAlg = QtWidgets.QTableWidget(self.page_10) + sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(self.tblBatchAlg.sizePolicy().hasHeightForWidth()) @@ -344,37 +345,37 @@ def setupUi(self, generalizer): self.tblBatchAlg.setObjectName("tblBatchAlg") self.tblBatchAlg.setColumnCount(3) self.tblBatchAlg.setRowCount(0) - item = QtGui.QTableWidgetItem() + item = QtWidgets.QTableWidgetItem() self.tblBatchAlg.setHorizontalHeaderItem(0, item) - item = QtGui.QTableWidgetItem() + item = QtWidgets.QTableWidgetItem() self.tblBatchAlg.setHorizontalHeaderItem(1, item) - item = QtGui.QTableWidgetItem() + item = QtWidgets.QTableWidgetItem() self.tblBatchAlg.setHorizontalHeaderItem(2, item) self.gridLayout_21.addWidget(self.tblBatchAlg, 3, 0, 3, 1) - self.bAddAlg = QtGui.QPushButton(self.page_10) + self.bAddAlg = QtWidgets.QPushButton(self.page_10) self.bAddAlg.setObjectName("bAddAlg") self.gridLayout_21.addWidget(self.bAddAlg, 3, 1, 1, 1) - self.bDelAlg = QtGui.QPushButton(self.page_10) + self.bDelAlg = QtWidgets.QPushButton(self.page_10) self.bDelAlg.setObjectName("bDelAlg") self.gridLayout_21.addWidget(self.bDelAlg, 4, 1, 1, 1) - self.bEditAlg = QtGui.QPushButton(self.page_10) + self.bEditAlg = QtWidgets.QPushButton(self.page_10) self.bEditAlg.setObjectName("bEditAlg") self.gridLayout_21.addWidget(self.bEditAlg, 5, 1, 1, 1) - self.eDir = QtGui.QLineEdit(self.page_10) + self.eDir = QtWidgets.QLineEdit(self.page_10) self.eDir.setEnabled(False) self.eDir.setObjectName("eDir") self.gridLayout_21.addWidget(self.eDir, 7, 0, 1, 1) - self.bBrowseDir = QtGui.QPushButton(self.page_10) + self.bBrowseDir = QtWidgets.QPushButton(self.page_10) self.bBrowseDir.setEnabled(False) self.bBrowseDir.setObjectName("bBrowseDir") self.gridLayout_21.addWidget(self.bBrowseDir, 7, 1, 1, 1) - self.cbOutDir = QtGui.QCheckBox(self.page_10) + self.cbOutDir = QtWidgets.QCheckBox(self.page_10) self.cbOutDir.setObjectName("cbOutDir") self.gridLayout_21.addWidget(self.cbOutDir, 6, 0, 1, 1) - self.label_5 = QtGui.QLabel(self.page_10) + self.label_5 = QtWidgets.QLabel(self.page_10) self.label_5.setObjectName("label_5") self.gridLayout_21.addWidget(self.label_5, 2, 0, 1, 1) - self.label_6 = QtGui.QLabel(self.page_10) + self.label_6 = QtWidgets.QLabel(self.page_10) self.label_6.setObjectName("label_6") self.gridLayout_21.addWidget(self.label_6, 0, 0, 1, 1) self.stackBatch.addWidget(self.page_10) @@ -386,7 +387,7 @@ def setupUi(self, generalizer): self.stackBatch.setCurrentIndex(0) self.cbAlgorithm.setCurrentIndex(1) self.stackOptions.setCurrentIndex(0) - self.bCancel.clicked.connect( generalizer.close ) + self.bCancel.clicked.connect(generalizer.close) QtCore.QMetaObject.connectSlotsByName(generalizer) generalizer.setTabOrder(self.cbBatch, self.cbInput) generalizer.setTabOrder(self.cbInput, self.cbAlgorithm) @@ -420,58 +421,61 @@ def setupUi(self, generalizer): generalizer.setTabOrder(self.bBrowseDir, self.cbOutDir) def retranslateUi(self, generalizer): - generalizer.setWindowTitle(QtGui.QApplication.translate("generalizer", "Generalizer", None, QtGui.QApplication.UnicodeUTF8)) - self.cbBatch.setText(QtGui.QApplication.translate("generalizer", "Batch mode", None, QtGui.QApplication.UnicodeUTF8)) - self.bHelp.setText(QtGui.QApplication.translate("generalizer", "?", None, QtGui.QApplication.UnicodeUTF8)) - self.bOk.setText(QtGui.QApplication.translate("generalizer", "OK", None, QtGui.QApplication.UnicodeUTF8)) - self.bCancel.setText(QtGui.QApplication.translate("generalizer", "Close", None, QtGui.QApplication.UnicodeUTF8)) - self.label.setText(QtGui.QApplication.translate("generalizer", "Input line layer:", None, QtGui.QApplication.UnicodeUTF8)) - self.groupBox.setTitle(QtGui.QApplication.translate("generalizer", "Options", None, QtGui.QApplication.UnicodeUTF8)) - self.label_3.setText(QtGui.QApplication.translate("generalizer", "Alghoritm:", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(0, QtGui.QApplication.translate("generalizer", "-----Generalizing-----", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(1, QtGui.QApplication.translate("generalizer", "Remove small objects", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(2, QtGui.QApplication.translate("generalizer", "-----Simplifying-----", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(3, QtGui.QApplication.translate("generalizer", "Douglas-Peucker Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(4, QtGui.QApplication.translate("generalizer", "Jenk\'s Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(5, QtGui.QApplication.translate("generalizer", "Lang Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(6, QtGui.QApplication.translate("generalizer", "Reumann-Witkam Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(7, QtGui.QApplication.translate("generalizer", "Vertex Reduction", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(8, QtGui.QApplication.translate("generalizer", "-----Smoothing-----", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(9, QtGui.QApplication.translate("generalizer", "Boyle\'s Forward-Looking Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(10, QtGui.QApplication.translate("generalizer", "Chaiken\'s Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(11, QtGui.QApplication.translate("generalizer", "Hermite Spline Interpolation", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(12, QtGui.QApplication.translate("generalizer", "McMaster\'s Distance-Weighting Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(13, QtGui.QApplication.translate("generalizer", "McMaster\'s Sliding Averaging Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.cbAlgorithm.setItemText(14, QtGui.QApplication.translate("generalizer", "Snakes Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.label_12.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_18.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_7.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_8.setText(QtGui.QApplication.translate("generalizer", "Angle threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_13.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_19.setText(QtGui.QApplication.translate("generalizer", "Looka ahead:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_11.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_20.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_21.setText(QtGui.QApplication.translate("generalizer", "Look ahead:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_22.setText(QtGui.QApplication.translate("generalizer", "Level:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_23.setText(QtGui.QApplication.translate("generalizer", "Weight:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_2.setText(QtGui.QApplication.translate("generalizer", "Threshold:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_4.setText(QtGui.QApplication.translate("generalizer", "Thightness:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_24.setText(QtGui.QApplication.translate("generalizer", "Slide:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_25.setText(QtGui.QApplication.translate("generalizer", "Look ahead:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_26.setText(QtGui.QApplication.translate("generalizer", "Slide:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_27.setText(QtGui.QApplication.translate("generalizer", "Look ahead:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_9.setText(QtGui.QApplication.translate("generalizer", "Alpha:", None, QtGui.QApplication.UnicodeUTF8)) - self.label_10.setText(QtGui.QApplication.translate("generalizer", "Beta:", None, QtGui.QApplication.UnicodeUTF8)) - self.bBrowse.setText(QtGui.QApplication.translate("generalizer", "Browse", None, QtGui.QApplication.UnicodeUTF8)) - self.cbOutFile.setText(QtGui.QApplication.translate("generalizer", "Save output layer", None, QtGui.QApplication.UnicodeUTF8)) - self.tblBatchAlg.horizontalHeaderItem(0).setText(QtGui.QApplication.translate("generalizer", "Algorithm", None, QtGui.QApplication.UnicodeUTF8)) - self.tblBatchAlg.horizontalHeaderItem(1).setText(QtGui.QApplication.translate("generalizer", "Parameter 1", None, QtGui.QApplication.UnicodeUTF8)) - self.tblBatchAlg.horizontalHeaderItem(2).setText(QtGui.QApplication.translate("generalizer", "Parameter 2", None, QtGui.QApplication.UnicodeUTF8)) - self.bAddAlg.setText(QtGui.QApplication.translate("generalizer", "Add", None, QtGui.QApplication.UnicodeUTF8)) - self.bDelAlg.setText(QtGui.QApplication.translate("generalizer", "Delete", None, QtGui.QApplication.UnicodeUTF8)) - self.bEditAlg.setText(QtGui.QApplication.translate("generalizer", "Edit", None, QtGui.QApplication.UnicodeUTF8)) - self.bBrowseDir.setText(QtGui.QApplication.translate("generalizer", "Browse", None, QtGui.QApplication.UnicodeUTF8)) - self.cbOutDir.setText(QtGui.QApplication.translate("generalizer", "Save output layer(s) to folder", None, QtGui.QApplication.UnicodeUTF8)) - self.label_5.setText(QtGui.QApplication.translate("generalizer", "Algorithm(s)", None, QtGui.QApplication.UnicodeUTF8)) - self.label_6.setText(QtGui.QApplication.translate("generalizer", "Choose layer(s)", None, QtGui.QApplication.UnicodeUTF8)) - + _translate = QtCore.QCoreApplication.translate + generalizer.setWindowTitle(_translate("generalizer", "Generalizer")) + self.cbBatch.setText(_translate("generalizer", "Batch mode")) + self.bHelp.setText(_translate("generalizer", "?")) + self.bOk.setText(_translate("generalizer", "OK")) + self.bCancel.setText(_translate("generalizer", "Close")) + self.label.setText(_translate("generalizer", "Input line layer:")) + self.groupBox.setTitle(_translate("generalizer", "Options")) + self.label_3.setText(_translate("generalizer", "Alghoritm:")) + self.cbAlgorithm.setItemText(0, _translate("generalizer", "-----Generalizing-----")) + self.cbAlgorithm.setItemText(1, _translate("generalizer", "Remove small objects")) + self.cbAlgorithm.setItemText(2, _translate("generalizer", "-----Simplifying-----")) + self.cbAlgorithm.setItemText(3, _translate("generalizer", "Douglas-Peucker Algorithm")) + self.cbAlgorithm.setItemText(4, _translate("generalizer", "Jenk\'s Algorithm")) + self.cbAlgorithm.setItemText(5, _translate("generalizer", "Lang Algorithm")) + self.cbAlgorithm.setItemText(6, _translate("generalizer", "Reumann-Witkam Algorithm")) + self.cbAlgorithm.setItemText(7, _translate("generalizer", "Vertex Reduction")) + self.cbAlgorithm.setItemText(8, _translate("generalizer", "-----Smoothing-----")) + self.cbAlgorithm.setItemText(9, _translate("generalizer", "Boyle\'s Forward-Looking Algorithm")) + self.cbAlgorithm.setItemText(10, _translate("generalizer", "Chaiken\'s Algorithm")) + self.cbAlgorithm.setItemText(11, _translate("generalizer", "Hermite Spline Interpolation")) + self.cbAlgorithm.setItemText(12, _translate("generalizer", "McMaster\'s Distance-Weighting Algorithm")) + self.cbAlgorithm.setItemText(13, _translate("generalizer", "McMaster\'s Sliding Averaging Algorithm")) + self.cbAlgorithm.setItemText(14, _translate("generalizer", "Snakes Algorithm")) + self.label_12.setText(_translate("generalizer", "Threshold:")) + self.label_18.setText(_translate("generalizer", "Threshold:")) + self.label_7.setText(_translate("generalizer", "Threshold:")) + self.label_8.setText(_translate("generalizer", "Angle threshold:")) + self.label_13.setText(_translate("generalizer", "Threshold:")) + self.label_19.setText(_translate("generalizer", "Looka ahead:")) + self.label_11.setText(_translate("generalizer", "Threshold:")) + self.label_20.setText(_translate("generalizer", "Threshold:")) + self.label_21.setText(_translate("generalizer", "Look ahead:")) + self.label_22.setText(_translate("generalizer", "Level:")) + self.label_23.setText(_translate("generalizer", "Weight:")) + self.label_2.setText(_translate("generalizer", "Threshold:")) + self.label_4.setText(_translate("generalizer", "Thightness:")) + self.label_24.setText(_translate("generalizer", "Slide:")) + self.label_25.setText(_translate("generalizer", "Look ahead:")) + self.label_26.setText(_translate("generalizer", "Slide:")) + self.label_27.setText(_translate("generalizer", "Look ahead:")) + self.label_9.setText(_translate("generalizer", "Alpha:")) + self.label_10.setText(_translate("generalizer", "Beta:")) + self.bBrowse.setText(_translate("generalizer", "Browse")) + self.cbOutFile.setText(_translate("generalizer", "Save output layer")) + item = self.tblBatchAlg.horizontalHeaderItem(0) + item.setText(_translate("generalizer", "Algorithm")) + item = self.tblBatchAlg.horizontalHeaderItem(1) + item.setText(_translate("generalizer", "Parameter 1")) + item = self.tblBatchAlg.horizontalHeaderItem(2) + item.setText(_translate("generalizer", "Parameter 2")) + self.bAddAlg.setText(_translate("generalizer", "Add")) + self.bDelAlg.setText(_translate("generalizer", "Delete")) + self.bEditAlg.setText(_translate("generalizer", "Edit")) + self.bBrowseDir.setText(_translate("generalizer", "Browse")) + self.cbOutDir.setText(_translate("generalizer", "Save output layer(s) to folder")) + self.label_5.setText(_translate("generalizer", "Algorithm(s)")) + self.label_6.setText(_translate("generalizer", "Choose layer(s)"))