如何通过APS Design Automation API将标记导入DWG并保存?
解决方案:通过Design Automation API将DXF标记合并到DWG
核心思路
借助Design Automation for AutoCAD运行自定义脚本,将DXF标记文件导入目标DWG,再把合并后的DWG存回Forge存储桶。
具体步骤
1. 编写AutoCAD自定义脚本(.NET)
核心是实现导入DXF到DWG的逻辑,示例代码如下:
using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using System.IO; namespace MarkupMerger { public class Commands { [CommandMethod("MergeMarkups")] public void MergeMarkups() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; // 读取输入的DXF标记文件(Design Automation中输入文件默认挂载路径) string dxfPath = Path.Combine(Environment.GetEnvironmentVariable("LOCALAPPDATA"), "Autodesk", "DesignAutomation", "Input", "markups.dxf"); using (Transaction tr = db.TransactionManager.StartTransaction()) { // 打开模型空间 BlockTable bt = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; BlockTableRecord btr = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // 导入DXF到模型空间 using (DxfIn dxfIn = new DxfIn()) { dxfIn.DxfInFile(dxfPath, db, btr.Id); } tr.Commit(); } // 保存合并后的DWG到输出目录 doc.SaveAs(Path.Combine(Environment.GetEnvironmentVariable("LOCALAPPDATA"), "Autodesk", "DesignAutomation", "Output", "merged.dwg"), DwgVersion.Current); } } }
2. 打包脚本为AppBundle
将编译好的.NET程序集(.dll文件)打包成ZIP包,作为Design Automation的AppBundle上传。
3. 创建Design Automation活动
配置活动参数:
- 输入参数:原DWG文件(来自Forge存储桶)、DXF标记文件(来自Forge存储桶)
- 输出参数:合并后的DWG文件(存回Forge存储桶)
- 命令行:指定AutoCAD执行自定义命令,示例:
/i "$(args[inputDWG].path)" /c "MergeMarkups"
4. 在.NET Core中触发工作项
通过Forge SDK发送工作项请求,指定输入输出文件的存储桶路径,示例代码片段:
var workItem = new WorkItem() { ActivityId = "你的活动ID", Arguments = new Dictionary<string, IArgument>() { { "inputDWG", new XrefTreeArgument() { Url = "原DWG的存储桶URL", Headers = new Dictionary<string, string>() { { "Authorization", $"Bearer {accessToken}" } } } }, { "markupDXF", new XrefTreeArgument() { Url = "DXF标记的存储桶URL", Headers = new Dictionary<string, string>() { { "Authorization", $"Bearer {accessToken}" } } } }, { "outputDWG", new XrefTreeArgument() { Url = "输出DWG的存储桶URL", Headers = new Dictionary<string, string>() { { "Authorization", $"Bearer {accessToken}" } }, Verb = Verb.Put } } } }; var workitemResponse = await designAutomationClient.CreateWorkItemAsync(workItem);
5. 轮询工作项状态
检查工作项状态,当状态变为Success时,合并后的DWG已成功保存到指定存储桶。
关键注意事项
- 确保DXF标记的坐标系统与原DWG一致,避免导入后位置偏移
- 选用与原DWG版本兼容的Design Automation AutoCAD引擎
- 配置好存储桶文件的读写权限,保证Design Automation能正常访问
内容的提问来源于stack exchange,提问作者Plarent Haxhidauti
相关产品推荐
相关产品推荐

