文章来源:垒知科技集团
文/郭昊然
说起Revit里的族公式和函数,大家对此肯定既熟悉又陌生,如“+”、“-”、“*”、“/”等基本的数学运算公式,大家已经非常了解了,但当我们随意打解一个系统的弯头族后,却发现族中的参数异常复杂,到底哪些参数代表什么意思,有什么语法规范、怎么用呢?本篇文章将带你深度了解Revit族中所有的公式、函数的含义和用法。
弯头族
我们将族中的公式和函数大体分为两类:一是计算类公式,二是逻辑类公式。
注意,所有的公式都需要在英文模式下进行编写。
01计算类公式
在Revit族中,计算类公式理解起来非常容易,几乎多数的表达方式都和中学数学里表达方式一样,例如:
一个简单的长方体,赋予尺寸参数:“长度”、“宽度”、“高度”,通过“+”、“-”、“*”、“/”来进行计算与长度有关的参数。
与角度相关的参数:
正弦 – sin,余弦 – cos,正切 – tan,反正弦 – asin,反余弦 – acos,反正切 – atan。值得注意的是反正弦、余弦、正切和中学数学中表达的arcsin、arccos、arctan不同,在Revit中,a即代表arc。
在创建参数的时候,在“参数类型”中将对应的正函数和反函数类型改为“数值”和“角度”,保证单位一致。
角度参数中我们用的最多的就是“坡度”这个参数,坡度是坡度角的正切值,例如:道路表面坡度i=0.017455,那么计算其角度的公式就为:atan(i) 得出角度为1度。
※其他计算公式:
①指数 —— ^:x^y,x 的 y 次方
②对数 —— log
③平方根—— sqrt
在公式中输入sqrt(9)后,根据当前项目文件单位,系统会自动在数值之后添加面积单位。如m²,得出的结果为3000,单位毫米。
④绝对值—— abs
当角度为-20°时,通过 abs(角度) 得到角度绝对值为20°
以上为常用的计算类公式,重点在于参数类型的选择和通常数学表达方式的区别,比较容易掌握。
02逻辑类公式(条件语句)
逻辑类公式类似于计算机C语言,多数是一种通用表达式,例如“and”、“or”、“not”、“if”等,使用此类语句时,Revit会根据编写的语句是否满足指定条件来输出相应的参数值。
①if语句:
if (<条件>,<条件为真时的结果>,<条件为假时的结果>)
这表示输入的参数值取决于是满足条件(真)还是不满足条件(假)。如果条件为真,则返回条件为真时的值。如果条件为假,则返回条件为假时的值。
例如:我们想要约束窗户的尺寸,避免我们输入错误的长度导致系统报错,窗户的长度在500-2000mm之间,超过极限便返回极值,公式如下:if(长度 < 500 mm, 500 mm, 长度);if(长度 > 2000 mm, 2000 mm, 长度),逐字翻译就是:如果你输入的长度值小于500mm,那么就返回500mm这个值,如果大于或等于500mm,那么就返回你的输入值;如果输入值大于2000mm,则输出2000mm,否则就返回输入值。这便达到了我们约束长度的目的。
值得注意的是,无法在“长度”参数中的公式下约束“长度”参数,必须创建新的“长度约束”参数来约束“长度”参数,否则会报错。
②布尔运算符“and”、“or”、“not”
“and”为“和”的意义,即逻辑“与”、“且”,常见的表达式:
and(长=500,宽=1000)意思是长和宽必须同时满足等式,缺一不可。
我们将其带入if语句:
if(and(长度=1000,宽度=2000),1500,长度) 逐字翻译就是:如果输入的长度为1000,并且输入的宽度为2000,则输出1500,否则按照你输入的长度值输出。
“or”为“或”的意义,我们将上述公式中的“and”替换为“or”:
if(or(长度=1000,宽度=2000),1500,长度) 逐字翻译就是:如果输入的长度为1000,或者你输入的宽度为2000,则都输出1500,否则按照你输入的长度值输出。
“not”运算符与上述两种判断不同,“not”的第一种用法用于“小于等于”或“大于等于”用,在Revit公式中,是没有“<=”和“>=”这种表达方法的,如果想表达 “长度小于等于500”的话,应该这样表达:“not(长度>500)”。第二种表达方法适用于判断两者的真假,例如解关是“解”还是“关”、“有”还是“无”、“进”还是“出”等,都是两者之间判断其一。
举例说明:我们创建一个解关,要求在模型上可以自由选择“合闸”和“分闸”两种状态,我们的第一步便是在模型上创建两组解关,一组可见性赋予参数“合闸”,另一组可见性赋予参数“分闸”。
然后在参数中,在“合闸”后添加公式“not(分闸)”
可以看到,在“值”这一栏,仅留有“分闸”处于勾选状态,而“合闸”已经默认变为灰色不能勾选状态了。
我们把解关载入到任意项目文件中去,结果如下图所示。
※其他计算公式:
Revit中取整数,例如我们的百叶窗的叶片数量是根据窗户的高度来定的,如何通过阵列创建整数个叶片就必须用到以下公式:
四舍五入:round(X)
如round(12.3) = 12
round(4.5) = 5
round(-7.8) = -8
向上取整:roundup(X)
roundup(3) = 3
roundup(4.2) = 5
roundup(-3.8) = -3
向下取整:rounddown(X)
rounddown(3) = 3
rounddown(3.7) = 3
rounddown(-3.7) = -4
总结:在Revit族环境中,常用的族公式和函数其实本质上并不难理解,重要的是编写格式是否正确,规则是否闭环,参数是否靠谱。既然能用算法解决的问题,何必再花费人力去做呢?建模时间少一点,陪家人时间多一点。
转载请注明来源本文地址:https://m.tuituisoft/bim/22945.html