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

ADN Club => AutoCAD .NET API => Тема начата: andy_pu от 10-06-2015, 10:31:34

Название: Получить имя Entity в .Net (аналог handent)
Отправлено: andy_pu от 10-06-2015, 10:31:34
Добрый день! Функция AutoLisp handent получает Handle как параметр и возвращает имя Entity
(handent "234")
<Имя объекта: 7ed2c420>
Есть ли возможность из .Net получить имя объекта по его Handle?
Исследовал объект - не нашёл ничего подобного в его свойствах, возможно через объект Database.
Спасибо!
Название: Re: Получить имя Entity в .Net (аналог handent)
Отправлено: Андрей Бушман от 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. }
Название: Re: Получить имя Entity в .Net (аналог handent)
Отправлено: andy_pu от 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 и родительских типов не дал результата.
Название: Re: Получить имя Entity в .Net (аналог handent)
Отправлено: Андрей Бушман от 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
Название: Re: Получить имя Entity в .Net (аналог handent)
Отправлено: andy_pu от 10-06-2015, 11:43:20
id.OldIdPtr.ToInt64().ToString("X4")
Да, действительно. это оно. Спасибо!
Название: Re: Получить имя Entity в .Net (аналог handent)
Отправлено: andy_pu от 10-06-2015, 11:44:38
это не удивительно.
а никто и не удивляется. я это отметил, для тех кто не в курсе
Название: Re: Получить имя Entity в .Net (аналог handent)
Отправлено: Александр Ривилис от 10-06-2015, 11:59:20
Я поменял Решение на тот ответ, в котором действительно находится ответ на поставленный вопрос. В том, который был отмечен как Решение, решается совсем другая задача: перевод из 10-ной системы в 16-ую.