Приложение D. Введение в Digitals Script
В коде вызываемого скрипта (подпрограммы) доступны специальные переменные с именами $PARAMETERS и $RESULT. Первая позволяет передать строку параметров в подпрограмму, а вторая передать результат обратно в вызывающий скрипт.
Переданную в подпрограмму строку парамеров можно разобрать на части с помощью функций для работы со строками, например, с помощью @StringPart.
По умолчанию функция @StringPart делит строку на части по пробелам. Таким образом можно передать в подпрограмму в одной строке числа, разделенные пробелом. Но @StringPart можно использовать и с другим разделителем. Допустим, вам нужно передать в подпрограмму пару переменных, содержащих пробелы. Давайте используем в качестве разделителя символ ~ (тильда):
$S1=Первая строка
$S2=Вторая строка
%Library.MyScript $S1~$S2
Тогда внутри подпрограммы мы можем разделить переданную строку на отдельные части таким образом:
$S1=@StringPart 1~$PARAMETERS $S2=@StringPart 2~$PARAMETERS
Для передачи скрипту длинных списков с неизвестным наперед количеством элементов можно использовать массив текстовых строк @Text. Например:
;Вызов скрипта
@Text.Add Первый элемент списка @Text.Add Второй элемент списка
;...
@Text.Add N-ый элемент списка $S=@Text.Text %Library.MyScript $S
;Текст скрипта
@Text.Text $PARAMETERS $C=@Text.Count
@If $C=0 @Break Список параметров пуст
;обработка строк списка параметров от 1 до $С через @Text.Lines[$I]
Передача результата из подпрограммы выполняется так: $RESULT=Возвращаемая_строка
Второй способ передачи параметров неофициальный. Дело в том, что для каждой карты в Digitals существуют глобальные переменные с именами @Map.TempInteger и @Map.TempString. Как понятно из названия, первая переменная может хранить число, а вторая строку. В строке, при желании, можно передать список значений неограниченной длины, воспользовавшись приемом, похожим на тот, что мы видели выше (передача строк с помощью массива @Text).
Пример использования:
;Скрипт 1
$A=ул. Первомайская $B=17
$C=кв. 32
; Добавляем значения трех переменных в текстовый список
Text.Add $A
Text.Add $B
346
Text.Add $C
; Засылаем содержимого текстового списка "на хранение" в TempString карты $S=Text.Text
@Map.TempString $S
;Скрипт 2
;Возвращаем содержимое текстового списка из TempString $S=@Map.TempString
@Text.Text $S
;Читаем значения трех переменных из списка
$A=@Text.Lines[1] $B=@Text.Lines[2] $C=@Text.Lines[3]
Отладка скриптов
Написать скрипт правильно - задача не простая. Digitals не предлагает средств отладки скрипта в классическом для сред программирования понимании. Тем не менее, у вас есть возможность вести протокол скрипта, в который записываются метки времени, выполненные команды скрипта и соответсвующие им результаты. Читая протокол, можно отследить ход выполнения, правильность работы тех или иных команд, а также оценить быстродействие.
Чтобы включить протоколирование, начните скрипт командой @OpenLog, а завершите командой @CloseLog. В этом случае протокол будет записан в файл с именем Digitals Server Log.txt в программную папку. Если протокол по умолчанию вас не устраивает, то вы можете указать путь к файлу протокола через пробел после команды @CloseLog. Например:
@CloseLog d:\MyLog.txt
Вы можете найти дополнительную информацию в следующих источниках:
•Онлайн справка3 Digitals. Мы уже говорили о ней выше, напоминаем еще раз. Описание языка также доступно в формате PDF, вы можете скачать файл по этой ссылке4 и распечатать для изучения.
•Ветка форума “Библиотека полезных скриптов5”. Здесь вы найдете множество примеров готовых скриптов, которые, возможно, захотите использовать в своей работе.
•Ветка форума “Все про скрипти6”. Здесь имеется масса полезной информации из реальной практики разработки скриптов, которой делятся пользователи программы.
•Статья7 Стаса Полищука “Работа со скриптами в Digitals”, которая описывает историю решения задачи централизованного накопления топосъемки в векторном формате с помощью несложных скриптов.
3http://www.geosystema.net/help/tag/skripty/#p2
4http://www.vingeo.com/update/rus/Digitals-scripts.pdf
5http://www.geosystema.net/forum/viewtopic.php?f=1&t=2539
6http://www.geosystema.net/forum/viewtopic.php?f=1&t=2809
7http://www.geosystema.net/digitals/?act=dig_script
347
Предметный
указатель
Символы
3D
здание шаблон сбора, 79 моделирование, 251 просмотр карты, 66, 249
A
AutoOrient, 338
D
Default layer, 129 Digitals
компоненты, 19 активные, 21 дополнительные, 335
лицензирование, 20 отладочная версия, 35
DipEdit, 268, 325
G
Geodesy, 37, 335
GeoTrans, 336 Google Maps, 224
O
OLE-объект, 90, 179
R
Reports, 304
T
Topotracer, 337
X
XMLChecker, 288
Б
библиотека условных знаков (см. условные знаки) сохранение во внешний файл, 161
блок, 175 псевдоним имени при экспорте
в DXF/DWG, 264
шаблон сбора, 79, 176
БТИ, 177, 333
буфер обмена, 88
правила вставки объектов, 88
В
выкопировка, 295, 315 вынос в натуру, 170
Г
Геодезическая сеть Украины, 224 горизонтали
построение, 247
Д
датум, 231 встроенный, 231
описание пользовательского, 233
З
засечки при геодезической съемке, 165
И
инструмент Автоинфо, 117
панель Инфо>Калькулятор, 111 панель Инфо>Список, 114 Перемещение, 85, 220
К
камера 3-DAS-1, 211, 216
карта автосохранение, 60 без шаблона, 61 внедренная, 177 вставка в карту, 177
зарамочное оформление, 183, 320 импорт/экспорт, 259 кадастровая, 271
как документ Digitals, 59
легенда (см. таблица условных обозначений) назначение системы координат, 63
(см. также датум) ограничение доступа к, 64 проверка качества, 194
с помощью сценария контроля, 201 рабочее окно, 30
управление, 67 разбивка на листы, 187, 321 разворот
всех объектов, 181 на экране, 66
растрово-векторная, 218 свойства, 62 сетка координат, 186 уклонов, 247 устройство, 125 шаблон, 61 “плоская”, 113
квазигеоид, 235
349
Предметный указатель
классификатор из чего состоит, 125
ключ защиты электронный, 21 колонка боковая, 32, 75 константа
CalculateRealTotals, 105 ControlScript, 201 CoordinateReportHeader, 294 DefaultNeighbor, 292 DocumentsFolder, 298 Explication, 291 ExplicationCode, 292 ExplicationParameter, 291 FixDEMNodes, 245 LetterA, 292 LocalDEMDistance, 245, 246 ScrollSelected, 67 ShapeLayerField, 266 ShowVolume, 256
текстовая для шаблонов документов, 148, 317 координата
географическая, 111, 191, 239 изменение в окне свойств, 97 округление, 230, 273 сетка, 186
Л
линия маркирование, 93 свойства, 95
структурная, характеризующая рельеф, 242, 244
М
маркирование, 93 маска
параметра, 148 для организации формы ввода, 149
для проверки заполнения, 149 при экспорте, 268 форматирования, 149
Менеджер параметров, 138 Менеджер подписей, 118 Менеджер слоев, 126 Менеджер условных знаков, 152 меню
Вид, 64, 66
Вид>Контроль узлов, 66, 194 Вид>Тематический, 193 Вид>Фон, 30
Вставка, 165, 177
Вставка>Блок триангуляции, 216 Вставка>Засечки, 165 Вставка>Номенклатурная рамка, 184 Вставка>Разбивка на листы, 187 Вставка>Растровое изображение, 218 Вставка>Сетка, 186 Вставка>Таблица, 189
Вставка>Условные обозначения, 186 главное, 29 Группа, 163
Карта>Генерализация, 181 Карта>Контроль, 201 Карта>Переопределить слои, 193 Карта>Проверка, 198 Карта>Система координат, 229, 239
Карта>Создать тематический вид, 193 Карта>Сравнить, 200 Карта>Статистика, 182 контекстное
параметра, 139 подписи, 121 слоя, 127 точки (узла), 93, 97
Окно>Просмотр файлов, 141 Окно>Статус слоев, 75 Орто, 221 Помощь, 33
Помощь>О программе, 21 Правка, 102 Правка>Найти, 115
Растр>Загрузка из Интернет, 224 Растр>Ориентирование, 210 Растр>Ориентирование>Архив, 213 Сервис, команды обрезки, 180 Сервис>Генератор отчетов, 315 Сервис>Графический фрагмент, 295 Сервис>Документы, 56, 315
Сервис>Документы>Текстовые константы, 316 Сервис>Настройка>закладка Вид, 67 Сервис>Настройка>закладка Сбор, 82 Сервис>Отчет, 254, 292 Сервис>Преобразовать, 172 Сервис>Преобразовать>Объекты в блок, 175 Файл, 59 Файл>Калибровка принтера, 322
Файл>Параметры страницы, 319 Файл>Печать, 319
ЦМР, 245
ЦМР, работа с горизонталями, 248 ЦМР>Переприсвоить высоты, 249 ЦМР>Профиль, 252 ЦМР>Сечение, 253 ЦМР>Фильтровать по ЦМР, 245
Н
навигатор применение при сборе, 83
режимы отображения, 68 настройки
записи обменных кадастровых файлов, 279 импорта/экспорта в SHP, 267
округления, 273 отображения карты, 67 режима стерео, 123 сбора, 82
350