Доработка функций отклика для объектных реакторов
Окончательная компоновка
|
| ||||
Доработка функций отклика для объектных реакторов | |||||
На занятии 6 были зарегистрированы две функции отклика на события объектных реакторов. Функция gp:outline-erased была связана с реакторным событием :vlr-erased, а функция gp:outline-changed - с событием :vlr?modified. Теперь необходимо заставить эти функции работать.
Для доработки функций отклика объектных реакторов(defun gp:outline-erased (outlinePoly reactor parameterList) (setq *reactorsToRemove* (cons reactor *reactorsToRemove*)) (princ) ) ;_ end of defun Здесь выполняется только одна операция. Реактор, назначенный полилинии, сохраняется в списке реакторов для удаления. (Обратите внимание: хотя реакторы и прикрепляются к объектам, они полностью самостоятельны, поэтому их отношения с объектами рисунка необходимо поддерживать так же, как и для обычных объектов AutoCAD). (defun gp:outline-changed (outlinePoly reactor parameterList) (if *lostAssociativity* (setq *reactorsToRemove* (cons reactor *reactorsToRemove*)) (setq *polytochange* outlinePoly *reactorsToChange* (cons reactor *reactorsToChange*)) ) (princ) ) Существуют две категории функций, способных изменить полилинию-границу. К первой категории относятся команды, разрывающие ассоциативность дорожки и составляющих ее плиток. Проверка этой ситуации производится в функции gp:command?will?start; на основании результата проверки устанавливается глобальная переменная *lostAssociativity*. В данном случае плитки должны быть удалены, после чего пользователь свободен в дальнейшем редактировании дорожки. Ко второй категории относится режим работы с ручками команды РАСТЯНУТЬ, где ассоциативность сохраняется и необходимо выровнять полилинию-границу после перетаскивания вершины в новое положение. Переменная *polyToChange* хранит указатель на саму полилинию. Она используется функцией gp:command-ended для пересчета полилинии-границы.
|