30/05/2013
Чтение размерного текста в ARX
Размерный текст нельзя прочитать непосредственно, т.к. информация хранится в примитиве AcDbMText, содержащемся в записи таблицы блоков. Из AcDbDimension (или производных классов) можно получить идентификатор записи таблицы блоков при помощи метода dimBlockId(). Затем можно в записи таблицы блоков AcDbBlockTableRecord найти примитив AcDbMText и вызвать его метод contents(). Смотрите следующий код:
Код - C++: [Выделить]
- AcDbEntity *pEnt;
- AcDbObjectId id;
- AcGePoint3d ptPick;
- ads_name eName;
- if (acedEntSel (_T("Select a dimension: ") ,
- eName, asDblArray (ptPick)) != RTNORM )
- return;
- acdbGetObjectId (id, eName);
- acdbOpenAcDbEntity (pEnt, id, AcDb::kForRead);
- //----- Получим идентификатор записи таблицы блоков,
- // которая содержит текстовый примитив
- AcDbDimension *pDim =AcDbDimension::cast (pEnt);
- if (pDim == NULL)
- {
- pEnt->close ();
- return;
- }
- id =pDim->dimBlockId ();
- pDim->close ();
- AcDbBlockTableRecord *pr;
- acdbOpenAcDbObject ((AcDbObject *&) pr,
- id, AcDb::kForRead);
- //----- Пройдемся по примитивам в записи таблицы блоков
- AcDbBlockTableRecordIterator *pi;
- pr->newIterator (pi);
- while (!pi->done ())
- {
- pi->getEntity (pEnt, AcDb::kForRead);
- if (pEnt->isKindOf (AcDbMText::desc ()))
- {
- AcDbMText *pt = (AcDbMText *) pEnt;
- ACHAR *s = pt->contents ();
- acutPrintf (s);
- delete s;
- }
- pEnt->close();
- pi->step();
- }
- delete pi;
- pr->close();
Источник: http://adndevblog.typepad.com/autocad/2012/12/reading-dimension-text-in-arx.html
Обсуждение: http://adn-cis.org/forum/index.php?topic=92.0
Опубликовано 30.05.2013
Отредактировано 09.06.2013 в 04:03:33
Отредактировано 09.06.2013 в 04:03:33