明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2479|回复: 2

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

[复制链接]
发表于 2005-4-18 21:35:00 | 显示全部楼层 |阅读模式
void CMainPlate::CreateBlock()
{
// TODO: Add your control notification handler code here
acDocManager->lockDocument(curDoc());
char BlockName[132];
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;i<number;i++)
{
acedSSName(ssl,i,ent);
AcDbObjectId entId;
acdbGetObjectId(entId,ent);
AcDbEntity *pEnt;
acdbOpenObject(pEnt,entId,AcDb::kForRead);
pBRecord->appendAcDbEntity(entId,pEnt);
pEnt->close();
}
pBRecord->close();
acDocManager->unlockDocument(curDoc());
} 我想把选择集中的实体做成一个块,这段代码编译,链接都没有毛病,可我在插入新建块的时候,却什么也看不到,请高手指点。
发表于 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 (<array name>)) 就是把选中的实体从MODEL SPACE记录移动到新图块的记录. 如果不能删除做成新图块的实体, 在打开每一个选择集中的实体之后, 用以下代码复制实体: AcDbEntity *pCopy;
AcDbObjectId copyId;
pCopy = (AcDbEntity*)pEnt->clone(); 然后把pCopy加入新图块的记录.
 楼主| 发表于 2005-4-20 19:11:00 | 显示全部楼层
谢谢

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 06:49 , Processed in 0.146816 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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