Создает по слою рельефа обычный векторный слой с треугольниками триангуляции.
Visual Basic:
Function SaveToLayer(Path As String, UserName As String, nFlags As Long, vSrc As Variant) As Boolean
Path - имя слоя для записи.
UserName - пользовательское название слоя для записи.
nFlags - флаги, складываются:
1 - не создавать семантическую таблицу, а записать номера смежных треугольников и высоты в двоичный файл
1024 - создать описатель слоя
vSrc - с флагом 1 полный путь двоичного файла, иначе имя источника данных для таблицы.
Каждый треугольник триангуляции становится отдельным площадным объектом нового слоя (графический тип eGraphTypePrimSquare из eElemGraphType). Сам слой рельефа при этом не меняется.
Вместе со слоем создаётся семантическая таблица со столбцами Sys, X, Y, Z, Ngb1, Ngb2, Ngb3: координаты центра треугольника и номера трёх смежных с ним треугольников. Номера ссылаются на Sys той же таблицы и взаимны; 0 означает, что с этой стороны соседа нет, то есть сторона лежит на границе триангуляции.
По возвращаемому значению об успехе судить нельзя: при недоступном пути метод всё равно возвращает True, хотя слой не создаётся. Об успехе следует судить по самому слою: открыть его и убедиться, что объекты созданы.
Флаг 1 отменяет создание семантической таблицы: вместо неё создаётся двоичный файл, полный путь которого задаётся в vSrc. Путь должен быть полным — при относительном имени файл не создаётся, хотя метод возвращает True. В файле лежат записи по 16 байт, по одной на треугольник и в том же порядке, что и строки таблицы: три четырёхбайтовых целых — номера смежных треугольников, затем четырёхбайтовое число с плавающей точкой — высота.
Флаг 1024 добавляет к слою файл-описатель с расширением zl. Флаги складываются: 1025 и описатель создаёт, и таблицу отменяет.
Без флага 1 аргумент vSrc задаёт источник данных для таблицы. Имя источника начинается со знака доллара: $sqlite, $msaccess, $localdb. Пустая строка равнозначна $sqlite: таблица ложится в файл с расширением sqlite рядом со слоем, а $msaccess создаёт вместо него базу Microsoft Access с расширением mdb.
Есть ещё имя $local — оно относится к локальным таблицам Paradox и оставлено только для совместимости со старыми версиями. В 64-разрядной программе оно не работает, а в 32-разрядной требует установленного BDE.
Если источник недоступен, таблица не создаётся вовсе, а метод всё равно возвращает True. Наличие таблицы стоит проверять по самому слою.
Visual Basic:
Sub IReliefLayer_SaveToLayer 'Слой рельефа из примеров поставки Set L = CreateObject("ZuluLib.Layer") L.Open "C:\Program Files\ZuluGIS\Examples\Thermo\Kvartal\relief.ztr" Set R = L.ReliefLayer 'Сохраняем треугольники триангуляции в новый слой R.SaveToLayer "C:\Data\triangles", "Треугольники рельефа", 0, "" 'Возврату метода доверять нельзя, проверяем по самому слою Set T = CreateObject("ZuluLib.Layer") T.Open "C:\Data\triangles" 'Обход завершается по Key = -1, коллекция никогда не отдает Nothing Set els = T.Elements Set e = els.FirstItem n = 0 Do While e.Key <> -1 n = n + 1 Set e = els.NextItem Loop MsgBox "Треугольников в слое: " & n End SubPython:
import zulu def Macro_IReliefLayer_SaveToLayer(): # Слой рельефа из примеров поставки L = zulu.Layer() L.Open(r"C:\Program Files\ZuluGIS\Examples\Thermo\Kvartal\relief.ztr") R = L.ReliefLayer # Сохраняем треугольники триангуляции в новый слой R.SaveToLayer(r"C:\Data\triangles", "Треугольники рельефа", 0, "") # Возврату метода доверять нельзя, проверяем по самому слою T = zulu.Layer() T.Open(r"C:\Data\triangles") # Обход завершается по Key = -1, коллекция никогда не отдает None els = T.Elements e = els.FirstItem n = 0 while e.Key != -1: n += 1 e = els.NextItem print("Треугольников в слое:", n)