为什么我的“防水”多面体导致“警告:物体可能不是有效的2歧管,可能需要维修!”?

时间:2016-07-26 00:57:09

标签: 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]);
};

polyhedron工作正常(在没有警告的情况下呈现),但在上面添加cube会导致警告WARNING: Object may not be a valid 2-manifold and may need repair!被记录,输出仅渲染某些表面的某些部分

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

1 个答案:

答案 0 :(得分:4)

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

有关详细信息,请参阅ManualFAQ

更改受影响多边形的缠绕顺序可修复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)。这也将删除display artifacts in preview mode