循环根据某个数值在一个数组中或者在一个范围。
数组版本(句法描述): for( 变量 =< 数组 >) < 运行做一些事情 >-< 变量 > 是指定每一个成功的数值在数组中。
范围版本(句法描述): for( 变量 =< 范围 >) < 运行做一些事情 >
范围: [< 开始 >:< 结束 >]- 循环包含从开始到结束。同样的工作如果 if< 结束 > 是小于 < 开始 >.
范围: [< 开始 >:< 增量 >< 结束 >]- 循环从开始到结束并使用给出的增量累计。增量可以是一个分数,几分之几。
注解:增量是给出的就像是一个绝对数值并且不能够是负数。如果 < 结束 > 是小于 < 开始 > 增量必须保持不变。
注意:如果增量不是一个偶数的除数从 < 开始 > 到 < 结束 > ,循环数值在最后的循环中将会是 < 结束 >- ( < 结束 >-< 开始 > mod< 增量 >).
嵌套式循环: for( 变量 1 = < 范围或者数组 > , 变量 2 = < 范围和数组 > ) < 运行做一些事情 , 使用全部变量 >
for 循环可以被嵌套,就像是一个常规的程序。一个速记是每个循环可以给出同样的阐述。
OpenSCAD 循环通过一个数组
实例 1- 循环通过一个数组:
color("cadetblue")
for (z = [-1,1]) // two iterations, z = -1, z = 1
{
translate([0,0,z])
cube(size = 1, center = false);
}
OpenSCAD 循环通过一个范围
实例 2a- 循环通过一个范围:
color("tomato")
for (i=[0:5])
{
rotate( i*360/6, [1,0,0])
translate([0,10,0])
sphere(r=1,$fn=100);
}
解释:旋转的角度,因为默认的增量是正整数,从 1 到 5 ,然后,如果选择 i*360/6 ,结果是 60 度,而360/5 是 72 度,和增量一样,所以等分,如果是 360/8 ,那么就会是 45 度,会每间隔 45 度有一个模型,而有一个多余的,在负方向,所以可能是系统默认的, 0 ,或者是起始吧!
OpenSCAD 循环通过一个范围配置一个增量
实例 2b- 循环通过一个范围配置一个增量:
// 注解:中间的参数在范围内指定
// ( '0.2' 这个例子)是一个‘增量’数值
// 注意: 取决于 ' 增量 ' 数值,实际的结束数值将会小于给出的那个。
color("rosybrown")
for (i=[0:0.2:5])
{
rotate(i*360/6,[1,0,0])
translate([0,10,0])
sphere(r=1,$fn=100);
}
解释:为什么没有成一个完整的环形,需要计算,因为增量是 0.2 ,从 0 到 5 一共增量 25 次,而系统模型给出的是 i*360/6, 角度就是 60 度,而系统却 是呈现出紧密的排序,如果是 360/8 ,那么排序就会更紧密,而完全平均排开是( 360/25 ) *5 ,得出是 72 度,那 么360/5 正好得到 72 度,或者 更简单的方法就是增量的正数是多少,角度旋转就是 360/ 多少,这样就可以等分了。
循环通过一个数组的一个数组(方旋转)
实例 3- 循环通过一个数组的一个数组(方旋转):
color("slateblue")
for(i = [
[0,0,0],
[10,20,300],
[200,40,57],
[20,88,57] ])
{
rotate(i)
cube([100,20,20], center=true);
}
// 意思就是旋转立方体 [100,20,20], 四次,
// 旋转角度 [x, y, z] 分别是循环中的数组的数值。
循环通过一个数组的数组(位移或者说置位)
实例 4- 循环通过一个数组的数组(位移或者说置位):
for(i = [
[0,0,0],
[10,12,10],
[20,24,20],
[30,36,30],
[20,48,40],
[10,60,50] ])
{
translate(i)
cube([50,15,10],center=true);
}
这个就容易理解多了,循环每一个不同坐标位置的数组,立方体模型尺寸 [50,15,10].
|