【问题标题】:OpenSCAD difference/intersection not workingOpenSCAD 差异/交叉点不起作用
【发布时间】:2023-04-07 10:13:01
【问题描述】:

如果 y == 0,我试图创建一个差异,但是当我将最后一个“立方体”放入其中时,它会填充不应该填充的形状的其他部分,它甚至不会切掉它应该。但是,当我注释掉最终的立方体时,它可以正常工作(除非它显然没有最后的区别)。我尝试过使用 openscad.net 和该软件。它们都具有相同的效果。我做错了什么?

With cube uncommented

With cube commented

s = 20+8; //Block size in mm

l = 2; //In "blocks"
w = 2; //In "blocks"
h = 40; //In mm

t = 1;

for (x = [0:l-1]) {
    for (y = [0:w-1]) {
        translate([s*x-s*l/2, s*y-s*w/2, -h/2]) {
            if (x==0) {
                translate([-s*(2/28)-t, s*(16/28)+t/2, 0]) {
                    cube([s*(2/28)+t, s*(8/28)-t, h]);
                }
                translate([-s*(4/28), s*(14/28)+t/2, 0]) {
                    cube([s*(2/28)-t, s*(12/28)-t, h]);
                }
            }
            if (x==l-1) {
                translate([s, s*(4/28)+t/2, 0]) {
                    cube([s*(2/28)+t, s*(8/28)-t, h]);
                }
                translate([s+s*(2/28)+t, s*(2/28)+t/2, 0]) {
                    cube([s*(2/28)-t, s*(12/28)-t, h]);
                }
            }
            if (y==0) {
                translate([s*(4/28)+t/2, -s*(2/28)-t, 0]) {
                    cube([s*(8/28)-t, s*(2/28)+t, h]);
                }
                translate([s*(2/28)+t/2, -s*(4/28), 0]) {
                    cube([s*(12/28)-t, s*(2/28)-t, h]);
                }
            }
            difference() {
                cube([s, s, h]);
                intersection() {
                    if (x == 0) {
                        translate([0, s*(4/28), 0]) {
                            cube([s*(2/28), s*(8/28), h]);
                        }
                        translate([s*(2/28), s*(2/28), 0]) {
                            cube([s*(2/28), s*(12/28), h]);
                        }
                    }
                    if (x==l-1) {
                        translate([s-s*(4/28), s*(14/28), 0]) {
                            cube([s*(2/28), s*(12/28), h]);
                        }
                        translate([s-s*(2/28), s*(16/28), 0]) {
                            cube([s*(2/28), s*(8/28), h]);
                        }
                    }
                    if (y==0) {
                        translate([s*(14/28), -s*(4/28), 0]) {
                            cube([s*(12/28), s*(2/28), h]);
                        }
                    }
                }
            }
        }
    }
}

【问题讨论】:

    标签: modeling cad 3d-modelling 3d-model openscad


    【解决方案1】:

    您的结果的原因似乎是当y==0 时,您的交集导致一个空对象,因此没有减去任何内容。 如果您将您的设计精简为一个展示此行为的较小示例,那么调试起来会容易得多。 提示:您可以使用 #% 运算符突出显示对象以进行调试(# 将其包含在 CSG 树中,% 将其从 CSG 树中删除)。

    【讨论】:

      【解决方案2】:

      为了补充 kintel 的答案,我认为您打算在第 38 行做一个union(),也将东西放入module 对将来重用或更新内容有很大帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-29
        • 2020-01-31
        • 1970-01-01
        • 1970-01-01
        • 2021-03-20
        • 2014-11-11
        相关资源
        最近更新 更多