Создание массива вершин полилинии
Построение границы дорожки
|
| ||||
Создание массива вершин полилинии | |||||
Теперь нужно решить последнюю задачу: преобразовать отдельные точечные переменные p1, p2, p3 и p4 в формат, необходимый для вызова функции vla?addLightweightpolyline. Для начала обратимся к справочной информации.
Для получения информации о функции![]() В справочной системе говорится, что для 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)
|