For loop 如何使用openscad/for循环在立方体中打洞?

For loop 如何使用openscad/for循环在立方体中打洞?,for-loop,rotation,cube,openscad,For Loop,Rotation,Cube,Openscad,我想在每个立方体上打个洞。 代码如下: y=45; for (i=[1:8]){ z = y*i; difference(){ rotate([0,0,z]) translate([57,0,-5]) cube(center = true,[5,10,10]); rotate([90,90,z]) translate([6,0,-60]) cylinder(5,2,2); } } // This is a reference,

我想在每个立方体上打个洞。 代码如下:

y=45;
for (i=[1:8]){
    z = y*i;
    difference(){
        rotate([0,0,z]) translate([57,0,-5]) cube(center = true,[5,10,10]);
        rotate([90,90,z]) translate([6,0,-60]) cylinder(5,2,2);  
    }
    
}
// This is a reference, translate([6,0,-60]) is correct position
rotate([90,90,z]) translate([16,0,-60]) cylinder(5,2,2); 
为什么

不在for循环中工作?
z
手动设置为45、90、135、180…315时,孔是正确的。

因此主回路将定位围绕原点旋转的长方体 以45度倍数的角度。在循环中,你 现在我们要画长方体,然后,相对于 在每个长方体的位置上,再进行一些变换(旋转) 和平移)以使圆柱体通过 长方体(如果圆柱体的高度大于 长方体的侧面,以便您可以实际看到它穿过):

现在您知道位置是正确的,可以应用布尔差分并获得每个长方体中心的孔:

y=45;
for (i=[1:8]){
    z = y*i;    
    rotate([0,0,z]) translate([57,0,-5])
    difference() {
        cube(center=true,[5,10,10]);
        rotate([0,90,0]) translate([0,0,-5]) cylinder(r=2,h=10,$fn=100) ;
    }
}



您可以发现,由于旋转不同,圆柱体的所有。

坐标都相差很远。首先在原点附近的一个方便位置组合零件,最后移动到位,就像旋转([0,0,z])平移([57,0,-5])差({cube(center=true,[5,10,10]);旋转([0,90,0])圆柱体(6,2,2,center=true);}
y=45;
for (i=[1:8]){
    z = y*i;    
    rotate([0,0,z]) translate([57,0,-5])
    {
        cube(center=true,[5,10,10]);
        rotate([0,90,0]) translate([0,0,-5]) cylinder(r=2,h=10,$fn=100);
    };
}
y=45;
for (i=[1:8]){
    z = y*i;    
    rotate([0,0,z]) translate([57,0,-5])
    difference() {
        cube(center=true,[5,10,10]);
        rotate([0,90,0]) translate([0,0,-5]) cylinder(r=2,h=10,$fn=100) ;
    }
}