“Create Drawing”对话框设置


我们在使用Mstn的Callout工具切图时弹出的“Create Drawing”对话框(如下图所示),包含了很多选项,我们通过程序实现自动出图时,Mstn SDK提供的接口并没有完全包含这些选项,那么我们该如何在程序中控制这些选项呢?如果您运行调试过Mstn SDK下关于出图接口的那个例子(C:\Program Files\Bentley\MicroStationCONNECTSDK\examples\DrawingComposition)的话,会发现出图时程序会被弹出的“Create Drawing”对话框中断。这样程序的使用者可以在弹出的“Create Drawing”对话框中来修改这些选项。但是对于批量出图程序而言,如果每出一张图就让用户交互地去修改这些选项,即使每张图地选项都一致,那么对于用户来说肯定是一种极其不友好的体验。通过今天给大家介绍的方法,就可以实现在程序中设定好这些选项,并且屏蔽掉“Create Drawing“对话框。

首先我们需要创建一个Mstn Addins的项目(创建过程请参考“一步步学习MicroStation CE Addin开发”),在项目中实现一个继承于接口Bentley.Interop.MicroStationDGN.IModalDialogEvents的Class,如下所示(注:其中BIM是命名空间Bentley.Interop.MicroStationDGN的缩小,需要在代码文件的头部加入声明:using BIM = Bentley.Interop.MicroStationDGN;):

class MyModalDialogEvents : Bentley.Interop.MicroStationDGN.IModalDialogEvents
    {
        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_ASSIGNSAVEDVIEWNAME MyView");
                DialogResult = BIM.MsdDialogBoxResult.OK;
            }
        }

        void BIM.IModalDialogEvents.OnDialogClosed(string DialogBoxName, BIM.MsdDialogBoxResult DialogResult)
        {
            Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.RemoveModalDialogEventsHandler(MyModalDialogEvents.Instance);
        }
    }

然后在入口类的成员函数Run中执行如下语句:

Bentley.MstnPlatformNET.InteropServices.Utilities.ComApp.AddModalDialogEventsHandler(MyModalDialogEvents.Instance);

执行以上语句以后,Mstn在弹出模态对话框时,会调用MyModalDialogEvents.Instance的成员函数OnDialogOpened和OnDialogClosed。我们在重写的OnDialogOpened函数中通过函数参数“DialogBoxName“来判断当前打开的是否是”Create Drawing“对话框,如果是的话,再通过发送keyin命令的方式修改了对话框中输入域“Name”的值为“MyView ”。那么如何获取模态对话框的名字呢?以及如何知道发送什么样的keyin命令来修改对话框中的选项呢?我们可以通过Mstn的录制宏(如下图所示)工具来获取这些信息。

“Create Drawing“对话框中其他选项的修改方式都可以通过这个方法查到。最后编译我们的项目,接下来我们在Mstn中测试一下我们的程序,首先启动Mstn打开任一dgn文件,启动“Place Section Callout”,在ToolSetting窗口修改“Drawing Seed”选项为“none“以外的选项即可,勾选”Create Drawing“复选框,如下图所示:

放置一个Section Callout ,之后会看到弹出的“Create Drawing“对话框,如下图所示:

单击“OK“按钮后,就完成了出图,会在当前文件中生成一个名为”Section“的SavedView,以及名为”Section“的Sheet Model,如下图所示:

加载我们的程序集。然后再次执行以上放置Section Callout的动作,会发现在放置Callout以后不再弹出“Create Drawing“对话框,而且生成的SavedView、Sheet Model的名字为”MySection“,如下图所示: