参考了这个教程“Create Drawing”对话框设置 - 技术资料库 - Bentley 中国优先社区 - Bentley Communities
想不打开 Create Drawing 快速生成剖面图,录制的宏和VBA代码如下:
C#中用Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin调用keyin命令
public static MyModalDialogEvents Instance = new MyModalDialogEvents(); void BIM.IModalDialogEvents.OnDialogOpened(string DialogBoxName, ref BIM.MsdDialogBoxResult DialogResult) { if (DialogBoxName == "Create Drawing") { Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_COINCIDENTSHEET_OFF"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_ASSIGNSAVEDVIEWNAME 圆形井剖面" ); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_SET_DRAWINGBOUNDARY 1"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_COINCIDENTSHEET_OFF"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_SET_DISCIPLINE 建筑"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_SET_PURPOSE 剖面"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND DRAWCOMP_VISIBLEEDGES 1"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND DRAWCOMP_VISIBLEEDGES 1"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_ADDSHEETTOSHEETINDEX_OFF"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_COINCIDENTSHEET_OFF"); Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.CadInputQueue.SendKeyin("MDL COMMAND CREATEDRAWING_OPENMODEL_ON"); //DialogResult = BIM.MsdDialogBoxResult.OK; } }
其中MDL COMMAND CREATEDRAWING_SET_DRAWINGBOUNDARY 1,是选择drawing boundary的,默认情况是 new,想选择为第二个选项,如下图
执行代码后,发现对话框上的Name成功更改了,但是drawing boundary没有按照代码的设置,想问以下有什么办法能够将Drawing Boundary 或者其他的选项也通过代码设置成自己想要的内容呢?
您在C#中去修改这些选项时,换一种方式发送keyin命令,通过PInvoke调用C函数mdlInput_sendKeyin去发送,在某个类中如下声明这个函数:
[DllImport("ustation.dll", CharSet = CharSet.Unicode)] public static extern void mdlInput_sendKeyin(string stringP, bool literal, int position, string taskIdP);
然后在模态对话框那个监听函数里边这样发送:
mdlInput_sendKeyin("MDL COMMAND CREATEDRAWING_SET_DRAWINGBOUNDARY 1", false, 0, "");
Answer Verified By: Spartan117 梁
郭老师,我的代码结构如下:在按钮方法下写入监听函数,通过keyin设置剖面的基本参数,最后打开了Create Drawing 对话框
我在监听函数的类里面,引入了你说的mdlInput_sendKeyin,并做了图名、drawing boundary、add sheet to index 三个设置的测试
结果是图名一定成功,drawing boundary一直失败,add sheet to index 第一次失败,后面成功了
不知您那儿的效果是怎么样的?是不是论坛提供的方法仅对input有效果,对combox,check box 要采取其他方法呢?
会不会和软件的版本有关系呢,我用的是 OBD CE Update7
郭老师,好像和命令的顺序有一定的关系。我研究了一下,发现如果加上下面两个check box先执行的话,对应的区域下面的命令也可以执行了
我猜想可能是因为,只有选中了这两个check box,才能继续下面的选项的设置(虽然默认这两个check box 是选中的),具体原理老师有空可以研究一下
按照同样的思路,试了一下
我这里测试即使不设置这两个checkbox的值,后边其他的设置也都是有效果的,我是在Mstn上测试的,版本是:10.17.02.61,您可以在Mstn测试一下看看。
请教一下这个position 具体是干什么的呢,我把代码里面改成 0,1,2,3,4也能执行没影响