Новые команды для работы с 3D объектамиДобавлены команды подготовки 3D объектов, оптимизации геометрии и текстур, разбивки больших 3D карт на фрагменты, подготовки к экспорту в Google Earth с поддержкой уровней детализации. Некоторые из нижеописанных команд появились ранее, но до сих пор не были описаны.
Данные команды являются функциями скриптов Digitals и могут выполнятся последовательно в сочетаниями с другими действиями. Это позволяет максимально автоматизировать процесс подготовки 3D объектов. Подробнее
здесь.
После имени функции следуют ее параметры. Необязательные параметры помещены в кваратные скобки. Во многих функциях используется необязательный параметр
[ShowInfo], включающий вывод на экран диалогового окна с результатами выполнения функции. Показ этого сообщения останавливает выполнение скрипта и поэтому не рекомендуется при использовании в скрипте нескольких, последовательно вызываемых, функций.
Если в карте имеются помеченные объекты команды применяются к ним, иначе ко всем 3D объектам карты. 3D объекты карты должны находится в слоях с типом 3D модель.
Примеры 3D объектов.
@Map.Align3DObjects Accuracy [ShowInfo]Исправляет несовмещение точек с точками, точек с ребрами и точек с гранями внутри и между смежными 3D объектами.
Accuracy - м, максимальное расстояние между точками, точками и ребрами, точками и гранями при котором будет выполнятся совмещение.
Пример:
@Map.Align3DObjects 0.1 ShowInfo - совмещение в диапазоне 10 см, результат работы функции будет показан.
@Map.Align3DObjectsBottom [Range] [ShowInfo]Перемещает нижние точки смежных 3D объектов на одну высоту. Команда выравнивает основание смежных 3D объектов. Высота основания определяется самой нижней точкой. Вызывается автоматически внутри функции объединения смежных 3D объектов
@Map.Merge3DObjects.
Range - м, диапазон поиска нижних точек, если не задан - определяется автоматически. Вручную этот параметр следует задавать только, если изменяются высоты точек, которые должны оставаться неизменными.
Пример:
@Map.Align3DObjectsBottom - выравнивание основания смежных 3D объектов с автоматическим поиском точек, составляющих основание.
Выравнивание основания смежных 3D объектов (вид сбоку).
@Map.Scan3DObjects StepОбъединяет смежные 3D объекты, используя алгоритм
Marching cubes. Функция может быть применена для упрощения сложных объектов, например моделей деревьев.
Step - м, задает шаг сетки результирующего объекта. Чем ниже это значение тем точнее будет объединенный объект, но тем больше полигонов будет он содержать.
Объединение смежных объектов с получением регулярной сетки.
@Map.Simplify3DObjects MinVolume Accuracy [ShowInfo]Уменьшает число точек и граней 3D объектов. Команда вызывается до объединения смежных 3D объектов и до генерации текстур. Используется для получения низкополигональных моделей зданий, отображаемых при грубом уровне детализации. Надстройки и сложные крыши зданий преобразуются в плоские, контуры (отпечатки) зданий также упрощаются. Такие модели обычно не текстурируются а раскрашиваются близкими к текстурам цветами (см. команду
@Map.MergeTextures). После упрощения 3D объекты можно объединить командой
Map.Merge3DObjects.
MinVolume - м3, 3D объекты с объемом меньше указанного будут отброшены.
Accuracy - м, определяет максимальное отличие контура (отпечатка) упрощенных объектов от их исходного контура.
Пример:
@Map.Simplify3DObjects 5 0.5 ShowInfo - упрощение 3D объектов. Объекты с объемом меньше 5 м3 выбрасываются. Упрошенный контур объекта будет отличаться от исходного не более чем на 50 см. После выполнения функции будет показана информация о результатах ее работы.
Упрощение 3D объектов.
@Map.Merge3DObjects [ShowInfo]Объединяет смежные 3D объекты, удаляет невидимые грани и части граней, уменьшает площадь поверхностей 3D объектов. Используется для формирования зданий. Все соприкасающиеся объекты считаются принадлежащими одному зданию. Команда выполняет оптимизацию геометрии 3D объектов. Уменьшение площади поверхности объектов означает уменьшение размеров текстур при последующей их генерации. Кроме того уменьшается число объектов в карте. Объекты составляющие здание объединяются в один объект, которому можно назначить семантические данные, например, адрес.
Объединение смежных 3D объектов (вид снизу).
@Map.MergeTextures MaxTextureSize [MinGSD] [ColoredFaces] [ShowInfo]Уменьшает число текстур, объединяя изображения текстур каждой грани 3D объекта в одно или несколько изображений. Может уменьшать разрешение текстур, что используется для получения представлений объектов на грубых уровнях детализации. Используется для оптимизации 3D моделей. После выполнения генерации текстур, файл изображения формируется для каждой грани 3D объекта, при этом захватываются области за пределами грани. Функция упаковывает изображения всех граней в одно или несколько изображений, оптимально размещая текстуры и отбрасывая ненужные части.
MaxTextureSize - пикс, максимально допустимый размер объединенного изображения. Для любой видеокарты есть ограничение на максимальный размер текстуры. Для современных видеокарт это 8192 пикс. Значение по умолчанию 4096.
MinGSD - м/пикс, лучшее допустимое разрешение текстур. Исходное разрешение текстур не постоянно и зависит от угла съемки грани объекта. Текстуры с разрешением лучшим, чем указано в MinGSD будут ресемплированны до заданного значения. Текстуры с разрешением хуже или равным MinGSD остаются без изменений. Используется для получения упрощенных представлений объектов на грубых уровнях детализации.
ColoredFaces - если параметр указан вместо текстурирования все грани раскрашиваются. Цвет каждой грани определяется средним цветом ее исходной текстуры.
Пример:
@Map.@Map.MergeTextures 4096 0.15 - объединение текстур. Максимально допустимый размер выходных текстур 4096 пикс. Разрешение текстур бедет уменьшено до 15 см.пикс.
Объединенные текстуры и текстурированная модель.
@Map.RemoveFaceBlinkingКорректирует геометрию 3D объектов для устранения мерцания перекрывающихся граней. Параллельные накладывающиеся грани при этом немного раздвигаются. Рекомендуется использовать вместо данной функцию
@Map.Merge3DObjects - эта функция не просто просто устраняет мерцание накладывающихся граней, а удаляет ненужные грани и части граней.
@Map.CoverMultiFlatRoofsГенерирует грани крыш для multiflat 3D объектов. Технология сбора multiflat объектов подразумевает создание контура основания объекта без формирования граней крыши. Так как multiflat объекты содержат более 4-х точек в полигоне контура основания, для формирования граней крыш необходимо выполнить триангуляцию этого полигона. Что и выполняет данная функция. Перед вызовом функции необходимо спроецировать нижние точки основания объекта на модель рельефа командой
ЦМР>Переприсвоить высоты. Это формирует стены зданий (при условии, что стены не были сформированы в процессе сбора 3D объектов).
Генерация граней крыш (вид сверху).
@Map.SetLayersVisibleRanges MinLevel MaxLevel [FromLayerNumber] [Latitude]Устанавливает диапазоны видимости слоев карты согласно уровням увеличения Google maps. Используется для разделения объектов по уровням увеличения. Например, на максимальном увеличении плана города должны быть показаны контуры зданий, на предыдущих уровнях достаточно показать лишь контуры кварталов. При этом диапазон видимости слоя зданий устанавливается соответствующим максимальному уровню увеличения Google maps.
MinLevel, MaxLevel - минимальный и максимальный уровни увеличения для которых расчитываются диапазоны видимости.
FromLayerNumber - номер первого слоя для которого выполняется установка диапазона видимости. Этот слой будет соответствовать уровню MinLevel. Следующий по порядку слой будет соотвесттвовать MinLevel+1 и так до MaxLevel. Если параметр FromLayerNumber не задан в конец списка будут добавлены новые слои и диапазоны видимости будут установлены для них. Для слоев с измененным диапазоном видимости к имени добавляется номер соответствующего уровня увеличения.
Latitude - широта центра карты, если не задана используется широта экватора. Для более точного расчета диапазона видимости слоев согласно уровням увеличения рекомендуется указывать реальное значение широты .
Пример:
@Map.SetLayersVisibleRanges 15 19 12 49.3 - установка диапазонов видимости для слоев с номерами от 12 до 16. Если в карте меньше 16-ти слоев (исключая служебные) в конец списка будут добавлены новые слои. Уровни увеличения от 15 до 19. Широта центра карты 49.3 гр.
@Map.SetParamsVisibleRanges MinLevel MaxLevel [FromParamNumber] [Latitude]Полностью аналогична функции @Map.SetLayersVisibleRanges только устанавливает диапазоны видимости не слоев а параметров карты. Используется для размещения подписей карты в различных уровнях увеличения. Например, на максимальном уровне на плане города нужно подписывать каждое здание, на предыдущем уровне достаточно вынести подписи только угловых зданий кварталов.
@Map.InsertGoogleTileFrames MinLevel MaxLevelВставляет в карту рамки, согласно разбивке на тайлы в Google maps и заданным уровням увеличения. Используется, например, для нарезки карты на фрагменты командой
@Map.CutMapByFrames. Для кажого уровня увеличения создается отдельный слой.
@Map.CutMapByFrames FileNameParamNumber OutFolder [ShowInfo]Делит карту на фрагменты и сохраняет каждый фрагмент в отдельный файл. Рамки, согласно которым производится нарезка карты, должны быть помечены перед вызовом команды. Используется при обработке 3D карт больших территорий. Такие карты проще нарезать на части и обрабатывать каждый фрагмент отдельно. Нарезка на части не разделяет смежные 3D объекты, составляющие здание. Все смежные объекты попадают в один фрагмент, в котором находится большая их часть.
FileNameParamNumber - номер параметра рамок, содержащий имена выходных файлов. Рамки должны содержать уникальный параметр, который будет использоваться для именования DMF файлов фрагментов. Это может быть номер фрагмента, или более сложное имя.
OutFolder - каталог сохранения выходных файлов.
Пример:
@Map.CutMapByFrames 12 d:\Out - нарезка карты на фрагменты. Имена выходных файлов будут взяты из параметра 12. Файлы фрагментоы будут сохраненны в каталог d:\Out. Рамки, по которым выполняется нарезка, должны быть помечены перед вызовом команды.
@Map.Show3DObjectsInfoПоказывает информацию о 3D объектах карты. Выводится количество 3D объектов, число испорченных 3D объектов, общая площадь поверхности и суммарный объем объектов.
Fix3DObjects [NoFix] [ShowInfo]Исправление геометрии неправильных 3D объектов. Исправляются только простые случаи. Правильный 3D объект должен состоять из списка точек граней, где на каждую грань приходится ровно 5 точек, за которыми следует разрыв. После последней грани разрыв отсутствует.
NoFix - не выполнять коррекции, просто показать число испорченных объектов.
@Map.CheckTextures [DeleteUnused] [ShowInfo]Поиск неиспользуемых и утерянных текстур. Неиспользуемые текстуры увеличивают размер источника текстур (файла или каталога текстур). Утерянные текстуры - это ссылки на отсутствующие файлы текстур.
DeleteUnused - если задано, неиспользуемые текстуры будут удалены из источника текстур.
Пример:
@Map.CheckTextures DeleteUnused ShowInfo - поиск неиспользуемых и утерянных текстур. Неиспользуемые текстуры будут удалены из файла или каталога текстур. Результат выполнения функции будет показан.
@Map.ExtractTexturesToFolderРаспаковывает текстуры карты из DTX или PAK файла в каталог. Имя каталога совпадает с именем карты с добавлением строки (Textures).
@Map.PackTexturesFromFolderУпаковывает текстуры карты в DTX файл из каталога текстур. Имя файла текстур совпадает с именем карты. Расширение файла текстур DTX (Digitals TeXtures).
@Window.GenerateTextures [pak] [jpg]Извлекает текстуры 3D объектов из снимков. Перед вызовом функции требуется открыть снимок при помощи команды
Растр>Открыть. Путь к файлу растра укажет программе каталог для поиска остальных снимков. Поиск производится в указанном каталоге и всех подкаталогах. Снимки должны иметь геопривязку в системе координат карты, либо в другой известной СК, с заданным
датумом. Геометрия 3D объектов должна быть полностью сформирована перед вызовом этой команды (см.
@Map.CoverMultiFlatRoofs,
@Map.Simplify3DObjects,
@Map.Merge3DObjects). После генерации текстур граней их необходимо объединить командой
@Map.MergeTextures.
pak - упаковать все полученые текстуры в один файл.
jpg - сохранять текстуры в JPEG формате, иначе - BMP.
Пример:
@Window.GenerateTextures pak - генерация текстур с поиском снимков в каталоге открытого растра. Извлеченные текстуры граней будут сохранены в BMP формате внутри одного файла.
@Merge3DMaps [ShowInfo]Объединяет открытые 3D карты. Копирует все 3D объекты и их текстуры в первую карту. Все скопированные 3D объекты помещаются в один слой, содержащий в своем имени имя карты - источника. Используется для формирования 3D карт с объектами представленными в различных уровнях детализации. Получить низкополигональные представления объектов можно, используя команду
@Map.Simplify3DObjects, уменьшить разрешение текстур можно при помощи
@Map.MergeTextures. В объединенной 3D карте каждый слой 3D объектов должен соответствовать своему уровню увеличения и иметь установленные при помощи команды
@Map.SetLayersVisibleRanges диапазоны видимости.
@DecodeGoogleTiles SourceFolder DestFolder [KMZ] PNG/JPG [{X-Y-Z}] [ShowInfo]Преобразовывает имена тайлов Google вида qrst к XYZ, где X-позиция фрагмента по горизонтали, Y-по вертикали, Z-уровень увеличения (Zoom). Также выполняется преобразование к заданному типу изображения (PNG или JPEG).
SourceFolder - каталог исходных файлов. Каталог должен существовать.
DestFolder - каталог результирующих файлов. Если каталог не существует, он будет создан. Если каталог с таким именем присутствует, все файлы из него перед выполнением команды будут удалены.
Если в именах каталогов встречаются пробелы, имена следует брать в кавычки. Например, "D:\1 Out".
KMZ - если задано, в каталоге SourceFolder отбираются только kmz файлы. Иначе файлы изображений jpg, png, bmp. Если в качестве входных указаны kmz файлы, они должны содержать изображение внутри.
PNG/JPG - задает формат выходных изображений. Нужно указывать либо PNG либо JPG.
{X-Y-Z} - задает маску имени выходного файла. Маска должна заключаться в фигурные скобки обязательно содержать буквы X,Y и Z, обозначающие места вставки позиции тайла по горизонтали, по вертикали и уровень увеличения тайла соответственно.
Функция используется для подготовки фрагментов изображений для использования их в пользовательских картах Google maps.
Пример:
@DecodeGoogleTiles D:\Src D:\Dst KMZ PNG {tileX_Y_Z} - получение изображений из kmz файлов во входном каталоге D:\Src и запись в выходной каталог D:\Dst. Формат выходных файлов png. Имя тайла задается маской {tileX_Y_Z} и будет иметь вид, например, tile12_20_14.
Вопросы и замечания