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

ADN Club => ObjectARX => Тема начата: yBird от 30-09-2022, 13:13:24

Название: Как вставить блок по имени по указанным координатам в C++?
Отправлено: yBird от 30-09-2022, 13:13:24
Здравствуйте!
В соседней ветке есть такой же вопрос про C#. Использовать его в C++ не получается. Не получается получить ObjId по символьному имени блока типа "TEST". Поиск по форуму и документации решения не дал. Прошу помощи.
Название: Re: Как вставить блок по имени по указанным координатам в C++?
Отправлено: Александр Ривилис от 30-09-2022, 22:27:20
Не получается получить ObjId по символьному имени блока типа "TEST"
И в чем проблема?
Тут код вставки блока, если известен AcDbObjectId для AcDbBlockTableRecord: https://adn-cis.org/forum/index.php?topic=9090.msg37044#msg37044
Название: Re: Как вставить блок по имени по указанным координатам в C++?
Отправлено: yBird от 03-10-2022, 12:03:30
Проблема в том, что не могу получить BlockTableRecord для описания блока по имени блока.
В примере на C# было
Код - C# [Выбрать]
  1. string blockName = "55";
  2. BlockTableRecord blockDef =  bt[blockName].GetObject(OpenMode.ForRead) as BlockTableRecord;
Как получить BlockTableRecord по имени блока "55" на С++? Остальное, вроде, понятно.
Название: Re: Как вставить блок по имени по указанным координатам в C++?
Отправлено: Александр Ривилис от 03-10-2022, 12:36:53
Остальное, вроде, понятно.
Сомневаюсь.
Код - 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. }

Читай правило форматирования кода у нас на форуме у меня в подписи!