Аналитика

Цифровая фотограмметрия, картография и землеустройство
Текущее время: 28 мар 2024 17:59

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 211 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 15  След.
Автор Сообщение
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 13 авг 2013 09:25 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Подписывание линейных объектов по контуру с заданным шагом

Для вынесения подписей скрипт использует новую функцию @Map.Object[$N].CreateCaptionAlongContour. Функция создает подписи для заданного параметра на заданном удалении от первой точки объекта. Подписи ориентируются вдоль контура объекта.

;параметр для которого выносятся подписи
$Param=ID1
;шаг подписей вдоль контура объекта в метрах
$Step=25
;смещение подписи по вертикали
$CaptionShift=0
;помеченный объект
$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.RefreshObject $N
@Window.Refresh


Новая функция полезна для автоматизации подписывания высот горизонталей.

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 29 авг 2013 09:41 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Создание точечных объектов в узлах полигонов и вынесение подписей точек

Для всех помеченных объектов скрипт добавляет точки в каждый узел объекта, формирует имя точки и выносит ее подпись. Имя точки может быть с заданным префиксом и суффиксом, шаг нумерации также задается.

;номер слоя точечных объектов, которые буду добавлены в каждый узел полигона
$PointsLayerID=70001
;номер параметра, в который будет помещено имя узла
$NameParamID=7000100
;начальный номер
$Start=1
;шаг нумерации
$Step=1
;префикс имен узлов (может быть пустая строка)
$Res=@Dialog.Ask Задайте префикс и через пробел суффикс для имен точек Size=250
$Prefix=@StringPart 1 $Res
$Suffix=@StringPart 2 $Res
;проверяем правильность заданных ID
$PointsLayer=@Map.Layers.FindByID $PointsLayerID
@if $PointsLayer=0 then @Break Точечный слой $PointsLayerID не найден
$NameParam=@Map.Parameters.FindByID $NameParamID
@if $NameParam=0 then @Break Параметр $NameParamID не найден
$SelCount=@Map.SelCount
@if $SelCount=0 then @Break Пометьте объекты для подписывания точек
;цикл по помеченным объектам
$Obj=0
%ObjLoop
$Obj=@Map.NextSelected $Obj
;все помеченные объекты пройдены, останавливаем скрипт
@if $Obj=0 then @Break
;цикл по точкам объекта
$Pnt=1
$PntCount=@Map.Object[$Obj].Count
%PntLoop
;координаты текущей точки
$P=@Map.Object[$Obj].Point[$Pnt]
;создаем точечный объект с данными координатами
$PntObj=@Map.NewObject $PointsLayer
@Map.Object[$PntObj].Point[1] $P
;получаем номер точки
$Number=@Concat $Prefix,$Start,$Suffix
$Start=$Start+$Step
;заносим номер точки в значение параметра
@Map.Object[$PntObj].Parameter[$NameParam] $Number
;создаем подпись
@Map.Object[$PntObj].CreateCaption $NameParam 0 0 0 0 0 0
@Map.RefreshObject $PntObj
$Pnt=$Pnt+1
;последнюю точку полигона пропускаем
@if $Pnt<$PntCount then @Goto %PntLoop
@Goto %ObjLoop
@Window.Refresh


Вложения:
CaptionTest.dmf [21.18 Кб]
Скачиваний: 1048

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 29 авг 2013 10:53 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
Скрипт заполняет значение параметра ID7000580 (при отсутствии такого параметра скрипт его создает и делает доступным слою XML:Земельна ділянка) списком собственников земельных участков в картах на основе XMLNormal.dmf. Разделитель в списке - запятая.

$MON=0
$MC=@Map.Count
@if $MC<1 then @Goto %Exit
;создаем параметр ID7000580 при отсутствии
$S=@Map.Parameters.Get ID7000580
@if $S= then @Map.Parameters.Add 7000580 5 Список владельцев
;добавляем параметр ID7000580 в список доступных слою XML : Земельна ділянка
$S=@Map.Layers.GetValidParameters ID70005
@Map.Layers.SetValidParameters ID70005 $S ID7000580
;цикл для всех объектов в карте
%NextObject
$MON=$MON+1
;проверка слоя объекта
$LID=@Map.Object[$MON].LayerID
@if $LID<>70005 then @Goto %IgnoreObject
;получаем значение параметра, содержащего информацию о собственниках
$PP=@Map.Object[$MON].Parameter[ID7000520]
;определяем кол-во собственников
$PC=@XML.NodeCount /Proprietors ProprietorInfo $PP
;пропускаем незаполненные
@if $PC<1 then @Goto %IgnoreObject
;для каждого собственника
$I=0
$Res=
%Loop
$I=$I+1
;определяем тип (юр. или физ. лицо)
$IsLE=@XML.NodeCount ProprietorInfo[$I]/Authentication LegalEntity $PP
@if $IsLE=1 then @Goto %LegalEntity
;для физлиц получаем
;фамилию
$LN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/LastName $PP
;имя
$FN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/FirstName $PP
;отчество
$MN=@XML.XPath ProprietorInfo[$I]/Authentication/NaturalPerson/FullName/MiddleName $PP
;игнорируем физлиц без фамилии
@if $LN= then @Goto %Continue
;добавляем разделитель списка для не первых по порядку собственников
@if $Res<> then $Res=$Res,
;добавляем ФИО в Список
$Res=$Res$LN $FN $MN
@Goto %Continue
;для юрлиц
%LegalEntity
;получаем название
$N=@XML.XPath ProprietorInfo[$I]/Authentication/LegalEntity/Name $PP
;игнорируем незаполненные
@if $N= then @Goto %Continue
;добавляем разделитель списка для не первых по порядку собственников
@if $Res<> then $Res=$Res,
;добавляем название в Список
$Res=$Res$N
%Continue
@if $I<$PC then @Goto %Loop
@if $Res= then @Goto %IgnoreObject
;вносим список в параметр ID7000580
@Map.Object[$MON].Parameter[ID7000580] $Res
%IgnoreObject
@if $MON<$MC then @Goto %NextObject
%Exit


P.S. Ged.exe лучше обновить, исправлена ошибка при работе функции XPT, возникающая при наличии в XML-параметрах символов "(",")","|".

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 10 сен 2013 11:01 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Создание ограничивающих объекты прямоугольников

Для всех помеченных объектов карты скрипт создает ограничивающие прямоугольники. Слой, в который помещаются прямоугольники, выбирается пользователем в диалоговом окне.

$N=@Map.SelCount
@if $N=0 then @Break Выделите объекты для которых нужно построить ограничивающие прямоугольники
$Layers=@Map.Layers.List
;выбираем слой рамок, можно задать его ID жестко без диалога выбора
$FrameLayer=@Dialog.ListSelect Выберите слой рамок|$Layers
$FrameLayer=@StringPart 1 $FrameLayer
;цикл по помеченным объектам
$Obj=0
%Start
$Obj=@Map.NextSelected $Obj
;все помеченные объекты пройдены
@if $Obj=0 then @Break
;получаем размах объекта в виде строки "MinX MinY MinZ MaxX MaxY MaxZ"
$S=@Map.Object[$Obj].GetMinMax
;формируем координаты ограничивающей рамки, начиная с левого нижнего угла, по часовой
$X1=@StringPart 1 $S
$Y1=@StringPart 2 $S
$X2=@StringPart 4 $S
$Y2=@StringPart 2 $S
$X3=@StringPart 4 $S
$Y3=@StringPart 5 $S
$X4=@StringPart 1 $S
$Y4=@StringPart 5 $S
;создаем объект-рамку
$FrameObj=@Map.NewObject ID$FrameLayer
;объект создан уже с одной точкой, заменяем ее
@Map.Object[$FrameObj].Point[1] $X1 $Y1
;добавляем остальные точки рамки
@Map.Object[$FrameObj].AddPoint $X2 $Y2
@Map.Object[$FrameObj].AddPoint $X3 $Y3
@Map.Object[$FrameObj].AddPoint $X4 $Y4
@Map.Object[$FrameObj].AddPoint $X1 $Y1
@Map.RefreshObject $FrameObj
@Goto %Start
@Window.Refresh

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 10 сен 2013 11:42 
Специалист
Специалист

Зарегистрирован:
20 июн 2012 10:49
Сообщения: 22
Построение по дир. углам или румбам

1. Нужно пометить первую точку и запустить скрипт
2. Выбераем дир. углы или румбы
3. Для румбов вводим четверть (1 2 3 4) и угол через "," (град,мин,сек)
4. Вводим дистанцию
На экране появится точка. Она атоматом становится первой. Повторяем действие 3,4 скольк нужно.

$V=@Dialog.Select Выбери|Дир. углы|Румб
%next
$n=@Map.NextSelected
@If $n=0 then @Break Пометь первую точку
$nn=@Map.Object[$n].Parameter[4]
$x=@Map.Object[$n].Parameter[-4]
$x=@Calc Replace("$x",",",".")
$x=@DequoteText $x
$x=@DequoteText $x
$y=@Map.Object[$n].Parameter[-3]
$y=@Calc Replace("$y",",",".")
$y=@DequoteText $y
$y=@DequoteText $y
@Map.DeselectAll
@If $V=Румб then @Goto %end1
$a=@Dialog.Ask Угол 90,30,30
@If $a= then @Goto %end
$d=@Dialog.Ask дистанция
@If $d= then @Goto %end
$a=@Calc Replace("$a",".",",")
$a=@DequoteText $a
$a=@DequoteText $a
$d=@Calc Replace("$d",".",",")
$d=@DequoteText $d
$d=@DequoteText $d
$a1=@StringPart 1,$a
$a2=@StringPart 2,$a
@If $a2= then $a2=0
$a3=@StringPart 3,$a
@If $a3= then $a3=0
$a=(($a3/60+$a2)/60+$a1)*3.1415926535897932384626433832795028841971/180
%next1
$ac=@Calc Cos($a)
;@Break $ac
$dx=$x+$ac*$d
$dx=@Calc Replace("$dx",".",",")
$dx=@DequoteText $dx
$dx=@DequoteText $dx
$as=@Calc sin($a)
$dy=$y+$as*$d
$dy=@Calc Replace("$dy",".",",")
$dy=@DequoteText $dy
$dy=@DequoteText $dy
$nn=$nn+1
$N=@Map.AddObject 0|1|ID11340000|1|0 $dx $dy 0|1|ID11340000|1|4 $nn
;
@Map.SelectByParameters 1|4>=$nn
@Map.Selected.CreateCaptions ID93 0 0 1 0 0,1 1
Вид | Показать все
@Map.SelectLayer $nn
@Goto %next
@Goto %end
%end1
$a=@Dialog.Ask Четверть (3,90,30,30)
$a=@Calc Replace("$a",".",",")
$a=@DequoteText $a
$a=@DequoteText $a
$a1=@StringPart 1,$a
$a2=@StringPart 2,$a
$a3=@StringPart 3,$a
@If $a3= then $a3=0
$a4=@StringPart 4,$a
@If $a4= then $a4=0
$a=($a4/60+$a3)/60+$a2
@If $a1=2 then $a=180-$a
@If $a1=3 then $a=180+$a
@If $a1=4 then $a=360-$a
$a=$a*3.1415926535897932384626433832795028841971/180
$d=@Dialog.Ask дистанция
@If $d= then @Goto %end
$d=@Calc Replace("$d",".",",")
$d=@DequoteText $d
$d=@DequoteText $d
@Goto %next1
%end


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 20 сен 2013 09:45 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Создание HTML подписи при завершении сбора объекта

Скрипт работает с приложенным DMF файлом. Нажмите кнопку скрипта для его активизации и выберите слой сбора Колодязь оглядовий водопроводу. По завершению сбора объекта открывается диалоговое окно, где требуется ввести значение отметок верха и низа колодца, после чего автоматически создается HTML подпись, представляющая собой дробь, содержащую введенные значения.

%Events.OnCollect
;ID параметра верха колодца
$TopParam=ID44
;ID параметра низа колодца
$BottomParam=ID47
;ID параметра подписи колодца
$CaptionParam=ID53
$Obj=@EventObject
$ObjLayerId=@Map.Object[$Obj].LayerId
;интересуют только колодцы, остальные объекты пропускаем
@if ($ObjLayerId<80020000) or ($ObjLayerId>80022300) then @Break
$S=@Dialog.Ask Введите отметку верха и низа колодца через пробел Size=250 Default=0 0
;отметка верха колодца
$Top=@StringPart 1 $S
;отметка низа колодца
$Bottom=@StringPart 2 $S
@Map.Object[$Obj].Parameter[$TopParam] $Top
@Map.Object[$Obj].Parameter[$BottomParam] $Bottom
;в маске параметра содержится HTML подписи
$Mask=@Map.Parameters.Mask $CaptionParam
;записывавем HTML в параметр подписи
@Map.Object[$Obj].Parameter[$CaptionParam] $Mask
;создаем подпись
@Map.Object[$Obj].CreateCaption $CaptionParam 0 0 1 0 1 -0.5
@Map.RefreshObject $Obj


Скрипт можно настроить на работу с любыми параметрами. Можно создавать и более сложные HTML подписи. Подробнее здесь viewtopic.php?p=16473#16473


Вложения:
HTMLCaption.dmf [36.06 Кб]
Скачиваний: 989

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 05 дек 2013 11:05 
Гуру
Гуру

Зарегистрирован:
05 апр 2012 10:20
Сообщения: 797
Откуда: Львівська область
Bondarets Alexander писал(а):
Создание HTML подписи при завершении сбора объекта


треба аналогічний підпис до властивостей дерева. В чисельнику діаметр, в знаменнику висота.
Як у чисельнику спереді добавити у підписах значок діаметру?

_________________
додатково про скрипти Digitals на www.digitals.at.ua


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 06 дек 2013 13:53 
Гуру
Гуру

Зарегистрирован:
18 апр 2007 11:55
Сообщения: 2298
Откуда: Vinnytsia
fendak писал(а):
Bondarets Alexander писал(а):
Создание HTML подписи при завершении сбора объекта


треба аналогічний підпис до властивостей дерева. В чисельнику діаметр, в знаменнику висота.
Як у чисельнику спереді добавити у підписах значок діаметру?

Літера "Ш" або Alt+0216 в західноєвропейській кодировці.


Вложения:
diameter.dmf [93.26 Кб]
Скачиваний: 938

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 12 дек 2013 12:23 
Гуру
Гуру

Зарегистрирован:
02 апр 2013 15:28
Сообщения: 177
Підскажіть як панель з кнопками скриптів (Панель інструментів) приєднати до рідної панелі, наприклад праворуч від "Множественная пометка"


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 12 дек 2013 14:49 
Администратор
Администратор

Зарегистрирован:
28 авг 2004 17:19
Сообщения: 1009
klaid писал(а):
Підскажіть як панель з кнопками скриптів (Панель інструментів) приєднати до рідної панелі, наприклад праворуч від "Множественная пометка"

Перетяните ее чтобы она была в нужном месте, а затем включите в контекстном меню панели опцию Привязка/Левый верхний и отключите Заголовок.

_________________
Команда разработчиков Digitals
(наш skype, e-mail и телефон находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals | Страница в Facebook


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 13 дек 2013 19:40 
Гуру
Гуру

Зарегистрирован:
05 апр 2012 10:20
Сообщения: 797
Откуда: Львівська область
Зробив карту, де нанесені усі кадастрові квартали району. Заповнив по кожному полігону код КОАТУУ, зону, квартал, 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
.JPG [ 24.19 Кб | Просмотров: 72038 ]

_________________
додатково про скрипти Digitals на www.digitals.at.ua
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 16 дек 2013 16:08 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Взял только эту часть скрипта

@Dialog.EditParameter ID20020

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

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 16 дек 2013 22:11 
Гуру
Гуру

Зарегистрирован:
06 июн 2010 06:35
Сообщения: 823
Откуда: Ліспроект Володимир Вовчанський
fendak писал(а):
...Може просто код занадто великий? Якщо можна - спростіть його...
тут


Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 17 дек 2013 14:51 
Гуру
Гуру

Зарегистрирован:
26 фев 2007 12:04
Сообщения: 1751
Откуда: Vinnitsa
Построение перпендикуляров от точечных объектов до ближайшего сегмента полилинии

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

@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 Кб]
Скачиваний: 823

_________________
Команда разработчиков Digitals
(наш e-mail и ICQ находятся в меню Помощь|О программе)
Новичкам сюда | Новые возможности программы | Купить Digitals
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Библиотека полезных скриптов
СообщениеДобавлено: 03 янв 2014 23:56 
Гуру
Гуру

Зарегистрирован:
05 апр 2012 10:20
Сообщения: 797
Откуда: Львівська область
Bondarets Alexander писал(а):
Взял только эту часть скрипта

@Dialog.EditParameter ID20020

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


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

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

_________________
додатково про скрипти Digitals на www.digitals.at.ua


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 211 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 15  След.

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 122


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB