//由顶点与长、宽、高画颜色为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 { string Text=System.Convert.ToString(a*(i+1)); int txtWidth=(int)objGraph.mGraphics.MeasureString(Text,this.mTe xtFont).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 { //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 { 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+pieHeig ht+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 { 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 curvePoints[i]=(Point)pList[i];
mGraphics.FillPolygon(Brush, curvePoints); //画边框 mGraphics.DrawPolygon(this.mBlackPen, curvePoints); //DrawText(text,Color.Black,this. } } #endregion
|