Аналитика
http://www.geosystema.net/forum/

Библиотека полезных скриптов
http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539
Страница 1 из 11

Автор:  Sergey Oleynik [ 24 апр 2012 14:42 ]
Заголовок сообщения:  Библиотека полезных скриптов

Назрела тема для обмена различными полезными скриптами. Милости просим всех, кому есть чем поделиться.

Пояснение для тех, кто не знаком со скриптами Digitals

Скрипт позволяет автоматизировать различные типовые операции, обычно выполняемые над группой карт и/или объектов. Даже если вы не умеете писать скрипты сами, то можете использовать подходящие готовые.

Для использования готового скрипта нужно создать пользовательскую панель инструментов (меню Окно|Создать панель инструментов), щелкнуть на ней правой кнопки мыши и выбрать пункт контекстного меню Добавить кнопку. Затем скопировать текст скрипта в правую часть открывшегося окна редактирования и нажать ОК.

Затем, по желанию, можно назначить кнопке иконку, имя и т.д. с использованием все того же контекстного меню, вызываемого щелчком правой кнопкой мыши на кнопке со скриптом.

Текст скрипта в сообщении выделяется курсивом - копировать нужно только его.

Дополнительно

Инструментальные панели и язык скриптов Digitals

Автор:  Sergey Oleynik [ 24 апр 2012 14:53 ]
Заголовок сообщения:  Автоматическая загрузка последних открытых карт

Автоматическая загрузка последних открытых карт

Сохранение списка всех открытых карт по выходу из программы в файл openfiles.txt и их автоматическое открытие при повтором запуске Digitals.

%Events.OnShutdown
$C=@MapCount
@If $C<=0 @Break
$I=1
%Start:
$S=@Map[$I].Filename
@Text.Add $S
$I=$I+1
@If $I<=$C @Goto %Start
@Text.Save openfiles.txt
%Events.OnStartup
@Text[N].Load openfiles.txt
$C=@Text.Count
@If $C<=0 @Break
$I=1
%Start:
$S=@Text.Line[$I]
@FileOpen $S
$I=$I+1
@If $I<=$C @Goto %Start


Примечание: Для корректной работы скрипта нужно установить для кнопки опцию Автозагрузка.

Автор:  Sergey Oleynik [ 24 апр 2012 14:59 ]
Заголовок сообщения:  Восстановление всех удаленных объектов карты

Восстановление всех удаленных объектов карты (undelete)

Восстанавливает все объекты карты, которые удалялись в текущей сессии (после открытия файла) и помечает их.

$V=@Version
@If $V<41023 @Break Для работы скрипта нужно обновить программу
$C=@Map.Count
@IF $C=0 @Break
@Map.DeselectAll
$I=1
%Start:
$D=@Map.Object[$I].Deleted
@If $D=0 @Goto %Next
@Map.Object[$I].Deleted 0
@Map.Object[$I].Select
%Next:
$I=$I+1
@If $I<=$C @Goto %Start
@Window.Refresh

Автор:  Sergey Oleynik [ 24 апр 2012 15:24 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Быстрое конвертирование открытой карты в другой формат

Сохраняет открытую карту в другой формат (по выбору: xml, dxf, dwg, in4, shp, mid/mif), закрывает текущее окно и открывает вновь созданный файл.

$M=@Map.Modified
@If $M=1 @Break Сохраните текущие изменения
$S=@Map.ClearFilename
$E=@Dialog.Select Сохранить как|xml|dxf|dwg|in4|shp|mif
@If $E= then @Break
$S=$S.$E
@Map.SaveToFile $S
$FE=@FileExists $S
@If $FE=0 @Break
@CloseMap
@FileOpen $S


Примечание: Если вам не нужно закрытие текущей карты и открытие новой, то удалите четыре последние строчки скрипта после команды @Map.SaveToFile $S. Вы также можете изменить список форматов в четвертой строке, оставив только необходимые вам или, наоборот, добавив новые.

Конвертирование всех открытых карт в формат DXF

$C=@MapCount
$I=0
%Start
$I=$I+1
@If $I>$C then @Break
$F=@Map[$I].ClearFilename
@Map[$I].SaveToFile $F.dxf
@Goto %Start


Примечание: Для конвертирования в любой другой формат, замените dxf на нужное расширение в предпоследней строке скрипта.

Конвертирование всех карт в папке в другой формат

Когда карт слишком много и открыть их все одновременно не получается, можно использовать скрипт, который по очереди откроет все файлы из заданной папки и сохранит в другой формат.

$Filter=*.dmf
$F=@Dialog.SelectFolder Укажите папку с картами
@Text.FolderList $Filter $F
$C=@Text.Count
@If $C=0 @Break В папке "$F" отсутствуют файлы $Filter
$I=0
%Start
$I=$I+1
@If $I>$C then @Break
$F=@Text.Line[$I]
@FileOpen $F
$F=@Map.ClearFilename
@Map.SaveToFile $F.dxf
@CloseMap
@Goto %Start


Примечание: Скрипт ищет и конвертирует все DMF файлы в указанной папке. Если исходные файлы в другом формате, замените фильтр в первой строке скрипта (например $Filter=*.in4 или $Filter=*.*). Для конвертирования не в DXF, а в другой формат, замените dxf на другое расширение в третьей с конца строке скрипта. Если необходимо обработать файлы не только в указанной папке, но и во всех ее подпапках, то вместо функции @Text.FolderList можно использовать @Text.FolderListTree.

Автор:  Sergey Oleynik [ 24 апр 2012 15:41 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Поиск участка с заданным кадастровым номером

Ищет на индексно-кадастровой карте участок с заданным номером. Поиск выполняется по значениям двух параметров (сначала SC - для In4-участков, а затем ID7000513 для участков с параметрами в формате XML).

@Map.DeselectAll
$CN=@Dialog.Ask Кадастровый номер
@Map.FindByParameters 1|SC=$CN
$S=@Map.SelCount
@If $S>0 @Goto %Show
@Map.FindByParameters 1|ID7000513=$CN
$S=@Map.SelCount
@If $S=0 @Break Участок не найден
%Show:
@Window.ShowSelected


Этот скрипт легко модифицировать для быстрого поиска по другим параметрам, например по адресу и т.д.

Автор:  Bondarets Alexander [ 26 апр 2012 14:34 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Формирование 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.02 Кб]
Скачиваний: 725

Автор:  Sergey Oleynik [ 31 май 2012 11:51 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Разворот подписей объектов

Выполняет разворот всех подписей помеченных объектов на заданный угол

$S=@Map.SelCount
@If $S<=0 @Break Нужно пометить объекты
$Angle=@Dialog.Ask Угол разворота подписей Default=0
$Angle=-$Angle*10
$N=0
$C=@Map.Parameters.Count
%Start:
$N=@Map.NextSelected $N
@If $N<=0 @Goto %Finish
$I=1
%NextParam
$S=@Map.Object[$N].Caption[$I]
@if $S= @Goto %NextCap
@Map.Object[$N].Caption[$I] * * * $Angle
%NextCap:
$I=$I+1
@If $I<$C @Goto %NextParam
@Goto %Start
%Finish:
@Window.Refresh

Автор:  voha [ 25 июл 2012 15:15 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

sotnikoff_dimka писал(а):
получается нужно изменить строку $CN=@Dialog.Ask Кадастровый номер.... что нужно там написать?
Адреса у нас присвоены участкам в таком виде: "804,86100,Донецька область,м.Макіївка,-,вул.Іванов,1,-,1"
в поиске весь адрес нужно будет вводить, либо можно ввести только название улицы?

В темі запитів на функції

Автор:  Dmitry_Zolotar [ 31 авг 2012 10:38 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Во вложенном архиве содержится два скрипта и панель с кнопкой, распакуйте архив в папку Digitals.
1. FindLeftTopPoint
Единственный аргумент - номер объекта в карте, результат - номер левой верхней точки объекта. Наличие открытой карты и объекта с заданным номером не проверяется.

2. StartFromTopLeft
Скрипт делает начальной левую верхнюю точку всех помеченных замкнутых объектов (игнорируються сложные полигоны) в активной карте. Используется скрипт из п.1, при переносе этого скрипта в какую-либо подпапку папки Library необходимо изменить строку $SP=%Library.FindTopLeftPoint $SO на $SP=%Library.Имя_подпапки\FindTopLeftPoint $SO.

P.S. В скрипте используется новая функция скриптов @Map.Object[N].StartFromPoint PointIndex, доступная в версиях Ged.exe, вышедших после 30.08.2012.

Вложения:
Unpack2DigitalsFolder.zip [1.23 Кб]
Скачиваний: 669

Автор:  Sergey Oleynik [ 05 дек 2012 18:22 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

ЕЦКО писал(а):
Доброе время суток!
Можно ли сделать скрипт на подобие *Быстрое конвертирование открытой карты в другой формат* выполняющий функцию *Файл :arrow: - Сохранить как*
Хочеться *Файл :arrow: - Сохранить в ХМЛ :arrow: Закрыть файл* - что б кадастровый номер выводился автоматически в название и закрывался без запроса.:idea:

Файл | Сохранить в XML...
@CloseMap

Автор:  Sergey Oleynik [ 15 янв 2013 11:38 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Пометка объектов карты, имеющих подписи высот

$C=@Map.Count
@If $C<=0 @Break
$I=1
@Map.BeginUpdate
%Start:
$S=@Map.Object[$I].Caption[-2]
@If $S= @Goto %Next
@Map.SelectObject $I
%Next:
$I=$I+1
@If $I<=$C @Goto %Start
@Map.EndUpdate

Автор:  Sergey Oleynik [ 07 фев 2013 18:09 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Сброс коэффициента масштабирования объектов

$C=@Map.Count
@If $C<1 @Break
$N=1
%Start:
@Map.Object[$N].Scale 0
$N=$N+1
@If $N<=$C @Goto %Start


При использовании команды Правка|Специальная вставка|В другом масштабе объекты карты масштабируются (растягиваются или сжимаются) и им присваивается специальный коэффициент масштабирования. Этот коэффициент используется для приведения площади и периметра измененного объекта к исходным значениям до изменения.

Никогда не используйте вставку в другом масштабе в ваших рабочих картах. Эта команда предназначена только для печати документов, схем и т.д.

Автор:  Dmitry_Zolotar [ 25 фев 2013 09:58 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Замена строк в значениях параметров во всех dmf-файлах в указанной папке

$SearchText=@Dialog.Ask Введите текст для поиска
$STL=@Calc Length("$SearchText")
@if $STL=0 then @Break Введите непустой текст
$ReplaceText=@Dialog.Ask Введите текст для замены
$Path=@Dialog.Ask Путь к папке Default=С:\Digitals
@Text[0].FolderListTree *.dmf $Path
$MapCount=@Text[0].Count
@if $MapCount=0 then @Break Файл(ы) не найдены
$FileNumber=0
%LoopEachFile
$FileNumber=$FileNumber+1
$MapFileName=@Text[0].Line[$FileNumber]
@FileOpen $MapFileName
$OC=@Map.Count
$PC=@Map.Parameters.Count
$CC1=0
$I=0
%LoopObject
$I=$I+1
$J=0
$L=@Map.Object[$I].Layer
$LD=@Map.Layers.Get $L
@Dialog.Message $LD
%LoopParameter
$J=$J+1
$S=@Map.Object[$I].Parameter[$J]
$CC2=0
%Repeat
$IP=@Calc pos("$SearchText","$S")
@if $IP=0 then @Goto %Continue1
$S=@Calc delete("$S",$IP,$STL)
$S=@DequoteText $S
$S=@Calc insert("$S","$ReplaceText",$IP)
$S=@DequoteText $S
$CC2=$CC2+1
@if $CC2>100 then @Goto %Continue1
@Goto %Repeat
%Continue1
@if $CC2=0 then @Goto %Continue2
$CC1=$CC1+1
@Map.Object[$I].Parameter[$J] $S
%Continue2
@if $J<$PC then @Goto %LoopParameter
@if $I<$OC then @Goto %LoopObject
@if $CC1>0 then @Map.SaveToFile $MapFileName
@if $CC1>0 then @Text[1].Add $MapFileName изменен
@if $CC1=0 then @Text[1].Add $MapFileName не изменен
@CloseMap
@if $FileNumber<$MapCount then @Goto %LoopEachFile
@Text[1].Save $Path\Changes.log
@Dialog.Message см. лог-файл $Path\Changes.log

Автор:  Bondarets Alexander [ 25 фев 2013 11:14 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Пересчет всех In4-файлов в указанной папке в новую систему координат (основан на датумах)

;выбираем папку с исходными файлами
$Ext=.in4
$InF=@Dialog.SelectFolder Укажите папку с картами
;формируем список файлов в папке
@Text.FolderList *$Ext $InF
;проверяем или список пустой
$C=@Text.Count
@If $C=0 @Break В папке "$InF" отсутствуют файлы $Ext
;для сконвертированных файлов создаем подкаталог
$OutF=$InF\TransformedToSK63
@CreateFolder $OutF
;очищаем подкаталог, если он уже был создан ранее
@CleanFolder $OutF
;открываем файлы из списка по одному
$I=0
%Start
$I=$I+1
@If $I>$C then @Break
$InF=@Text.Line[$I]
@FileOpen $InF
;пересчитываем в новую СК
@Map.RecalculateToNewDatum Имя_местной_СК SK63
;меняем значение дескриптора, указывающего на СК
@Map.SelectLayer ID10000
@Map.Selected.ChangeParameter ID10050 2,X
;сохраняем в подкаталоге
$InF=@Map.ClearShortFilename
@Map.SaveToFile $OutF\$InF$Ext
@CloseMap
@Goto %Start


Если строку @Map.RecalculateToNewDatum Имя_местной_СК SK63 заменить на строки

@if $I > 1 then @SendChars <CR>
Карта | Система координат...


тогда можно выполнять пересчет, основанный на связующих точках. При этом окно Карта>Система координат откроется перед началом трансформации (здесь нужно ввести координаты связующих точек). И все найденные файлы будут пересчитаны в новую систему координат на основе введенных точек.

Автор:  Sergey Oleynik [ 25 фев 2013 13:09 ]
Заголовок сообщения:  Re: Библиотека полезных скриптов

Установка слоя помеченного объекта слоем для сбора

При создании топографических карт с большим количеством слоев выбор слоя из списка отнимает время. Данный скрипт устанавливает слой для сбора по помеченному объекту. Кнопке со скриптом нужно назначить горячую клавишу, например \ (которая на многих клавиатурах находится выше клавиши Enter).

Теперь, не покидая режима сбора будтет достаточно нажать Enter для выбора объекта нужного слоя, а затем \ для установки его в качестве текущего.

$N=@Map.NextSelected
@If $N<=0 then @Break
$L=@Map.Object[$N].Layer
@Map.SetCollectionLayer $L

Страница 1 из 11 Часовой пояс: UTC + 2 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/