Revit获取元素的族名
写在前面
太啰嗦不想看,直接跳到获取元素族名的方法。
本来想写《Revit CurveLoop、Plane和多边形面积比(一)》第二篇的,但好像忘了些东西,回想啊,整理资料啊,画示例图哇这些东西可能要不少时间。然后最近项目又有点赶,事儿多得。
就先简单写个吧,写完还得加班呢ಥ_ಥ。
族、族类型,元素
简单回顾一下,在《获取元素内嵌族》这篇中,提到了Revit族的几种分类。而对于获取元素名称方面,可按照系统族
和非系统族
这两类区别获取。
在给出名称的获取方法之前,我们先了解以下Revit中的族、族类型、元素的区别与联系。
Element
(元素):Revit中,基本上所有可操作图元都可以称为元素,从开发角度上看,很多东西都是由Element
类派生而来。→ → 元素有个名称
Element.Name
,填啥都行,不填也行,默认是族类型名
。
Family
(族):Revit API中介绍说“表示自定义族(不是系统族)的元素”。我们通俗的理解,就是那些可以摆弄的模型、标注、符号等,都是族。文档中括号里“不是系统族”这个可以不理会,那是从软件层面解释的,不是应用层面。 → → 族有个名称
Family.Name
,对于非系统族,就是文件名
,且在一个文档中,必须唯一。
FamilySymbol
(族类型):还是从应用角度看,比如有个仓库放专门放凳子,打开仓库一看,有木腿儿的,有皮垫的,有靠背的。这些就是类型。 → → 族类型有个名称
FamilySymbol.Name
,在一个族中不同类型不重名即可,叫啥随意。一般一个族就一个类型,其名称默认和族名一样。
族、族类型可以互相获取,可在API文档中查看。
// FamilyInstance.Symbol
// FamilySymbol.Family
补充:上图“风管附件”是族类别(Category
),是由族样板决定的,不同样板具有不同的特性,具体的我没有了解。
获取方法
从API上来看,很简单就能想到,要获取族名,可以通过判断是否为FamilyInstance,再使用FamilyInstance.Symbol.FamilyName
,或者FamilyInstance.Symbol.Family.Name
,就能拿到族名。但是对于系统族呢,系统族可没有Family,如果直接从Element.Name拿,只能拿到类型名,而我们知道,系统族都是有丰富的类型的,因此,这种方法对于系统族行不通。
那有没有其它方法获取族名称呢,嘿~当然是有的。
获取方法:从元素参数
BuiltInParameter.ELEM_FAMILY_PARAM
中获取元素族名称。
// 扩展方法
// 其实直接获取参数值返回就行,不需要空判断。
public static string GetFamilyName(this Element element)
{
Parameter parameter = element.GetParameter(BuiltInParameter.ELEM_FAMILY_PARAM); // 这行要,GetParameter也是扩展方法,自带的返回是一个List
if (parameter == null) { return element.Name; }
string familyName = parameter?.AsValueString(); // 直接返回AsValueString(),其它的可以省略
if (string.IsNullOrEmpty(familyName)) { return element.Name; }
else { return familyName; }
}
后记
参数中还有其它有用的东西哟,可以去翻翻看看。
完。