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

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

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

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

已经在数据库里的实体是不能直接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加入新图块的记录.

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

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