找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 689|回复: 8

[求助]:saveAs出错。何故?

[复制链接]
发表于 2005-10-8 19:14:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
AcDbBlockTable* pTb = NULL;
AcDbBlockTableRecord* pTbRc = NULL;
               
acdbHostApplicationServices()->workingDatabase()->getBlockTable( pTb,AcDb::kForRead );
pTb->getAt( ACDB_MODEL_SPACE, pTbRc, AcDb::kForWrite );
pTb->close();

AcDbObjectId id;
AcDbObjectIdArray idlist;
AcDbBlockTableRecordIterator* pTbRcIt;
if(Acad::eOk != pTbRc->newIterator( pTbRcIt ))
{
          pTbRc->close();
          continue;
}

CString layername;
layername.Format("第一层");
const char *lyrName;
lyrName = LPCTSTR(layername);

for( ; !pTbRcIt->done(); pTbRcIt->step() )
{
           AcDbEntity* pEnt;
           if( Acad::eOk == pTbRcIt->getEntity(pEnt,AcDb::kForRead) )
           {
        if( strcmp(pEnt->layer(),lyrName) == 0
                {
                        if( Acad::eOk == pTbRcIt->getEntityId( id ))
                                idlist.append(id);//加入id列表
                }
          }
                               
}
delete pTbRcIt;
pTbRc->close();

if( idlist.isEmpty() )
     return;

AcDbObjectId recordId;
AcDbDatabase *pTempDb = new AcDbDatabase(false);
pTempDb->getBlockTable( pTb, AcDb::kForRead );
pTb->getAt( ACDB_MODEL_SPACE, recordId );
pTb->close();
               
AcDbIdMapping idMap;
Acad::ErrorStatus es = Acad::eOk;
es = pTempDb->deepCloneObjects( idlist, recordId, idMap );
               
CString outputfilename;
outputfilename.Format("text.dwg");
               
es = pTempDb->saveAs(LPCTSTR(outputfilename));
               
delete pTempDb;

到了倒数第二步出错了。es = pTempDb->saveAs(LPCTSTR(outputfilename));

求大侠指点一二。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-10-8 21:06:24 | 显示全部楼层
多加一些判断,debug一下,答案就出来了,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-9 08:34:31 | 显示全部楼层
多加一些判断?哪加呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-9 09:50:02 | 显示全部楼层
new AcDbDatabase(false)创建的数据库无默认的层表等,仅仅适用于导入数据库
/---------------------------------------------------------------------------------------
试试看,
new AcDbDatabase(true);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-9 11:08:52 | 显示全部楼层
按照上边4楼楼主说:
new AcDbDatabase(false)创建的数据库无默认的层表等,仅仅适用于导入数据库
/---------------------------------------------------------------------------------------
试试看,
new AcDbDatabase(true);  

添加一个判断:
es = pTempDb->deepCloneObjects( idlist, recordId, idMap );
if ( Acad::eOk != es )
{
return;
}

我发现这句有问题,不能正确克隆。
怎么才能将一个层上的实体保存到另一个数据库中,的指定层?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-9 14:12:52 | 显示全部楼层
es = pTempDb->deepCloneObjects( idlist, recordId, idMap );
我这句跟踪过来es是Acad::eOk的。
查了下资料,但是看不是太明白,说好像是deepCloneObjects不能用在不同数据库中,不知道是不是真的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-10-9 14:19:25 | 显示全部楼层
在不同的图形数据库中需要用长事务进行处理。
可以参考saple中的例子
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-10-10 12:03:48 | 显示全部楼层
看来挺复杂。继续 Good Good Study 吧!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-2-13 11:16:52 | 显示全部楼层
Good Good Study!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-21 11:14 , Processed in 0.191448 second(s), 47 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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