前段时间项目须要展现一个dwf格式的建模文件,并能动态改变模型个部件的隐藏和显示。网上找了半天没有相关资料,可是有一个api文档,照了研究了半天,算是会用了点皮毛。总结的有点乱,你们闲乱的话能够看他的文档,我参考的是Autodesk design Review 2013 API Reference这个文档,网上搜一下,仍是好找的。
express
前提是先安装了Autodesk design Review,而后在文档中找到c#相关的,提示要导入一下,引用:canvas
截图大小限制 仍是上代码吧:c#
AdCommon 1.0 Type Libraryapi
DwfComposer EPlot Common 1.0 Type Library工具
DwfComposer EPlot Core 1.0 Type Librarythis
DwfComposer EPlot Model 1.0 Type Librarycode
DwfComposer EPlot Renderer 1.0 Type Libraryorm
DwfComposer EPlot Viewer 1.0 Type Library对象
ECompositeViewer 1.0 Type Libraryci
添加上如上引用,我没有找到第二个,但找到了DwfComposer Common 1.0 Type Library,就引入了这个代替。
目前工具箱中可能看不到相关的工具,在工具类最下面的常规中,鼠标右键,点击选择项,在com组件中选择Autodesk DWF Viewer Control这项
选择后再工具箱中就能够看到新的控件了,以下:
将这个控件拖入到form窗体中便可使用,不过要注意的是使用这个控件会很卡,不要用鼠标过多操做他,常常会卡死,也不要看这个控件的属性,也会卡死,具体缘由我不知道,但愿有知道的朋友给解惑一下。接下来就是代码了:
//应该是表明在画布canvas中的一个dwf文件对象吧 //api描述:An object expression that represents the DWF currently loaded within the canvas private ECompositeViewer.IAdECompositeViewer CompositeViewer; //api中是这样描述的An object expression that represents a specific section (page) within a DWF file private ECompositeViewer.IAdSection Section; private ECompositeViewer.IAdContent ObjectContent; private AdCommon.IAdCollection MyObjects, MyObjectProperties, TempObjectProperties; private AdCommon.IAdUserCollection MyObjectsNamedCollection;
具体表明了什么我也不是很清楚,仿照api来调用的,你们能够在使用的使用领悟琢磨吧。
以下代码,比较零碎,实现了我目前知道的几个主要功能(使用的时候必定要注意安装步骤声明出各个变量)。
CompositeViewer = (ECompositeViewer.IAdECompositeViewer)axCExpressViewerControl1.ECompositeViewer; this.axCExpressViewerControl1.SourcePath = "11C.dwfx"; Section = (ECompositeViewer.IAdSection)CompositeViewer.Section; ObjectContent = (ECompositeViewer.IAdContent)Section.Content; MyObjectsNamedCollection = (AdCommon.IAdUserCollection)ObjectContent.CreateUserCollection(); //Get all the objects in the currentsection MyObjects = (AdCommon.IAdCollection)ObjectContent.get_Objects(0);//获取全部的对象集合
MyObjects = (AdCommon.IAdCollection)ObjectContent.get_Objects(1);//是获取当前选中的对象集合。
this.axCExpressViewerControl1.SourcePath = "11C.dwfx";//这个是设置显示的dwf文件的路径, //axCExpressViewerControl1是以前咱们添加的控件的名字
//一下代码是得到全部有标高属性而且标高值为7的对象的集合,将其设置为被选择的,而后将其所以,若再次执行一次HIDE就是显示, 根据现有状态交替变换。 foreach (ECompositeViewer.IAdObject MyObject in MyObjects) { MyObjectProperties = (AdCommon.IAdCollection)MyObject.Properties; foreach (AdCommon.IAdProperty MyObjectProperty in MyObjectProperties) { if ((MyObjectProperty.Name == "标高") && (MyObjectProperty.Value == "7")) { ObjectName = MyObjectProperty.Name + " " + Idx++; //Add the named object to a selection set MyObjectsNamedCollection.AddNamedItem(MyObject, ObjectName); } } } ObjectContent.set_Objects(1, MyObjectsNamedCollection); AdCommon.IAdCollection Commands = (AdCommon.IAdCollection)CompositeViewer.Commands; Idx = 1; foreach (ECompositeViewer.IAdCommand Command in Commands) { if (Commands.get_ItemName(Idx++) == "HIDE") { Command.Enabled = true; } } CompositeViewer.ExecuteCommand("HIDE"); MyObjectsNamedCollection.Flush(); ObjectContent.set_Objects(1, MyObjectsNamedCollection);
以上就是我目前知道的和项目中主要用到的功能,可是我总体运行下来感受卡的要命,不知道有没有朋友有好的建议改善或者能代替的。