做机电BIM的朋友都有体会:项目里的系统五花八门,送风、回风、排风、新风、给水、排水、消防喷淋、消火栓……每个系统都要有自己的颜色,方便识图和出图。
手动建过滤器的痛苦,谁建谁知道。
今天这篇,就教你怎么用我们的插件,把半小时的活压缩到30秒。
一、功能整体介绍和视频展示
先看痛点
建系统过滤器这件事,说起来不难,但特别磨人:
• 每个系统要建一个过滤器,名字要对、规则要对、颜色要对 • 风管系统和管道系统要分开建,类别不一样,参数也不一样 • 项目中途加个系统,又得从头再来一遍 • 不同项目之间,过滤器配色还不统一
关键是,这活没有任何技术含量,纯体力。一个有经验的BIM工程师,把时间耗在这上面,纯粹是浪费。
功能能做什么
我们的「管道系统过滤器」和「风管系统过滤器」功能,核心就是一件事:
自动识别项目中的所有系统,按系统类型批量创建过滤器。
具体来说:
管道系统过滤器支持:
• 自动识别所有管道系统类型(给水、排水、雨水、消防、喷淋、消火栓等) • 按系统名称自动生成过滤规则,匹配 System Type参数• 内置专业配色方案,也支持用户自定义颜色 • 支持管道、管件、管路附件、管道保温等多类别同时过滤 • 一键生成,自动按系统名称命名
风管系统过滤器支持:
• 自动识别所有风管系统类型(送风、回风、排风、新风、排烟、加压送风等) • 支持风管、风管管件、风管附件、风管保温、风道末端等多类别 • 同样支持配色方案自定义和预设 • 自动命名,名称规范统一
两个操作逻辑基本一致,一个给水专业用,一个给暖通专业用。看完视频你会发现:操作简单到离谱,全是自动的。
二、功能整体思路和实现技术步骤
设计思路
这个功能的设计原则就一条:能自动的绝不手动,能默认的绝不询问。
用户打开功能,看到的应该是:
• 系统已经识别好了,列在那里 • 配色已经有默认方案,直接能用 • 要勾的类别已经按专业习惯选好了 • 用户只需要点「确定」就行
高级用户当然可以自定义,但默认值要让新手也能直接用出好效果。
技术实现步骤
第一步:遍历项目,收集所有系统
遍历项目中的 MEPSystem 集合
↓
按系统类型分类(PipingSystem / DuctSystem)
↓
提取系统名称、系统类型、标识符等信息
↓
去重、排序,展示在UI列表中这里有个细节:Revit 项目中可能存在没有被使用的系统类型,我们做了一个过滤——只显示项目中实际有管线的系统,避免列表里一堆没用的系统干扰用户。
第二步:构建过滤规则
每个系统过滤器的核心是它的过滤规则,我们用的是 System Type 参数匹配:
过滤器类别:管道 / 管件 / 管路附件 / ...
↓
过滤规则:System Type 等于 "[系统名称]"
↓
多类别用 OR 逻辑组合,保证同系统的所有图元都被过滤到为什么选 System Type 而不是 System Name?因为 System Name 是实例参数,同一个系统类型下可以有多个系统名称,用类型参数过滤更稳定。
第三步:应用图形覆盖设置
创建完过滤器后,自动设置图形覆盖:
• 投影/截面线颜色:按配色方案分配 • 填充图案:默认无填充(可配置) • 透明度:默认0(可配置) • 线型:默认实线(可配置)
配色方案我们内置了几套:
• 经典色:常用的蓝/绿/红/黄配色 • GB标准色:按国标推荐的系统颜色 • 莫兰迪色:低饱和度,长时间看不累
第四步:批量创建,统一命名
最后一步就是批量创建了。所有操作包在一个 Transaction 里,要么全成功,要么全回滚,不会创建到一半失败,留下一堆半成品。
命名规则统一为 [系统类型]_[系统名称],比如 风管_送风、管道_给水,方便查找和管理。
三、功能技术点总结
这个功能看起来简单,背后还是有不少技术细节的。挑几个重点说:
1. MEPSystem 的获取与分类
Revit API 中获取 MEP 系统的方式:
• 管道系统: FilteredElementCollector+PipingSystem类• 风管系统: FilteredElementCollector+DuctSystem类
注意区分 系统类型(System Type) 和 系统实例(System Instance):
• 系统类型是项目设置里定义的,对应 MEPSystemType• 系统实例是项目中实际存在的管路网络,对应 MEPSystem
我们的过滤器是按系统类型来建的,这样同一个类型下的所有管路都会被统一过滤。
2. 多类别过滤器的创建
一个过滤器要同时过滤管道、管件、附件等多个类别,怎么实现?
关键在于 ParameterFilterElement.Create() 的 categories 参数——它可以传入多个类别ID。
但要注意:不是所有参数在所有类别上都可用。比如 System Type 参数,管道和管件上都有,但某些族实例上可能没有,这时候过滤器规则就会失效。
我们的做法是:先验证每个类别是否支持指定的过滤参数,不支持的就排除,并在UI上提示用户。
3. 系统颜色的智能分配
怎么给几十个系统自动分配颜色,还要区分度好、好看?
我们的算法思路:
1. 先在 HSL 色彩空间按色相均匀分配,保证颜色区分度 2. 调整饱和度和亮度,保证在屏幕上和打印出来都清晰可见 3. 对常见系统(如送风、给水)使用行业默认色,其他系统自动分配 4. 提供手动调整入口,用户可以改
4. 性能优化:批量创建的效率
一次性创建几十个过滤器,如果每个都单独开事务,速度会很慢。
优化方法:
• 所有创建操作放在同一个 Transaction 里 • 先用 Transaction.Start()开启,全部完成后再Commit()• 中间过程不刷新UI,完成后统一刷新 • 系统数量特别多时,显示进度条,避免界面假死
四、和大家聊两句
几乎每个项目启动时,第一件事就是跑一遍这个功能——几分钟的活变成几秒钟,省下来的时间干什么不好?
但我也知道,很多朋友会有顾虑:
• "自动生成的过滤器命名规则和我们公司不一样怎么办?"——支持自定义命名规则,前缀后缀都能改。 • "我们公司有自己的标准配色,能导入吗?"——当然可以,配色方案支持导入导出,一个团队统一用一套。 • "我项目里系统命名不规范,能识别吗?"——只要System Type对得上就能识别,命名不规范的反而能借这个机会统一一下。
想问问大家:
转载请注明来源本文地址:https://www.tuituisoft/blog/99265.html