1+ # -*- coding: utf-8 -*-
2+
3+ """
4+ ***************************************************************************
5+ DeleteHoles.py
6+ ---------------------
7+ Date : April 2015
8+ Copyright : (C) 2015 by Etienne Trimaille
9+ ***************************************************************************
10+ * *
11+ * This program is free software; you can redistribute it and/or modify *
12+ * it under the terms of the GNU General Public License as published by *
13+ * the Free Software Foundation; either version 2 of the License, or *
14+ * (at your option) any later version. *
15+ * *
16+ ***************************************************************************
17+ """
18+
19+ __author__ = 'Etienne Trimaille'
20+ __date__ = 'April 2015'
21+ __copyright__ = '(C) 2015, Etienne Trimaille'
22+
23+ # This will get replaced with a git SHA1 when you do a git archive
24+
25+ __revision__ = '$Format:%H$'
26+
27+ from qgis .core import QgsFeature , QgsGeometry
28+ from processing .core .GeoAlgorithm import GeoAlgorithm
29+ from processing .core .parameters import ParameterVector
30+ from processing .core .outputs import OutputVector
31+ from processing .tools import dataobjects , vector
32+
33+
34+ class DeleteHoles (GeoAlgorithm ):
35+ INPUT = 'INPUT'
36+ OUTPUT = 'OUTPUT'
37+
38+ def defineCharacteristics (self ):
39+ self .name = 'Delete holes'
40+ self .group = 'Vector geometry tools'
41+
42+ self .addParameter (ParameterVector (self .INPUT ,
43+ self .tr ('Input layer' ), [ParameterVector .VECTOR_TYPE_POLYGON ]))
44+ self .addOutput (OutputVector (self .OUTPUT , self .tr ('Output' )))
45+
46+ def processAlgorithm (self , progress ):
47+ layer = dataobjects .getObjectFromUri (
48+ self .getParameterValue (self .INPUT ))
49+
50+ writer = self .getOutputFromName (self .OUTPUT ).getVectorWriter (
51+ layer .pendingFields (),
52+ layer .wkbType (),
53+ layer .crs ())
54+
55+ features = vector .features (layer )
56+ count = len (features )
57+ total = 100.0 / float (count )
58+
59+ feat = QgsFeature ()
60+ for count , f in enumerate (features ):
61+
62+ geometry = f .geometry ()
63+ if geometry .isMultipart ():
64+ multi_polygon = geometry .asMultiPolygon ()
65+ for polygon in multi_polygon :
66+ for ring in polygon [1 :]:
67+ polygon .remove (ring )
68+ geometry = QgsGeometry .fromMultiPolygon (multi_polygon )
69+
70+ else :
71+ polygon = geometry .asPolygon ()
72+ for ring in polygon [1 :]:
73+ polygon .remove (ring )
74+ geometry = QgsGeometry .fromPolygon (polygon )
75+
76+ feat .setGeometry (geometry )
77+ feat .setAttributes (f .attributes ())
78+ writer .addFeature (feat )
79+ progress .setPercentage (int (count * total ))
80+
81+ del writer
0 commit comments