Библиотека полезных скриптов

Формирование KMZ файлов с уровнями детализации на основе DMF карт с 3D моделями

Скрипт выполняет полный цикл обработки исходных 3D моделей зданий и сохраняет результат в KMZ формате. Подробнее про используемые команды скрипта смотрите здесь. Пример исходного DMF файла (фрагмента полной карты) во вложении.

;каталог исходных тайлов
$SrcDir=\Bond\Src
;каталог выходных тайлов
$DstDir=\Bond\Out
;каталог поиска текстур
$TexDir=\Server\Images
;каталог сгенеренных KMZ файлов моделей
$KMZDir=\Bond\Out\KMZ
;номер первого тайла для обработки
$FileMin=138
;номер последнего тайла для обработки
$FileMax=138
;
;поехали
$I=$FileMin
%Start
;имя текущего файла
$S=$SrcDir$I.dmf
$B=@FileExists $S
;файл не найден, пропускаем
@if $B<>1 @Goto %Skip
;открываем файл
@FileOpen $S
;если нет 3D объектов, пропускаем
$B=@Map.Has3DModels
@if $B<>1 @Goto %Skip
;помечаем слои рельефа
@Map.SelectLayer ID1001
@Map.SelectLayer ID1002
@Map.SelectLayer ID1003
;строим стены
ЦМР | Переприсвоить высоты
;удаляем помеченные
Правка | Удалить
;накрываем крыши (на случай дождя)
@Map.CoverMultiFlatRoofs
;создаем выходной каталог
$Dir=@Concat $DstDir,$I,
@CreateFolder $Dir
;сохраняем карту в выходном каталоге
$S=@Concat $Dir,$I,.dmf
@Map.SaveToFile $S
;объединяем 3D объекты
@Map.Merge3DObjects
;сохраняем результат объединения
$S=@Concat $Dir,$I,merged.dmf
@Map.SaveToFile $S
;перед генерацией текстур сохраняем под новым именем
$S=@Concat $Dir,$I,tex.dmf
@Map.SaveToFile $S
;генерим текстуры
@Window.GenerateTextures $TexDir pak jpg
;уменьшаем разрешение текстур
@Map.MergeTextures 4096 0.15
;сохраняем результат
@Map.SaveToFile $S
;помечаем рамку тайла, ограничивающего все 3D объекты
@Map.DeselectAll
@Map.SelectLayer ID1006
;экпортируем в KMZ с уровнями детализации
$S=@Concat $KMZDir,$I,.kmz
@Map.SaveToKMZ $S LOD 3DObjs
%Skip
@CloseMap
$I=$I+1
;переход к следующему файлу
@if $I<=$FileMax @Goto %Start
;создаем KMZ со ссылками на все вложенные
@CreateCommonKMZ $KMZDir ShowInfo

138.dmf (137 KB)