Головна » 2016 » Січень » 1 » Скриптові функції - Управління підписами на карті
22:39
Скриптові функції - Управління підписами на карті

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


Створення та видалення

@Map.Object[N].CreateCaption ParamIndex Orientation Position VAlign HAlign ShiftX ShiftY - створює підпис заданого параметра для даного об'єкта. (!!!дана функція трішки бракована, рекомендовано замість неї використовувати аналогічну їй наступну!!!)

@Map.Selected.CreateCaptions ParamIndex Orientation Position VAlign HAlign ShiftX ShiftY  - створює підпис заданого параметра для виділених об'єктів.

Orientation - орієнтація підпису: 
Вздовж контуру = -1
Горизонтально = 0
Вздовж довгої сторони = 1
Вздовж короткої сторони = 2
Вертикально = 3
Власний/Кут = 4/45 (наприклад, 45 градусів повороту)
Символ = 5

Position - позиція:
По центру = 0
По середині = 1
В кутку = 2
На початку = 3
В кінці = 4.

VAlign - вертикальне вирівнювання
HAlign - горизонтальне вирівнювання
ShiftX - зміщення по X
ShiftY- зміщення по Y

;створення підпису довжин ліній (вирівнювання горизонтальне)
@Map.Selected.CreateCaptions -10 1 1 1 1 5 5

;створення підпису для точок по кутах
@Map.Selected.CreateCaptions -9 1 2 1 1 3 3

;створення підпису вздовж контуру (для проміру)
@Map.Selected.CreateCaptions -1 1 1 1 1 0 0

;створення підпису площі (всередині об'єкта)
@Map.Selected.CreateCaptions 1 0 0 1 1 0 0

;створення підпису для найменування будівлі (вздовж довшої сторони)
@Map.Selected.CreateCaptions id1000 1 0 1 1 0 0

@Map.Object[N].CreateCaptionAlongContour ParamIndex Distance VerticalShift [NoUpsideDown] - створює підпис вздовж контуру об'єкта для параметра ParamIndex на відстані Distance від першої точки об'єкта.VerticalShift - зміщення підпису по вертикалі в напрямку перпендикулярному контуру об'єкта. Якщо написати UpsideDown - підписи розвертаються так, щоб не бути догори ногами.

$N=@Map.SelectedObject
@Map.Object[$N].CreateCaptionAlongContour -2 25 0 NoUpsideDown

@Map.Object[N].RemoveCaption ParamIndex - видаляє підпис заданого параметру для даного (N) об'єкта.

@Map.Selected.RemoveCaptions ParamIndex - видаляє підпис заданого параметру для усіх виділених об'єктів. Рекомендовано завжди використувати перед створенням підпису одною з вище наведених функцій, бо якщо перед тим підпис не видалити, то функція новий не створить.

@Map.Selected.RemoveCaptions -10

Положення

@Map.Object[N].Caption[N] DX DY DZ Orientation Align Size - положення і розмір підписів

@Map.CaptionToContour ObjectIndex CaptionIndex - садить підписи на контур об'єкта (наприклад, горизонталі)

@Map.AdjustCaptions - зміщує підписи в карті таким чином, щоб уникнути накладання рамки підпису (ballon) на границю будь-якого об'єкта карти (вказане накладання існує, якщо границя об'єкта перетинає рамку підпису у двох точках - відтинає від рамки частину її площини). Таким чином, не зміщуються підписи, рамки яких містять кінцеву точку лінійного об'єкта, точковий об'єкт.

Розмірні лінії

@Map.MakeDimensionLines RefPolyline CaptionParam [Vertical/Horizontal] - створює розмірні лінії і підписи, використовуючи RefPolyline як опорний об'єкт. Якщо задано Vertical, то всі довжини проектуються на вертикальну лінію. Якщо Horizontal - на горизонтальну. Якщо нічого не задано - проектування не відбувається, а виводиться реальна довжина відрізку. CaptionParam - номер або ID параметра, що містить довжину лінії. Якщо в масці параметра поставити значення *1000 0, розміри будуть виноситися в міліметрах. Номер -10 буде посилатися на стандартний параметр Довжини ліній. Відео-приклад, Приклад в dmt файлі

%Events.OnCollect
$N=@EventObject
@Map.MakeDimensionLines $N ID1 Horizontal

Приклади

Скрипт, який створює підписи для горизонталей

;параметр для якого виносяться підписи
$Param=-2
;крок підписів вздовж контура об'єкта в метрах
$Step=25
;зміщення підписів по вертикалі
$CaptionShift=0
$MapCount=@MapCount
@if $MapCount=0 then @Break
$N=@Map.SelCount
@If $N<1 @Break Виділіть об'єкт для створення підпису
$N=@Map.SelectedObject
;периметр об'єкта
$Len=@Map.Object[$N].Parameter[-1]
;виділяємо першу частину, якщо включено "Показывать длины с углами"
$Len=@StringPart 1 $Len
$Pos=0
;початок циклу
%Start
;виносимо підпис на відстань $Pos від початку об'єкта
;NoUpsideDown - уникаємо перевернутих підписів
@Map.Object[$N].CreateCaptionAlongContour $Param $Pos $CaptionShift NoUpsideDown
$Pos=$Pos+$Step
@if $Pos<$Len then @Goto %Start
@Map.Parameters.SetAttributes -2 0 5 0 10 0 16777215 0 Arial 60 0 -16777208
@Map.RefreshObject $N
@Window.Refresh

Видалення усіх підписів виділеного об'єкта

$LC=@Map.Layers.Count
$N=-11
%StartLayer
$N=$N+1
$ID=@Map.Parameters.Get $N
$ID=@StringPart 1 $ID
@Map.Selected.RemoveCaptions $ID
@if $N<$LC then @Goto %StartLayer

Поворот підписів об'єктів

Виконує поворот усіх підписів виділених об'єктів на вказаний кут

$S=@Map.SelCount
@If $S<=0 @Break Треба вибрати об'єкти
$Angle=@Dialog.Ask Кут повороту підписів Default=0
$Angle=-$Angle*10
$N=0
$C=@Map.Parameters.Count
%Start:
$N=@Map.NextSelected $N
@If $N<=0 @Goto %Finish
$I=1
%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

Виділення об'єктів карти, які мають підписи висот

$C=@Map.Count
@If $C<=0 @Break
$I=1
@Map.BeginUpdate
%Start:
$S=@Map.Object[$I].Caption[-2]
@If $S= @Goto %Next
@Map.SelectObject $I
%Next:
$I=$I+1
@If $I<=$C @Goto %Start
@Map.EndUpdate


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

 

Переглядів: 5844 | Додав: Микола | Рейтинг: 0.0/0
Всього коментарів: 23
avatar
23 chulovac • 08:19, 04.02.2024
Дуже дякую за допомогу! Саме те, що потрібно! yes
avatar
21 chulovac • 19:18, 03.02.2024
Доброго дня. Підкажіть, користуюсь скриптом щоб поставити\прибрати проміри на карті. Можна добавити заливку проміру білим фоном, щоб було видно, коли промір поставлено поверх растру?
Код
$MapCount=@MapCount
@if $MapCount=0 then @Break
$N=@Map.SelCount
@If $N<1 @Break Виділіть об'єкт для створення підпису
$N=@Map.SelectedObject
$Cap=@Map.Object[$N].Caption[-10]
@if $Cap= then @Map.Selected.CreateCaptions -10 2 1 1 1 1 1
@if $Cap<> then @Map.Selected.RemoveCaptions -10
avatar
0
22 Микола • 23:20, 03.02.2024
Доброго дня!
В скрипті також можете вказати колір, шрифт підпису та інші атрибути. Якщо залишити так, як є, то вони будуть такими, як вони задані у властивостях параметра на карті, де створюються підписи.

Код
$MapCount=@MapCount
@if $MapCount=0 then @Break
$N=@Map.SelCount
@If $N<1 @Break Виділіть об'єкт для створення підпису
$N=@Map.SelectedObject
@Map.Selected.RemoveCaptions -10
@Map.Selected.CreateCaptions -10 0 1 1 1 3 3
$Attributes=@Map.Parameters.GetAttributes -10
$NomerUZ=@StringPart 1 $Attributes
$TypLiniyi=@StringPart 2 $Attributes
$KolirLiniyi=@StringPart 3 $Attributes
$Tovshchyna=@StringPart 4 $Attributes
$TypZalyvky=0
$KolirZalyvky=16777215
$Status=@StringPart 7 $Attributes
$Shryft=@StringPart 8 $Attributes
$RozmirShryftu=@StringPart 9 $Attributes
$StylShryftu=@StringPart 10 $Attributes
$KolirShryftu=@StringPart 11 $Attributes
@Map.Parameters.SetAttributes -10 $NomerUZ $TypLiniyi $KolirLiniyi $Tovshchyna $TypZalyvky $KolirZalyvky $Status $Shryft $RozmirShryftu $StylShryftu $KolirShryftu
@Window.Refresh
avatar
19 alexxxostap • 15:57, 10.12.2021
Підкажіть як зробити підписи на ділянці ПІБ суборендаторів
бо підтягує всю інфу з блоків опису суборендаторів ... а треба саме ПІБ
avatar
0
20 Микола • 19:46, 10.12.2021
Щоб при винесенні підписів не було тегів, а лише назва суборендаря, потрібно спершу скриптом виокремити чисту назву в якийсь із параметрів на закладці Інфо. І вже тоді виносити його підпис.
Викоремити назву можна таким скриптом:
avatar
16 pichic1977 • 16:43, 25.02.2021
В мене є розпаювання на декілька тисяч ділянок. Більшість з них великі по розміру і там дуже добре розміщуються підписи (номер паю та площа) Але частина з них маленькі по розміру і усі підписи накладуются одна на одну. Питання, чи є якась можливість або через программу, або через скрипти змінювати розміри підписів тільки віділених ділянок, не змінюючі всі інші. Як це можна зробити при розверненні ділянки взвшись за нижній лівий кут ділянки.
avatar
0
17 Микола • 21:15, 25.02.2021
Зверніть увагу та таку скриптову функцію:
@Map.AdjustCaptions - зміщує підписи в карті таким чином, щоб уникнути накладання рамки підпису (ballon) на границю будь-якого об'єкта карти (вказане накладання існує, якщо границя об'єкта перетинає рамку підпису у двох точках - відтинає від рамки частину її площини). Таким чином, не зміщуються підписи, рамки яких містять кінцеву точку лінійного об'єкта, точковий об'єкт.
avatar
18 pichic1977 • 12:00, 26.02.2021
Стою на асфальті у лижі обутий
Чи лижі не єдут чи в мене проблеми.
Якщо чесно не зрозумів як можна цей скрипт застосувати конкретно до цієї моєї проблеми. Погано що не можна вам скинути шматочок карти, щоб ви зрозуміли проблему. Я думаю у багатьох, хто займаєься землевпорядкуванням рано чи піздно виникає це питання.
avatar
14 Землемер • 12:16, 16.02.2021
Доброго дня. Підкажіть десь бачив скрипт на усунення накладок підписів одне на друге...
avatar
0
15 Микола • 19:05, 16.02.2021
Доброго дня!
Знаю тільки про скриптову функцію @Map.AdjustCaptions, яка усуває накладки.
Та вона не дуже допомагає, бо усуває накладки тільки щоб не були на контур ділянки. А між собою підписи продовжують і далі накладатися.
avatar
11 SerjN • 00:35, 10.02.2021
Доброго дня.
Спробував створити скриптик для встановлення стрілки суміжника та підпису до неї:

$Koord=@Map.Object[7].Point[2]
$O1=@Map.NewObject id1000001
@Map.Object[$O1].Point[1] $Koord
@Map.Object[$O1].Parameter[id1] Ж
@Map.SelectObject $O1
@Map.Selected.CreateCaptions id1 0 4 1 1 3 3
@Map.Selected.Refresh

Стрілка встановилась на своє місце, в параметр записалась потрібна буква (Ж), але підпис не відображається. Хоча в правій панелі, у вкладці "Інфо", цей параметр виділено як створений підпис (жирним шрифтом). Підкажіть, у чому може бути причина?
Спробував, також, функцію @Map.Object[N].CreateCaption - результат той самий
avatar
0
12 Микола • 12:01, 10.02.2021
Підпис створювало, але в нульових координатах, там де новий об'єкт створився спочатку був. Новий об'єкт потрібно після створення оновити:
$Koord=@Map.Object[1].Point[2]
@Map.DeselectAll
$O1=@Map.NewObject id0
@Map.Object[$O1].Point[1] $Koord
@Map.Object[$O1].Parameter[id1] Ж
@Map.SelectObject $O1
@Map.RefreshObject $O1
@Map.Selected.RemoveCaptions ID1
@Map.Selected.CreateCaptions id1 0 4 1 1 3 3
@Map.Selected.Refresh
avatar
13 Анонімно • 23:03, 11.02.2021
Дякую за допомогу
avatar
9 Анонімно • 11:46, 15.10.2020
Доброго дня, існує можливість виділення всіх виведених підписів в рамці даної карти для наступної зміни їх розміру (наприклад)
avatar
10 lvivsurveyer • 17:00, 15.10.2020
якщо це однакові підписи, які перебувають в одному параметрі (всі в параметрі "Z" чи в "коефіцієнт бонітету" то можна
тиснете на вкладку параметри (між кнопкою "Шари" та кнопкою "Властивості карти". там вибираєте параметр, в якому перебувають ваші підписи і дивитесь на праву сторону цього вікна: там є "Атрибути шрифта". в цій групі налаштувань можна вибрати власне шрифт, його розмір, колір і якщо трохи побавитись то можете налаштувати там що завгодно.

якщо ж у вас кілька параметрів (2-3) то можна повторити вищеописану процедуру кілька разів
avatar
6 ilyxa123 • 20:31, 18.09.2020
Доброго дня! Якщо в мене ділянка на якій більше 1000 точок. Чи можливо зробити, на кадастровому плані підпис, кожну 5 точку?
avatar
1
7 Микола • 01:25, 19.09.2020
Див. скрипт Розрідження підписів точок
Але в даному скрипті є деяке обмеження - він може оброблювати об'єкти, в яких близько 350 точок і не більше. Тому спершу розділіть контур вашої ділянки на 3-4 частини. Таке обмеження пов'язано з тим, що з такою кількістю точок просто не справляєтсья сама програма Digitals, а саме скриптова функція @StringPart
avatar
8 Анонімно • 13:57, 19.09.2020
велика вдячність Вам, за розробку цього скрипта!
але в самих підписах є функція "фильтр" і там можно виставити теж саме.
Знайшов випадково wacko
avatar
4 lvivsurveyer • 15:51, 09.09.2020
у мене при малюванні дороги виникло питання з автоматизації:
Дано:
хмара пікетів вздовж дороги, які мають бути показані на карті як висоти по краю догори
дорога, зібрана шаром "межа з бортовим каменем"
питання:
як вивести всі підписи висот, щоб вони автоматично орієнтувалися вздовж дороги і чи можливо це взагалі?
avatar
0
5 Микола • 14:06, 17.09.2020
див. Створення підписів точок вздовж лінії
У вас всі точки прямо на лінії, я цього не знав. Це значно спрощує задачу.
Перед запуском скрипту вибирати нічого не треба.
avatar
1 ivanyuk6879 • 11:09, 16.06.2020
Добрий день, як до цього скрипта 

$MapCount=@MapCount
@if $MapCount=0 then @Break
$N=@Map.SelCount
@If $N<1 @Break Виділіть об'єкт для створення підпису
@Map.Selected.CreateCaptions -10 2 1 1 1 1 1

дописати, щоб при повторному натисненні видалявся створений підпис, чи є така можливість?
avatar
0
2 Микола • 12:27, 16.06.2020
Добрий день!
$MapCount=@MapCount
@if $MapCount=0 then @Break
$N=@Map.SelCount
@If $N<1 @Break Виділіть об'єкт для створення підпису
$N=@Map.SelectedObject
$Cap=@Map.Object[$N].Caption[-10]
@if $Cap= then @Map.Selected.CreateCaptions -10 2 1 1 1 1 1
@if $Cap<> then @Map.Selected.RemoveCaptions -10
avatar
3 ivanyuk6879 • 12:38, 16.06.2020
Дякую за оперативність  smile
avatar