几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(VB.NET/C#) (http://www.dimcax.com/hust/forumdisplay.php?f=176)
-   -   【转帖】『已解决』输出到dwf 已解决 - 精华帖集合 (http://www.dimcax.com/hust/showthread.php?t=14106)

yang686526 2009-04-29 05:12 PM

【转帖】『已解决』输出到dwf 已解决 - 精华帖集合
 
『已解决』输出到dwf 已解决 - 精华帖集合
www.dimcax.com
『已解决』输出到dwf 已解决
, , ,
嘿嘿,研究了两天这个东西终于搞定了,使用acpl打印dwf,过几天给出.net版本的
cplot::cplot(cstring strpath)
{
m_strdevice = _t("dwf6 eplot.pc3");
m_strpath = strpath;
m_ppsv= (acdbplotsettingsvalidator*)acdbhostapplicationservices()->plotsettingsvalidator();
// 取得当前layout
acdblayoutmanager *playoutmanager = acdbhostapplicationservices()->layoutmanager();
acdbobjectid btrid = playoutmanager->getactivelayoutbtrid();
acdbblocktablerecord *pbtr;
acad::errorstatus es=acdbopenobject(pbtr,btrid,acdb::kforread);
m_layoutid = pbtr->getlayoutid();
acdblayout *playout=null;
acdbopenobject(playout,m_layoutid,acdb::kforread);
#pragma warning (disable: 4800)
m_pplotsettings = new acdbplotsettings(playout->modeltype());
#pragma warning (default: 4800)
m_pplotsettings->copyfrom(playout);
playout->close();
pbtr->close();
}
cplot::~cplot()
{
delete m_pplotsettings;
}
void cplot::start()
{
acad::errorstatus es;

es = m_ppsv->setplottype(m_pplotsettings, acdbplotsettings::kextents);
//设置缩放比例
es = m_ppsv->setusestandardscale(m_pplotsettings, adesk::kfalse);
es = m_ppsv->setcustomprintscale(m_pplotsettings, 1, 1);
es = m_ppsv->setplotcentered(m_pplotsettings, true);
es = m_ppsv->setplotcfgname(m_pplotsettings,m_strdevice);
m_ppsv->refreshlists(m_pplotsettings);
acplplotengine* pengine = null;
if(acad::eok == acplplotfactory::createpublishengine(pengine))
{
// 打印进度对话框
acplplotprogressdialog *pplotprogdlg = acplcreateplotprogressdialog(acedgetacadframe()->m_hwnd,false,1);

pplotprogdlg->setplotmsgstring(acplplotprogressdialog::kdialogtitle,_t("lot api progress"));
pplotprogdlg->setplotmsgstring(acplplotprogressdialog::kcanceljobbtnmsg,_t("cancel job"));
pplotprogdlg->setplotmsgstring(acplplotprogressdialog::kcancelsheetbtnmsg,_t("cancel sheet"));
pplotprogdlg->setplotmsgstring(acplplotprogressdialog::ksheetsetprogresscaption,_t("job progress"));
pplotprogdlg->setplotmsgstring(acplplotprogressdialog::ksheetprogresscaption,_t("sheet progress"));

pplotprogdlg->setplotprogressrange(0,100);
pplotprogdlg->onbeginplot();
pplotprogdlg->setisvisible(true);

es = pengine->beginplot(pplotprogdlg);

acplplotpageinfo pageinfo;
acplplotinfo plotinfo;

// 设置布局
plotinfo.setlayout(m_layoutid);
// 重置参数
plotinfo.setoverridesettings(m_pplotsettings);
acplplotinfovalidator validator;
validator.setmediamatchingpolicy(acplplotinfovalidator::kmatchenabled);
es = validator.validate(plotinfo);
// 开始打印
const tchar *szdocname = acdocmanager->curdocument()->filename();
es = pengine->begindocument(plotinfo, szdocname, null, 1, true, m_strpath);
// 给打印机和进度对话框发送消息
pplotprogdlg->onbeginsheet();
pplotprogdlg->setsheetprogressrange(0, 100);
pplotprogdlg->setsheetprogresspos(0);
es = pengine->beginpage(pageinfo, plotinfo, true);
es = pengine->begingenerategraphics();
es = pengine->endgenerategraphics();
es = pengine->endpage();
pplotprogdlg->setsheetprogresspos(100);
pplotprogdlg->onendsheet();
pplotprogdlg->setplotprogresspos(100);
es = pengine->enddocument();
es = pengine->endplot();

pengine->destroy();
pengine = null;
pplotprogdlg->destroy();
}
else
{
acedalert(_t("打印失败!"));
}
}
复制代码
多谢
期待.net版本
关于这个帖的内容,请教cloudlove 版主
我新建了一个project,在我的代码内加入并改写了以上的代码。但在下面这一行
// 打印进度对话框
acplplotprogressdialog *pplotprogdlg = acplcreateplotprogressdialog(acedgetacadframe()->m_hwnd,false,1);
出现了下面的error,无法编译过去。
1>.\acrxentrypoint.cpp(122) : error c2227: left of '->m_hwnd' must point to class/struct/union/generic type
1> type is ''unknown-type''
1>.\acrxentrypoint.cpp(122) : error c3861: 'acedgetacadframe': identifier not found
我查了acedgetacadframe函数的用法,objectarx reference中也是一样的用法,不知道我少了什么?我试着把acedgetacadframe所属的头文件 rxmfcapi.h 加了进去,更多的error出来了。感谢任何
这个,好像是新建arx工程的时候需要选择支持mfc,然后就可以了
一点没错,我重建这个工程加上对mfc的支持就ok了! 多谢!
[ ]
请多指教!thx
还有一个问题请教,这些代码是把当前打开的dwg 文件plot成dwf文件,请问能够在不打开dwg文件的情况下plot成dwf 吗?多谢。
请多指教!thx
这个还真没有研究过,
我也查了一些资料,好像plot的api只是能把当前打开的文件的layout 打印成dwf文件。而realdwg则根本不支持plot.其实在我的project里面,先打开dwg文件然后再plot成dwf文件也不是不可以,但是在打开dwg文件的时候,经常会弹出一些对话框,例如缺少字体或者其他原因也会弹出对话框,我碰到有好几种对话框,当我们手动打开dwg文件的时候当然没有问题,手动一一选择就行了,但我的这个项目的任务是,在无人值守的情况下自动打开某个文件夹下的所有dwg文件然后生成dwf文件,这时如果用代码打开dwg文件也会弹出这类对话框,程序就停在那里进行不下去了!所以很是郁闷,还以为关键的功能已经在上面的代码的帮助下实现了,项目却在这个问题上进行不下去了!!!那请教对于这些对话框的问题,能有什么办法不让他们弹出来 或者 能够用程序对这些对话框进行处理,例如自动选择ok或cancel等button. 使得程序能够继续运行下去吗?
请多指教!thx
如果能直接修改pc3文件就好了,例如自定义纸张大小


所有的时间均为北京时间。 现在的时间是 01:55 AM.