Програма 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
|