Как вставить блок по имени по указанным координатам в C++?

Автор Тема: Как вставить блок по имени по указанным координатам в C++?  (Прочитано 7122 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

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

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Здравствуйте!
В соседней ветке есть такой же вопрос про C#. Использовать его в C++ не получается. Не получается получить ObjId по символьному имени блока типа "TEST". Поиск по форуму и документации решения не дал. Прошу помощи.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Не получается получить ObjId по символьному имени блока типа "TEST"
И в чем проблема?
Тут код вставки блока, если известен AcDbObjectId для AcDbBlockTableRecord: https://adn-cis.org/forum/index.php?topic=9090.msg37044#msg37044
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 2
  • Карма: 0
Проблема в том, что не могу получить BlockTableRecord для описания блока по имени блока.
В примере на C# было
Код - C# [Выбрать]
  1. string blockName = "55";
  2. BlockTableRecord blockDef =  bt[blockName].GetObject(OpenMode.ForRead) as BlockTableRecord;
Как получить BlockTableRecord по имени блока "55" на С++? Остальное, вроде, понятно.
« Последнее редактирование: 03-10-2022, 12:23:06 от Александр Ривилис »

Отмечено как Решение yBird 07-10-2022, 13:45:20

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Остальное, вроде, понятно.
Сомневаюсь.
Код - C++ [Выбрать]
  1. AcDbObjectId GetBlockTableRecordId(const ACHAR *blockname)
  2. {
  3.   AcDbObjectId idBtr = AcDbObjectId::kNull;
  4.   AcDbDatabase *pCurDb = acdbCurDwg();
  5.   AcDbBlockTablePointer pBT(pCurDb, AcDb::kForRead);
  6.   if (pBT.openStatus() != Acad::eOk)
  7.         return AcDbObjectId::kNull;
  8.   if (pBT->getAt(blockname, idBtr) != Acad::eOk)
  9.         return AcDbObjectId::kNull;
  10.   return idBtr;
  11. }

Читай правило форматирования кода у нас на форуме у меня в подписи!
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение