<div dir="ltr">You don't need to use a while loop.  I'm really not sure people keep using that pattern when you don't need to and makes you code more complicated.<div style>list and iterator have the same next() method so they act the same <a href="https://github.com/qgis/Quantum-GIS/blob/master/python/core/qgsfeatureiterator.sip#L12">https://github.com/qgis/Quantum-GIS/blob/master/python/core/qgsfeatureiterator.sip#L12</a></div>

<div style><br></div><div style>You can just do:</div><div style><br></div><div style>for f in layer.getFeatures():</div><div style><br></div><div style>So now if you want to just get the selected or all you can do:</div>

<div style><br></div><div style>if getselection:</div><div style>   features = layer.selectedFeatures()</div><div style>else:</div><div style>  features = layer.getFeatures()</div><div style><br></div><div style>So I hate/gald to say that your <span style="color:rgb(68,85,136);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;font-weight:bold;line-height:18px;white-space:pre">FeatureIterator is not neeeded because it is built into QgsFeatureIterator.</span></div>

<div style><span style="color:rgb(68,85,136);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;font-weight:bold;line-height:18px;white-space:pre"><br></span></div><div style><span style="color:rgb(68,85,136);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;font-weight:bold;line-height:18px;white-space:pre">Regards,</span></div>

<div style><span style="color:rgb(68,85,136);font-family:Consolas,'Liberation Mono',Courier,monospace;font-size:12px;font-weight:bold;line-height:18px;white-space:pre">Nathan</span></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On Mon, Jun 17, 2013 at 11:47 PM, Ricardo Filipe Soares Garcia da <span dir="ltr"><<a href="mailto:ricardo.garcia.silva@gmail.com" target="_blank">ricardo.garcia.silva@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Hi list<div><br></div><div>When building plugins that operate on vector layers, it is a common pattern to include a checkbox in the plugin's GUI where the user can choose to perform the plugin analysis on the whole layer or just using the currently selected features (see for example most fTools dialogs).</div>



<div><br></div><div>However, I think the QGIS API does not make the implementation of this pattern as easy as it could be. The QgsVectorLayer.getFeatures() method returns an iterator but the QgsVectorLayer.selectedFeatures() returns a list. It would be nice if they both returned an iterator. </div>



<div><br></div><div>When working with all the features in a layer, I  use:</div><div><br></div><div>feat = QgsFeature()</div><div>feat_iterator = v_layer.getFeatures()</div><div>while feat_iterator.nextFeature(feat):</div>



<div>    # do stuff with the feature</div><div><br></div><div>When working with only the currently selected features the code is like:</div><div><br></div><div>selected_feats = v_layer.selectedFeatures()</div>

<div>for feat in selected_feats:</div><div>    # do stuff with the feature</div><div><div><br></div><div>Since QgsVectorLayer.getFeatures can take a QgsFeatureRequest as argument, I think a nice solution could be to add one more filter to QgsFeatureRequest to allow iterating over a list of feature ids. It currently already allows to pass in a single feature id, it would just be a matter of expanding that.</div>



<div><br></div><div>In the meantime I am using a custom iterator class[1] in Python that wraps this different behaviour and lets me use the same logic for processing the whole layer or just the selected features. I think it would be cleaner if this could be done on the API side.</div>



<div><br></div><div>Maybe I am asking for too much too late because of the feature freeze for 2.0?</div><div><br></div><div><br></div><div>[1] - (see the FeatureIterator class) <a href="https://github.com/ricardogsilva/coneforinputs/blob/master/coneforinputs.py" target="_blank">https://github.com/ricardogsilva/coneforinputs/blob/master/coneforinputs.py</a></div>

<span class="HOEnZb"><font color="#888888">

<div><br></div><div><br></div>-- <br>___________________________ ___ __<br>Ricardo Garcia Silva
</font></span></div></div>
<br>_______________________________________________<br>
Qgis-developer mailing list<br>
<a href="mailto:Qgis-developer@lists.osgeo.org">Qgis-developer@lists.osgeo.org</a><br>
<a href="http://lists.osgeo.org/mailman/listinfo/qgis-developer" target="_blank">http://lists.osgeo.org/mailman/listinfo/qgis-developer</a><br>
<br></blockquote></div><br></div>