久しぶりにArcObjectsネタです。
普通レイヤからFeatureCursorオブジェクトを取得するには、FeatureClassを取りに行くのでこのように書きます。
Dim pFeatureLayer As IFeatureLayer Set pFeatureLayer = pMxDocument.FocusMap.Layer(0) Dim pFeatureClass As IFeatureClass Set pFeatureClass = pFeatureLayer.FeatureClass Dim pFeatureCursor As IFeatureCursor Set pFeatureCursor = pFeatureClass.Search(Nothing, True)
ArcObjectsを数年やってて今日はじめてこんな方法があることを知りました。コード量の2行削減に成功!
Dim pFeatureLayer As IFeatureLayer Set pFeatureLayer = pMxDocument.FocusMap.Layer(0) Dim pFeatureCursor As IFeatureCursor Set pFeatureCursor = pFeatureLayer.Search(Nothing, True)
フィーチャレイヤから直接カーソル オブジェクトを取得できるんですね。
ただし、レイヤに対してフィルタ設定(IFeatureLayerDefinition)をしてると、IFeatureLayer::Searchの戻り値はフィルタ設定の条件に一致するレコードしか取得することができません。
ちなみに、FeatureLayerクラスはITableを実装しているので、レイヤから直接テーブルにアクセスすることができるのですが、これもフィルタ設定の影響をうけて条件と一致するレコードのみ取得されます。
意外と初歩的なところが抜けてたりします。