为什么我的 "waterproof" 多面体导致 "WARNING: Object may not be a valid 2-manifold and may need repair!"?

Why is my "waterproof" polyhedron causing "WARNING: Object may not be a valid 2-manifold and may need repair!"?

在脚本中

difference() {
    polyhedron(
        points=[[0,0,0],
            [2,0,0],
            [2,1,0],
            [0,1,0],
            [0,0,2],
            [0,1,2]],
        faces=[[0,1,2,3],
            [5,4,1,2],
            [5,4,0,3],
            [0,1,4],
            [2,3,5]]);
    cube([1,1,1]);
};

polyhedron 单独工作正常(呈现时没有警告),但添加上面的 cube 会导致记录警告 WARNING: Object may not be a valid 2-manifold and may need repair! 并且输出仅呈现部分一些表面。

我在 Ubuntu 16.04 上使用 OpenSCAD 2015.03-1。

这是因为您的 polyhedron 有些面孔指向错误的方向,导致计算 difference() 时出现问题。

详情见Manual and FAQ

更改受影响多边形的缠绕顺序可修复 polyhedron:

 difference() {
     polyhedron(
         points=[[0,0,0],
             [2,0,0],
             [2,1,0],
             [0,1,0],
             [0,0,2],
             [0,1,2]],
         faces=[[0,1,2,3],
             [2,1,4,5],
             [5,4,0,3],
             [0,4,1],
             [2,5,3]]);
     cube([1,1,1]);
 };

差异仍然是非流形的,因为切割 cube 会导致 2 个棱柱形物体仅在一个边缘接触。根据定义,这也不是 2-流形,因此警告仍然存在。

根据应该如何使用导出的模型,您可以选择忽略此警告,并希望处理 3d 模型的工具能够处理。

要解决这个问题,例如 cube 可以像 cube([1, 1, 0.999]) 一样小一点。

一个不相关但仍然有用的策略可以防止以后出现问题,那就是始终使切割对象大一点,以确保不会留下非常薄的平面,例如使用 cube([2,3,1.999], center = true)。这也将删除 display artifacts in preview mode.