1. 概述
Revit 公式是实现参数化设计与规则化建模的核心能力,支持在尺寸标注、族参数、项目全局参数及明细表中嵌入计算逻辑,通过数学运算、条件判断实现模型几何、属性、报表的自动驱动与联动更新。
公式能力主要分布于两大应用环境:
- 族编辑器环境:核心应用场景,用于定义族参数间的关联关系,驱动几何形态、图元可见性、类型属性等核心建模逻辑。
- 项目环境:通过全局参数、明细表计算值、标记标签实现项目级数据计算、统计与标注输出。
核心价值:
- 固化设计规则与工程逻辑,实现参数联动修改,一处更新全局同步
- 支撑系列化族库开发,大幅减少重复建模工作量
- 实现工程计算与数据统计自动化,提升BIM数据准确性与交付效率
2. 核心应用场景
2.1 图元尺寸驱动
通过公式直接控制族内图元的尺寸标注,建立几何参数间的比例、差值、函数约束关系。典型应用包括:
- 保持构件长、宽、高的固定设计比例
- 定义安装间隙、加工余量等衍生尺寸
- 基于几何参数自动计算截面积、体积等工程属性
2.2 数字参数关联
公式可创建依赖型参数,其值由其他参数计算推导得出,适用于:
- 嵌入设计规范与经验公式
- 关联实例参数与可变长度参数
- 定义角度、定位距离等几何约束
- 实现连续变量向整数值的自动转换
关键特性:
- 若公式仅包含1个输入变量,目标参数支持直接修改,系统会反向推导变量值;
- 若公式包含2个及以上输入变量,目标参数将灰显锁定,仅能通过修改输入变量更新其值。
2.3 计算值(报告参数)
通过「计算值」功能定义公式驱动的报告参数,主要用于明细表与注释标记的数据统计与展示,不直接驱动几何模型。
2.3.1 入口路径
- 明细表:创建/编辑明细表时,在「明细表属性」对话框中点击「已计算」按钮添加
- 标记标签:编辑标记族时,在「编辑标签」对话框中添加计算参数
2.3.2 计算类型
- 公式计算
- 规程:指定参数所属专业规程(公共、结构、电气等)
- 类型:指定参数数据类型(数值、长度、面积等)
- 公式:基于关联字段编写计算公式,支持引用明细表/对应类别中的可用字段
- 百分比计算(仅明细表支持)
- Of:指定计算百分比的基准字段
- By:指定分组维度,默认按明细表总计计算,支持按排序分组字段统计占比
2.3.3 典型应用:房间占用率统计
在房间明细表与房间标记中,通过计算值实现容纳人数自动计算:
- 创建「占用率指标」共享参数(单位:㎡/人)
- 添加计算值参数「最大容纳人数」,公式为:
rounddown((面积 / 1㎡) / 占用率指标) - 可同时将该计算值嵌入房间标记族,实现图面实时标注
3. 有效公式语法规范
3.1 基础算术运算符
| 运算符 | 功能说明 | 示例 |
|---|---|---|
+ | 加法 | 总长度 = 高度 + 宽度 |
- | 减法 | 净体积 = 总体积 - 扣除体积 |
* | 乘法 | 面积 = 长度 * 宽度 |
/ | 除法 | 半长 = 总长 / 2 |
^ | 乘方(X的Y次方) | 半径平方 = 半径 ^ 2 |
3.2 数学函数库
3.2.1 对数、指数与通用函数
| 函数 | 功能说明 | 示例 |
|---|---|---|
log10() | 常用对数(以10为底) | 2 = log10(100) |
ln() | 自然对数(以e为底) | ln(x*y) = ln(x) + ln(y) |
exp(x) | e的x次幂 | exp(3) |
sqrt() | 平方根 | 4 = sqrt(16) |
abs() | 绝对值 | 2 = abs(-2) |
pi | 圆周率常量 | 圆面积 = pi * 半径^2 |
3.2.2 三角函数(默认弧度制)
| 函数 | 功能说明 |
|---|---|
sin() | 正弦 |
cos() | 余弦 |
tan() | 正切 |
asin() | 反正弦 |
acos() | 反余弦 |
atan() | 反正切 |
3.2.3 舍入函数
| 函数 | 功能说明 | 示例 |
|---|---|---|
round(x) | 四舍五入取整 | round(3.1)=3;round(3.5)=4;round(-3.7)=-4 |
roundup(x) | 向上取整(大于等于x的最小整数) | roundup(3.1)=4;roundup(-3.7)=-3 |
rounddown(x) | 向下取整(小于等于x的最大整数) | rounddown(3.7)=3;rounddown(-3.7)=-4 |
单位处理技巧:舍入函数仅支持无单位数值运算。带单位参数需先除以单位量纲转为纯数字,计算完成后再乘以单位恢复量纲,标准写法:
roundup(长度/1mm)*1mm
3.3 参数引用规则
- 大小写敏感:参数名严格区分大小写,如
Width与width视为不同参数,引用时需与定义完全一致 - 特殊字符处理:参数名含空格、横线等特殊字符时,需使用方括号
[]包裹,如[总长度-左侧] - 命名建议:参数命名避免使用减号
-,防止与减法运算符产生语法歧义 - 文本参数:公式中引用固定文本值需使用双引号包裹,如
"Q235钢材"
4. 条件语句用法
条件语句通过逻辑判断实现分支赋值,适用于控制参数分段取值、图元可见性、阵列数量边界保护等场景。
4.1 基础语法
IF(<条件表达式>, <条件为真时的结果>, <条件为假时的结果>)- 条件支持数值比较、参数引用、Yes/No参数判断
- 原生支持比较符:
<、>、=;不直接支持<=、>=,可通过NOT()逻辑间接实现,如NOT(a>b)等价于a<=b
4.2 布尔逻辑运算符
支持AND、OR、NOT三类布尔运算,用于组合多条件判断:
- 多条件同时满足:
IF(AND(x=1, y=2), 8, 3) - 多条件满足其一:
IF(OR(A=1, B=3), 8, 3) - 条件取反:
IF(NOT(长度>1000), 10, 20)
4.3 嵌套条件语句
支持多层IF嵌套,实现多分段取值逻辑:
IF(长度<35', 2'6", IF(长度<45', 3', IF(长度<55', 5', 8')))4.4 Yes/No 参数特殊用法
Yes/No(布尔)参数的公式可省略IF关键字,直接写条件表达式,结果自动对应「是/否」状态:
// 当长度大于40时参数为「是」,图元可见;否则为「否」,图元隐藏 MuntinVis = 长度 > 404.5 典型应用场景
- 阵列数量边界保护:Revit阵列数量必须≥2,通过条件语句避免计算值小于2导致建模报错
阵列数量 = IF(计算值 < 2, 2, 计算值) - 图元可见性控制:基于尺寸、类型参数控制构件的显示与隐藏
- 材料/规格分段选型:根据尺寸参数自动匹配对应规格与材质
5. 典型公式示例
以下示例源自Revit官方高级样例族(rac_advanced_sample_family.rfa,遮阳装置族),覆盖工程常用计算场景。
5.1 基础数学运算
| 参数名 | 公式 | 说明 |
|---|---|---|
| Shadow_Length | Mounting_Height - Window_Sill_Height | 计算遮阳所需阴影长度,为安装高度与窗台高度的差值 |
| Rel_Angle | 90° - Sun_Angle | 计算阳光相对角度,为后续三角函数计算提供输入 |
| Max_Louver_Spacing | Support_Length - (Support_Length * (Desired_Shading_Percent * 0.01)) | 根据遮阳百分比计算百叶最大允许间距 |
5.2 舍入与三角函数结合
| 参数名 | 公式 | 说明 |
|---|---|---|
| Support_Length | roundup((Shadow_Length/1mm) * tan(Rel_Angle)) * 1mm | 通过正切函数计算支座理论长度,向上取整到整毫米;先除以1mm转为无单位值计算,完成后乘以1mm恢复长度单位 |
5.3 条件语句应用
| 参数名 | 公式 | 说明 |
|---|---|---|
| Support_Hanger | Support_Length > 400mm | Yes/No参数,支座长度超过400mm时附加支座自动可见 |
| Shade_Factor | if(Desired_Shading_Percent<65,"Low",if(Desired_Shading_Percent<79,"Med",if(Desired_Shading_Percent<99,"High","Max."))) | 嵌套IF语句,根据遮阳百分比返回4档分级文本结果 |
5.4 阵列数量计算
注:Revit 2025之前版本强制要求阵列数量≥2,因此公式中加入
+1保证边界合规
| 参数名 | 公式 | 说明 |
|---|---|---|
| Number of Supports | (Length / Max_Support_Spacing) + 1 | 根据总长度与最大间距计算支座阵列数量 |
| Louver_Number | (Support_Length / Max_Louver_Spacing) + 1 | 计算百叶阵列的总数量 |
6. 最佳实践与注意事项
- 参数命名规范:采用英文+下划线命名规则,避免中文、空格、特殊符号,确保公式引用准确,降低维护成本
- 公式拆分原则:复杂逻辑拆分为多个中间参数分步计算,提升可读性与可调试性,避免单条公式过长
- 单位一致性校验:确保公式内参数单位匹配;涉及舍入运算时严格遵循「去单位-计算-恢复单位」的标准流程
- 边界条件防护:对除法、阵列、条件判断等场景增加边界值校验,避免除零错误、阵列数量不足等导致的族崩溃
- 适度使用条件语句:过度嵌套会提升族的维护难度,类型参数的差异化优先通过族类型实现,而非全量依赖条件公式
- 版本兼容性验证:阵列规则、函数支持度在不同Revit版本存在差异,跨版本交付族文件时需验证公式有效性