- UID
- 93607
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2003-11-11
- 最后登录
- 1970-1-1
|
楼主 |
发表于 2003-12-24 16:08:50
|
显示全部楼层
好像pThisDb不用delete吧
我试了一下,把pDb放到makeBlock()函数中了,可是怎么还是一样的死呢?唉,我实在是搞不定了,楼上的快帮我看看怎么回事吧。下边是我改后的代码://b制作图块
BOOL CChoBlock::makeBlock(ads_name ss)
{
long lenSS; // 选择集的长度
ads_name ssEntName; // 选择集中的实体名
int rc; // 返回值
long idx;
Acad::ErrorStatus es=Acad::eOk;
AcDbObjectIdArray objList;
AcDbObjectId ownerId=AcDbObjectId::kNull;
AcDbDatabase *pDb;
//当前数据库
AcDbDatabase *pThisDb;
pThisDb = acdbHostApplicationServices()->workingDatabase();
pDb = new AcDbDatabase(Adesk::kFalse);
/////////加入新实体/////////
rc=acedSSLength(ss,&lenSS);
if(rc!=RTNORM)
{
acutPrintf("\nInvalid or empty selection set. ");
delete pDb;
eturn FALSE;
}
for(idx=0;idx<lenSS;idx++)
{
// Get the entity name at the spcified index
rc = acedSSName(ss, idx, ssEntName);
if(rc != RTNORM)
{
delete pDb;
break;
}
AcDbObjectId objId; //实体Id
acdbGetObjectId(objId,ssEntName);
////将实体写入
AcDbEntity *pElement; //实体类型
es=acdbOpenObject(pElement,objId,AcDb::kForWrite);
if(es!=Acad::eOk)
{
acutPrintf("\n不能获得实体类型! ");
pElement->close();
delete pDb;
return FALSE;
}
if(pElement->ownerId()==ownerId)
{
objList.append(objId);
}
else if(idx==0)
{
ownerId=pElement->ownerId();
objList.append(objId);
}
pElement->close();
}//for
AcGePoint3d ptBase;
ads_point ptBase1;
acedCommand(RTSTR,"OSNAP",RTSTR,"MID,ENDP,CEN,INS,EXT,NEA",0);
acedGetPoint(NULL,"\n请指定图块的插入基点...",ptBase1);
ptBase[0]=ptBase1[X];
ptBase[1]=ptBase1[Y];
ptBase[2]=ptBase1[Z];
es=pThisDb->wblock(pDb,objList,ptBase);
if(es!=Acad::eOk)
{
delete pDb;
return FALSE;
}
CString strPath("");
CEnv env;
strPath += env.ReadDataFromReg();
strPath += "\\系统支持文件";//(2002.8.12添加)
strPath += "\\总图内容复制.dwg";
es=pDb->saveAs(strPath);
if(es!=Acad::eOk)
{
acutPrintf("\n不能保存图块,请检查!");
return FALSE;
}
else
{
acutPrintf("\n已成功的制作并保存了图块!");
}
delete pDb;
return TRUE;
acedCommand(RTSTR,"OSNAP",RTSTR,"OFF",0);
} |
|