为什么我的“防水”多面体导致“警告:对象可能不是有效的 2 流形,可能需要修理!”?

Kar*_*ter 2 openscad

在脚本中

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]);
};
Run Code Online (Sandbox Code Playgroud)

polyhedron单独工作正常(没有警告被渲染),但加入cube上述原因警告WARNING: Object may not be a valid 2-manifold and may need repair!要记录和输出到呈现仅一些表面的某些部分。

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

小智 5

这是因为您polyhedron有一些面指向错误的方向,导致计算difference().

有关详细信息,请参阅手册常见问题解答

更改受影响多边形的缠绕顺序可修复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]);
 };
Run Code Online (Sandbox Code Playgroud)

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

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

为了解决这个问题,例如cube可以将cube([1, 1, 0.999]).

一个不相关但仍然有用的防止以后出现问题的策略是始终使切割对象大一点,以确保没有非常薄的平面,例如使用cube([2,3,1.999], center = true)。这也将删除预览模式中的显示伪像