Группы пользователей Autodesk


Функции отклика


Использование реакторов

 

Использование реакторов  

Функции отклика

Каждому событию, которому назначен реактор, должна соответствовать функция, вызываемая при наступлении события. Логическая последовательность событий, наступающих при перетаскивании пользователем одной из вершин полилинии, описывается следующим алгоритмом.

Описание функции 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 нет связи.


Начало  Назад  Вперед