Получить имя Entity в .Net (аналог handent)

Автор Тема: Получить имя Entity в .Net (аналог handent)  (Прочитано 6626 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Добрый день! Функция AutoLisp handent получает Handle как параметр и возвращает имя Entity
(handent "234")
<Имя объекта: 7ed2c420>
Есть ли возможность из .Net получить имя объекта по его Handle?
Исследовал объект - не нашёл ничего подобного в его свойствах, возможно через объект Database.
Спасибо!

Отмечено как Решение Александр Ривилис 10-06-2015, 11:53:44

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Получить имя Entity в .Net (аналог handent)
« Ответ #1 : 10-06-2015, 10:46:03 »
Насколько я понял по фрагменту обозначенного выше кода, под "именем" подразумевается значение ObjectId. Если да, то так:
Код - C# [Выбрать]
  1. Handle h = new Handle(1234); // use your handle value instead of 1234
  2. ObjectId id = ObjectId.Null;
  3. Boolean is_valid_handle = db.TryGetObjectId(h, out id); // db is Database instance
  4. if (is_valid_handle) {
  5.   // There is your code.
  6. }

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Re: Получить имя Entity в .Net (аналог handent)
« Ответ #2 : 10-06-2015, 11:00:37 »
Handle h = new Handle(1234); // use your handle value instead of 1234
ObjectId id = ObjectId.Null;
Boolean is_valid_handle = db.TryGetObjectId(h, out id); // db is Database instance
К сожалению, нет.
Для Handle = 234(Hex):
ObjectId - 2127737888 (Dec, при чём при каждом открытии чертежа меняется)
а вот это загадочное имя, которое возвращает handent всегда постоянно(как и handle) = 7ed29420(Hex) или  2127729696(Dec)
Анализ типа Entity и родительских типов не дал результата.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: Получить имя Entity в .Net (аналог handent)
« Ответ #3 : 10-06-2015, 11:28:26 »
при чём при каждом открытии чертежа меняется)
это не удивительно.
К сожалению, нет.
Числовое значение, которое указывается в тексте вида <Имя объекта: 7ed2c420> есть ни что иное как:
Код - C# [Выбрать]
  1. id.OldIdPtr.ToInt64().ToString("X4"); // id is ObjectId
в win x86, возможно, стоит посмотреть такой вариант (я не проверял):
Код - C# [Выбрать]
  1. id.OldIdPtr.ToInt32().ToString("X4"); // id is ObjectId

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Re: Получить имя Entity в .Net (аналог handent)
« Ответ #4 : 10-06-2015, 11:43:20 »
id.OldIdPtr.ToInt64().ToString("X4")
Да, действительно. это оно. Спасибо!

Оффлайн andy_puАвтор темы

  • ADN Club
  • Сообщений: 34
  • Карма: 2
Re: Получить имя Entity в .Net (аналог handent)
« Ответ #5 : 10-06-2015, 11:44:38 »
это не удивительно.
а никто и не удивляется. я это отметил, для тех кто не в курсе

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Получить имя Entity в .Net (аналог handent)
« Ответ #6 : 10-06-2015, 11:59:20 »
Я поменял Решение на тот ответ, в котором действительно находится ответ на поставленный вопрос. В том, который был отмечен как Решение, решается совсем другая задача: перевод из 10-ной системы в 16-ую.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение