请问我这样创建新块为什么不能成功?
void CMainPlate::CreateBlock() <BR>{<BR> // TODO: Add your control notification handler code here<BR> acDocManager->lockDocument(curDoc());<BR> char BlockName;<BR> acedGetString(0,"请输入新块名\n",BlockName);<BR> AcDbBlockTableRecord *pBRecord=new AcDbBlockTableRecord();<BR> pBRecord->setName(BlockName);<BR> AcGePoint3d basept(0,0,0);<BR> pBRecord->setOrigin(basept);<BR> AcDbBlockTable *pBTable=NULL;<BR> acdbHostApplicationServices()->workingDatabase()\<BR> ->getSymbolTable(pBTable,AcDb::kForWrite);<BR> AcDbObjectId pBRecordId;<BR> pBTable->add(pBRecordId,pBRecord);<BR> pBTable->close();<BR> ads_name ssl;<BR> acedSSGet(NULL,NULL,NULL,NULL,ssl);<BR> long number;<BR> acedSSLength(ssl,&number);<BR> ads_name ent;<BR> for(int i=0;i<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->appendAcDbEntity(entId,pEnt);<BR> pEnt->close();<BR> }<BR> pBRecord->close();<BR> acDocManager->unlockDocument(curDoc());<BR>}我想把选择集中的实体做成一个块,这段代码编译,链接都没有毛病,可我在插入新建块的时候,却什么也看不到,请高手指点。 已经在数据库里的实体是不能直接append到另外一个block table record里面的, 因为它们已经属于MODEL SPACE这个block table record了. 你观察一下pBRecord->appendAcDbEntity(entId,pEnt);的回返值就看到了, 会给你26, 就是eAlreadyInDatabase..
如果做新图块时可以把加入图块的实体删除, 建立一个AcDbObjectIdArray类实体, 在获得每一个选择集中的实体的ObjectId之后, 用array->append(Id), 最后把这个array放在新图块的记录名下. (pBRecord->assumeOwnershipOf (<array name>)) 就是把选中的实体从MODEL SPACE记录移动到新图块的记录.
如果不能删除做成新图块的实体, 在打开每一个选择集中的实体之后, 用以下代码复制实体:
AcDbEntity *pCopy;<BR>AcDbObjectId copyId;<BR>pCopy = (AcDbEntity*)pEnt->clone();
然后把pCopy加入新图块的记录.<BR> 谢谢
页:
[1]