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..c19246c
--- /dev/null
+++ b/README.md
@@ -0,0 +1,53 @@
+# 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
+
+ 
+
+ * Jenk's Algorithm
+ * Lang Algorithm
+ * Reumann-Witkam Algorithm
+ * Vertex Reduction
+
+ - Smooth :
+ * Boyle's Forward-Looking Algorithm
+
+ 
+
+ * Chaikin's Algorithm
+
+ 
+
+ 
+
+ * Hermite Spline Interpolation
+
+ 
+
+ 
+
+ * McMaster's Distance-Weighting Algorithm
+
+ 
+
+ * McMaster's Sliding Averaging Algorithm
+
+ 
+
+ 
+
+ * Snakes Algorithm :
+ Slowest smoothing algorithm
+
+ 
+
+
+
+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..8c042f7 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',
@@ -36,7 +44,7 @@
'lang':'Lang Algorithm',
'reduction':'Vertex Reduction',
'boyle':'Boyle\'s Forward-Looking Algorithm',
- 'chaiken':'Chaiken\'s Algorithm',
+ 'chaikin':'Chaikin\'s Algorithm',
'hermite':'Hermite Spline Interpolation',
'distance':'McMaster\'s Distance-Weighting Algorithm',
'sliding':'McMaster\'s Sliding Averaging Algorithm',
@@ -45,6 +53,7 @@
'RW':'Reumann-Witkam Algorithm'
}
+crs = QgsProject.instance().crs()
class generalizerDialog(QDialog):
def __init__(self, iface):
@@ -160,7 +169,7 @@ def doAddAlgorithm(self, index):
par2.setValue(msg[0])
par2.setToolTip('Look ahead')
- elif algName[0] == algorithm['chaiken']: #'Chaiken\'s Algorithm':
+ elif algName[0] == algorithm['chaikin']: #'Chaikin\'s Algorithm':
par1 = QSpinBox()
par1.setRange(0, 99)
msg = QInputDialog.getInt(None, 'Generalizer', 'Level:', 1, 0, 99)
@@ -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):
@@ -367,8 +375,8 @@ def GetArguments(self, par1=-1, par2=-1):
arguments['slide_LA'] = self.ui.sbSlide_LA.value()
arguments['dist_slide'] = self.ui.sbDist_slide.value()
arguments['dist_LA'] = self.ui.sbDist_LA.value()
- arguments['chaiken_level'] = self.ui.sbChaiken_level.value()
- arguments['chaiken_weight'] = self.ui.sbChaiken_weight.value()
+ arguments['chaikin_level'] = self.ui.sbChaikin_level.value()
+ arguments['chaikin_weight'] = self.ui.sbChaikin_weight.value()
arguments['hermite_thresh'] = self.ui.sbHermite_steps.value()
arguments['hermite_tightness'] = self.ui.sbHermite_tightness.value()
arguments['jenks_thresh'] = self.ui.sbJenks_thresh.value()
@@ -388,8 +396,8 @@ def GetArguments(self, par1=-1, par2=-1):
arguments['slide_LA'] = par2
arguments['dist_slide'] = par1
arguments['dist_LA'] = par2
- arguments['chaiken_level'] = par1
- arguments['chaiken_weight'] = par2
+ arguments['chaikin_level'] = par1
+ arguments['chaikin_weight'] = par2
arguments['hermite_thresh'] = par1
arguments['hermite_tightness'] = par2
arguments['jenks_thresh'] = par1
@@ -414,8 +422,8 @@ def GetFunction(self, funcName):
return self.sliding_averaging
elif funcName == algorithm['distance']:#'McMaster\'s Distance-Weighting Algorithm':
return self.distance_weighting
- elif funcName == algorithm['chaiken']:#'Chaiken\'s Algorithm':
- return self.chaiken
+ elif funcName == algorithm['chaikin']:#'Chaikin\'s Algorithm':
+ return self.chaikin
elif funcName == algorithm['reduction']:#'Vertex Reduction':
return self.vertex_reduction
elif funcName == algorithm['DP']:#'Douglas-Peucker Algorithm':
@@ -440,8 +448,8 @@ def NameFromFunc(self, func, arguments):
return '-slide_slide-' + str(arguments['slide_slide']) + '_LA-' + str(arguments['slide_LA'])
elif func == self.distance_weighting:
return '-dist_slide-' + str(arguments['dist_slide']) + '_LA-' + str(arguments['dist_LA'])
- elif func == self.chaiken:
- return '-chaiken_level-' + str(arguments['chaiken_level']) + '_weight-' + str(arguments['chaiken_weight'])
+ elif func == self.chaikin:
+ return '-chaikin_level-' + str(arguments['chaikin_level']) + '_weight-' + str(arguments['chaikin_weight'])
elif func == self.vertex_reduction:
return '-reduction_thresh-' + str(arguments['reduction_thresh'])
elif func == self.douglas_peucker:
@@ -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
@@ -685,11 +700,11 @@ def distance_weighting(self,l, **kwargs):
return p
- def chaiken(self,l, **kwargs):
- #Chaiken's Algorithm
+ def chaikin(self,l, **kwargs):
+ #Chaikin's Algorithm
p = points.Vect_new_line_struct(l)
#QInputDialog.getText( self.iface.mainWindow(), "m", "e", QLineEdit.Normal, str(p.n_points) )
- n = smooth.chaiken(p, kwargs['chaiken_level'], kwargs['chaiken_weight'])
+ n = smooth.chaikin(p, kwargs['chaikin_level'], kwargs['chaikin_weight'])
return p
@@ -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..affdb30 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
+ Chaikin'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, Chaikin'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..a2bf7b4 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,19 +156,19 @@ 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
return points.n_points
-def chaiken(points, level, weight):
+def chaikin(points, level, weight):
n = 0
i = 0
j = 0
@@ -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..7a3905e 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.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.sbChaikin_level = QtWidgets.QSpinBox(self.page_16)
+ self.sbChaikin_level.setMinimum(1)
+ self.sbChaikin_level.setMaximum(99)
+ self.sbChaikin_level.setObjectName("sbChaikin_level")
+ self.gridLayout_16.addWidget(self.sbChaikin_level, 0, 1, 1, 1)
+ 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.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.sbChaikin_weight = QtWidgets.QDoubleSpinBox(self.page_16)
+ self.sbChaikin_weight.setMinimum(1.0)
+ self.sbChaikin_weight.setProperty("value", 3.0)
+ self.sbChaikin_weight.setObjectName("sbChaikin_weight")
+ self.gridLayout_16.addWidget(self.sbChaikin_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)
@@ -399,9 +400,9 @@ def setupUi(self, generalizer):
generalizer.setTabOrder(self.bCancel, self.sbLang_LA)
generalizer.setTabOrder(self.sbLang_LA, self.sbReduction_thresh)
generalizer.setTabOrder(self.sbReduction_thresh, self.sbBoyle_LA)
- generalizer.setTabOrder(self.sbBoyle_LA, self.sbChaiken_level)
- generalizer.setTabOrder(self.sbChaiken_level, self.sbChaiken_weight)
- generalizer.setTabOrder(self.sbChaiken_weight, self.sbHermite_steps)
+ generalizer.setTabOrder(self.sbBoyle_LA, self.sbChaikin_level)
+ generalizer.setTabOrder(self.sbChaikin_level, self.sbChaikin_weight)
+ generalizer.setTabOrder(self.sbChaikin_weight, self.sbHermite_steps)
generalizer.setTabOrder(self.sbHermite_steps, self.sbHermite_tightness)
generalizer.setTabOrder(self.sbHermite_tightness, self.sbDist_slide)
generalizer.setTabOrder(self.sbDist_slide, self.sbDist_LA)
@@ -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", "Chaikin\'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)"))
diff --git a/ui_generalizer.ui b/ui_generalizer.ui
index 06189d1..cae4ce4 100644
--- a/ui_generalizer.ui
+++ b/ui_generalizer.ui
@@ -153,7 +153,7 @@
-
- Chaiken's Algorithm
+ Chaikin's Algorithm
-
@@ -410,7 +410,7 @@
-
-
+
1
@@ -427,7 +427,7 @@
-
-
+
1.000000000000000
@@ -748,8 +748,8 @@
sbLang_LA
sbReduction_thresh
sbBoyle_LA
- sbChaiken_level
- sbChaiken_weight
+ sbChaikin_level
+ sbChaikin_weight
sbHermite_steps
sbHermite_tightness
sbDist_slide