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


Построение рядов плиток - часть 2


offsetFromCenter

(if (= offsetFromCenter 0.0)

offsetDistance

0.0

) ;_ end of if

) ;_ end of setq

);_ end of while

;; Return the list of tiles created.

tileList

) ;_ end of defun

Некоторые участки кода требуют дополнительных пояснений.

Следующий фрагмент располагается непосредственно перед началом цикла while:

;; Compensate for the very first start point!!

(setq rowStartPoint(polar rowStartPoint

(+ pathAngle pi)(/ TileRadius 2.0)))

Здесь необходимо пояснить следующее:

  • Ей присваивается точка, выбранная пользователем в качестве начала дорожки.
  • Самый первый аргумент, передаваемый функции gp:calculate-Draw-TileRow, выглядит так:
  • (setq rowStartPoint(polar rowStartPoint pathAngle RowSpacing))

    Иначе говоря, в момент вызова функции gp:calculate-Draw-TileRow точка rowStartPoint переносится на расстояние RowSpacing от текущего положения rowStartPoint.

  • Аргумент rowStartPoint используется в функции gp:calculate-Draw-TileRow в качестве начальной точки для центров кругов в ряде.

Для того чтобы компенсировать начальный сдвиг вперед rowStartPoint при рисовании первого ряда (т.е. при первом выполнении цикла while), необходимо слегка передвинуть rowStartPoint в обратном направлении. Благодаря этому удается избежать образования слишком большого пустого пространства между границей дорожки и первым рядом. Точку достаточно сдвинуть на расстояние, равное половине радиуса плитки (TileRadius). Этого можно достичь, используя функцию polar для перемещения точки rowStartPoint вдоль вектора, повернутого на 180 градусов относительно угла PathAngle. При этом точка временно оказывается за пределами границы дорожки.

Следующий фрагмент (слегка измененный для упрощения чтения) также может вызвать затруднения:

(setq tileList (append tileList

(gp:calculate-Draw-TileRow

(setq rowStartPoint

(polar rowStartPoint pathAngle RowSpacing)

) ;_ end of setq

TileRadius TileSpace pathWidth pathAngle

offsetFromCenter ObjectCreationStyle

)))

По сути, он представляет собой вызов функции gp:calculate-Draw-TileRow, вложенный в функцию append, которая, в свою очередь, вложена в функцию setq.




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



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