| |
用C#创建PDA应用程序的柱形图控件_开发者网络_C#,PDA |
|
时间: 2006-05-16 来自:天极开发 |
 |
|
编译自定义控件的运行时版本
1. 在解决方案资源管理器中,右击
Class1.cs 并单击"重命名"。
2. 重命名文件 PDAChartControlControl.cs。
注意
如果没有打开解决方案资源管理器,请单击"视图"菜单上的"解决方案资源管理器"。
用下列代码替换
PDAChartControlControl.cs 中的代码:
//***************************************************************************** //
PDAChartControlControl using System; using
System.Collections; using System.ComponentModel; using
System.Drawing; using System.Data; using
System.Windows.Forms; using System.Drawing.Drawing2D; #if
NETCFDESIGNTIME [assembly:
System.CF.Design.RuntimeAssemblyAttribute("PDAChartControl,
Version=1.10.0.0, _ Culture=neutral,
PublicKeyToken=null")] namespace PDAChartControl { ///
<summary> /// Summary description for UserControl1. ///
</summary> public class PDAChart :
System.Windows.Forms.Control { public
System.Windows.Forms.HScrollBar hScrollBar1;
///
<summary> /// Required designer variable. ///
</summary>
// Delegate declaration. // public delegate
void EventHandler(string text,Color BackColor,int Height); // //
//声明事件的委托: // //public delegate void MyEventHandler(string text,Color
BackColor,int Height); // //定义一个公共事件成员 // public event EventHandler
AddCube; // protected virtual void OnAddCube(EventArgs e) //
{ // // } // private PDAChartControl.MyGraph objGraph=new
MyGraph(); private Point mBeginPoint=new Point(0,0) ;
private
System.ComponentModel.Container components = null;
public
PDAChart() { InitializeComponent(); }
public enum
ChartTypeEnum { PillarChart, CakeChart ,BreakLinkChart};
#region
Windows 属性定义 private bool mhScrollBarVisible=true; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.DefaultValueAttribute(0)] [System.ComponentModel.Description("设置/读取滚动条是否可见")] #endif public
bool hScrollBarVisible { get { return
mhScrollBarVisible; } set { mhScrollBarVisible
=value; this.Invalidate(); } } private ChartTypeEnum
mChartType=ChartTypeEnum.PillarChart; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.DefaultValueAttribute(0)] [System.ComponentModel.Description("设置/读取图形类型")] #endif public
ChartTypeEnum ChartType { get { return
mChartType; } set { mChartType
=value; this.Invalidate(); } }
private int
mPicHeight=20; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.DefaultValueAttribute(0)] [System.ComponentModel.Description("设置/读取饼图高")] #endif public
int PicHeight { get { return
mPicHeight; } set { mPicHeight
=value; this.Invalidate(); } }
private Font mTitleFont
=new Font("Arial", 9, FontStyle.Regular);
#if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.Description("设置/读取文本字体")] #endif
public Font TitleFont { get { return
mTitleFont; } set { mTitleFont=value; this.Invalidate(); } }
private
Font mTextFont =new Font("Arial", 8, FontStyle.Regular); #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.Description("设置/读取文本字体")] #endif
public Font TextFont { get { return
mTextFont; } set { mTextFont=value; this.Invalidate(); } } private
static DataTable mDataTable=new DataTable() ; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.Description("设置/读取数据表")] #endif
public DataTable dataTable { get { return
mDataTable; } set { mDataTable=(DataTable)value; this.Invalidate(); } } private
string mShowColumnName; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.Description("设置/读取显示列")] #endif
public string ShowColumnName { get { return
mShowColumnName; } set { mShowColumnName=value; this.Invalidate(); } } private
string mDataColumnName; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.Description("设置/读取数据列")] #endif
public string DataColumnName { get { return
mDataColumnName; } set { mDataColumnName=value; this.Invalidate(); } }
private
string mTitle="统计图"; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")]
[System.ComponentModel.DefaultValueAttribute("图表")] [System.ComponentModel.Description("设置/读取标题")] #endif
public string Title { get { return
mTitle; } set { mTitle=value; this.Invalidate(); } }
private
ArrayList mCubeData; #if !NETCFDESIGNTIME //The actual Data used to
draw the line on the graph public ICollection
CubeData { get { return
mCubeData; } set { mCubeData = new
ArrayList(value); Rectangle rcClient =
this.ClientRectangle; Rectangle rcGraphClient = new
Rectangle(rcClient.X + 21, rcClient.Y + 5, rcClient.Width - 21,
rcClient.Height -
21); this.Invalidate(rcGraphClient); } } #endif
private
Color mBackColor=System.Drawing.SystemColors.ControlLight;
#if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.DefaultValueAttribute(0)] [System.ComponentModel.Description("设置/读取背景颜色")] #endif public
override Color BackColor { get { return
mBackColor; } set { mBackColor
=value; this.Invalidate(); } }
private Color
mAxesXColor=System.Drawing.SystemColors.HighlightText;
#if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.DefaultValueAttribute(0)] [System.ComponentModel.Description("设置/读取X轴颜色")] #endif public
Color AxesXColor { get { return
mAxesXColor; } set { mAxesXColor
=value; this.Invalidate(); } }
private Color
mAxesYColor=System.Drawing.SystemColors.Info; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.DefaultValueAttribute(0)] [System.ComponentModel.Description("设置/读取Y轴颜色")] #endif public
Color AxesYColor { get { return
mAxesYColor; } set { mAxesYColor
=value; this.Invalidate(); } }
private int mLenght =
4; #if NETCFDESIGNTIME // These design time attributes affect
appearance of this property in the property
grid. [System.ComponentModel.DefaultValueAttribute(5)] [System.ComponentModel.Description("立体长")] #endif //The
lower Y bound of the PDAChart public int
Lenght { get { return
mLenght; } set { mLenght =
value; this.Invalidate(); } } private int mMaxYValue
;//图表Y轴最大值 private int mMaxXValue ;//图表X轴最大值
private Color
mGridLineColor=System.Drawing.Color.Cyan; #if
NETCFDESIGNTIME [System.ComponentModel.Category("PDAChart")] [System.ComponentModel.Description("网格线的颜色.")] #endif //The
color of the line of the PDAChart. public Color
GridLineColor { get { return
mGridLineColor; } set { mGridLineColor
=value; this.Invalidate(); } } private bool mShowXText =
true; #if NETCFDESIGNTIME // These design time attributes affect
appearance of this property in the property
grid. [System.ComponentModel.Category("Chart")] [System.ComponentModel.DefaultValueAttribute(true)] [System.ComponentModel.Description("是否显示X轴的文本")] #endif //
If true, shows the Y-Values on the left of the PDAChart public bool
IsShowXText { get { return
mShowXText; } set { mShowXText =
value; this.Invalidate(); } } private bool mShowYText =
true; #if NETCFDESIGNTIME // These design time attributes affect
appearance of this property in the property
grid. [System.ComponentModel.Category("Chart")] [System.ComponentModel.DefaultValueAttribute(true)] [System.ComponentModel.Description("是否显示Y轴的数字")] #endif //
If true, shows the Y-Values on the left of the PDAChart public bool
IsShowYText { get { return
mShowYText; } set { mShowYText =
value; this.Invalidate(); } } private bool mShowXScale =
true; #if NETCFDESIGNTIME // These design time attributes affect
appearance of this property in the property
grid. [System.ComponentModel.Category("Chart")] [System.ComponentModel.DefaultValueAttribute(true)] [System.ComponentModel.Description("是否显示X轴的刻度.")] #endif //
If true, shows the X-Values on the bottom of the PDAChart public bool
IsShowXScale { get { return
mShowXScale; } set { mShowXScale =
value; this.Invalidate(); } }
private bool
mShowYScale = true; #if NETCFDESIGNTIME // These design time
attributes affect appearance of this property in the property
grid. [System.ComponentModel.Category("Chart")] [System.ComponentModel.DefaultValueAttribute(true)] [System.ComponentModel.Description("是否显示Y轴的刻度")] #endif //
If true, shows the Y-Values on the left of the PDAChart public bool
IsShowYScale { get { return
mShowYScale; } set { mShowYScale =
value; this.Invalidate(); } }
private bool mShowGrid =
true; #if NETCFDESIGNTIME // These design time attributes affect
appearance of this property in the property
grid. [System.ComponentModel.Category("Chart")] [System.ComponentModel.DefaultValueAttribute(false)] [System.ComponentModel.Description("是否显示网格线")] #endif //
If true, shows horiztonal grid lines on the PDAChart. public bool
IsShowGrid { get { return
mShowGrid; } set { mShowGrid =
value; this.Invalidate(); } } #endregion ///
<summary> /// Clean up any resources being used. ///
</summary> protected override void Dispose( bool disposing
) { if( disposing ) { if( components != null
) components.Dispose(); } base.Dispose( disposing
); }
#region Component Designer generated code ///
<summary> /// Required method for Designer support - do not
modify /// the contents of this method with the Code Editor. ///
</summary> private void InitializeComponent() { this.Paint
+= new
System.Windows.Forms.PaintEventHandler(this.OnPaint); this.hScrollBar1
= new System.Windows.Forms.HScrollBar(); this.hScrollBar1.Location =
new System.Drawing.Point(1, 100); this.hScrollBar1.Maximum =
1; this.hScrollBar1.LargeChange = 1; this.hScrollBar1.Size = new
System.Drawing.Size(100, 16); this.hScrollBar1.ValueChanged += new
System.EventHandler(this.hScrollBar1_ValueChanged);
this.Controls.Add(this.hScrollBar1); } #endregion // //
private ArrayList mCudeData;
protected override void
OnResize(EventArgs e) { //this.Refresh(); }
Graphics
mGraphics; Pen mBlackPen=new Pen(Color.Black); //偏差 int
TopHeightWarp=16; //顶偏差(文本高)
int LeftWidthWarp=0;
//左偏差(最大数据文本宽) int UnderHeightWarp=10; //底偏差(底文本高) int
BetweenLineHeight=10;//水平线的高 int LineCount=10;//水平线数
// //This
Paint function uses routines common to both platforms.
int
ClientHeight; int mWidth; int YHeight; Rectangle
rcClient; System.Drawing.Region Region1; public void OnPaint(object
sender, System.Windows.Forms.PaintEventArgs
e) { //base.Paint(null,e);
mGraphics=e.Graphics; //读取数据 this.rcClient =
this.ClientRectangle; Region1=new Region (
this.rcClient); Region1=Region1.Clone();
ClientHeight=rcClient.Height; objGraph.mGraphics=e.Graphics;
//mGraphics.MeasureString//
//计算最大的x轴、y轴坐标 CountMaxScaleXScaleY(); UnderHeightWarp=(int)objGraph.mGraphics.MeasureString("文本",this.mTextFont).Height+5; UnderHeightWarp+=this.hScrollBar1.Height;
//作图的范围区(开始点、长、宽、高) mBeginPoint.X
=this.ClientRectangle.X+LeftWidthWarp ; mBeginPoint.Y
=this.ClientRectangle.Y+rcClient.Height-UnderHeightWarp
;
//写标题 DrawTitle(rcClient); int
Width=rcClient.Width-this.mLenght-LeftWidthWarp; mWidth=Width; int
Height=rcClient.Height-this.mLenght-TopHeightWarp-UnderHeightWarp;
this.YHeight= Height; int Lenght=this.mLenght;
//设置流动条 // this.hScrollBar1.Location = new
System.Drawing.Point(0,
rcClient.Y+rcClient.Height); InitPage(); if
(this.hScrollBarVisible) { this.hScrollBar1.Left=0;
this.hScrollBar1.Top=rcClient.Height-this.hScrollBar1.Height ;
this.hScrollBar1.Maximum=this.PageCount-1;
if(rcClient.Width<246) this.hScrollBar1.Width=
rcClient.Width; else this.hScrollBar1.Width=246;
} else { this.hScrollBar1.Left=0;
this.hScrollBar1.Top=0 ; } //从此分别画图 if
(this.mMaxYValue>10) { //水平网络线
this.BetweenLineHeight=(int)objGraph.mGraphics.MeasureString("文本",this.mTextFont).Height;
this.LineCount=Height/BetweenLineHeight; } else { this.BetweenLineHeight=Height/10; //线数应该是能整
this.LineCount=10; } //画与它父相同背景颜色的区域,以隐藏角边 Color
ParentBackColor=Color.Brown;
objGraph.DrawRectangle(
ParentBackColor,new Point(0,0),rcClient.Width,rcClient.Height);
e.Graphics.DrawRectangle(new Pen(ParentBackColor), rcClient);
objGraph.DrawPDAChart(this.mGridLineColor,
this.mAxesXColor,this.mAxesYColor,_ this.mBackColor,mBeginPoint,Lenght,Width,Height,
this.mShowXScale,this.mShowYScale); //画线和左文本(内部左下点) Point
p=mBeginPoint; p.X+=this.mLenght; p.Y-=this.mLenght;
DrawGridLineAndTexts(p,Width); //mBeginPoint
//画矩形与写文本 //CreateCubes(mBeginPoint,Width,rcClient.Height); //mBeginPoint.X+=10;
CreatePageCubes(mBeginPoint,Width,ClientHeight);
DrawTitle(rcClient); }
}
//以左下坐标p,颜色color,长Lenght,宽Width,高Height,x轴文本textX,画立体图 public
void AddOneCube(string textX,Point p,Color color,int Lenght,int Width, int
Height) { try { objGraph.DrawCube
(color,p,Lenght,Width,Height); //文本 int
txtWidth=(int)objGraph.mGraphics.MeasureString(textX,mTextFont).Width;
int
txtHeight=(int)objGraph.mGraphics.MeasureString(textX,mTextFont).Height;
int
x=(p.X+Width/2)-txtWidth/2; int y=p.Y+txtHeight/2;
this.objGraph.DrawText(textX,Color.Black,this.mTextFont,x,y-5); } catch(Exception
ex) { string str=ex.Message; }}
//一页立方体图形个数 int
OnePageCubeCount=10; int CurrentPage=0;//当前页 int
PageCount=0;//多少页 //水平轴的相对值 int XScale; //Y轴的相对值 double
YScale=0.2;
Color[]
color={Color.Red,Color.Blue,Color.Green,Color.Yellow,Color.YellowGreen,Color.Magenta,_ Color.Cyan,Color.Coral,Color.SlateGray,Color.Pink,Color.Crimson,Color.DodgerBlue,Color.Chartreuse
};
//计算页 private void
InitPage() { if(this.OnePageCubeCount==0) return; if
(mDataTable.Rows.Count<OnePageCubeCount) this.OnePageCubeCount=mDataTable.Rows.Count
; if(this.OnePageCubeCount==0)
return; PageCount=mDataTable.Rows.Count/this.OnePageCubeCount; //水平轴的相对值 XScale=Width/this.OnePageCubeCount
; //Y轴的相对值 if(this.mMaxYValue<=0)
return; { if(this.mMaxYValue==0)
return; this.YScale=double.Parse(this.YHeight.ToString())/double.Parse(
this.mMaxYValue.ToString() ) ;//System.Math.
//this.YScale=double.Parse(this.YScale.ToString())/double.Parse(this.LineCount.ToString()
); } //
this.YScale=double.Parse(System.Convert.ToString(1))/double.Parse(
this.mMaxYValue.ToString() ) ;//System.Math. }
private void
hScrollBar1_ValueChanged(object sender, System.EventArgs
e) { //OnPaint(object sender, System.Windows.Forms.PaintEventArgs
e) //清画出的图 this.CurrentPage=hScrollBar1.Value; // if
(mGraphics.Clip==null) // { mGraphics=this.CreateGraphics
(); this.objGraph.mGraphics=mGraphics; //
} //mGraphics.Clip=this.Region1; //画矩形与写文本,最多一屏
//mGraphics.Clear(this.mBackColor) ; //mGraphics.ResetClip();
//CreatePageCubes(mBeginPoint,Width,ClientHeight);
System.Windows.Forms.PaintEventArgs e1=new PaintEventArgs(
mGraphics,this.rcClient); OnPaint(null,e1); } public void
NextPage() { this.objGraph.mGraphics=this.CreateGraphics
(); this.CurrentPage++; Bitmap bm = new
Bitmap(10,10); Graphics g = Graphics.FromImage(bm);
if
(this.CurrentPage>this.PageCount) this.CurrentPage--; //画矩形与写文本,最多一屏
//mGraphics.Clear(Color.Red) ; //mGraphics.ResetClip();
CreatePageCubes(mBeginPoint,Width,ClientHeight); }
//在左下顶点,宽Width,高Height建立立方体 private
void CreatePageCubes(Point BeginP ,int Width,int
Height) { if(mDataTable.Rows.Count==0) return; int
Between=10; switch(this.OnePageCubeCount) { case
1: Between= mWidth/2; break; case 2: Between=
mWidth/3; break; case 3: Between=
mWidth/4; break; case 4: Between=
mWidth/5; break; case 5: Between=
mWidth/6; break; case 6: Between=
mWidth/7; break; case 7: Between=
mWidth/8-1; break; case 8: Between=
mWidth/9-2; break; case
9: Between=mWidth/9-5; break; case
10: Between=mWidth/10-5; break; } int
RowIndex=this.OnePageCubeCount*this.CurrentPage; Point
p=BeginP;//dr. p.X-=8; for ( int i=0;i<this.OnePageCubeCount;i++
) { //p.X=
this.XScale*(i+1)+10; p.X+=Between+this.mLenght; double
CubeHeight=this.YScale*System.Convert.ToInt32(mDataTable.Rows[RowIndex][this.mDataColumnName]); //if
((p.X >= 0) && (p.X <= Width) && (p.Y >= 0)
&& (p.Y <= Height)) //{ string
text=mDataTable.Rows[RowIndex][this.mShowColumnName].ToString()
; string
Data=mDataTable.Rows[RowIndex][this.mDataColumnName].ToString() ; int
ColorIndex=RowIndex; if
(ColorIndex>=color.Length) ColorIndex=color.Length-1; if
(this.mShowXText==false) text=" ";
AddOneCube(text,p,color[i],this.mLenght,this.mLenght+4,System.Convert.ToInt32(CubeHeight));
//} RowIndex++; } }
//在左下顶点,宽Width,高Height建立立方体 private
void CreateCubes(Point BeginP ,int Width,int
Height) { if(mDataTable.Rows.Count==0) return; //水平轴的相对值 int
XScale=Width/mDataTable.Rows.Count
; //Y轴的相对值 if(this.mMaxYValue<=0) return; int
YScale=Height/(this.mMaxYValue*this.LineCount) ;
int
RowIndex=0; Color[]
color={Color.Red,Color.Blue,Color.Green,Color.Yellow,Color.YellowGreen,Color.Magenta,_ Color.Cyan,Color.Coral,Color.SlateGray,Color.Pink,Color.Crimson,Color.DodgerBlue,Color.Chartreuse
};
foreach(DataRow dr in
mDataTable.Rows) { RowIndex+=1; Point p=BeginP;//dr. p.X=
XScale*RowIndex+10; int
CubeHeight=YScale*System.Convert.ToInt32(dr[this.mDataColumnName]); if
((p.X >= 0) && (p.X <= Width) && (p.Y >= 0)
&& (p.Y <= Height)) { string
text=dr[this.mShowColumnName].ToString() ; string
Data=dr[this.mDataColumnName].ToString() ; int
ColorIndex=RowIndex; if
(ColorIndex>=color.Length) ColorIndex=color.Length-1; if
(this.mShowXText==false) text=" ";
AddOneCube(text,p,color[ColorIndex-1],this.mLenght,this.mLenght+5,CubeHeight);
//objGraph.DrawCube
(color,p,this.mLenght,Width,Height); } } } //计算最大的x、y轴坐标,左边文本宽,最小的线高 private
void CountMaxScaleXScaleY() { if(mDataTable.Rows.Count==0) return;
this.mMaxXValue=mDataTable.Rows.Count ;
this.mMaxYValue=0; //this.l. foreach(DataRow dr in
mDataTable.Rows) { int
CubeHeight=System.Convert.ToInt32(dr[this.mDataColumnName]); if
(mMaxYValue<CubeHeight) { mMaxYValue=CubeHeight; } int
TextWidth=(int)objGraph.mGraphics.MeasureString(System.Convert.ToDouble(
dr[this.mDataColumnName])._ ToString() ,this.mTextFont).Width+10;
if (LeftWidthWarp<TextWidth) { LeftWidthWarp=TextWidth;
} } //LeftWidthWarp+=10; } //在顶部中心位置写标题 private void
DrawTitle(Rectangle rcClient) { int
Width=(int)objGraph.mGraphics.MeasureString(this.mTitle,mTitleFont).Width;
int
Height=(int)objGraph.mGraphics.MeasureString(this.mTitle,mTitleFont).Height; this.TopHeightWarp=Height; int
x=rcClient.Width/2- Width/2; int y=rcClient.Y+Height/2-5;
this.objGraph.DrawText(this.mTitle,Color.Blue,mTitleFont,x,y);
}
//画所有水平网络线 //p:起始点;Width:线宽;BetweenHeight:二线之间高,Count:线数 //
private void DrawGridLineAndTexts(Point p,int Width) // { // for(int
i=0;i<this.LineCount;i++) // { //
DrawGridLineAndText(p,p,Width,Lenght); // p.Y-=BetweenHeight; //
} // }
//由顶点与长、宽、高画颜色为color,背景色为的BackColor图表(3D) private
void DrawGridLineAndTexts(Point p,int Width) {//是否显示网络水平线 if
(this.mShowGrid) { this.objGraph.DrawGridLines(this.mGridLineColor,p,Width-1,this.mLenght,this.BetweenLineHeight,this.LineCount); }
//是否显示左文本 if
(this.mShowYText) { Point p1=p;
//p1.X-=this.mLenght; p1.Y+=Lenght; double
a1=double.Parse(System.Convert.ToString(this.LineCount-1)); double
a2=double.Parse(this.mMaxYValue.ToString()); double
a=System.Math.Round(a2/a1,1);
for(int i=0;i<this.LineCount;i++)
{ string Text=System.Convert.ToString(a*(i+1)); int
txtWidth=(int)objGraph.mGraphics.MeasureString(Text,this.mTextFont).Width;
p1.X=p.X-txtWidth-this.mLenght;; p1.Y-=this.BetweenLineHeight;
this.objGraph.DrawText(Text,Color.Black,this.mTextFont,p1.X,p1.Y);
} } } //求数据列的和 private double SumColumn(DataTable
dt,string ColumnName) { double Sum=0.0; foreach(DataRow dr in
dt.Rows)
{ Sum+=System.Convert.ToDouble(dr[ColumnName]); } return
Sum; } }
#region public class
MyGraph { //网络水平线中二线之间的高 //int
BetweenLineHeight=20; //最大MaxYCount:线数 // int MaximumY=10; // int
Lenght=5; // int Width=200; // int Height=300; // bool
IsShowGrid=true;
public Graphics mGraphics;
//背景色 //
public Color BackColor= System.Drawing.SystemColors.Control; //
//X轴颜色 // public Color
AxesXColor=System.Drawing.SystemColors.HighlightText; // //Y轴颜色 //
public Color
AxesYColor=System.Drawing.SystemColors.Info;
//黑色笔 private Pen
mBlackPen = new
System.Drawing.Pen(Color.FromArgb(0,0,0)); //网格线笔 private Pen
mGridPen= new System.Drawing.Pen(Color.FromArgb(127, 127,
127)); //Color BackColor=
System.Drawing.Color.FromArgb(((System.Byte)(224)), ((System.Byte)(224)),
((System.Byte)(224)));
public
MyGraph() { //mGraphics=this.CreateGraphics(); // // TODO:
在此处添加构造函数逻辑 // }
//由左下顶点与宽、高画颜色为color的平行四边形 public void
DrawRectangle3DTop(Color color, Point LeftUnderPoint,int Width,int
Height) { try {
//计算左上顶点 Point p1=new Point
(); p1.X=LeftUnderPoint.X+Height; p1.Y=LeftUnderPoint.Y-Height;
//计算右上顶点 Point
p2=new Point
(); p2.X=LeftUnderPoint.X+Width+Height; p2.Y=LeftUnderPoint.Y-Height;
//计算右下顶点 Point
p3=new Point
(); p3.X=LeftUnderPoint.X+Width; p3.Y=LeftUnderPoint.Y; Point[]
curvePoints = { LeftUnderPoint, p1, p2, p3 };
//
Define fill mode. //FillMode newFillMode = FillMode.Winding; // Fill
polygon to screen. // Create solid brush. SolidBrush Brush = new
SolidBrush(color); mGraphics.FillPolygon(Brush,
curvePoints); //mGraphics.FillPolygon(Brush, curvePoints,
newFillMode); //画边框 mGraphics.DrawPolygon(this.mBlackPen,
curvePoints); } catch(Exception ex) { string
str=ex.Message; }
} //由左下顶点与宽、高画颜色为color的平等四边形 public void
DrawRectangle3DRight(Color color, Point LeftUnderPoint,int Width,int
Height) { try { // Create solid brush. SolidBrush Brush =
new SolidBrush(color);
//计算左上顶点 Point p1=new Point
(); p1.X=LeftUnderPoint.X; p1.Y=LeftUnderPoint.Y-Height;
//计算右上顶点 Point
p2=new Point
(); p2.X=p1.X+Width; p2.Y=p1.Y-Width;
//计算右下顶点 Point
p3=new Point
(); p3.X=LeftUnderPoint.X+Width; p3.Y=LeftUnderPoint.Y-Width; Point[]
curvePoints = { LeftUnderPoint, p1, p2, p3 };
//
Define fill mode. //FillMode newFillMode = FillMode.Winding; // Fill
polygon to screen. mGraphics.FillPolygon(Brush,
curvePoints); //画边框 mGraphics.DrawPolygon(this.mBlackPen,
curvePoints); //mGraphics.FillPolygon(Brush, curvePoints,
newFillMode); } catch(Exception ex) { string
str=ex.Message; } }
//由左上角顶点与宽、高画颜色为color的平行四边形 public
void DrawRectangle(Color color, Point P,int Width,int Height) {
Rectangle Rectangle1=new Rectangle( P.X,P.Y, Width,Height);
//
Create solid brush. SolidBrush Brush = new SolidBrush(color); //
Fill polygon to screen. mGraphics.FillRectangle(Brush,
Rectangle1);
//画边框 mGraphics.DrawRectangle(this.mBlackPen,Rectangle1);
}
//由左下顶点与长、宽、高画颜色为color的立方图形(3D) public
void DrawCube(Color color, Point LeftUnderPoint,int Lenght,int Width,int
Height) { // Create solid brush. SolidBrush Brush = new
SolidBrush(color);
Point LeftTopPoint=
LeftUnderPoint; LeftTopPoint.Y-=
Height;
DrawRectangle3DTop(color,LeftTopPoint,Width,Lenght); DrawRectangle(color,LeftTopPoint,Width,Height);
Point
RightP=LeftUnderPoint; RightP.X+=Width;
DrawRectangle3DRight(Color.Black,RightP,Lenght,Height);
}
//画X轴 public void DrawAxesX(Color color, Point p,int
Width,int
Height) { DrawRectangle3DTop(color,p,Width,Height); }
//画Y轴 public
void DrawAxesY(Color color, Point p,int Width,int
Height) { DrawRectangle3DRight(color,p,Width,Height); }
//由顶点与长、宽、高画颜色为color,背景色为的BackColor图表(3D) public
void DrawPDAChart(Color GridLineColor,Color AxesXColor,Color
AxesYColor,_ Color BackColor,Point p,int Lenght,int Width,int
Height,bool IsShowAxesX,bool
IsShowAxesY) { if(IsShowAxesX) { //画X轴
DrawAxesX(AxesXColor,p,Width,Lenght); } if(IsShowAxesY) { //画Y轴
DrawAxesY(AxesYColor,p,Lenght,Height); }
////画图形区 Point
pRectangle=p;
pRectangle.X+=Lenght; pRectangle.Y-=Lenght; pRectangle.Y-=Height; DrawRectangle(BackColor,pRectangle,Width,Height); } //画一条水平网络线与对应的折线 public
void DrawGridLine(Color GridLineColor,Point p,int Width,int Lenght) {
//Draw the Y scale; Point EndP=p; EndP.X+=Width; Pen pen=new
Pen(
GridLineColor); //this.mGraphics.DrawLine(pen,p,EndP); //水平线 this.mGraphics.DrawLine(pen,p.X,p.Y,EndP.X,EndP.Y
);
//左折线 this.mGraphics.DrawLine(pen,p.X,p.Y,EndP.X-Lenght,EndP.Y+Lenght
);
} //画所有水平网络线 //p:起始点;Width:线宽;BetweenHeight:二线之间高,Count:线数 public
void DrawGridLines(Color GridLineColor,Point p,int Width,int Lenght,int
BetweenHeight,int Count) { Pen pen=new Pen(
GridLineColor); for(int i=0;i<Count;i++)
{ //DrawGridLine(GridLineColor,p,Width,Lenght);
//水平线 this.mGraphics.DrawLine(pen,p.X,p.Y,p.X+Width,p.Y );
//左折线 this.mGraphics.DrawLine(pen,p.X-Lenght+1,p.Y+Lenght,p.X,p.Y);
p.Y-=BetweenHeight;
} }
//在位置(x,y)处以颜色color、字体font写文本text public void
DrawText(string text,Color color, Font font,int x,int y) { // Create
solid brush. SolidBrush Brush = new
SolidBrush(color); this.mGraphics.DrawString(text, font, Brush, x
,y); }
//由点p(矩形左上角点),宽pieWidth,高pieHeight,颜色color画馅饼图
public void DrawCake(Color color,Point p,int pieWidth,int
pieLenght,int pieHeight) { Pen PenBlack=new Pen(
Color.Black); //黑色最下面的椭圓 Rectangle rc1 =new
Rectangle(p.X,p.Y+pieHeight,pieWidth,pieLenght);
this.mGraphics.DrawEllipse(PenBlack,rc1);
SolidBrush objBrush =
new SolidBrush(color);
for(int
i=0;i<pieHeight;i++) { this.mGraphics.FillEllipse(objBrush,p.X,p.Y+i,pieWidth,pieLenght); } //黑色最上面的椭圓 Rectangle
rc =new Rectangle(p.X,p.Y,pieWidth,pieLenght);
this.mGraphics.DrawEllipse(PenBlack,rc);
this.mGraphics.DrawLine(
PenBlack,p.X,p.Y+pieLenght/2,p.X,p.Y+pieHeight+pieLenght/2);
this.mGraphics.DrawLine(
PenBlack,p.X+pieWidth,p.Y+pieLenght/2,p.X+pieWidth,p.Y+pieHeight+pieLenght/2);
}
//求隋圆任意一点x坐标的相对点 //角angle,中心点oPoint,a,长半轴,b,短半轴 public
double GetEllipsePX(double angle,int a,int b) { //角 double
radians = angle * (Math.PI/180); double px=a*System.Math.Cos(radians) ;
return
px; }
//求隋圆任意一点y坐标的相对点 //角angle,中心点oPoint,a,长半轴,b,短半轴 public
double GetEllipsePY(double angle,int a,int b) { //角 double
radians = angle * (Math.PI/180); double py=b*System.Math.Sin(radians);
return py;
}
//画线椭圆线 //角angle,中心点oPoint,a,长半轴,b,短半轴 public void
DrawEllipseLine(double angle,Point oPoint,int a,int b) {
int
px=System.Convert.ToInt32(GetEllipsePX(angle,a,b))+oPoint.X ; int
py=System.Convert.ToInt32(GetEllipsePY(angle,a,b))+oPoint.Y ;
Pen
PenBlack=new Pen( Color.Black);
this.mGraphics.DrawLine(
PenBlack,oPoint.X,oPoint.Y,px,py);
//e.Graphics.DrawLine(
PenBlack,oPoint.X,oPoint.Y,oPoint.X+b,oPoint.Y);
} //取扇形的点集(逆时针) //角angle,已经画过的角FinishAngle,中心点oPoint,长半轴a,短半轴b public
ArrayList GetPicPoints(double angle,double FinishAngle,Point oPoint,int
a,int b) { //Point[System.Convert.ToInt32(angle)] curvePoints=new
Array() ; //以步长为1求扇形弧线的坐标点 ArrayList pList=new ArrayList()
; pList.Add(oPoint); //pList.Add(ArcStartPoint);
for(int
i=0;i<System.Convert.ToInt32(angle);i++) { int
px=System.Convert.ToInt32(GetEllipsePX(i+FinishAngle,a,b))+oPoint.X
; int
py=System.Convert.ToInt32(GetEllipsePY(i+FinishAngle,a,b))+oPoint.Y
; pList.Add(new Point(px,py));
//curvePoints.SetValue( } return
pList; }
//画扇形(逆时针) //角度angle,已经画过的角FinishAngle,中心点oPoint,长半轴a,短半轴b public
void DrawPDAPic(Color color, string text,double angle,double
FinishAngle,Point oPoint,int a,int b) { // Create solid
brush. SolidBrush Brush = new SolidBrush(color); ArrayList
pList=GetPicPoints(angle,FinishAngle,oPoint,a,b); Point[]
curvePoints=new Point[pList.Count] ; for(int
i=0;i<pList.Count;i++) curvePoints[i]=(Point)pList[i];
mGraphics.FillPolygon(Brush,
curvePoints); //画边框 mGraphics.DrawPolygon(this.mBlackPen,
curvePoints); //DrawText(text,Color.Black,this.
} } #endregion |
|
|
|
|
|
|
|
|