我正在使用Clipper的c#版本。我想用一个封闭的剪辑路径剪切一个封闭的subj路径,但结果是多个打开的行。例如,切片将星形描述为具有长矩形的两个部分,但是subj形状的两边留下的是两条开放线。
在这个clipping question中,安格斯说要剪裁的线必须打开才能打开结果。有没有办法用两个封闭的路径进行剪切操作?作为一种解决方法,我想我可以对两个封闭路径做一个简单的区别,然后遍历结果。每次我找到一个未包含在subj路径中的顶点,然后用下一个vert开始一个新路径。当我到达最后,加入第一条路径到最后找到的路径的末尾。还有另一种方式吗?
答案 0 :(得分:0)
Path s = new Path();
s.Add(new IntPoint(10, 40));
s.Add(new IntPoint(40, 40));
s.Add(new IntPoint(50, 10));
s.Add(new IntPoint(60, 40));
s.Add(new IntPoint(90, 40));
s.Add(new IntPoint(65, 60));
s.Add(new IntPoint(75, 90));
s.Add(new IntPoint(50, 70));
s.Add(new IntPoint(25, 90));
s.Add(new IntPoint(35, 60));
Path c = new Path();
c.Add(new IntPoint(49, 0));
c.Add(new IntPoint(51, 0));
c.Add(new IntPoint(51, 100));
c.Add(new IntPoint(49, 100));
Paths solution = new Paths();
Clipper cpr = new Clipper();
cpr.AddPath(s, PolyType.ptSubject, true);
cpr.AddPath(c, PolyType.ptClip, true);
cpr.Execute(ClipType.ctDifference, solution, PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd);
答案 1 :(得分:0)
更好的解决方法是将它们转换为开放路径并附加第一个顶点。然后,您可以将它们作为开放路径处理,同时它们仍然表示相同的折线。这样,您就不会再次遍历多边形。