寻求Revit多链接文件下Design Automation API使用文档及示例代码
Revit Design Automation 多链接模型处理实现指南
一、App Bundle 创建要点
多链接场景下的App Bundle核心逻辑是确保插件能识别并处理Revit模型中的链接文档,基础结构和单文件场景一致,仅需在插件代码中添加链接文件的处理逻辑。
插件代码示例(C#)
using Autodesk.Revit.DB; using Autodesk.Revit.UI; public class LinkFileHandler : IExternalCommand { public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) { UIDocument uiDoc = commandData.Application.ActiveUIDocument; Document doc = uiDoc.Document; // 获取所有已加载的链接文档 FilteredElementCollector collector = new FilteredElementCollector(doc) .OfClass(typeof(RevitLinkInstance)); foreach (RevitLinkInstance linkInstance in collector) { Document linkedDoc = linkInstance.GetLinkDocument(); if (linkedDoc != null) { // 对链接文档执行自定义操作,比如获取元素、修改参数等 TaskDialog.Show("链接文件信息", $"链接文件名:{linkedDoc.Title}"); } } // 保存主模型(若有修改) doc.Save(); return Result.Succeeded; } }
打包App Bundle的流程和单文件场景完全一致,无需额外配置,确保插件DLL和依赖项(若有)都正确打包即可。
二、Activity 配置
需要在Activity中定义多个输入参数,分别对应主模型和所有链接文件,每个链接文件参数需指定唯一的标识和本地文件名。
.NET SDK 配置示例
using Autodesk.Forge.DesignAutomation.Model; using Autodesk.Forge; // 初始化Design Automation客户端 DesignAutomationClient client = new DesignAutomationClient(); // 创建Activity Activity activity = new Activity() { Id = "RevitLinkProcessingActivity", AppBundle = "YourAppBundleAlias+YourAppBundleVersion", CommandLine = new List<string> { "$(engine.path)\\RevitCoreConsole.exe /i $(args[MainModel].path) /al $(appbundles[YourAppBundleAlias].path) /c \"LinkFileHandler\"" }, Parameters = new Dictionary<string, Parameter>() { // 主模型参数 { "MainModel", new Parameter() { Description = "主Revit模型文件", LocalName = "MainModel.rvt", Required = true, Verb = Verb.Get, Zip = false } }, // 第一个链接文件参数 { "LinkFile1", new Parameter() { Description = "链接文件1", LocalName = "LinkFile1.rvt", Required = true, Verb = Verb.Get, Zip = false } }, // 第二个链接文件参数(可根据实际需求添加更多) { "LinkFile2", new Parameter() { Description = "链接文件2", LocalName = "LinkFile2.rvt", Required = false, Verb = Verb.Get, Zip = false } }, // 输出参数(若需要) { "OutputModel", new Parameter() { Description = "处理后的主模型", LocalName = "OutputModel.rvt", Required = true, Verb = Verb.Put, Zip = false } } }, Engine = "Autodesk.Revit+2024" // 对应你的Revit版本 }; // 创建或更新Activity await client.CreateActivityAsync(activity);
三、Workitem 提交
提交Workitem时,需为每个输入参数指定对应的OSS文件URL,确保所有链接文件都能被Design Automation环境加载。
.NET SDK 提交示例
// 定义Workitem输入参数 Dictionary<string, IArgument> arguments = new Dictionary<string, IArgument>() { // 主模型OSS地址 { "MainModel", new XrefTreeArgument() { Url = "oss://your-bucket/main-model.rvt", Headers = new Dictionary<string, string>() { { "Authorization", "Bearer " + yourAccessToken } } } }, // 第一个链接文件OSS地址 { "LinkFile1", new XrefTreeArgument() { Url = "oss://your-bucket/link-file-1.rvt", Headers = new Dictionary<string, string>() { { "Authorization", "Bearer " + yourAccessToken } } } }, // 第二个链接文件OSS地址(若存在) { "LinkFile2", new XrefTreeArgument() { Url = "oss://your-bucket/link-file-2.rvt", Headers = new Dictionary<string, string>() { { "Authorization", "Bearer " + yourAccessToken } } } }, // 输出文件OSS地址 { "OutputModel", new XrefTreeArgument() { Url = "oss://your-bucket/output-model.rvt", Headers = new Dictionary<string, string>() { { "Authorization", "Bearer " + yourAccessToken } } } } }; // 创建Workitem WorkItem workItem = new WorkItem() { ActivityId = "YourNickName.RevitLinkProcessingActivity+Alias", Arguments = arguments }; // 提交Workitem WorkItemStatus status = await client.CreateWorkItemAsync(workItem);
关键注意事项
- 链接文件路径匹配:Activity中定义的
LocalName必须和主模型中链接文件的原始文件名一致,否则Revit无法加载链接。 - 文件权限:所有OSS文件必须设置正确的访问权限,确保Design Automation服务能通过指定的Token访问。
- 版本兼容性:主模型和所有链接文件需使用相同或兼容的Revit版本,避免加载失败。
- 动态链接文件:若链接文件数量不固定,可在Activity中定义可选参数,提交Workitem时仅传入存在的链接文件参数。
内容的提问来源于stack exchange,提问作者Jyothi
相关产品推荐
相关产品推荐

