【发布时间】:2013-07-12 12:45:47
【问题描述】:
我有一个 win forms 应用程序,我可以在其中绘制一些形状(如矩形/圆形),也可以用颜色填充它们。 现在,如果我选择了一个画笔来填充一个形状(比如矩形)并单击形状的“边界”(在这种情况下我不想填充形状), 我如何检测到“点”在形状的边界(我的意思是“边缘”)上。
【问题讨论】:
我有一个 win forms 应用程序,我可以在其中绘制一些形状(如矩形/圆形),也可以用颜色填充它们。 现在,如果我选择了一个画笔来填充一个形状(比如矩形)并单击形状的“边界”(在这种情况下我不想填充形状), 我如何检测到“点”在形状的边界(我的意思是“边缘”)上。
【问题讨论】:
将您的形状表示为 GraphicsPath,然后使用 IsOutlineVisible 确定该点是否在轮廓下方。
IsVisible() 方法会告诉您该点是否在整个 GraphicsPath 内。
【讨论】:
您有 2 个形状位置坐标。
shape.X
shape.Y
你也有形状的大小
shape.Height
shape.Width
你有鼠标位置的坐标
mouse.X
mouse.Y
如果 mouse.X 介于 shape.X 和 shape.X+shape.Width 之间,并且 mouse.Y 等于 shape.Y 或 shape.Y+shape.Heigh 等矩形
对于不同但“常规”的形状,您应该以类似的方式计算它
对于复杂和不规则的形状,您应该将其分解为小块并进行相同的计算:
检查这个:determine if a point sits inside an arbitrary shape?
如果形状可以转换为位图,另一种方法可能是检查像素颜色,但这只有在形状边缘颜色与形状中的其他像素不同时才有效
【讨论】: