AddEnumElementEx method (Layer)

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

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

Layer

Синтаксис:

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 Sub

Python:

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)