You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 17:12:48