REVIT二次开发查找所有火警设备

// 获取消防报警设备的方法,传入文档对象和可选的族名称参数

//如果指定族名,则取得对应的实体,如果不指定,则读取全部电气设备
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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值