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

ObjectLabel використовується поки що тільки у вікні зі списком об’єктів, знайдених в місці подвійного кліку. Раніше у цьому списку відображалась назва шару. Зараз відображається в цьому списку саме ObjectLabel, його значення вираховується по формулі, яка вказана у константі(Сервіс-Налаштування-Головна-Константи) з тим самим ім’ям. Скриптова функція @Map.ObjectLabel перепризначує поточній карті на поточний сеанс роботи значення ObjectLabel. Зручно задавати особливу формулу для ObjectLabel в обробнику події %Events.OnFileOpen. У цих формулах можна використати функцію P[*], яка повертає список значень усіх непустих неслужбових доступних параметрів.

Доброго дня розробникам.
Повертаюся знову до функції параметра SlopeDir, що повертає дирекційний кут напрямку схилу.

Не вирішена проблема розрахунку значення параметра з цією функцією :exclamation: Не можу знайти якоїсь залежності нульового результату. Ще раз даю скріншот[attachment=0]SlopeDir.png[/attachment]Скрипт відпрацьовує і… лог-файл свідчить про наявність значення 0 :exclamation:

Питання:

  • чому значення параметра з функцією SlopeDir на вкладці “Інфо” завжди 0,00 в той час, як список значень параметра не містить 0,00?
  • як у скрипті дочекатися розрахунку параметра з функцією SlopeDir у всіх об’єктів?
  • чи є скриптова функція, яка розрахує значення параметра з його функцією?
  • для чого скриптова функція @Map.Object[N].CalculateFormula?

І нарешті, мо простіше додати скриптову функцію Map.Object[N].SlopeDir :question:

Виправили у новій версії глюк, який пов’язаний з функцією SlopeDir. Раніше дещо випадковим чином поверталось значення 0,00.
Скриптова функція @Map.Object[N].CalculateFormula не допоможе, вона лише строкові функції розраховує, а функція SlopeDir - функція параметрів типу “Число з комою”.

Чемно дякую. Буду пробувати.

Добрий день!
Бачу, якісь нові цікаві опції появилися у властивостях скриптів.
Можна отримати їхній опис?

ShowHeader=0
Left=0
Top=83
Width=40
Height=640
FontSize=6
Background=-16777201
Margin=1
Alpha=255

Visible=0
Anchor=1

Margin, на скільки я зрозумів, це відстань між кнопками. Тільки не розумію, чому чим більше там число - тим менший відступ?
Alpha - це якийсь типу лічильник, за який час панель сама закривається? Ставлю там 0, то при наведенні панель починає блимати і автоматично закриваєтсья за секунду.
Anchor - якір, який чомусь наявний тільки в одному скрипті - в тому, який при запуску програми закритий. Це якась прив’язка положення на екрані? Чи що?

Alpha - (не)прозорість панелі, та відповідно й кнопок на ній. 255 - непрозора панель, 0 - прозора. Спробували прибирати прозорість коли курсор в межах панелі, видно не все ще працює добре.
Margin - відступ дочірньої кнопки від краю батьківської панелі. Ctrl-Shift-C в Гуглохромі покаже картинку з співвідношенням Margin, Padding, Border.
Anchor визначає сторону прив’язки дочірнього об’єкта, коли батьківській змінює розмір. Не зрозуміло звідки в tlb-файлі воно з’явилось) розмір панелі не змінюється курсором миші.

Доброго дня.
Є одне питання: як найпростіше у скрипті обробки події %Events.OnChange визначити, чи було редаговано геометрію об’єкта (переміщено окремі точки), чи було переміщено об’єкт? Це ж мабуть треба звірити вектор зміщення центру об’єкта з вектором зміщення кожної точки об’єкта?

В зв’язку з вказаним, хочу спитати розробників: чи можна окремо додати обробку події переміщення об’єкта/об’єктів EventOnMove?

Доброго дня!
В будь-якому разі треба до редагування (чи до можливого редагування) записати кудись координати об’єкта, щоб потім можна звірити.

Я б це зробив через
$SO=@Map.SelectedObject
$PointList=@Map.Object[$SO].PointList
@Map.TempString $PointList

А потім при обробці події зчитав ще раз цю інформацію
$PointList2=@Map.Object[$SO].PointList

і порівняв
$PointList=@Map.TempString $PointList
@if “$PointList”<>“$PointList2” then @Break Редаговано

Чемно дякую, Миколо.
Однак записати координати треба ж у скрипті обробки події селектування об’єкта на рівні карти. Крім того, об’єкт може виявитися позначеним в результаті роботи кожного, з десятка інших скриптів. Дописувати у кожному?
Не годиться також - просто звірити списки. Порівнювати треба всі точки об’єкта: якщо знайдеться перша ж не змінена - значить тягнули окремі точки; якщо змінилися координати всіх точок - значить перетягнули об’єкт за центр.
Можна ще звірити два вектора переміщення: центра об’єкта і - будь якої зміненої точки. В такому випадку вектори переміщення ще й будувати як об’єкти прийдеться!

Поки чекатиму на відповідь розробників: чи можна окремо додати обробку події переміщення об’єкта/об’єктів EventOnMove або як у скрипті обробки події відрізнити переміщення від зміни геометрії?

Доброго дня. Підкажіть будь-ласка. Мається змінна $N в якій записаний кадастровий номер, яким чином з неї можна витягнути останні 4 цифри (типу copy ($N,19,4)). Дякую.

$PathN=@Calc Copy("$N",19,4) $PathN=@DequoteText $PathN

Добрый вечер! Подскажите новичку, так как не знаю откуда начать. С диджиталом начал работать как неделю. Сделал схему размещения, но не знаю как в неё “втулить” этот скрипт. Делаю как кнопку, в окне мне выдает проскланённое имя фамилию, но вот как это сделать дабы оно мне в тексте это сделало? Подскажите пожалуйста!

В шаблоні в текстовий блок вставте змінну $ROPNM, яку ви отримали скриптом.
А щоб шаблон перетворив її у значення згідно обмінника xml, використайте в тій самій кнопці такий код:

@Map.DeselectAll
@Map.SelectLayer id70005
$Papka=@ProgramFolder
@ExecuteDocumentFromFile $Papka[i]назва шаблону[/i].dmt
@Map.ReplaceTableVariables

П.С.
@Map.ReplaceTableVariables - сканує текст таблиць і замінює змінні їх значеннями
Замість назва шаблону поставте свою назву шаблону (має знаходитися в папці Digitals)

Проблема в том что после этого скрипта открывается ещё одно окно этого же шаблона и в него не вытягивает другие значения которые вытягивало до этого. А нельзя да бы при открытии шаблона сразу происходило склонение?
Простите под вечер немного натупил. Надо в первом же окне наживать кнопку.

Написал себе скрипт в эту же кнопку
$Pravo=@XML.XPath OwnershipInfo/Code
@if $Pravo=100 then $Info=власність else $Info=оренду
@Dialog.Message $Info

При указании в поле форма собствености 100 тянет значение “оренду”. Что я делаю не так?

В скриптах Digitals трохи інша мова програмування:

@Map.SelectLayer id70005
$I=@Map.SelectedObject
$Pravo=@Map.Object[$I].Parameter[id7000512]
$Pravo=@StringPart 1 $Pravo
$Info=оренду
@if $Pravo=100 then $Info=власність
@Dialog.Message $Info

А почему параметр 12? Есть расшифровка параметров? Да и функций тоже?

Добрый день. Можно ли все-таки реализовать к скриптам комментарии, которые будут видны в панели скриптов, аналогично комментам для базовых функций. Может это будет спец коммент который начинается не с “;”, а например с #. Voha уже просил, я тоже присоединяюсь к его просьбе.

Доброї пори доби розробникам.
Є таке прохання: подивіться, будь-ласка, на скриптову функцію @Run ExeFilename
У збиранні від 19.01.21 - працює, а вже від 19.02.21 і до тепер - не працює.

Дуже дякую, за 40 нових скриптових функцій у збиранні 01.03.21. Є що досліджувати :smiley: , особливо цікаві @Thread ScriptCommand, @ThreadActive Handle та @WaitForThread Handle.

Залишаю актуальним:

Приклад, будь ласка, що саме перестало запускатись.
Повний шлях до егзешника вказаний? Чи є додатково параметри командної строки? Чи викликається функція для файлу зареєстрованого розширення? Містить шлях/ім’я пробіли?
Наступні строки - все різні випадки
@Run C:\Program Files (x86)\Google\Chrome\Application\chrome.exe vinmap.net/
@Run vinmap.net/
@Run C:\Windows\System32\notepad.exe d:\readme.txt
@Run notepad.exe d:\readme.txt
@Run d:\readme.txt

Скрипт запускає обробку *.txt з папки в кількох потоках(максимальна одночасна кількість потоків визначена змінною $MaxThreadCount=5) та контролює завершення кожного. Для кожного потока викликається лише одна команда, для прикладу тут %Library.ProcessTxt $FileName

$WorkFolder=@Dialog.Ask Вкажіть папку з *.txt
@If $WorkFolder= then @Break
@Text[1].FolderList *.txt $WorkFolder
$FileCount=@Text[1].Count
$MaxThreadCount=5
@Text[2].Clear
$I=0
;
%Loop:
$ThCount=@Text[2].Count
@if $ThCount=$MaxThreadCount then @Goto %CheckThreads
$J=$ThCount
%LoopAddThread
$J=$J+1
@if $I=$FileCount then @Goto %CheckThreads
$I=$I+1
$FileName=@Text[1].Line[$I]
$Handle=@Thread %Library.ProcessTxt $Filename
@Text[2].Add $Handle
@if $J<$MaxThreadCount then @Goto %LoopAddThread
;
%CheckThreads:
$ThCount=@Text[2].Count
@If $ThCount=0 then @Goto %Finish
$J=$ThCount
%LoopThread
$Handle=@Text[2].Line[$J]
$IsActive=@ThreadActive $Handle
@if $IsActive=0 then @Text[2].Delete $J
$J=$J-1
@if $J>0 then @Goto %LoopThread
%Finish:
@if ($ThCount<>0) or ($I<$FileCount) then @Goto %Loop