152 lines
4.6 KiB
C#
152 lines
4.6 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Drawing;
|
|||
|
|
|
|||
|
|
namespace TChart.ImageChart
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ͼ<EFBFBD><CDBC><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <remarks>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>: Kingthy
|
|||
|
|
/// <20><><EFBFBD><EFBFBD>: 2007-09-11
|
|||
|
|
/// MSN: Kingthy@gmail.com
|
|||
|
|
/// ת<><D7AA><EFBFBD><EFBFBD>ע<EFBFBD><D7A2>ԭ<EFBFBD><D4AD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>и<EFBFBD><D0B8><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϣ<EFBFBD><CFA3><EFBFBD>ܷ<EFBFBD>һ<EFBFBD>ݸ<EFBFBD><DDB8><EFBFBD>.лл
|
|||
|
|
/// </remarks>
|
|||
|
|
public abstract class MovementPainterBase
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
///
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="image"></param>
|
|||
|
|
public MovementPainterBase(MovementImage image)
|
|||
|
|
{
|
|||
|
|
this.m_Image = image;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
private MovementImage m_Image;
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD>ش<EFBFBD><D8B4><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
|
|||
|
|
/// </summary>
|
|||
|
|
public MovementImage Image
|
|||
|
|
{
|
|||
|
|
get
|
|||
|
|
{
|
|||
|
|
return m_Image;
|
|||
|
|
}
|
|||
|
|
set
|
|||
|
|
{
|
|||
|
|
m_Image = value;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
#region ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>ȡijֵ<C4B3><D6B5>Y<EFBFBD><59><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><CEBB>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="value"><3E><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ֵ</param>
|
|||
|
|
/// <returns><3E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD></returns>
|
|||
|
|
protected int GetYPosition(decimal value)
|
|||
|
|
{
|
|||
|
|
//ȡ<><C8A1>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0<CEAA><30>λ<EFBFBD><CEBB>
|
|||
|
|
int y = Image.Height - Image.YSpaceWidth;
|
|||
|
|
//ȡ<><C8A1>Y<EFBFBD><59><EFBFBD><EFBFBD><EFBFBD>ܸ߶<DCB8>
|
|||
|
|
int h = Image.Height - Image.YSpaceWidth * 2;
|
|||
|
|
|
|||
|
|
//ȡ<>ñ<EFBFBD><C3B1><EFBFBD>
|
|||
|
|
int percent = 0;
|
|||
|
|
if (Image.XAxisMaxValue != 0)
|
|||
|
|
{
|
|||
|
|
percent = (int)((value / Image.XAxisMaxValue) * h);
|
|||
|
|
}
|
|||
|
|
return y - percent;
|
|||
|
|
}
|
|||
|
|
#endregion
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><>XY<58><59><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="graphics"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="xAxes">X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
public virtual void DrawXYAxisLine(System.Drawing.Graphics graphics, XAxisItemList xAxes)
|
|||
|
|
{
|
|||
|
|
int i, p, h;
|
|||
|
|
StringFormat format = new StringFormat
|
|||
|
|
{
|
|||
|
|
Alignment = StringAlignment.Center,
|
|||
|
|
LineAlignment = StringAlignment.Center
|
|||
|
|
};
|
|||
|
|
int tmpXSpaceWidth;
|
|||
|
|
//tmpXSpaceWidth = Image.XSpaceWidth;
|
|||
|
|
tmpXSpaceWidth = Image.Xspace;
|
|||
|
|
|
|||
|
|
//<2F><>Y<EFBFBD><59><EFBFBD><EFBFBD>
|
|||
|
|
Point p1 = new Point(tmpXSpaceWidth, Image.YSpaceWidth);
|
|||
|
|
Point p2 = new Point(tmpXSpaceWidth, Image.Height - Image.YSpaceWidth);
|
|||
|
|
graphics.DrawLine(new Pen(Image.YAxisColor), p1, p2);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>[Y<><59>Ĭ<EFBFBD><C4AC>Ϊ10<31>ȷ<EFBFBD>]
|
|||
|
|
h = (p2.Y - p1.Y) / 10; //<2F>ȷ<EFBFBD><C8B7>ߵļ<DFB5><C4BC><EFBFBD>
|
|||
|
|
|
|||
|
|
//0<><30>10<31><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
for (i = 1; i <= 9; i++)
|
|||
|
|
{
|
|||
|
|
p = p1.Y + h * i;
|
|||
|
|
graphics.DrawLine(new Pen(Image.YAxisColor), new Point(p1.X - 3, p), new Point(p1.X, p));
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><>X<EFBFBD><58><EFBFBD><EFBFBD>
|
|||
|
|
//<2F><>[X = <20><><EFBFBD>Ҽ<EFBFBD><D2BC><EFBFBD> + X<><58><EFBFBD>еļ<D0B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>, Y = ͼƬ<CDBC>߶<EFBFBD> - Y<><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>]
|
|||
|
|
Point p3 = new Point(Image.XSpaceWidth * xAxes.Count + tmpXSpaceWidth * 2, Image.Height - Image.YSpaceWidth);
|
|||
|
|
graphics.DrawLine(new Pen(Image.XAxisColor), p2, p3);
|
|||
|
|
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD>
|
|||
|
|
for (i = 1; i <= xAxes.Count; i++)
|
|||
|
|
{
|
|||
|
|
p = p1.X + Image.XSpaceWidth * i;
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>p3<70><33>
|
|||
|
|
p3.X = p;
|
|||
|
|
p3.Y = p2.Y + 3;
|
|||
|
|
graphics.DrawLine(new Pen(Image.XAxisColor), new Point(p, p2.Y), p3);
|
|||
|
|
|
|||
|
|
//<2F><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
p3.Y = p2.Y + Image.YSpaceWidth / 2;
|
|||
|
|
XAxisItem item = xAxes[i - 1];
|
|||
|
|
if (item != null && !string.IsNullOrEmpty(item.Title))
|
|||
|
|
{
|
|||
|
|
graphics.DrawString(item.Title, item.TitleFont, new SolidBrush(item.TitleColor), p3, format);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="graphics"></param>
|
|||
|
|
public virtual void DrawTitle(System.Drawing.Graphics graphics)
|
|||
|
|
{
|
|||
|
|
StringFormat format = new StringFormat
|
|||
|
|
{
|
|||
|
|
Alignment = StringAlignment.Near,
|
|||
|
|
LineAlignment = StringAlignment.Near
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
if (!string.IsNullOrEmpty(Image.Title))
|
|||
|
|
{
|
|||
|
|
graphics.DrawString(Image.Title, Image.TitleFont, new SolidBrush(Image.TitleColor), new Point(3,3), format);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
/// <summary>
|
|||
|
|
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="graphics"><3E><><EFBFBD><EFBFBD></param>
|
|||
|
|
/// <param name="xAxes">X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
|
|||
|
|
public abstract void DrawValue(System.Drawing.Graphics graphics, XAxisItemList xAxes);
|
|||
|
|
}
|
|||
|
|
}
|