我想写一个功能,需要像cell Library预览窗口一样的窗口,请问如何实现?
您可以看一下这几篇博文:mp.weixin.qq.com/.../homepage
Answer Verified By: aoteman
测试了 还是没哟找到实时显示的技巧,符老师说原作者会更新,谢谢郭老师
你说的这个界面底层是用C++写的,调用mdlElmdscr_displayToWindows。这个Windows是用MDL中的.r资源定义的。不存在不能及时刷新的问题。
不是的符老师,我是按照博文
https://mp.weixin.qq.com/s?__biz=MzU2NTc2MDk3Ng==&mid=2247483682&idx=1&sn=15d8a601873fc24e5f007cb39a6976a8&scene=19#wechat_redirect
中做的
在
//注意此处另名的引用方式 extern alias DDUI; //................. //其它代码不显示,仅提供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 { //构造PreviewControl,注意此处DDUI的使用 DDUI.Bentley.DgnPlatform.PreviewControl pc = new DDUI.Bentley.DgnPlatform.PreviewControl((DDUI.Bentley.DgnPlatform.DgnModel*)modelPtr.ToPointer()); this.elementHost1.Child = pc; pc.FitToView(); pc.Rotate(DDUI.Bentley.DgnPlatform.RotationMode.Isometric); pc.SetRenderMode(DDUI.Bentley.DgnPlatform.RenderMode.Solid); pc.ShowPreview(showElements); pc.Refresh(); } } catch (System.Exception ex) { MessageBox.Show(ex.Message + ":" + ex.StackTrace); } }
无法实时预览,点一下才能出来
是的。这是C# 代码的问题。我说的是用C++的mdlElmdscr_displayToWindow去显示就不会有这个问题。其实C# 中也还有变通的方法能克服这个问题。比如,先生成一个图片,然后以图片放到WinForm中。但原作者提供的这个方法更灵活一些。我刚才和原作者联系了,他最近比较忙,会在本周末修改他的文章。
谢谢 符老师了。C++对我来说难度有点大 ,真的很谢谢您
符老师 文章嘛时候能更新呢
抱歉,不是我写的文章,我只能是催促一下原作者。这个控件是未公开的一个控件,确实没有太多资料可查询。你如果不需要哪种能灵活控制的预览控件的话,仅仅是像Cell Lib中那样显示一个静态的图像预览,我们是有现成的方法的。