Аналитика
http://www.geosystema.net/forum/

Создание скриптов для обработки событий
http://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.
Вложение:
OnChangeEvent.exe [187.7 Кб]
Скачиваний: 1002


Спасибо.

Автор:  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.

Что делать? :cry:

Автор:  Sergey Oleynik [ 23 фев 2010 09:19 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

pippa писал(а):
Что делать? :cry:

У меня все работает:
Вложение:
Events.exe [252.25 Кб]
Скачиваний: 1000

У вас последняя версия Ged?

Автор:  pippa [ 23 фев 2010 09:54 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

Sergey Oleynik писал(а):
pippa писал(а):
Что делать? :cry:

У меня все работает:
Вложение:
Events.exe

У вас последняя версия Ged?

Да, последняя. Билд - 19.02.2010.
Пробовала на разных файлах - и на разных шаблонах. Не работает. :(

Автор:  Sergey Oleynik [ 23 фев 2010 10:09 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

pippa писал(а):
Да, последняя. Билд - 19.02.2010.

Это же старье четырехдневной давности :D

Автор:  pippa [ 23 фев 2010 10:31 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

Sergey Oleynik писал(а):
pippa писал(а):
Да, последняя. Билд - 19.02.2010.

Это же старье четырехдневной давности :D


5 балов!!! :lol:

Но - нет. То же самое - выдаёт - для обоих событий - одинаковый параметр подсавляет. Даже подстановка чистого Ged.ini - не помогла. :cry:

Автор:  pippa [ 24 фев 2010 10:12 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

Я разобралась в чём дело :lol: - какая-то проблема существует вне обработчиков событий - если стоит галочка - Сбор :arrow: автоподписи и Сбор :arrow: Автопараметры. Если они отключены - тогда работает правильно, если хоть одна из них включена - то даже закрытие панели с кнопочкой со скриптом не решает проблему (хоть и было сказано - что исправлено :( )

Автор:  pippa [ 25 фев 2010 15:06 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

Так будет решена эта проблема или мне не ждать? :cry:

И ещё:

при изменении объекта и обработчика событий OnChange , а потом применении функции правка :arrow: отменить изменение - исходный параметр возвращается назад, но при изменении слоя с помощью функции OnLayerChange, а потом применении функции правка :arrow: отменить изменение - параметр не возвращается. :cry:

Автор:  Sergey Oleynik [ 25 фев 2010 15:38 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

pippa писал(а):
Так будет решена эта проблема или мне не ждать? :cry:

Какая именно проблема? Если та, что при включенных автопараметрах или автоподписях вызывается OnChange, то так и должно быть. Это событие всегда вызывается при изменении объекта или его параметров.
pippa писал(а):
И ещё:

при изменении объекта и обработчика событий OnChange , а потом применении функции правка :arrow: отменить изменение - исходный параметр возвращается назад, но при изменении слоя с помощью функции OnLayerChange, а потом применении функции правка :arrow: отменить изменение - параметр не возвращается. :cry:

Как то очень сумбурно и непонятно. Что значит изменение слоя с помощью функции OnLayerChange? OnLayerChange это не функция меняющая слой, а событие которое вызывается когда оператор изменяет слой вручную. И какой параметр куда должен возвращаться после отмены изменения слоя?

Автор:  pippa [ 01 мар 2010 12:14 ]
Заголовок сообщения:  Re: Создание скриптов для обработки событий

Sergey Oleynik писал(а):
Как то очень сумбурно и непонятно. Что значит изменение слоя с помощью функции OnLayerChange? OnLayerChange это не функция меняющая слой, а событие которое вызывается когда оператор изменяет слой вручную. И какой параметр куда должен возвращаться после отмены изменения слоя?

Смысл в том, что внутри скрипта OnLayerChange есть функция - меняющая один из параметров объекта - так вот - если сделать Правка - Отменить - то не отменяется это изменёный параметр.

Можно ли разделить в функции OnChange - изменение геометрии и изменение параметров - иногда необходимо отслеживать каждое из событий отдельно. :roll:

И ещё - замечены следующие результаты тестирования:

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/