问题描述
我有一个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)。该图看起来像这样:
由于在上述方法中路径被扩展了10个像素,因此许多点可能会重叠。 是否有一种优雅的方法来减少点数?当然,我可以每提取大约10个点,并从它们中创建一个GraphicsPath
,但是这会忽略密集的点云或尖锐的边缘。就像您可以在AddCurve
上使用GraphicsPath
,从几个点上画出一条漂亮的曲线;但是相反。我也对允许我选择绘制图形的不同方法持开放态度。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)