Добавляет в слой заданный элемент c присвоением ему заданного ID.
Visual Basic:
Function AddElementEx(Elem As Element, ElemID As Long, Flags As Long) As Long
Elem - добавляемый элемент
ElemID - ID добавляемого элемента
Flags - признак необходимости проверки на существование указанного ElemID ( 0 - не проверять, 1 - проверять).
Если значение ElemID равно -1, то записываемому элементу ID присваивается автоматически, аналогично методу AddElement.
При отсутствии проверки на существование в слое элемента с указанным ID метод работает быстрее, но в этом случае разработчик должен сам быть уверен, что повторение ключа исключается (например, последовательная запись в новый слой с увеличением значения очередного ElemID на единицу).
Если такой уверенности нет, то нужно задавать флаг проверки Flags равным 1. Тогда, если ключ с указанным ElemID в слое уже существует, в добавлении нового элемента будет отказано.
При Flags равном 0 ключ не проверяется, и элемент добавляется даже с занятым ID: в слое оказываются два объекта с одинаковым ID.
Элемент берётся у того же или у другого слоя — например, из коллекции Elements. Копия сохраняет геометрию, стиль, тип и режим исходного элемента.
Если добавление элемента выполнено успешно, метод возвращает ID добавленного элемента. В противном случае метод возвращает -1.
Visual Basic:
Sub Layer_AddElementEx 'Берем активный слой карты Set L = Zulu.ActiveMapDoc.Layers.Active 'Находим первую линию слоя Set En = L.EnumElements En.MoveFirst Do While Not En.IsEOF If En.GraphType = 0 Then Exit Do En.MoveNext Loop Set El = L.Elements.Item(En.ElemID) 'Свободный ключ: на единицу больше наибольшего занятого Key = L.GetLargestID + 1 'Флаг 1 - проверять, свободен ли ключ MsgBox "Копия линии " & En.ElemID & " получила ID " & L.AddElementEx(El, Key, 1) End SubPython:
import zulu def Macro_Layer_AddElementEx(): # Берем активный слой карты L = zulu.App.ActiveMapDoc.Layers.Active # Находим первую линию слоя En = L.EnumElements() En.MoveFirst() while not En.IsEOF() and En.GraphType != 0: En.MoveNext() El = L.Elements.Item(En.ElemID) # Свободный ключ: на единицу больше наибольшего занятого key = L.GetLargestID() + 1 # Флаг 1 - проверять, свободен ли ключ print("Копия линии", En.ElemID, "получила ID", L.AddElementEx(El, key, 1))