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