首页 > 解决方案 > openscad 范围问题 a=a+1 解决方法

问题描述

令我惊讶的是,OpenSCAD 用户手册指出:

不,你仍然不能做 a=a+1;

那么解决方法是什么?

我有多个嵌套的 for 循环,我想在最内层循环中更改位置:

module all(width,length,height) {
  x=0;
  y=0;
  z=0;
  for(with_left = [0:1:1]) {
    for(with_right = [0:1:1]) {
      for(with_opposite = [0:1:1]) {
        for(with_bottom = [0:1:1]) {
          for(with_45 = [0:1:1]) {
            translate([x,y,z]){
              rotate([0, 0, 0]){
                ejcorner(width, length, height, with_left,with_right,with_opposite,with_bottom,with_45);
              }
            }
            x=x+20;
            if (x>200) {
              y=y+20;
            }
            echo(str("x: ",x," y: ",y));
          }
        }
      }
    }
  }
}

目前我得到:

ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"
ECHO: "x: 20 y: 0"

标签: scopeopenscad

解决方案


你可以用数学来做,类似于下面的代码片段。

function is_bit_set(x, b) = floor(x / pow(2, b)) % 2;

for (a = [0:1:63]) {
    with_45 = is_bit_set(a, 0);
    with_bottom = is_bit_set(a, 1);
    with_left = is_bit_set(a, 4);
    x = (20 * a) % 220;
    y = 20 * floor(a / 11);
    echo(x = x, y = y, l = with_left, b = with_bottom, w45 = with_45);
}

推荐阅读