Добавляет в слой текущий элемент итератора EnumElements другого слоя c присвоением ему заданных ID, типа и режима.
Visual Basic:
Function AddEnumElementEx(Elems As IZEnumElements, ElemID As Long, TypeID As Long, nMode As Long, Flags As Long) As Long
Elems - итератор EnumElements слоя источника
ElemID - ID добавляемого элемента
TypeID - тип добавляемого элемента
nMode - режим добавляемого элемента
Flags - признак необходимости проверки на существование указанного ElemID ( 0 - не проверять, 1 - проверять)
Если значение ElemID равно -1, то записываемому элементу ID присваивается автоматически.
При отсутствии проверки на существование в слое элемента с указанным ElemID метод работает быстрее, но в этом случае разработчик должен сам быть уверен, что повторение ключа исключается (например, последовательная запись в новый слой с увеличением значения очередного ElemID на единицу).
Если такой уверенности нет, то нужно задавать флаг проверки Flags равным 1. Тогда, если ключ с указанным ElemID в слое уже существует, в добавлении нового элемента будет отказано.
При Flags равном 0 ключ не проверяется, и элемент добавляется даже с занятым ID: в слое оказываются два объекта с одинаковым ID.
Тип должен соответствовать графике объекта: линия принимает только тип участка, символ — только тип узла. Если тип не подходит объекту, не существует в слое или номер режима выходит за пределы, заданные типом, метод возвращает -1 и объект не добавляется.
Чтобы добавить непривязанный к структуре слоя объект (примитив), TypeID и nMode задают равными -1. Тип и режим исходного объекта в этом случае не сохраняются; чтобы перенести объект как есть, применяется метод AddEnumElement.
Если добавление элемента выполнено успешно, метод возвращает ID добавленного элемента. В противном случае метод возвращает -1.
Visual Basic:
Sub Layer_AddEnumElementEx 'Берем активный слой карты Set Src = Zulu.ActiveMapDoc.Layers.Active 'Создаем пустой слой той же структуры Set Tools = CreateObject("ZuluLib.ZuluTools") Tools.LayerCreateByExample Src.Name, "C:\Data\lines", "Участки в первом режиме", 0 Set Dst = CreateObject("ZuluLib.Layer") Dst.Open "C:\Data\lines" 'Переписываем участки, оставляя тип и назначая всем режим 1 Set En = Src.EnumElements En.MoveFirst n = 0 Do While Not En.IsEOF If En.GraphType = 0 Then If Dst.AddEnumElementEx(En, En.ElemID, En.TypeID, 1, 0) <> -1 Then n = n + 1 End If En.MoveNext Loop MsgBox "Перенесено участков: " & n End SubPython:
import zulu def Macro_Layer_AddEnumElementEx(): # Берем активный слой карты Src = zulu.App.ActiveMapDoc.Layers.Active # Создаем пустой слой той же структуры zulu.ZuluTools().LayerCreateByExample(Src.Name, r"C:\Data\lines", "Участки в первом режиме", 0) Dst = zulu.Layer() Dst.Open(r"C:\Data\lines") # Переписываем участки, оставляя тип и назначая всем режим 1 En = Src.EnumElements() En.MoveFirst() n = 0 while not En.IsEOF(): if En.GraphType == 0 and Dst.AddEnumElementEx(En, En.ElemID, En.TypeID, 1, 0) != -1: n += 1 En.MoveNext() print("Перенесено участков:", n)