Как вы уже поняли, скрипт представляет собой последовательность команд. Такими командами могут быть практически любые команды из арсенала команд меню и панелей инструментов Digitals, а также целый ряд внутренних неинтерактивных команд, “видимых” только для скриптов.
Имена внутренних команд начинаются с символа
@
(собачка). Добрая часть внутренних команд не
имеет аналогов в интерфейсе Digitals и не может быть вызвана
иначе, как из скрипта.
Внутренние команды часто имеют дополнительные агрументы, которые записываются после самой команды. Синтаксис передачи аргументов может отличаться от команды к команде - поэтому, задействуя ту или иную команду, вам следует обратить внимание на ее описание.
Команды из интерфейса вызываются по их именам - так, как
если бы мы вызывали их из меню. Например, если в скрипте требуется
выполнить вставку из буфера обмена, следует включить в его текст
команду Правка | Вставить
.
Вместе с тем, каждая команда из интерфейса имеет
внутреннее имя, которое можно “подсмотреть”
в строке статуса окна, изображенного на Рис.D.1, выбрав
соответствующую команду в списке. Если мы хотим вызвать
интерфейсную команду по ее внутреннему имени, то для этого
используется команда @ExecuteMenu
, которая
принимает внутреннее имя в качестве своего аргумента. Например,
упомянутая выше команда Правка | Вставить
будет
выглядеть в этом случае как @ExecuteMenu
EditPaste
.
Команды интерфейса нередко вызывают на экран диалоги для
настройки некоторых параметров, что не всегда приемлимо в рамках
скрипта. Чтобы “проскочить” диалог, в скрипте используется функция
@SendChars
, которая располагается
перед вызовом соответствующей команды и
посылает диалогу последовательность нажатий на клавиатуру, как
если бы это сделал пользователь, сидящий перед экраном
компьютера.
Например, следующий код создаст группу с именем “Участок”.
Здесь <CR>
означает посылку нажатия
клавиши Enter.
@SendChars Участок<CR> Группа | Создать...
Отметим, что часть интерфейсных команд имеют свои
неинтерактивные скриптовые аналоги. Например, команда
@Map.Generalization 0.1
выполнит генерализацию
с графической точностью 0.1 мм без вызова диалога. Разумеется, что
помощь команды @SendChars
в этом случае не
понадобится.
По функционалу команды скрипта можно условно разделить на такие группы:
Группа различных вспомогательных команд. Сюда входят, например, команды для извлечения пути к файлу, команды для соединения и разделения строк и множество других.
Фактически, в эту группу попадают все инструменты, воздействующие на помеченные объекты или на карту в целом. Самый простой пример - это команды взаимодействия с буфером обмена.
Немалая часть инструментов работает с помеченными объектами.
Поэтому, в скрипте нам необходимы команды для получения выборки.
Это могут быть как команды из интерфейса Digitals, например,
Пометить | Все
или Пометить | Внутри
помеченного
, так и команды типа
@Map.SelectByParameters
.
Последняя команда, в частности, помечает объекты подобно
диалогу @Map
, которые начинаются со слова
Select
.
Под элементами карты мы подразумеваем все ее части: саму карту, список слоев, список параметров, объекты карты и содержимое их параметров, а также подписи, вынесенные в карту. Некоторые команды доступа запрашивают значения, некоторые позволяют их изменить. Часть команд работает и на запрос и на изменение.
Элемент Map
(карта) организован в виде
массива (списка), содержащего все открытые карты. Каждая карта
Map
содержит массив Object
,
содержащий объекты карты. Этот массив, в свою очередь, содержит
массив Parameter
, в котором хранятся значения
параметров, связанных с объектом.
Обращаться к элементам массива можно по номеру, указывая его
в [ ]
квадратных скобках.
Примеры:
@Map.Count
- Возвращает количество
объектов в активной карте.
@Map[2].Layers.Count
- Возвращает
количество слоев во второй карте.
@Map.Object[
- Доступ к содержимому параметра
N
].Parameter[M
]
объекта
M
текущей
карты.N
$X=@Map.Object[
- Запись координаты X точки
N
].Point[M
].x
объекта
M
текущей карты в
переменную N
$X
(о переменных чуть ниже).
@Map[1].Object[1].Point[1].z 0
-
Установка координаты Z в 0 для первой точки первого объекта первой
карты.
@Map.Parameters.Get
- Возвращает по номеру
параметра его код (ID), тип и наименование.Number
Некоторая часть команд доступа работает с предварительно
помеченными объектами. Обратите внимание на команды, имена которых
начинаются с @Map.Selected
.
Для взаимодействия с пользователем предусмотрены команды
организации запросов (в группе команд @Dialog
)
и команды, ответственные за вывод окна хода выполнения скрипта
(группа @Progress
).