Головна » Файли » Готові скрипти

Скрипт, який створює експлікацію суміжників із вкрапленими контурами
14.10.2017, 20:46

Програма Digitals звичайними методами описує тільки зовнішні суміжники. Щоб в експлікації суміжників розписувало і вкраплені контури, можна скористатися скриптом, який перебирає всі суміжники, перевіряє, чи вони замкнуті (це і будуть вкраплені суміжники) і складає їх у список, розписуючи букви вкраплених суміжників окремо.

Даний метод працює тільки при умові, що ви вкраплені контури створюєте без вусиків.

;id шару таблиці, яку потрібно заповнити списком суміжників
$ID=70031
;
$Tab=@Calc char(9)
$Tab=@DequoteText $Tab
;знаходимо кількість замкнутих суміжників і віднімаємо від загального числа суміників
$I=0
$CN=@Map.Count
$AC=@Map.Layers.ObjectCount ID70010
%SLoop1
;номер наступного об'єкта
$I=$I+1
;знаходимо ID шару поточного об'єкта 
$LID=@Map.Object[$I].LayerID
;якщо не суміжник, то йдемо дальше
@if $LID<>70010 then @Goto %SContinue1
$Closed=@Map.Object[$I].Closed
@If $Closed=1 then $AC=$AC-1
%SContinue1
@if $I<$CN then @Goto %SLoop1
@Map.DeselectAll
@Map.SelectLayer id70010
@Text[1].Add $TabСписок суміжників:
$N=0
$I=0
$Bukvy=АБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯЬАБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯЬАБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯЬАБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯЬАБВГДЕЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЮЯЬ
;початок циклу
%Start
$N=@Map.NextSelected $N
$I=$I+1
@if $N=0 then @Goto %Finsh
$Res=@Map.Object[$N].CalculateFormula XMP(пусто)
$B1=@Calc Copy("$Bukvy",$I,1)
$B1=@DequoteText $B1
@if $I>128 then $B1=@Concat $B1,4
@if ("$I">"96") and ("$I"<"129") then $B1=@Concat $B1,3
@if ("$I">"64") and ("$I"<"97") then $B1=@Concat $B1,2
@if ("$I">"32") and ("$I"<"65") then $B1=@Concat $B1,1
$I2=$I+1
$B2=@Calc Copy("$Bukvy",$I2,1)
$B2=@DequoteText $B2
@if $I>128 then $B2=@Concat $B2,4
@if ("$I">"96") and ("$I"<"129") then $B2=@Concat $B2,3
@if ("$I">"64") and ("$I"<"97") then $B2=@Concat $B2,2
@if ("$I">"32") and ("$I"<"65") then $B2=@Concat $B2,1
@if $I2>$AC then $B2=А
$Result=Від $B1 до $B2$Tab$Res
$Kontrol=@Map.Object[$N].Closed
@if $Kontrol=1 then $Result=$B1($B1')$Tab$Res
@if $Kontrol<>1 then @Goto %NotClosed
;витягуємо координати центра суміжника
$CntrX=@Map.Object[$N].Parameter[-4]
$CntrY=@Map.Object[$N].Parameter[-3]
$CntrX=@Calc replace("$CntrX",",",".")
$CntrX=@DequoteText $CntrX
$CntrY=@Calc replace("$CntrY",",",".")
$CntrY=@DequoteText $CntrY
;створюємо промір від центру ділянки
$SObj=@Map.NewObject ID50000
@Map.Object[$SObj].Point[1] $CntrX $CntrY
$X1=$CntrX+50
$Y1=$CntrY+50
@Map.Object[$SObj].AddPoint $X1 $Y1
@Map.RefreshObject $SObj
@Map.Object[$SObj].Parameter[id20030] $B1($B1')
@Map.Object[$SObj].CreateCaption id20030 2 4 0 0 2 5
%NotClosed
@Text[1].Add $Result
@Goto %Start
%Finsh
;кінець циклу
$Res=@Text[1].Text
@Map.DeselectAll
@Map.SelectLayer id$ID
$OC=@Map.SelCount
@if $OC>=1 then $MC=@Map.SelectedObject
@if $OC>=1 then @Goto %Next
@ExecuteMenu insertTableText
$MC=@Map.Count
%Next
@Map.Object[$MC].TableText $Res
@Map.RefreshObject $MC
@Window.Refresh

Даний скрипт вставить таблицю експлікації прямо в карту XML. Якщо ж потрібно, щоб експлікація вставлялася в dmt-шаблон, то замість рядків, які йдуть після $Res=@Text[1].Text треба поставити наступні, при цьому вказавши свою назву шаблону замість "Кад план"

@Map.DeselectAll
@Map.SelectLayer id70005
$AM=@ActivateMap
@ExecuteDocument Кад план
$KPM=@ActivateMap
@Map.DeselectAll
@Map.SelectLayer id$ID
$Tabl=@Map.SelectedObject
@Map.Object[$Tabl].TableText $Res
@Map.RefreshObject $Tabl
@Window.Refresh
@ActivateMap $AM
@Map.DeselectAll
@Map.SelectLayer id50000
@Map.Copy
@ActivateMap $KPM
@Map.Paste
@Map.DeselectAll

Категорія: Готові скрипти | Додав: Микола
Переглядів: 3036 | Завантажень: 0 | Коментарі: 13 | Рейтинг: 0.0/0
Всього коментарів: 13
avatar
12 Землемер • 15:27, 05.01.2022
Доброго дня.
Пропишіть в скрипті замість "Таблиця | Текст..." наступне: "@ExecuteMenu insertTableText". На комп'ютерах, де мова російська то команда ця не буде виконуватися.
avatar
0
13 Микола • 20:14, 05.01.2022
Добрий вечір! Прописав. Дякую.
avatar
10 elisium11 • 17:19, 24.02.2021
Доброго дня! Як у шаблон.dmt додати стрілки для вкраплених контурів?
avatar
0
11 Микола • 21:07, 24.02.2021
Доброго вечора! В Digitals таке не реалізовано
avatar
8 bk2013 • 17:23, 15.06.2019
Микола доброго дня хотів уточнити, скрипт працю тільки з дмт шаблонами, а з кадастровими планами 15 зем які відкриваються в репортсе не додає суміжників. Що в цьому скрипті треба змінити щоб працювало. Дякую
avatar
0
9 Микола • 11:49, 16.06.2019
Добрий день! З FasrReports не працюю, тому не підкажу як там що.
avatar
7 Kochyr • 09:44, 23.10.2017
Дякую, вийшло. biggrin
avatar
1 Kochyr • 15:27, 17.10.2017
Чомусь не працює ні 1 способом ні другим.
avatar
0
2 Микола • 22:33, 17.10.2017
Ви хоча б уточнили якісь деталі. Що? Як? Я ж тут не екстрасенс, щоб знати, чому у вас не працює. Я записав відео (урок 8), як створювався цей скрипт. Ви можете його самі створити з нуля, тестуючи на кожному кроці і тоді зрозумієте, що не так.

Виклав його тут в такому "сирому" вигляді, як робив, без передбачування в коді різних варіантів дій зі сторони користувача, як це у великих скриптах. Тут крок вліво, крок вправо - і можуть виникати помилки. Та думав, може комусь і так пригодиться.
avatar
3 Kochyr • 14:15, 20.10.2017
Ось відео (http://files.dp.ua/file?source=17102014104772834527), як у мене "працює" цей скрипт.
avatar
0
4 Микола • 19:42, 20.10.2017
id шару таблички на карті вкажіть, яка у вас є замість 70031 свій
avatar
5 Kochyr • 19:51, 20.10.2017
Це потрібно в XMLNormal зробить?
avatar
0
6 Микола • 23:35, 20.10.2017
та ні, в коді скрипту в першому рядку просто вкажіть ваш id.
Його можна отримати, відкривши ваш шаблон кадастрового плану, потім, виділивши таблицю з суміжниками, перейти в менеджер шарів. Тобто вам потрібно там вказати іd шару, в якому заноходиться ваша таблиця суміжників у вашому шаблоні, щоб скрипт зміг її знайти і заповнити.
avatar