GraphicsPath和Region - 交集

时间:2012-11-20 15:16:20

标签: c# gdi intersection

我编写了一个在给定路径上/上/下绘制字符串的程序。问题是我需要检查实际绘图字母和之前所有字母之间的交叉点。我做到了,它工作正常。唯一的问题是表现。

private void RemoveOverlapping(Graphics gr, float angle, float x, float y, GraphicsPath graphicsPath)
{
    Matrix matrix = new Matrix();
    for (;;)
    {
        matrix.Reset();
        matrix.RotateAt(angle, new PointF(x, y));
        graphicsPath.Transform(matrix);

        bool isOverlapping = false;
        Region letterRegion = new Region(graphicsPath);
        foreach (Region region in _previousRegions)
        {
            region.Intersect(letterRegion);

            if (!region.IsEmpty(gr))
            {
                matrix.Reset();
                matrix.RotateAt(360f - angle, new PointF(x, y));
                graphicsPath.Transform(matrix);

                matrix.Reset();
                matrix.Translate(1, 0);
                graphicsPath.Transform(matrix);

                isOverlapping = true;
                break;
            }
        }

        letterRegion.Dispose();

        if (!isOverlapping)
            return;
    }
}

我做了Alt+F2次测试,它告诉我region.IsEmpty()占用了大部分计算时间......有没有其他方法(没有实施其他算法)来检查两个Regions/GraphicsPaths交叉点?

它的样子如下:
writings

0 个答案:

没有答案