c# 使用Autodesk design Review API

前段时间项目需要展示一个dwf格式的建模文件,并能动态改变模型个部件的隐藏和显示。网上找了半天没有相关资料,但是有一个api文档,照了研究了半天,算是会用了点皮毛。总结的有点乱,大家闲乱的话可以看他的文档,我参考的是Autodesk design Review 2013 API  Reference这个文档,网上搜一下,还是好找的。

前提是先安装了Autodesk design Review,然后在文档中找到c#相关的,提示要导入一下,引用:

140236_WITJ_170467.jpg

截图大小限制 还是上代码吧:

AdCommon 1.0 Type Library

DwfComposer EPlot Common 1.0 Type Library

DwfComposer EPlot Core 1.0 Type Library

DwfComposer EPlot Model 1.0 Type Library

DwfComposer EPlot Renderer 1.0 Type Library

DwfComposer EPlot Viewer 1.0 Type Library

ECompositeViewer 1.0 Type Library

添加上如上引用,我没有找到第二个,但找到了DwfComposer Common 1.0 Type Library,就引入了这个代替。


目前工具箱中可能看不到相关的工具,在工具类最下面的常规中,鼠标右键,点击选择项,在com组件中选择Autodesk DWF Viewer Control这项

141806_99Sz_170467.png

选择后再工具箱中就可以看到新的控件了,如下:

142039_VgnA_170467.png

将这个控件拖入到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);

以上就是我目前知道的和项目中主要用到的功能,但是我整体运行下来感觉卡的要命,不知道有没有朋友有好的建议改善或者能代替的。

转载于:https://my.oschina.net/u/170467/blog/608358

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值