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


Хранение информации с реакторами


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

 

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

Хранение информации с реакторами

Важно продумать, какой тип информации следует подключить к объектным реакторам, создаваемым для каждой полилинии. На занятии 6 реактору назначалось содержимое переменной gp_PathData (ассоциативный список). Кроме того, к ассоциативному списку функции gp_PathData был добавлен новый элемент с ключевым кодом 100. Это список указателей на все круги, расположенные внутри границы дорожки.

Так как необходимо выполнить пересчет полилинии, к переменной gp_pathData добавляются четыре дополнительных ключевых значения:

;;; StartingPoint ;

;;; (12 . BottomStartingPoint) 15------------------------14 ;

;;; (15 . TopStartingPoint) | | ;

;;; EndingPoint 10 ----pathAngle---> 11 ;

;;; (13 . BottomEndingPoint) | | ;

;;; (14 . TopEndingPoint) 12------------------------13 ;

;;; ;

Пронумерованные точки необходимы для пересчета границы дорожки, когда пользователь перетаскивает одну из угловых ручек в новое положение. Эта информация уже имеется в функции gp:drawOutline (файл gpdraw.lsp). Однако посмотрим на значение, возвращаемое функцией. Пока возвращается только указатель на объект полилинии. Поэтому необходимо выполнить три дополнительных действия:

  • Сгруппировать точки периметра в подходящем формате.
  • Изменить функцию так, чтобы она возвращала списки точек периметра и указатель на полилинию.
  • Изменить функцию C:GPath для обработки нового формата значений, возвращаемых функцией gp:drawOutline.

Группировка списков точек периметра является простой задачей. Посмотрим на код функции gp:drawOutline. Локальной переменной p1 соответствует код 12, p2 - 13, p3 - 14 и p4 - 15. Для того чтобы объединить эту информацию, используется следующий вызов функции:

(setq polyPoints(list

(cons 12 p1)

(cons 13 p2)

(cons 14 p3)

(cons 15 p4)

))

Изменить функцию так, чтобы она возвращала списки точек периметра и указатель на полилинию, также просто. Для этого в последнем выражении функции gp:drawOutline нужно собрать в один список две величины.




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



Книжный магазин