我想在每个立方体上打一个洞。 这是代码:
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);
为什么
rotate([90,90,z]) translate([6,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])
{
cube(center=true,[5,10,10]);
rotate([0,90,0]) translate([0,0,-5]) cylinder(r=2,h=10,$fn=100);
};
}
现在您知道位置是正确的,您可以应用 bool 差并获得每个长方体中心的孔:
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) ;
}
}
您可以找到所有code for this here .
关于for-loop - 如何使用 openscad/for-loop 在立方体上打洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65445132/