Design Automation

梁晓冬

开发顾问,DevTech中国区经理

开发技术支持部(DevTech)
Autodesk Forge & ADN

内容

  • Design Automation简介
  • 回顾AutoCAD的AcCoreConsole
  • 申请开发KEY
  • API接口演示和练习
  • .NET 库以及演示
  • 练习和技术交流

引言 - 技术背景

Down arrow
Down arrow

Design Automation简介

  • 云端的自动化设计
  • 以前叫做< product >.I/O
  • 只需要参数,命令脚本,原图纸或图纸模板
  • 一种服务
    • 无需安装软件
    • 无需硬件投入和维护
  • 目前发布AutoCAD的Design Automation
  • 未来计划:Inventor,Revit,Fusion,Maya等

Design Automation - AutoCAD

  • 可加载 ‘CRX’ 插件,执行自定义命令
  • CRX,DBX ,.NET ,LISP
  • 最新数据:日处理量5万DWG
  • 最新数据:运行无故障时间, 过去的一年: 99.99%

Design Automation原理图

Down arrow

客户群

  • 不是最终该用户直接使用的
    • 为开发者而诞生
  • 不能交互式编辑DWG图纸
    • 交互编辑或查看DWG用AutoCAD 360 Web或Mobile版
  • 不是服务器
    • 没有所谓’安装‘

回顾AutoCAD的AcCoreConsole

  • AutoCAD 2013引入
  • 控制台 AutoCAD,无头CAD
  • DOS 命令行执行AutoCAD命令
    • 在图纸上运行一段脚本
    • 快速批处理DWG文件
  • 可加载’DBX’
  • 可加载 ‘CRX’ 插件,执行自定义命令
    • ObjectARX ,.NET ,LISP
  • 更多阅读

接口概览

  • OData协议规范(URL 和 payloads)
  • 主要术语,3个集合
    • WorkItem
    • Activity
    • AppPackage
  • 和客户端用什么语言无关,只要能发送 HTTP请求
  • Down arrow
  • 帮助入口

申请开发key

登陆http://developer.autodesk.com/

1. 创建一个APP

Down arrow

2. 选择APP服务为AutoCAD I/O

Down arrow

申请开发key

    3. 填写APP的基本信息

  • 必填APP名
  • 选填描述,回调URL和程序网站

Down arrow

PostMan Collection

https://www.getpostman.com/collections/1ad3ff309870f7242c9c

Down arrow

身份认证

  • OAuth2 token
  • 获取Token (2legged)
  • Down arrow

    Activity和WorkItem

    • Activity:具体脚本和参数,可以理解为一个功能函数
    • WorkItem:计划任务,提供参数。用来调用函数
    Down arrow Down arrow

    Activity

    • 定义输入输出参数
      • 满足 URL 的参数要求

    • 计划提供Activities库
      • 作为AutoCAD专业库

    • Activities可以是公开或私有
      • 可以分享Activities

    Activity

    • InputParameters: 需要的输入参数
    • OutputParameters: 输出参数
    • Instruction: 定义要执行的Script
    • Id: Action的名字
    • 创建Activity

    Activity

    Down arrow

    WorkItem

    • WorkItem需要
      • 关联某 ‘Activity’
      • 输入参数 (URLs)
      • 输出参数 (URLs)

    • 查看WorkItem状态:
      • 可用状态查询方式
      • 也可使用回调URL

    WorkItem

    • InputArguments: 需要的输入参数, 源DWG所在位置
    • OutputArguments: 输出参数,生成的结果存放位置
    • ActivityId: 需要使用哪个Activity
    • 不需要设定WorkItem的名字,系统自行分配
  • 创建WorkItem
  • WorkItem

    Down arrow

    WorkItem 返回值

    • Response.Status: 标示成功,或失败的代码
    • Response.OutputArguments.Resource: 结果文件地址,存放在IO租用的亚马逊服务器上
    • Response.StatusDetails.Report: 任务日志,查看具体错误的环节
    • Down arrow

    网盘存储访问方式

    • 直接url
      • 例如:http://forge-test.oss-cn-shanghai.aliyuncs.com/TestDemo1.dwg
      • 无安全访问控制
    • 签名url
      • 例如:https://xiaodongforgetest.s3-ap-southeast-1.amazonaws.com/resultxxx.pdf?AWSAccessKeyId=AKIAI5Z2P3BJNALZEA4A&Expires=1472056525&Signature=1jVpbxDCDcClqGz%2FoooflLYX3iQ%3D
      • 由网盘的key secret加密计算出上载或下载的url
    • 带header的url
      • 例如: Resource = "http://portalvhdsz7vs58j0h10tp.blob.core.windows.net/test/A-01.pdf?sv=2014-02-14&sr=c&sig=ngiVjMtuQNOWKRZtwosL4va3M7fgg9bt22e6FtH6gEo%3D&st=2015-05-15T07%3A00%3A00Z&se=2018-05-23T07%3A00%3A00Z&sp=rw", Headers = new System.Collections.ObjectModel.ObservableCollection
        () { new Header() { Name = "x-ms-blob-type", Value = "BlockBlob" } // This is required for Azure blob. }
      • 由网盘的key secret加密计算出上载或下载的url,并且配置HTTP Header添加控制选项

    网盘(以阿里云为例)

    Down arrow

    网盘(以阿里云为例)

      2. 开放存储服务OSS

    Down arrow

    网盘(以阿里云为例)

      3. 进入bucket testio

    Down arrow

    网盘(以阿里云为例)

      4. 上载文件>> 选取某DWG文件

      5. 获取地址

    Down arrow

    练习:导出PDF

    练习:创建Activity。 命令行设计脚本,提交WorkItem

    导出结果文件到其它云存储

    
     //设置输出参数
    wi.Arguments.OutputArguments.Add(new Argument()
    {
        //对应Activity哪个参数 
        Name = "Result",
        //非A360数据源
        StorageProvider = StorageProvider.Generic,
        //HTTP动作 - 将结果放到对应的云存储
        HttpVerb = HttpVerbType.PUT,
        //如果设置为null,则缺省放到Design Automation 存储空间里
        //Resource = null,
         Resource = "https://xiaodongforgetest.s3-ap-southeast-1.amazonaws.com/resultxxx.pdf?AWSAccessKeyId=AKIAI5Z2P3BJNALZEA4A&Expires=1472056525&Signature=1jVpbxDCDcClqGz%2FoooflLYX3iQ%3D",
    
    });
     

    外部引用

    • DWG 文件可以有外部参照 (dwg, 图片等.)
    • 客户端必须提供所有引用
      • 网络传输package
      • 输入参数提供内联 ‘File’ 对象 (JSON 字串描述URLs和其本地名)
      • 
        "Arguments": {
        "InputArguments": [
          {
            "Resource": 
                    {
                      "Resource":"..../Main.dwg",
                      "LocalFileName":"Main.dwg",
                      "RelatedFiles":[
                            {
                                "Resource":"...../xref.dwg",
                                "LocalFileName":"xref.dwg"
                                
                            }]
                    } ,
        								

    练习:提交WorkItem,外部引用

    背后发生了什么

    • Worker通过队列收取 WorkItem
    • 下载输入参数
      • HTTP GET
    • 运行AcCoreConsole.exe
    • 将结果上载到输出参数指定的存储
      • HTTP POST/PUT

    .NET库

    • NuGet >> OData
    • Down arrow
    Down arrow

    AppPackage

    • 可上载 .NET或C++ 程序
    • CRX 程序
    • DBX 程序
    • App 必须打包为Autoloader格式

    AppPackage过程样例下载

    • 1. 准备AutoCAD开发程序的bundle的zip包
    • 2. 得到上载到package的存储url: Design Automation在亚马逊服务器上的空间
    • 3. 将准备好的bundle的zip文件上载到package的存储url
    • 4. 创建Package
    • 5. 创建Activity和Package关联
    • 6. 创建WorkItem执行任务
    • Down arrow
    • 1. 准备AutoCAD开发程序的bundle的zip包
    • PackageContents.xml
    • LoadOnAutoCADStartup: 启动时加载
    • LoadOnCommandInvocation: 执行自定义命令时按需加载

    练习:提交package, 创建workitem

    多种导出内容

    
      //设置输出参数
    wi.Arguments.OutputArguments.Add(new Argument()
    {
        //对应Activity哪个参数 
        Name = "Result",
        //非A360数据源
        StorageProvider = StorageProvider.Generic,
        //HTTP动作 - 将结果放到对应的云存储
        HttpVerb = HttpVerbType.POST,
        //如果设置为null,则缺省放到Design Automation 存储空间里
        Resource = null
    
        //测试导出zip
        ,
        ResourceKind = ResourceKind.ZipPackage
    });
    				 

    练习:修改package, 导出多种参数,创建workitem

    多种方式输入参数

    
    //设置输入参数
        wi.Arguments.InputArguments.Add(new Argument()
        {
            //嵌入式参数
            Name = "EmbeddedParams",
            ResourceKind = ResourceKind.Embedded,
            //来源。      
            Resource = @"data:application/json, " + "{\"centerX\":100,\"centerY\":100,\"radius\":500}",
            //非A360数据源
            StorageProvider = StorageProvider.Generic
        });
        //设置输入参数
        wi.Arguments.InputArguments.Add(new Argument()
        {
            //外链参数
            Name = "LinkedParams",
            //来源    
            Resource = "http://forge-xd-generic-test.herokuapp.com/downloadDADrawing/LinkedParams.json",
            //非A360数据源
            StorageProvider = StorageProvider.Generic
        });
    				 

    练习:创建package, 构建多种输入参数,创建workitem

    综合例子演示

  • 抽屉定制设计
  • 标题栏签名
  • 拼图DWG生成器
  • 拼图DWG生成器升级版
  • Down arrow