Работа с ObjectID в 64- и 32-разрядных системах

Благодаря показанному в статье Программное создание поля, я немного был готов к тому, что получение и преобразование ObjectID будет отличаться в 32 и 64-разрядных системах. Сегодня "в лоб" столкнулся с тем, что известные PLTools отказываются работать на 64-разрядных AutoCAD'ах.

А решение элементарное...

Сначала напишем код получения ObjectID. Причем получать его будем не в строковом варианте, а в полноценном.

1
2
3
4
5
6
7
8
9
10
(defun _lispru-get-objectid (obj)
  (vlax-get-property obj
                     (strcat "ObjectID"
                             (if (> (vl-string-search "x64" (getvar "platform")) 0)
                               "32"
                               ""
                               ) ;_ end of if
                             ) ;_ end of strcat
                     ) ;_ end of vlax-get-property
  ) ;_ end of defun

И обратная задача - по ObjectID получить указатель на объект:

1
2
3
4
5
6
7
8
9
10
11
(defun _lispru-objectidtoobject (doc id)
  (vlax-invoke-method doc
                      (strcat "ObjectIDToObject"
                              (if (> (vl-string-search "x64" (getvar "platform")) 0)
                                "32"
                                ""
                                ) ;_ end of if
                              ) ;_ end of strcat
                      id
                      ) ;_ end of vlax-invoke-method
  ) ;_ end of defun

Для упрощения примера я позволил себе исключить некоторые проверки. В частности, передаваемые объекты обязательно должны быть нормального типа. Для первого кода - vla-object, для второго - vla-object и id нормальный.

Исходники:
_lispru-get-objectid
_lispru-objectidtoobject

Размещено в Код LISP, Функции LISP · Метки: ,



Комментарии

Есть 2 коммент. к “Работа с ObjectID в 64- и 32-разрядных системах”
  1. VVA пишет:

    Функция _lispru-objectidtoobject не учитывает "нюанс" Автокада 2015 и выше См. функцию _kpblc-objectidtoobject здесь http://autolisp.ru/2014/09/16/objectid_x32x64_cad2015/

Трэкбэки

Узнайте, что другие говорят про эту заметку...
  1. [...] коде используются исходники из темы Работа с ObjectID в 64- и 32-разрядных системах: [...]



Поделитесь своим мнением


Я не робот.