using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Text;
using System.Windows.Forms;
namespace Mesnac.Controls.ChemicalWeighing.HslCurve
{
///
/// 曲线控件信息,可以用于显示一些实时的曲线信息,同时支持对曲线控件的一些简单的交互
///
// Token: 0x02000014 RID: 20
[Description("实时曲线控件,主要用来显示实时的曲线信息,不支持光标移动显示数据信息,支持简单的交互,显示隐藏曲线")]
public class HslCurve : UserControl
{
///
/// 实例化一个曲线显示的控件
///
// Token: 0x060001FE RID: 510 RVA: 0x0001E290 File Offset: 0x0001C490
public HslCurve()
{
this.InitializeComponent();
this.random = new Random();
this.data_list = new Dictionary();
this.auxiliary_lines = new List();
this.hslMarkTexts = new List();
this.auxiliary_Labels = new List();
this.format_left = new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Near
};
this.format_right = new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Far
};
this.format_center = new StringFormat
{
LineAlignment = StringAlignment.Center,
Alignment = StringAlignment.Center
};
this.font_size9 = new Font("微软雅黑", 9f);
this.InitializationColor();
this.pen_dash = new Pen(this.color_deep);
this.pen_dash.DashStyle = DashStyle.Custom;
this.pen_dash.DashPattern = new float[]
{
5f,
5f
};
this.referenceAxisLeft = new ReferenceAxis(this);
this.referenceAxisRight = new ReferenceAxis(this);
this.referenceAxisLeft.Color = Color.DimGray;
this.referenceAxisRight.Color = Color.DimGray;
base.SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true);
base.SetStyle(ControlStyles.ResizeRedraw, true);
base.SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
base.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
}
///
/// 获取或设置控件的背景色
///
// Token: 0x170000AA RID: 170
// (get) Token: 0x060001FF RID: 511 RVA: 0x0001E4E3 File Offset: 0x0001C6E3
// (set) Token: 0x06000200 RID: 512 RVA: 0x0001E4EB File Offset: 0x0001C6EB
[Browsable(true)]
[Description("获取或设置控件的背景色")]
[Category("HslControls")]
[DefaultValue(typeof(Color), "Transparent")]
[EditorBrowsable(EditorBrowsableState.Always)]
public override Color BackColor
{
get
{
return base.BackColor;
}
set
{
base.BackColor = value;
}
}
///
/// 获取或设置图形的左轴的坐标轴信息
///
// Token: 0x170000AB RID: 171
// (get) Token: 0x06000201 RID: 513 RVA: 0x0001E4F5 File Offset: 0x0001C6F5
[Category("HslControls")]
[Description("获取或设置图形的左轴的坐标轴信息")]
[Browsable(true)]
[TypeConverter(typeof(ReferenceAxisConverter))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ReferenceAxis ReferenceAxisLeft
{
get
{
return this.referenceAxisLeft;
}
}
///
/// 获取或设置图形的右轴的坐标轴信息
///
// Token: 0x170000AC RID: 172
// (get) Token: 0x06000202 RID: 514 RVA: 0x0001E4FD File Offset: 0x0001C6FD
[Category("HslControls")]
[Description("获取或设置图形的右轴的坐标轴信息")]
[Browsable(true)]
[TypeConverter(typeof(ReferenceAxisConverter))]
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
public ReferenceAxis ReferenceAxisRight
{
get
{
return this.referenceAxisRight;
}
}
///
/// 获取或设置图形的纵轴分段数
///
// Token: 0x170000AD RID: 173
// (get) Token: 0x06000203 RID: 515 RVA: 0x0001E508 File Offset: 0x0001C708
// (set) Token: 0x06000204 RID: 516 RVA: 0x0001E520 File Offset: 0x0001C720
[Category("HslControls")]
[Description("获取或设置图形的纵轴分段数")]
[Browsable(true)]
[DefaultValue(5)]
public virtual int ValueSegment
{
get
{
return this.value_Segment;
}
set
{
this.value_Segment = value;
base.Invalidate();
}
}
///
/// 获取或设置所有的数据是否强制在一个界面里显示
///
// Token: 0x170000AE RID: 174
// (get) Token: 0x06000205 RID: 517 RVA: 0x0001E534 File Offset: 0x0001C734
// (set) Token: 0x06000206 RID: 518 RVA: 0x0001E54C File Offset: 0x0001C74C
[Category("HslControls")]
[Description("获取或设置所有的数据是否强制在一个界面里显示")]
[Browsable(true)]
[DefaultValue(false)]
public virtual bool IsAbscissaStrech
{
get
{
return this.value_IsAbscissaStrech;
}
set
{
this.value_IsAbscissaStrech = value;
base.Invalidate();
}
}
///
/// 获取或设置拉伸模式下的最大数据量
///
// Token: 0x170000AF RID: 175
// (get) Token: 0x06000207 RID: 519 RVA: 0x0001E560 File Offset: 0x0001C760
// (set) Token: 0x06000208 RID: 520 RVA: 0x0001E578 File Offset: 0x0001C778
[Category("HslControls")]
[Description("获取或设置拉伸模式下的最大数据量")]
[Browsable(true)]
[DefaultValue(300)]
public virtual int StrechDataCountMax
{
get
{
return this.value_StrechDataCountMax;
}
set
{
this.value_StrechDataCountMax = value;
base.Invalidate();
}
}
///
/// 获取或设置虚线是否进行显示
///
// Token: 0x170000B0 RID: 176
// (get) Token: 0x06000209 RID: 521 RVA: 0x0001E58C File Offset: 0x0001C78C
// (set) Token: 0x0600020A RID: 522 RVA: 0x0001E5A4 File Offset: 0x0001C7A4
[Category("HslControls")]
[Description("获取或设置虚线是否进行显示")]
[Browsable(true)]
[DefaultValue(true)]
public virtual bool IsRenderDashLine
{
get
{
return this.value_IsRenderDashLine;
}
set
{
this.value_IsRenderDashLine = value;
base.Invalidate();
}
}
///
/// 获取或设置坐标轴及相关信息文本的颜色
///
// Token: 0x170000B1 RID: 177
// (get) Token: 0x0600020B RID: 523 RVA: 0x0001E5B8 File Offset: 0x0001C7B8
// (set) Token: 0x0600020C RID: 524 RVA: 0x0001E5D0 File Offset: 0x0001C7D0
[Category("HslControls")]
[Description("获取或设置坐标轴及相关信息文本的颜色")]
[Browsable(true)]
[DefaultValue(typeof(Color), "DimGray")]
public virtual Color ColorLinesAndText
{
get
{
return this.color_deep;
}
set
{
this.color_deep = value;
this.InitializationColor();
base.Invalidate();
}
}
///
/// 获取或设置虚线的颜色
///
// Token: 0x170000B2 RID: 178
// (get) Token: 0x0600020D RID: 525 RVA: 0x0001E5E8 File Offset: 0x0001C7E8
// (set) Token: 0x0600020E RID: 526 RVA: 0x0001E600 File Offset: 0x0001C800
[Category("HslControls")]
[Description("获取或设置虚线的颜色")]
[Browsable(true)]
[DefaultValue(typeof(Color), "Gray")]
public virtual Color ColorDashLines
{
get
{
return this.color_dash;
}
set
{
this.color_dash = value;
Pen pen = this.pen_dash;
if (pen != null)
{
pen.Dispose();
}
this.pen_dash = new Pen(this.color_dash);
this.pen_dash.DashStyle = DashStyle.Custom;
this.pen_dash.DashPattern = new float[]
{
5f,
5f
};
base.Invalidate();
}
}
///
/// 获取或设置纵向虚线的分隔情况,单位为多少个数据
///
// Token: 0x170000B3 RID: 179
// (get) Token: 0x0600020F RID: 527 RVA: 0x0001E670 File Offset: 0x0001C870
// (set) Token: 0x06000210 RID: 528 RVA: 0x0001E688 File Offset: 0x0001C888
[Category("HslControls")]
[Description("获取或设置纵向虚线的分隔情况,单位为多少个数据")]
[Browsable(true)]
[DefaultValue(100)]
public virtual int IntervalAbscissaText
{
get
{
return this.value_IntervalAbscissaText;
}
set
{
this.value_IntervalAbscissaText = value;
base.Invalidate();
}
}
///
/// 获取或设置实时数据新增时文本相对应于时间的格式化字符串,默认HH:mm
///
// Token: 0x170000B4 RID: 180
// (get) Token: 0x06000211 RID: 529 RVA: 0x0001E69C File Offset: 0x0001C89C
// (set) Token: 0x06000212 RID: 530 RVA: 0x0001E6B4 File Offset: 0x0001C8B4
[Category("HslControls")]
[Description("获取或设置实时数据新增时文本相对应于时间的格式化字符串,默认HH:mm")]
[Browsable(true)]
[DefaultValue("HH:mm")]
public virtual string TextAddFormat
{
get
{
return this.textFormat;
}
set
{
this.textFormat = value;
base.Invalidate();
}
}
///
/// 获取或设置图标的标题信息
///
// Token: 0x170000B5 RID: 181
// (get) Token: 0x06000213 RID: 531 RVA: 0x0001E6C8 File Offset: 0x0001C8C8
// (set) Token: 0x06000214 RID: 532 RVA: 0x0001E6E0 File Offset: 0x0001C8E0
[Category("HslControls")]
[Description("获取或设置图标的标题信息")]
[Browsable(true)]
[DefaultValue("")]
public virtual string Title
{
get
{
return this.value_title;
}
set
{
this.value_title = value;
base.Invalidate();
}
}
///
/// 获取或设置是否显示右侧的坐标系信息
///
// Token: 0x170000B6 RID: 182
// (get) Token: 0x06000215 RID: 533 RVA: 0x0001E6F4 File Offset: 0x0001C8F4
// (set) Token: 0x06000216 RID: 534 RVA: 0x0001E70C File Offset: 0x0001C90C
[Category("HslControls")]
[Description("获取或设置是否显示右侧的坐标系信息")]
[Browsable(true)]
[DefaultValue(true)]
public virtual bool IsRenderRightCoordinate
{
get
{
return this.isRenderRightCoordinate;
}
set
{
this.isRenderRightCoordinate = value;
base.Invalidate();
}
}
// Token: 0x06000217 RID: 535 RVA: 0x0001E720 File Offset: 0x0001C920
private void InitializationColor()
{
Pen pen = this.pen_normal;
if (pen != null)
{
pen.Dispose();
}
Brush brush = this.brush_deep;
if (brush != null)
{
brush.Dispose();
}
this.pen_normal = new Pen(this.color_deep);
this.brush_deep = new SolidBrush(this.color_deep);
}
///
/// 获取或设置曲线名称的布局宽度,默认为100
///
// Token: 0x170000B7 RID: 183
// (get) Token: 0x06000218 RID: 536 RVA: 0x0001E774 File Offset: 0x0001C974
// (set) Token: 0x06000219 RID: 537 RVA: 0x0001E77C File Offset: 0x0001C97C
[Browsable(true)]
[Description("获取或设置曲线名称的布局宽度,默认为150")]
[Category("HslControls")]
[DefaultValue(100)]
public virtual int CurveNameWidth
{
get
{
return this.curveNameWidth;
}
set
{
bool flag = value > 10;
if (flag)
{
this.curveNameWidth = value;
}
}
}
///
/// 获取或设置所有的数据点显示的半径大小,默认是0,不显示数据点
///
// Token: 0x170000B8 RID: 184
// (get) Token: 0x0600021A RID: 538 RVA: 0x0001E79C File Offset: 0x0001C99C
// (set) Token: 0x0600021B RID: 539 RVA: 0x0001E7A4 File Offset: 0x0001C9A4
[Browsable(true)]
[Description("获取或设置所有的数据点显示的半径大小,默认是0,不显示数据点")]
[Category("HslControls")]
[DefaultValue(0)]
public virtual int PointsRadius
{
get
{
return this.pointsRadius;
}
set
{
this.pointsRadius = value;
base.Invalidate();
}
}
///
/// 获取或设置Y轴刻度文本的字体信息
///
// Token: 0x170000B9 RID: 185
// (get) Token: 0x0600021D RID: 541 RVA: 0x0001E7C8 File Offset: 0x0001C9C8
// (set) Token: 0x0600021C RID: 540 RVA: 0x0001E7B5 File Offset: 0x0001C9B5
[Browsable(true)]
[Description("获取或设置Y轴刻度文本的字体信息")]
[Category("HslControls")]
public virtual Font FontCalibration
{
get
{
return this.font_size9;
}
set
{
this.font_size9 = value;
base.Invalidate();
}
}
///
/// 获取或设置左右两侧的坐标轴的宽度,以像素为单位
///
// Token: 0x170000BA RID: 186
// (get) Token: 0x0600021E RID: 542 RVA: 0x0001E7E0 File Offset: 0x0001C9E0
// (set) Token: 0x0600021F RID: 543 RVA: 0x0001E7F8 File Offset: 0x0001C9F8
[Browsable(true)]
[Description("获取或设置左右两侧的坐标轴的宽度,以像素为单位")]
[Category("HslControls")]
[DefaultValue(50)]
public int LeftRightWidth
{
get
{
return this.leftRight;
}
set
{
this.leftRight = value;
base.Invalidate();
}
}
///
/// 获取或设置上下两侧的空白的宽度,以像素为单位
///
// Token: 0x170000BB RID: 187
// (get) Token: 0x06000220 RID: 544 RVA: 0x0001E80C File Offset: 0x0001CA0C
// (set) Token: 0x06000221 RID: 545 RVA: 0x0001E824 File Offset: 0x0001CA24
[Browsable(true)]
[Description("获取或设置上下两侧的空白的宽度,以像素为单位")]
[Category("HslControls")]
[DefaultValue(25)]
public int UpDownHeight
{
get
{
return this.upDown;
}
set
{
this.upDown = value;
base.Invalidate();
}
}
///
/// 设置曲线的横坐标文本,适用于显示一些固定的曲线信息
///
/// 应该和曲线的点数一致
// Token: 0x06000222 RID: 546 RVA: 0x0001E835 File Offset: 0x0001CA35
public void SetCurveText(string[] descriptions)
{
this.data_text = descriptions;
base.Invalidate();
}
///
/// 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色随机,没有数据上限,线条宽度为1
///
/// 曲线关键字
/// 曲线的具体数据
// Token: 0x06000223 RID: 547 RVA: 0x0001E848 File Offset: 0x0001CA48
public void SetLeftCurve(string key, float[] data)
{
this.SetLeftCurve(key, data, Color.FromArgb(this.random.Next(256), this.random.Next(256), this.random.Next(256)));
}
///
/// 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1
///
/// 曲线关键字
/// 数据内容
/// 曲线颜色
// Token: 0x06000224 RID: 548 RVA: 0x0001E894 File Offset: 0x0001CA94
public void SetLeftCurve(string key, float[] data, Color lineColor)
{
this.SetCurve(key, 0, data, lineColor, 1f, CurveStyle.LineSegment);
}
///
/// 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1
///
/// 曲线关键字
/// 数据内容
/// 曲线颜色
/// 曲线的样式
// Token: 0x06000225 RID: 549 RVA: 0x0001E8A8 File Offset: 0x0001CAA8
public void SetLeftCurve(string key, float[] data, Color lineColor, CurveStyle style)
{
this.SetCurve(key, 0, data, lineColor, 1f, style);
}
///
/// 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色随机,没有数据上限,线条宽度为1
///
/// 曲线关键字
/// 数据内容
// Token: 0x06000226 RID: 550 RVA: 0x0001E8C0 File Offset: 0x0001CAC0
public void SetRightCurve(string key, float[] data)
{
this.SetRightCurve(key, data, Color.FromArgb(this.random.Next(256), this.random.Next(256), this.random.Next(256)));
}
///
/// 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1
///
/// 曲线关键字
/// 数据内容
/// 曲线颜色
// Token: 0x06000227 RID: 551 RVA: 0x0001E90C File Offset: 0x0001CB0C
public void SetRightCurve(string key, float[] data, Color lineColor)
{
this.SetCurve(key, 1, data, lineColor, 1f, CurveStyle.LineSegment);
}
///
/// 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1
///
/// 曲线关键字
/// 数据内容
/// 曲线颜色
/// 曲线的样式
// Token: 0x06000228 RID: 552 RVA: 0x0001E920 File Offset: 0x0001CB20
public void SetRightCurve(string key, float[] data, Color lineColor, CurveStyle style)
{
this.SetCurve(key, 1, data, lineColor, 1f, style);
}
///
/// 新增或修改一条指定关键字的曲线数据,需要指定参考系及数据,颜色,线条宽度
///
/// 曲线关键字
/// 是否以左侧坐标轴为参照系
/// 数据
/// 线条颜色
/// 线条宽度
/// 曲线的样式
// Token: 0x06000229 RID: 553 RVA: 0x0001E938 File Offset: 0x0001CB38
public void SetCurve(string key, int referenceAxis, float[] data, Color lineColor, float thickness, CurveStyle style)
{
bool flag = this.data_list.ContainsKey(key);
if (flag)
{
bool flag2 = data == null;
if (flag2)
{
data = new float[0];
}
this.data_list[key].Data = data;
bool flag3 = this.data_text != null && this.data_text.Length != data.Length;
if (flag3)
{
this.data_text = new string[data.Length];
}
}
else
{
bool flag4 = data == null;
if (flag4)
{
data = new float[0];
}
this.data_list.Add(key, new HslCurveItem
{
Data = data,
MarkText = new string[data.Length],
LineThickness = thickness,
LineColor = lineColor,
ReferenceAxisIndex = referenceAxis,
Style = style
});
bool flag5 = this.data_text == null || this.data_text.Length != data.Length;
if (flag5)
{
this.data_text = new string[data.Length];
}
}
base.Invalidate();
}
///
/// 移除指定关键字的曲线
///
/// 曲线关键字
// Token: 0x0600022A RID: 554 RVA: 0x0001EA48 File Offset: 0x0001CC48
public void RemoveCurve(string key)
{
bool flag = this.data_list.ContainsKey(key);
if (flag)
{
this.data_list.Remove(key);
}
bool flag2 = this.data_list.Count == 0;
if (flag2)
{
this.data_text = new string[0];
}
base.Invalidate();
}
///
/// 移除所有的曲线
///
// Token: 0x0600022B RID: 555 RVA: 0x0001EA9C File Offset: 0x0001CC9C
public void RemoveAllCurve()
{
int count = this.data_list.Count;
this.data_list.Clear();
bool flag = this.data_list.Count == 0;
if (flag)
{
this.data_text = new string[0];
}
bool flag2 = count > 0;
if (flag2)
{
base.Invalidate();
}
}
///
/// 移除所有曲线的数据
///
// Token: 0x0600022C RID: 556 RVA: 0x0001EAF4 File Offset: 0x0001CCF4
public void RemoveAllCurveData()
{
int count = this.data_list.Count;
foreach (KeyValuePair keyValuePair in this.data_list)
{
keyValuePair.Value.Data = new float[0];
keyValuePair.Value.MarkText = new string[0];
}
this.data_text = new string[0];
bool flag = count > 0;
if (flag)
{
base.Invalidate();
}
}
///
/// 获取曲线图中已经存在的曲线对象,用于动态修改一些复杂的数据信息,如线宽,标记点,修改以前的数据内容等等
///
/// 关键字
/// 曲线对象信息
// Token: 0x0600022D RID: 557 RVA: 0x0001EB90 File Offset: 0x0001CD90
public HslCurveItem GetCurveItem(string key)
{
bool flag = this.data_list.ContainsKey(key);
HslCurveItem result;
if (flag)
{
result = this.data_list[key];
}
else
{
result = null;
}
return result;
}
///
/// 将当前的图形曲线保存为图片内容,可用于存储本地的文件,或是打印到纸张,默认大小为控件的大小
///
/// 图片内容
// Token: 0x0600022E RID: 558 RVA: 0x0001EBC4 File Offset: 0x0001CDC4
public Bitmap SaveToBitmap()
{
return this.SaveToBitmap(base.Width, base.Height);
}
///
/// 将当前的图形曲线保存为图片内容,可用于存储本地的文件,或是打印到纸张,使用指定的大小,显示的曲线可能和控件上的不一致
///
/// 图片内容
// Token: 0x0600022F RID: 559 RVA: 0x0001EBE8 File Offset: 0x0001CDE8
public Bitmap SaveToBitmap(int width, int height)
{
Bitmap bitmap = new Bitmap(width, height);
Graphics graphics = Graphics.FromImage(bitmap);
this.OnPaint(new PaintEventArgs(graphics, new Rectangle(0, 0, width, height)));
return bitmap;
}
///
/// 新增指定关键字曲线的一个数据,注意该关键字的曲线必须存在,否则无效
///
/// 新增曲线的关键字
/// 数据值
/// 标记的文本信息
/// 是否刷新界面
// Token: 0x06000230 RID: 560 RVA: 0x0001EC20 File Offset: 0x0001CE20
private void AddCurveData(string key, float[] values, string[] markTexts, bool isUpdateUI)
{
bool flag = values != null && values.Length < 1;
if (!flag)
{
bool flag2 = this.data_list.ContainsKey(key);
if (flag2)
{
HslCurveItem hslCurveItem = this.data_list[key];
bool flag3 = hslCurveItem.Data != null;
if (flag3)
{
bool flag4 = this.value_IsAbscissaStrech;
if (flag4)
{
HslHelper.AddArrayData(ref hslCurveItem.Data, values, this.value_StrechDataCountMax);
HslHelper.AddArrayData(ref hslCurveItem.MarkText, markTexts, this.value_StrechDataCountMax);
}
else
{
HslHelper.AddArrayData(ref hslCurveItem.Data, values, 4096);
HslHelper.AddArrayData(ref hslCurveItem.MarkText, markTexts, 4096);
}
if (isUpdateUI)
{
base.Invalidate();
}
}
}
}
}
// Token: 0x06000231 RID: 561 RVA: 0x0001ECE0 File Offset: 0x0001CEE0
private void AddCurveTime(int count)
{
this.AddCurveTime(count, DateTime.Now.ToString(this.textFormat));
}
// Token: 0x06000232 RID: 562 RVA: 0x0001ED0C File Offset: 0x0001CF0C
private void AddCurveTime(int count, string text)
{
bool flag = this.data_text == null;
if (!flag)
{
string[] array = new string[count];
for (int i = 0; i < array.Length; i++)
{
array[i] = text;
}
bool flag2 = this.value_IsAbscissaStrech;
if (flag2)
{
HslHelper.AddArrayData(ref this.data_text, array, this.value_StrechDataCountMax);
}
else
{
HslHelper.AddArrayData(ref this.data_text, array, 4096);
}
}
}
///
/// 新增指定关键字曲线的一个数据,注意该关键字的曲线必须存在,否则无效
///
/// 曲线的关键字
/// 数据值
// Token: 0x06000233 RID: 563 RVA: 0x0001ED7F File Offset: 0x0001CF7F
public void AddCurveData(string key, float value)
{
this.AddCurveData(key, new float[]
{
value
});
}
///
/// 新增指定关键字曲线的一个数据,注意该关键字的曲线必须存在,否则无效
///
/// 曲线的关键字
/// 数据值
/// 标记的本文信息
// Token: 0x06000234 RID: 564 RVA: 0x0001ED94 File Offset: 0x0001CF94
public void AddCurveData(string key, float value, string markText)
{
this.AddCurveData(key, new float[]
{
value
}, new string[]
{
markText
});
}
///
/// 新增指定关键字曲线的一组数据,注意该关键字的曲线必须存在,否则无效
///
/// 曲线的关键字
/// 数组值
// Token: 0x06000235 RID: 565 RVA: 0x0001EDB3 File Offset: 0x0001CFB3
public void AddCurveData(string key, float[] values)
{
this.AddCurveData(key, values, null);
}
///
/// 新增指定关键字曲线的一组数据,注意该关键字的曲线必须存在,否则无效
///
/// 曲线的关键字
/// 数组值
/// 标记的本文信息
// Token: 0x06000236 RID: 566 RVA: 0x0001EDC0 File Offset: 0x0001CFC0
public void AddCurveData(string key, float[] values, string[] markTexts)
{
bool flag = markTexts == null;
if (flag)
{
markTexts = new string[values.Length];
}
this.AddCurveData(key, values, markTexts, false);
bool flag2 = values != null && values.Length != 0;
if (flag2)
{
this.AddCurveTime(values.Length);
}
base.Invalidate();
}
///
/// 新增指定关键字数组曲线的一组数据,注意该关键字的曲线必须存在,否则无效,一个数据对应一个数组
///
/// 曲线的关键字数组
/// 数组值
// Token: 0x06000237 RID: 567 RVA: 0x0001EE0D File Offset: 0x0001D00D
public void AddCurveData(string[] keys, float[] values)
{
this.AddCurveData(keys, values, null);
}
///
/// 新增指定关键字数组曲线的一组数据,注意该关键字的曲线必须存在,否则无效,一个数据对应一个数组
///
/// 自定义的横轴坐标数据
/// 曲线的关键字数组
/// 数组值
// Token: 0x06000238 RID: 568 RVA: 0x0001EE1A File Offset: 0x0001D01A
public void AddCurveData(string axisText, string[] keys, float[] values)
{
this.AddCurveData(axisText, keys, values, null);
}
///
/// 新增指定关键字数组曲线的一组数据,注意该关键字的曲线必须存在,否则无效,一个数据对应一个数组
///
/// 曲线的关键字数组
/// 数组值
/// 标记的文本信息
// Token: 0x06000239 RID: 569 RVA: 0x0001EE28 File Offset: 0x0001D028
public void AddCurveData(string[] keys, float[] values, string[] markTexts)
{
bool flag = keys == null;
if (flag)
{
throw new ArgumentNullException("keys");
}
bool flag2 = values == null;
if (flag2)
{
throw new ArgumentNullException("values");
}
bool flag3 = markTexts == null;
if (flag3)
{
markTexts = new string[keys.Length];
}
bool flag4 = keys.Length != values.Length;
if (flag4)
{
throw new Exception("两个参数的数组长度不一致。");
}
bool flag5 = keys.Length != markTexts.Length;
if (flag5)
{
throw new Exception("两个参数的数组长度不一致。");
}
for (int i = 0; i < keys.Length; i++)
{
this.AddCurveData(keys[i], new float[]
{
values[i]
}, new string[]
{
markTexts[i]
}, false);
}
this.AddCurveTime(1);
base.Invalidate();
}
///
/// 新增指定关键字数组曲线的一组数据,注意该关键字的曲线必须存在,否则无效,一个数据对应一个数组
///
/// 自定义的横轴坐标数据
/// 曲线的关键字数组
/// 数组值
/// 标记的文本信息
// Token: 0x0600023A RID: 570 RVA: 0x0001EEF4 File Offset: 0x0001D0F4
public void AddCurveData(string axisText, string[] keys, float[] values, string[] markTexts)
{
bool flag = keys == null;
if (flag)
{
throw new ArgumentNullException("keys");
}
bool flag2 = values == null;
if (flag2)
{
throw new ArgumentNullException("values");
}
bool flag3 = markTexts == null;
if (flag3)
{
markTexts = new string[keys.Length];
}
bool flag4 = keys.Length != values.Length;
if (flag4)
{
throw new Exception("两个参数的数组长度不一致。");
}
bool flag5 = keys.Length != markTexts.Length;
if (flag5)
{
throw new Exception("两个参数的数组长度不一致。");
}
for (int i = 0; i < keys.Length; i++)
{
this.AddCurveData(keys[i], new float[]
{
values[i]
}, new string[]
{
markTexts[i]
}, false);
}
this.AddCurveTime(1, axisText);
base.Invalidate();
}
///
/// 设置一条曲线是否是可见的,如果该曲线不存在,则无效。
///
/// 关键字
/// 是否可见
// Token: 0x0600023B RID: 571 RVA: 0x0001EFC4 File Offset: 0x0001D1C4
public void SetCurveVisible(string key, bool visible)
{
bool flag = this.data_list.ContainsKey(key);
if (flag)
{
HslCurveItem hslCurveItem = this.data_list[key];
hslCurveItem.Visible = visible;
base.Invalidate();
}
}
///
/// 设置多条曲线是否是可见的,如果该曲线不存在,则无效。
///
/// 关键字
/// 是否可见
// Token: 0x0600023C RID: 572 RVA: 0x0001F000 File Offset: 0x0001D200
public void SetCurveVisible(string[] keys, bool visible)
{
foreach (string key in keys)
{
bool flag = this.data_list.ContainsKey(key);
if (flag)
{
HslCurveItem hslCurveItem = this.data_list[key];
hslCurveItem.Visible = visible;
}
}
base.Invalidate();
}
///
/// 获取当前曲线的字典信息,所有的曲线都在这里面,可以进行一些自由的控制
///
/// 包含所有曲线的词典信息
// Token: 0x0600023D RID: 573 RVA: 0x0001F055 File Offset: 0x0001D255
public Dictionary GetAllCurve()
{
return this.data_list;
}
///
/// 新增一条左侧的辅助线,使用默认的文本颜色
///
/// 数据值
// Token: 0x0600023E RID: 574 RVA: 0x0001F060 File Offset: 0x0001D260
public AuxiliaryLine AddLeftAuxiliary(float value)
{
return this.AddLeftAuxiliary(value, this.ColorLinesAndText);
}
///
/// 新增一条左侧的辅助线,使用指定的颜色
///
/// 数据值
/// 线条颜色
// Token: 0x0600023F RID: 575 RVA: 0x0001F080 File Offset: 0x0001D280
public AuxiliaryLine AddLeftAuxiliary(float value, Color lineColor)
{
return this.AddLeftAuxiliary(value, lineColor, 1f, true);
}
///
/// 新增一条左侧的辅助线
///
/// 数据值
/// 线条颜色
/// 线条宽度
/// 是否是虚线
// Token: 0x06000240 RID: 576 RVA: 0x0001F0A0 File Offset: 0x0001D2A0
public AuxiliaryLine AddLeftAuxiliary(float value, Color lineColor, float lineThickness, bool isDashLine)
{
return this.AddAuxiliary(value, lineColor, lineThickness, isDashLine, true);
}
///
/// 新增一条右侧的辅助线,使用默认的文本颜色
///
/// 数据值
// Token: 0x06000241 RID: 577 RVA: 0x0001F0C0 File Offset: 0x0001D2C0
public AuxiliaryLine AddRightAuxiliary(float value)
{
return this.AddRightAuxiliary(value, this.ColorLinesAndText);
}
///
/// 新增一条右侧的辅助线,使用指定的颜色
///
/// 数据值
/// 线条颜色
// Token: 0x06000242 RID: 578 RVA: 0x0001F0E0 File Offset: 0x0001D2E0
public AuxiliaryLine AddRightAuxiliary(float value, Color lineColor)
{
return this.AddRightAuxiliary(value, lineColor, 1f, true);
}
///
/// 新增一条右侧的辅助线
///
/// 数据值
/// 线条颜色
/// 线条宽度
/// 是否是虚线的信息
// Token: 0x06000243 RID: 579 RVA: 0x0001F100 File Offset: 0x0001D300
public AuxiliaryLine AddRightAuxiliary(float value, Color lineColor, float lineThickness, bool isDashLine)
{
return this.AddAuxiliary(value, lineColor, lineThickness, isDashLine, false);
}
// Token: 0x06000244 RID: 580 RVA: 0x0001F120 File Offset: 0x0001D320
private AuxiliaryLine AddAuxiliary(float value, Color lineColor, float lineThickness, bool isDashLine, bool isLeft)
{
AuxiliaryLine auxiliaryLine = new AuxiliaryLine
{
Value = value,
LineColor = lineColor,
PenDash = new Pen(lineColor)
{
DashStyle = DashStyle.Custom,
DashPattern = new float[]
{
5f,
5f
}
},
PenSolid = new Pen(lineColor),
IsDashStyle = isDashLine,
IsLeftFrame = isLeft,
LineThickness = lineThickness,
LineTextBrush = new SolidBrush(lineColor)
};
this.auxiliary_lines.Add(auxiliaryLine);
base.Invalidate();
return auxiliaryLine;
}
///
/// 移除所有的指定值的辅助曲线,包括左边的和右边的
///
/// 移除的数据值
// Token: 0x06000245 RID: 581 RVA: 0x0001F1C8 File Offset: 0x0001D3C8
public void RemoveAuxiliary(float value)
{
int num = 0;
for (int i = this.auxiliary_lines.Count - 1; i >= 0; i--)
{
bool flag = this.auxiliary_lines[i].Value == value;
if (flag)
{
this.auxiliary_lines[i].Dispose();
this.auxiliary_lines.RemoveAt(i);
num++;
}
}
bool flag2 = num > 0;
if (flag2)
{
base.Invalidate();
}
}
///
/// 移除一个指定的辅助对象
///
/// 移除的数据值
// Token: 0x06000246 RID: 582 RVA: 0x0001F248 File Offset: 0x0001D448
public void RemoveAuxiliary(AuxiliaryLine auxiliary)
{
bool flag = this.auxiliary_lines.Remove(auxiliary);
if (flag)
{
base.Invalidate();
}
}
///
/// 移除所有的辅助线
///
// Token: 0x06000247 RID: 583 RVA: 0x0001F270 File Offset: 0x0001D470
public void RemoveAllAuxiliary()
{
int count = this.auxiliary_lines.Count;
this.auxiliary_lines.Clear();
bool flag = count > 0;
if (flag)
{
base.Invalidate();
}
}
///
/// 新增一条辅助标签
///
/// 描述的标签值
// Token: 0x06000248 RID: 584 RVA: 0x0001F2A5 File Offset: 0x0001D4A5
public void AddAuxiliaryLabel(AuxiliaryLable auxiliaryLable)
{
this.auxiliary_Labels.Add(auxiliaryLable);
}
///
/// 移除指定的辅助标签
///
/// 等待删除的对象
// Token: 0x06000249 RID: 585 RVA: 0x0001F2B8 File Offset: 0x0001D4B8
public void RemoveAuxiliaryLable(AuxiliaryLable auxiliaryLable)
{
bool flag = this.auxiliary_Labels.Remove(auxiliaryLable);
if (flag)
{
base.Invalidate();
}
}
///
/// 移除所有的辅助标签
///
// Token: 0x0600024A RID: 586 RVA: 0x0001F2E0 File Offset: 0x0001D4E0
public void RemoveAllAuxiliaryLable()
{
int count = this.auxiliary_Labels.Count;
this.auxiliary_Labels.Clear();
bool flag = count > 0;
if (flag)
{
base.Invalidate();
}
}
///
/// 新增一个标记的文本信息
///
/// 文本标记信息
// Token: 0x0600024B RID: 587 RVA: 0x0001F318 File Offset: 0x0001D518
public void AddMarkText(HslMarkText markText)
{
this.hslMarkTexts.Add(markText);
bool flag = this.data_list.Count > 0;
if (flag)
{
base.Invalidate();
}
}
///
/// 移除一个标记的文本信息
///
/// 文本标记信息
// Token: 0x0600024C RID: 588 RVA: 0x0001F350 File Offset: 0x0001D550
public void RemoveMarkText(HslMarkText markText)
{
this.hslMarkTexts.Remove(markText);
bool flag = this.data_list.Count > 0;
if (flag)
{
base.Invalidate();
}
}
///
/// 移除所有的标记的文本信息
///
// Token: 0x0600024D RID: 589 RVA: 0x0001F388 File Offset: 0x0001D588
public void RemoveAllMarkText()
{
this.hslMarkTexts.Clear();
bool flag = this.data_list.Count > 0;
if (flag)
{
base.Invalidate();
}
}
///
/// 鼠标移动的信息
///
///
// Token: 0x0600024E RID: 590 RVA: 0x0001F3C0 File Offset: 0x0001D5C0
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
bool flag = false;
foreach (KeyValuePair keyValuePair in this.data_list)
{
bool flag2 = keyValuePair.Value.TitleRegion.Contains(e.Location);
if (flag2)
{
flag = true;
break;
}
}
this.Cursor = (flag ? Cursors.Hand : Cursors.Arrow);
}
///
/// 鼠标点击的信息
///
///
// Token: 0x0600024F RID: 591 RVA: 0x0001F45C File Offset: 0x0001D65C
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
foreach (KeyValuePair keyValuePair in this.data_list)
{
bool flag = keyValuePair.Value.TitleRegion.Contains(e.Location);
if (flag)
{
keyValuePair.Value.LineRenderVisiable = !keyValuePair.Value.LineRenderVisiable;
base.Invalidate();
break;
}
}
}
///
/// 重绘控件的基本外观
///
/// 重绘事件
// Token: 0x06000250 RID: 592 RVA: 0x0001F500 File Offset: 0x0001D700
protected override void OnPaint(PaintEventArgs e)
{
Graphics graphics = e.Graphics;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
this.PaintHslControls(graphics, base.Width, base.Height);
base.OnPaint(e);
}
///
// Token: 0x06000251 RID: 593 RVA: 0x0001F544 File Offset: 0x0001D744
public void PaintHslControls(Graphics g, int width, int height)
{
bool flag = !true;
if (!flag)
{
bool flag2 = this.BackColor != Color.Transparent;
if (flag2)
{
g.Clear(this.BackColor);
}
int num = height - this.upDown - this.upDown;
bool flag3 = width < 120 || height < 60;
if (!flag3)
{
Point[] array = new Point[]
{
new Point(this.leftRight - 1, this.upDown - 8),
new Point(this.leftRight - 1, height - this.upDown),
new Point(width - this.leftRight, height - this.upDown),
new Point(width - this.leftRight, this.upDown - 8)
};
g.DrawLine(this.pen_normal, array[1], array[2]);
g.DrawLine(this.referenceAxisLeft.GetPen(), array[0], array[1]);
bool flag4 = this.isRenderRightCoordinate;
if (flag4)
{
g.DrawLine(this.referenceAxisRight.GetPen(), array[2], array[3]);
}
bool flag5 = !string.IsNullOrEmpty(this.value_title);
if (flag5)
{
g.DrawString(this.value_title, this.font_size9, this.brush_deep, new Rectangle(0, 0, width - 1, 20), this.format_center);
}
else
{
bool flag6 = this.data_list.Count > 0;
if (flag6)
{
float num2 = (float)(this.leftRight + 10);
foreach (KeyValuePair keyValuePair in this.data_list)
{
bool visible = keyValuePair.Value.Visible;
if (visible)
{
Pen pen = keyValuePair.Value.LineRenderVisiable ? new Pen(keyValuePair.Value.LineColor) : new Pen(Color.FromArgb(80, keyValuePair.Value.LineColor));
g.DrawLine(pen, num2, (float)(this.upDown / 2 - 1), num2 + 30f, (float)(this.upDown / 2 - 1));
g.DrawEllipse(pen, num2 + 8f, (float)(this.upDown / 2 - 8), 14f, 14f);
pen.Dispose();
SolidBrush solidBrush = keyValuePair.Value.LineRenderVisiable ? new SolidBrush(keyValuePair.Value.LineColor) : new SolidBrush(Color.FromArgb(80, keyValuePair.Value.LineColor));
g.DrawString(keyValuePair.Key, this.Font, solidBrush, new RectangleF(num2 + 35f, (float)(this.upDown / 2 - 9), 120f, 18f), this.format_left);
keyValuePair.Value.TitleRegion = new RectangleF(num2, 2f, 60f, 18f);
solidBrush.Dispose();
num2 += (float)this.curveNameWidth;
}
}
}
}
for (int i = 0; i < this.auxiliary_Labels.Count; i++)
{
bool flag7 = !string.IsNullOrEmpty(this.auxiliary_Labels[i].Text);
if (flag7)
{
int num3 = (this.auxiliary_Labels[i].LocationX > 1f) ? ((int)this.auxiliary_Labels[i].LocationX) : ((int)(this.auxiliary_Labels[i].LocationX * (float)width));
int num4 = (int)g.MeasureString(this.auxiliary_Labels[i].Text, this.Font).Width + 3;
Point[] points = new Point[]
{
new Point(num3, 11),
new Point(num3 + 10, 20),
new Point(num3 + num4 + 10, 20),
new Point(num3 + num4 + 10, 0),
new Point(num3 + 10, 0),
new Point(num3, 11)
};
g.FillPolygon(this.auxiliary_Labels[i].TextBack, points);
g.DrawString(this.auxiliary_Labels[i].Text, this.Font, this.auxiliary_Labels[i].TextBrush, new Rectangle(num3 + 7, 0, num4 + 3, 20), this.format_center);
}
}
HslHelper.PaintTriangle(g, this.referenceAxisLeft.Brush, new Point(this.leftRight - 1, this.upDown - 8), 4, GraphDirection.Upward);
bool flag8 = this.isRenderRightCoordinate;
if (flag8)
{
HslHelper.PaintTriangle(g, this.referenceAxisRight.Brush, new Point(width - this.leftRight, this.upDown - 8), 4, GraphDirection.Upward);
}
bool flag9 = !string.IsNullOrEmpty(this.referenceAxisLeft.Unit);
if (flag9)
{
g.DrawString(this.referenceAxisLeft.Unit, this.font_size9, this.referenceAxisLeft.Brush, new RectangleF(0f, 0f, (float)(this.leftRight - 4), (float)(this.upDown - 5)), this.format_right);
}
bool flag10 = this.isRenderRightCoordinate && !string.IsNullOrEmpty(this.referenceAxisRight.Unit);
if (flag10)
{
g.DrawString(this.referenceAxisRight.Unit, this.font_size9, this.referenceAxisRight.Brush, new RectangleF((float)(width - this.leftRight + 4), 0f, (float)(this.leftRight - 4), (float)(this.upDown - 5)), this.format_left);
}
for (int j = 0; j < this.auxiliary_lines.Count; j++)
{
bool isLeftFrame = this.auxiliary_lines[j].IsLeftFrame;
if (isLeftFrame)
{
this.auxiliary_lines[j].PaintValue = HslHelper.ComputePaintLocationY(this.referenceAxisLeft, (float)num, this.auxiliary_lines[j].Value) + (float)this.upDown;
}
else
{
this.auxiliary_lines[j].PaintValue = HslHelper.ComputePaintLocationY(this.referenceAxisRight, (float)num, this.auxiliary_lines[j].Value) + (float)this.upDown;
}
}
for (int k = 0; k <= this.value_Segment; k++)
{
float value = (float)((double)k * (double)(this.referenceAxisLeft.Max - this.referenceAxisLeft.Min) / (double)this.value_Segment + (double)this.referenceAxisLeft.Min);
float num5 = HslHelper.ComputePaintLocationY(this.referenceAxisLeft.Max, this.referenceAxisLeft.Min, (float)num, value) + (float)this.upDown;
bool flag11 = this.IsNeedPaintDash(num5);
if (flag11)
{
g.DrawLine(this.referenceAxisLeft.GetPen(), (float)(this.leftRight - 4), num5, (float)(this.leftRight - 1), num5);
RectangleF layoutRectangle = new RectangleF(0f, num5 - 9f, (float)(this.leftRight - 4), 20f);
g.DrawString(HslHelper.GetFormatString(this.referenceAxisLeft.Format, value, false), this.font_size9, this.referenceAxisLeft.Brush, layoutRectangle, this.format_right);
bool flag12 = this.isRenderRightCoordinate;
if (flag12)
{
float value2 = (float)((double)k * (double)(this.referenceAxisRight.Max - this.referenceAxisRight.Min) / (double)this.value_Segment + (double)this.referenceAxisRight.Min);
g.DrawLine(this.referenceAxisRight.GetPen(), (float)(width - this.leftRight + 1), num5, (float)(width - this.leftRight + 4), num5);
layoutRectangle.Location = new PointF((float)(width - this.leftRight + 4), num5 - 9f);
g.DrawString(HslHelper.GetFormatString(this.referenceAxisRight.Format, value2, false), this.font_size9, this.referenceAxisRight.Brush, layoutRectangle, this.format_left);
}
bool flag13 = k > 0 && this.value_IsRenderDashLine;
if (flag13)
{
g.DrawLine(this.pen_dash, (float)this.leftRight, num5, (float)(width - this.leftRight), num5);
}
}
}
bool flag14 = this.value_IsRenderDashLine;
if (flag14)
{
bool flag15 = this.value_IsAbscissaStrech;
if (flag15)
{
float num6 = (float)(width - this.leftRight * 2) * 1f / (float)(this.value_StrechDataCountMax - 1);
int num7 = this.CalculateDataCountByOffect(num6);
for (int l = 0; l < this.value_StrechDataCountMax; l += num7)
{
bool flag16 = l > 0 && l < this.value_StrechDataCountMax - 1;
if (flag16)
{
g.DrawLine(this.pen_dash, (float)l * num6 + (float)this.leftRight, (float)this.upDown, (float)l * num6 + (float)this.leftRight, (float)(height - this.upDown - 1));
}
bool flag17 = this.data_text != null;
if (flag17)
{
bool flag18 = l < this.data_text.Length && (float)l * num6 + (float)this.leftRight < (float)(this.data_text.Length - 1) * num6 + (float)this.leftRight - 40f;
if (flag18)
{
Rectangle r = new Rectangle((int)((float)l * num6), height - this.upDown + 1, this.leftRight * 2, this.upDown);
g.DrawString(this.data_text[l], this.font_size9, this.brush_deep, r, this.format_center);
}
}
}
string[] array2 = this.data_text;
bool flag19 = array2 != null && array2.Length > 1;
if (flag19)
{
bool flag20 = this.data_text.Length < this.value_StrechDataCountMax;
if (flag20)
{
g.DrawLine(this.pen_dash, (float)(this.data_text.Length - 1) * num6 + (float)this.leftRight, (float)this.upDown, (float)(this.data_text.Length - 1) * num6 + (float)this.leftRight, (float)(height - this.upDown - 1));
}
Rectangle r2 = new Rectangle((int)((float)(this.data_text.Length - 1) * num6 + (float)this.leftRight) - this.leftRight, height - this.upDown + 1, this.leftRight * 2, this.upDown);
g.DrawString(this.data_text[this.data_text.Length - 1], this.font_size9, this.brush_deep, r2, this.format_center);
}
}
else
{
int num8 = width - 2 * this.leftRight + 1;
bool flag21 = this.value_IntervalAbscissaText > 0;
if (flag21)
{
for (int m = this.leftRight; m < width - this.leftRight; m += this.value_IntervalAbscissaText)
{
bool flag22 = m != this.leftRight;
if (flag22)
{
g.DrawLine(this.pen_dash, m, this.upDown, m, height - this.upDown - 1);
}
bool flag23 = this.data_text != null;
if (flag23)
{
int num9 = (num8 > this.data_text.Length) ? this.data_text.Length : num8;
bool flag24 = m - this.leftRight < this.data_text.Length;
if (flag24)
{
bool flag25 = num9 - (m - this.leftRight) > 40;
if (flag25)
{
bool flag26 = this.data_text.Length <= num8;
if (flag26)
{
Rectangle r3 = new Rectangle(m - this.leftRight, height - this.upDown + 1, this.leftRight * 2, this.upDown);
g.DrawString(this.data_text[m - this.leftRight], this.font_size9, this.brush_deep, r3, this.format_center);
}
else
{
Rectangle r4 = new Rectangle(m - this.leftRight, height - this.upDown + 1, this.leftRight * 2, this.upDown);
g.DrawString(this.data_text[m - this.leftRight + this.data_text.Length - num8], this.font_size9, this.brush_deep, r4, this.format_center);
}
}
}
}
}
}
string[] array3 = this.data_text;
bool flag27 = array3 != null && array3.Length > 1;
if (flag27)
{
bool flag28 = this.data_text.Length < num8;
if (flag28)
{
g.DrawLine(this.pen_dash, this.data_text.Length + this.leftRight - 1, this.upDown, this.data_text.Length + this.leftRight - 1, height - this.upDown - 1);
Rectangle r5 = new Rectangle(this.data_text.Length + this.leftRight - 1 - this.leftRight, height - this.upDown + 1, this.leftRight * 2, this.upDown);
g.DrawString(this.data_text[this.data_text.Length - 1], this.font_size9, this.brush_deep, r5, this.format_center);
}
else
{
Rectangle r6 = new Rectangle(width - this.leftRight - this.leftRight, height - this.upDown + 1, this.leftRight * 2, this.upDown);
g.DrawString(this.data_text[this.data_text.Length - 1], this.font_size9, this.brush_deep, r6, this.format_center);
}
}
}
}
for (int n = 0; n < this.auxiliary_lines.Count; n++)
{
bool isLeftFrame2 = this.auxiliary_lines[n].IsLeftFrame;
if (isLeftFrame2)
{
g.DrawLine(this.auxiliary_lines[n].GetPen(), (float)(this.leftRight - 4), this.auxiliary_lines[n].PaintValue, (float)(this.leftRight - 1), this.auxiliary_lines[n].PaintValue);
RectangleF layoutRectangle2 = new RectangleF(0f, this.auxiliary_lines[n].PaintValue - 9f, (float)(this.leftRight - 4), 20f);
g.DrawString(HslHelper.GetFormatString(this.referenceAxisLeft.Format, this.auxiliary_lines[n].Value, false), this.font_size9, this.auxiliary_lines[n].LineTextBrush, layoutRectangle2, this.format_right);
}
else
{
g.DrawLine(this.auxiliary_lines[n].GetPen(), (float)(width - this.leftRight + 1), this.auxiliary_lines[n].PaintValue, (float)(width - this.leftRight + 4), this.auxiliary_lines[n].PaintValue);
RectangleF layoutRectangle3 = new RectangleF((float)(width - this.leftRight + 4), this.auxiliary_lines[n].PaintValue - 9f, (float)(this.leftRight - 4), 20f);
g.DrawString(HslHelper.GetFormatString(this.referenceAxisRight.Format, this.auxiliary_lines[n].Value, false), this.font_size9, this.auxiliary_lines[n].LineTextBrush, layoutRectangle3, this.format_left);
}
g.DrawLine(this.auxiliary_lines[n].GetPen(), (float)this.leftRight, this.auxiliary_lines[n].PaintValue, (float)(width - this.leftRight), this.auxiliary_lines[n].PaintValue);
}
bool flag29 = this.value_IsAbscissaStrech;
if (flag29)
{
foreach (HslMarkText hslMarkText in this.hslMarkTexts)
{
foreach (KeyValuePair keyValuePair2 in this.data_list)
{
bool flag30 = !keyValuePair2.Value.Visible;
if (!flag30)
{
bool flag31 = !keyValuePair2.Value.LineRenderVisiable;
if (!flag31)
{
bool flag32 = keyValuePair2.Key != hslMarkText.CurveKey;
if (!flag32)
{
float[] data = keyValuePair2.Value.Data;
bool flag33 = data != null && data.Length > 1;
if (flag33)
{
float num10 = (float)(width - this.leftRight * 2) * 1f / (float)(this.value_StrechDataCountMax - 1);
bool flag34 = hslMarkText.Index >= 0 && hslMarkText.Index < keyValuePair2.Value.Data.Length;
if (flag34)
{
PointF center = new PointF((float)this.leftRight + (float)hslMarkText.Index * num10, HslHelper.ComputePaintLocationY((keyValuePair2.Value.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Max : this.referenceAxisRight.Max, (keyValuePair2.Value.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Min : this.referenceAxisRight.Min, (float)num, keyValuePair2.Value.Data[hslMarkText.Index]) + (float)this.upDown);
MarkTextPositionStyle markTextPosition = (hslMarkText.PositionStyle == MarkTextPositionStyle.Auto) ? HslMarkText.CalculateDirectionFromDataIndex(keyValuePair2.Value.Data, hslMarkText.Index) : hslMarkText.PositionStyle;
HslCurveHelper.DrawHslMarkTextPoint(g, hslMarkText, center, this.Font, markTextPosition);
}
}
}
}
}
}
}
foreach (HslCurveItem hslCurveItem in this.data_list.Values)
{
bool flag35 = !hslCurveItem.Visible;
if (!flag35)
{
bool flag36 = !hslCurveItem.LineRenderVisiable;
if (!flag36)
{
float[] data2 = hslCurveItem.Data;
bool flag37 = data2 != null && data2.Length > 1;
if (flag37)
{
float num11 = (float)(width - this.leftRight * 2) * 1f / (float)(this.value_StrechDataCountMax - 1);
List list = new List(hslCurveItem.Data.Length);
for (int num12 = 0; num12 < hslCurveItem.Data.Length; num12++)
{
bool flag38 = !float.IsNaN(hslCurveItem.Data[num12]);
if (flag38)
{
PointF pointF = new PointF
{
X = (float)this.leftRight + (float)num12 * num11,
Y = HslHelper.ComputePaintLocationY((hslCurveItem.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Max : this.referenceAxisRight.Max, (hslCurveItem.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Min : this.referenceAxisRight.Min, (float)num, hslCurveItem.Data[num12]) + (float)this.upDown
};
list.Add(pointF);
bool flag39 = !string.IsNullOrEmpty(hslCurveItem.MarkText[num12]);
if (flag39)
{
using (Brush brush = new SolidBrush(hslCurveItem.LineColor))
{
g.FillEllipse(brush, new RectangleF(pointF.X - 3f, pointF.Y - 3f, 6f, 6f));
MarkTextPositionStyle markTextPosition2 = HslMarkText.CalculateDirectionFromDataIndex(hslCurveItem.Data, num12);
HslCurveHelper.DrawTextByPoint(g, hslCurveItem.MarkText[num12], pointF, this.Font, brush, markTextPosition2, 5);
}
}
}
else
{
HslCurveHelper.DrawLineCore(g, hslCurveItem, list, this.pointsRadius, -1f);
list.Clear();
}
}
HslCurveHelper.DrawLineCore(g, hslCurveItem, list, this.pointsRadius, -1f);
}
}
}
}
}
else
{
foreach (HslMarkText hslMarkText2 in this.hslMarkTexts)
{
foreach (KeyValuePair keyValuePair3 in this.data_list)
{
bool flag40 = !keyValuePair3.Value.Visible;
if (!flag40)
{
bool flag41 = !keyValuePair3.Value.LineRenderVisiable;
if (!flag41)
{
bool flag42 = keyValuePair3.Key != hslMarkText2.CurveKey;
if (!flag42)
{
float[] data3 = keyValuePair3.Value.Data;
bool flag43 = data3 != null && data3.Length > 1;
if (flag43)
{
bool flag44 = hslMarkText2.Index >= 0 && hslMarkText2.Index < keyValuePair3.Value.Data.Length;
if (flag44)
{
PointF center2 = new PointF((float)(this.leftRight + hslMarkText2.Index), HslHelper.ComputePaintLocationY((keyValuePair3.Value.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Max : this.referenceAxisRight.Max, (keyValuePair3.Value.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Min : this.referenceAxisRight.Min, (float)num, keyValuePair3.Value.Data[hslMarkText2.Index]) + (float)this.upDown);
MarkTextPositionStyle markTextPosition3 = (hslMarkText2.PositionStyle == MarkTextPositionStyle.Auto) ? HslMarkText.CalculateDirectionFromDataIndex(keyValuePair3.Value.Data, hslMarkText2.Index) : hslMarkText2.PositionStyle;
HslCurveHelper.DrawHslMarkTextPoint(g, hslMarkText2, center2, this.Font, markTextPosition3);
}
}
}
}
}
}
}
foreach (HslCurveItem hslCurveItem2 in this.data_list.Values)
{
bool flag45 = !hslCurveItem2.Visible;
if (!flag45)
{
bool flag46 = !hslCurveItem2.LineRenderVisiable;
if (!flag46)
{
float[] data4 = hslCurveItem2.Data;
bool flag47 = data4 != null && data4.Length > 1;
if (flag47)
{
int num13 = width - 2 * this.leftRight + 1;
List list2 = new List(hslCurveItem2.Data.Length);
bool flag48 = hslCurveItem2.Data.Length <= num13;
if (flag48)
{
for (int num14 = 0; num14 < hslCurveItem2.Data.Length; num14++)
{
bool flag49 = !float.IsNaN(hslCurveItem2.Data[num14]);
if (flag49)
{
PointF pointF2 = new PointF
{
X = (float)(this.leftRight + num14),
Y = HslHelper.ComputePaintLocationY((hslCurveItem2.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Max : this.referenceAxisRight.Max, (hslCurveItem2.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Min : this.referenceAxisRight.Min, (float)num, hslCurveItem2.Data[num14]) + (float)this.upDown
};
list2.Add(pointF2);
this.DrawMarkPoint(g, hslCurveItem2.MarkText[num14], pointF2, hslCurveItem2.LineColor, HslMarkText.CalculateDirectionFromDataIndex(hslCurveItem2.Data, num14));
}
else
{
HslCurveHelper.DrawLineCore(g, hslCurveItem2, list2, this.pointsRadius, -1f);
list2.Clear();
}
}
}
else
{
for (int num15 = 0; num15 < num13; num15++)
{
int num16 = num15 + hslCurveItem2.Data.Length - num13;
bool flag50 = !float.IsNaN(hslCurveItem2.Data[num16]);
if (flag50)
{
PointF pointF3 = new PointF
{
X = (float)(this.leftRight + num15),
Y = HslHelper.ComputePaintLocationY((hslCurveItem2.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Max : this.referenceAxisRight.Max, (hslCurveItem2.ReferenceAxisIndex == 0) ? this.referenceAxisLeft.Min : this.referenceAxisRight.Min, (float)num, hslCurveItem2.Data[num16]) + (float)this.upDown
};
list2.Add(pointF3);
this.DrawMarkPoint(g, hslCurveItem2.MarkText[num16], pointF3, hslCurveItem2.LineColor, HslMarkText.CalculateDirectionFromDataIndex(hslCurveItem2.Data, num16));
}
else
{
HslCurveHelper.DrawLineCore(g, hslCurveItem2, list2, this.pointsRadius, -1f);
list2.Clear();
}
}
}
HslCurveHelper.DrawLineCore(g, hslCurveItem2, list2, this.pointsRadius, -1f);
}
}
}
}
}
}
}
}
// Token: 0x06000252 RID: 594 RVA: 0x00020FF4 File Offset: 0x0001F1F4
private void DrawMarkPoint(Graphics g, string markText, PointF center, Color color, MarkTextPositionStyle markTextPosition)
{
bool flag = !string.IsNullOrEmpty(markText);
if (flag)
{
using (Brush brush = new SolidBrush(color))
{
this.DrawMarkPoint(g, markText, center, brush, markTextPosition);
}
}
}
// Token: 0x06000253 RID: 595 RVA: 0x00021048 File Offset: 0x0001F248
private void DrawMarkPoint(Graphics g, string markText, PointF center, Brush brush, MarkTextPositionStyle markTextPosition)
{
bool flag = !string.IsNullOrEmpty(markText);
if (flag)
{
g.FillEllipse(brush, new RectangleF(center.X - 3f, center.Y - 3f, 6f, 6f));
HslCurveHelper.DrawTextByPoint(g, markText, center, this.Font, brush, markTextPosition, 5);
}
}
// Token: 0x06000254 RID: 596 RVA: 0x000210AC File Offset: 0x0001F2AC
private bool IsNeedPaintDash(float paintValue)
{
for (int i = 0; i < this.auxiliary_lines.Count; i++)
{
bool flag = Math.Abs(this.auxiliary_lines[i].PaintValue - paintValue) < (float)this.font_size9.Height;
if (flag)
{
return false;
}
}
return true;
}
// Token: 0x06000255 RID: 597 RVA: 0x0002110C File Offset: 0x0001F30C
private int CalculateDataCountByOffect(float offect)
{
bool flag = this.value_IntervalAbscissaText > 0;
int result;
if (flag)
{
result = this.value_IntervalAbscissaText;
}
else
{
bool flag2 = offect > 40f;
if (flag2)
{
result = 1;
}
else
{
offect = 40f / offect;
result = (int)Math.Ceiling((double)offect);
}
}
return result;
}
///
/// 清理所有正在使用的资源。
///
/// 如果应释放托管资源,为 true;否则为 false。
// Token: 0x06000256 RID: 598 RVA: 0x00021158 File Offset: 0x0001F358
protected override void Dispose(bool disposing)
{
bool flag = disposing && this.components != null;
if (flag)
{
this.components.Dispose();
}
base.Dispose(disposing);
}
///
/// 设计器支持所需的方法 - 不要修改
/// 使用代码编辑器修改此方法的内容。
///
// Token: 0x06000257 RID: 599 RVA: 0x00021190 File Offset: 0x0001F390
private void InitializeComponent()
{
base.SuspendLayout();
base.AutoScaleMode = AutoScaleMode.None;
this.BackColor = Color.Transparent;
base.Name = "HslCurve";
base.Size = new Size(417, 205);
base.ResumeLayout(false);
}
// Token: 0x040000EE RID: 238
private const int value_count_max = 4096;
// Token: 0x040000EF RID: 239
private int value_Segment = 5;
// Token: 0x040000F0 RID: 240
private bool value_IsAbscissaStrech = false;
// Token: 0x040000F1 RID: 241
private int value_StrechDataCountMax = 300;
// Token: 0x040000F2 RID: 242
private bool value_IsRenderDashLine = true;
// Token: 0x040000F3 RID: 243
private string textFormat = "HH:mm";
// Token: 0x040000F4 RID: 244
private int value_IntervalAbscissaText = 100;
// Token: 0x040000F5 RID: 245
private Random random = null;
// Token: 0x040000F6 RID: 246
private string value_title = "";
// Token: 0x040000F7 RID: 247
private ReferenceAxis referenceAxisLeft;
// Token: 0x040000F8 RID: 248
private ReferenceAxis referenceAxisRight;
// Token: 0x040000F9 RID: 249
private int leftRight = 50;
// Token: 0x040000FA RID: 250
private int upDown = 25;
// Token: 0x040000FB RID: 251
private Dictionary data_list = null;
// Token: 0x040000FC RID: 252
private string[] data_text = null;
// Token: 0x040000FD RID: 253
private List auxiliary_lines;
// Token: 0x040000FE RID: 254
private List auxiliary_Labels;
// Token: 0x040000FF RID: 255
private List hslMarkTexts;
// Token: 0x04000100 RID: 256
private Font font_size9 = null;
// Token: 0x04000101 RID: 257
private Brush brush_deep = null;
// Token: 0x04000102 RID: 258
private Pen pen_normal = null;
// Token: 0x04000103 RID: 259
private Pen pen_dash = null;
// Token: 0x04000104 RID: 260
private Color color_normal = Color.DeepPink;
// Token: 0x04000105 RID: 261
private Color color_deep = Color.DimGray;
// Token: 0x04000106 RID: 262
private Color color_dash = Color.Gray;
// Token: 0x04000107 RID: 263
private Color color_mark_font = Color.DodgerBlue;
// Token: 0x04000108 RID: 264
private Brush brush_mark_font = Brushes.DodgerBlue;
// Token: 0x04000109 RID: 265
private StringFormat format_left = null;
// Token: 0x0400010A RID: 266
private StringFormat format_right = null;
// Token: 0x0400010B RID: 267
private StringFormat format_center = null;
// Token: 0x0400010C RID: 268
private bool isRenderRightCoordinate = true;
// Token: 0x0400010D RID: 269
private int curveNameWidth = 100;
// Token: 0x0400010E RID: 270
private int pointsRadius = 0;
///
/// 必需的设计器变量。
///
// Token: 0x0400010F RID: 271
private IContainer components = null;
}
}