我开始使用此网站的剪贴图库:http://sourceforge.net/projects/polyclipping/
我在Unity(C#)工作。
一切都很好,工会,交叉点,差异......是的,差异,有一种情况,我不确定我做错了什么或算法无法正确处理。
我试图得到差异A-B,它应该看起来像图2中的那个),遗憾的是输出是网格A和网格B,如图1所示。
我做什么:
Clipper c = new Clipper();
c.AddPath(here goes the vertices of mesh A, polyType.Subject, true);
c.AddPath(here goes the vertices of mesh B, polyType.Clip, true);
c.Execute(ClipType.ctDIfference, a list of lists for my output, PolyFillType.NonZero, PolyFillType.NonZero);
我已经尝试更改PolyFillTypes,但它没有改变任何内容。在这里,我要求你的建议:)
编辑: 我想得到的(如图片中所示"预期结果")是带洞的网格。 我实际得到的是2元素列表列表与我作为输入完全相同的顶点所以当我从这些顶点创建网格时,没有一个带孔的网格,但是一个网格覆盖另一个和Z-Fighting。应该有一些功能,我可以用一个洞创建网格,但我无法找到它。正如我在GUIDEMO中看到的这个库的C#版本一样,我看到了地图(可能是澳大利亚),中间有一个切孔。
输入:顶点A(作为主题):( 0,0),(0,10),(10,10),(10,0)。
顶点B(作为剪辑):( 2,8),(6,8),(6,2),(2,2)。
输出完全相同:
List<List<IntPoint>>
是2元素并包含这两个列表您可以在上面看到。
答案 0 :(得分:1)
我得到的剪辑解决方案是:
(((10, 10),(0, 10),(0, 0),(10, 0)), ((2, 2),(2, 8),(6, 8),(6, 2)))
注意2条路径的不同方向。这表明内部路径是外部路径(多边形)的孔,具有非零或偶数填充规则。