想仿照录制的宏实现自动匹配打印,能打开打印对话框,但是并不能完成打印,且设置也未生效。
录制的宏和仿写的代码如下:
BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp; ComApp.CadInputQueue.SendKeyin("PLACE FENCE ICON"); ComApp.CadInputQueue.SendKeyin("Point absolute 136884,2994"); ComApp.CadInputQueue.SendKeyin("Point absolute 196360,-39772");//增量 59476,-42066 ComApp.CadInputQueue.SendKeyin("DIALOG PLOT"); ComApp.CadInputQueue.SendKeyin("plotUI.uiPaperName = ISO A2"); ComApp.CadInputQueue.SendKeyin("打印缩放助手 Shown"); ComApp.CadInputQueue.SendKeyin("plotUI.uiScaleBox2Edit = 100"); ComApp.CadInputQueue.SendKeyin("打印缩放助手 Closed"); ComApp.CadInputQueue.SendKeyin("plotUI.uiColorMode = 0"); ComApp.CadInputQueue.SendKeyin("PRINT EXECUTE"); ComApp.CadInputQueue.SendKeyin("另存打印为 Shown"); ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd C:\\Users\\46054\\Desktop\\"); ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd 测试打印0524.pdf"); ComApp.CadInputQueue.SendKeyin("另存打印为 Closed"); ComApp.CadInputQueue.SendKeyin("PRINT EXIT PLOTDLG"); ComApp.CadInputQueue.SendKeyin("MDL UNLOAD PLOTDLG");
实际运行效果停在下面这个界面:
这个录制的并不都是直接的Keyin,比如Point absolute 136884,2994和plotUI.uiPaperName = ISO A2就不是。故不能都用SendKeyin来模拟。你可以打开这个宏后点击如下图所示的Promote将宏升级到VBA代码再来查看。VBA代码更接近于C# 代码。
根据VB的改了之后,能进行打印了,但是设置变化了却没有生效。就是在界面上,看见已经改成了黑白和a2,但是生成的文件没有按照设置的效果生成。而且是需要额外打开对话框的,如缩放和文件位置,这两个生效了,在打印本页面中的颜色和纸张匹配没生效。
static public void PrintTest() { BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp; KeyInDlgClass kic = new KeyInDlgClass(); ComApp.AddModalDialogEventsHandler(kic); ComApp.CadInputQueue.SendKeyin("PLACE FENCE ICON"); ComApp.CadInputQueue.SendKeyin("Point absolute 136884,2994"); ComApp.CadInputQueue.SendKeyin("Point absolute 196360,-39772");//增量 59476,-42066 ComApp.CadInputQueue.SendKeyin("DIALOG PLOT"); ComApp.SetCExpressionValue("plotUI.uiPaperName", "ISO A1", "PLOTDLG"); ComApp.SetCExpressionValue("plotUI.uiColorMode", "0", "PLOTDLG"); //Thread.Sleep(2000);//延迟也无用 ComApp.CadInputQueue.SendKeyin("PRINT EXECUTE"); ComApp.CadInputQueue.SendKeyin("PRINT EXIT PLOTDLG"); ComApp.CadInputQueue.SendKeyin("MDL UNLOAD PLOTDLG"); ComApp.RemoveModalDialogEventsHandler(kic); } class KeyInDlgClass : IModalDialogEvents { public void OnDialogOpened(string DialogBoxName, ref MsdDialogBoxResult DialogResult) { BIM.Application ComApp = Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp; if (DialogBoxName == "打印缩放助手") { ComApp.SetCExpressionValue("plotUI.uiScaleBox2Edit", "100", "PLOTDLG"); DialogResult = MsdDialogBoxResult.OK; } if (DialogBoxName == "另存打印为") { ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setDirectoryCmd C:\\Users\\46054\\Desktop\\"); ComApp.CadInputQueue.SendKeyin("MDL COMMAND MGDSHOOK,fileList_setFileNameCmd 测试打印0525.pdf"); DialogResult = MsdDialogBoxResult.OK; } } }
测试还发现一个奇怪的效果,运行代码:
ComApp.SetCExpressionValue("plotUI.uiPaperName", "ISO A2", "PLOTDLG"); ComApp.SetCExpressionValue("plotUI.uiColorMode", "0", "PLOTDLG");
左侧图是手动设置颜色和纸张之后的效果,右侧图是代码改过后的面板效果:
其实您的所有需求都可以通过键入命令Print来实现,而不必严格去模拟录制的动作。因为录制的动作还涉及到了对话框操作,有些结果未能及时得到更新。
比如,设置打印颜色为单色可以用:Print ColorMode Monochrome
设置打印纸张可用:Print PaperName ISO A2
这些命令的查找可用Key-in本身的浏览功能如下:
MS学习资源:
MicroStation Wednesday视频分享
深入探讨MicroStation DGN基本概念系列
一步步学习MicroStation CE Addin开发
一步步学习MicroStation CE MDL开发
Answer Verified By: 徐 明卉
用键入命令,设置能生效了。但是昨天还能查看到print下面的命令,今天打开OPM就查不到了,输入print后效果如下,请问下有可能是什么问题?
您先手工操作随便print一张图纸以后,这些命令就可以用了。