gxrily 发表于 2007-9-17 14:36:00

[求助] 块分解的问题

pBlf=AcDbBlockReference::cast(pEnt);
      AcDbVoidPtrArray bentyset;
       pBlf->explode(bentyset);
AcDbEntity *pblent=NULL;
for (int blent=0;blent
{
pblent=(AcDbEntity*)bentyset.at(blent);
if (pblent->isA()==AcDb2dPolyline::desc())
            {
               p2dpoly=AcDb2dPolyline::cast(pblent);
               AcDbObjectIterator *pVertIter =p2dpoly->vertexIterator();
                AcDb2dVertex *pVertex;
                AcGePoint3dlocation;
                AcDbObjectIdvertexObjId;
            for(int vertexNumber=0;!pVertIter->done();vertexNumber++,pVertIter->step())
                        {
                               AfxMessageBox("9");
                               vertexObjId=pVertIter->objectId();
// vertexObjId 不知为何是knull
                               if (vertexObjId!=AcDbObjectId::kNull)
                               {
                                    AfxMessageBox("qq");
                                    Acad::ErrorStatus es;
                                    es=acdbOpenObject(pVertex,vertexObjId,AcDb::kForRead);
                                    acutPrintf("%d",es);
                               }
                              
                              location=pVertex->position() ;
                               pointlist.append(location);
                              pVertex->close();*/
                        }
         
                      }
                      p2dpoly->close();
               }
               
         }
得到的vertexObjId 总为knull,请问程序有什么问题,为什么打不开对象

gengzhengyi 发表于 2007-9-22 10:21:00

看不懂

fpiw 发表于 2007-9-22 10:35:00

objectId是要加入database之后才有的,explode出来的对象只是内存中的线,还没加入到当前图形数据库,当然也就不会存在什么objectId了

sieben 发表于 2007-9-27 13:35:00

对楼上的说法怀疑!
objectId是跟随对象实例的,也就是只要生成了对象实例,实例就会拥有objectId属性,与实体对象是否已经提交到database无关,楼主的错误可能是到database去访问还没有提交到database的objectId

angel0917 发表于 2007-10-10 16:58:00

请问楼主的问题解决了没有?能否告诉我啊?我也有类似的问题,我的毕业设计,这个问题解决不了很着急啊。
块爆炸后得到的实体怎样获取并显示阿?
我要做的是把插入的块explode ,然后得到其中爆炸后直线的端点。
各位大虾能否也帮帮忙
急啊。

月色弥漫 发表于 2007-10-15 17:21:00


再遍历一遍不就可以获得直线了啊?
都炸开了后面的就简单了
我这倒是有代码~不过和你的要求不太一样~需要改一下哦
占且没时间改哦~工作中~

松竹 发表于 2007-10-24 18:24:00

先说说你想干什么吧。
vertexObjId=pVertIter->objectId();改成
pVertex = (AcDb2dVertex *)pVertIter->entity();得到对象。
页: [1]
查看完整版本: [求助] 块分解的问题