Bir özellik nesnesinin üst katmanını veya QgsFeature sınıfındaki bir yöntemden seçilip seçilmediğini doğrudan bulmanın bir yolu yoktur.
Benzer bir yaklaşım , içinde vlayer.selectedFeatures()
olup olmadığını test feat.id()
etmektir vlayer.selectedFeaturesIds()
. QgsFeatureIds, diğer vektör katmanlarıyla karşılaştırıldığında yalnızca kendi katmanları içinde benzersiz değerler değildir.
Alternatif olarak, vlayer.selectedFeatures()
sağlayıcının tüm özellikleri yerine bu özelliklerle başlayabilir ve bu özellikleri tekrarlayabilirsiniz.
Yine başka bir yaklaşım, başlangıçta belirli bir vektör katmanı için seçilen ve seçilmemiş özellik kimliklerinin kümelerini (veya listelerini) toplamaktır:
# previous relevant code
set_selids = set(vlayer.selectedFeaturesIds())
feat = QgsFeature()
vlayer.select([], QgsRectangle(), False)
set_allids = set()
while vlayer.nextFeature(feat):
set_allids.add(feat.id())
set_notselids = set_allids - set_selids
print set_allids
print set_selids
print set_notselids
Bir vektör katmanı için tüm özelliklere (veya kimliklere) bir referans almak için tek bir çağrı bulamıyorum (yani hala kullanmak QgsVectorLayer.select()
ve tekrarlamak zorunda QgsVectorLayer.nextFeature()
).
Düzenleme : QgsVectorLaer'ı yansıtacak şekilde güncellenmiş kod, seçili çağrıyı (doğrudan sağlayıcı almanıza gerek yoktur) işleyebilir ve harita tuvalinde setSelectedFeatures()
güncellenmesi gereken gerçek seçilen özellikleri bozmaz .
Düzenleme 2 : Özellik kimliği kümelerini oluşturduktan sonra, bunları yineleyebilir QgsVectorLayer.featureAtId(featid)
ve özelliğe erişmek için kullanabilirsiniz .