Библиотека полезных скриптов

Зробив карту, де нанесені усі кадастрові квартали району. Заповнив по кожному полігону код КОАТУУ, зону, квартал, 7 останній цифр ділянки (напр.0030000), адресу ділянки у вигляді “с.Берегове,-,-,-”. Зробив кнопку з кодом, який виклав нище. Суть процедури в тому, що мені тепер не треба вручну заповнювати всі ці дані. Я малюю в шарі IN4 Квартал контур ділянки, суміжники і будівлі. Дальше нажимаю на кнопку і всі необхідні дані в кварталі заповнюються автоматично. В шарі IN4 ділянка заповнюється параметр SC і населений пункт адреси ділянки. Дальше для простоти використання автоматично відкривається форма заповнення адреси ділянки, де вже є заповнений населений пункт і мені залишається ще ввести вулицю і номер будинку. Потім відкриваються автоматично форми заповнення параметра NM і TX.

Але інколи (у відсотках 50) замість стандартних форм заповнення адреси, ПІП, цільового використання появляються якісь примітивні прості форми, як показано на рисунку нище. При чому та ж ділянка, в тому ж місці один раз проходить добре, а інший - ні. Це скоріше за все просто глюк програми. Але в чому причина?

Може просто код занадто великий? Якщо можна - спростіть його.

По ідеї ще хотів добавити автоматичне копіювання шару квартал, перевірка, яке цільове призначення ділянки. Якщо ОЖБ - то вставляємо з буфера, перейменовуємо на прибудинкову територію і даємо команду петля. Якщо ж ОСГ - то вставляємо і перейменовуємо на Рілля. Але бачу, що формула не дуже добре працює і тому нема сенсу продовжувати.

;Відкриваємо карту з кварталами і зонами $SourceMap=D:\Digitals\Чарівна карта.dmf ;Параметр, з якого будемо копіювати на Чарівній карті(код нас.пункту) $SrcParam=ID10010 ;параметр, в який будемо вставляти в нашу ділянку(код нас.пункту) $DestParam=ID10010 $N=@Map.SelCount @If $N<>1 @Break Виділіть один об'єкт ;запам'ятовуємо номер нашої карти $ThisMap=@ActivateMap ;копіюємо позначений об'єкт в буфер @Map.Copy ;відкриваємо Чарівну карту @FileOpen $SourceMap ;вставляємо у відкриту карту наш об'єкт @Map.Paste ;номер нашого об'єкта $ThisObj=@Map.SelectedObject ;полігон, в який об'єкт попав $ParentObj=@Map.ParentObject $ThisObj ;не закриваємо карту, якщо зовнішній полігон не знайдений @if $ParentObj=$ThisObj then @Break Ділянка залазить на інший квартал або поза межами району ; ;копіюємо значення параметра зовнішнього об'єкта $P=@Map.Object[$ParentObj].Parameter[$SrcParam] ;повертаємося до карти з нашою ділянкою @CloseMap @ActivateMap $ThisMap ;вставляємо зкопійований параметр $ThisObj=@Map.SelectedObject @Map.Object[$ThisObj].Parameter[$DestParam] $P ;обновляємо об'єкт @Map.RefreshObject $ThisObj ; ;Параметр, з якого будемо копіювати на Чарівній карті(номер зони) $SrcParam=ID10020 ;параметр, в який будемо вставляти в нашу ділянку(номер зони) $DestParam=ID10020 $ThisMap=@ActivateMap ;копіюємо позначений об'єкт в буфер @Map.Copy ;відкриваємо Чарівну карту @FileOpen $SourceMap ;вставляємо у відкриту карту наш об'єкт @Map.Paste ;номер нашого об'єкта $ThisObj=@Map.SelectedObject ;полігон, в який об'єкт попав $ParentObj=@Map.ParentObject $ThisObj ;копіюємо значення параметра зовнішнього об'єкта $P=@Map.Object[$ParentObj].Parameter[$SrcParam] ;повертаємося до карти з нашою ділянкою @CloseMap @ActivateMap $ThisMap ;вставляємо зкопійований параметр $ThisObj=@Map.SelectedObject @Map.Object[$ThisObj].Parameter[$DestParam] $P ;обновляємо об'єкт @Map.RefreshObject $ThisObj ; ;Параметр, з якого будемо копіювати на Чарівній карті(НОМЕР КВАРТАЛУ) $SrcParam=ID10030 ;параметр, в який будемо вставляти в нашу ділянку(НОМЕР КВАРТАЛУ) $DestParam=ID10030 ;запам'ятовуємо номер нашої карти $ThisMap=@ActivateMap ;копіюємо позначений об'єкт в буфер @Map.Copy ;відкриваємо Чарівну карту @FileOpen $SourceMap ;вставляємо у відкриту карту наш об'єкт @Map.Paste ;номер нашого об'єкта $ThisObj=@Map.SelectedObject ;полігон, в який об'єкт попав $ParentObj=@Map.ParentObject $ThisObj ;копіюємо значення параметра зовнішнього об'єкта $P=@Map.Object[$ParentObj].Parameter[$SrcParam] ;повертаємося до карти з нашою ділянкою @CloseMap @ActivateMap $ThisMap ;вставляємо зкопійований параметр $ThisObj=@Map.SelectedObject @Map.Object[$ThisObj].Parameter[$DestParam] $P ;обновляємо об'єкт @Map.RefreshObject $ThisObj ;Параметр, з якого будемо копіювати на Чарівній карті(ГОЛОВА С/Р) $SrcParam=ID50035 ;параметр, в який будемо вставляти в нашу ділянку (ГОЛОВА С/Р) $DestParam=ID10070 ;запам'ятовуємо номер нашої карти $ThisMap=@ActivateMap ;копіюємо позначений об'єкт в буфер @Map.Copy ;відкриваємо Чарівну карту @FileOpen $SourceMap ;вставляємо у відкриту карту наш об'єкт @Map.Paste ;номер нашого об'єкта $ThisObj=@Map.SelectedObject ;полігон, в який об'єкт попав $ParentObj=@Map.ParentObject $ThisObj ;копіюємо значення параметра зовнішнього об'єкта $P=@Map.Object[$ParentObj].Parameter[$SrcParam] ;повертаємося до карти з нашою ділянкою @CloseMap @ActivateMap $ThisMap ;вставляємо зкопійований параметр $ThisObj=@Map.SelectedObject @Map.Object[$ThisObj].Parameter[$DestParam] $P ;обновляємо об'єкт @Map.RefreshObject $ThisObj ;Копіюємо квартал, вставляємо і перейменовуємо на ділянку @Map.Copy @Map.Paste @Map.ChangeSelectedLayer 3 ;Параметр, з якого будемо копіювати на Чарівній карті(7 ЦИФР КАД.НОМЕРА) $SrcParam=ID50034 ;параметр, в який будемо вставляти в нашу ділянку(7 ЦИФР КАД.НОМЕРА) $DestParam=ID20010 ;запам'ятовуємо номер нашої карти $ThisMap=@ActivateMap ;копіюємо позначений об'єкт в буфер @Map.Copy ;відкриваємо Чарівну карту @FileOpen $SourceMap ;вставляємо у відкриту карту наш об'єкт @Map.Paste ;номер нашого об'єкта $ThisObj=@Map.SelectedObject ;полігон, в який об'єкт попав $ParentObj=@Map.ParentObject $ThisObj ;копіюємо значення параметра зовнішнього об'єкта $P=@Map.Object[$ParentObj].Parameter[$SrcParam] ;повертаємося до карти з нашою ділянкою @CloseMap @ActivateMap $ThisMap ;вставляємо зкопійований параметр $ThisObj=@Map.SelectedObject @Map.Object[$ThisObj].Parameter[$DestParam] $P ;обновляємо об'єкт @Map.RefreshObject $ThisObj ;Параметр, з якого будемо копіювати на Чарівній карті (АДРЕСА ДІЛЯНКИ) $SrcParam=ID50036 ;параметр, в який будемо вставляти в нашу ділянку(АДРЕСА ДІЛЯНКИ) $DestParam=ID20020 ;запам'ятовуємо номер нашої карти $ThisMap=@ActivateMap ;копіюємо позначений об'єкт в буфер @Map.Copy ;відкриваємо Чарівну карту @FileOpen $SourceMap ;вставляємо у відкриту карту наш об'єкт @Map.Paste ;номер нашого об'єкта $ThisObj=@Map.SelectedObject ;полігон, в який об'єкт попав $ParentObj=@Map.ParentObject $ThisObj ;копируем значение параметра внешнего объекта $P=@Map.Object[$ParentObj].Parameter[$SrcParam] ;повертаємося до карти з нашою ділянкою @CloseMap @ActivateMap $ThisMap ;вставляємо зкопійований параметр $ThisObj=@Map.SelectedObject @Map.Object[$ThisObj].Parameter[$DestParam] $P ;обновляємо об'єкт @Map.RefreshObject $ThisObj ;викликаємо вікно заповнення адреси ділянки @Dialog.EditParameter ID20020 $ThisMap=@ActivateMap ;викликаємо вікно заповнення ПІП @Dialog.EditParameter ID20030 $ThisMap=@ActivateMap ;викликаємо вікно вибору цільового призначення @Dialog.EditParameter ID20040 $ThisMap=@ActivateMap
.JPG

Взял только эту часть скрипта

@Dialog.EditParameter ID20020

Воспроизвести ошибку не получается, всегда открывается нужный диалог, заданный в маске параметра. Попробуйте отследить цепочку действий, приводящую в ошибке (показу неправильного диалогового окна).

тут

Построение перпендикуляров от точечных объектов до ближайшего сегмента полилинии

Скрипт использует новую функцию

@Map.PerpendicularToNearestLine FromPoint ToObj PerpendicularLayer [Reverse]

которая строит перпендикуляр из точки FromPoint (X Y Z) до ближайшего сегмента полилинии ToObj. Перпендикуляр помещается в слой PerpendicularLayer. Если задано Reverse, тогда направление перпендикуляра обратное - от полилинии до точки FromPoint.

;слой куда будут помещены построенные отрезки
$PerpLayer=3
$N=@Map.SelCount
@if $N<>1 then @Break Выделите полилинию
;выбираем слой точек от которых строятся отрезки
$Layers=@Map.Layers.List
$PntLayer=@Dialog.ListSelect Выберите точечный слой|$Layers
$PntLayer=@StringPart 1 $PntLayer
;полилиния к которой строятся отрезки
$Poly=@Map.NextSelected 0
$N=@Map.Count + 1
;цикл по всем объектам карты
%Start
$N=$N-1
@if $N<1 then @Goto %Stop
$IsDeleted=@Map.Object[$N].Deleted
@if $IsDeleted then @Goto %Start
;слой текущего объекта
$Lay=@Map.Object[$N].LayerID
@if $Lay<>$PntLayer then @Goto %Start
;найден точечный объект
$Pnt=@Map.Object[$N].Point[1]
@Map.PerpendicularToNearestLine $Pnt $Poly $PerpLayer Reverse
@Goto %Start
%Stop
@Map.CalculateRange
@Window.Refresh

Test.dmf (2.79 KB)

Проблема не виникає, коли зправа вибрана вкладка Інфо. А якщо вибрати Правка, то коли перейменовую шар IN4 квартал на IN4 ділянка доступні параметри шару просто не обновляються і скрипт не може знайти потрібного параметру. Тому й видає пусту форму заповнення.

Все чудово працює на вкладці Інфо.

Повна конвертація IN4 в XML
Пропоную вашій увазі скрипт, який конвертує IN4 в XML. В результаті отримуємо повноцінний файл XML, який без проблем приймає НКС

Усі дані підтягуються із IN4. Необхідно ввести тільки дату видачі і ким виданий паспорт, а також вибрати тип техдокументації

Скрипт призначений (поки що) тільки для типових простих файлів IN4:

  • без оренди/сервітутів/обмежень,
  • власник - тільки фізична особа і тільки один
  • цільове призначення - тільки ОЖБ, ОСГ, ТСГВ і для ведення садівництва
  • тип документа, що посвідчує особу - тільки паспорт громадянина України
  • підстава - тільки рішення органу місцевого самоврядування

Вимога до IN4:

  • ПІП голови місцевої ради обов’язково у форматі Прізвище Ім’я По батькові

Якщо перераховані умови не виконуються то XML буде сформовано з помилками.

;виділяємо шар IN4 Квартал і копіюємо потрібні параметри
@Map.SelectLayer ID10000
$SrcParam1=@Map.Selected.GetParameter GL
$ParcelLocation=@Map.Selected.GetParameter BC
;виділяємо шар IN4 Ділянка і копіюємо потрібні параметри
@Map.SelectLayer ID20000
$SrcParam2=@Map.Selected.GetParameter AD
$SrcParam3=@Map.Selected.GetParameter KZ
$SrcParam4=@Map.Selected.GetParameter NM
$SrcParam5=@Map.Selected.GetParameter KF
$SrcParam6=@Map.Selected.GetParameter PP
$SrcParam7=@Map.Selected.GetParameter AU
$SrcParam8=@Map.Selected.GetParameter PZ
@Map.DeselectAll
@Map.SelectLayer ID30353
Перетворити | Петлю в складний полігон
@Map.DeselectAll
;виділяємо всі угіддя
@Map.SelectLayer ID30353
@Map.SelectLayer ID30050
@Map.SelectLayer ID30140
@Map.SelectLayer ID30080
@Map.SelectLayer ID30351
@Map.SelectLayer ID30580
@Map.SelectLayer ID30590
@Map.SelectLayer ID30110
Вибрати | Усю групу шарів
;перейменовуємо всі угіддя в шар IN4 Угіддля
@Map.ChangeSelectedLayer 4
@Map.DeselectAll
;виділяємо всі суміжники і копіюємо
@Map.SelectLayer ID50000
@Map.Selected.Copy
;конвертуємо в XML
@Map.In4ToXML
;обновляємо карту, щоби обновити всі шари (іншого способу не знайшов:)) )
@FileNew
@FileClose
@Window.Refresh
;вставляємо суміжники
@Map.Paste
@Map.CalculateRange
@Map.SelectAll
;заповнюємо типові параметри в XML (замінити на свої)
@Map.Selected.ChangeParameter ID7000003 Львівська регіональна філія ЦДЗК
@Map.Selected.ChangeParameter ID7000004 00694
@Map.Selected.ChangeParameter ID7000007 МПП “Землемір”32631088АГ5794072012-01-05ДудичАртурдиректорВачевськаСвітланаінженер-землевпорядник-804Львівська областьДрогобицькийсело СнятинкаЗелена9
@Map.Selected.ChangeParameter ID7000009
@Map.Selected.ChangeParameter ID7000010
@Map.Selected.ChangeParameter ID7000011
;заповнюємо ПІП гололови місцевої ради
$t1=
$t2=@StringPart 1 $SrcParam1
$t3=
$t4=@StringPart 2 $SrcParam1
$t5=
$t6=@StringPart 3 $SrcParam1
$t7=
$result=@Calc $t1$t2$t3$t4$t5$t6$t7
@Map.Selected.ChangeParameter ID7000402 $result
;заповнюємо ПІП начальника Держземагенства
$t1=БреньоЛюбомирЛюбомирович
@Map.Selected.ChangeParameter ID7000403 $t1
;місцезнаходження ділянки (введіть область і район вручну!)
$t1=Львівська область
$t2=@StringPart 1,$SrcParam2
$t3=Дрогобицький район
;в межах чи за межами
@if “$ParcelLocation”<>“000” then $t4=
@if “$ParcelLocation”=“000” then $t4=
$t5=
$vul=@StringPart 2,$SrcParam2
$typvyl=@StringPart 1.$vul
@if $typvyl=вул then $t6=вулиця
@if $typvyl=провул then $t6=провулок
@if $typvyl=вулиця then $t6=вулиця
@if $typvyl=провулок then $t6=провулок
@if $typvyl=пл then $t6=площа
@if $typvyl=площа then $t6=площа
$t7=
$t8=@StringPart 2.$vul
$t9=
$t10=@StringPart 3,$SrcParam2
$t11=
$t12=
@if “$vul”=“-” then $result=@Calc $t1$t2$t3$t4$t12
@if “$vul”<>“-” then $result=@Calc $t1$t2$t3$t4$t5$t6$t7$t8$t9$t10$t11$t12
@Map.Selected.ChangeParameter ID7000500 $result
;цільове призначення
@if “$SrcParam3”=“21 особисті підсобні господарства” then $t1=01.03
@if “$SrcParam3”=“22 ділянки для будівництва та обслуговування житлового будинку та господарських будівель (присадибні ділянки)” then $t1=02.01
@if “$SrcParam3”=“23 ###ДІЛЯНКИ ДЛЯ САДІВНИЦТВА” then $t1=01.05
@if “$SrcParam3”=“19 ділянки для ведення товарного с/г виробництва” then $t1=01.01
@Map.Selected.ChangeParameter ID7000510 $t1
@if “$SrcParam3”=“21 особисті підсобні господарства” then $t1=ОСГ
@if “$SrcParam3”=“22 ділянки для будівництва та обслуговування житлового будинку та господарських будівель (присадибні ділянки)” then $t1=ОЖБ
@if “$SrcParam3”=“23 ###ДІЛЯНКИ ДЛЯ САДІВНИЦТВА” then $t1=ведення садівництва
@if “$SrcParam3”=“19 ділянки для ведення товарного с/г виробництва” then $t1=ТСГВ
@Map.Selected.ChangeParameter ID7000511 $t1
@Map.Selected.ChangeParameter ID7000517
@Map.Selected.ChangeParameter ID7000518 0.0005
;інформація про власника (ПІП, паспорт, адреса, підстава набуття)
$t1=
$t2=@StringPart 1 $SrcParam4
$t2=$t2
$t3=@StringPart 2 $SrcParam4
$t3=$t3
$t4=@StringPart 3 $SrcParam4
$t4=$t4
$t5=
$t6=$SrcParam5
$t7=Паспорт громадянина України
$nomerseria=@StringPart 3,$SrcParam6
$t8=@StringPart 2 $nomerseria
$t8=$t8
$t9=@Dialog.Ask Дата видачі паспорта (рік-місяць-число) Default=1997-10-21 Size=250
$t9=$t9
$t10=@Dialog.Ask Ким виданий паспорт Default=Дрогобицьким РВ УМВС України у Львівській області Size=400
$t10=$t10
$t11=@StringPart 1 $nomerseria
$t11=$t11
$t12=
$t13=@StringPart 1,$SrcParam6
$t13=$t13
$t14=
$t15=@StringPart 1,$SrcParam7
$t15=$t15
$oblast=@StringPart 3,$SrcParam7
$t16=@StringPart 1 $oblast
$t16=$t16
$t17=@StringPart 4,$SrcParam7
$t17=$t17
$t18=@StringPart 5,$SrcParam7
$t18=$t18
$t19=@StringPart 6,$SrcParam7
$t19=$t19
$t20=@StringPart 7,$SrcParam7
$t20=$t20
$korpus=@StringPart 8,$SrcParam7
@if “$korpus”=“-” then $t21=
@if “$korpus”<>“-” then $t21=$korpus
$kvartyra=@StringPart 9,$SrcParam7
@if “$kvartyra”=“-” then $t22=
@if “$kvartyra”<>“-” then $t22=$kvartyra
$t23=@StringPart 1 $SrcParam3
$t23=$t23001
;тут добавити різні підстави набуття права власності
$t24=@StringPart 2,$SrcParam8
$chyslo=@StringPart 1.$t24
$misyac=@StringPart 2.$t24
$rik=@StringPart 3.$t24
$t24=“$rik-$misyac-$chyslo”
$t24=@DequoteText $t24
$t24=$t24
$t25=@StringPart 3,$SrcParam8
$t25=$t25
$t26=@StringPart 4,$SrcParam8
$t26=$t26
$t27=
$result=@Calc $t1$t2$t3$t4$t5$t6$t7$t8$t9$t10$t11$t12$t13$t14$t15$t16$t17$t18$t19$t20$t21$t22$t23$t24$t25$t26$t27
@Map.Selected.ChangeParameter ID7000520 $result
;вибираємо тип техдокументації
$t1=
$t2=@Dialog.ListSelect Виберіть тип техдокументації|001|002|003|004|005|006|007|008|009|010|011|012|013|014|015|016|017|018|019|020|021|022|023
$t3=2014-02-18001002004005007011013014017022034036040041042
$result=@Calc $t1$t2$t3
@Map.Selected.ChangeParameter ID7000522 $result
;Заповнюємо суміжники
@Map.DeselectAll
@Map.SelectLayer ID70010
@Map.Selected.Delete
@Map.SelectLayer ID50000
$N1=@Map.SelCount
$MC=@Map.Count
@if $N1=0 then @Break На карті немає суміжників
$N1=0
@Map.DeselectAll
%Pochatok2
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If $LID<>50000 then @Goto %Next2
$P1=@Map.Object[$N1].Parameter[ID20030]
@Map.SelectObject $N1
@Map.ChangeSelectedLayer 14
$t1=
$t2=@StringPart 1 $P1
$t3=
$t4=@StringPart 2 $P1
$t5=
$t6=@StringPart 3 $P1
$t7=
$t8=
$t9=
@if $t2=землі then $result=@Calc $t8$P1$t9 else $result=@Calc $t1$t2$t3$t4$t5$t6$t7
@Map.Selected.ChangeParameter ID7001003 $result
@Map.DeselectObject $N1
%Next2
@if $N1<$MC then @Goto %Pochatok2
@Map.SelectLayer ID50000
@Map.Selected.Delete
;Малюємо дві точки - закріплені межові знаки
;вибираємо шар XML:Земельна ділянка
@Map.SelectLayer ID70005
$Obj=@Map.SelCount
;координати 1-ої точки з XML:Земельна ділянка
$P=@Map.Object[$Obj].Point[1]
;створюємо перший точковий об’єкт в шарі “XML:Межові знаки, закріплені точки” з даними координатами
$PntObj=@Map.NewObject ID70001
@Map.Object[$PntObj].Point[1] $P
;заносимо номер точки та інші значення параметрів
@Map.Object[$PntObj].Parameter[ID7000100]=1
@Map.Object[$PntObj].Parameter[ID7000101]=Survey
@Map.Object[$PntObj].Parameter[ID7000102]=0,05
@Map.Object[$PntObj].Parameter[ID7000103]=0,05
@Map.Object[$PntObj].Parameter[ID7000104]=0,05
@Map.Object[$PntObj].Parameter[ID7000106]=+
@Map.RefreshObject $PntObj
;координати 2-ої точки з XML:Земельна ділянка
$P=@Map.Object[$Obj].Point[2]
;створюємо другий точковий об’єкт в шарі “XML:Межові знаки, закріплені точки” з даними координатами
$PntObj=@Map.NewObject ID70001
@Map.Object[$PntObj].Point[1] $P
;заносимо номер точки та інші значення параметрів
@Map.Object[$PntObj].Parameter[ID7000100]=2
@Map.Object[$PntObj].Parameter[ID7000101]=Survey
@Map.Object[$PntObj].Parameter[ID7000102]=0,05
@Map.Object[$PntObj].Parameter[ID7000103]=0,05
@Map.Object[$PntObj].Parameter[ID7000104]=0,05
@Map.Object[$PntObj].Parameter[ID7000106]=+
@Map.RefreshObject $PntObj
@Window.Refresh
;Виплавляємо угіддя, в яких замість 14 стоїть чомусь 17
@Map.DeselectAll
@Map.SelectLayer ID70009
$N1=@Map.SelCount
$MC=@Map.Count
@if $N1=0 then @Goto %End
$N1=0
@Map.DeselectAll
%Pochatok3
$N1=$N1+1
$LID=@Map.Object[$N1].LayerID
@If $LID<>70009 then @Goto %Next3
$P1=@Map.Object[$N1].Parameter[ID7000901]
@If $P1<>17 Землі тимчасової консервації then @Goto %Next3
@Map.SelectObject $N1
@Map.Object[$N1].Parameter[ID7000901]=14
@Map.DeselectObject $N1
%Next3
@if $N1<$MC then @Goto %Pochatok3
%End

Серьезный скрипт, видно, что немало труда вложено. Спасибо, что поделились.

У файлах IN4, зроблених ще в програмі Інвент-Град у словах українська буква “і” писалася латиницею. Зараз, при конвертації такого файлу в XML, виникає проблема через це, бо в останньому всі символи мають бути кирилицею. Пропоную скрипт, який всі латинські символи “і” у параметрах IN4 у відкритій карті перетворює на кириличні. Також скрипт шукає і замінює у параметрі PZ (підстава набуття права власності) римські цифри на арабські

@Map.DeselectAll @Map.SelectLayer ID10000 $GL=@Map.Selected.GetParameter GL @Map.DeselectAll @Map.SelectLayer ID20000 $AD=@Map.Selected.GetParameter AD $NM=@Map.Selected.GetParameter NM $TX=@Map.Selected.GetParameter TX $AU=@Map.Selected.GetParameter AU $PZ=@Map.Selected.GetParameter PZ $TD=@Map.Selected.GetParameter TD $New=@Calc Replace("$GL","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id10070 $New $New=@Calc Replace("$AD","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20020 $New $New=@Calc Replace("$NM","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20030 $New $New=@Calc Replace("$TX","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20040 $New $New=@Calc Replace("$AU","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20070 $New $New=@Calc Replace("$TD","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20180 $New $New=@Calc Replace("$PZ","XXX","30",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXIX","29",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXVIII","28",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXVII","27",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXVI","26",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXV","25",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXIV","24",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXIII","23",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXII","22",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XXI","21",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XX","20",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XIX","19",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XVIII","18",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XVII","17",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XVI","16",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XV","15",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XIV","14",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XIII","13",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XII","12",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","XI","11",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","IX","9",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","X","10",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","VIII","8",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","VII","7",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","VI","6",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","IV","4",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","V","5",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","III","3",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","II","2",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","I","1",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20160 $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Selected.ChangeParameter id20160 $New @Map.DeselectAll $MC=@Map.Count $N1=0 @Map.DeselectAll %Pochatok $N1=$N1+1 $LID=@Map.Object[$N1].LayerID @If $LID<>50000 then @Goto %Next $P1=@Map.Object[$N1].Parameter[ID20030] $New=@Calc Replace("$P1","I","І",1,0) $New=@DequoteText $New $New=@Calc Replace("$New","i","і",1,0) $New=@DequoteText $New @Map.Object[$N1].Parameter[id20030]=$New @Map.DeselectObject $N1 %Next @if $N1<$MC then @Goto %Pochatok

Нахождение минимального расстояния между двумя объектами

$Obj1=@Map.NextSelected 0
@if $Obj1=0 @Break Выделите 2 объекта
$Obj2=@Map.NextSelected $Obj1
@if $Obj2=0 @Break Выделите 2 объекта
$MinD=@Map.MinObjectDistance $Obj1 $Obj2
@Dialog.Message Расстояние между объектами $MinDм

Функция @Map.MinObjectDistance реализована в версии Digitals начиная с 19.08.2014.

Нахождение средней высоты откоса

$Obj=@Map.NextSelected 0
@if $Obj=0 @Break Выделите откос
$Height=@Map.GetSlopeHeight $Obj
@Dialog.Message Высота откоса $Heightм

Функция @Map.GetSlopeHeight реализована в версии Digitals начиная с 19.08.2014.
Otkos.dmf (1000 Bytes)

Нахождение высоты между 2-мя замаркированными точками объекта

Скрипт полезен при вычислении высоты откоса в произвольном месте. Замаркируйте точку на нижней и верхней кромке откоса и вызовите скрипт. Рассчитанная высота записывается в параметр с ID1 и выносится на карту в виде подписи.

$Obj=@Map.NextSelected 0
@if $Obj=0 @Break Выделите откос
$N=@Map.Object[$Obj].GetMarkedPointsCount
@if $N<>2 @Break Замаркируйте верхнюю и нижнюю точки откоса
$PntCount=@Map.Object[$Obj].Count
$ZArr=
$I=1
%Start
$Marked=@Map.Object[$Obj].GetPointMarked $I
@if $Marked=0 @Goto %NotMarked
$P=@Map.Object[$Obj].Point[$I]
$Z=@StringPart 3 $P
;это нужно если используется разделитель-запятая
;меняем запятую на точку
$Z=@Calc Replace(“$Z”,“,”,“.”)
$Z=@DequoteText $Z
;собираем высоты всех маркированных точек в одну строку
$ZArr=@Concat $ZArr, ,$Z
%NotMarked
$I=$I+1
@if $I<=$PntCount @Goto %Start
;высота первой и второй маркированных точек
$Z1=@StringPart 2 $ZArr
$Z2=@StringPart 3 $ZArr
;разница высот
$Height=@Calc Abs($Z1-$Z2)
;меняем точку на запятую
$Height=@Calc Replace(“$Height”,“.”,“,”)
$Height=@DequoteText $Height
;округляем до десятых
$Height=@RoundTo $Height 1
@Map.Object[$Obj].Parameter[ID1]=$Height
@Map.Object[$Obj].CreateCaption ID1 0 0 1 1 0 0
@Window.Refresh

Otkos.dmf (1.01 KB)

Построение отрезка, соединяющего 2 помеченных объекта по кратчайшему пути

$Obj1=@Map.NextSelected 0
@if $Obj1=0 @Break Выделите 2 объекта
$Obj2=@Map.NextSelected $Obj1
@if $Obj2=0 @Break Выделите 2 объекта
;получаем координаты кратчайшего отрезка в виде строки X1 Y1 Z1 X2 Y2 Z2
$Crds=@Map.ShortestSegmentBetweenObjects $Obj1 $Obj2
;добавляем объект в слой с ID1
$Obj=@Map.NewObject ID1
;координаты первой точки
$X=@StringPart 1 $Crds
$Y=@StringPart 2 $Crds
;объект создан уже с одной точкой в списке, меняем ее координаты
@Map.Object[$Obj].Point[1] $X $Y
;координаты второй точки
$X=@StringPart 4 $Crds
$Y=@StringPart 5 $Crds
;добавляем вторую точку объекта
@Map.Object[$Obj].AddPoint $X $Y
@Window.Refresh

ShortestSegment.dmf (1.24 KB)

Здравствуйте! Напишите пожалуйста скрипт: Извлечь файл в ин4 - сохранить в определенный каталог с именем которое вытягивается с параметра CM (додаткова інформація ID20100) что-то у меня не получается такого сделать. Заранее благодарен.

$Path=d:\temp
$FE=@FolderExists $Path
@if $FE<>1 then @Break Путь “$Path” не существует
$SL=@Map.Selected.List
@Text[1].Text $SL
$SC=@Text[1].Count
@if $SC<1 then @Break Пометьте Іn4-участок(ки)
$SourceMap=@ActivateMap
@Map.DeselectAll
$I=0
%Loop
$I=$I+1
$SO=@Text[1].Line[$I]
$LID=@Map.Object[$SO].LayerID
@if $LID<>20000 then @Goto %Next
@Map.SelectObject $SO
$CadNumber=@Map.Object[$SO].CalculateFormula PARENTDSPARENTSDP[SC]
$FN=@Map.Object[$SO].Parameter[CM]
@if $FN= then $FN=$CadNumber
@if $FN= then @Goto %Next
Файл | Извлечь участок в In4
@Map.SaveToFile $Path$FN.in4
@CloseMap
@ActivateMap $SourceMap
@Map.DeselectAll
%Next
@if $I<$SC then @Goto %Loop

Здравствуйте. Скрипт “Повна конвертація IN4 в XML” КЛАС !!! , но подскажите постоянно выбивает “На карті немає суміжників”

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

Скиньте обмінний файл, який ви конвертуєте і я скажу, в чому проблема. Очевидно, щось із нумерацією шарів.

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

яка ціна питання?

лс

Неплохой такой скриптик по конвертации обменных файлов, чем то похож на мой. :slight_smile:

Здравствуйте. Помогите пожалуйста нужен скрипт чтоб в XML в смежниках (юр. лицо) автоматом добавлялся ЕДРПОУ с номером (00000001). Заранее спасибо.