25
25
26
26
__revision__ = '$Format:%H$'
27
27
28
+ from qgis .core import QgsWkbTypes
29
+
28
30
from processing .core .GeoAlgorithm import GeoAlgorithm
29
31
from processing .core .parameters import ParameterVector
30
32
from processing .core .outputs import OutputVector
@@ -42,7 +44,8 @@ def defineCharacteristics(self):
42
44
self .group , self .i18n_group = self .trAlgorithm ('Vector geometry tools' )
43
45
44
46
self .addParameter (ParameterVector (self .INPUT ,
45
- self .tr ('Input Layer' )))
47
+ self .tr ('Input Layer' ),
48
+ [dataobjects .TYPE_VECTOR_POLYGON , dataobjects .TYPE_VECTOR_LINE ]))
46
49
self .addOutput (OutputVector (self .OUTPUT ,
47
50
self .tr ('Layer with fixed geometries' )))
48
51
@@ -53,7 +56,7 @@ def processAlgorithm(self, feedback):
53
56
writer = self .getOutputFromName (
54
57
self .OUTPUT ).getVectorWriter (
55
58
layer .fields (),
56
- layer .wkbType (),
59
+ QgsWkbTypes . multiType ( layer .wkbType () ),
57
60
layer .crs ())
58
61
59
62
features = vector .features (layer )
@@ -68,6 +71,19 @@ def processAlgorithm(self, feedback):
68
71
if not outputGeometry :
69
72
ProcessingLog .addToLog (ProcessingLog .LOG_WARNING ,
70
73
'makeValid failed for feature {}' .format (inputFeature .id ()))
74
+
75
+ if outputGeometry .wkbType () == QgsWkbTypes .Unknown or QgsWkbTypes .flatType (outputGeometry .geometry ().wkbType ()) == QgsWkbTypes .GeometryCollection :
76
+ tmpGeometries = outputGeometry .asGeometryCollection ()
77
+ for g in tmpGeometries :
78
+ if g .type () == inputFeature .geometry ().type ():
79
+ try :
80
+ outputFeature .setGeometry (QgsGeometry (g ))
81
+ writer .addFeature (outputFeature )
82
+ except :
83
+ pass
84
+ feedback .setProgress (int (current * total ))
85
+ continue
86
+
71
87
outputFeature .setGeometry (outputGeometry )
72
88
73
89
writer .addFeature (outputFeature )
0 commit comments