C# 计算GDI中描述曲线周围区域的点阵列+;
从一条定义为用户绘制的一系列点的曲线(下图左图)开始,我想导出描述该曲线周围区域的点。为此,我正在使用C# 计算GDI中描述曲线周围区域的点阵列+;,c#,winforms,gdi+,C#,Winforms,Gdi+,从一条定义为用户绘制的一系列点的曲线(下图左图)开始,我想导出描述该曲线周围区域的点。为此,我正在使用GraphisPath中的加宽函数,如下所示: PointF[] ComputeAreaAroundCurve(PointF[] curvePoints) { GraphicsPath gp = new GraphicsPath(); gp.AddLines(curvePoints); using(Pen pen = new Pen(Color.Black, 10))
GraphisPath
中的加宽
函数,如下所示:
PointF[] ComputeAreaAroundCurve(PointF[] curvePoints)
{
GraphicsPath gp = new GraphicsPath();
gp.AddLines(curvePoints);
using(Pen pen = new Pen(Color.Black, 10))
gp.Widen(pen);
return gp.PathPoints;
}
如果我画出结果,我会得到右边的图形,当然相交部分(红色箭头)不会被取下。你知道如何计算点f[]吗?绘制时,该点也会包含该部分
诀窍是使用两个
:
- 第一个是通过
调用获取轮廓点的一个。它必须处于(默认)填充模式加宽
Alternate
- 返回轮廓点
后,需要将它们添加到秒opp
。此模式必须设置为图形SPATH
填充模式。绕组
GraphicsPath
将填充包括交叉点在内的完整轮廓,并将报告内部的点以“可见”
gpWinding = new GraphicsPath();
gpWinding.FillMode = FillMode.Winding;
gpWinding.AddCurve(opp);
现在,鼠标单击
将起作用:
Text = gpWinding.IsVisible(e.Location) ? "Yes" : "No";
填充它将填充所有轮廓区域:
e.Graphics.FillPath(Brushes.DarkKhaki, gpWinding );
e.Graphics.DrawPath(Pens.White, gpWinding );
绘制路径时是否尝试过
FillMode.Winding
?是的,我在创建路径时尝试过FillMode.Winding,但没有更改。另外,请考虑我喜欢点数组,因为之后我需要执行其他操作(比如确定一个点是否包含在所描述的区域内)。