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

ADN Club => ObjectARX => Тема начата: АлексЮстасу от 24-09-2018, 21:35:07

Название: получать Class Name объектов
Отправлено: АлексЮстасу от 24-09-2018, 21:35:07
Нужно получать Class Name объектов.
Программист сказал, что не знает способа получать Class Name в виде строки.
Я ему показал пример получения Class Name в ArxDbg через Entity info, в т.ч. в DXF Code.
Ему удалось сделать какой-то вариант "с использованием функции записи в файл". Но Автокад стал тормозить.
Какой можно ему посоветовать быстрый "прямой" способ получать Class Name объектов?
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 24-09-2018, 21:53:18
Ему удалось сделать какой-то вариант "с использованием функции записи в файл".
Что за глупость?
Код - C++ [Выбрать]
  1. AcDbObjectId id; // Находим его имя класса и печатаем
  2. acutPrintf(_T("\nClass Name = %s, DXF Name = %s"), id.objectClass()->name(), id.objectClass()->dxfName());
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 24-09-2018, 21:54:13
Какой можно ему посоветовать быстрый "прямой" способ получать Class Name объектов?
Прийти сюда на форум и задать прямой вопрос.
Название: Re: получать Class Name объектов
Отправлено: АлексЮстасу от 24-09-2018, 22:10:50
Прийти сюда на форум и задать прямой вопрос.
Я его просил, но безуспешно...
Что за глупость?
Вероятнее, я что-то не так запомнил. Главное - найти способ без торможения Автокада.
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 24-09-2018, 22:12:15
Вероятнее, я что-то не так запомнил. Главное - найти способ без торможения Автокада.
Предложенный мной способ работает моментально.
Название: Re: получать Class Name объектов
Отправлено: АлексЮстасу от 24-09-2018, 22:17:28
Предложенный мной способ работает моментально.
Ок!
Завтра испробуем, отпишусь.  :)
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 24-09-2018, 22:24:21
Если вместо AcDbObjectId есть открытый объект, то:
Код - C++ [Выбрать]
  1.     AcDbObject *obj = /* где-то уже инциализирован */;
  2.     acutPrintf(_T("\nClass Name = %s, DXF Name = %s"), obj->isA()->name(), obj->isA()->dxfName());
Если бы этот программист залез в исходники ARXDBG (которые в составе ObjectARX SDK), то нашел бы этот код в файле samples\database\ARXDBG\AcadUtils\ArxDbgUtilsAcadUi.cpp (строки 490...512)
Название: Re: получать Class Name объектов
Отправлено: Debalance от 25-09-2018, 13:41:49
Ему удалось сделать какой-то вариант "с использованием функции записи в файл".
Интересно было бы взглянуть на этот "чудесный" код. А для чего вообще нужно получать Class Name в виде текстовой строки? Не проще ли производить такие проверочки:
Код - C++ [Выбрать]
  1. if (pEnt->isA() == AcDbLine::desc())
  2. {
  3.  // Что-то делаем...
  4. }
Мне кажется этот код будет работать ещё "моментальнее"...
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 25-09-2018, 15:15:30
Мне кажется этот код будет работать ещё "моментальнее"...
Это одно и тоже по скорости. Но видимо ему нужно не это.
Название: Re: получать Class Name объектов
Отправлено: Debalance от 25-09-2018, 15:29:41
Это одно и тоже по скорости
Сравнение строк работает всё же медленнее, если это, конечно, нужно автору.
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 25-09-2018, 15:34:04
Это одно и тоже по скорости
Сравнение строк работает всё же медленнее, если это, конечно, нужно автору.
Там тоже сравнение строк, хотя возможно сравнение хэша - если хранится в виде дерева.
Название: Re: получать Class Name объектов
Отправлено: Debalance от 25-09-2018, 15:43:47
Там тоже сравнение строк...
Хранить текстовую многобайтную юникод-строку в каждом объекте? Как-то это моветон...
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 25-09-2018, 15:45:34
Там тоже сравнение строк...
Хранить текстовую многобайтную юникод-строку в каждом объекте? Как-то это моветон...

Не в каждом объекте, а как статическое свойство в AcRxClass.
Название: Re: получать Class Name объектов
Отправлено: Debalance от 25-09-2018, 15:56:01
Не в каждом объекте, а как статическое свойство в AcRxClass.
Вот-вот - проще сравнить "дескрипторы" этого статического свойства в двух объектах...
Название: Re: получать Class Name объектов
Отправлено: АлексЮстасу от 25-09-2018, 20:14:24
Предложенный мной способ работает моментально.
Спасибо! Справились. :)
Название: Re: получать Class Name объектов
Отправлено: АлексЮстасу от 26-09-2018, 14:46:55
Что за глупость?
Интересно было бы взглянуть на этот "чудесный" код.
...и было бы неплохо, если бы ответы не начинались с уничижительных оценок. Ни к чему это.
Название: Re: получать Class Name объектов
Отправлено: Александр Ривилис от 26-09-2018, 18:45:04
...и было бы неплохо, если бы ответы не начинались с уничижительных оценок. Ни к чему это.
С моей стороны это была достаточно мягкая оценка. Но дальше мы эту тему обсуждать не будем. Тем более, что каждый раз я получаю и передаю информацию через испорченный телефон.