![]() |
【转帖】『已解决』输出到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. |