JA_JERRY 发表于 2005-4-18 21:35:00

请问我这样创建新块为什么不能成功?

void CMainPlate::CreateBlock() <BR>{<BR>        // TODO: Add your control notification handler code here<BR>        acDocManager-&gt;lockDocument(curDoc());<BR>        char BlockName;<BR>        acedGetString(0,"请输入新块名\n",BlockName);<BR>        AcDbBlockTableRecord *pBRecord=new AcDbBlockTableRecord();<BR>        pBRecord-&gt;setName(BlockName);<BR>        AcGePoint3d basept(0,0,0);<BR>        pBRecord-&gt;setOrigin(basept);<BR>        AcDbBlockTable *pBTable=NULL;<BR>        acdbHostApplicationServices()-&gt;workingDatabase()\<BR>                -&gt;getSymbolTable(pBTable,AcDb::kForWrite);<BR>        AcDbObjectId pBRecordId;<BR>        pBTable-&gt;add(pBRecordId,pBRecord);<BR>        pBTable-&gt;close();<BR>        ads_name ssl;<BR>        acedSSGet(NULL,NULL,NULL,NULL,ssl);<BR>        long number;<BR>        acedSSLength(ssl,&amp;number);<BR>        ads_name ent;<BR>        for(int i=0;i&lt;number;i++)<BR>        {<BR>                acedSSName(ssl,i,ent);<BR>                AcDbObjectId entId;<BR>                acdbGetObjectId(entId,ent);<BR>                AcDbEntity *pEnt;<BR>                acdbOpenObject(pEnt,entId,AcDb::kForRead);<BR>                pBRecord-&gt;appendAcDbEntity(entId,pEnt);<BR>                pEnt-&gt;close();<BR>        }<BR>        pBRecord-&gt;close();<BR>        acDocManager-&gt;unlockDocument(curDoc());<BR>}


我想把选择集中的实体做成一个块,这段代码编译,链接都没有毛病,可我在插入新建块的时候,却什么也看不到,请高手指点。

pandoram 发表于 2005-4-20 17:10:00

已经在数据库里的实体是不能直接append到另外一个block table record里面的, 因为它们已经属于MODEL SPACE这个block table record了. 你观察一下pBRecord-&gt;appendAcDbEntity(entId,pEnt);的回返值就看到了, 会给你26, 就是eAlreadyInDatabase..


如果做新图块时可以把加入图块的实体删除, 建立一个AcDbObjectIdArray类实体, 在获得每一个选择集中的实体的ObjectId之后, 用array-&gt;append(Id), 最后把这个array放在新图块的记录名下. (pBRecord-&gt;assumeOwnershipOf (&lt;array name&gt;)) 就是把选中的实体从MODEL SPACE记录移动到新图块的记录.


如果不能删除做成新图块的实体, 在打开每一个选择集中的实体之后, 用以下代码复制实体:


AcDbEntity *pCopy;<BR>AcDbObjectId copyId;<BR>pCopy = (AcDbEntity*)pEnt-&gt;clone();


然后把pCopy加入新图块的记录.<BR>

JA_JERRY 发表于 2005-4-20 19:11:00

谢谢

页: [1]
查看完整版本: 请问我这样创建新块为什么不能成功?