明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1790|回复: 5

[ARX]大家帮忙看一下这段程序

[复制链接]
发表于 2005-2-20 14:02:00 | 显示全部楼层 |阅读模式
<BR>void InsertBlock(ads_point basePoint,double angle)<BR>{<BR>        AcDbDatabase *pDwg =new AcDbDatabase (Adesk::kFalse) ; <BR>        Acad::ErrorStatus es;<BR>        es=pDwg-&gt;readDwgFile ("C:\\ccd.dwg") ; <BR>        <BR>        if(es==Acad::eOk)<BR>        {<BR>                AfxMessageBox("readDwgFile Successful!");<BR>                return;<BR>        }<BR>        AcDbObjectId blockId ; <BR>        <BR>        es = acdbHostApplicationServices()-&gt;workingDatabase()-&gt;insert (blockId, "myfile", pDwg, <BR>                Adesk::kFalse) ; <BR>        if ( es != Acad::eOk ) <BR>                acutPrintf ("\n插入块错误.") ; <BR>        delete pDwg ; <BR>        <BR>        <BR>        AcDbBlockReference *pBlkRef =new AcDbBlockReference ; <BR>        pBlkRef-&gt;setBlockTableRecord (blockId) ;


        AcGePoint3d inbase(basePoint[X], basePoint[Y], 0.0);        <BR>        pBlkRef-&gt;setPosition (inbase) ; <BR>        pBlkRef-&gt;setRotation (0.0) ;<BR>        pBlkRef-&gt;setScaleFactors(AcGeScale3d(1,1,1));<BR>        <BR>        AcDbBlockTable *pBlockTable ; <BR>        <BR>        es=acdbHostApplicationServices()-&gt;workingDatabase()-&gt;getBlockTable (pBlockTable, AcDb::kForRead) ; <BR>        if(es!=Acad::eOk)<BR>                acutPrintf("getBlockTable faile!");<BR>        <BR>        AcDbBlockTableRecord *pBlockTableRecord ; <BR>        es=pBlockTable-&gt;getAt (ACDB_MODEL_SPACE, pBlockTableRecord, <BR>                AcDb::kForWrite) ; <BR>        <BR>        if(es!=Acad::eOk)<BR>                acutPrintf("getAt faile!");<BR>        <BR>        pBlockTable-&gt;close () ;<BR>        AcDbObjectId newEntld;<BR>        pBlockTableRecord-&gt;appendAcDbEntity(newEntld,pBlkRef);<BR>        pBlockTableRecord-&gt;close();<BR>        pBlkRef-&gt;close();<BR>        <BR>}


为什么我调用了该函数,插入的图块显示不出来的,是什么原因!


谢谢

发表于 2005-2-20 16:22:00 | 显示全部楼层
我也是个菜鸟不知道我说的对不对,你的代码第一个if语句: if(es==Acad::eOk)
{
AfxMessageBox("readDwgFile Successful!");
return;
}
如果成功读入了ccd.dwg文件则readDwgFile的返回值是Acad::eOk,由于return 语句的作用是不是就退出了该函数,而后面的语句根本就没有执行,你把这个if语句删掉试试
 楼主| 发表于 2005-2-20 16:54:00 | 显示全部楼层
不关上面的事,我把上面的屏蔽掉也是这个样了,还请大家帮一下忙!
发表于 2005-2-21 13:22:00 | 显示全部楼层
Acad::ErrorStatus es = Acad::eOk;
//获得数据库指定块的ID
AcDbBlockTable *pBTR;
es = pBackDb->getBlockTable(pBTR,AcDb::kForRead);
AcDbObjectId blkId;
es = pBTR->getAt(BlockId,blkId);
pBTR->close();
//将指定的块插入到一个新的数据库
AcDbDatabase *pNewDb = NULL;
es = pBackDb->wblock(pNewDb,blkId);
delete pBackDb;
//将新的数据库插入到当前数据库中形成一个新的块
AcDbObjectId newBlkId;
es = acdbCurDwg()->insert(newBlkId,BlockId,pNewDb,false);
delete pNewDb;
发表于 2005-2-21 13:24:00 | 显示全部楼层
把你 es = acdbHostApplicationServices()->workingDatabase()->insert (blockId, "myfile", pDwg,
Adesk::kFalse) ;
if ( es != Acad::eOk )
acutPrintf ("\n插入块错误.") ;
delete pDwg ; 换成上面的,你自己再检查一下
发表于 2005-2-22 15:33:00 | 显示全部楼层
你只是插入了块,还需要进行块引用 AcDbObjectId idBlock;
AcDbBlockReference* pBlock=new AcDbBlockReference;
pBlock->setPosition(ptCenter);
pBlock->setLayer(m_idLineLayer);
pBlock->setBlockTableRecord(idBlock);
pBlock->setScaleFactors(AcGeScale3d(m_dPlotScale));
idArray.append(CLjDwg::AddEntity(pBlock));
pBlock->close();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-26 08:41 , Processed in 0.166549 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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