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

19/09/2014

Получение указателя на объект по ObjectID

Иногда необходимо по ObjectID получить указатель на объект. Казалось бы, ничего особо сложного нет - в ActiveX есть метод vla-ObjectIdToObject с соответствующим параметрами. Но не все так просто, как хотелось бы.

После анонсирования 64-разрядных AutoCAD появился метод vla-ObjectIdToObject32. То есть необходимо учитывать разрядность AutoCAD'a (или, что в подавляющем большинстве случаев то же самое - разрядность Windows).

То есть обычный (vla-objectidtoobject obj id) превращается в нечто
Код - Auto/Visual LISP: [Выделить]
  1. (defun conv-objectid-to-object(obj id)
  2.   (if (> (vl-string-search "x64" (getvar "platform")) 0)
  3.     (vla-objectidtoobject32 obj id)
  4.     (vla-objectidtoobject obj id)
  5.     )
  6.   )

Но с появлением AutoCAD 2015 эта конструкция перестала работать в 64-разрядных AutoCAD'ах: теперь метода vla-objectidtoobject32 не существует. Поэтому код пришлось переделывать:
Код - Auto/Visual LISP: [Выделить]
  1. (defun conv-objectid-to-object(obj id)
  2.   (if (and (> (vl-string-search "x64" (getvar "platform")) 0)
  3.            (vlax-method-applicable-p obj 'objectidtoobject32)
  4.            )
  5.     (vla-objectidtoobject32 obj id)
  6.     (vla-objectidtoobject obj id)
  7.     )
  8.   )


На основе материалов, предоставленных Александром Ривилисом Автор: Алексей Кулик

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

Опубликовано 19.09.2014