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


Преобразование 3М точек в 2М


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

 

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

Преобразование 3М точек в 2М

Другая полезная функция, которая потребуется в программе построения парковой дорожки, должна преобразовывать 3М точки в 2М точки. AutoCAD обычно работает с трехмерными координатами, однако некоторые объекты (например, компактные полилинии) по определению являются двумерными. Функция getpoint возвращает 3М точки, поэтому для их преобразования требуется создать специальную функцию.

Для преобразования 3М точек в 2М

  1. В ответ на подсказку в окне консоли введите следующее:
  2. (defun 3dPoint->2dPoint (3dpt)(list (car 3dpt) (cadr 3dpt))) Выполним функцию.

  3. Для этого в ответ на подсказку в окне консоли введите:
  4. (3dpoint->2dpoint (list 10 20 0))

    Функция работает; однако, для создания приложения, строящего парковую дорожку, следует учитывать еще одно обстоятельство. Для функций LISP чаще всего безразлично, является ли аргумент целым или вещественным числом. Но совсем по другому обстоит дело с функциями ActiveX, которые будут использованы позднее на этом занятии. Функции ActiveX работают с вещественными числами. Нашу функцию можно легко модифицировать так, чтобы она всегда возвращала вещественные числа, а не целые.

  5. В ответ на подсказку в окне консоли введите следующее:
  6. (defun 3dPoint->2dPoint (3dpt)(list (float(car 3dpt))

    (float(cadr 3dpt))))

  7. Снова запустите функцию:
  8. (3dpoint->2dpoint (list 10 20 0))

    Следует обратить внимание на то, что возвращаемые значения теперь являются вещественными числами (т.е. записываются с десятичной точкой).

  9. Снова проверим работу функции, на этот раз с помощью функции getpoint. В ответ на подсказку в окне консоли введите следующее:
  10. (setq myPoint(getpoint))

  11. Укажите точку в области рисования AutoCAD.
  12. Функция getpoint возвращает 3М точку.

  13. В ответ на подсказку в окне консоли введите следующее:
  14. (3dPoint->2Dpoint myPoint)

    На этот раз возвращается 2М точка.

    Теперь добавим функцию в файл gpmain.lsp (точно так же, как это было сделано с функцией Degrees->Radians).


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



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