块与控制流
循环(FOR、FOREACH、WHILE)、条件选择(IF)以及您自己的函数,用于生成单条命令无法生成的几何图形:能放下多少就放多少的一排孔、围绕圆周的图案、由重复特征组成的零件。
它们与其他命令一样是图纸的一部分:按您编写的样子保存在图纸文件中,并且保持参数化。每当图纸发生变化,块都会从头重新运行:更改 L、移动某个点或更改块使用的变量,它生成的内容都会相应地重新生成。
BEGIN … END
循环重复执行的语句或条件选择的语句写在 BEGIN 和 END 之间:
FOR I = 1 TO 5 BEGIN
P10 = [I * 50, 100]
P11 = P10 + [0, 40]
LINE P10, P11
END
- 与其他地方一样,每行一条语句;也可以在一行中写多条,用
;分隔:FOR I = 1 TO 5 BEGIN P10 = [I * 50, 100] ; P11 = P10 + [0, 40] ; LINE P10, P11 END。这是在 交互窗口中输入块的快捷方式(也可以在其中按 Shift+Enter 换行)。 - 在括号
( )、[ ]、{ }内,语句可以跨行。 //开始注释,直到行尾:可以单独占一行,也可以写在语句之后。- 块可以任意层级嵌套。
块如何运行
在块中,语句像程序一样依次运行:
- 赋值将变量或点设置为其当前的值:
N = N + 1使 N 加一,P10 = [I * 50, 100]将 P10 放在本次循环中的位置。 - 图元(LINE、ARC、CIRCLE、TEXT、FILL……)根据点当时的位置立即生成:下一次循环可以移动 P10,而不会移动已经生成的直线。
- 在图元需要点的地方,可以使用带位置的名称:
LINE Q, R从位置 Q 画到位置 R。
块能看到图纸的变量和点,但它设置的内容属于它自己:块中设置的 P10 不是图纸的 P10,块中的 L = 100 只在块的剩余部分改变 L。设置 #CL(当前图层)可以选择块此后生成的图元所在的图层。
块也能看到图纸的图元,因此可以沿图元进行处理:块中的 ONELEMENT(@12,I/N)、LENGTHOF(@12) 和其他图元函数会随图元的变化而跟随(缝线工具就是这样沿线放置缝孔的)。
块生成的内容
块生成的内容与图纸一起绘制、导出和打印,每条曲线位于各自的图层上,与零件的内容一样,并带有其图元的线宽以及 BRIDGES、TOOL 和 RULE 设置(请参阅图元设置)。不过,这些内容属于块:其曲线不是图纸的图元,因此不能逐个选取、捕捉或标注尺寸。选择块即选择其全部内容。其文字以轮廓形式绘制。
语句
| 语句 | 作用 |
|---|---|
| FOR | 对一串数字中的每一个运行一次块。 |
| FOREACH | 对若干点或值中的每一个运行一次块。 |
| WHILE | 在某条件为真时反复运行块。 |
| IF | 运行一个块、另一个块或再另一个块:第一个条件为真的块。 |
| FUNCTION | 您自己的函数:计算出一个值,或生成几何图形,或两者兼有。 |
| FUNCTION … JAVASCRIPT | 用 JavaScript 编写的您自己的函数。 |
| CALL | 绘制函数的几何图形。 |
BREAK |
跳出所在的循环。 |
CONTINUE |
进入所在循环的下一次循环。 |
RETURN |
离开函数(带返回值:RETURN expression)或块。 |
出错时
在交互窗口中输入的块会立即运行;如果出错(使用了未知的名称、某个点不是位置),会显示原因及出错的行,并且不会添加该块。
永不结束的循环会在执行一百万条语句后停止;无限调用自身的函数会在嵌套 100 层时停止。之后(图纸变化时)出错的块会绘制它在出错之前生成的内容。