Скрипт, який формує Список межових знаків, переданих на зберігання.
Коротко про суть роботи. Формується карта з DMT шаблону. Послідовно запитує виділити закріплені межові знаки на ділянці і будівлю чи ЛЕП, до якої знак прив’язаний промірами. Потім результат промірів і інше заносяться в текстову табличку.
Тут можна переглянути відео - [url]Відеопрезентації скриптів і загалом роботи в Digitals - #12 від fendak]
@Map.DeselectAll
@Map.SelectLayer ID20000
Документи | Опис меж
Вигляд | Показати всі
$OpysMezh=@ActivateMap
$Dialog=@Dialog.WaitBox вставте, якщо треба ЛЕП чи КЖ/КН і натисніть "Продовжити"
@If $Dialog=0 @Break
@Map.DeselectAll
@Map.SelectLayer ID20000
@Map.AddNodes 30
@Map.DeselectAll
;11111111111111111111111111
@Map.DeselectAll
%ZnovuT1
$Dialog=@Dialog.WaitBox Виберіть 1-й закріплений межовий знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$T=@Map.SelCount
$ThisTochka=@Map.SelectedObject
$nomer1=@Map.Selected.GetParameter id70003
$x1=@Map.Selected.GetParameter -4
$y1=@Map.Selected.GetParameter -3
@If $T=1 @Goto %NextT1
@If $T<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $T>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuT1
%NextT1
$Storona1=@Dialog.Select Вкажіть в якій стороні знаходиться ця точка|північній|південній|західній|східній|північно-західній|північно-східній|південно-західній|південно-східній
%ZnovuO1
$Dialog=@Dialog.WaitBox Виділіть будинок чи ЛЕП, до яких буде прив'язаний перший меж.знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$O=@Map.SelCount
$ThisObj=@Map.SelectedObject
$LID=@Map.Object[$ThisObj].LayerID
$ObjVyd1=кутів кам’яної будівлі
@If $LID=12 then $ObjVyd1=опор ЛЕП
@If $O=1 @Goto %NextO1
@If $O<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $O>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuO1
%NextO1
@Map.SelectObject $ThisObj
@Map.SelectObject $ThisTochka
@Map.Selected.Copy
@FileNew
@Map.Paste
@Window.Refresh
@Map.SelectAll
Вигляд | Показати позначені
@Map.DeselectAll
;послідовно виділяємо спочатку точку, а потім будівлю чи ЛЕП
@Map.SelectLayer ID2000000036
$MC=@Map.Count
$N1=0
%Select1
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If ($LID=2000000036) then @Goto %Nextsel1
@Map.SelectObject $N1
%Nextsel1
@if $N1<$MC then @Goto %Select1
Вставка | Промеры и схема...
$P1=@Map.Object[3].Parameter[-1]
$P2=@Map.Object[4].Parameter[-1]
$P3=
$MC=@Map.Count
@If $MC=4 @Goto %NextP3
$P3=@Map.Object[5].Parameter[-1]
%NextP3
@Map.DeselectAll
@Map.SelectObject 3
@Map.SelectObject 4
@If $MC=4 @Goto %NextSel1
@Map.SelectObject 5
%NextSel1
@Map.Selected.Copy
$ThisMap=@ActivateMap
@CloseMap [$ThisMap]
@Map.Paste
;22222222222222222222222222222222
@Map.DeselectAll
%ZnovuT2
$Dialog=@Dialog.WaitBox Виберіть 2-ий закріплений межовий знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$T=@Map.SelCount
$ThisTochka=@Map.SelectedObject
$nomer2=@Map.Selected.GetParameter id70003
$x2=@Map.Selected.GetParameter -4
$y2=@Map.Selected.GetParameter -3
@If $T=1 @Goto %NextT2
@If $T<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $T>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuT2
%NextT2
$Storona2=@Dialog.Select Вкажіть в якій стороні знаходиться ця точка|північній|південній|західній|східній|північно-західній|північно-східній|південно-західній|південно-східній
%ZnovuO2
$Dialog=@Dialog.WaitBox Виділіть будинок чи ЛЕП, до яких буде прив'язаний другий меж.знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$O=@Map.SelCount
$ThisObj=@Map.SelectedObject
$LID=@Map.Object[$ThisObj].LayerID
$ObjVyd2=кутів кам’яної будівлі
@If $LID=12 then $ObjVyd2=опор ЛЕП
@If $O=1 @Goto %NextO2
@If $O<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $O>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuO2
%NextO2
@Map.SelectObject $ThisObj
@Map.SelectObject $ThisTochka
@Map.Selected.Copy
@FileNew
@Map.Paste
@Window.Refresh
@Map.SelectAll
Вигляд | Показати позначені
@Map.DeselectAll
;послідовно виділяємо спочатку точку, а потім будівлю чи ЛЕП
@Map.SelectLayer ID2000000036
$MC=@Map.Count
$N1=0
%Select2
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If ($LID=2000000036) then @Goto %Nextsel2
@Map.SelectObject $N1
%Nextsel2
@if $N1<$MC then @Goto %Select2
Вставка | Промеры и схема...
$P4=@Map.Object[3].Parameter[-1]
$P5=@Map.Object[4].Parameter[-1]
$P6=
$MC=@Map.Count
@If $MC=4 @Goto %NextP6
$P6=@Map.Object[5].Parameter[-1]
%NextP6
@Map.DeselectAll
@Map.SelectObject 3
@Map.SelectObject 4
@If $MC=4 @Goto %NextSel2
@Map.SelectObject 5
%NextSel2
@Map.Selected.Copy
$ThisMap=@ActivateMap
@CloseMap [$ThisMap]
@Map.Paste
;333333333333333333333333333333333
@Map.DeselectAll
%ZnovuT3
$Dialog=@Dialog.WaitBox Виберіть 3-ій закріплений межовий знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$T=@Map.SelCount
$ThisTochka=@Map.SelectedObject
$nomer3=@Map.Selected.GetParameter id70003
$x3=@Map.Selected.GetParameter -4
$y3=@Map.Selected.GetParameter -3
@If $T=1 @Goto %NextT3
@If $T<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $T>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuT3
%NextT3
$Storona3=@Dialog.Select Вкажіть в якій стороні знаходиться ця точка|північній|південній|західній|східній|північно-західній|північно-східній|південно-західній|південно-східній
%ZnovuO3
$Dialog=@Dialog.WaitBox Виділіть будинок чи ЛЕП, до яких буде прив'язаний другий меж.знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$O=@Map.SelCount
$ThisObj=@Map.SelectedObject
$LID=@Map.Object[$ThisObj].LayerID
$ObjVyd3=кутів кам’яної будівлі
@If $LID=12 then $ObjVyd3=опор ЛЕП
@If $O=1 @Goto %NextO3
@If $O<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $O>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuO3
%NextO3
@Map.SelectObject $ThisObj
@Map.SelectObject $ThisTochka
@Map.Selected.Copy
@FileNew
@Map.Paste
@Window.Refresh
@Map.SelectAll
Вигляд | Показати позначені
@Map.DeselectAll
;послідовно виділяємо спочатку точку, а потім будівлю чи ЛЕП
@Map.SelectLayer ID2000000036
$MC=@Map.Count
$N1=0
%Select3
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If ($LID=2000000036) then @Goto %Nextsel3
@Map.SelectObject $N1
%Nextsel3
@if $N1<$MC then @Goto %Select3
Вставка | Промеры и схема...
$P7=@Map.Object[3].Parameter[-1]
$P8=@Map.Object[4].Parameter[-1]
$P9=
$MC=@Map.Count
@If $MC=4 @Goto %NextP9
$P9=@Map.Object[5].Parameter[-1]
%NextP9
@Map.DeselectAll
@Map.SelectObject 3
@Map.SelectObject 4
@If $MC=4 @Goto %NextSel3
@Map.SelectObject 5
%NextSel3
@Map.Selected.Copy
$ThisMap=@ActivateMap
@CloseMap [$ThisMap]
@Map.Paste
;444444444444444444444444444444444
@Map.DeselectAll
%ZnovuT4
$Dialog=@Dialog.WaitBox Виберіть 4-ий закріплений межовий знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$T=@Map.SelCount
$ThisTochka=@Map.SelectedObject
$nomer4=@Map.Selected.GetParameter id70003
$x4=@Map.Selected.GetParameter -4
$y4=@Map.Selected.GetParameter -3
@If $T=1 @Goto %NextT4
@If $T<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $T>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuT4
%NextT4
$Storona4=@Dialog.Select Вкажіть в якій стороні знаходиться ця точка|північній|південній|західній|східній|північно-західній|північно-східній|південно-західній|південно-східній
%ZnovuO4
$Dialog=@Dialog.WaitBox Виділіть будинок чи ЛЕП, до яких буде прив'язаний другий меж.знак і натисніть "Продовжити"
@If $Dialog=0 @Break
$O=@Map.SelCount
$ThisObj=@Map.SelectedObject
@Map.SelectObject $ThisTochka
$LID=@Map.Object[$ThisObj].LayerID
$ObjVyd4=кутів кам’яної будівлі
@If $LID=12 then $ObjVyd4=опор ЛЕП
@If $O=1 @Goto %NextO4
@If $O<1 @Dialog.Message Ви не вибрали жодного будинку чи ЛЕП
@If $O>1 @Break Не можна вибирати одночасно більше одного буднику чи ЛЕП
@Goto %ZnovuO4
%NextO4
@Map.SelectObject $ThisObj
@Map.SelectObject $ThisTochka
@Map.Selected.Copy
@FileNew
@Map.Paste
@Window.Refresh
@Map.SelectAll
Вигляд | Показати позначені
@Map.DeselectAll
;послідовно виділяємо спочатку точку, а потім будівлю чи ЛЕП
@Map.SelectLayer ID2000000036
$MC=@Map.Count
$N1=0
%Select4
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If ($LID=2000000036) then @Goto %Nextsel4
@Map.SelectObject $N1
%Nextsel4
@if $N1<$MC then @Goto %Select4
Вставка | Промеры и схема...
$P10=@Map.Object[3].Parameter[-1]
$P11=@Map.Object[4].Parameter[-1]
$P12=
$MC=@Map.Count
@If $MC=4 @Goto %NextP12
$P12=@Map.Object[5].Parameter[-1]
%NextP12
@Map.DeselectAll
@Map.SelectObject 3
@Map.SelectObject 4
@If $MC=4 @Goto %NextSel4
@Map.SelectObject 5
%NextSel4
@Map.Selected.Copy
$ThisMap=@ActivateMap
@CloseMap [$ThisMap]
@Map.Paste
;створення підписів
@Map.SelectLayer ID2000000033
$result=@Calc - межовий знак $nomer1 закріплений в $Storona1 частині
@Map.Selected.ChangeParameter ID130003 $result
$result=@Calc межі земельної ділянки на відстані $P1 м, $P2 м
@Map.Selected.ChangeParameter ID130004 $result
$result=@Calc та $P3 м від $ObjVyd1
@Map.Selected.ChangeParameter ID130005 $result
$result=@Calc - межовий знак $nomer2 закріплений в $Storona2 частині
@Map.Selected.ChangeParameter ID130006 $result
$result=@Calc межі земельної ділянки на відстані $P4 м, $P5 м
@Map.Selected.ChangeParameter ID130007 $result
$result=@Calc та $P6 м від $ObjVyd2
@Map.Selected.ChangeParameter ID130008 $result
$result=@Calc - межовий знак $nomer3 закріплений в $Storona3 частині
@Map.Selected.ChangeParameter ID130009 $result
$result=@Calc межі земельної ділянки на відстані $P7 м, $P8 м
@Map.Selected.ChangeParameter ID130010 $result
$result=@Calc та $P9 м від $ObjVyd3
@Map.Selected.ChangeParameter ID130011 $result
$result=@Calc - межовий знак $nomer4 закріплений в $Storona4 частині
@Map.Selected.ChangeParameter ID130012 $result
$result=@Calc межі земельної ділянки на відстані $P10 м, $P11 м
@Map.Selected.ChangeParameter ID130013 $result
$result=@Calc та $P12 м від $ObjVyd4
@Map.Selected.ChangeParameter ID130014 $result
@Window.Refresh
;Каталог координат
@Map.DeselectAll
@Map.SelectLayer ID2000000034
$result=@Calc № X Y
@Map.Selected.ChangeParameter ID130003 $result
$result=@Calc $nomer1 $x1 $y1
@Map.Selected.ChangeParameter ID130004 $result
$result=@Calc $nomer2 $x2 $y2
@Map.Selected.ChangeParameter ID130005 $result
$result=@Calc $nomer3 $x3 $y3
@Map.Selected.ChangeParameter ID130006 $result
$result=@Calc $nomer4 $x4 $y4
@Map.Selected.ChangeParameter ID130007 $result
;номерація
@Map.DeselectAll
@Map.SelectLayer ID2000000035
@Map.Selected.ChangeParameter ID130003 $nomer1
@Map.Selected.ChangeParameter ID130004 $nomer2
@Map.Selected.ChangeParameter ID130005 $nomer3
@Map.Selected.ChangeParameter ID130006 $nomer4
$result=$nomer1, $nomer2, $nomer3 та $nomer4
@Map.Selected.ChangeParameter ID130007 $result
@Window.Refresh
;видалення зайвих точок
$MC=@Map.Count
$N1=0
@Map.DeselectAll
%Pochatok
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If ($LID<>2000000036) then @Goto %Next
$P1=@Map.Object[$N1].Parameter[91]
@If $P1=$nomer1 then @Goto %Next
@If $P1=$nomer2 then @Goto %Next
@If $P1=$nomer3 then @Goto %Next
@If $P1=$nomer4 then @Goto %Next
@Map.SelectObject $N1
@Map.Selected.Delete
%Next
@if $N1<$MC then @Goto %Pochatok
;виділяємо ділянку і все інше, щоб потім пересунути чи вставити в іншому масштабі
@Map.DeselectAll
@Map.SelectLayer ID20000
$MC=@Map.Count
$N1=0
@Map.DeselectAll
%Pochatok2
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If ($LID<=30000) then @Goto %Next2
@If ($LID>=60999) then @Goto %Next2
@Map.SelectObject $N1
%Next2
@if $N1<$MC then @Goto %Pochatok2
@Map.SelectLayer ID12
Вибрати | Усі що примикають
;
Чудова ідея!!! А як зробити можливість пропуску прив’язки межових знаків, наприклад якщо їх тільки два, а не чотири???
І в якому шарі і який вигляд повинні мати ЛЕПи??? Вставляю як “лінії ЛЕП” показую вікно з помилкою, якщо два стовба то все нормально.
Загляньте у закладку “Параметры” та прогляньте маску ввода, наприклад у параметру AD.
Тобто модифікувавши, або створивши новий, параметр, Ви отримаєте параметр із потрібними Вам тегами.
Пішов таким же шляхом, якщо цікаво побачити реалізацію - пропоную скачати Part1.exe з Відеопрезентації скриптів і загалом роботи в Digitals - #13 від user228.
Сподіваюсь, дана інформація Вам стане в нагоді.
Дякую.
значиь у вас номери точок не у параметрі 91, а в якомусь іншому. Поміняйте у скрипті на свій. Замініть у цьому радяку:
$NomerT=@Map.Object[$N].Parameter[91]
91 на свій номер.
Для цього запустіть скрипт до помилки. Потім виділіть точку на межовому знаку і подивіться, який номер параметру, де вписаний номер точки.
У мене номер 85, його і поставив, помилка зникла але сторони як на відєо не сворює.
Я далекій від скриптів, але дуже всім вдячен за кожен викладений скрипт.
Відредагував скрипт. Вже повинно все працювати.
Не працювало на тих комп’ютерах, де у Windows десятковим роздільником була не крапка, а кома. Тепер без різниці.
Скрипт працює з функцією Вставка-Проміри і схема, і вставляє її, автоматично підтверджуючи.
Але зверніть увагу, що якщо Ви перед цим користувалися цією функцією і замість Промірів використовували Схему вимірів, то вам перед запуском скрипту необхідно знову виставити функцію на Проміри.
І при цьому запустити функцію, а не просто вибрати, щоб вона обновилася.
Тобто, малюєте два об’єкти і створюєте проміри-проміри/тільки до видимих-ОК
Нехай значенням Параметра1 об’єкта карти є величина “Значення13” (наприклад - Нська сільська рада, що міститься у файлі Файл.txt). А нам необхідно передати у Параметр2, нехай цього ж об’єкту, значення КОАТУУ, котре теж міститься у Файл.txt, відповідно у “Значення33”.
$FindWhat=Нська сільська рада
$FindValue=%Library.Назва Файл,1,$FindWhat,3 @Map.Object[N].Parameter[N]=$FindValue
Файл - назва текстового файлу (без розширення); 1 - номер стовпця текстового файлу, у котрому знаходиться значення, на основі якого будемо шукати (на прикладі - Нська сільська рада); $FindWhat - відповідно, саме значення, на основі котрого шукатимемо; 3 - номер стовпця у текстовому файлі, де знаходиться саме потрібне нам значення (на прикладі - КОАТУУ).
Бібліотека працюватиме тільки з табульованими списками, тобто розділювач стовпчиків - tab (дев’ять пробілів).
Скачал обновления и прочитал, что добавили интересную функцию “@Map.CreateLayout”. Сначала попробовал сам разобраться, но выдавало мне чистый лист. Нашел на форуме пример использования этой функции, тоже самое, формирует пустой лист. Может что делаю не так?
Пример:
$SO=@Map.SelectedObject @if $SO=0 then @Break Нужно пометить объект
$X=@Map.Object[$SO].Parameter[-4]
$Y=@Map.Object[$SO].Parameter[-3]
$PP=@ProgramPath
$FN=$PP\Pictures\Викопіювання.bmp @Map.CreateLayout $X $Y 605 605 0 300 8 $FN @Run $FN
А в “сервис\документы” - вообще такой функции или шаблона не нашел.
После обновления в папке “С:\Digitals\Update\Templates” - пусто, “С:\Digitals\Update\Favorites” - пусто. То-есть: никаких шаблонов скачано не было!
Скачайте шаблоны из сообщения. Поместите их в папку Digitals\Templates
Автоматическое обновление не затрагивает карты/шаблоны/справочники. Исключения: datums.ini и xmlnormal.dmf
;ОБМЕЖЕННЯ
$KolObmez=@Map.SelectLayer ID70008 @if $KolObmez=0 then @Break На земельній ділянці обмеження відсутні
$MC=@Map.Count @Map.DeselectAll
$I=0
%Loop
$I=$I+1
;Знаходимо ID шару
$LID=@Map.Object[$I].LayerID @if $LID<>70008 then @Goto %Continue @Map.SelectObject $I
Вид | Показать помеченные
;Вибір параметрів
$Tip=@Dialog.Select Вкажіть тип обмеження|ЛЕП|Прибережні захисні смуги вздовж річок, навколо водойм та на островах|… @if $Tip=ЛЕП then @goto %LEP @if $Tip=Прибережні захисні смуги вздовж річок, навколо водойм та на островах then @goto %Voda
%LEP @Map.Selected.SetParameter 83 01.05 Охоронна зона навколо (вздовж) об’єкта енергетичної системи @Map.Selected.SetParameter 84 Охоронна зона навколо (вздовж) об’єкта енергетичної системи @Map.Selected.SetParameter 86 01Закон України “Про землі енергетики та правовий режим спеціальних зон енергетичних об’єктів”2010-07-09 @Map.Selected.SetParameter 87 @Map.Selected.SetParameter 91 @Dialog.Message Для виділеного об’єкта вибрано тип обмеження:“$Tip” @goto %konecobmez
%Voda @Map.Selected.SetParameter 83 05.02 Прибережні захисні смуги вздовж річок, навколо водойм та на островах @Map.Selected.SetParameter 84 Прибережні захисні смуги вздовж річок, навколо водойм та на островах @Map.Selected.SetParameter 86 01Водний кодекс1995-07-06 @Map.Selected.SetParameter 87 @Map.Selected.SetParameter 91 @Dialog.Message Для виділеного об’єкта вибрано тип обмеження:“$Tip”
%konecobmez
;Знімаємо помітку з об’єкту @Map.DeselectObject $I
%Continue @if $I<$MC then @Goto %Loop