@@ -50,6 +50,7 @@ def getIcon(self):
5050 def defineCharacteristics (self ):
5151 self .name , self .i18n_name = self .trAlgorithm ('Polygons to lines' )
5252 self .group , self .i18n_group = self .trAlgorithm ('Vector geometry tools' )
53+ self .tags = self .tr ('line,polygon,convert' )
5354
5455 self .addParameter (ParameterVector (self .INPUT ,
5556 self .tr ('Input layer' ), [dataobjects .TYPE_VECTOR_POLYGON ]))
@@ -62,36 +63,17 @@ def processAlgorithm(self, progress):
6263 writer = self .getOutputFromName (self .OUTPUT ).getVectorWriter (
6364 layer .fields ().toList (), QgsWkbTypes .LineString , layer .crs ())
6465
65- outFeat = QgsFeature ()
66- inGeom = QgsGeometry ()
67- outGeom = QgsGeometry ()
68-
6966 features = vector .features (layer )
7067 total = 100.0 / len (features )
7168 for current , f in enumerate (features ):
72- inGeom = f . geometry ()
73- attrs = f . attributes ()
74- lineList = self . extractAsLine ( inGeom )
75- outFeat . setAttributes ( attrs )
76- for h in lineList :
77- outFeat . setGeometry ( outGeom . fromPolyline ( h ))
78- writer .addFeature (outFeat )
69+ if f . hasGeometry ():
70+ lines = QgsGeometry ( f . geometry (). geometry (). boundary ()). asGeometryCollection ()
71+ for line in lines :
72+ f . setGeometry ( line )
73+ writer . addFeature ( f )
74+ else :
75+ writer .addFeature (f )
7976
8077 progress .setPercentage (int (current * total ))
8178
8279 del writer
83-
84- def extractAsLine (self , geom ):
85- multiGeom = QgsGeometry ()
86- lines = []
87- if geom and geom .type () == QgsWkbTypes .PolygonGeometry :
88- if geom .isMultipart ():
89- multiGeom = geom .asMultiPolygon ()
90- for i in multiGeom :
91- lines .extend (i )
92- else :
93- multiGeom = geom .asPolygon ()
94- lines = multiGeom
95- return lines
96- else :
97- return []
0 commit comments