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