- 积分
- 309
- 明经币
- 个
- 注册时间
- 2003-7-21
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
最近我在程序中想以数据库方式打开一个DWG文件(内有封闭轮廓,已经被EXPLODE过,所以只有AcDbArc和AcDbLine),然后按照逆时针或顺时针遍历该轮廓的各边。奇怪的是遍历时总是先要遍历完AcDbArc对象然后才有AcDbLine对象,使得遍历顺序杂乱。是不是在AcDbBlockTableRecord中AcDbArc总是在前啊?请问如何才能实现该有序遍历功能?请指教。谢谢
我的遍历部分程序如下:
AcDbDatabase *mybase=new AcDbDatabase(Adesk::kFalse);
AcDbLine *pLine; //定义指向直线对象的指针
AcDbArc *pArc; //定义指向圆弧对象的指针
mybase->readDwgFile(sText,_SH_DENYNO);//sText为DWG文件名。
AcDbBlockTableRecord *pBlockTblRec=NULL;
AcDbBlockTable *pBlockTable=NULL;
mybase->getBlockTable( pBlockTable, AcDb::kForWrite);
pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTblRec,AcDb::kForWrite);
acutPrintf ("working\n");
//定义浏览器指针
AcDbBlockTableRecordIterator *pBlockTblRecIterator = NULL;
pBlockTblRec->newIterator( pBlockTblRecIterator );
//遍历块表记录
AcDbEntity *pEnt = NULL; //定义指向实体的指针
int i=1;
for (pBlockTblRecIterator->start();!pBlockTblRecIterator->done();pBlockTblRecIterator->step())
{
pBlockTblRecIterator->getEntity( pEnt, AcDb::kForWrite );
if(pEnt->isKindOf(AcDbLine::desc()))
{
acutPrintf("第%d个实体是AcDbLine!\n",i);
}
else if(pEnt->isKindOf(AcDbArc::desc()))
{
acutPrintf("第%d个实体是AcDbArc!\n",i);
acutPrintf("\n\n");
}
else
acutPrintf("第%d个实体是未知类型实体!\n",i);
i++;
} |
|