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