// 获取消防报警设备的方法,传入文档对象和可选的族名称参数
//如果指定族名,则取得对应的实体,如果不指定,则读取全部电气设备
public List<FamilyInstance> GetFireAlarmDevices(Document doc, string family = "")
{
// 用于存储找到的消防报警设备的列表
List<FamilyInstance> elements = new List<FamilyInstance>();
try
{
// 创建一个过滤后的元素收集器,用于在文档中收集元素
FilteredElementCollector collector = new FilteredElementCollector(doc);
// 创建一个元素类过滤器,筛选出 FamilyInstance 类型的元素
ElementClassFilter classFilter = new ElementClassFilter(typeof(FamilyInstance));
// 创建一个元素类别过滤器,筛选出内置类别为消防报警设备的元素
ElementCategoryFilter catFilter = new ElementCategoryFilter(BuiltInCategory.OST_FireAlarmDevices);
// 创建一个逻辑与过滤器,同时满足类过滤器和类别过滤器的条件
LogicalAndFilter logicalFilter = new LogicalAndFilter(classFilter, catFilter);
// 将收集器设置为使用逻辑与过滤器进行筛选
collector.WherePasses(logicalFilter);
// 获取经过筛选的元素迭代器
FilteredElementIterator eit = collector.GetElementIterator();
// 重置迭代器
eit.Reset();
// 遍历迭代器中的元素
while (eit.MoveNext())
{
// 将当前元素转换为 FamilyInstance 类型
FamilyInstance element = eit.Current as FamilyInstance;
// 如果转换失败(当前元素不是 FamilyInstance 类型),则继续下一个元素
if (element == null)
continue;
// 如果传入的族名称为空字符串或者当前元素的族名称中包含传入的族名称,则将该元素添加到列表中
if (family == "" || element.Symbol.FamilyName.IndexOf(family)!= -1)
{
elements.Add(element);
}
}
}
catch (System.Exception)
{
// 捕获异常但不做任何处理
}
return elements;
}