二维坐标的概念对于大家来说并不陌生。由坐标系和具体数据图形组成。我们分两个部分来完成这个坐标。
首先,完成坐标系的显示。坐标系定下来之后,它定义的某些参数直接影响到后面数据图形的显示。我们定义坐标系类为BaseGraphics类,
属性:
x轴每格坐标间的实际象素 public int XScreenScale
y轴每格坐标间的实际象素 public int YScreenScale
坐标的起点,X值(图纸上显示) public float RealXOrigin
坐标的起点,Y值(图纸上显示)public float RealYOrigin
坐标的起点,右边Y轴(图纸上显示)public float RealRightYOrigin
X轴每格代表的数值public float RealXTickValue
Y轴每格代表的数值public float RealYTickValue
X坐标的标签public string LabelX
Y坐标的标签 public string LabelY
相隔显示X坐标刻度值public int XInterval
相隔显示Y坐标刻度值public int YInterval
X坐标值精度public string XVirtualValue
Y坐标值精度 public string YVirtualValue
方法:
绘制图形方法:
绘制X坐标
protected void DrawXAxis(Graphics g)
绘制Y坐标
protected void DrawYAxis(Graphics g)
绘制顶部X坐标,不带刻度
protected void DrawTopXAxisWithoutScale(Graphics g)
绘制右边Y坐标,不带刻度
protected void DrawRightYAxisWithoutScale(Graphics g)
绘制X坐标分隔线及背景线
protected void DrawXCompartLine(Graphics g)
绘制Y坐标分隔线及背景线
protected void DrawYCompartLine(Graphics g)
绘制X坐标标签
protected void DrawXlabel(Graphics g)
绘制Y坐标标签
protected void DrawYlabel(Graphics g)
绘制单一坐标,一个Y轴,一个X轴
public void DrawSingleCoordinate(Graphics g)
数据转换方法:
将X坐标转换成对应计算机的象素点
public int TranslateX(float x)
将Y坐标转换成对应计算机的象素点
public int TranslateY(float y)
开始使用BaseGraphics类的时候,可以先继承它,这样坐标系的显示就包括新类中了。扩展这个使用类只要把要显示的图形定义出所需的属性即可。
考虑到图形的重绘机制,每次重绘的时候,都要将图形从最初开始重绘,这样很费CPU的时间,可以先定义一个BITMAP,把图形绘制在BITMAP上,响应重绘消息时直接调用BITMAP即可。于是在该使用类中定义public Bitmap bitmap 这是该类向外界任何容器提供图形的唯一途径。
图形曲线类定义该曲线的相关的属性,及由一个内存表提供的数据,包括X值和Y值。
使用类中将图形曲线类逐个加载,逐个显示。因为图形曲线类中提供的数据是工程数据,我们要先将它转换为象素数据。这个转换公式,由基类里的TranslateX(float x)和TranslateY(float y)来完成。
经过上面的折腾,我们可以来写写这个方案了。demo