Включает режим буферизованной записи объектов в слой.
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 SubPython:
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)