找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 561|回复: 10

[ARX程序]:如何读入一个.dwg文件并显示出来

[复制链接]
发表于 2003-7-30 16:19:50 | 显示全部楼层 |阅读模式

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

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

×
在vc++开发objectarx:如何读入一个.dwg文件并显示出来?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-7-30 16:40:38 | 显示全部楼层

Re: [ARX程序]:如何读入一个.dwg文件并显示出来

最初由 lidexiang 发布
[B]在vc++开发objectarx:如何读入一个.dwg文件并显示出来?谢谢! [/B]


你的意思是要从硬盘上读一个DWG文件, 然后显示到ACAD里面吗?

如果是, 读入,存盘这些操作都是对数据库操作,因此,就是AcDbDatabase 类对象的操作, 你查看下联机帮助, 关键字输入AcDbDatabase 可以找到这个类下的所有方法.


你需要实例一个AcDbDatabase对象

AcDbDatabase *pDb=new AcDbDatabase(AcDb::kTrue); 具体参数你可以看看帮助,FALSE和TRUE的不同.

读入DWG到数据库, 用 pDb->readDwg(...);

你在联机帮助里面可以搜索到相关的例子代码.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-30 16:59:42 | 显示全部楼层
我是第一种意思,硬盘上读一个DWG文件, 然后显示到ACAD里面.而不是不打开.dwg文件而读取.dwg文件的信息到数据库里去.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2003-7-30 17:43:05 | 显示全部楼层
最初由 lidexiang 发布
[B]我是第一种意思,硬盘上读一个DWG文件, 然后显示到ACAD里面.而不是不打开.dwg文件而读取.dwg文件的信息到数据库里去. [/B]


一样的,显示进去,就是读到数据库里面了。你按照上面的思路做吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-30 18:17:28 | 显示全部楼层
AcDbDatabase *pDb = new AcDbDatabase(Adesk::kFalse);

    // The AcDbDatabase::readDwgFile() function
    // automatically appends a DWG extension if it is not
    // specified in the filename parameter.
    //
        if(pDb->readDwgFile("A1.dwg",_SH_DENYRW)!=Acad::eOk)
        {
                acutPrintf("\nCan not open the A1.dwg file,exit the program!");
                return;
        }   

    // Open the model space block table record.
    //
       
    AcDbBlockTable *pBlkTbl;
    pDb->getSymbolTable(pBlkTbl, AcDb::kForRead);

    AcDbBlockTableRecord *pBlkTblRcd;
    pBlkTbl->getAt(ACDB_MODEL_SPACE, pBlkTblRcd,
        AcDb::kForRead);
   
    pBlkTblRcd->close();
    pBlkTbl->close();
    delete pDb;

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

使用道具 举报

已领礼包: 1个

财富等级: 恭喜发财

发表于 2003-7-30 23:54:22 | 显示全部楼层
AcDbDatabase* pCurDb;
        AcDbDatabase* pDb = new AcDbDatabase(Adesk::kFalse);
        pDb->readDwgFile("C:\\aaa.dwg");
        pCurDb = acdbHostApplicationServices()->workingDatabase();
       
        if(pCurDb->insert(AcGeMatrix3d::kIdentity,pDb) != Acad::eOk)
        {
                delete pDb;
                return FALSE;
        }

        delete pDb;
        return TRUE;
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-31 09:24:14 | 显示全部楼层
谢谢stoneball的回答!我的问题解决了!不过我想问问关于路径的问题。就如pDb->readDwgFile(globalState.strWuPisPath + "\\Temp\\CheckOut.dwg");中globalState.strWuPisPath 是怎么用的?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-7-31 09:30:09 | 显示全部楼层
最初由 lidexiang 发布
[B]谢谢stoneball的回答!我的问题解决了!不过我想问问关于路径的问题。就如pDb->readDwgFile(globalState.strWuPisPath + "\\Temp\\CheckOut.dwg");中globalState.strWuPisPath 是怎么用的? [/B]


能不能将你的代码发到论坛上来给大家分析一下!!
谢谢!!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-7-31 09:37:15 | 显示全部楼层
///////////////////////////////////////
//简单的读取DWG文件的function
//没有容错处理code
//////////////////////////////////////
void readDwgFile()
{
        AcDbDatabase* pCurDb;
        AcDbDatabase* pDb = new AcDbDatabase(Adesk::kFalse);
        pDb->readDwgFile("A1.dwg",_SH_DENYRW);
        pCurDb = acdbHostApplicationServices()->workingDatabase();

        if(pCurDb->insert(AcGeMatrix3d::kIdentity,pDb) != Acad::eOk)
        {
        delete pDb;
        }

        delete pDb;
}


//没有办法了,我都说了,不好意传上来!:(
//我现在还在step1 to setp 7 呢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-1 15:40:15 | 显示全部楼层
最初由 HillMan 发布
[B][QUOTE]最初由 lidexiang 发布
[B]谢谢stoneball的回答!我的问题解决了!不过我想问问关于路径的问题。就如pDb->readDwgFile(globalState.strWuPisPath + "\\Temp\\CheckOut.dwg");中globalState.strWuPisP... [/B]

你对pdb这个指针delete了两次?!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2003-8-1 16:04:13 | 显示全部楼层
回复 chxmhsd  :
对于 第6帖

if(pCurDb->insert(AcGeMatrix3d::kIdentity,pDb) != Acad::eOk)
{
delete pDb;
return FALSE; (在这里就已经返回了)
}

delete pDb;
return TRUE;

是不会造成对pdb这个指针delete了两次。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 02:36 , Processed in 0.432459 second(s), 52 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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