29/11/2017
Преобразование координат больше 1e99
Как преобразовать координаты более 1e99, используя lisp?В VisualLISP невозможно преобразовать координаты, значение которых хотя бы по одному из направлений превышает 1e99. Уточнение: нельзя преобразовать, используя штатную trans:
Код - Auto/Visual LISP: [Выделить]
приведет к ошибке.- (trans '(0. 0. 5e99) 0 1)
Для решения этой задачи чуть ли не единственное решение - использование подхода из ActiveX: метода TranslateCoordinates, доступный в классе Utility. Приведенный ниже код показывает, как можно выполнить преобразование координат, например, из пользовательской системы координат в мировую:
Код - Auto/Visual LISP: [Выделить]
- (vl-load-com)
- (defun test (/ poactdoc poretpoint potestpoint poutility)
- (setq poactdoc (vla-get-activedocument (vlax-get-acad-object))
- poutility (vla-get-utility poactdoc)
- potestpoint (vlax-3d-point '(0.0 0.0 3e+99))
- poretpoint (vla-translatecoordinates poutility potestpoint acucs acworld 0)
- ) ;_ end of setq
- (princ (vlax-safearray->list (vlax-variant-value poretpoint)))
- (princ)
- ) ;_ end of defun
Возможны преобразования из/в:
- acworld (мировая система координат)
- acucs (пользовательская система координат)
- acocs (система координат объекта)
- acdisplayucs (экранная система координат)
- acpaperspacedcs (система координат пространства листа)
Автор перевода: Алексей Кулик
Обсуждение: http://adn-cis.org/forum/index.php?topic=8179
Опубликовано 29.11.2017Отредактировано 29.11.2017 в 22:46:39