RaUI/Source/ryControls/ImageChart/MovementPainterBase.cs

152 lines
4.6 KiB
C#
Raw Normal View History

2020-11-28 07:03:28 +00:00
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);
}
}