Аналитика http://geosystema.net/forum/ |
|
Библиотека полезных скриптов http://geosystema.net/forum/viewtopic.php?f=3&t=2539 |
Страница 3 из 15 |
Автор: | Bondarets Alexander [ 13 авг 2013 09:25 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Подписывание линейных объектов по контуру с заданным шагом Для вынесения подписей скрипт использует новую функцию @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 Новая функция полезна для автоматизации подписывания высот горизонталей. |
Автор: | Bondarets Alexander [ 29 авг 2013 09:41 ] | ||
Заголовок сообщения: | Re: Библиотека полезных скриптов | ||
Создание точечных объектов в узлах полигонов и вынесение подписей точек Для всех помеченных объектов скрипт добавляет точки в каждый узел объекта, формирует имя точки и выносит ее подпись. Имя точки может быть с заданным префиксом и суффиксом, шаг нумерации также задается. ;номер слоя точечных объектов, которые буду добавлены в каждый узел полигона $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
|
Автор: | Dmitry_Zolotar [ 29 авг 2013 10:53 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Скрипт заполняет значение параметра 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-параметрах символов "(",")","|". |
Автор: | Bondarets Alexander [ 10 сен 2013 11:01 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Создание ограничивающих объекты прямоугольников Для всех помеченных объектов карты скрипт создает ограничивающие прямоугольники. Слой, в который помещаются прямоугольники, выбирается пользователем в диалоговом окне. $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 |
Автор: | BAM [ 10 сен 2013 11:42 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Построение по дир. углам или румбам 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 |
Автор: | Bondarets Alexander [ 20 сен 2013 09:45 ] | ||
Заголовок сообщения: | Re: Библиотека полезных скриптов | ||
Создание 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
|
Автор: | fendak [ 05 дек 2013 11:05 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Bondarets Alexander писал(а): Создание HTML подписи при завершении сбора объекта треба аналогічний підпис до властивостей дерева. В чисельнику діаметр, в знаменнику висота. Як у чисельнику спереді добавити у підписах значок діаметру? |
Автор: | Dmitry_Zolotar [ 06 дек 2013 13:53 ] | ||
Заголовок сообщения: | Re: Библиотека полезных скриптов | ||
fendak писал(а): Bondarets Alexander писал(а): Создание HTML подписи при завершении сбора объекта треба аналогічний підпис до властивостей дерева. В чисельнику діаметр, в знаменнику висота. Як у чисельнику спереді добавити у підписах значок діаметру? Літера "Ш" або Alt+0216 в західноєвропейській кодировці.
|
Автор: | klaid [ 12 дек 2013 12:23 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Підскажіть як панель з кнопками скриптів (Панель інструментів) приєднати до рідної панелі, наприклад праворуч від "Множественная пометка" |
Автор: | Sergey Oleynik [ 12 дек 2013 14:49 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
klaid писал(а): Підскажіть як панель з кнопками скриптів (Панель інструментів) приєднати до рідної панелі, наприклад праворуч від "Множественная пометка" Перетяните ее чтобы она была в нужном месте, а затем включите в контекстном меню панели опцию Привязка/Левый верхний и отключите Заголовок. |
Автор: | fendak [ 13 дек 2013 19:40 ] | ||
Заголовок сообщения: | Re: Библиотека полезных скриптов | ||
Зробив карту, де нанесені усі кадастрові квартали району. Заповнив по кожному полігону код КОАТУУ, зону, квартал, 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
|
Автор: | Bondarets Alexander [ 16 дек 2013 16:08 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Взял только эту часть скрипта @Dialog.EditParameter ID20020 Воспроизвести ошибку не получается, всегда открывается нужный диалог, заданный в маске параметра. Попробуйте отследить цепочку действий, приводящую в ошибке (показу неправильного диалогового окна). |
Автор: | voha [ 16 дек 2013 22:11 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
fendak писал(а): ...Може просто код занадто великий? Якщо можна - спростіть його... тут
|
Автор: | Bondarets Alexander [ 17 дек 2013 14:51 ] | ||
Заголовок сообщения: | Re: Библиотека полезных скриптов | ||
Построение перпендикуляров от точечных объектов до ближайшего сегмента полилинии Скрипт использует новую функцию @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
|
Автор: | fendak [ 03 янв 2014 23:56 ] |
Заголовок сообщения: | Re: Библиотека полезных скриптов |
Bondarets Alexander писал(а): Взял только эту часть скрипта @Dialog.EditParameter ID20020 Воспроизвести ошибку не получается, всегда открывается нужный диалог, заданный в маске параметра. Попробуйте отследить цепочку действий, приводящую в ошибке (показу неправильного диалогового окна). Проблема не виникає, коли зправа вибрана вкладка Інфо. А якщо вибрати Правка, то коли перейменовую шар IN4 квартал на IN4 ділянка доступні параметри шару просто не обновляються і скрипт не може знайти потрібного параметру. Тому й видає пусту форму заповнення. Все чудово працює на вкладці Інфо. |
Страница 3 из 15 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |