在這個方法中,我們首先計算所有項目的數值和。然後遍歷所有的項目,計 算它的扇形區域的起始角度和終止角度。由於要顯示的是橢圓形餅圖,相對於正圓圖形是被 壓扁的,因此這個起始角度和終止角度需要調用FixAngle函數進行修正。
由於在計算 機屏幕上繪制扇形是順時針方向的,而我們察看一般習慣是順時針看的,因此這裡需要反向 遍歷餅圖項目。
計算各個餅圖項目的角度數據後,我們可以繪制圖形或者獲得圖形定 位信息。首先我們定義函數CreatePath函數來獲得指定餅圖項目的路徑對象。代碼如下。
/// <summary>
/// 為一個餅圖項目創建路徑對象
/// </summary>
/// <param name="item">餅圖項目 </param>
/// <returns>創建的路徑對象</returns>
public GraphicsPath CreatePath( PIEShapeItem item )
{
GraphicsPath path = new GraphicsPath();
path.AddPIE(
intLeft ,
intTop ,
intWidth ,
intHeight ,
item.StartAngle ,
item.EndAngle - item.StartAngle );
return path ;
}
這個函數也很簡單,創建一個路徑對象,然後添加一個扇形區 域。
我們定義了一個Draw函數來繪制餅圖圖形。其代碼為
/// <summary>
/// 繪制餅圖圖形
/// </summary>
/// <param name="g">圖形繪制對象</param>
/// <param name="ClipRectangle">剪切矩形</param>
public void Draw( Graphics g , Rectangle ClipRectangle )
{
foreach( PIEShapeItem item in this )
{
using( GraphicsPath path = CreatePath( item ))
{
using( SolidBrush b = new SolidBrush( item.Color ))
{
g.FillPath( b , path );
g.DrawPath( Pens.Black , path );
}
}
}
}