找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 482|回复: 2

[求助]:explode()怎么用?大家看看下面代码错在那里?

[复制链接]
发表于 2004-9-13 21:28:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想把block分解成一般的实体,可当对打散实体操作时总是出错不知为什么,请大家指教。
下面代码是其中的一部分,当调用函数extract()提取三维线的顶点时
es=p3DPL->openVertex(pVertex,ID,AcDb::kForRead,Adesk::kTrue);的返回值es总是Acad::eNullObjectId不知是什么原因?
void getBlockInfo()
{
        AcDbBlockTable *pBlkTbl;
        acdbHostApplicationServices()->workingDatabase()->getSymbolTable(pBlkTbl, AcDb::kForRead);

        AcDbBlockTableRecord *pBlkTblRcd;
        pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd, AcDb::kForRead);
        pBlkTbl->close();
        AcDbBlockTableRecordIterator *pBlkTblRcdItr;
        pBlkTblRcd->newIterator(pBlkTblRcdItr);
        AcDbEntity *pEnt;
        AcGePoint3dArray ptArray;
        int nNum,nColor=1,i;
        const char *objName;

        for (pBlkTblRcdItr->start(); !pBlkTblRcdItr->done();pBlkTblRcdItr->step())
        {
                pBlkTblRcdItr->getEntity(pEnt, AcDb::kForRead);
                objName=pEnt->isA()->name();
                if(!stricmp(objName,"AcDbBlockReference"))
                {
                        AcDbVoidPtrArray entitySet;
                        AcDbEntity       *pEntTmp;                                               
                        pEnt->explode(entitySet);
                        //分解block(由三维线和一个圆组成)块
                        int n=entitySet.length();
                        for(i=0;i<n;i++)
                        {
                                pEntTmp=(AcDbEntity *)entitySet;       
                                //提取三维线顶点坐标               
                                if(extract(pEntTmp,ptArray))
                                {}
                        }
                }
                pEnt->close();
        }
        pBlkTblRcd->close();
        delete pBlkTblRcdItr;
}
BOOL        extract(AcDbEntity *pEntity,AcGePoint3dArray &pointArray)
{
        const char *objName;
        if (pEntity==NULL)return false;
        AcGePoint3d pt;
        objName=pEntity->isA()->name();
        pointArray.setLogicalLength(0);

        if(!stricmp(objName,"AcDb3dPolyline"))
        {
                AcDb3dPolylineVertex        *pVertex = NULL;
                AcDbObjectId                        ID;
                AcDb3dPolyline                        *p3DPL = (AcDb3dPolyline*)pEntity;

                AcDbObjectIterator *        pIter;
                Acad::ErrorStatus es ;
                pIter = p3DPL->vertexIterator();
                for (;!pIter->done();pIter->step())
                {
                        ID=pIter->objectId();
                        es=p3DPL->openVertex(pVertex,ID,AcDb::kForRead,Adesk::kTrue);
                        if(Acad::eOk!=es)continue;
                        pt=pVertex->position();       
                        pointArray.append(pt);
                        pVertex->close();
                }
                delete pIter;
        }
        else if(pEntity->isA()==AcDbCircle::desc())
        {
        }       
        else
        {
        }
        return true;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-9-14 12:01:01 | 显示全部楼层
用[PHP]。。。[/PHP]来显示代码会增加可读性
pBlkTblRcdItr->getEntity(pEnt, AcDb::kForRead);
改成
pBlkTblRcdItr->getEntity(pEnt, AcDb::kForWrite);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-9-14 15:50:35 | 显示全部楼层
对谢老兄指教,我改了之后还是不行,pBlkTblRcdItr->getEntity(pEnt, AcDb::kForWrite); 的返回值
为eLockViolation,不知是什么意思,请大哥帮忙!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 00:49 , Processed in 0.231735 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表