Итератор, дающий последовательный доступ к свойствам объектов слоя Layer. Объект возвращает метод EnumElements.
Входит в состав ZuluGIS 2021 Library.
Итератор даёт буферизованный доступ к свойствам объектов слоя и предназначен для перебора в цикле: так намного быстрее, чем обращаться к каждому объекту через коллекцию Item.
Порядок работы: получить итератор у слоя, вызвать MoveFirst, дальше повторять MoveNext, пока IsEOF не вернёт True. До вызова MoveFirst итератор пуст: IsEOF сразу возвращает True, а ElemID — -1.
Ограничить обход выделенными объектами позволяет метод SetSelectedOnly — вызывать его надо до MoveFirst.
Члены итератора делятся по назначению:
что за объект — ElemID, GraphType, TypeID, ModeId, Type, Mode;
геометрия — GetXY, GetCenter, GetPoints, GetPolyContour, GetPolyPolyLine, GetBounds, GetBoundsRectangle;
измерения — Area и Perimeter, они имеют смысл только для площадных объектов;
оформление — ElemStyle и CurrentElemStyle;
текст — GetText, только для текстовых объектов;
обход — MoveFirst, MoveNext, IsEOF, IsSelected, SetSelectedOnly.
Visual Basic:
Sub IZEnumElements_cls 'Итератор по объектам активного слоя карты Set L = Zulu.ActiveMapDoc.Layers.Active Set En = L.EnumElements 'Считаем объекты по графическому типу Set d = CreateObject("Scripting.Dictionary") En.MoveFirst Do While Not En.IsEOF g = En.GraphType d(g) = d(g) + 1 En.MoveNext Loop s = "" For Each g In d.Keys s = s & "графический тип " & g & ": " & d(g) & vbCrLf Next MsgBox s End SubPython:
import zulu def Macro_IZEnumElements_cls(): # Итератор по объектам активного слоя карты L = zulu.App.ActiveMapDoc.Layers.Active En = L.EnumElements() # Считаем объекты по графическому типу d = {} En.MoveFirst() while not En.IsEOF(): g = En.GraphType d[g] = d.get(g, 0) + 1 En.MoveNext() for g in sorted(d): print("графический тип", g, ":", d[g])