开篇:手动改参数,改到天荒地老
做机电深化的时候,最烦的事情之一是什么?
改参数。
比如:所有风管的"系统类型"要统一改成"排风",200多根,一根根点进去改,改到眼睛都花了。再比如:直径大于200的管道要加备注,筛完还要一个个填,一个项目下来大半天没了。
Revit本身有批量修改参数的功能,但说实话——用过的都知道,那个界面操作起来比手动改还麻烦。
后来我学聪明了:用Dynamo写脚本,10分钟搞定原来一天的工作。
今天把这3个最常用的批量改参数脚本分享出来,建议收藏,下次遇到改参数直接套。
脚本一:批量改同名参数
适用场景
所有同类元素的某个参数,要改成同一个值。
比如:把项目中所有"送风管"的"备注"字段改成"待审核"。
脚本逻辑
节点序列:
All Elements of Category (MEP Categories → Duct)
→ Element.GetParameterValueByName ("系统类型")
→ String from Object
→ Code Block ("排风")
→ Element.SetParameterByName
翻译成大白话:
把项目中所有风管拿出来 找到"系统类型"这个参数 改成"排风" 写回去
实际效果
原来手动改200根风管的系统类型,要点开每一个族,选参数,下拉改值,再关掉——一根最快30秒,200根就是100分钟。
用这个脚本,选好类别,敲一个字符串,10秒完成。
注意: 参数名称要写对,大小写敏感,建议直接从族参数面板复制参数名。
脚本二:按条件筛选后批量改
适用场景
不是所有元素都改,而是满足特定条件的才改。
比如:直径大于200mm的风管,才把"备注"改成"大管径需复核"。
脚本逻辑
节点序列:
All Elements of Category (Duct)
→ Element.GetParameterValueByName ("直径")
→ >= (Code Block: 200)
→ List.FilterByBoolMask
→ True出口:符合条件的元素
→ False出口:不符合的(跳过)
→ Element.SetParameterByName ("备注", "大管径需复核")
核心节点:List.FilterByBoolMask
这是Dynamo里最常用的筛选节点。左上接原始列表,左下接筛选条件(True/False列表),右边两个出口——True是符合条件的,False是不符合的。
多条件组合
如果条件更复杂,比如"直径大于200 且 系统类型是送风",可以这样写:
→ 两个筛选条件分别拉 Boolean Mask
→ List.And
→ List.FilterByBoolMask
先把直径条件跑一遍,再把系统类型条件跑一遍,用 And 合并之后的结果去过滤元素列表。
实际效果
手动筛选:先按类型排序,再按直径排序,一个个找出来改——一个项目可能几十上百个,改完累个半死,还容易漏。
用这个脚本:条件写好,一键跑完,准确率100%,不会漏。
脚本三:跨类别批量修改
适用场景
多个类别的元素,要统一改同一个参数。
比如:项目中所有机电设备(水管、风管、电缆桥架),都要在"备注"字段加上项目前缀"PJ-"。
脚本逻辑
节点序列:
All Elements of Category (Duct)
All Elements of Category (Pipe)
All Elements of Category (Cable Tray)
→ List.Create
→ List.Flatten
→ Element.GetParameterValueByName ("备注")
→ String.Insert (前缀 "PJ-")
→ Element.SetParameterByName ("备注")
关键点:List.Create + List.Flatten
List.Create 把三个类别的元素列表合并成一个嵌套列表,Flatten 再把它展开成一维列表,这样才能统一处理。
进阶:保留原有备注内容
上面的脚本会覆盖原有备注内容,如果想保留原来的再加前缀,逻辑要改一下:
原有备注值 → String.Insert (在前面插入 "PJ-")
这样原来的备注内容不会丢失,只会在前面加上项目标记。
实际效果
一个多专业综合项目,涉及几十种设备类别,手动一个个改,改完基本上要到第二天才能缓过来。
用这个脚本,选好类别,敲好前缀,跑一遍,两分钟搞定。
注意事项
1. 改之前先备份模型
Dynamo改参数是不可逆的操作(除非你有撤销历史),运行脚本之前务必另存一个备份文件。
2. 参数类型要匹配
Dynamo对参数类型很敏感:
参数是字符串类型 → 用 String 参数是数字类型 → 用 Number 参数是族类型(如"系统类型")→ 要用 ElementType + ElementBinding,不能直接塞字符串
参数类型对不上,脚本会报错或者静默失败。
3. 族参数 vs 实例参数
Revit里参数分两种:
实例参数:每个构件单独的值,改一个不影响另一个 族参数(类型参数):同类型所有构件共用一个值,改一个会影响整类
Dynamo修改实例参数和类型参数的节点是一样的,但如果你的参数是类型参数,改一个就等于改了整类,改之前要确认好。
4. Dynamo Player 运行更安全
Dynamo编辑器里直接运行脚本,Revit会进入事务状态,如果脚本出错有可能导致Revit卡住。建议把脚本保存好,用 Dynamo Player 运行——Player 会在运行前自动生成撤销步骤,出问题可以一键撤回。
结语
Dynamo是BIM工程师的提效神器,这3个脚本覆盖了90%日常遇到的批量改参数需求。
收藏起来,下次遇到改参数的需求,先问自己:所有元素统一改,还是按条件筛选改,还是跨类别一起改?判断清楚,直接套对应的脚本。
你有什么批量提效的Dynamo脚本?欢迎评论区分享!
觉得有用的话,欢迎转发,我们下期见。
转载请注明来源本文地址:https://www.tuituisoft/blog/99030.html