AddElementEx method (Layer)

Добавляет в слой заданный элемент c присвоением ему заданного ID.

Применяется к:

Layer

Синтаксис:

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 Sub

Python:

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))