程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第八講 ASP.NET圖形開發帶超鏈接的餅圖(5)

C#發現之旅第八講 ASP.NET圖形開發帶超鏈接的餅圖(5)

編輯:關於C語言

這個代碼很簡單,也就是定義了一個餅圖 項目的一些屬性。

餅圖文檔對象 PIEShape

本對象定義了一個完整的餅圖, 是本程序的核心模塊。本對象首先是PieShapeItem的一個強類型列表,它是從 System.Collections.CollectionBase上面派生的,通過使用對象的Add或Remove方法就能往 這個對象添加或刪除餅圖項目對象PIEShapeItem。當向列表添加項目時未指定項目顏色時會 創建一個默認顏色,本類型定義了一個StdColors的靜態的顏色數組,新餅圖元素的顏色就根 據這個顏色數組進行分配。

對象定義了一個RefreshState方法用來計算各個餅圖元素 對應的扇形區域的起始角度和終止角度。

/// <summary>
/// 刷 新對象狀態
/// </summary>
/// <remarks>
/// 本函數中反 向遍歷所有的餅圖項目,
/// 計算各個餅圖項目的起始和終止角度 </remarks>
public void RefreshState()
{
  double TotalValue = 0 ;
  foreach( PIEShapeItem item in this )
  {
     TotalValue += item.Value ;
  }
  float AngleCount = 0 ;
  for( int iCount = this.Count - 1 ; iCount >= 0 ; iCount -- )
  {
    PIEShapeItem item = this[ iCount ] ;
    float angle = ( float ) ( 360.0 * item.Value / TotalValue ) ;
    item.StartAngle = ( float ) Math.Round( AngleCount , 3 ) ;
    item.EndAngle = ( float ) Math.Round( AngleCount + angle , 3 ) ;
    AngleCount += angle ;
     item.StartAngle = ( float ) Math.Round( FixAngle( item.StartAngle ) , 3 );
    item.EndAngle = ( float ) Math.Round( FixAngle( item.EndAngle ) , 3 ) ;
  }
}
/// <summary>
/// 根據橢圓形狀修正角度
/// </summary>
/// <param name="angle">原始角度 </param>
/// <returns>修正後的角度值</returns>
private float FixAngle( float angle )
{
  if( ( angle % 90.0 ) == 0 )
    return angle ;
  if( intWidth == intHeight )
     return angle ;
  double x = intWidth * Math.Cos( angle * Math.PI / 180 );
  double y = intHeight * Math.Sin( angle * Math.PI / 180 );
   float result = ( float ) ( Math.Atan2( y , x ) * 180 / Math.PI );
  if( result < 0 )
    result += 360 ;
  return result ;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved