Програма Digitals у своєму функціоналі має інструментарій, який відкриває дуже широкі можливості для автоматизації і виконання найрізноманітніших завдань. Йдеться про скрипти. Скрипти Digitals – це власне внутрішнє програмне середовище на спрощеній мові програмування,  яке дозволяє створювати процедури виконання тих чи інших завдань, операцій за допомогою програмного коду.

Створений за допомогою скрипту сценарій автоматизує різноманітні завдання, які без скрипту довелося б виконувати вручну, використовуючи інтерфейс програми. Але це не все. Скриптове середовище Digitals включає багато команд та функцій, аналогів яким у інтерфейсі програми просто не знайти. Тобто, це цілий ряд додаткових можливостей.

Візуально скрипт, найчастіше, представляє собою кнопку на панелі інструментів, при натисканні на яку відбувається та чи інша процедура, запускається команда, чи послідовність команд. Також, окрім власної кнопки на панелі інструментів, скрипт може бути інтегрований прямо в карту, конкретний шар на карті, чи навіть в параметр на закладці інфо, і запускатися при певній події. Наприклад, кожного разу коли відкривається карта, коли виділяється об’єкт на карті, коли вносяться зміни в параметр  та інше. Про це детальніше згодом.

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

Для цього в головному меню програми (вгорі) вибираємо Вікно – Створити панель інструментів. Далі слід придумати назву для нашої панелі і ввести її у вікно, що появилося. Панелі зберігаються у файлах tlb в програмній папці. Натискаємо Зберегти.

В результаті в нас повинно появитися маленьке сіре вікно, яке можна переміщувати. 

Дальше на панелі інструментів треба створити кнопку. Для цього натискаємо всередині цього вікна правою клавішею і вибираємо команду Додатки кнопку. В результаті появиться вікно, як на зображенні нижче.


В лівій частині ми бачимо список доступних команд та функцій, а в правій буде, в майбутньому, знаходитися код нашого скрипту. Щоб добавити функцію в код скрипту, потрібно виділити її в лівому вікні і натиснути на кнопку Copy або просто клацнути на функції подвійним кліком.

Для зручності, можемо поставити галочку вгорі лівої частини вікна біля слова «Група» і, тим самим, ми згрупуємо наші функції по категоріях. Виділивши ту чи іншу функцію, внизу ми можемо побачити її опис. А ще нижче знаходиться вікно з пошуком функцій та команд.

Для прикладу, знайдемо найпростішу функцію @Dialog.Message Text і добавимо її у свій скрипт.

Для цього в згрупованому режимі знаходимо групу функцій @Dialog (групи функцій мають перед рядком стрілочки ►) і розгорнемо її, клацнувши два рази. Потім знаходимо @Dialog.Message Text і знову клацаємо два рази. Таким чинок вибрана функція повинна появитися у правій частині вікна. Замість Text пишемо будь-який текст. І натискаємо ОК. Кнопка добавлена на панель.

Якщо натиснути на кнопку – появиться вікно із нашим текстом.

Дальше нам слід перемістити панель в зручне місце і для того, щоб вона набрала вигляду дійсно панелі інструментів, нажимаємо на кнопці правою клавішею і знімаємо галочку навпроти пункту Заголовок. Тим самим способом можна вносити зміни в скрипт, присвоювати кнопці назву, призначати зображення та робити інші дії над нею.

Тепер розглянемо елементи, з яких може складатися скприпт.

Коментарі

Коментарі – це звичайний текст у скрипті, який ніде не висвітлюється в результаті, а служить тільки як засіб опису, нотацій тощо для розробника скрипту. Коментар мусить завжди починатися із крапки з комою («;»). Тобто, рядки які починаються з «;» скриптом ігноруються. Таким же методом можна, також, відключати, не видаляючи, команди та функції.

Приклад:

Функції

Функціями в скриптовій мові Digitals прийнято вважати скриптові команди, які починаються із символу @ (собачка). Всього в скриптах Digitals зараз наявно більше як 400 різноманітних функцій. І їх список продовжує розширюватися.

Найпростіші функції:

@ActivateMap Number – активує карту з номером Number

@Dialog.Message Text – виводить вікно з повідомленням Text (замість Text можна вказати свій текст)

@Break Text – зупиняє роботу скрипту і виводить повідомлення (якщо задано значення параметра Text)

@Map.SelectAll - виділяє всі об'єкти карти

@Map.DeselectAll - знімає виділення з усіх об'єктів карти

@Map.SelectObject Number - виділяє об'єкт карти з номером Number

@Map.SelectedObject - присвоює певній перемінній номер виділеного об'єкта

@Map.Copy - копіює виділені об'єкти в буфер обміну

@Map.Paste - вставляє на карту вміст буфера обміну

@Map.Count - визначає кількість об'єктів на карті

@Map.SelCount - визначає кількість виділених об'єктів карти

@MapCount - визначає кількість відкритих карт

@Date – повертає поточну дату

@DequoteText – видаляє лапки на початку і в кінці строки

@StringPart Number String – витягує частину символьного рядка (Number – номер частини, String – значення рядка, а символ між ними є роздільником, по якому слід шукати, наприклад, значенням @StringPart 1 Іванов Іван буде просто Іванов, Значенням @StringPart 2,А,Б,В буде Б, @StringPart 1/А/Б буде А

@Run - запускає зовнішню програму (exe-файл)

@Run D:\Список файлів.txt

@ProgramFolder – повертає шлях до папки, в якій знаходиться програма Digitals

 

Команди інтерфейсу

Команди інтерфейсу – це звичайні команди меню чи стандартних панелей інструментів, які доступні і без скриптів. Вони можуть бути прописані в коді скрипту кирилицею, наприклад , Правка | Копіювати.

Щоб добавити в скрипт таку команду із меню чи панелі інструментів, найзручніше ввести її назву (чи частину назви) у вікні пошуку внизу і вибрати з результату.

Перемінні

Проміжні значення, які ми отримуємо від скриптових функцій та команд, можна зберігати в перемінних. Назви перемінних можуть бути написані в довільній формі, але тільки латиницею і починатися символом $ (знак долара). В коді скрипту перемінні підсвічені різними кольорами.

Наприклад, $Obj=@Map.SelectedObject, $K=@ActivateMap

Тобто, це свого роду ємкості, куди записуються результати, які добуті функціями. Інші функції з перемінних ці результати потім зчитують. Перемінні – це засіб обміну між функціями.

Щоб записати значення функції в перемінну, перемінна повинна стояти на початку рядка і містити після себе знак = (дорівнює)

$D=@Date (в перемінну $D ми записуємо поточну дату)

Коли функція повинна читати перемінну,  перемінна перемінна ставиться після функції через пробіл

@ActivateMap $Name

Замість перемінних, при необхідності, можна використовувати і пряме значення

@ActivateMap 4

Часто функції одночасно читають якусь перемінну, обробляють її і записують результат зразу в іншу перемінну

$A=@DequoteText $B (функція @DequoteText читає перемінну $B, обробляє її і записує в перемінну $A)

$vul=@StringPart 2,$AD (функція @StringPart читає другу частину після коми перемінної $AD і записує в перемінну $vul)

Вирази

Вирази служать для присвоєння перемінним значень, які визначаються на основі математичних обрахунків чи просто чисел, чи тексту .

Наприклад: 

=1 заносить в перемінну  значення 1, 

=приватна власність заносить в перемінну  значення приватна власність

$B=$A+5 заносить в перемінну $B cуму значень перемінної $A і числового значення 5, 

$B=$B+1 збільшує значення перемінної $B на одиничку.

 

Умовні оператори

@If  Умова then Результат чи дія else Інший результат чи дія

Тобто, це рядок, який перевіряє чи виконується певна умова, і, якщо вона виконується, виводить відповідний результат чи робить потрібну дію.
@If – означає «якщо»

then – «то»

else – «інакше»

and – «і»

or – «чи».

Для прикладу, деякі варіанти написання умовних операторів:

@if $A=1 then $B=10 (якщо значення перемінної $A дорівнює 1, то переміна $B дорівнюватиме 10)

@if $D=$RR then $S=5 (якщо значення перемінної $D дорівнює значенню перемінної $RR, то переміна $S дорівнюватиме 5)

@If $N>100 then @Break (якщо значення перемінної $N більше 100, то зупиняємо скрипт)

@If $N<1 then $B=10  else @Dialog.Message Не виконано (якщо значення перемінної $N менше 1, то то переміна $B дорівнюватиме 10, інакше виводимо повідомлення з текстом "Не виконано")

@If $LID<>20000 then @Goto %Next (якщо значення перемінної $LID не дорівнює 20000, то переходимо на мітку %Next)

Коли в умовному операторі є дві умови зразу, тоді їх необхідно взяти в дужки. Більше як дві умови не підтримуються.

@If ($I>200) and ($D=0) then $A=555

@If ($I>20) or ($I<5) then $I=$I+1

Перемінними в умовному операторі можуть бути як цифри, так і текст

@if $typvyl=вул then $t=вулиця
@if $typvyl=провул then $t=провулок
@if $typvyl=пл then $t=площа
@if $typvyl=ур then $t=урочище

Знаками порівняння в умовному операторі можуть бути "="(дорівнює), "<>"(не дорівнює), ">"(більше), "<"(менше),">="(більше-рівне),"<="(менше-рівне)

Мітки

Мітки починаються із символа (знак процента). Їх призначення – створювати в скрипті місця, на які можна переходити, використовуючи відповідні функції. Мітки також підсвічуються різними кольорами і можуть носити довільну назву. 

Приклад: %Label (замість слова Label може бути власне слово, наприклад %Next)


Щоб перейти на потрібну мітку використовується функція @Goto (буквально перейти до)

@Goto %Next

Перехід можна здійснювати, коли виконується (чи не виконується) певна умова

@If $N>100 then @Goto %Next

Тобто, призначення міток в тому, щоб або пропустити частину коду, або повернутися в якесь місце для повторної обробки.

Без міток не можливо було б створити цикл:

;заносимо в перемінну $Count число відкритих в програмі карт
$Count=@MapCount 
;перериваємо виконання скрипту, якщо число відкритих карт дорівнює 0 
@If $Count=0 then @Break 
;присвоюємо перемінній $I початкове значення циклу
$I=1
;мітка початку циклу 
%Start
;в перемінну $Name заносимо назву $I-ї карти (без розширення) 
$Name=@Map[$I].ClearFilename
;зберігаємо карту під номером $I у файл DXF (з тим самим ім'ям, але іншим розширенням файлу) 
@Map[$I].SaveToFile $Name.dxf 
;збільшуємо на одиничку номер карти, яка буде оброблятися наступною
$I=$I+1 
;якщо номер карти менший чи дорівнює $Count, переходимо на мітку %Start
@If $I<=$Count @Goto %Start 

Цикли можна створювати по об'єктах на карті, по шарах, по точках об'єкта, по списках тощо.

Умовні події

Умовні події - це події в програмі Digitals, як реакцію на які можна прив'язати виконання певних дій скриптом. Умовні події починаються з комбінації символу та слова %Events і являють собою, свого роду перемикач, який спрацьовує при певній події. Докладніше про це буде в одній з наступних статей.

 


Примітка: у прикладах функцій жирним шрифтом (напр.@ActivateMap) виділена назва функції, похилим шрифтом (напр.Number) перемінна функції, у квадратних скобках (напр.[MapNumber]) необов'язкова перемінна, яка може не вказуватися.