bopugs 发表于 2009-4-21 07:40:00

[求助]如何把图纸中所有的文字提取出来

刚学ObjectARX,现在想实现把当前文档中包含的所有文字提取出来,请各位前辈高人指点。

dll 发表于 2009-4-21 15:31:00

最简单的就是遍历数据库然后判断类型是否是文字了,
isKindOf( AcdbText::desc() )

bopugs 发表于 2009-4-22 21:31:00

谢谢dll,不知道有没有这样的例子

nogirlfriend 发表于 2009-4-23 18:12:00

给你一段代码吧 希望对你有启发
AcDbDatabase* pDb = acdbHostApplicationServices()->workingDatabase();
if (pDb == NULL)
{
acutPrintf("\n当前无活动的图形!");
return false;
}
AcDbBlockTable *pBlockTable;
if (pDb->getBlockTable(pBlockTable, AcDb::kForRead) != Acad::eOk)
{
acutPrintf("\n打开块表失败!");
return false;
}
AcDbBlockTableRecord *pBlockRec;
if (pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockRec, AcDb::kForRead)!= Acad::eOk)
{
acutPrintf("打开模型空间失败!");
pBlockTable->close();
return false;
}
pBlockTable->close();
AcDbBlockTableRecordIterator* pIterator,*pIter;
pBlockRec->newIterator(pIterator,true,false);
pBlockRec->newIterator(pIter,true,false);
if( pIterator->done())
{
acutPrintf("\n当前图形无数据。");
pBlockRec->close();
delete pIterator;
return false;
}
AcDbEntity* pEnt;
for(; !pIterator->done(); pIterator->step(true,false))
{
if(pIterator->getEntity(pEnt, AcDb::kForRead,true)!=Acad::eOk)
   continue;
if(pEnt->isKindOf(AcdbText::desc() true)
{
   AcDbObjectId eId;
   eId=pEnt->objectId();
   ids.append(eId);
}
pEnt->close();
}
pBlockRec->close();
delete pIterator;

bopugs 发表于 2009-4-23 20:13:00

太感谢nogirlfriend了。
页: [1]
查看完整版本: [求助]如何把图纸中所有的文字提取出来