33
33
from qgis .PyQt .QtGui import QIcon
34
34
from qgis .PyQt .QtCore import QVariant
35
35
from qgis .core import (QgsRectangle , QgsFields , QgsField , QgsFeature , QgsWkbTypes ,
36
- QgsGeometry , QgsPointXY , QgsCoordinateReferenceSystem )
36
+ QgsGeometry , QgsPointXY , QgsCoordinateReferenceSystem ,
37
+ QgsProcessingParameterExtent ,
38
+ QgsProcessingParameterNumber ,
39
+ QgsProcessingParameterBoolean ,
40
+ QgsProcessingParameterCrs ,
41
+ QgsProcessingParameterFeatureSink ,
42
+ QgsProcessingParameterDefinition ,
43
+ QgsProcessingOutputVectorLayer )
37
44
38
45
from processing .algs .qgis .QgisAlgorithm import QgisAlgorithm
39
- from processing .core .parameters import ParameterExtent
40
- from processing .core .parameters import ParameterNumber
41
- from processing .core .parameters import ParameterBoolean
42
- from processing .core .parameters import ParameterCrs
43
- from processing .core .outputs import OutputVector
44
- from processing .tools import dataobjects
45
46
46
47
pluginPath = os .path .split (os .path .split (os .path .dirname (__file__ ))[0 ])[0 ]
47
48
@@ -64,19 +65,21 @@ def group(self):
64
65
65
66
def __init__ (self ):
66
67
super ().__init__ ()
67
- self .addParameter (ParameterExtent (self .EXTENT ,
68
- self .tr ('Input extent' ), optional = False ))
69
- self .addParameter (ParameterNumber (self .SPACING ,
70
- self .tr ('Point spacing/count' ), 100 , 999999999.999999999 , 100 ))
71
- self .addParameter (ParameterNumber (self .INSET ,
72
- self .tr ('Initial inset from corner (LH side)' ), 0.0 , 9999.9999 , 0.0 ))
73
- self .addParameter (ParameterBoolean (self .RANDOMIZE ,
74
- self .tr ('Apply random offset to point spacing' ), False ))
75
- self .addParameter (ParameterBoolean (self .IS_SPACING ,
76
- self .tr ('Use point spacing' ), True ))
77
- self .addParameter (ParameterCrs (self .CRS ,
78
- self .tr ('Output layer CRS' ), 'ProjectCrs' ))
79
- self .addOutput (OutputVector (self .OUTPUT , self .tr ('Regular points' ), datatype = [dataobjects .TYPE_VECTOR_POINT ]))
68
+ self .addParameter (QgsProcessingParameterExtent (self .EXTENT ,
69
+ self .tr ('Input extent' ), optional = False ))
70
+ self .addParameter (QgsProcessingParameterNumber (self .SPACING ,
71
+ self .tr ('Point spacing/count' ), QgsProcessingParameterNumber .Double , 100 , False , 0.000001 , 999999999.999999999 ))
72
+ self .addParameter (QgsProcessingParameterNumber (self .INSET ,
73
+ self .tr ('Initial inset from corner (LH side)' ), QgsProcessingParameterNumber .Double , 0.0 , False , 0.0 , 9999.9999 ))
74
+ self .addParameter (QgsProcessingParameterBoolean (self .RANDOMIZE ,
75
+ self .tr ('Apply random offset to point spacing' ), False ))
76
+ self .addParameter (QgsProcessingParameterBoolean (self .IS_SPACING ,
77
+ self .tr ('Use point spacing' ), True ))
78
+ self .addParameter (QgsProcessingParameterCrs (self .CRS ,
79
+ self .tr ('Output layer CRS' ), 'ProjectCrs' ))
80
+
81
+ self .addParameter (QgsProcessingParameterFeatureSink (self .OUTPUT , self .tr ('Regular points' ), QgsProcessingParameterDefinition .TypeVectorPoint ))
82
+ self .addOutput (QgsProcessingOutputVectorLayer (self .OUTPUT , self .tr ('Regular points' ), QgsProcessingParameterDefinition .TypeVectorPoint ))
80
83
81
84
def name (self ):
82
85
return 'regularpoints'
@@ -85,23 +88,19 @@ def displayName(self):
85
88
return self .tr ('Regular points' )
86
89
87
90
def processAlgorithm (self , parameters , context , feedback ):
88
- extent = str ( self .getParameterValue ( self .EXTENT )). split ( ',' )
91
+ extent = self .parameterAsExtent ( parameters , self .EXTENT , context )
89
92
90
- spacing = float (self .getParameterValue (self .SPACING ))
91
- inset = float (self .getParameterValue (self .INSET ))
92
- randomize = self .getParameterValue (self .RANDOMIZE )
93
- isSpacing = self .getParameterValue (self .IS_SPACING )
94
- crsId = self .getParameterValue (self .CRS )
95
- crs = QgsCoordinateReferenceSystem ()
96
- crs .createFromUserInput (crsId )
97
-
98
- extent = QgsRectangle (float (extent [0 ]), float (extent [2 ]),
99
- float (extent [1 ]), float (extent [3 ]))
93
+ spacing = self .parameterAsDouble (parameters , self .SPACING , context )
94
+ inset = self .parameterAsDouble (parameters , self .INSET , context )
95
+ randomize = self .parameterAsBool (parameters , self .RANDOMIZE , context )
96
+ isSpacing = self .parameterAsBool (parameters , self .IS_SPACING , context )
97
+ crs = self .parameterAsCrs (parameters , self .CRS , context )
100
98
101
99
fields = QgsFields ()
102
100
fields .append (QgsField ('id' , QVariant .Int , '' , 10 , 0 ))
103
101
104
- writer = self .getOutputFromName (self .OUTPUT ).getVectorWriter (fields , QgsWkbTypes .Point , crs , context )
102
+ (sink , dest_id ) = self .parameterAsSink (parameters , self .OUTPUT , context ,
103
+ fields , QgsWkbTypes .Point , crs )
105
104
106
105
if randomize :
107
106
seed ()
@@ -127,6 +126,9 @@ def processAlgorithm(self, parameters, context, feedback):
127
126
while y >= extent .yMinimum ():
128
127
x = extent .xMinimum () + inset
129
128
while x <= extent .xMaximum ():
129
+ if feedback .isCanceled ():
130
+ break
131
+
130
132
if randomize :
131
133
geom = QgsGeometry ().fromPoint (QgsPointXY (
132
134
uniform (x - (pSpacing / 2.0 ), x + (pSpacing / 2.0 )),
@@ -137,9 +139,10 @@ def processAlgorithm(self, parameters, context, feedback):
137
139
if extent_engine .intersects (geom .geometry ()):
138
140
f .setAttribute ('id' , count )
139
141
f .setGeometry (geom )
140
- writer .addFeature (f )
142
+ sink .addFeature (f )
141
143
x += pSpacing
142
144
count += 1
143
145
feedback .setProgress (int (count * total ))
144
146
y = y - pSpacing
145
- del writer
147
+
148
+ return {self .OUTPUT : dest_id }
0 commit comments