2

在脚本中

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。

4

1 回答 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]);
 };

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

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

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

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

于 2016-07-26T07:08:37.607 回答