@ViX_EL
Разработчик C++

Как достать текст из блока в dwg файле при помощи библиотеки libredwg?

У меня на работе задача достать текст из изометрических чертежей в dwg формате и спарсить нужные данные в excel таблицу, у чертежей есть разные проектировщики, так что для каждого парсинг отличается. Для нескольких проектировщиков я смог достать просто текст и сделать с ним что мне нужно, но один из проектировщиков занёс табличную часть чертежа в блок и вот как достать оттуда текст я не понимаю. Я сам пишу на C++. Загружал я текст при помощи библиотеки на C - libredwg, для которой нормальной документации нет. Другие библиотеки, которые я находил я просто не могу скомпилировать на последней версии visual studio, т.к. они больше не развиваются или последняя версия была давно. Вот так выглядят данные в нужной мне таблице, которая является блоком: 66c07f7666cf8299980235.png
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
avc
@avc
Инженер и программист
Риторический вопрос - Не проще ли программировать как плагин к Автокаду на обычных API: ARX или AutoCAD.Net ?
По теме: атрибуты блока (AttributeDefinition) - это такие же ровно Entity как и все остальные объекты чертежа. Содержатся они в BTR (Block Table Record) блока. Пространство модели - это тоже одна из BTR по имени Model_Space. Так что чтение объектов из блока ничем вообще не отличается от чтения из модели. Список всех блоков есть в словаре BlockTable - можно в этом словаре найти любой блок по имени и по ObjectId его BTR. Но есть один интересный нюанс. Если речь идет о константных атрибутах, то достаточно прочитать их значения из BTR. А изменяемые атрибуты (AttributeReference) хранятся в специальном списке, привязаном уже не к BTR, а к конкретной ссылке на блок (BlockReference) (так как у них разные значения надо хранить для разных ссылок). Скорее всего вам просто надо этот список у нужного BlockReference прочитать.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы