明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3603|回复: 5

如何多次插入外部dwg文件 望指教

[复制链接]
发表于 2012-2-9 16:45:43 | 显示全部楼层 |阅读模式
如题!
目前调试第一次能够成功,可第二次就不行了,返回eHadMultipleReaders错误。
AcDbDatabase* pExternalDb=new AcDbDatabase(Adesk::kFalse);
AcDbDatabase *pCurrentDb = acdbHostApplicationServices()->workingDatabase();
AcDbDatabase *pTempDb;// 临时图形数据库
if (RTNORM != acedGetFileD(_T("选择图形文件名称"),NULL,_T("dwg"),0,rb))//名字块所在的图形
{
  acutRelRb(rb);
  return;
}
if (Acad::eOk != pExternalDb->readDwgFile(rb->resval.rstring))
if (Acad::eOk != pExternalDb->wblock(pTempDb,list,AcGePoint3d::kOrigin))
{
  acedAlert(_T("wblock操作失败"));
  return;
}
Acad::ErrorStatus err= pCurrentDb->insert(AcGeMatrix3d::kIdentity,pTempDb);//当第二次调试时这里报错
delete pTempDb;
delete pExternalDb;
望指点 谢谢

 楼主| 发表于 2012-2-10 11:15:21 | 显示全部楼层
求教! 顶个!
发表于 2012-2-10 11:46:43 | 显示全部楼层
插入图块么?参考下面的代码,经过测试的
  1. Acad::ErrorStatus RBlkRefJig::insert( const ACHAR *pszFilePath )
  2. {
  3.         Acad::ErrorStatus es = Acad::eOk;

  4.         AcDbDatabase *pBlkDb = new AcDbDatabase( kFalse );
  5.         pBlkDb->readDwgFile( pszFilePath );

  6.         AcDbDatabase *curDB = acdbHostApplicationServices()->workingDatabase();
  7.         es = curDB->insert( m_blkId, m_pszBlkName, pBlkDb );

  8.         delete pBlkDb;

  9.         return es;
  10. }
复制代码
 楼主| 发表于 2012-2-10 14:58:32 | 显示全部楼层
luowy 发表于 2012-2-10 11:46
插入图块么?参考下面的代码,经过测试的

首先感谢您的回复!
1.es = curDB->insert( m_blkId, m_pszBlkName, pBlkDb );
用这种形式的插入调试后外部参照中添加进去了,可是图纸中并不显示,还要什么操作?
2.es = acdbCurDwg()->insert(AcGeMatrix3d::kIdentity,pExternalDb);
用这种形式的插入调试第一次成功能显示出来,问题是在调试第二次的时候会报错,es返回值是eHadMultipleReaders,如何能够实现多次插入?
望指点 谢谢!

发表于 2012-2-10 17:26:07 | 显示全部楼层
illuminiti 发表于 2012-2-10 14:58
首先感谢您的回复!
1.es = curDB->insert( m_blkId, m_pszBlkName, pBlkDb );
用这种形式的插入调试后 ...

insert只是插入块定义(AcDbBlockTableRecord),图纸中显示的块,是指块参照(AcDbBlockRefence),作为acad的编程开发者,需要注意其中的区别。
第二个问题嘛,可能是你没考虑到当前数据库存在个块定义了,你再插入一个同名块定义,是肯定要出错的。你发现2者的区别没?我的是有指定块定义名称,你的没有指定,就是这个原因,出错了。

-------------
小建议
往一个数据库(包括容器对象)插入对象时,务必在插入对象前,判断目标数据库是否有该定义了,否则只会出错
 楼主| 发表于 2012-2-16 16:28:10 | 显示全部楼层
luowy 发表于 2012-2-10 17:26
insert只是插入块定义(AcDbBlockTableRecord),图纸中显示的块,是指块参照(AcDbBlockRefence),作为 ...

非常感谢你的提醒和指导,Thanks!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 09:50 , Processed in 0.181583 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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