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