Все про скрипти

Чемно дякую за приклад управляючого скрипта. Треба пробувати, як на мене це - чудова можливість в рази прискорити роботу засобів автоматизації :smiley:
Однак приєднаюся до питання Миколи Фендак: мабуть у зв’язку з багатопоточністю, відтепер необхідно ініціалізувати всі змінні? Це робиться лише одним способом - присвоєнням порожнього значення?

Не запускається скрипт AutoIt з двома параметрами.
Рядок з лог-файла:
21:57:48.898 RUN D:\Digitals\Favorites\SignatureValidMap.exe “C:\Users\voha-\Desktop\04-Катеринівське.dmf” “2021/03/01 21:57:40”

P.S. Я зрозумів, що справа в лапках. Якщо лапки одинарні, запуск виконується. Але тоді параметри скрипта читаються не коректно. В принципі вихід є: переписати скрипт на функцію DLL. Це єдиний вихід?

Добрий день, допоможіть добити скрипт, потрібно щоб при виборі одного з масштабів відкривався потрібний шаблон.

$CountMap=@MapCount
@If $CountMap=0 then @Break Вікдрийте обмінний файл для формування плану
@Map.DeselectAll
@Map.SelectLayer ID70005
$Sit=@Dialog.Select ВИБЕРІТЬ МАСШТАБ|1000|2000|5000|10000
@if $Sit=1000 then @goto $1000
$1000=@ExecuteDocument 1_Сит.план (1000).dmt
;@if $Sit=2000 then @goto $2000
;$2000=@ExecuteDocument 1_Сит.план (2000).dmt
;@if $Sit=5000 then @goto $5000
;$5000=@ExecuteDocument 1_Сит.план (5000).dmt
;@if $Sit=10000 then @goto $10000
;$10000=@ExecuteDocument 1_Сит.план (10000).dmt

Спобуйте так:

$Sit=@Dialog.Select ВИБЕРІТЬ МАСШТАБ|1000|2000|5000|10000
@if $Sit=1000 @ExecuteDocument 1_Сит.план (1000).dmt

або

$Sit=@Dialog.Select ВИБЕРІТЬ МАСШТАБ|1000|2000|5000|10000
@if $Sit=1000 then @goto %1000
@if $Sit=2000 then @goto %2000
%1000
@ExecuteDocument 1_Сит.план (1000).dmt
@goto %end
%2000
@ExecuteDocument 1_Сит.план (2000).dmt
@goto %end
%end

$Sit=@Dialog.Select ВИБЕРІТЬ МАСШТАБ|1000|2000|5000|10000 ;Якщо масштаб не вибрано - припинення виконання @If "$Sit"="" then @Break Не вибрано масштаб ;Якщо вибрано 1000 - перехід на мітку %1000 @If $Sit=1000 then @Goto %1000 @If $Sit=2000 then @Goto %2000 @If $Sit=5000 then @Goto %5000 ;Якщо вибір зроблено, але не 1000, 2000 або 5000 - значить вибрано 10000 @ExecuteDocument 1_Сит.план (10000).dmt @Goto %EndSelect %1000 @ExecuteDocument 1_Сит.план (1000).dmt @Goto %EndSelect %2000 @ExecuteDocument 1_Сит.план (2000).dmt @Goto %EndSelect %5000 @ExecuteDocument 1_Сит.план (5000).dmt %EndSelectНазви міток починаються символом %, змінних - символом $.

Дякую всім хто відгукнувся, тепер вкурив що куди)

При конвертації в ХМЛ через діджитал, файли конвертуються за різний проміжок часу, інколи зовсім не конвертуються. Необхідно продовжити виконання скрипту після повної конвертації файлу. Допоможіть це зробити:

цей рядок працює зовсім не корректно:

$6661=@Map.ClearFilename
Файл | Конвертировать In4 в XML
@Wait 10000
@Map.DeselectAll
@FileOpen $6661.xml

Скриптова функція @Wait тут не допомагає, а лише шкодить (поки скрипт “Wait”, XMLChecker не в змозі коректно відпрацювати). Саме із-за @Wait “інколи зовсім не конвертуються”. Трохи більше варто почитати про конвертацію In4 в XML.
Без забезпечення роботи скрипта ConvertIn4ToXML.pas в асинхронному режимі толку виконання FileConvertIn4ToXML зі скрипта не буде.

Поки єдиний варіант вирішення:$6661=@Map.ClearFilename @ExecuteMenu FileConvertIn4ToXML $Asc=@Dialog.WaitBox Після створення файла XML натисніть <Продовжити>. @If $Asc=0 then @Break Припинено виконання скрипта @Map.DeselectAll ;@FileOpen $6661.xmlі тут я не бачу причини відкривати файл $6661.xml. Він повинний відкритися XMLChecker-ом.

P.S. Доречі:

Але ж лапки тепер не можна застосувати в аргументі скриптової функції @Run :frowning:

voha

Дякую за відповідь. Також тимчасово обходився функцією @Dialog.Message Text. Але думав що цьому є якесь вирішення. Доречі новостворенний ХМЛ також не завжди відкривається в программі, залежності цьому ще не помітив.

Добрий день, чи є така можливість почати всі/виділені об’єкти з крайньої північної точки?

див. ТУТ

fendak
Дякую!!! Те що шукав.

Доброго дня.
Потрібна допомога. Як помітити полігон, в який попадає точковий об’єкт (в середину цього полігону)?

$Dil=@Map.SelectedObject
@if $Dil=0 then @break Виділіть точку
$PO=@Map.ParentObject $Dil
@Map.DeselectAll
@Map.SelectObject $PO

Дякую!!! :smiley:

Братцы помогите.
нужно в замкнутом полигоне найти самую длинную сторону и по этой стороне создать отрезок.
Самому пока ума не хватает такое реализовать. Поэтому обращаюсь к нашему бомонду с надеждой что это реализуемо. :smiley:

Поиск самого длинного ребра:
$Obj=@Map.SelectedObject
@if $Obj=0 then @Break
;кол-во ребер в полигоне
$LineCount=@Map.Object[$Obj].Count
$LineCount=$LineCount-1
$MaxLength=0
$L=0
%loop
$L=$L+1
@if $L=$LineCount then @Goto %End
$Length=@Map.Object[$Obj].LineLength[$L]
@if $MaxLength<$Length then $MaxLength=$Length
@if $L<$LineCount then @Goto %loop
@Dialog.Message $MaxLength
Что значит построить отрезок по этой стороне? Отрезок будет равен длинной стороне?

Да. Идентичен длинной стороне.

;нижче вкажіть id шару нового об’єкта
$LIDNewOby=20000
$Obj=@Map.SelectedObject
@if $Obj=0 then @Break
$LineCount=@Map.Object[$Obj].Count
$LineCount=$LineCount-1
$MaxLength=0
$L=0
$L2=1
$XY1=0
$XY2=0
%loop
$L=$L+1
@if $L=$LineCount then @Goto %End
$Length=@Map.Object[$Obj].LineLength[$L]
@if $MaxLength<$Length then $XY1=@Map.Object[$Obj].Point[$L]
@if $MaxLength<$Length then $L2=$L+1
@if $MaxLength<$Length then $XY2=@Map.Object[$Obj].Point[$L2]
@if $MaxLength<$Length then $MaxLength=$Length
@if $L<$LineCount then @Goto %loop
$NewObject=@Map.NewObject id$LIDNewOby
@Map.Object[$NewObject].Point[1] $XY1
@Map.Object[$NewObject].AddPoint $XY2
@Map.RefreshObject $NewObject
@Map.DeselectAll
@Map.SelectObject $NewObject

:open_mouth: Гениально… Спасибо…