ADN Open CIS
Сообщество программистов Autodesk в СНГ

29/11/2017

Преобразование координат больше 1e99

Как преобразовать координаты более 1e99, используя lisp?
В VisualLISP невозможно преобразовать координаты, значение которых хотя бы по одному из направлений превышает 1e99. Уточнение: нельзя преобразовать, используя штатную trans:
приведет к ошибке.
Для решения этой задачи чуть ли не единственное решение - использование подхода из ActiveX: метода TranslateCoordinates, доступный в классе Utility. Приведенный ниже код показывает, как можно выполнить преобразование координат, например, из пользовательской системы координат в мировую:
Код - Auto/Visual LISP: [Выделить]
  1.  
  2. (vl-load-com)
  3.  
  4. (defun test (/ poactdoc poretpoint potestpoint poutility)
  5.   (setq poactdoc    (vla-get-activedocument (vlax-get-acad-object))
  6.         poutility   (vla-get-utility poactdoc)
  7.         potestpoint (vlax-3d-point '(0.0 0.0 3e+99))
  8.         poretpoint  (vla-translatecoordinates poutility potestpoint acucs acworld 0)
  9.         ) ;_ end of setq
  10.   (princ (vlax-safearray->list (vlax-variant-value poretpoint)))
  11.   (princ)
  12.   ) ;_ end of defun


Возможны преобразования из/в:
  • acworld (мировая система координат)
  • acucs (пользовательская система координат)
  • acocs (система координат объекта)
  • acdisplayucs (экранная система координат)
  • acpaperspacedcs (система координат пространства листа)
Источник: http://adndevblog.typepad.com/autocad/2012/12/problem-with-lisp-trans-function-not-accepting-coordinates-largergreater-than-10e99.html

Автор перевода: Алексей Кулик

Обсуждение: http://adn-cis.org/forum/index.php?topic=8179

Опубликовано 29.11.2017
Отредактировано 29.11.2017 в 23:46:39