StartSequentialWriteMode method (Layer)

Включает режим буферизованной записи объектов в слой.

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

Layer

Синтаксис:

Visual Basic:

Function StartSequentialWriteMode() As Boolean

Описание:

Режим предназначен для записи большого числа объектов: при переносе объектов из одного слоя в другой, при загрузке данных собственным конвертером и т.п. Объекты в этом режиме добавляются многократно быстрее, чем обычно.

Метод возвращает True, если режим включён. Если включить режим не удалось — например, слой недоступен для записи, — метод возвращает False. Повторный вызов при уже включённом режиме возвращает True и ничего не меняет.

В режиме объекты добавляются методами AddContour, AddElement, AddElementEx, AddEnumElement, AddEnumElementEx, AddFromWKT, AddPolyContour, AddPolyLine, AddPolyPolyLine, AddSimpleSymbol, AddSymbol, AddSymbolEx, AddText и AddTextByType. Добавленные объекты становятся доступны только после завершения режима методом FinishSequentialWriteMode: до этого их не учитывают обход EnumElements, поиск ElemIDByXY и габариты слоя GetBoundsRectangle, а метод GetLargestID возвращает прежнее значение. Линии, добавленные в режиме, после его завершения соединяются с узлами сети так же, как при обычной записи.

В режиме не проверяется, занята ли точка: символ добавляется и туда, где уже стоит другой символ.

Изменять и удалять объекты в режиме нельзя: метод DeleteElement возвращает -1, метод ChangeElemID — False.

Пример:

Visual Basic:

Sub Layer_StartSequentialWriteMode
'Берем активный слой карты
Set Src = Zulu.ActiveMapDoc.Layers.Active
'Создаем пустой слой той же структуры
Set Tools = CreateObject("ZuluLib.ZuluTools")
Tools.LayerCreateByExample Src.Name, "C:\Data\copy", "Копия слоя", 0
Set Dst = CreateObject("ZuluLib.Layer")
Dst.Open "C:\Data\copy"
'Переписываем объекты в режиме буферизованной записи.
'Ключи берем из исходного слоя: новый слой пуст, и проверка ID не нужна
Dst.StartSequentialWriteMode
Set En = Src.EnumElements
En.MoveFirst
n = 0
Do While Not En.IsEOF
  If Dst.AddEnumElement(En, En.ElemID, 0) <> -1 Then n = n + 1
  En.MoveNext
Loop
Dst.FinishSequentialWriteMode
MsgBox "Скопировано объектов: " & n
End Sub

Python:

import zulu

def Macro_Layer_StartSequentialWriteMode():
    # Берем активный слой карты
    Src = zulu.App.ActiveMapDoc.Layers.Active
    # Создаем пустой слой той же структуры
    zulu.ZuluTools().LayerCreateByExample(Src.Name, r"C:\Data\copy", "Копия слоя", 0)
    Dst = zulu.Layer()
    Dst.Open(r"C:\Data\copy")
    # Переписываем объекты в режиме буферизованной записи.
    # Ключи берем из исходного слоя: новый слой пуст, и проверка ID не нужна
    Dst.StartSequentialWriteMode()
    En = Src.EnumElements()
    En.MoveFirst()
    n = 0
    while not En.IsEOF():
        if Dst.AddEnumElement(En, En.ElemID, 0) != -1:
            n += 1
        En.MoveNext()
    Dst.FinishSequentialWriteMode()
    print("Скопировано объектов:", n)