Другая полезная функция, которая потребуется в программе построения парковой дорожки, должна преобразовывать 3М точки в 2М точки. AutoCAD обычно работает с трехмерными координатами, однако некоторые объекты (например, компактные полилинии) по определению являются двумерными. Функция getpoint возвращает 3М точки, поэтому для их преобразования требуется создать специальную функцию.
Для преобразования 3М точек в 2М
В ответ на подсказку в окне консоли введите следующее:
Для этого в ответ на подсказку в окне консоли введите:
(3dpoint->2dpoint (list 10 20 0))
Функция работает; однако, для создания приложения, строящего парковую дорожку, следует учитывать еще одно обстоятельство. Для функций LISP чаще всего безразлично, является ли аргумент целым или вещественным числом. Но совсем по другому обстоит дело с функциями ActiveX, которые будут использованы позднее на этом занятии. Функции ActiveX работают с вещественными числами. Нашу функцию можно легко модифицировать так, чтобы она всегда возвращала вещественные числа, а не целые.
В ответ на подсказку в окне консоли введите следующее:
Следует обратить внимание на то, что возвращаемые значения теперь являются вещественными числами (т.е. записываются с десятичной точкой).
Снова проверим работу функции, на этот раз с помощью функции getpoint. В ответ на подсказку в окне консоли введите следующее:
(setq myPoint(getpoint))
Укажите точку в области рисования AutoCAD.
Функция getpoint возвращает 3М точку.
В ответ на подсказку в окне консоли введите следующее:
(3dPoint->2Dpoint myPoint)
На этот раз возвращается 2М точка.
Теперь добавим функцию в файл gpmain.lsp (точно так же, как это было сделано с функцией Degrees->Radians).
Новый код должен выглядеть следующим образом:
Обратите внимание, что заголовок содержит указания о дальнейшей доработке данной функции. Для того чтобы приобрести дополнительный опыт, можно подумать о том как усовершенствовать функцию, чтобы защитить функцию от аварийного завершения из-за неверного ввода данных.