GDI+技术的坐标解决方案

   GDI+技术已经给我们提供了很好的基本绘制封装,从画线,到画圆,画椭圆,画矩形,画各种曲线,等等。但是我们要利用这些基本技术来完成现实中需要的功能。坐标就是一个很好的例子。

    二维坐标的概念对于大家来说并不陌生。由坐标系和具体数据图形组成。我们分两个部分来完成这个坐标。

    首先,完成坐标系的显示。坐标系定下来之后,它定义的某些参数直接影响到后面数据图形的显示。我们定义坐标系类为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坐标转换成对应计算机的象素点
 计算机屏幕上对应的象素点X坐标
  public int  TranslateX(float x)
 
 将Y坐标转换成对应计算机的象素点
计算机屏幕上对应的象素点Y坐标
  public int TranslateY(float y)

  开始使用BaseGraphics类的时候,可以先继承它,这样坐标系的显示就包括新类中了。扩展这个使用类只要把要显示的图形定义出所需的属性即可。

考虑到图形的重绘机制,每次重绘的时候,都要将图形从最初开始重绘,这样很费CPU的时间,可以先定义一个BITMAP,把图形绘制在BITMAP上,响应重绘消息时直接调用BITMAP即可。于是在该使用类中定义public Bitmap bitmap 这是该类向外界任何容器提供图形的唯一途径。

图形曲线类定义该曲线的相关的属性,及由一个内存表提供的数据,包括X值和Y值。

使用类中将图形曲线类逐个加载,逐个显示。因为图形曲线类中提供的数据是工程数据,我们要先将它转换为象素数据。这个转换公式,由基类里的TranslateX(float x)和TranslateY(float y)来完成。

经过上面的折腾,我们可以来写写这个方案了。demo

原文地址:https://www.cnblogs.com/cuihongyu3503319/p/917717.html