c# - ClipperLib 用矩形剪辑多个正方形产生 1 个结果

标签 c# clipperlib

我正在使用 ClipperLib 的 C# 版本 v6.4.2。 我有很多正方形组成一个渔网。我也有一个矩形。 我想要得到的结果是,仅返回矩形内的正方形,并且部分重叠的正方形被剪掉。 主题为绿色,剪辑为红色: enter image description here

我得到的结果是棕色/灰色矩形,它只是一个多边形: enter image description here

我预计结果会是 15 个完整的方 block 和 13 个剪裁的方 block 。

这是我正在使用的代码:

var startX = 100;
var startY = 250;
const int numPolygons = 10;

var subj = new Polygons(numPolygons * numPolygons);
for (var i = 0; i < numPolygons; i++)
{
    for (var j = 0; j < numPolygons; j++)
    {
        var square = new Polygon(4)
        {
            new IntPoint(startX, startY),
            new IntPoint(startX + 10, startY),
            new IntPoint(startX + 10, startY - 10),
            new IntPoint(startX, startY - 10)
        };
        subj.Add(square);
        // Moving to the right
        startX = startX + 10;
    }
    // Moving down
    startY = startY - 10;
    startX = 100;
}

var clip = new Polygons(1);
clip.Add(new Polygon(4));
clip[0].Add(new IntPoint(165, 215));
clip[0].Add(new IntPoint(255, 215));
clip[0].Add(new IntPoint(255, 155));
clip[0].Add(new IntPoint(165, 155));

var solution = new Polygons();
var c = new Clipper.Clipper();
c.AddPaths(subj, PolyType.ptSubject, true);
c.AddPaths(clip, PolyType.ptClip, true);
c.Execute(ClipType.ctIntersection, solution, PolyFillType.pftEvenOdd, PolyFillType.pftEvenOdd);
Debug.WriteLine("solution.Count: " + solution.Count);

运行上述代码大约需要 0.5 秒。因为结果看起来剪辑和主题被切换了,所以我已经切换了它们。结果是一样的,但现在只需要0.1秒。所以做了一些额外的事情。我认为这是所得方 block 的合并。

我不希望结果合并。我怎样才能防止这种情况发生?或者我的代码有问题?

最佳答案

根据 Clipper documentation 执行方法的:

There are several things to note about the solution paths returned:

... polygons may rarely share a common edge (though this is now very rare as of version 6)

我认为这意味着在执行任何剪切操作时路径会被合并。

我尝试用不同的 PolyFillType 做同样的事情,但也没有成功。

您可能想尝试在每次迭代的剪切区域上分别对每个方 block (主题)运行 Execute 方法,这应该可以完成这项工作,但性能可能会因此受到影响。

关于c# - ClipperLib 用矩形剪辑多个正方形产生 1 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46235176/

相关文章:

c# - 日期时间字符串解析

C# 构建速度与 native C++

c# - Entity Framework Core 修改期间的临时值错误

c++ - 使用 Angus Johnsons 的 Clipper lib 中的 OffsetPolygon 时多边形中的奇数 "notches"

javascript - googlemaps 多边形与 clipper.js 的结合

c# - 在 C# 中创建和保存文件

c# - 这是什么类型的编码,我如何以编程方式生成它?

c++ - 将多边形坐标从 Double 转换为 Long 以用于 Clipper 库

python - pyclipper : Crash on trivial case ("terminate called throwing an exception")

c# - 剪辑如何在 Clipper 库中的多边形联合中工作