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

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

Я, коли починав писати скрипти, то мені було дуже цікаво, що буде на виході у Dialog.Message, а тут втрачається інтрига, бо зразу все видно ))

Ой-ой-ой, Миколо! Для простеньких!? Звісно без брейкпойнтів, які можна вставити в будь-який рядок коду, для виявлення причини помилки у роботі скрипта з купою циклів численних ітерацій та викликів функціональних скриптів поки приходиться розбирати лог-файл у сотні тисяч рядків. Однак якщо така можливість буде додана розробниками (на це сподіваюсь), якраз складні скрипти налагоджувати буде набагато легше.

Підскажіть будь-ласка яким чином можна витягнути систему координат в шаблон dmt (СК-63 або МСК-32)

Подскажите функцию для использования в скриптах для вызова или активации “подбора масштаба карты…” добавленную:

01.08.18 Подбор масштаба карты под размер бумаги (Карта|Свойства…, кнопка Подогнать под страницу)

Или единственный вариант добраться: ?

масштаб можна встановити через @Map.SetProperties Scale Name|FrameX[1] FrameY[1]|…

Как задать масштаб, это не секрет:
@Map.Layers.SetState -3 0
@Map.SetProperties 10000 NNaammee
@Map.FrameSelected 145 145 10000

Вопрос: Можно попросить добавить в язык скриптов “автоподбор” масштаба, который реализован в кнопке: “Подогнать под страницу”
Добавлено в Digitals. 01.08.18 Подбор масштаба карты под размер бумаги (Карта|Свойства…, кнопка Подогнать под страницу)
Использование данной реализации не “видоизменяет/крутит” координаты участка, при использовании функции: OBJECTSCALE

Підкажіть як реалізувати скриптово або через DMT шаблон підтягування довжин ліній до данної таблички?

Допоможіть зробити скрипт який би контролював довжини ліній на земельній ділянці. Лінії не повинні перевищувати 200 м. бо я не можу таке осилити
%Events.OnFileSave
@Map.SelectLayer ID70005
$F=@Map.Selected.GetParameter -10
;$F1=@StringPart |$F
@if $F1=<200 then @Break Додати точку

@Map.SelectLayer ID70005
$SO=@Map.SelectedObject
$PC=@Map.Object[$SO].Count
$CurrentLine=$PC-1
%Loop
$L=@Map.Object[$SO].LineLength[$CurrentLine]
@if $L>200 then @Goto %MarkLineAndStop
@Goto %Exit
%NextLine
$CurrentLine=$CurrentLine-1
@if $CurrentLine>0 then @Goto %Loop
%MarkLineAndStop
$CL2=$CurrentLine+1
@Map.Selected.MarkPoints $CurrentLine
@Map.Selected.MarkPoints $CL2
@Dialog.Message Довжина відрізку №$CurrentLine - $L > 200м

P.S. меню Правка-Добавить точки… (Шаг - 200 м, несквозное добавление)

Дуже Вам вдячний за допомогу. Дякую!!!

Відкрив для себе, що якщо у властивостях карти шаблону (меню Карта - Властивості) в полі з іменем написати $NM, та якщо скриптом перемінній $NM присвоєно відповідне значення (ПІБ) з файлу XML, то карта при збереженні автоматично буде називатися по імені. Але не можу зрозуміти, як це працює. В одних шаблонах воно працює, в інших ні.

В посібнику (автор Д.Золотар) це описано так:
Созданный документ получает имя, состоящее из имени шаблона и автоматического суффикса,
который задается в поле Имя карты в окне Свойств карты используемого шаблона. В данном
случае в шаблоне задана формула -P[34], что приводит к извлечению номера квартала и участка
из параметра с соответствующим номером и добавлению их к имени документа. Часто в качестве
суффикса используется формула -P[NM], возвращающая имя землевладельца.

Якщо просто виділити ділянку і запустити скрипт:

$MON=@Map.SelectedObject
$PP=@Map.Object[$MON].Parameter[ID7000520]
$PC=@XML.NodeCount /Proprietors ProprietorInfo $Proprietors
$I=0
$NM=
%Loop
$I=$I+1
$IsLE=@XML.NodeCount ProprietorInfo[$I]/Authentication LegalEntity $PP
@if $IsLE=1 then @Goto %LegalEntity
$LN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/LastName $PP
$FN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/FirstName $PP
$MN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/MiddleName $PP
@if $LN= then @Goto %Continue
@if $NM<> then $NM=$NM,
$NM=$NMгр.$LN $FN $MN
@Goto %Continue
%LegalEntity
$N=@XML.XPath ProprietorInfo[$I]/Authentication/LegalEntity/Name $PP
@if $N= then @Goto %Continue
@if $NM<> then $NM=$NM,
$NM=$NM$N
%Continue
@if $I<$PC then @Goto %Loop
@Dialog.Message $NM

присвоївши перемінній $NM з файлу XML ПІБ землевласника, а потім сформувати шаблон через Сервіс-Документи - то це не спрацює. Не спрацьовує це і при простому збереженні карти, у властивостях якої є $NM. Як же воно працює? Бо в деяких шаблонах, які формуються складними скриптами воно працює! В результаті сформований по шаблону звіт зерігається як Схема Іванов Іван Іванович

Доброго здоров’я колеги. Чи є у когось скрипт, що витягує прізвища власників, коли їх 2 та більше, Бо звичайні команди через dmt шаблони бачать лише першого власника.
Це якщо отак:
XPT(P[ID7000520],“ProprietorInfo/Authentication/LegalEntity/Name”) XPT(P[ID7000520],“ProprietorInfo/Authentication/NaturalPerson/FullName/LastName”)_XPT(P[ID7000520],“ProprietorInfo/Authentication/NaturalPerson/FullName/FirstName”)_XPT(P[ID7000520],“ProprietorInfo/Authentication/NaturalPerson/FullName/MiddleName”)
Бачить лиш першого власника і все.

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

Доброго времени суток! Подскажите как реализовать в скрипте манипуляции с надписью: прав. кнопка мышки - развернуть вдоль контура ?

Для маніпуляцій з підписами є спеціальні скриптові функції.
Спочатку треба видалити старий підпис. Потім створити новий уздовж контура.

@Map.Selected.RemoveCaptions idпараметра
@Map.Selected.CreateCaptions idпараметра 1 1 1 1 0 0

більш детально можете прочитати ТУТ

Спасибо! Но тут ситуация немного иначе. Надписи принадлежат объекту-пикет, который лежит на другом объекте-полилиния или отрезок. Команда -вдоль контура- разворачивает надпись параллельно линейному объекту

Тоді можна ось таким скриптом:
$S=@Map.SelCount
@If $S<=0 @Break Треба вибрати об’єкти
$Obj=@Map.SelectedObject
$XY=@Map.Object[$Obj].Point[1]
$Nearest=@Map.NearestObject 5 $Obj $XY
$Angle=@Map.Object[$Nearest].LineAngle[1]
$Angle=@ReplaceChar ,.$Angle
$Angle=-$Angle*10+900
$N=0
$C=@Map.Parameters.Count
%Start:
$N=@Map.NextSelected $N
@If $N<=0 @Goto %Finish
$I=-10
%NextParam
$S=@Map.Object[$N].Caption[$I]
@if $S= @Goto %NextCap
@Map.Object[$N].Caption[$I] * * * $Angle
%NextCap:
$I=$I+1
@If $I<$C @Goto %NextParam
@Goto %Start
%Finish:
@Window.Refresh

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

Тоді можна ось таким скриптом:

$S=@Map.SelCount @If $S<=0 @Break Треба вибрати об'єкти $Obj=@Map.SelectedObject $XY=@Map.Object[$Obj].Point[1] $Nearest=@Map.NearestObject 5 $Obj $XY $Angle=@Map.Object[$Nearest].LineAngle[1] $Angle=@ReplaceChar ,.$Angle $Angle=-$Angle*10+900 $N=0 $C=@Map.Parameters.Count %Start: $N=@Map.NextSelected $N @If $N<=0 @Goto %Finish $I=-10 %NextParam $S=@Map.Object[$N].Caption[$I] @if $S= @Goto %NextCap @Map.Object[$N].Caption[$I] * * * $Angle %NextCap: $I=$I+1 @If $I<$C @Goto %NextParam @Goto %Start %Finish: @Window.Refresh

При цьому можете виділити зразу усі точкові об’єкти з підписами, які треба розвернути на той самий кут відносно лінійного об’єкту, що поруч (в радіусі 5 метрів(можна змінити в скрипті)

Дякую!

Колись десь бачив скрипт який додає межові знаки через кожні 200 м. Підкажіть де шукати?)