leafsoar 发表于 2004-1-7 16:53:00

help!objectARX的数据库中实体遍历问题。请指教。

最近我在程序中想以数据库方式打开一个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++;
       }

lockmyeye 发表于 2004-1-10 02:02:00

我在LISP中是用线两端的坐标来判断。

leafsoar 发表于 2004-2-9 09:03:00

明白了,先把多边形变成一系列折线储存。


然后对他们的两端点分析,使成顺序即可。


多谢了。
页: [1]
查看完整版本: help!objectARX的数据库中实体遍历问题。请指教。