AddEnumElement method (Layer)

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

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

Layer

Синтаксис:

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 Sub

Python:

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)