为什么 OpenSCAD 无法在与墙的宽度完全相同的多边形边上切孔?

3D打印 opencad
2021-05-15 19:15:10

我正在尝试为平版画制作一个框架,我计划在母亲节为我的妻子 3D 打印它。我通常会让我的差异恰好是正确的大小(而不是为了预览而放大它)因为它让我对我的数学有多准确有一个很好的感觉(特别是当我考虑到由从喷嘴出来的压缩长丝)。

然而,在这种情况下,它又回来咬我了。我调试了这个问题很长一段时间,假设我计算错误或者我以某种方式混淆了我的旋转顺序。

最终,我加大了我的切口,果然,孔正确地出现了。在戳它之后,我意识到我只需要0.000005 mm在我的切口的两侧才能正确渲染!

我在这里创建了我的问题的最小可重现示例:

outerRadius = 100;
height = 40;

wallWidth = 2;

innerRadius = outerRadius - wallWidth / sin(60);
apothem = innerRadius * cos(180 / 6);

// change this to 0 and see what happens!!
holeSizeCorrection = 0.00001;

module holes() {
    for (face = [0:5]) {
        rotate([0, 0, face * 60 + 30])
            translate([apothem - holeSizeCorrection / 2, 0, height / 2])
                rotate([0, 90, 0])
                    cylinder(h = wallWidth + holeSizeCorrection, r = height / 4, $fn = 4);
    }    
}

color("orange") difference() {
    $fn = 6;
    
    cylinder(h = height, r = outerRadius);
    
    translate([0, 0, -height/4]) // because if it's exactly right, you can't see inside
        cylinder(h = height * 2, r = innerRadius);

    color("blue") holes();
}

当我试图在多边形中切出的孔正好是墙的宽度时,它会正确呈现预览但呈现的输出不正确。为了验证形状是否正确,我将孔从差异中移出,它看起来像这样: 在此处输入图片说明

预览(除了通常发生的奇怪的精确切割问题)也是正确的。但是,当我渲染它时,它看起来像这样: 在此处输入图片说明

但是,如果我0.000005 mm在两边都有孔形状,它会呈现得很好! 在此处输入图片说明

既然我知道要寻找这种东西,将来可能会节省我的调试时间。:) 但是,很高兴知道我是否也做错了什么。

1个回答

openSCAD 只允许具有导致壁厚为 0 的表面解决方案。墙壁似乎在这些区域中,有时可以从两侧看到,例如您的示例:

一个 0 厚度的墙剪

0 厚度的墙也可以作为一组三角形导出到 STL 中,这些三角形由彼此平面中的顶点旋转,但两侧的法向向量倒置 - 这意味着该构造存在于计算机中 - 我已经使用了这个在全息图效果的 3D 设计中,即使它不会导致物理上可能的属性集。

这种效果的一个例子是这个立方体(用搅拌机制作),它的后壁是紫色的,所有其他的都是灰色的 - 内壁与后壁的 X 值相同。尽管它的法线指向 +X,而紫色墙的法线指向 -X,您仍会看到灰色墙的剪裁

在此处输入图片说明

通过让你的千篇一律不仅挤压到而且穿过后墙,你强制一个解决方案,不允许 0 表面解决方案,从而解决了创建这些人工的问题

请注意,0 面墙仍然存在于切片器预览中:

在此处输入图片说明 在此处输入图片说明

但请放心:几乎所有切片器都会忽略太薄而无法打印的墙,尤其是 0 厚度的墙会被忽略:

在此处输入图片说明