illuminiti 发表于 2012-2-9 16:45:43

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

如题!
目前调试第一次能够成功,可第二次就不行了,返回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;
望指点 谢谢

illuminiti 发表于 2012-2-10 11:15:21

求教! 顶个!

luowy 发表于 2012-2-10 11:46:43

插入图块么?参考下面的代码,经过测试的Acad::ErrorStatus RBlkRefJig::insert( const ACHAR *pszFilePath )
{
        Acad::ErrorStatus es = Acad::eOk;

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

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

        delete pBlkDb;

        return es;
}

illuminiti 发表于 2012-2-10 14:58:32

luowy 发表于 2012-2-10 11:46 static/image/common/back.gif
插入图块么?参考下面的代码,经过测试的

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

luowy 发表于 2012-2-10 17:26:07

illuminiti 发表于 2012-2-10 14:58 static/image/common/back.gif
首先感谢您的回复!
1.es = curDB->insert( m_blkId, m_pszBlkName, pBlkDb );
用这种形式的插入调试后 ...

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

-------------
小建议
往一个数据库(包括容器对象)插入对象时,务必在插入对象前,判断目标数据库是否有该定义了,否则只会出错

illuminiti 发表于 2012-2-16 16:28:10

luowy 发表于 2012-2-10 17:26 static/image/common/back.gif
insert只是插入块定义(AcDbBlockTableRecord),图纸中显示的块,是指块参照(AcDbBlockRefence),作为 ...

非常感谢你的提醒和指导,Thanks!
页: [1]
查看完整版本: 如何多次插入外部dwg文件 望指教