Bim5.com ©

专业BIM技术门户网站 | 建筑信息模型与工程数字化

Revit2026配合Dynamo:从零开始做批量建模与参数自动化
原始问题:

面向Revit2026培训的实操文章,讲解如何配合Dynamo从零搭建批量建模与参数自动化流程:按坐标/线段批量放置族实例、从Excel导入点表、批量写入编号与系统参数,并提供续编更新、质量控制与脚本模板建议。

写在前面:为什么在 Revit2026 里要学 Dynamo

在《Revit2026培训系统课程专题:从入门到项目实战与进阶》这个系列里,Dynamo 通常是把“会画模型”推进到“会批量生产模型、会自动化管理参数”的关键一环。对很多团队来说,建模效率瓶颈不是不会画,而是:

  • 同一类构件要重复创建几百上千次(房间标识、洞口套管、栏杆立柱、机电支吊架点位、设备编号等)
  • 参数维护要反复复制粘贴(楼层、分区、系统、编号规则、标高、统计字段)
  • 设计变更后需要“成批改”,人工很难做到稳定一致

Dynamo 的价值在于:把“重复操作”变成“可复用的流程”,把“参数填写”变成“规则驱动”,把“容易出错的人工”变成“可追溯的自动化”。本文以 Revit2026 配合 Dynamo 的实际使用为主线,带你从零开始搭建批量建模与参数自动化的可落地流程,并给出可直接照做的步骤与节点思路。


准备工作:环境、原则与最小可用目标(MVP)

1)你需要准备什么

  • Revit 2026(含 Dynamo for Revit,对应版本)
  • 一个用于测试的项目文件(建议新建空白模板 + 若干标高、轴网)
  • 至少一个可放置的族(Family),例如“通用模型-点位标记”“设备族”“立柱族”等

2)建议先立的三条原则

  1. 先跑通小流程,再扩展:先能批量放 20 个点,再考虑 2000 个点。
  2. 先确定数据来源:点位来自 Excel?来自 CAD?来自 Revit 里现有元素?数据来源决定节点结构。
  3. 先规范参数命名:共享参数(Shared Parameter)优先,命名统一(如 SYS_SystemID_CodeZone_Area),避免后期映射混乱。

3)最小可用目标(MVP)示例

本文用两个 MVP 贯穿:

  • MVP-A:批量建模——按给定坐标/线段,批量放置族实例
  • MVP-B:参数自动化——按规则批量写入编号、楼层、分区等参数,并能二次更新

Dynamo 基础:你需要掌握的 6 类节点思维

如果你是第一次打开 Dynamo,不要急着学“所有节点”。先掌握最常用的 6 类:

1)输入类(Input)

  • Select Model Elements:从 Revit 选择元素作为输入
  • CategoriesFamily Types:选择类别、族类型
  • StringNumberBoolean:文本、数值、开关

2)数据结构类(List / Dictionary)

  • List.CreateList.MapList.CombineList.Transpose
  • Dictionary.ByKeysValues(做参数映射非常有用)

3)几何类(Geometry)

  • Point.ByCoordinatesLine.ByStartPointEndPointCoordinateSystem.ByOrigin

4)Revit 元素操作类(Revit)

  • FamilyInstance.ByPoint:按点放置族
  • FamilyInstance.ByLine:按线放置族(适用于线性族/自适应族场景)
  • Element.SetParameterByName:写参数
  • Element.GetParameterValueByName:读参数

5)过滤与条件(Filter / Logic)

  • ==<>If
  • List.FilterByBoolMask(批量筛选非常常用)

6)事务与稳定性(实际工程很关键)

Dynamo 对 Revit 的写入本质是事务操作。建议:

  • 每次只做一个明确的写入目标(先放置,再写参)
  • 大批量操作时分批(例如每 300~500 个一批)

实操一:从 0 到 1 做“按坐标批量放置族实例”

这个案例适用于:设备点位、喷头、检修口、标注点位、预留洞口中心点等。

目标

给定一组坐标点(可以先手动输入,后续再接 Excel),在指定标高的平面上批量放置某个族类型,并写入基础参数(如编号)。

步骤 1:确定族与工作平面

  1. 在 Revit 中确认该族为“可放置”类型(通用模型/机械设备等)
  2. 建议在目标楼层平面视图中运行 Dynamo,避免工作平面混乱

步骤 2:搭建最小节点网络(MVP 版本)

核心思路:坐标 → 点(Point) → 放置(FamilyInstance.ByPoint)

  1. Number 输入 X、Y、Z(先做单点测试)
  2. Point.ByCoordinates 生成点
  3. Family Types 选择要放置的族类型
  4. FamilyInstance.ByPoint 放置族

单点成功后,升级到多点:

  • List.Create 创建 X 列表、Y 列表(Z 可统一为 0 或标高偏移)
  • Point.ByCoordinates 直接输入列表(Dynamo 会自动“列表化”生成多个点)
  • FamilyInstance.ByPoint 会批量生成实例

步骤 3:加入标高控制(避免“点在错误高度”)

常见问题:Z=0 不是你要的标高。

可选做法:

  • 读取目标 Level 的标高(Revit 中 Level 的 Elevation)
  • 将 Z 设置为 LevelElevation + Offset

实现思路:

  1. Select Model Element 选择某个 Level(或用 Categories=Levels 后筛选)
  2. Element.GetParameterValueByName 读取 Elevation
  3. Offset 相加后作为 Z 输入

步骤 4:给实例写入参数(先从“编号”开始)

目标:给每个实例写入 Mark 或自定义 ID_Code

  1. 创建编号列表:例如 A-001A-100

    • 简易方式:手动 String 列表
    • 更工程化:用数字序列 + 前缀拼接
  2. 使用 Element.SetParameterByName

    • elements:接 FamilyInstance.ByPoint 的输出
    • parameterName:MarkID_Code
    • value:编号列表

注意:编号列表长度必须与实例数量一致。若不一致,常用处理:

  • List.Count 检查数量
  • List.TakeItems/List.Cycle 做匹配(工程上更建议“数量一致”,避免循环造成重复编号)

步骤 5:把坐标来源升级为 Excel(更贴近实际)

工程常见是“点表”。建议 Excel 列定义:

  • XYZ(或 Level + Offset
  • TypeName(族类型名,可选)
  • ID_CodeZoneSystem

节点思路:

  • Excel.ReadFromFile(或使用 Data.ImportExcel,按你环境的节点包情况)
  • List.Transpose 把行列转换
  • 用表头定位列(建议做“按列名取值”,减少列顺序变动导致错误)

落地建议:先固定 Excel 模板,不要边做自动化边改模板格式。


实操二:按“线段/轴网”批量生成构件(以立柱/支架点为例)

很多场景不是“点表”,而是“沿线均布”。例如:

  • 沿轴网生成定位点
  • 沿管线每 2m 生成支吊架点位
  • 沿幕墙分格线生成连接件

目标

选取一条模型线(或 Revit 曲线),按间距生成点,再批量放置族实例。

步骤 1:选择线作为输入

  • Select Model Element 选择模型线/详图线/梁边线(取决于你要操作的对象)
  • 将 Revit 曲线转换为 Dynamo 曲线(通常节点会自动处理)

步骤 2:按间距分点

常用思路:

  1. 获取曲线长度 Curve.Length
  2. 设定间距 Spacing
  3. 计算分段数 n = floor(Length / Spacing)
  4. 生成参数序列 0~1 的列表(或按距离生成)
  5. 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

实现思路:

  1. 读取实例所在楼层(如果实例有 Level/Reference Level 参数)
  2. 设定专业前缀(ME/AR/ST)
  3. 生成序号(按选中集合排序后编号)
  4. 字符串拼接并写入 MarkID_Code

排序建议:

  • 按 X、Y 坐标从左到右、从下到上排序(更符合图面编号习惯)
  • 需要读取实例位置点:LocationPoint → 取 X、Y

3)二次更新:只改“变更部分”,不推倒重来

工程上经常发生:新增了 30 个点位,原来 200 个不能重编号。
解决策略:

  • 先读已有 ID_Code
  • 过滤出 ID_Code 为空的实例
  • 仅对空值集合进行续编

节点逻辑:

  1. Element.GetParameterValueByNameID_Code
  2. 与空字符串比较 == "" 得到 Bool 列表
  3. List.FilterByBoolMask 过滤出需要编号的 elements
  4. 对过滤后的集合生成新编号并写入

质量控制与常见坑:让自动化“可交付”

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培训节奏完成)

  1. 用手动坐标列表批量放置 30 个通用模型族,并写入 Mark
  2. 接入 Excel 点表(X、Y、Level、ID_Code),实现批量放置 + 写参。
  3. 实现“只对 ID_Code 为空的实例续编”,避免全量重编号。
  4. 选一条线,按 1500mm 间距生成点并放置族,尝试加入朝向控制。

完成以上 4 项,你就具备了把 Dynamo 用在真实项目里的基本能力:批量建模、参数自动化、可控更新。

Revit2026配合Dynamo:从零开始做批量建模与参数自动化
https://bim5.com/43.html