面向Revit2026培训的实操文章,讲解如何配合Dynamo从零搭建批量建模与参数自动化流程:按坐标/线段批量放置族实例、从Excel导入点表、批量写入编号与系统参数,并提供续编更新、质量控制与脚本模板建议。
写在前面:为什么在 Revit2026 里要学 Dynamo
在《Revit2026培训系统课程专题:从入门到项目实战与进阶》这个系列里,Dynamo 通常是把“会画模型”推进到“会批量生产模型、会自动化管理参数”的关键一环。对很多团队来说,建模效率瓶颈不是不会画,而是:
- 同一类构件要重复创建几百上千次(房间标识、洞口套管、栏杆立柱、机电支吊架点位、设备编号等)
- 参数维护要反复复制粘贴(楼层、分区、系统、编号规则、标高、统计字段)
- 设计变更后需要“成批改”,人工很难做到稳定一致
Dynamo 的价值在于:把“重复操作”变成“可复用的流程”,把“参数填写”变成“规则驱动”,把“容易出错的人工”变成“可追溯的自动化”。本文以 Revit2026 配合 Dynamo 的实际使用为主线,带你从零开始搭建批量建模与参数自动化的可落地流程,并给出可直接照做的步骤与节点思路。
准备工作:环境、原则与最小可用目标(MVP)
1)你需要准备什么
- Revit 2026(含 Dynamo for Revit,对应版本)
- 一个用于测试的项目文件(建议新建空白模板 + 若干标高、轴网)
- 至少一个可放置的族(Family),例如“通用模型-点位标记”“设备族”“立柱族”等
2)建议先立的三条原则
- 先跑通小流程,再扩展:先能批量放 20 个点,再考虑 2000 个点。
- 先确定数据来源:点位来自 Excel?来自 CAD?来自 Revit 里现有元素?数据来源决定节点结构。
- 先规范参数命名:共享参数(Shared Parameter)优先,命名统一(如
SYS_System、ID_Code、Zone_Area),避免后期映射混乱。
3)最小可用目标(MVP)示例
本文用两个 MVP 贯穿:
- MVP-A:批量建模——按给定坐标/线段,批量放置族实例
- MVP-B:参数自动化——按规则批量写入编号、楼层、分区等参数,并能二次更新
Dynamo 基础:你需要掌握的 6 类节点思维
如果你是第一次打开 Dynamo,不要急着学“所有节点”。先掌握最常用的 6 类:
1)输入类(Input)
Select Model Elements:从 Revit 选择元素作为输入Categories、Family Types:选择类别、族类型String、Number、Boolean:文本、数值、开关
2)数据结构类(List / Dictionary)
List.Create、List.Map、List.Combine、List.TransposeDictionary.ByKeysValues(做参数映射非常有用)
3)几何类(Geometry)
Point.ByCoordinates、Line.ByStartPointEndPoint、CoordinateSystem.ByOrigin
4)Revit 元素操作类(Revit)
FamilyInstance.ByPoint:按点放置族FamilyInstance.ByLine:按线放置族(适用于线性族/自适应族场景)Element.SetParameterByName:写参数Element.GetParameterValueByName:读参数
5)过滤与条件(Filter / Logic)
==、<、>、IfList.FilterByBoolMask(批量筛选非常常用)
6)事务与稳定性(实际工程很关键)
Dynamo 对 Revit 的写入本质是事务操作。建议:
- 每次只做一个明确的写入目标(先放置,再写参)
- 大批量操作时分批(例如每 300~500 个一批)
实操一:从 0 到 1 做“按坐标批量放置族实例”
这个案例适用于:设备点位、喷头、检修口、标注点位、预留洞口中心点等。
目标
给定一组坐标点(可以先手动输入,后续再接 Excel),在指定标高的平面上批量放置某个族类型,并写入基础参数(如编号)。
步骤 1:确定族与工作平面
- 在 Revit 中确认该族为“可放置”类型(通用模型/机械设备等)
- 建议在目标楼层平面视图中运行 Dynamo,避免工作平面混乱
步骤 2:搭建最小节点网络(MVP 版本)
核心思路:坐标 → 点(Point) → 放置(FamilyInstance.ByPoint)
- 用
Number输入 X、Y、Z(先做单点测试) - 用
Point.ByCoordinates生成点 - 用
Family Types选择要放置的族类型 - 用
FamilyInstance.ByPoint放置族
单点成功后,升级到多点:
- 用
List.Create创建 X 列表、Y 列表(Z 可统一为 0 或标高偏移) - 用
Point.ByCoordinates直接输入列表(Dynamo 会自动“列表化”生成多个点) FamilyInstance.ByPoint会批量生成实例
步骤 3:加入标高控制(避免“点在错误高度”)
常见问题:Z=0 不是你要的标高。
可选做法:
- 读取目标 Level 的标高(Revit 中 Level 的 Elevation)
- 将 Z 设置为
LevelElevation + Offset
实现思路:
Select Model Element选择某个 Level(或用Categories=Levels后筛选)Element.GetParameterValueByName读取Elevation- 与
Offset相加后作为 Z 输入
步骤 4:给实例写入参数(先从“编号”开始)
目标:给每个实例写入 Mark 或自定义 ID_Code。
创建编号列表:例如
A-001到A-100- 简易方式:手动
String列表 - 更工程化:用数字序列 + 前缀拼接
- 简易方式:手动
使用
Element.SetParameterByName- elements:接
FamilyInstance.ByPoint的输出 - parameterName:
Mark或ID_Code - value:编号列表
- elements:接
注意:编号列表长度必须与实例数量一致。若不一致,常用处理:
- 用
List.Count检查数量 - 用
List.TakeItems/List.Cycle做匹配(工程上更建议“数量一致”,避免循环造成重复编号)
步骤 5:把坐标来源升级为 Excel(更贴近实际)
工程常见是“点表”。建议 Excel 列定义:
X、Y、Z(或Level+Offset)TypeName(族类型名,可选)ID_Code、Zone、System等
节点思路:
Excel.ReadFromFile(或使用 Data.ImportExcel,按你环境的节点包情况)List.Transpose把行列转换- 用表头定位列(建议做“按列名取值”,减少列顺序变动导致错误)
落地建议:先固定 Excel 模板,不要边做自动化边改模板格式。
实操二:按“线段/轴网”批量生成构件(以立柱/支架点为例)
很多场景不是“点表”,而是“沿线均布”。例如:
- 沿轴网生成定位点
- 沿管线每 2m 生成支吊架点位
- 沿幕墙分格线生成连接件
目标
选取一条模型线(或 Revit 曲线),按间距生成点,再批量放置族实例。
步骤 1:选择线作为输入
Select Model Element选择模型线/详图线/梁边线(取决于你要操作的对象)- 将 Revit 曲线转换为 Dynamo 曲线(通常节点会自动处理)
步骤 2:按间距分点
常用思路:
- 获取曲线长度
Curve.Length - 设定间距
Spacing - 计算分段数
n = floor(Length / Spacing) - 生成参数序列 0~1 的列表(或按距离生成)
Curve.PointAtParameter批量取点
如果你不想处理 0~1 参数,可用“按距离取点”的节点/方法(不同节点包命名不一)。原则是:用曲线和间距生成点列表。
步骤 3:放置族并设置朝向(方向是工程常见坑)
- 放置:
FamilyInstance.ByPoint 朝向:取曲线切向量(Tangent)或线方向向量,然后:
- 若族支持旋转,用旋转节点(有的环境用
Element.Rotate) - 或放置时使用带方向的创建节点(视节点库而定)
- 若族支持旋转,用旋转节点(有的环境用
实用建议:先在 Revit 中确认该族是否“基于工作平面”“是否可旋转”。否则你在 Dynamo 里算对了方向也转不动。
参数自动化:把“填表”变成“规则”
批量放置只是第一步。真正能省大量时间的是参数自动化,特别是编号、系统归属、分区、统计字段。
1)建立“参数字典”映射(推荐做法)
当你要写入多个参数时,不要重复拉一堆 Element.SetParameterByName。
更可维护的方式是:
- 用
Dictionary.ByKeysValues建立参数名 → 值列表 - 遍历字典键值对,对同一批 elements 写入
示例(概念层面):
- Keys:
["Mark","SYS_System","Zone","LevelName"] - Values:
[编号列表, 系统列表, 分区列表, 楼层名列表]
这样 Excel 列变动时,你只改映射,不改整张网络。
2)编号规则示例:楼层-专业-序号
一个可落地的编号规则:
L03-ME-0001
实现思路:
- 读取实例所在楼层(如果实例有
Level/Reference Level参数) - 设定专业前缀(ME/AR/ST)
- 生成序号(按选中集合排序后编号)
- 字符串拼接并写入
Mark或ID_Code
排序建议:
- 按 X、Y 坐标从左到右、从下到上排序(更符合图面编号习惯)
- 需要读取实例位置点:
Location→Point→ 取 X、Y
3)二次更新:只改“变更部分”,不推倒重来
工程上经常发生:新增了 30 个点位,原来 200 个不能重编号。
解决策略:
- 先读已有
ID_Code - 过滤出
ID_Code为空的实例 - 仅对空值集合进行续编
节点逻辑:
Element.GetParameterValueByName读ID_Code- 与空字符串比较
== ""得到 Bool 列表 List.FilterByBoolMask过滤出需要编号的 elements- 对过滤后的集合生成新编号并写入
质量控制与常见坑:让自动化“可交付”
1)单位与坐标系
- Revit 内部单位与显示单位可能不同,Excel 的米/毫米要统一
- 建议在 Excel 明确单位列,或在 Dynamo 入口统一换算(例如 mm → ft 的换算要严格)
- 若使用共享坐标/测量点,务必确认是“项目基点坐标”还是“共享坐标”
2)族类型匹配失败
当 Excel 提供 TypeName 时,常见问题是:名称不完全一致。
建议:
- Excel 中使用与 Revit 完全一致的类型名
- 在 Dynamo 中做一次“类型存在性检查”:找不到就输出到错误列表,别直接报错中断
3)参数写入失败
原因通常是:
- 参数名不对(大小写/中英文/共享参数组)
- 参数为只读(如系统计算参数)
- 参数类型不匹配(数值参数写入了文本)
建议做法:
- 在写入前用
Element.GetParameterValueByName先读一次,确认能读取到 - 数值字段统一用 Number,文本字段用 String
4)性能与稳定性
- 先用 50 个实例压测,再上 500、5000
- 大批量时尽量减少“每个元素一次的复杂几何运算”
- 需要时分批处理:按楼层、按分区、按工作集分批跑
可复用的工作流模板:建议你这样沉淀成果
为了让 Dynamo 真正在团队里“复用”,建议每个脚本都按固定结构组织:
H3 1)输入区(Inputs)
- 数据源(Excel路径/工作表名/列映射)
- 族类型选择
- 标高/偏移
- 编号规则(前缀、起始号、位数)
H3 2)处理区(Process)
- 数据清洗(去空行、单位换算、列校验)
- 生成点/线/方向
- 过滤(剔除重复点、剔除已存在实例)
H3 3)输出区(Outputs)
- 新建元素列表
- 写参成功/失败列表
- 错误报告(缺失类型、缺失参数、坐标异常)
把这套结构坚持下来,你的 Dynamo 网络会从“能跑”变成“能交接、能维护”。
练习任务(建议按 Revit2026培训节奏完成)
- 用手动坐标列表批量放置 30 个通用模型族,并写入
Mark。 - 接入 Excel 点表(X、Y、Level、ID_Code),实现批量放置 + 写参。
- 实现“只对 ID_Code 为空的实例续编”,避免全量重编号。
- 选一条线,按 1500mm 间距生成点并放置族,尝试加入朝向控制。
完成以上 4 项,你就具备了把 Dynamo 用在真实项目里的基本能力:批量建模、参数自动化、可控更新。
Prev:Revit2026项目常见返工点:10类高频错误与预防措施