Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_ПГК_2009.doc
Скачиваний:
5
Добавлен:
01.04.2025
Размер:
614.4 Кб
Скачать

События и реакторы

Технология ActiveX позволяет автоматически следить за появлением тех или иных событий при работе с AutoCADом, и программировать выполнение каких-либо действий в ответ на появление событий.

События – это системные уведомления:

  • о действиях пользователя с графическими примитивами, меню, панелями инструментов и т. д.;

  • о действиях с устройствами (мышью, клавиатурой, принтером и т. д.).

Технология ActiveX позволяет создавать особые объекты, которые называются реакторами. Реакторы дают возможность запрограммировать реакцию системы на события. Объекты-реакторы называются VLR-объектами.

События генерируются системой постоянно, и этот процесс не зависит от пользовательских установок. Реакторы могут быть запрограммированы на некоторые (или все) события, которые должны быть перечислены при описании реактора. Действия реакторов (реакции, функции действия) являются функциями на языке LISP и создаются как обычные функции (с помощью функции defun).

Для работы с реакторами имеются функции, имена которых начинаются с символов vlr-. Эти функции создают реакторы, активизируют их, отключают и т. д.

Схема создания реактора

Пользовательская функция-реактор имеет следующую структуру.

(defun … ()

(setq … (vlr-тип-reactor данные

(list ‘(событие1 . функция1)

(событие2 . функция2)

)

)

)

)

(defun … (параметры / локпеременные) ;Функция1

)

Тип – тип реактора. Реактору каждого типа соответствует несколько событий, на которые реактор умеет реагировать. Основными типами реакторов являются:

  • AcDb – реактор событий работы с примитивами;

  • DocManager – реактор событий работы с чертежом;

  • Object – реактор событий работы с VLA-объектами;

  • реакторы редактирования:

      • Command – реакторы команд;

      • Lisp – реакторы вычисления LISP-выражений;

      • Mouse – реакторы действий мышью;

      • SysVar – реакторы изменения системных переменных;

и т.д.

ДанныеLISP-данные любого типа, которые при срабатывании реактора передаются функциям действия (функция1, функция2 …) в параметры. Структура списка параметров зависит от порождающего события. Количество передаваемых данных должно соответствовать количеству параметров.

Если данные функциям не передаются, то после имени реактора указывается nil.

Если в функции действия необходимо передавать различные данные, то на функции действия должны быть ссылки в разных функциях setq.

Функция list создает список из точечных пар, каждая из которых состоит из события, отслеживаемого реактором, и функции действия, которую необходимо выполнить при наступлении этого события. Согласно требованиям языка AutoLISP, функции действия должны быть реализованы через технологию ActiveX.

В переменной, указанной в функции setq, сохраняется значение типа VLR-объекта.

Существует функция vlr-reaction-names, которая выводит список событий, соответствующих указанному типу реактора, например:

(vlr-reaction-names :vlr-AcDb-reactor) – вывод списка событий, возникающих при работе с примитивами. Только эти события могут быть указаны в списке точечных пар для реактора типа AcDb.