RaUI/Source/ryControls/ImageChart/MovementImage.cs

389 lines
8.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.Imaging;
using System.Drawing;
using System.IO;
namespace TChart.ImageChart
{
/// <summary>
/// <20><><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 class MovementImage : IDisposable
{
/// <summary>
///
/// </summary>
public MovementImage()
{
InitParameter();
}
#region <EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><EFBFBD><EFBFBD>
/// <summary>
/// <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
private void InitParameter()
{
m_Title = null;
m_Width = 0;
m_Height = 200;
m_Xspace = 4;
m_XSpaceWidth = 30;
m_YSpaceWidth = 30;
m_XAxisMaxValue = 0;
m_TitleColor = Color.Black;
m_TitleFont = new Font(new FontFamily("Arial"), 9, FontStyle.Regular);
m_BackgroundColor = Color.White;
m_XAxisColor = Color.Black;
m_YAxisColor = Color.Black;
m_Painter = new RectanglePainter(this);
m_Picture = null;
}
private int m_Xspace;
/// <summary>
/// <20><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public int Xspace
{
get
{
return m_Xspace;
}
set
{
m_Xspace = value;
}
}
private string m_Title;
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
public string Title
{
get
{
return m_Title;
}
set
{
m_Title = value;
}
}
private int m_Width;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC>Ŀ<EFBFBD><C4BF><EFBFBD>
/// </summary>
public int Width
{
get
{
return m_Width;
}
}
private int m_Height;
/// <summary>
/// <20><><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>ͼƬ<CDBC>ĸ߶<C4B8>
/// </summary>
public int Height
{
get
{
return m_Height;
}
set
{
m_Height = value;
}
}
private int m_XSpaceWidth;
/// <summary>
/// X<><58><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
/// </summary>
public int XSpaceWidth
{
get
{
return m_XSpaceWidth;
}
set
{
m_XSpaceWidth = value;
}
}
private int m_YSpaceWidth;
/// <summary>
/// Y<><59><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>
/// </summary>
public int YSpaceWidth
{
get
{
return m_YSpaceWidth;
}
set
{
m_YSpaceWidth = value;
}
}
private Color m_TitleColor;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
/// </summary>
public Color TitleColor
{
get
{
return m_TitleColor;
}
set
{
m_TitleColor = value;
}
}
private Font m_TitleFont;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/// </summary>
public Font TitleFont
{
get
{
return m_TitleFont;
}
set
{
m_TitleFont = value;
}
}
private Color m_BackgroundColor;
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
/// </summary>
public Color BackgroundColor
{
get
{
return m_BackgroundColor;
}
set
{
m_BackgroundColor = value;
}
}
private Color m_XAxisColor;
/// <summary>
/// X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
/// </summary>
public Color XAxisColor
{
get
{
return m_XAxisColor;
}
set
{
m_XAxisColor = value;
}
}
private Color m_YAxisColor;
/// <summary>
/// Y<><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
/// </summary>
public Color YAxisColor
{
get
{
return m_YAxisColor;
}
set
{
m_YAxisColor = value;
}
}
private decimal m_XAxisMaxValue;
/// <summary>
/// <20><><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD><EFBFBD>ֵ(<28><><EFBFBD><EFBFBD>Painter<65><72><EFBFBD><EFBFBD>)
/// </summary>
public decimal XAxisMaxValue
{
get
{
return m_XAxisMaxValue;
}
}
private System.Drawing.Image m_Picture;
/// <summary>
/// <20><><EFBFBD><EFBFBD>ͼƬ<CDBC><C6AC><EFBFBD><EFBFBD>
/// </summary>
public System.Drawing.Image Picture
{
get
{
return m_Picture;
}
set
{
m_Picture = value;
}
}
/// <summary>
/// <20><><EFBFBD><EFBFBD>
/// </summary>
private Graphics m_Graphics;
#endregion
#region <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><EFBFBD>
private MovementPainterBase m_Painter;
/// <summary>
/// <20><>ͼ<EFBFBD><CDBC>
/// </summary>
public MovementPainterBase Painter
{
get
{
return m_Painter;
}
set
{
m_Painter = value;
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>ͼ<EFBFBD><CDBC>Ϊ<EFBFBD><CEAA>ǰͼ
if (value != null) m_Painter.Image = this;
}
}
#endregion
#region <EFBFBD>ͷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
/// <summary>
/// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ
/// </summary>
public void Dispose()
{
if (m_Picture == null) m_Picture.Dispose();
m_Picture = null;
if (m_Graphics != null) m_Graphics.Dispose();
m_Graphics = null;
}
#endregion
#region ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
/// <summary>
/// <20><>ȡX<C8A1><58><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ֵ
/// </summary>
/// <param name="xAxes"></param>
/// <returns></returns>
private decimal GetMaxXAxisValue(XAxisItemList xAxes)
{
if (xAxes.Count == 0) return 0;
decimal max = xAxes[0].Value;
for (int i = 1; i < xAxes.Count; i++)
{
max = Math.Max(max, xAxes[i].Value);
}
return max;
}
/// <summary>
/// <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>X<EFBFBD><58><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>ֵ
/// </summary>
/// <param name="list"></param>
/// <returns></returns>
private decimal GetMaxXAxisValue(List<XAxisItemList> list)
{
decimal max = 0;
foreach (XAxisItemList item in list)
{
if (item.Count != 0) max = Math.Max(max, GetMaxXAxisValue(item));
}
return max;
}
#endregion
#region <EFBFBD><EFBFBD>ͼ
/// <summary>
/// <20><>ʼ<EFBFBD><CABC>ͼƬ
/// </summary>
/// <param name="xAxes">X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD></param>
/// <returns></returns>
private bool InitImage(XAxisItemList xAxes)
{
if (xAxes == null) return false;
if (xAxes.Count == 0) return false;
//<2F><><EFBFBD><EFBFBD>(<28><><EFBFBD>Ҿ<EFBFBD> + X<><58><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> * <20><><EFBFBD><EFBFBD>)
this.m_Width = this.XSpaceWidth * 3 + this.XSpaceWidth * xAxes.Count;
//<2F><>ʼ<EFBFBD><CABC>ͼƬ
m_Picture = new Bitmap(this.Width, this.Height);
m_Graphics = Graphics.FromImage(m_Picture);
//<2F><><EFBFBD><EFBFBD><E4B1B3>ɫ
m_Graphics.FillRectangle(new SolidBrush(this.BackgroundColor), 0, 0, this.Width, this.Height);
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Painter.DrawTitle(m_Graphics);
//<2F><>X,Y<><59><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Painter.DrawXYAxisLine(m_Graphics, xAxes);
return true;
}
/// <summary>
/// <20><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
/// </summary>
/// <param name="xAxes"></param>
public void Draw(XAxisItemList xAxes)
{
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
m_XAxisMaxValue = GetMaxXAxisValue(xAxes);
if (!InitImage(xAxes)) return;
//<2F><>ֵ
Painter.DrawValue(m_Graphics, xAxes);
}
/// <summary>
/// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ
/// </summary>
/// <param name="list"></param>
public void Draw(List<XAxisItemList> list)
{
if (list == null || list.Count == 0) return;
//ȡ<><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
m_XAxisMaxValue = GetMaxXAxisValue(list);
XAxisItemList xAxes = list[0];
if (!InitImage(xAxes)) return;
//<2F><>ֵ
foreach (XAxisItemList item in list)
{
Painter.DrawValue(m_Graphics, item);
}
}
#endregion
}
}