如何在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
相关产品推荐
相关产品推荐

