Аналитика http://www.geosystema.net/forum/ |
|
Запрос на функцию http://www.geosystema.net/forum/viewtopic.php?f=1&t=49 |
Страница 46 из 92 |
Автор: | Dmitry_Zolotar [ 15 янв 2013 12:11 ] |
Заголовок сообщения: | Re: Запрос на функцию |
voha писал(а): Sergey Oleynik писал(а): В Service Layer никакие объекты кроме рамки карты и опорных точек находится не могут. ... Підкажіть, будь-ласка, як можна змінити статус службового шару Адже команда @Map.Layers.SetState -3 0 не працює.В скрипті треба дати можливість користувачу вибрати фрагмент карти для збереження/друку. Позначивши рамку карти, скрипт очікував би, поки користувач розмістить рамку карти, схопивши за центр рамки. Код: @Map.Layers.SetState -3 0 @Map.SelectLayer -3 @Dialog.WaitBox Виберіть фрагмент обмежений рамкою карти В оновленій версії ged.exe команди @Map.Layers.SetState та @Map.SelectLayer працюють і для рамки карти. |
Автор: | Dmitry_Zolotar [ 15 янв 2013 12:14 ] |
Заголовок сообщения: | Re: Запрос на функцию |
voha писал(а): Є полігон - квартал, що містить внутрішні полігони та "купу" лінійних і точкових об'єктів. Задача - при позначеному полігоні квартала вибрати тільки полігони усередині позначеного. Вирішення: $NumObg=@Map.SelectedObject Вибрати | Усередині позначеного @Map.DeselectObject $NumObg ... На місці ... має бути функція @Map.SelectByLayersStyleSelected List, яка серед позначеного вибрала б об'єкти в шарі стилю тільки полігони. Взагалі, в групі функцій Map.Select, хотілося б бачити @Map.SelectByLayersStyle List. Меню Правка>Вибрати містить достатню кількість пунктів вибірки, але опції "серед позначених" немає. Порадьте, будь-ласка, як вирішити таку задачу Код: $NumObg=@Map.SelectedObject
Вибрати | Усередині позначеного @Map.DeselectObject $NumObg $SO=0 %Loop $SO=@Map.NextSelected $SO @if $SO=0 then @Goto %Continue $Closed=@Map.Object[$SO].Closed @if $Closed=0 then @Map.DeselectObject $SO @Goto %Loop %Continue |
Автор: | voha [ 15 янв 2013 12:29 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Чемно дякую. А можна ще питання: @IterateObjects Scriptname - Повторяет скрипт для каждого обьекта карты, передавая его номер как параметр. Будучи викликаною зі скрипта Scriptname_1, функція виконує Scriptname_2 від початку до кінця рівно стільки раз, скільки об'єктів в карті, причому з кожним новим проходженням скрипта Scriptname_2 його параметр $Parameters матиме значення номера об'єкта карти. Після того, як скрипт Scriptname_2 пропрацює для усіх об'єктів карти, управління передається скрипту Scriptname_1 для виконання команд, що йдуть в порядку після @IterateObjects Scriptname. Скрипт Scriptname_2 може знаходитись як в теці Library, так і в панелі інструментів. Багато "нарозмишляв", але чи все правда Поправте, будь-ласка, якщо не так. |
Автор: | voha [ 16 янв 2013 07:10 ] |
Заголовок сообщения: | Re: Запрос на функцию |
voha писал(а): @IterateObjects Scriptname - Повторяет скрипт для каждого обьекта карты, передавая его номер как параметр. Будучи викликаною зі скрипта ... 1. Чи зобов'язаний працювати скрипт-3 (який по суті є функцією) зі своїми вхідними параметрами, викликаний командою зі скрипта-2, що в свою чергу був викликаний зі скрипта-1 командою @IterateObjects Scriptname Чи не буде конфліктів між $Parameters. 2. Якщо треба визначити у скрипті, чи доступний параметр 21 шару 21, використовуємо @Map.Layers.GetValidParameters Тут невеличкі фрагменти логу в різних варіантах: $LayValParam=MAP.LAYERS.GETVALIDPARAMETERS 99 99 2 4 5 6 7 8 $InLayValParam21=CALC pos("21","99 2 4 5 6 7 8") 0 Де гарантія що скрипт, перебираючи шари, не наткнеться на шар, з порядковим номером 21 Тоді: $InLayValParam21=CALC pos("21","21 2 4 5 6 7 8") - неправильний результат, оскільки насправді параметр 21 шару 21 недоступний; якщо скрипту трапиться CALC pos(" 21 ","34 2 4 5 6 7 8 21") - неправильний результат, оскільки насправді параметр 21 шару 34 доступний. Голову ламаю, і думаю: шкода, що немає функції перевірки, чи доступний параметр для шару,чи ні |
Автор: | Dmitry_Zolotar [ 16 янв 2013 12:15 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Скрипт є функцією яка повертає 1, якщо заданий параметр доступний шару, інакше повертає 0. Аргументами функціє є номер(або ID) шару та номер(не ID) параметра. Приклад: Код: $S=%Library.CheckParamValidity 1 25
@if $S=1 then @Dialog.Message Параметр 25 доступен слою 1 @if $S=0 then @Dialog.Message Параметр 25 не доступен слою 1 |
Автор: | voha [ 17 янв 2013 14:30 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Dmitry_Zolotar писал(а): Скрипт є функцією яка повертає 1, якщо заданий параметр доступний шару, інакше повертає 0... Просте й елементарне вирішення. Дуже дякую. А як, що-до питання з $Parameters Поки виплутався, звівши всі три скрипти в один, але надалі, хотілося-б використовувати скрипти-функції. Яке значення буде мати службова змінна $Parameters в межах скрипта скрипт-2 викликаного функцією @IterateObjects скрипт-2 після виконання функції скрипт-3 зі своєю $Parameters Дуже вже важко прослідкувати лог операцій, при розгалуженій організації скриптів.
|
Автор: | Dmitry_Zolotar [ 17 янв 2013 15:45 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Глобальних змінних в скриптах немає, зона видимості усіх міток та змінних(в тому числі $Parameters та $Result) - скрипт, тобто змінні або міткі з однаковим імям, обявлені в різних скриптах - різні, навіть якщо ці скрипти викликають один одного. |
Автор: | voha [ 18 янв 2013 18:10 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Дякую за роз'яснення. Наступним до вирішення є питання: функція @Map.Selected.CreateCaptions ParamIndex Orientation Position VAlign HAlign ShiftX ShiftY створює і оригінальним способом розміщує підпис в найбільш "підходящому" для цього місці полігона. Якщо цей полігон "чудернацької", витягнутої в смужку форми, підпис розміщується не в геометричному центрі полігона, а в "достатньому" місці полігона. Цікавий алгоритм. Якби його можна було застосувати для створення в цій загадковим способом визначеній точці точкового об'єкта. Чи цей запит можливий для реалізації функцією |
Автор: | Denidz [ 22 янв 2013 13:30 ] |
Заголовок сообщения: | Re: Запрос на функцию |
/Есть ли функция обрезки линии до определенной длины? |
Автор: | voha [ 22 янв 2013 16:53 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Denidz писал(а): /Есть ли функция обрезки линии до определенной длины? @Map.Selected.Prolong Length - Продлевает помеченный объект (линию) с обеих концов на заданную длин. Якщо Length число з мінусом - вкорочує лінію з обох боків, далі - справа арифметики та інших функцій. |
Автор: | Denidz [ 22 янв 2013 22:18 ] |
Заголовок сообщения: | Re: Запрос на функцию |
voha писал(а): Denidz писал(а): /Есть ли функция обрезки линии до определенной длины? @Map.Selected.Prolong Length - Продлевает помеченный объект (линию) с обеих концов на заданную длин. Якщо Length число з мінусом - вкорочує лінію з обох боків, далі - справа арифметики та інших функцій. Почти то что надо, но как бы сделать чтобы обрезка происходила не с обоих концов относительно центра, а чтоб один конец был зафиксирован на месте, а другой перемещался? буду очень благодарен за помощь! |
Автор: | BAM [ 23 янв 2013 12:02 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Используй @Map.Object[N].Point[N] (примерно так @Map.Object[$n].Point[$CHt2] $dx $dy $z12) новые координаты можно получить из дир. угла исходной линии и нужной дистанции |
Автор: | Denidz [ 24 янв 2013 21:22 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Denidz писал(а): voha писал(а): Denidz писал(а): /Есть ли функция обрезки линии до определенной длины? @Map.Selected.Prolong Length - Продлевает помеченный объект (линию) с обеих концов на заданную длин. Якщо Length число з мінусом - вкорочує лінію з обох боків, далі - справа арифметики та інших функцій. Почти то что надо, но как бы сделать чтобы обрезка происходила не с обоих концов относительно центра, а чтоб один конец был зафиксирован на месте, а другой перемещался? буду очень благодарен за помощь! Сенкс! То что надо! Вот наваял простой скриптец: $Sel=@Map.NextSelected $Dir=@Map.Object[$Sel].Parameter[1] /из этого параметра у меня берется дир угол $x=@Map.Object[$Sel].Point[1].x $y=@Map.Object[$Sel].Point[1].y $dx=@Calc $x+Cos($Dir)*20 $dy=@Calc $y+Sin($Dir)*20 @Map.Object[$Sel].Point[2] $dx $dy 0 Вид | Обновить Но вот понять не могу - обрезается линия у меня до 20 м, но ее направление меняется. а почему так происходит кто-то подскажет? |
Автор: | Dmitry_Zolotar [ 25 янв 2013 00:25 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Denidz писал(а): Вот наваял простой скриптец: Код: $Sel=@Map.NextSelected Но вот понять не могу - обрезается линия у меня до 20 м, но ее направление меняется. а почему так происходит кто-то подскажет?$Dir=@Map.Object[$Sel].Parameter[1] /из этого параметра у меня берется дир угол $x=@Map.Object[$Sel].Point[1].x $y=@Map.Object[$Sel].Point[1].y $dx=@Calc $x+Cos($Dir)*20 $dy=@Calc $y+Sin($Dir)*20 @Map.Object[$Sel].Point[2] $dx $dy 0 Вид | Обновить Подозреваю, что угол у вас в градусах, а Cos() и Sin() принимают аргумент в радианах. $Sel=@Map.SelectedObject $Dir=@Map.Object[$Sel].Parameter[1] /из этого параметра у меня берется дир угол $x=@Map.Object[$Sel].Point[1].x $y=@Map.Object[$Sel].Point[1].y $PI=3.1415927 $dx=@Calc $x+Cos($Dir*$PI/180)*20 $dy=@Calc $y+Sin($Dir*$PI/180)*20 @Map.Object[$Sel].Point[2] $dx $dy 0 Вид | Обновить |
Автор: | Denidz [ 25 янв 2013 09:24 ] |
Заголовок сообщения: | Re: Запрос на функцию |
Спасибо, ошибка была именно в этом. |
Страница 46 из 92 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |