Аналитика https://www.geosystema.net/forum/ |
|
Создание скриптов для обработки событий https://www.geosystema.net/forum/viewtopic.php?f=1&t=1480 |
Страница 1 из 2 |
Автор: | Sergey Oleynik [ 16 фев 2010 13:08 ] |
Заголовок сообщения: | Создание скриптов для обработки событий |
Добавлена возможность создания скриптов для обработки событий: viewtopic.php?p=6584#6584 Замечания и предложения приветствуются... |
Автор: | pippa [ 18 фев 2010 13:40 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Очень полезная штука - уже опробовала - и просто умиляюсь - ещё Шубин в своё время просил об этом и наконец-то - свершилось!!! Умнички!!! Просьба добавить ещё одно событие (на данный момент ) - OnLevelChange. Сразу же хочется спросить - работают ли эти обработчики - если дейсвтяи с нимим произошли через скрипт - удаление точки, добавление точки, изменение её, создание нового объекта и т.д.? Обнаружены также следующие недочёты в работе: - при создании объекта и присвоении этому объекту значения какого-либо параметра через обработчик - невозможно потом его удалить. Программа всё равно его добавляет. - если панель была закрыта при включённой кнопке - скрипт всё равно продолжает выполняться. - как отключать один из обработчиков событий в 1-ой кнопке - через коментарий самого OnChange - не работает. - не совсем корректно работает обработчик OnCollect. Вложение: Спасибо. |
Автор: | Sergey Oleynik [ 18 фев 2010 15:12 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
pippa писал(а): Просьба добавить ещё одно событие (на данный момент ) - OnLevelChange. Level или Layer? Когда должно вызываться это событие? pippa писал(а): Сразу же хочется спросить - работают ли эти обработчики - если дейсвтяи с нимим произошли через скрипт - удаление точки, добавление точки, изменение её, создание нового объекта и т.д.? Пока OnChange работает только при перемещении точки мышью или при изменении параметров на закладке Инфо. Все варианты изменения объекта отследить довольно трудно, но если что-то нужно то будем добавлять. |
Автор: | pippa [ 18 фев 2010 16:03 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Sergey Oleynik писал(а): pippa писал(а): Просьба добавить ещё одно событие (на данный момент ) - OnLevelChange. Level или Layer? В смысле изменении слоя. Sergey Oleynik писал(а): Когда должно вызываться это событие? После изменения слоя для выбранного объекта (через Вкладку Правка или через функцию - @Map.Selected.ChangeLayer LayerIndex |
Автор: | Sergey Oleynik [ 19 фев 2010 11:16 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Добавлены еще два события: %Events.OnAdd - вставка объекта из буфера обмена %Events.OnLayerChange - изменение слоя объекта Цитата: Сразу же хочется спросить - работают ли эти обработчики - если дейсвтяи с нимим произошли через скрипт - удаление точки, добавление точки, изменение её, создание нового объекта и т.д.? Пока все события вызываются только в случае действий пользователя. Идея с вызовом обработчиков при действиях из скрипта нам не кажется хорошей. Во-первых возможно зацикливание, а во вторых идея событий в том, чтобы дать разработчику скрипта возможность реагировать на события, которые ему недоступны. А это действия пользователя. В свой же скрипт можно сразу внести все необходимую обработку не прибегая к событиям. Цитата: - если панель была закрыта при включённой кнопке - скрипт всё равно продолжает выполняться. Исправлено |
Автор: | pippa [ 22 фев 2010 12:35 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Спасибо за добавленные функции. Сразу возник вопрос - можно ли получать информацию - с какого именно слоя был перенесён объект. Куда был перенесён - можно определить, а вот откуда? А это часто нужно знать. И всё же неработет - у меня что OnChange что OnCollect - работают одинаково - как будто одна и та же функция вызывается. Вот скрипты - оба выдают один и тот же результат. %Events.OnCollect @CheckErrors 1 $S=@EventObject @If $S=0 then @Break @Map.Object[$S].Parameter[1]=30 %Events.OnChange @CheckErrors 1 $S=@EventObject @If $S=0 then @Break @Map.Object[$S].Parameter[1]=31 Оба выдают - 31. Что делать? |
Автор: | Sergey Oleynik [ 23 фев 2010 09:19 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
pippa писал(а): Что делать? У меня все работает: Вложение: У вас последняя версия Ged? |
Автор: | pippa [ 23 фев 2010 09:54 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Sergey Oleynik писал(а): pippa писал(а): Что делать? У меня все работает: Вложение: Events.exe У вас последняя версия Ged? Да, последняя. Билд - 19.02.2010. Пробовала на разных файлах - и на разных шаблонах. Не работает. |
Автор: | Sergey Oleynik [ 23 фев 2010 10:09 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
pippa писал(а): Да, последняя. Билд - 19.02.2010. Это же старье четырехдневной давности |
Автор: | pippa [ 23 фев 2010 10:31 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Sergey Oleynik писал(а): pippa писал(а): Да, последняя. Билд - 19.02.2010. Это же старье четырехдневной давности 5 балов!!! Но - нет. То же самое - выдаёт - для обоих событий - одинаковый параметр подсавляет. Даже подстановка чистого Ged.ini - не помогла. |
Автор: | pippa [ 24 фев 2010 10:12 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Я разобралась в чём дело - какая-то проблема существует вне обработчиков событий - если стоит галочка - Сбор автоподписи и Сбор Автопараметры. Если они отключены - тогда работает правильно, если хоть одна из них включена - то даже закрытие панели с кнопочкой со скриптом не решает проблему (хоть и было сказано - что исправлено ) |
Автор: | pippa [ 25 фев 2010 15:06 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Так будет решена эта проблема или мне не ждать? И ещё: при изменении объекта и обработчика событий OnChange , а потом применении функции правка отменить изменение - исходный параметр возвращается назад, но при изменении слоя с помощью функции OnLayerChange, а потом применении функции правка отменить изменение - параметр не возвращается. |
Автор: | Sergey Oleynik [ 25 фев 2010 15:38 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
pippa писал(а): Так будет решена эта проблема или мне не ждать? Какая именно проблема? Если та, что при включенных автопараметрах или автоподписях вызывается OnChange, то так и должно быть. Это событие всегда вызывается при изменении объекта или его параметров. pippa писал(а): И ещё: при изменении объекта и обработчика событий OnChange , а потом применении функции правка отменить изменение - исходный параметр возвращается назад, но при изменении слоя с помощью функции OnLayerChange, а потом применении функции правка отменить изменение - параметр не возвращается. Как то очень сумбурно и непонятно. Что значит изменение слоя с помощью функции OnLayerChange? OnLayerChange это не функция меняющая слой, а событие которое вызывается когда оператор изменяет слой вручную. И какой параметр куда должен возвращаться после отмены изменения слоя? |
Автор: | pippa [ 01 мар 2010 12:14 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
Sergey Oleynik писал(а): Как то очень сумбурно и непонятно. Что значит изменение слоя с помощью функции OnLayerChange? OnLayerChange это не функция меняющая слой, а событие которое вызывается когда оператор изменяет слой вручную. И какой параметр куда должен возвращаться после отмены изменения слоя? Смысл в том, что внутри скрипта OnLayerChange есть функция - меняющая один из параметров объекта - так вот - если сделать Правка - Отменить - то не отменяется это изменёный параметр. Можно ли разделить в функции OnChange - изменение геометрии и изменение параметров - иногда необходимо отслеживать каждое из событий отдельно. И ещё - замечены следующие результаты тестирования: 1. Событие OnChange не реагирует на изменение объекта путём параллельного переноса - т.е. маркируя сторону с помощью Alt и двигая её целиком. 2. Событие OnChange не реагирует на изменение высоты как целиком объекта (при нажатии кнопки H), так и изменении высоты любой из точек объекта. 3. Событие OnChange не реагирует на изменение объекта при использовании инструментов на панели Правка - объединить, соединить и т.д. Спасибо. |
Автор: | Sergey Oleynik [ 01 мар 2010 14:34 ] |
Заголовок сообщения: | Re: Создание скриптов для обработки событий |
pippa писал(а): Смысл в том, что внутри скрипта OnLayerChange есть функция - меняющая один из параметров объекта - так вот - если сделать Правка - Отменить - то не отменяется это изменёный параметр. Дело в том, что те изменения, которые происходят в скриптах, автоматически в лог Undo не заносятся. Это касается не только обработки событий, но и всех скриптов вообще. Создатель скрипта должен, при необходимости, сам заносить операции в лог, перед модификацией объекта или его параметров. Для этого имеются соответствующие функции: @Map.Undo.SaveObject Number @Map.Undo.SaveObjectParameters Number @Map.Undo.StartOperationGroup pippa писал(а): Можно ли разделить в функции OnChange - изменение геометрии и изменение параметров - иногда необходимо отслеживать каждое из событий отдельно. Изначально мы так и собирались. Но проблема в том, что изменение геометрии влечет за собой измененние некоторых параметров, например площади и периметра. Также изменение некоторых параметров может изменить геометрию. Например параметр Z. |
Страница 1 из 2 | Часовой пояс: UTC + 2 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |