RUS  ENG 

Временный (виртуальный) слой

Страницы: 1
RSS
Временный (виртуальный) слой
 
Можно реализовать временный слой, который не сохраняется в файл?
Часто необходимо иметь какой-то промежуточный слой для данных (например, буферов), которые нужны только один раз, при этом можно было бы избежать создание слоя, потом его удаление. А если у пользователя нет права создания слоя на сервере - вообще тупиковая ситуация.
 
Предлагаю создавать временные слои с помощью макросов. Например:
Код
Sub CreateTempLayerWithTrigon()
   Set zulutools_obj = CreateObject("ZuluLib.ZuluTools")
   Set polyline_obj = CreateObject("ZuluLib.PolyLine")
   Set elem_style_obj = CreateObject("ZuluLib.ElemStyle")
   Set tmp_layer = zulutools_obj.LayerCreateInMemory("test_layer")

   Application.MessageBox "Имя временного слоя: " & tmp_layer, "Информация", vbOk
   ' Имя временного слоя: $in_memory$test_layer

   polyline_obj.AddPoint 0.0, 500.0
   polyline_obj.AddPoint 500, 0.0
   polyline_obj.AddPoint 500.0, 500.0
   polyline_obj.AddPoint 0.0, 500.0

   elem_style_obj.LineColor = &h0000FF
   elem_style_obj.LineStyle = 6
   elem_style_obj.LineWidth = 2

   If tmp_layer.AddPolyLine(polyline_obj, elem_style_obj, 1, 1) <> -1 Then
      Application.MessageBox "Во временный слой помещён красный треугольник", "Информация", vbOk
   End If
   Application.MessageBox "Количество объектов в слое: " & tmp_layer.ElementKeys.Count, "Информация", vbOk
   ' Количество объектов в слое: 1

End Sub
В данном случае, при обращении к этой подпроцедуре в памяти будет создан временный слой, а уже в слое нарисован треугольник (использование ломаных линий взято для примера).

На практике можно заметить, что количество объектов в слое увеличилось на единицу (при условии, что ломаная линия добавилась в слой). Следовательно, изменения в слое происходят, и в слой можно заносить информацию.
Изменено: Георгий Дорохов - 09.09.2020 14:59:39
Страницы: 1