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

         

Доработка функций отклика для объектных реакторов


Окончательная компоновка

 

Окончательная компоновка 
 

Доработка функций отклика для объектных реакторов



На занятии 6 были зарегистрированы две функции отклика на события объектных реакторов. Функция gp:outline-erased была связана с реакторным событием :vlr-erased, а функция gp:outline-changed - с событием :vlr?modified. Теперь необходимо заставить эти функции работать.

Для доработки функций отклика объектных реакторов

  • В файле gpreact.lsp измените функцию gp:outline-erased так, чтобы она выглядела следующим образом:
  • (defun gp:outline-erased (outlinePoly reactor parameterList)

    (setq *reactorsToRemove*

    (cons reactor *reactorsToRemove*))

    (princ)

    ) ;_ end of defun

    Здесь выполняется только одна операция. Реактор, назначенный полилинии, сохраняется в списке реакторов для удаления. (Обратите внимание: хотя реакторы и прикрепляются к объектам, они полностью самостоятельны, поэтому их отношения с объектами рисунка необходимо поддерживать так же, как и для обычных объектов AutoCAD).

  • Внесите следующие изменения в функцию gp:outline-changed:
  • (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 для пересчета полилинии-границы.

     



    Содержание раздела