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

如何在Autodesk Design Automation中复制Family Type并导入Type Catalog

在Design Automation中导入Type Catalog到RFA族文件

核心实现步骤

  • 读取解析Type Catalog文件:从AppBundle目录读取格式化TXT文件,首行为参数名,后续每行对应一个族类型的参数值,解析为键值对集合。
  • 复制并创建新族类型:利用FamilyManager.NewType创建新类型,先同步源类型的参数值,再用Type Catalog的值覆盖。
  • 更新新类型参数:遍历解析后的参数值,匹配族参数并按类型(整数、字符串、长度等)转换设置。
  • 设置当前族类型:通过FamilyManager.CurrentType将新类型设为当前类型。

代码示例

using Autodesk.Revit.DB;
using System;
using System.IO;

public void ImportTypeCatalog(Document doc, string typeCatalogPath)
{
    FamilyManager familyManager = doc.FamilyManager;
    FamilyType sourceType = familyManager.CurrentType;

    // 读取Type Catalog文件
    string[] lines = File.ReadAllLines(typeCatalogPath);
    if (lines.Length < 2) return;

    string[] paramNames = lines[0].Split(',');
    string[] paramValues = lines[1].Split(',');

    using (Transaction trans = new Transaction(doc, "Create New Family Type"))
    {
        trans.Start();
        FamilyType newType = familyManager.NewType("New_Type_From_Catalog");

        // 复制源类型参数值到新类型
        foreach (FamilyParameter param in familyManager.Parameters)
        {
            if (!param.IsInstance)
            {
                var value = sourceType.AsValueString(param);
                familyManager.Set(param, value);
            }
        }

        // 用Type Catalog值更新参数
        for (int i = 0; i < paramNames.Length; i++)
        {
            string paramName = paramNames[i].Trim();
            string paramValue = paramValues[i].Trim();

            FamilyParameter targetParam = familyManager.get_Parameter(paramName);
            if (targetParam != null && !targetParam.IsInstance)
            {
                switch (targetParam.StorageType)
                {
                    case StorageType.Integer:
                        if (int.TryParse(paramValue, out int intVal))
                            familyManager.Set(targetParam, intVal);
                        break;
                    case StorageType.Double:
                        if (double.TryParse(paramValue, out double doubleVal))
                            familyManager.Set(targetParam, doubleVal);
                        break;
                    case StorageType.String:
                        familyManager.Set(targetParam, paramValue);
                        break;
                }
            }
        }

        familyManager.CurrentType = newType;
        trans.Commit();
    }
}

// Design Automation入口调用
public void Run(DesignAutomationData data)
{
    Document doc = data.Document;
    string appBundlePath = Environment.GetEnvironmentVariable("APPBUNDLE_PATH");
    string typeCatalogPath = Path.Combine(appBundlePath, "YourTypeCatalog.txt");

    ImportTypeCatalog(doc, typeCatalogPath);
}

关键注意事项

  • 参数名称匹配:Type Catalog中的参数名必须与族文件类型参数名完全一致(区分大小写)。
  • 事务强制要求:所有族修改操作必须包裹在Transaction中执行。
  • 多类型扩展:示例仅处理单类型,若需导入多个类型,可循环处理lines数组从第二行开始的所有行。
  • 单位转换:处理长度类参数时,需确保输入值与Revit内部单位(英尺)匹配。

内容的提问来源于stack exchange,提问作者codeFreak24

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:35:14