Команды

Как вы уже поняли, скрипт представляет собой последовательность команд. Такими командами могут быть практически любые команды из арсенала команд меню и панелей инструментов Digitals, а также целый ряд внутренних неинтерактивных команд, “видимых” только для скриптов.

Внутренние команды

Имена внутренних команд начинаются с символа @ (собачка). Добрая часть внутренних команд не имеет аналогов в интерфейсе 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[N].Point[M].x - Запись координаты X точки M объекта N текущей карты в переменную $X (о переменных чуть ниже).

@Map[1].Object[1].Point[1].z 0 - Установка координаты Z в 0 для первой точки первого объекта первой карты.

@Map.Parameters.Get Number - Возвращает по номеру параметра его код (ID), тип и наименование.

Некоторая часть команд доступа работает с предварительно помеченными объектами. Обратите внимание на команды, имена которых начинаются с @Map.Selected.

Команды для взаимодействия с пользователем

Для взаимодействия с пользователем предусмотрены команды организации запросов (в группе команд @Dialog) и команды, ответственные за вывод окна хода выполнения скрипта (группа @Progress).