Обновление функции gp:Calculate-and-Draw-Tiles
Окончательная компоновка
|
| ||||
Обновление функции gp:Calculate-and-Draw-Tiles | |||||
Ранее на этом занятии было отмечено, что функция gp:Calculate-and-Draw-Tiles, вызываемая реактором, строит объекты только методами ActiveX. Метод построения, выбранный пользователем (ActiveX, entmake или command), подавляется. Только что обновленный код функции gp:command-ended содержит следующее обращение к процедуре построения плиток:
(setq tileList (gp:Calculate-and-Draw-Tiles ;; path data list without correct tile list. NewReactorData ;; Object creation function. ;; Within a reactor this *MUST* be ActiveX. "ActiveX" ) ) Функции gp:Calculate-and-Draw-Tiles передается два параметра: NewReactorData (список в форме исходного ассоциативного списка gp_PathData) и строка "ActiveX" (для задания стиля создания объекта). Посмотрим на текущее описание функции gp:Calculate-and-Draw-Tiles (функция описана в файле gpdraw.lsp). Здесь приведена часть функции, которая объявляет параметры и локальные переменные: (defun gp:Calculate-and-Draw-Tiles (BoundaryData / PathLength TileSpace TileRadius SpaceFilled SpaceToFill RowSpacing offsetFromCenter rowStartPoint pathWidth pathAngle ObjectCreationStyle TileList) Заметим, что сейчас задан только один параметр, а переменная ObjectCreationStyle описана как локальная. Посмотрим, как присваивается значение переменной ObjectCreationStyle (далее в описании функции): (setq ObjectCreationStyle (strcase (cdr (assoc 3 BoundaryData)))) Переменная ObjectCreationStyle определена внутри функции и извлекает значение переменной BoundaryData (ассоциативный список). Теперь нужно переопределить это значение. Для добавления в функцию gp:Calculate-and-Draw-Tiles аргумента стиля создания объектовВыражение defun для функции должно выглядеть следующим образом: (defun gp:Calculate-and-Draw-Tiles (BoundaryData ObjectCreationStyle / PathLength TileSpace TileRadius SpaceFilled SpaceToFile RowSpacing offsetFromCenter rowStartPoint pathWidth pathAngle TileList) ; remove ObjectCreationStyle from locals Если переменная объявлена одновременно и параметром (до косой черты), и локальной переменной (после косой черты), VLISP сообщит об этом. Например, если описать ObjectCreationStyle одновременно и как параметр, и как переменную, а затем запустить средство синтаксической проверки VLISP для функции gp:Calculate-and-Draw-Tiles, в окне «Сообщения сборки» появится следующее сообщение: ; *** ВНИМАНИЕ: один и тот же символ найден до и после / в списке аргументов: OBJECTCREATIONSTYLE (setq PathLength (cdr (assoc 41 BoundaryData)) TileSpace (cdr (assoc 43 BoundaryData)) TileRadius (cdr (assoc 42 BoundaryData)) SpaceToFill (- PathLength TileRadius) RowSpacing (* (+ TileSpace (* TileRadius 2.0)) (sin (Degrees->Radians 60)) ) SpaceFilled RowSpacing offsetFromCenter 0.0 offsetDistance /(+(* TileRadius 2.0)TileSpace)2.0) rowStartPoint cdr (assoc 10 BoundaryData)) pathWidth cdr (assoc 40 BoundaryData)) pathAngle cdr (assoc 50 BoundaryData)) ) ;_ end of setq (if (not ObjectCreationStyle) (setq ObjectCreationStyle (strcase (cdr (assoc 3 BoundaryData)))) ) Ранее стоявшее в тексте выражение, которое инициализировало переменную ObjectCreationStyle, теперь удалено. Программа проверяет, имеет ли параметр ObjectCreationStyle какое-либо значение. Если значение не задано (т.е. ObjectCreationStyle равно nil), функция присваивает параметру значение из переменной BoundaryData. Теперь необходимо сделать еще ряд изменений в функции gp:Calculate-and-Draw-Tiles. |