【MSCE C#】cell Library的预览窗口是如何实现的呢?

我想写一个功能,需要像cell Library预览窗口一样的窗口,请问如何实现?

Parents Reply Children
  • 可以添加PreviewControl控件的Loaded事件处理函数,在事件处理函数中去更新,如下所示:

    private void Pc_Loaded(object sender, System.Windows.RoutedEventArgs e)
            {
                DDUI.Bentley.DgnPlatform.PreviewControl pc = sender as DDUI.Bentley.DgnPlatform.PreviewControl;
                if(null!=pc)
                {
                    pc.FitToView();
                    pc.Rotate(DDUI.Bentley.DgnPlatform.RotationMode.Isometric);
                    pc.SetRenderMode(DDUI.Bentley.DgnPlatform.RenderMode.WireFrame);
                }
            }

  • 我在博客的代码案例中修改后发现,如图问题,pc为空了.好尴尬Joy

    这个loaded事件是在哪里加呢,我没有领会到原理,EventArgs转化为RoutedEventArgs也报错了。

    我已经研究好久了JoySweat smile,有点尴尬了,我自己水平搞不定唉。

    老师您能否直接给我一个能运行的小案例呢?就差最后一点了。谢谢老师了。

     //其它代码不显示,仅提供Button的Click事件代码便于读者理解基本使用
            private void ShowCurrentModelBtn_Click(object sender, EventArgs e)
            {
                //获取当前DgnModel
                DgnModel dgnmodel = Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel();
    
                try
                {
                    //构造元素集
                    ElementAgenda showElements = new ElementAgenda();
                    //元素集来源为选择
                    showElements.Source = ModifyElementSource.Selected;
                    //获取当前DgnModel所有图形元素
                    ModelElementsCollection elements = dgnmodel.GetGraphicElements();
                    //遍历所有图形元素
                    IEnumerator<Element> allelement = elements.GetEnumerator();
                    while (allelement.MoveNext())
                    {
                        showElements.Insert(allelement.Current, false);
                    }
                    //获取当前DgnModel的IntPtr
                    IntPtr modelPtr = dgnmodel.GetNative();
                    unsafe
                    {
                        DDUI.Bentley.DgnPlatform.PreviewControlOptions options = new DDUI.Bentley.DgnPlatform.PreviewControlOptions();
                        options.IsFitToolVisible = true;
                        options.IsPanToolVisible = true;
                        options.IsViewingToolsVisible = true;
                        options.IsZoomToolsVisible = true;
                        options.IsRotationToolVisible = true;
    
    
                        DDUI.Bentley.DgnPlatform.PreviewControl pc = sender as DDUI.Bentley.DgnPlatform.PreviewControl;
                        if (null != pc)
                        {
                            pc.FitToView();
                            pc.Rotate(DDUI.Bentley.DgnPlatform.RotationMode.Isometric);
                            pc.SetRenderMode(DDUI.Bentley.DgnPlatform.RenderMode.WireFrame);
                        }
    
                    }
                }
                catch (System.Exception ex)
                {
                    //MessageBox.Show(ex.Message + ":" + ex.StackTrace);
                }
            }      

    郭老师,有没有能运行的小项目案例呢?