欢迎加入BIM行业开发交流1群 群号:711844216(满),二群群号:1016453207
一、背景
小伙伴们在进行revit开发时,可能有过滤族的需求。这里的族(Family)不是族类型(FamilySymbol)也不是族实例(FamilyInstance),那么如何过滤呢?
二、思路
不管是在项目环境中,或者嵌套族环境中,使用以下代码即可
//推荐
FilteredElementCollector collector = new FilteredElementCollector(doc);
IEnumerable<Element> eleList = collector.OfClass(typeof(Family))
- 注意这里我们使用的OfClass方法,不要使用以下方法
//不推荐
ElementFilter filter=new ElementCategoryFilter(BuiltInCategory.xxx);
IEnumerable<Element> eleList = collector.WherePasses(filter).ToElements();
- 这种方法只会获得指定BuiltInCategory下的族类型或者族实例
- 如果我们想获得指定BuiltlnCategory下的所有族,可以使用如下方法
public static List<Family> FilterFamilyByBuiltInCategory(Document doc,BuiltInCategory builtInCategory)
{
List<Family> result=new List<Family>();
//创建收集器
FilteredElementCollector collector = new FilteredElementCollector(doc);
IEnumerable<Element> eleList = collector.OfClass(typeof(Family)).Where(m => (m as Family).FamilyCategory.Id == new ElementId(builtInCategory));
foreach (var ele in eleList)
{
//由于可能会有空族的存在,所以这里需要将其排除掉
if (ele.Name!="")
{
Family family = ele as Family;
result.Add(family);
}
}
return result;
}
三、注意事项
需要Revit二次开发全流程教学 的朋友可以联系我qq:1056295111
1.我是黑夜の骑士,欢迎大家关注我的博客,笔者将持续输出BIM相关软件开发以及编程干货
2.欢迎加入BIM行业开发交流1群,获取更多开发资料 群号:711844216