“ GraphicsPath”上的稀疏点

问题描述

我有一个UserControl,它使用GraphicsPath绘制图形。该路径仅创建一次,其副本可以由GetGraph检索。我希望能够通过在一定范围内单击来选择图形,因此我创建了Region并使用了IsVisible方法。我用下面的代码解决了这个问题。

protected override void OnMouseClick(MouseEventArgs e)
{
    using (System.Drawing.drawing2d.GraphicsPath graph = GetGraph())
    using (Pen p1 = new Pen(Color.Black,10))
    {
        p1.LineJoin = System.Drawing.drawing2d.LineJoin.Round;
        graph.Widen(p1);

        Region graphRegion = new Region(graph);
        isSelected = graphRegion.IsVisible(e.Location.X,e.Location.Y);
        OnGraphSelectedChanged(EventArgs.Empty);
    }

    base.OnMouseClick(e);
}

问题在于,IsVisible方法在路径包含很多点时需要花费几秒钟的时间。在我的情况下,得分为10,000,而graph.Widen得分更高(超过60,000)。该图看起来像这样:

1

由于在上述方法中路径被扩展了10个像素,因此许多点可能会重叠。 是否有一种优雅的方法来减少点数?当然,我可以每提取大约10个点,并从它们中创建一个GraphicsPath,但是这会忽略密集的点云或尖锐的边缘。就像您可以在AddCurve上使用GraphicsPath,从几个点上画出一条漂亮的曲线;但是相反。我也对允许我选择绘制图形的不同方法持开放态度。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)