【问题标题】:Howto make holes in cubes with openscad / for-loop?如何使用openscad / for-loop在立方体上打孔?
【发布时间】:2020-12-25 03:52:46
【问题描述】:

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

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 时,孔是正确的。

【问题讨论】:

  • 由于旋转不同,圆柱体的坐标偏离了。当首先在原点周围的方便位置组合部件并最后移动到位时,事情会更容易,例如 rotate([0,0,z]) translate([57,0,-5]) difference() { cube(center =真,[5,10,10]);旋转([0,90,0])圆柱(6,2,2,中心=真); } }

标签: for-loop rotation cube openscad


【解决方案1】:

所以主循环会定位你的长方体围绕原点旋转 角度是 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);
    };
}

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-09
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    相关资源
    最近更新 更多