如何在revit api c#中将创建的墙类型转换为族文件

Posted

技术标签:

【中文标题】如何在revit api c#中将创建的墙类型转换为族文件【英文标题】:How to convert a created wall type to a family file in revit api c# 【发布时间】:2021-02-08 13:10:44 【问题描述】:

我正在使用 Revit API 处理一个我需要的项目

    创建墙, 使用材料创建新的墙类型 向墙壁和材料添加类型参数 为其生成 rfa 文件

我做了前 3 部分,但是当我过滤以提取家庭时

FilteredElementCollector collector = new FilteredElementCollector(doc);
Family famType = collector.OfClass(typeof(Family)).FirstOrDefault(x => x.Name == "Basic Wall") as Family;

这将返回 null。 所以我尝试了家庭实例,因为我也创建了墙。
List<FamilyInstance> list = new FilteredElementCollector(RevitData.Document).OfCategory(BuiltInCategory.OST_Walls).OfClass(typeof(FamilyInstance)).Cast<FamilyInstance>().ToList<FamilyInstance>();

但这也返回了 null 在附加的图像中,项目浏览器显示了 Basic Wall Family 类型中的“Test wall”。 我们真的可以将墙类型提取为 .rfa 吗? 如果这是可能的,有人可以指导我完成这个。 谢谢你

【问题讨论】:

【参考方案1】:

墙是系统系列,您不能将它们保存为 *.rfa 文件。

您的收集器无法正常工作,因为您在过滤器中使用了错误的类,Wall 或 WallType 类是正确的。

要在项目之间交换 WallTypes,您可以传输 Project Standards -> Wall Types,但是没有用于此的 API。作为替代方案,您可以使用 ElementTransformUtils.CopyElements() 方法来复制 Wall 或 WallType,或者尝试使用现有的 WallType 和 Duplicate 方法在源文档中设置所有参数来重新生成目标文档中的 WallType。

【讨论】:

感谢您的回复,实际上,我想允许用户使用 LoadFamilies 方法将家庭添加到文档中,因此试图创建 rfa 文件。

以上是关于如何在revit api c#中将创建的墙类型转换为族文件的主要内容,如果未能解决你的问题,请参考以下文章

Revit API - 创建新的 ScheduleField

Revit:C# 插件在角落创建螺柱

如何在 C# EF 核心 web api 中将列表转换为 Json

如何在 C# 中将列表或数组转换为子类型?

如何在 C# 中将对象数组向上转换为另一种类型的对象数组?

如何在 C# 中将字节 [] 转换为日期时间?