19/09/2014
Получение указателя на объект по ObjectID
Иногда необходимо по ObjectID получить указатель на объект. Казалось бы, ничего особо сложного нет - в ActiveX есть метод vla-ObjectIdToObject с соответствующим параметрами. Но не все так просто, как хотелось бы.После анонсирования 64-разрядных AutoCAD появился метод vla-ObjectIdToObject32. То есть необходимо учитывать разрядность AutoCAD'a (или, что в подавляющем большинстве случаев то же самое - разрядность Windows).
То есть обычный (vla-objectidtoobject obj id) превращается в нечто
Код - Auto/Visual LISP: [Выделить]
- (defun conv-objectid-to-object(obj id)
- (if (> (vl-string-search "x64" (getvar "platform")) 0)
- (vla-objectidtoobject32 obj id)
- (vla-objectidtoobject obj id)
- )
- )
Но с появлением AutoCAD 2015 эта конструкция перестала работать в 64-разрядных AutoCAD'ах: теперь метода vla-objectidtoobject32 не существует. Поэтому код пришлось переделывать:
Код - Auto/Visual LISP: [Выделить]
- (defun conv-objectid-to-object(obj id)
- (if (and (> (vl-string-search "x64" (getvar "platform")) 0)
- (vlax-method-applicable-p obj 'objectidtoobject32)
- )
- (vla-objectidtoobject32 obj id)
- (vla-objectidtoobject obj id)
- )
- )
На основе материалов, предоставленных Александром Ривилисом Автор: Алексей Кулик
Обсуждение: http://adn-cis.org/forum/index.php?topic=965
Опубликовано 19.09.2014