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

Обновление функции 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 аргумента стиля создания объектов

  • Добавьте переменную ObjectCreationStyle к аргументам функции.
  • Удалите ObjectCreationStyle из списка локальных переменных.
  • Выражение 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 в gp:Calculate-and-Draw-Tiles так, чтобы оно выглядело следующим образом (изменения обозначены полужирным шрифтом):


  • (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.

     


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