Design Automation
梁晓冬
开发顾问,DevTech中国区经理
开发技术支持部(DevTech)
Autodesk Forge & ADN
内容
- Design Automation简介
- 回顾AutoCAD的AcCoreConsole
- 申请开发KEY
- API接口演示和练习
- .NET 库以及演示
- 练习和技术交流
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原理图
客户群
- 不是最终该用户直接使用的
- 不能交互式编辑DWG图纸
- 交互编辑或查看DWG用AutoCAD 360 Web或Mobile版
- 不是服务器
回顾AutoCAD的AcCoreConsole
- AutoCAD 2013引入
- 控制台 AutoCAD,无头CAD
- DOS 命令行执行AutoCAD命令
- 可加载’DBX’
- 可加载 ‘CRX’ 插件,执行自定义命令
- 更多阅读
接口概览
- OData协议规范(URL 和 payloads)
- 主要术语,3个集合
- WorkItem
- Activity
- AppPackage
- 和客户端用什么语言无关,只要能发送 HTTP请求
- 帮助入口
申请开发key
3. 填写APP的基本信息
- 必填APP名
- 选填描述,回调URL和程序网站
Activity和WorkItem
- Activity:具体脚本和参数,可以理解为一个功能函数
- WorkItem:计划任务,提供参数。用来调用函数
Activity
- 定义输入输出参数
- 计划提供Activities库
- Activities可以是公开或私有
Activity
- InputParameters: 需要的输入参数
- OutputParameters: 输出参数
- Instruction: 定义要执行的Script
- Id: Action的名字
- 创建Activity
Activity
WorkItem
- WorkItem需要
- 关联某 ‘Activity’
- 输入参数 (URLs)
- 输出参数 (URLs)
- 查看WorkItem状态:
WorkItem
- InputArguments: 需要的输入参数, 源DWG所在位置
- OutputArguments: 输出参数,生成的结果存放位置
- ActivityId: 需要使用哪个Activity
- 不需要设定WorkItem的名字,系统自行分配
创建WorkItem
WorkItem
WorkItem 返回值
- Response.Status: 标示成功,或失败的代码
- Response.OutputArguments.Resource: 结果文件地址,存放在IO租用的亚马逊服务器上
- Response.StatusDetails.Report: 任务日志,查看具体错误的环节
网盘存储访问方式
- 直接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添加控制选项
网盘(以阿里云为例)
网盘(以阿里云为例)
网盘(以阿里云为例)
网盘(以阿里云为例)
4. 上载文件>> 选取某DWG文件
5. 获取地址
练习:导出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"
}]
} ,
背后发生了什么
- Worker通过队列收取 WorkItem
- 下载输入参数
- 运行AcCoreConsole.exe
- 将结果上载到输出参数指定的存储
.NET库
- NuGet >> OData
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执行任务
- 1. 准备AutoCAD开发程序的bundle的zip包
- PackageContents.xml
- LoadOnAutoCADStartup: 启动时加载
- LoadOnCommandInvocation: 执行自定义命令时按需加载
多种导出内容
//设置输出参数
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