|
public
void Draw(
int hDC,
int x,
int y,
ref
double[] values,
double normValue,
double sizeValue)
{
// TODO:
添加 Custom3DBarRenderer.Draw 实现
float iBarHeight = 0;
float iBarWidth
= 0;
System.Drawing.Graphics g = System.Drawing.Graphics.FromHdc(
new System.IntPtr(hDC));
//创建
Graphics
对象
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
//消除图形的锯齿
System.Drawing.SolidBrush tempBrush =
null;
System.Drawing.Pen pOutLine =
new System.Drawing.Pen(
new System.Drawing.SolidBrush(
this.m_OutlineColor),0.2f);
iBarWidth
=
this.m_BarWidth;
float CurrentX,CurrentY;
CurrentX = x -
this.m_BarWidth * values.Length / 2;
CurrentY = y;
for(
int i=0;i<values.Length;i++)
{
//创建画刷 并计算矩形的高度
tempBrush =
new System.Drawing.SolidBrush(System.Drawing.ColorTranslator.FromWin32(
this.m_iColors[i]));
iBarHeight = System.Convert.ToSingle((values[i] *
this.m_MaxBarHeight/
this.m_fTotal).ToString());
if(iBarHeight <
this.m_MinBarHeight)
{
iBarHeight =
this.m_MinBarHeight;
}
if(iBarHeight >
this.m_MaxBarHeight)
{
iBarHeight =
this.m_MaxBarHeight;
}
//绘制矩形
System.Drawing.PointF[] pRect =
new System.Drawing.PointF[4];
pRect[0].X = CurrentX;
pRect[0].Y = CurrentY;
pRect[1].X = CurrentX + iBarWidth ;
pRect[1].Y = CurrentY;
pRect[2].X = CurrentX + iBarWidth ;
pRect[2].Y = CurrentY - iBarHeight;
pRect[3].X = CurrentX;
pRect[3].Y = CurrentY - iBarHeight;
//绘制矩形顶部的阴影
System.Drawing.PointF[] pTopFill =
new System.Drawing.PointF[4];
pTopFill[0].X = CurrentX;
pTopFill[0].Y = CurrentY - iBarHeight;
pTopFill[1].X = CurrentX + iBarWidth ;
pTopFill[1].Y = CurrentY - iBarHeight;
pTopFill[2].X = CurrentX + iBarWidth * 3/2 ;
pTopFill[2].Y = CurrentY - iBarHeight - iBarWidth * 1/2;
pTopFill[3].X = CurrentX + iBarWidth * 1/2 ;
pTopFill[3].Y = CurrentY - iBarHeight - iBarWidth * 1/2;
CurrentX = CurrentX +iBarWidth;
//斜面阴影部分
System.Drawing.PointF[] pShadow=
new System.Drawing.PointF[4];
pShadow[0].X = CurrentX;
pShadow[0].Y = CurrentY;
pShadow[1].X = CurrentX + iBarWidth/2 ;
pShadow[1].Y = CurrentY - iBarWidth/2;
pShadow[2].X = CurrentX + iBarWidth/2 ;
pShadow[2].Y = CurrentY - iBarHeight - iBarWidth * 1/2;
pShadow[3].X = CurrentX
;
pShadow[3].Y = CurrentY - iBarHeight;
//绘制3D图形 包括正面、斜面、顶部
g.FillPolygon(tempBrush,pRect);
g.FillPolygon(
new HatchBrush(HatchStyle.Percent50,tempBrush.Color),pTopFill);
g.FillPolygon(tempBrush,pShadow);
//如果设置了绘制边界线 则绘制边界
if(
this.m_blDrawOutline)
{
g.DrawPolygon(pOutLine,pRect);
g.DrawPolygon(pOutLine,pTopFill);
g.DrawPolygon(pOutLine,pShadow);
}
}
}
|