Возвращает объект IZEnumElements, являющийся итератором, предоставляющим последовательный доступ к ряду свойств объектов слоя.
Visual Basic:
Function EnumElements() As IZEnumElements
Возвращаемый объект предоставляет буферизованный доступ к свойствам элементов слоя. Его удобно использовать, когда в цикле нужно перебрать много объектов. В этом случае доступ гораздо быстрее чем при использовании Layer.Elements.Item(ElemID).
Перед обходом итератор нужно поставить на первый объект методом MoveFirst: до этого он стоит за концом списка. Обход повторяется новым вызовом MoveFirst. У слоя без объектов итератор сразу после MoveFirst стоит за концом.
Итератор перебирает объекты, которые были в слое, когда он был получен. Объекты, добавленные позже, в обход не попадают — для них нужно снова вызвать EnumElements.
Visual Basic:
Sub Layer_EnumElements 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Считаем типовые объекты и примитивы слоя Set En = L.EnumElements En.MoveFirst Typed = 0 Prims = 0 Do While Not En.IsEOF If En.TypeID = -1 Then Prims = Prims + 1 Else Typed = Typed + 1 End If En.MoveNext Loop MsgBox "Типовых объектов: " & Typed & vbCrLf & "Примитивов: " & Prims End SubPython:
import zulu def Macro_Layer_EnumElements(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Считаем типовые объекты и примитивы слоя En = L.EnumElements() En.MoveFirst() typed = prims = 0 while not En.IsEOF(): if En.TypeID == -1: prims += 1 else: typed += 1 En.MoveNext() print("Типовых объектов:", typed) print("Примитивов:", prims)