Alekin

叮叮当当、久炼成钢;太平将近、我往西方

博客园 首页 新随笔 联系 订阅 管理
public class CSChart 
    

        
private int ypercent;  //纵坐标分段数 
        private int xpercent;  //横坐标分段数 
        private int width;     //绘图区宽 
        private int height;    //绘图区高 
        private bool xcenter; //是不以X轴Y轴交点作为X轴的起始坐标点 
        private int xpercentvalue;//X轴每段表示的值 
        private int ypercentvalue;//Y轴每段表示的值 
        private int xstartvalue;//X轴超始值 
        private int ystartvalue;//Y轴起始值 
        private int xlinelength;//X轴长 
        private int ylinelength;//Y轴长 
        private string xname;//X辆名 
        private string yname;//Y轴名 
        private int[] data;  //绘图数据 
        private Graphics gt; //绘图设备 
        public int[] Data 
        

            
set 
            

                data
=value; 
            }
 
            
get 
            

                
return data; 
            }
 
        }

        
public Graphics g 
        

            
set 
            

                gt
=value; 
            }
 
            
get 
            

                
return gt; 
            }
 
        }
 
        
public int YPercent 
        

            
set 
            

                ypercent
=value; 
            }
 
            
get 
            

                
return ypercent; 
            }
 
    
        }
 

        
public int XPercent 
        

            
set 
            

                xpercent
=value; 
            }
 
            
get 
            

                
return xpercent; 
            }
 
        }
 
        
public int XPercentValue 
        

            
set 
            

                xpercentvalue
=value; 
            }
 
            
get 
            

                
return xpercentvalue; 
            }
 
        }
 
        
public int YPercentValue 
        

            
set 
            

                ypercentvalue
=value; 
            }
 
            
get 
            

                
return ypercentvalue; 
            }
 
        }
 
        
public int XStartValue 
        

            
set 
            

                xstartvalue
=value; 
            }
 
            
get 
            

                
return xstartvalue; 
            }
 

        }
 
        
public int YStartValue 
        

            
set 
            

                ystartvalue
=value; 
            }
 
            
get 
            

                
return ystartvalue; 
            }
 

        }
 

        
public int XLineLength 
        

            
set 
            

                xlinelength
=value; 
            }
 
            
get 
            

                
return xlinelength; 
            }
 
        }
 
        
public int YLineLength 
        

            
set 
            

                ylinelength
=value; 
            }
 
            
get 
            

                
return ylinelength; 
            }
 
        }
 


        
public string XName 
        

            
set 
            

                xname
=value; 
            }
 
            
get 
            

                
return xname; 
            }
 
        }
 
        
public string YName 
        

            
set 
            

                yname
=value; 
            }
 
            
get 
            

                
return yname; 
            }
 
        }
 
        
public int Width 
        

            
set{width=value;} 
            
get{return width;} 
        }
 
        
public int Height 
        

            
set{height=value;} 
            
get{return height;} 
        }

        
public bool Xcenter
        
{
            
set{xcenter=value;}
            
get{return xcenter;}
        }

        
public CSChart() 
        

            
// 
            
// TODO: 在此处添加构造函数逻辑 
            
// 
            xpercent=13
            ypercent
=12
            width
=600
            height
=500
            xpercentvalue
=1
            ypercentvalue
=10
            xstartvalue
=1990
            ystartvalue
=0
            yname
="资金"
            xname
="月份"
            xcenter
=false
            xlinelength
=400
            ylinelength
=400
            data 
= new int[12]{80,50,48,56,75,21,62,12,45,110,90,20}
        }

        
public CSChart(int _xpercent,int _ypercent,int _width,int _height,int _xpercentvalue,int _ypercentvalue,int _xstartvalue,int _ystartvalue,string _xname,string _yname,bool _xcenter,int _xlinelength,int _ylinelength,int[] _data)
        
{
            xpercent
=_xpercent;
            ypercent
=_ypercent;
            width
=_width;
            height
=_height;
            XPercentValue
=_xpercentvalue;
            YPercentValue
=_ypercentvalue;
            xstartvalue
=_xstartvalue;
            ystartvalue
=_ystartvalue;
            xname
=_xname;
            yname
=_yname;
            xcenter
=_xcenter;
            xlinelength
=_xlinelength;
            ylinelength
=_ylinelength;
            data
=_data;
        }

        
public void DrawCross(Brush brush,int linewidth,bool center) 
        


            Pen CrossPen 
= new Pen(brush,linewidth); 
            Font font 
= new Font("宋体",10); 
            xcenter
=center; 
            g.DrawLine(CrossPen,
80,Height-80,80+XLineLength,Height-80);//画X轴 
            Point[] Points = new Point[3];//定义X轴箭头 
            Points[0].X=80+XLineLength;Points[0].Y=Height-85
            Points[
1].X=80+XLineLength;Points[1].Y=Height-75
            Points[
2].X=100+XLineLength;Points[2].Y=Height-80
            g.FillPolygon(brush,Points); 
//画X轴箭头 
            g.DrawString(XName,font,brush,100+XLineLength,Height-80);//X轴名 
            if(Xcenter) 
            

                
for(int i=0;i<xpercent;i++
                

                    g.DrawLine(CrossPen,
80+XLineLength/XPercent/2+i*XLineLength/XPercent,Height-80,80+XLineLength/XPercent/2+i*XLineLength/XPercent,Height-76);//画X轴单位点 
                    g.DrawString(Convert.ToString(XStartValue+i*XPercentValue),font,new SolidBrush(Color.Black),80+XLineLength/XPercent/2+i*XLineLength/XPercent-XStartValue.ToString().Length*font.Size/2,Height-75);//画X轴坐标值 
            
                }
 
            }
 
            
else 
            

                
for(int i=0;i<xpercent;i++
                

                    g.DrawLine(CrossPen,
80+i*XLineLength/XPercent,height-80,80+i*XLineLength/XPercent,Height-76);//画X轴单位点 
                    g.DrawString(Convert.ToString(XStartValue+i*XPercentValue),font,new SolidBrush(Color.Black),80+i*XLineLength/XPercent-XStartValue.ToString().Length*font.Size/2,Height-75);//画X轴坐标值 
            
                }
 
            }
 
            g.DrawLine(CrossPen,
80,Height-80,80,Height-80-YLineLength);//画Y轴 
            Points[0].X=75;Points[0].Y=Height-80-YLineLength; //Y轴箭头 
            Points[1].X=85;Points[1].Y=Height-80-YLineLength; 
            Points[
2].X=80;Points[2].Y=Height-100-YLineLength; 
            g.FillPolygon(brush,Points);
//画Y轴箭头 
            g.DrawString(yname,font,brush,85,Height-80-YLineLength);//画Y轴名 
            for(int i=0;i<ypercent;i++
            

                g.DrawLine(CrossPen,
80,Height-80-i*YLineLength/YPercent,76,Height-80-i*YLineLength/YPercent);//画Y轴单位点 
                g.DrawString(Convert.ToString(YStartValue+i*YPercentValue),font,new SolidBrush(Color.Black),50,Height-85-i*YLineLength/YPercent);//画X轴坐标值 
            }
 
        }
 
        
public void DrawChartName(string name,Font font,Brush brush)//画统计表头(名) 
        
            g.DrawString(name,font,brush,(Width
-name.Length*font.Size)/2,30); 
        }
 
        
public void DrawChart(int[] data,Graphics g) 
        
{
            
/*private int ypercent;  //纵坐标分段数 
                private int xpercent;  //横坐标分段数 
                private int width;     //绘图区宽 
                private int height;    //绘图区高 
                private bool xcenter; //是不以X轴Y轴交点作为X轴的起始坐标点 
                private int xpercentvalue;//X轴每段表示的值 
                private int ypercentvalue;//Y轴每段表示的值 
                private int xstartvalue;//X轴超始值 
                private int ystartvalue;//Y轴起始值 
                private int xlinelength;//X轴长 
                private int ylinelength;//Y轴长 
                private string xname;//X辆名 
                private string yname;//Y轴名 
                private int[] data;  //绘图数据 
                private Graphics gt; //绘图设备 
             * 
             * 
             * 
*/

            Brush brush 
= new SolidBrush(Color.Black); 
            Pen CrossPen 
= new Pen(brush,2); 
            g.DrawLine(CrossPen,
100,50,100,YLineLength+50); //y 轴
            g.DrawLine(CrossPen,100,YLineLength+50,100+XLineLength,YLineLength+50); //x 轴
            Point[] HPoints = new Point[3]; 
            HPoints[
0].X=95;HPoints[0].Y=50
            HPoints[
1].X=105;HPoints[1].Y=50
            HPoints[
2].X=100;HPoints[2].Y=30

            Point[] YPoints 
= new Point[3]; 
            YPoints[
0].X=100+XLineLength;YPoints[0].Y=YLineLength+45
            YPoints[
1].X=100+XLineLength;YPoints[1].Y=YLineLength+55
            YPoints[
2].X=120+XLineLength;YPoints[2].Y=YLineLength+50
            g.FillPolygon(brush,HPoints); 
            g.FillPolygon(brush,YPoints); 
            
int y=0;
            
int x=0;
            
for(int i=0;i<ypercent;i++
            

                g.DrawLine(CrossPen,
96,YLineLength+50-(YLineLength/YPercent)*i,100,YLineLength+50-(YLineLength/YPercent)*i); //在y轴上标点
                y=i*ypercentvalue; 
                g.DrawString(y.ToString(),
new Font("宋体",10),brush,75,YLineLength+45-i*(YLineLength/YPercent)); 
            }
 
            
for(int i=0;i<xpercent;i++
            

                g.DrawLine(CrossPen,
100+i*(XLineLength/XPercent),YLineLength+50,100+i*(XLineLength/XPercent),YLineLength+54);//在x轴上标点
                x=i*xpercentvalue+1;
                g.DrawString(x.ToString(),
new Font("宋体",10),brush,95+i*(XLineLength/XPercent),YLineLength+60); 
            }
 
            g.DrawString(xname,
new Font("宋体",10),brush,XLineLength+100,YLineLength+70); 
            g.DrawString(yname,
new Font("宋体",10),brush,105,50); 
            
for(int i=0;i<data.Length;i++
            

                
int hight =300*data[i]/100
                g.FillRectangle(
new SolidBrush(Color.Red),new Rectangle(100+i*(XLineLength/XPercent)+(XLineLength/XPercent/2-10),YLineLength+50-hight,20,hight)); 
            }
 
        }
 
        
public bool SetData(int[] newdata) 
        

            
if(newdata.Length==xpercent) 
            

                data
=newdata; 
                
return true
            }
 
            
else 
                
return false
        }
 
        
public void DrawLineData(Color color,int linewidth) 
        

            Pen pen 
= new Pen(new SolidBrush(color),linewidth); 
            Point[] points 
= new Point[XPercent]; 
            
for(int i=0;i<XPercent;i++)
            

                
if(Xcenter) 
                

                    points[i].X
=100+XLineLength/XPercent/2+i*XLineLength/XPercent; 
                    points[i].Y
=Height-80-(Data[i]-YStartValue)*YLineLength/YPercentValue/YPercent; 

                }
 
                
else 
                

                    points[i].X
=100+(XLineLength/XPercent/2-10)+i*XLineLength/XPercent; 
                    
//points[i].Y=Height-80-(Data[i]-YStartValue)*YLineLength/YPercentValue/YPercent;
                    points[i].Y=YLineLength+50-Data[i]*3;
                }
 
            }

//            Point[] points=new Point[2];
//            points[0].X=100;points[0].Y=500;
//            points[1].X=200;points[1].Y=300;
            g.DrawLines(pen,points);
        }
 
        
public void DrawRecData(Color color,int recwidth)//画统计表长条 
        
            SolidBrush brush 
= new SolidBrush(color); 
            Pen  pen 
= new Pen(brush,1); 
            
for(int i=0;i<ypercent;i++
            

                
                g.FillRectangle(brush,
80+i*xlinelength/xpercent+(xlinelength/xpercent-recwidth)/2,height-80-(data[i]-ystartvalue)*ylinelength/ypercentvalue/ypercent,recwidth,(data[i]-ystartvalue)*ylinelength/ypercentvalue/ypercent); 
            }
 
        }
 
    }
 
posted on 2005-03-30 16:39  loveabel  阅读(829)  评论(0)    收藏  举报