// X and Y axis g.DrawLine(pen, 0, 0, 200, 0); g.DrawLine(pen, 0, 0, 0, 200); g.Clip = new Region(new Rectangle(1,1, 200,200)); //<------- Point[] curves = new Point[]{ new Point(-50, -50), new Point(10, 10), new Point(20, 30), new Point(30, 20), new Point(40, -20), new Point(50, 40), new Point(100,00), new Point(120, -50) }; g.FillClosedCurve(Brushes.PeachPuff, curves); } }
Alternate 指定交替填充模式。
Winding 指定环绕填充模式。 备注
应用程序使用以下两个填充模式之一填充路径的内部:交替或环绕。该模式确定如何填充和剪辑闭合图形的内部。默认模式是 Alternate。为在交替模式中确定闭合图形的内部,绘制一条从路径中的任意起始点到明显位于路径外的某一点的直线。如果该直线跨过奇数个路径段,则起始点位于闭合区域内并且因此是填充或剪辑区域的一部分。如果该直线跨过偶数个路径段,则表明该起始点不位于要被填充或剪辑的区域内。通过使用直线将最后一点与图形的第一点相连接,填充或剪辑开放的图形。Winding 模式考虑路径段在每个交叉处的方向。它为每一顺时针交叉加一,为每一逆时针交叉减一。如果结果非零,则认为该点在填充或剪辑区域的内部。计数为零意味着该点在填充或剪辑区域的外部。基于所绘制的图形的各片断的顺序判断一个图形是顺时针还是逆时针的。
我就是画了一条曲线。//画X轴
objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor), 1), 100, Height - 100, Width - 75, Height - 100);private void SetXAxis(ref Graphics objGraphics)
{
int x1 = 100;
int y1 = Height - 110;
int x2 = 100;
int y2 = Height - 90;
int iCount = 0;
int iSliceCount = 1;
float Scale = 0;
int iWidth = (int)((Width - 200) * (50 / XSlice)); objGraphics.DrawString(Keys[0].ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), 85, Height - 90); for (int i = 0; i <= iWidth; i += 10)
{
Scale = i * (XSlice / 50); if (iCount == 5)
{
objGraphics.DrawLine(new Pen(new SolidBrush(AxisColor)), x1 + Scale, y1, x2 + Scale, y2);
//The Point!?里?示X?刻度
if (iSliceCount <= Keys.Length - 1)
{
objGraphics.DrawString(Keys[iSliceCount].ToString(), new Font("宋体", 10), new SolidBrush(SliceTextColor), x1 + Scale - 15, y2);
}
else
{
//超?范?,不画任何刻度文字
}
iCount = 0;
iSliceCount++;
if (x1 + Scale > Width - 100)
{
break;
}
}
else
{
objGraphics.DrawLine(new Pen(new SolidBrush(SliceColor)), x1 + Scale, y1 + 5, x2 + Scale, y2 - 5);
}
iCount++;
}
}我又在图上画了条曲线。我想把X轴和我画的曲线中间的空白的地方添上颜色。
protected override void OnPaint(PaintEventArgs e)
{
Graphics g = e.Graphics;
g.TranslateTransform(this.ClientRectangle.Width/2, this.ClientRectangle.Height/2);
using( Pen pen = new Pen( Color.DarkGray ) )
{
pen.EndCap = System.Drawing.Drawing2D.LineCap.ArrowAnchor;
// X and Y axis
g.DrawLine(pen, 0, 0, 200, 0);
g.DrawLine(pen, 0, 0, 0, 200); g.Clip = new Region(new Rectangle(1,1, 200,200)); //<------- Point[] curves = new Point[]{
new Point(-50, -50),
new Point(10, 10),
new Point(20, 30),
new Point(30, 20),
new Point(40, -20),
new Point(50, 40),
new Point(100,00),
new Point(120, -50)
};
g.FillClosedCurve(Brushes.PeachPuff, curves);
}
}