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

Можна використати @Map.AddNodes LayerNumber Mode - “Добавляет пикеты в узлы помеченных объектов. Mode соответствует выбору в окне Добавить узлы (1-7)”.

voha Дуже дякую за підказку!

Появился вопрос в процессе написания длинного скрипта, работа которого прерывается выводом на экран сообщений от программы (Digitals XE), которые убираются нажатием Enter на клавиатуре. Какую строчку нужно добавить в мой скрипт чтобы системные сообщения сами закрывались и скрипт продолжал свою работу дальше?
Сейчас я вынужден три раза нажимать Enter в процессе выполнения скриптом своей работы. В идеале, я не хочу нажимать Enter вообще.
Примечание: @SendChars не помогает.
.JPG

В мене - помагає в 99% випадків наступний код:;На вході скрипта - позначені об'єкти, точки яких иають бути суміщеними ;Суміщаєм з сусідніми @SendChars <CR> @ExecuteMenu EditAlign $CountSelStart=@Map.SelCount ;якщо не суміщено жодної точки - видаєм діалог для задіяння команди SendChars @If $CountSelStart=0 then @Dialog.Confirm @If $CountSelStart=0 then @Goto %EndNextEditAlign ;пропускаєм суміщення з сусідніми, поки суміщених не виявиться стільки, ;скільки суміщено попердній раз, або поки суміщених не буде 0 %StartNextEditAlign $CountSelOld=@Map.SelCount @SendChars <CR> @ExecuteMenu EditAlign @Map.BeginUpdate $CountSelNew=@Map.SelCount ;якщо суміщених 0 - видаєм діалог для задіювання команди SendChars @If $CountSelNew=0 then @Dialog.Confirm @If $CountSelNew=0 then @Goto %EndNextEditAlign @If $CountSelNew<>$CountSelOld then @Goto %StartNextEditAlign %EndNextEditAlignЗастосовано “Суміщення з сусідніми”, повідомлення про кількість суміщених “гаситься” командою @SendChars стільки раз, скільки воно виводиться. От відео, де два рази підряд суміщаються з сусідніми точки створюваного полігона.
Sumischennja.exe (913 KB)

К сожалению мне это не помогло.

Есть скрипт:
@Map.Layers.SetAttributes Number Symbol PenStyle PenColor PenWidth BrushStyle BrushColor State Font_Name FontSize FontStyle FontColor
Он отвечает за стиль линии, заливку и прочее.
Как заполнять эти (подчеркнутые) параметры. Кто-нибудь может пример показать?

Какие именно параметры слоя вы хотите менять?

1. Поставить белую заливку (какой бы до этого она не была);
2. Поставить 10% прозрачности в стиле заливки;

Користуюсь для “розборки” параметрів ручним встановленням бажаного типу заливки і функцією @Map.Layers.GetAttributes. Так от:
@Map.Layers.GetAttributes-“номер УЗ, тип линии, цвет линии, толщина, тип заливки, цвет заливки, статус,…” далі - атрибути шрифта: шрифт, розмір, стиль, колір. Наприклад:
57 0 65535 30 8 16777215 0 Arial 80 0 -2147483640

Відповідно:
@Map.Layers.SetAttributes Number * * * * 8 16777215 * * * * *
має встановити для шару Number стиль заливки 8-ий по списку (10%), колір заливки 16777215 (білий), а знак * означає що значення атрибута слід залишити незмінним.

Все вірно. Додам тільки, що кінцеві зірочки можна опустити:
@Map.Layers.SetAttributes Number * * * * 8 16777215

І ще, щоб відобразити зміни на екрані, треба визвати @Window.Refresh

Все получилось.
Спасибо всем, кто помог разобраться.

Доброго дня усім!

Є функції @Map.MaxParameterValue ParamIndex та @Map.MinParameterValue ParamIndex, які відповідно знаходять найбільше і найменше значення параметра.

А потрібно знайти найбільше і найменше значення дати виготовлення ТД (TD - В,10.01.2009,МПП “Землемір”, Іванов І.І.) І запам’ятати відповідні об’єкти.

Теоретично, можна було б число (10.01.2009) витягнути у певну перемінну $Value, яку у свою чергу розбити на три перемінні:
$Rik=@StringPart 3.$Value
$Micyac=@StringPart 2.$Value
$Chyslo=@StringPart 1.$Value
і потім порівняти спочатку рік, якщо однакові - місяць, а потім чисто. Але прописати все це циклами надто складно виглядає. Бо плюс до всього треба одночасно запам’ятовувати номер об’єкта, в якому це число знаходиться.

Питання, чи можливо доступними скриптовими функціями в Digitals це реалізувати якось простіше?
Дякую.

Было бы неплохо добавить возможность использования в скриптах тригонометрических функций (хотя бы основных), таких как: sin, cos, tg, ctg. Например, получать sin внутренних углов после их вставки и т.п.
Можно добавить такую возможность? Исходя из этого следует, так же, добавить соответствующие параметры в список доступных любому слою любого шаблона (как площадь, длины линий и т.п.).

Сюда и ищите Функция @Calc через поиск на странице в браузере.

StrToStamp(d) - перетворює текстовий вигляд дати й часу в число

$A=@Calc StrToStamp(“2015/07/18”)

Тут StrToStamp(“рік/місяць/число”)

Вот такой скрипт, но с синусами в конце не получается разобраться

@Map.SelectLayer ID1
@SendChars
Вставка | Внутренние углы…
@SendChars 1
Преобразовать | Полигон/линию в точку…
@Window.Refresh
;создаем новый параметр - “Переменная”
@Map.SelectLayer ID5001
$S=@Map.Parameters.Get ID666
@if $S= then @Map.Parameters.Add 666 4 Переменная
;добавляем параметры в список доступных слою “Внутренние углы”
$S=@Map.Layers.GetValidParameters ID5001
@Map.Layers.SetValidParameters ID5001 $S ID666
;копируем значения углов в слой “Переменная”
$LayerID=5001
$SourceParam=ID21
$TargetParam=ID666
$AM=@ActivateMap
@if $AM=0 then @Break Откройте карту и запустите скрипт снова
$I=0
$MC=@Map.Count
%Loop
$I=$I+1
$LID=@Map.Object[$I].LayerID
@if $LID<>$LayerID then @Goto %Skip
$S=@Map.Object[$I].Parameter[$SourceParam]
@Map.Object[$I].Parameter[$TargetParam] $S
%Skip
@if $I<$MC then @Goto %Loop
;добываем синусы каждого из углов
$Sel=@Map.NextSelected
$Ugol=@Map.Object[$Sel].Parameter[666] /из этого параметра угол
$PI=3.1415927
$V=@Calc Sin($Ugol*$PI/180)

Насколько я понимаю, команда Внутренний угол вставляет значения углов в виде текстовой строки. Чтобы это значение подать на вход функции sin его нужно разобрать на части, преобразовать в числа и соединить с учетом того, градусы это были, минуты или секунды.

Хм. На самом деле, до этой задачи скрипт не добирается. Ошибка происходит раньше. Что он вообще должен делать (простыми словами) и какие исходные данные?

доброго дня. поділіяться будь ласка скриптом доя масової конвертаціїї ін4 в ХМЛ за допомогою вбудованого фунціонала в діжіталі.
і підскажіть як поправити конвертування ? ( коли конвертуєш код цільового призначення 2,1 залишається без змін а потрібно щоб було 01,01.) дякую

Исходные данные - только множество границ населенных пунктов в одном файле.
Нужно чтобы скрипт искал во всех границах (то есть только в одном слое) все углы, которые меньше чем 20° и добавлял найденные углы в группу.
Так как таких углов больше чем их синусов, то найти их потом легче как раз через значение их синусов (мне так кажется, но я могу ошибаться).
Внутренние углы в диапазоне от 340° до 360° так же должны находится. (Они вроде как тоже получаются меньше 20°, только являются внешними)
После нахождения таких углов я просто прохожусь по ним в созданной скриптом группе и “тягаю” их до нужного мне значения угла. После этого вновь повторяю проверку до тех пор пока таких углов (меньше 20°) не будет вообще.

Якщо включити опцію Десяткове представлення кутів (пункт меню Сервіс>Налаштування… на вкладці Вигляд у фреймі Карта) - будете мати кути з десятковими знаками. Зверніть увагу на організацію цикла за допомогою @Map.NextSelected LastNumber - почитайте приклади в бібліотеці скриптів. Я внутрішній кут вираховував би з використанням @Map.Object[N].LineAngle[N].