找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 815|回复: 5

[求助]:请教打开dwg文件的方法

[复制链接]
发表于 2005-11-30 20:50:30 | 显示全部楼层 |阅读模式

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

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

×
在多文档模式下,想应用一下代码实现复制一个dwg文档,然后保存,再将保存后的dwg文档打开读取到AutoCAD中,代码如下:

                        AcDbDatabase *pDb = new AcDbDatabase (Adesk::kFalse);
                        Acad::ErrorStatus es = pDb->readDwgFile ( (LPTSTR)(LPCTSTR)fileName);
                        if (es != Acad::eOk)
                        {
                                AfxMessageBox(CString("无法打开 \"") + fileName+ "\"");
                                pDb = acdbHostApplicationServices()->workingDatabase();
                                return;
                        }
                        pDb->saveAs((LPTSTR)(LPCTSTR)sPathName);
                        es = acDocManager->appContextOpenDocument((LPTSTR)(LPCTSTR)sPathName);
                        delete pDb;

但es = acDocManager->appContextOpenDocument((LPTSTR)(LPCTSTR)sPathName);这行代码返回es值为:eNotApplicable

请教该如何解决?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-12-1 16:29:01 | 显示全部楼层
这个问题我也遇到过,返回eNotApplicable是因为:执行这个函数的时候,当前框架内已经没有一个激活的DWG文件了,具体如何解决,你可针对这个原因想办法
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-1 16:56:49 | 显示全部楼层
我现在是采用单文档模式,这样比较方便,多文档是一定要解决,那要到以后有时间的时候
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-2 09:02:31 | 显示全部楼层
后来我用下面办法实现了多文档界面情况下通过模态对话框调用函数,打开已存在文档:
void OpenDocHelper(void * pData)
{
        AcApDocument* pDoc = acDocManager->curDocument();
        Acad::ErrorStatus es;
        if (acDocManager->isApplicationContext())
        {
                es = acDocManager->appContextOpenDocument((const char *)pData);
        }
        else
        {
                acutPrintf("\nERROR: in Document context : %s\n",pDoc->fileName());
        }
}

void OpenDWG(void *pData)
{
        acDocManager->executeInApplicationContext(OpenDocHelper, (void *)pData);
}

调用代码:
                        AcDbDatabase *pDb = new AcDbDatabase (Adesk::kFalse);
                        Acad::ErrorStatus es = pDb->readDwgFile ( (LPTSTR)(LPCTSTR)theModel );
                        if (es != Acad::eOk)
                        {
                                AfxMessageBox(CString("无法打开 \"") + theModel + "\"");
                                pDb = acdbHostApplicationServices()->workingDatabase();
                                return;
                        }
                        pDb->saveAs((LPTSTR)(LPCTSTR)sPathName);
                        //es = acDocManager->appContextOpenDocument((LPTSTR)(LPCTSTR)sPathName);
                        OpenDWG((LPTSTR)(LPCTSTR)sPathName);
                        delete pDb;

虽然成功了,但对于上面acDocManager->executeInApplicationContext(OpenDocHelper, (void *)pData);理解还不是很透?
是不是可以理解为获得一个激活的dwg文件?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-12-3 00:18:15 | 显示全部楼层
对于文档的问题,大家可以看ObjectARX 2002\samples\docman这个例子,
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-4 23:24:10 | 显示全部楼层
嗯,这个例子很不错,满详细的,受益颇多。
但是这个对话框不是模态的,还是有些功能区别,比如关闭对话框的时候会出问题。
不知道还有没其他实例?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-29 07:25 , Processed in 0.296264 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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