Chapter 2 表达式
对象的很多属性的输入栏很强大,尤其是那些保存尺寸值的,它们既可以接受明文数值,也可以接受数学表达式后演算出它的值。
如果你的系统设置里是公制单位,但是有一部分尺寸你只知道英制值,那可以像这样直接输入:
6 in
它会把带单位的英制值转换成毫米数字,然后保存在输入框里。这种强大的功能在 FreeCAD 各处都有效。让我们多花一点时间,了解一下表达式系统的运作机制,以及怎样使用表达式编辑器。
FreeCAD 可以保存表达式,然后在必要的时候重新演算出一个值。如果一个输入栏右上角有个蓝色阳文提示符 ,这个属性就既可以既接受表达式也可以接受明文数值作为输入。
如果提示符是蓝色阴文 ,表示这个输入框里已经有一个表达式了,不接受直接输入新的明文数值。
要输入或编辑表达式,可以点击蓝色提示符,也可以直接敲等号键。这时编辑器会打开一个小悬浮窗口。你一边输入表达式,解算器一边尝试实时地演算出当前的值,把它显示在屏幕上。解算器会自动检测错误,编辑器也拒绝接受不完整的表达式。
2.1 运算符
如你所愿,输入框可以接受标准数学运算符 \((+-/*)\)。运算符还能识别出单位,所以下面这样的表达式有效:
2in + 16mm
同样支持用括号表达运算的优先级:
(2mm + 3mm) / 2.4 + 8mm
2.2 函数
表达式支持很多种函数:
- 数学函数: sqrt, round, trunc, log, log10, mod, pow
- 三角函数: such as cos, tan, sin, acos, atan, asin
- 集合函数: min, max, count, sum, stddev, and average
- 数学常数: pi, e
sqrt(19.2)
2.3 引用 spreadsheet
通过 Spreadsheet 工作台,你可以创建一个数据表,给某个单元填入一个值,然后可以通过表达式来引用这个单元格的内容,就像:
Spreadsheet.B4
这个例子中,表达式会指向 B4,接受它里面的任何内容。
我们将在第 6 章更深入地讲解 spreadsheet 链接。
2.4 条件分支
表达式可以含有条件语句,它会根据情况,当条件为真时返回一个值,条件为假时返回另一个值。条件语句一般含有比较运算符(==, !=, >, <, >=, 和 <=)。
条件语句的格式为:
= [条件语句] ? [条件为真时的值] : [条件为假时的值]
例如,创建一个立方体,像下面那样根据长度条件,设置它的宽度属性。
Cube.Length == 10mm ? 20 : 50
这样,如果长度为 10mm 的话,宽度就是 20,否则其他情况下宽度都是 50。
2.4.1 引用其他文档
可以在一个表达式里引用其他文档中的元素。
首先,创建文档,保存,再关闭当前文档,然后重新打开这个你想引用的主文档。在这之后,你可以继续编辑这个文档,但是在做任何引用之前,你应该已经建好了这个文档的名字。假设我将要引用的文档被保存为 “masterdoc.fcstd”。
masterdoc#Spreadsheet.B4
这个功能虽然很强大,但是要注意几点:
- 如果你在文档之间做了链接,不要重命名和移动文档,那会破坏链接的表达式。
- 表达式解算器在演算跨文档的链接的时候,受到大家都清楚的某种限制。你会发现解算器一直在提示表达式“不合法”,直到你输入完了最后一个字符,它才变成合法的。
- 一般来说,我们建议你避免使用跨文档的链接表达式。
FreeCAD 表达式功能还在发展的路上。去 Wiki 页面看看,那里讲了它的更多用法和使用限制。 https://www.freecadweb.org/wiki/Expressions