【引言】
Revit在二次开发过程中会在族这里遇到好多问题,特别是族、族类型、族实例之间到底是如何转换的呢,很多先后朋友容易搞混,今天就这个话题来分享一下三者之间的转换关系。
【转换关系】
从族实例获取族类型
//方法一:直接由族实例属性获取
FamilySymbol symbol = familylnstance. Symbol
//方法二:先获取族类型的ID元素,然后转化成族类型
FamilySymbol symbol = RevitDoc. GetElement(familyInstance.GetTypeId()) as FamilySymbol;
从族类型获取族
Family family = symbol. Family;
从族获取族类型
//返回值是一个族下所有族类型的集合
FamilySymbolSet setOfSymbols = family. Symbols;
从族类型获取族实例
//方法一:族实例过滤器直接获取
FamilylnstanceFilter familylnstanceFilter = new FamilyInstanceFilter(RevitDoc,symbol, Id);
//方法二:比方法一多了两步,主要用于族实例的遍历
FilteredElementCollector filteredElements = new FilteredElementCollector(RevitDoc);
filteredElements = filteredElements. WherePasses(familylnstanceFilter);
foreach (Familylnstance element in filteredElements)
{
//各族实例
}
案例展示:
FilteredElementCollector collz = new FilteredElementCollector(revitDoc);
ICollection<Element> famInstanceElemIcoll = collz.OfClass(typeof(FamilyInstance)).ToElements();
List<ElementEncoderInfo> list = new List<ElementEncoderInfo>();
foreach (Element selem in a)
{
ElementType type1 = selem as ElementType;
foreach (Element felem in famInstanceElemIcoll)
{
FamilyInstance type = felem as FamilyInstance;
if (type1.FamilyName == type.Symbol.Family.Name)
{
ElementEncoderInfo en = new ElementEncoderInfo();
en.elementType = type1;
en.instance = type;
list.Add(en);
}
}
}
更多Revit二次开发问题欢迎与我共同交流~