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


Создание массива вершин полилинии


Построение границы дорожки

 

Построение границы дорожки  

Создание массива вершин полилинии

Теперь нужно решить последнюю задачу: преобразовать отдельные точечные переменные p1, p2, p3 и p4 в формат, необходимый для вызова функции vla?addLightweightpolyline. Для начала обратимся к справочной информации.

Для получения информации о функции

  1. Нажмите кнопку "Справка" на панели инструментов VLISP.
  2. В диалоговом окне «Введите имя пункта» введите vla-addLightweightpolyline и нажмите «OK». Справочная система не учитывает регистр символов, поэтому можно не заботиться о расстановке заглавных букв.

В справочной системе говорится, что для AddLightWeightPolyline вершины полилинии должны быть представлены в виде массива типа variant (универсальный тип), хранящего числа типа double. В справочной системе по этому поводу говорится следующее:

Массив 2М координат (в МСК), задающий вершины полилинии. Для построения компактной полилинии нужно не меньше двух точек (т.е. четырех элементов). Размер массива должен быть кратным 2.

В ActiveX тип variant используется для хранения произвольных типов данных. Типом variant могут быть представлены строки, целые числа и массивы. Данные в типе variant хранятся вместе с идентифицирующей их информацией.

Итак, у нас имеется четыре точки, каждая в формате (x, y, z). Задача заключается в том, чтобы преобразовать их в список следующего вида:

(x1 y1 x2 y2 x3 y3 x4 y4)

Функция append объединяет несколько списков в один. Для создания списка из четырех точек в формате функции ActiveX используется следующее выражение:

(setq polypoints (append (3dPoint->2dPoint p1)

(3dPoint->2dPoint p2)

(3dPoint->2dPoint p3)

(3dPoint->2dPoint p4)))

Писать одну и ту же функцию 3dPoint->2dPoint четыре раза не очень удобно. Сократить выражение можно с помощью функций mapcar и apply. Функция mapcar выполняет операции над отдельными элементами одного или более списков, а функция apply передает список аргументов заданной функции. В итоге код должен выглядеть следующим образом:

(setq polypoints (apply 'append (mapcar '3dPoint->2dPoint

(list p1 p2 p3 p4))))

Таким образом, перед вызовом функции mapcar список точек примет вид:

((x1 y1 z1) (x2 y2 z2) (x3 y3 z3) (x4 y4 z4))

После выполнения mapcar получается список точек следующего вида:

((x1 y1) (x2 y2) (x3 y3) (x4 y4))

И, наконец, после применения функции append список, полученный из mapcar, приобретает следующий вид:

(x1 y1 x2 y2 x3 y3 x4 y4)

 




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



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