Learn Forge 系列:Forge 云端自动化设计服务 - 插件部分

Forge Viewer已经是耳熟能详的行业技术,也是不少朋友关注Forge的缘由,一些朋友经常把Forge 等同于Forge Viewer。其实Forge做为服务体系,涵盖了多个类别的服务,Forge Viewer只是其中一个类别,使用CAD数据的某个方式而已。html

今天,咱们简要介绍Forge的另一个类别:云端自动化设计服务。Forge在云端提供多个设计软件引擎:AutoCAD, Revit, Inventor, 3DMax。用户无需再安装设计软件,即可以在云端进行数据(或模型)的建立,或是模型数据的修改,或是数据的提取等。您原有的插件(或脚本)业务功能仍旧如往常同样执行。经过它,能够更大自由的操做模型和数据处理,更灵活的系統整合和集成。git

其实,早在三年前,Forge就发布了初版的AutoCAD云端自动化设计服务,客户基于此服务,建立了不少应用,例如自动参数化建立模型,自动出图,在线图纸审核,数字签章,图纸数据集成等。而今年1月,Forge正式推出了Revit, Inventor, 3DMax三个重量级设计软件的自动化服务。借此,您就能够直接在云端执行AutoCAD, Revit, Inventor, 3DMax的插件了!github

云端自动化设计服务原理很简单,您的app提交任务请求,Forge从您任务设置的数据中下载到原始模型(或模板,或其它辅助数据),进而启动对应设计软件的沙箱环境,在此环境中,执行您上载好的插件或脚本,当任务成功结束后,Forge将把更新后的模型,或建立的数据发送到您app指定的云存储。json

图片描述

请参阅咱们同事吴忠作的入门讲解: https://v.youku.com/v_show/id...segmentfault

咱们团队还建立了一个向导式教程,演示如何一步步的搭建出网络应用。此应用能让客户提供原始模型,经过网页输入的参数,修改其中某个实体的尺寸,最后提供更新后的模型。此教程是 Learn Forge tutorial - 向导式Forge进阶教程的一个内容。
http://learnforge.autodesk.io...服务器

图片描述

向导自己已经写得很详细,按照步骤操做便可。今天主要提示一下执行这个样例须要注意的内容,以及执行样例会是什么样的情景。网络

  1. 下载教程提供的完整源码工程,目前只有NET Core版本。您也能够根据云端自动化设计服务*的端口规范用其它语言写服务器端过程
    https://github.com/Autodesk-F...
  2. 打开工程designautomation.sln,注意须要网络应用forgesample 须要NER Core2.1,插件须要Framework 4.7 以上的环境
    此工程包含AutoCAD, Revit, Inventor, 3DMax的插件样例,展现若是要使用云端自动化设计服务*,插件的结构应该是什么样的。能够卸载掉其其它 产品,只保留Revit插件UpdateRVTParam
    图片描述
  3. 经过NuGet安装好两个引用:DesignAutomationBridgeNewtonsoft.Json. 编译看看有无错误。
  4. 简单讲一下插件结构:app

    4.1) Revit插件须要从IExternalDBApplication继承,并实现OnStartup等虚函数。在云端引擎环境启动后,自动导引进入加载可用插件,执行OnStartup, 在OnStartup委托引擎环境准备就绪的事件。在此事件中,最终执行插件的自定义的操做。函数

    namespace Autodesk.Forge.Sample.DesignAutomation.Revit
    {
        //插件基本属性仍和普通本地插件相似
        [Transaction(TransactionMode.Manual)]
        [Regeneration(RegenerationOption.Manual)]
    
        //Design Automation的插件必须从 IExternalDBApplication 继承
        public class Commands : IExternalDBApplication
        {
            //更新后的导出文件名
            string OUTPUT_FILE = "OutputFile.rvt";
    
            //必须实现的虚函数,云端引擎启动后,加载此插件后,会自动导入到OnStartup,并传入云端Revit的Application句柄
            public ExternalDBApplicationResult OnStartup(ControlledApplication application)
            {
                //在此委托引擎环境准备就绪的事件
                DesignAutomationBridge.DesignAutomationReadyEvent += HandleDesignAutomationReadyEvent;
                return ExternalDBApplicationResult.Succeeded;
            }
    
            //必须实现的虚函数, 引擎环境准备就绪, DesignAutomationReadyEventArgs提供原始Revit文档的句柄
            private void HandleDesignAutomationReadyEvent(object sender, DesignAutomationReadyEventArgs e)
            {
                LogTrace("Design Automation Ready event triggered...");
                e.Succeeded = true;
    
                //在此开始执行插件的自定义的操做
                EditWindowParametersMethod(e.DesignAutomationData.RevitDoc);
            }
    
            //必须实现的虚函数, 当任务结束,引擎开始终止
            public ExternalDBApplicationResult OnShutdown(ControlledApplication application)
            {
                return ExternalDBApplicationResult.Succeeded;
            }
            //......

    4.2) 因为本例会根据参数来修改墙体的尺寸,还要提供参数文件,默认从执行路径下拿到,在云端执行的时候也是相似。spa

    private void EditWindowParametersMethod(Document doc)
            {
                //若是有额外的参数文件,Design Automation在任务启动初期,下载到执行路径之中,经过相对路径获取文件内容
                InputParams inputParameters = JsonConvert.DeserializeObject<InputParams>(File.ReadAllText("params.json"));
    
                //插件的自定义的操做,是修改全部墙的高和宽,和普通插件的执行相似
    
                using (Transaction trans = new Transaction(doc))
                {
                    //....
                    //....
                    trans.Commit();
                }
    
                //将修改后的模型保存,若是和原始文件同名,则加上OverwriteExistingFile标记
                ModelPath ProjectModelPath = ModelPathUtils.ConvertUserVisiblePathToModelPath(OUTPUT_FILE);
                SaveAsOptions SAO = new SaveAsOptions();
                SAO.OverwriteExistingFile = true;
    
                //保存文件
                LogTrace("Saving file...");
                doc.SaveAs(ProjectModelPath, SAO);
            }

    4.3) *.addin 文件的定义和普通插件主要不一样是类型,必须是 DBApplication

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <RevitAddIns>
      <AddIn Type="DBApplication">
        <Name>Modify Window Parameters</Name>
        <FullClassName>Autodesk.Forge.Sample.DesignAutomation.Revit.Commands</FullClassName>
        <Text>Revit for Design Automation</Text>
        <Description>Revit for Design Automation</Description>
        <VisibilityMode>AlwaysVisible</VisibilityMode>
        <Assembly>.\UpdateRVTParam.dll</Assembly>
        <AddInId>000BD853-36E4-461f-9171-C5ACEDA4E723</AddInId>
        <VendorId>ADSK</VendorId>
        <VendorDescription>Autodesk, Inc, www.autodesk.com</VendorDescription>
      </AddIn>
    </RevitAddIns>

    4.4) 本例中,提供了完整的插件包结构,包括PackageContents.xml, *.addin 文件。另外,当工程编译后,会自动将此插件包压缩,并放置到网络应用 forgesample路径之下,供给forgesample执行的时候之用。

    图片描述

    图片描述

下一篇文章,咱们将讲解网络应用forgesample的内容。

相关文章
相关标签/搜索