Функции отклика
Использование реакторов
|
| ||||
Функции отклика |
| ||||
Каждому событию, которому назначен реактор, должна соответствовать функция, вызываемая при наступлении события. Логическая последовательность событий, наступающих при перетаскивании пользователем одной из вершин полилинии, описывается следующим алгоритмом.
Описание функции gp:outline-changed Удалить плитки. Определить, как изменилась граница. Исправить границу. Перерисовать новые плитки. Конец функции Но при этом возникает одна сложность. О перетаскивании вершины полилинии AutoCAD сообщает приложению с помощью события :vlr?modified. Однако, пусть пользователь только начал перетаскивать одну из вершин полилинии. Если немедленно вызвать функцию gp:outline-changed, действие пользователя будет прервано на середине. Где именно будет располагаться вершина — еще неизвестно, так как пользователь пока не указал ее новое положение. И, наконец, AutoCAD не позволяет изменять полилинию в то время, когда пользователь перетаскивает какую-либо из ее вершин. Полилиния открыта в AutoCAD для редактирования и будет оставаться в этом состоянии, пока пользователь не закончит перемещение. В связи с этим подход к программе следует изменить. Приведем обновленный алгоритм: Когда пользователь начинает перемещение вершины полилинии, Вызвать функцию gp:outline-changed Описание функции gp:outline-changed Описать глобальную переменную, сохраняющую указатель на полилинию, изменяемую пользователем. Конец функции После завершения команды Вызвать функцию gp:command-ended Описание функции gp:command-ended Удалить плитки Получить информацию о предыдущем расположении вершин полилинии Получить информацию о новом расположении вершин полилинии Переопределить полилинию (выпрямить ее) Перерисовать плитки Конец функции О завершении изменения контура дорожки AutoCAD сообщает приложению с помощью события :vlr?commandEnded, если был назначен реактор редактора. Использование глобальной переменной для идентификации измененной пользователем полилинии необходимо, так как между функциями gp:outline-changed и gp:command-ended нет связи.
|