@@ -13,15 +13,22 @@ def __init__(self, iface):
13
13
# Set up the user interface from Designer.
14
14
self .setupUi (self )
15
15
self .buttonOk = self .buttonBox_2 .button ( QDialogButtonBox .Ok )
16
-
17
16
# populate layer list
18
17
self .progressBar .setValue (0 )
19
18
mapCanvas = self .iface .mapCanvas ()
20
19
layers = ftools_utils .getLayerNames ([QGis .Point , QGis .Line , QGis .Polygon ])
21
20
self .inPolygon .addItems (layers )
22
21
self .inPoint .addItems (layers )
23
22
self .updateUI ()
23
+ self .connect (self .inPoint , SIGNAL ("currentIndexChanged(QString)" ), self .updateCheck )
24
24
self .cmbModify .addItems ([self .tr ("creating new selection" ), self .tr ("adding to current selection" ), self .tr ("removing from current selection" )])
25
+
26
+ def updateCheck (self , text ):
27
+ vlayer = ftools_utils .getVectorLayerByName (text )
28
+ if vlayer .selectedFeatureCount () > 0 :
29
+ self .chkSelected .setChecked (True )
30
+ else :
31
+ self .chkSelected .setChecked (False )
25
32
26
33
def updateUI (self ):
27
34
self .label_5 .setVisible (False )
@@ -37,8 +44,11 @@ def updateUI(self):
37
44
self .label_mod .setText (self .tr ("Modify current selection by:" ))
38
45
self .cmbModify = QComboBox (self )
39
46
self .cmbModify .setObjectName ("cmbModify" )
40
- self .gridLayout .addWidget (self .label_mod ,2 ,0 ,1 ,1 )
41
- self .gridLayout .addWidget (self .cmbModify ,3 ,0 ,1 ,1 )
47
+ self .chkSelected = QCheckBox (self .tr ("Use selected features only" ), self )
48
+ self .chkSelected .setObjectName ("chkSelected" )
49
+ self .gridLayout .addWidget (self .chkSelected ,2 ,0 ,1 ,1 )
50
+ self .gridLayout .addWidget (self .label_mod ,3 ,0 ,1 ,1 )
51
+ self .gridLayout .addWidget (self .cmbModify ,4 ,0 ,1 ,1 )
42
52
self .resize (381 , 100 )
43
53
44
54
def accept (self ):
@@ -50,11 +60,11 @@ def accept(self):
50
60
else :
51
61
inPoly = self .inPolygon .currentText ()
52
62
inPts = self .inPoint .currentText ()
53
- self .compute (inPoly , inPts , self .cmbModify .currentText ())
63
+ self .compute (inPoly , inPts , self .cmbModify .currentText (), self . chkSelected . isChecked () )
54
64
self .progressBar .setValue (0 )
55
65
self .buttonOk .setEnabled ( True )
56
66
57
- def compute (self , inPoly , inPts , modify ):
67
+ def compute (self , inPoly , inPts , modify , selection ):
58
68
inputLayer = ftools_utils .getVectorLayerByName (inPoly )
59
69
selectLayer = ftools_utils .getVectorLayerByName (inPts )
60
70
inputProvider = inputLayer .dataProvider ()
@@ -68,20 +78,29 @@ def compute(self, inPoly, inPts, modify):
68
78
geom = QgsGeometry ()
69
79
selectedSet = []
70
80
index = ftools_utils .createIndex (inputProvider )
71
- #selectProvider.nextFeature(feat)
72
- #geomLayer = QgsGeometry(feat.geometry())
73
- self .progressBar .setMaximum (selectProvider .featureCount ())
74
-
75
- while selectProvider .nextFeature (feat ):
76
- geom = QgsGeometry (feat .geometry ())
77
- intersects = index .intersects (geom .boundingBox ())
78
- print len (intersects )
79
- for id in intersects :
80
- inputProvider .featureAtId (int (id ), infeat , True )
81
- tmpGeom = QgsGeometry ( infeat .geometry () )
82
- if geom .intersects (tmpGeom ):
83
- selectedSet .append (infeat .id ())
84
- self .progressBar .setValue (self .progressBar .value ()+ 1 )
81
+ if selection :
82
+ features = selectLayer .selectedFeatures ()
83
+ self .progressBar .setMaximum (len (features ))
84
+ for feat in features :
85
+ geom = QgsGeometry (feat .geometry ())
86
+ intersects = index .intersects (geom .boundingBox ())
87
+ for id in intersects :
88
+ inputProvider .featureAtId (int (id ), infeat , True )
89
+ tmpGeom = QgsGeometry (infeat .geometry ())
90
+ if geom .intersects (tmpGeom ):
91
+ selectedSet .append (infeat .id ())
92
+ self .progressBar .setValue (self .progressBar .value ()+ 1 )
93
+ else :
94
+ self .progressBar .setMaximum (selectProvider .featureCount ())
95
+ while selectProvider .nextFeature (feat ):
96
+ geom = QgsGeometry (feat .geometry ())
97
+ intersects = index .intersects (geom .boundingBox ())
98
+ for id in intersects :
99
+ inputProvider .featureAtId (int (id ), infeat , True )
100
+ tmpGeom = QgsGeometry ( infeat .geometry () )
101
+ if geom .intersects (tmpGeom ):
102
+ selectedSet .append (infeat .id ())
103
+ self .progressBar .setValue (self .progressBar .value ()+ 1 )
85
104
if modify == self .tr ("adding to current selection" ):
86
105
selectedSet = list (set (inputLayer .selectedFeaturesIds ()).union (selectedSet ))
87
106
elif modify == self .tr ("removing from current selection" ):
0 commit comments