using System; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Globalization; using System.Net; using System.Windows.Forms; namespace Mesnac.Controls.ChemicalWeighing.HslCurve { /// /// 一个高级的历史曲线的控件信息,适合用来显示不变的历史曲线,支持一些高级的操作功能 /// // Token: 0x02000023 RID: 35 [Description("历史曲线控件,支持光标移动,显示x,y轴数据信息,支持多条曲线,支持左右两个坐标轴")] [ToolboxBitmap(typeof(HslCurveHistory), "Resources.HslCurveHistory.bmp")] public class HslCurveHistory : UserControl { /// /// 实例化一个默认的历史曲线控件 /// // Token: 0x060002DE RID: 734 RVA: 0x00022200 File Offset: 0x00020400 public HslCurveHistory() { this.auxiliary_lines = new List(); this.data_dicts = new Dictionary(); this.data_lists = new List(); this.markBackSections = new List(); this.markForeSections = new List(); this.markForeSectionsTmp = new List(); this.markForeActiveSections = new List(); this.hslMarkTexts = new List(); this.hslMarkImages = new List(); this.hslMarkLines = new List(); this.auxiliary_Labels = new List(); this.data_times = new List(0); this.data_customer = new List(); this.coordinateDashPen = new Pen(Color.FromArgb(72, 72, 72)); this.coordinateDashPen.DashPattern = new float[] { 5f, 5f }; this.coordinateDashPen.DashStyle = DashStyle.Custom; this.random = new Random(); this.referenceAxes = new ReferenceAxisCollection(this); this.referenceAxisLeft = new ReferenceAxis(this); this.referenceAxisRight = new ReferenceAxis(this); this.InitializeComponent(); base.SetStyle(ControlStyles.UserPaint | ControlStyles.SupportsTransparentBackColor, true); base.SetStyle(ControlStyles.ResizeRedraw, true); base.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); base.SetStyle(ControlStyles.AllPaintingInWmPaint, true); base.BackColor = Color.FromArgb(46, 46, 46); base.ForeColor = Color.Yellow; } // Token: 0x060002DF RID: 735 RVA: 0x0002267D File Offset: 0x0002087D private void HslInvalidate() { base.Invalidate(); } /// // Token: 0x060002E0 RID: 736 RVA: 0x00022688 File Offset: 0x00020888 protected override void OnLoad(EventArgs e) { base.OnLoad(e); base.MouseMove += this.PictureBox3_MouseMove; base.MouseLeave += this.PictureBox3_MouseLeave; base.MouseEnter += this.PictureBox3_MouseEnter; base.MouseDown += this.PictureBox3_MouseDown; base.MouseUp += this.PictureBox3_MouseUp; base.Paint += this.PictureBox3_Paint; base.MouseDoubleClick += this.PictureBox3_MouseDoubleClick; } /// // Token: 0x060002E1 RID: 737 RVA: 0x00022724 File Offset: 0x00020924 protected override void OnKeyDown(KeyEventArgs e) { bool flag = this.syncHslCurveHistory != null; if (flag) { this.syncHslCurveHistory.OnKeyDown(e); } else { bool flag2 = e.KeyCode == Keys.Left; if (flag2) { this.scrollX -= 5; bool flag3 = this.scrollX < 0; if (flag3) { this.scrollX = 0; } this.HslInvalidate(); } else { bool flag4 = e.KeyCode == Keys.Right; if (flag4) { this.scrollX += 5; bool flag5 = this.scrollX > this.scrollMaxX; if (flag5) { this.scrollX = this.scrollMaxX; } this.HslInvalidate(); } } base.OnKeyDown(e); } } /// // Token: 0x060002E2 RID: 738 RVA: 0x000227DC File Offset: 0x000209DC protected override void OnMouseWheel(MouseEventArgs e) { bool flag = this.syncHslCurveHistory != null; if (flag) { this.syncHslCurveHistory.OnMouseWheel(e); } else { bool flag2 = this.ScaleMode > ScaleMode.None; if (flag2) { bool flag3 = this.mouse_location.X < 0; if (flag3) { return; } int actualLeftWidth = this.GetActualLeftWidth(); int num = this.mouse_location.X + this.offsetPaintScrollX; int num2 = this.mouse_location.Y - 20 + this.offsetPaintScrollY; bool flag4 = this.scale_x_index >= this.scale_x_options.Length; if (flag4) { this.scale_x_index = this.scale_x_options.Length - 1; } bool flag5 = this.scale_y_index >= this.scale_y_options.Length; if (flag5) { this.scale_y_index = this.scale_y_options.Length - 1; } bool flag6 = e.Delta == 120; if (flag6) { bool flag7 = this.scale_x_index < this.scale_x_options.Length - 1; if (flag7) { this.scale_x_index++; this.data_ScaleX_Render = this.scale_x_options[this.scale_x_index]; bool flag8 = this.ScaleMode == ScaleMode.Both && this.data_ScaleX_Render > 0.95f; if (flag8) { this.data_ScaleY_Render = this.data_ScaleX_Render; this.offsetPaintScrollY = this.EnsureOffsetPaintScrollY(Convert.ToInt32((double)num2 * 1.0 * (double)this.scale_x_options[this.scale_x_index] / (double)this.scale_x_options[this.scale_x_index - 1]) - (this.mouse_location.Y - 20)); } int num3 = this.CalculatePaintWidthAndScrollMax(base.Width - actualLeftWidth - this.rightWidth); bool flag9 = num3 - (base.Width - actualLeftWidth - this.rightWidth) == 0; if (flag9) { this.SetScrollXNewValue(0); this.offsetPaintScrollX = 0; } else { this.SetScrollXNewValue(Convert.ToInt32(((double)num * 1.0 * (double)this.scale_x_options[this.scale_x_index] / (double)this.scale_x_options[this.scale_x_index - 1] - (double)this.mouse_location.X) * 1.0 * (double)this.scrollMaxX * 1.0 / (double)(num3 - (base.Width - actualLeftWidth - this.rightWidth)))); this.offsetPaintScrollX = Convert.ToInt32((double)num * 1.0 * (double)this.scale_x_options[this.scale_x_index] / (double)this.scale_x_options[this.scale_x_index - 1]) - this.mouse_location.X; this.offsetPaintScrollX = HslHelper.Middle(0, this.offsetPaintScrollX, num3 - (base.Width - actualLeftWidth - this.rightWidth)); } this.HslInvalidate(); } else { bool flag10 = this.ScaleMode == ScaleMode.XThenY && this.scale_y_index < this.scale_y_options.Length - 1; if (flag10) { this.scale_y_index++; this.data_ScaleY_Render = this.scale_y_options[this.scale_y_index]; this.offsetPaintScrollY = this.EnsureOffsetPaintScrollY(Convert.ToInt32((double)num2 * 1.0 * (double)this.scale_y_options[this.scale_y_index] / (double)this.scale_y_options[this.scale_y_index - 1]) - (this.mouse_location.Y - 20)); this.HslInvalidate(); } } } else { bool flag11 = e.Delta == -120; if (flag11) { bool flag12 = this.ScaleMode == ScaleMode.XThenY && this.scale_y_index > 0; if (flag12) { this.scale_y_index--; this.data_ScaleY_Render = this.scale_y_options[this.scale_y_index]; this.offsetPaintScrollY = this.EnsureOffsetPaintScrollY(Convert.ToInt32((double)num2 * 1.0 * (double)this.scale_y_options[this.scale_y_index] / (double)this.scale_y_options[this.scale_y_index + 1]) - (this.mouse_location.Y - 20)); this.HslInvalidate(); } else { bool flag13 = this.scale_x_index > 0; if (flag13) { this.scale_x_index--; this.data_ScaleX_Render = this.scale_x_options[this.scale_x_index]; bool flag14 = this.ScaleMode == ScaleMode.Both && this.data_ScaleX_Render > 0.95f; if (flag14) { this.data_ScaleY_Render = this.data_ScaleX_Render; this.offsetPaintScrollY = this.EnsureOffsetPaintScrollY(Convert.ToInt32((double)num2 * 1.0 * (double)this.scale_x_options[this.scale_x_index] / (double)this.scale_x_options[this.scale_x_index + 1]) - (this.mouse_location.Y - 20)); } int num4 = this.CalculatePaintWidthAndScrollMax(base.Width - actualLeftWidth - this.rightWidth); bool flag15 = num4 - (base.Width - actualLeftWidth - this.rightWidth) <= 0; if (flag15) { this.SetScrollXNewValue(0); this.offsetPaintScrollX = 0; } else { this.SetScrollXNewValue(Convert.ToInt32(((double)num * 1.0 * (double)this.scale_x_options[this.scale_x_index] / (double)this.scale_x_options[this.scale_x_index + 1] - (double)this.mouse_location.X) * 1.0 * (double)this.scrollMaxX * 1.0 / (double)(num4 - (base.Width - actualLeftWidth - this.rightWidth)))); this.offsetPaintScrollX = Convert.ToInt32((double)num * 1.0 * (double)this.scale_x_options[this.scale_x_index] / (double)this.scale_x_options[this.scale_x_index + 1]) - this.mouse_location.X; this.offsetPaintScrollX = HslHelper.Middle(0, this.offsetPaintScrollX, num4 - (base.Width - actualLeftWidth - this.rightWidth)); } this.HslInvalidate(); } } } } HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } base.OnMouseWheel(e); } } // Token: 0x060002E3 RID: 739 RVA: 0x00022E10 File Offset: 0x00021010 private int EnsureOffsetPaintScrollY(int offsetPaintScrollY) { int num = (int)((float)(base.Height - this.topHeadHeight - this.buttomHeight - 40) * this.data_ScaleY_Render); offsetPaintScrollY = HslHelper.Middle(0, offsetPaintScrollY, num - (base.Height - this.topHeadHeight - this.buttomHeight - 40)); return offsetPaintScrollY; } /// /// 设置横向滚动条的位置信息 /// /// 位置信息 // Token: 0x060002E4 RID: 740 RVA: 0x00022E66 File Offset: 0x00021066 public void SetScrollPosition(ScrollEventArgs e) { this.SetScrollXNewValue(e.NewValue); this.Refresh(); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } /// /// 设置一个同步的历史曲线控件,本历史曲线的工作将根据目标历史曲线控件来动作 /// /// 目标历史曲线控件 // Token: 0x060002E5 RID: 741 RVA: 0x00022EA4 File Offset: 0x000210A4 public void SetSyncHslCurveHistory(HslCurveHistory hslCurveHistory) { this.syncHslCurveHistory = hslCurveHistory; bool flag = hslCurveHistory != null; if (flag) { hslCurveHistory.OnScaleChanged += delegate (HslCurveHistory curve, int i, float j, int k) { this.data_ScaleX_Render = j; this.SetScrollXNewValue(i); this.offsetPaintScrollX = k; this.Refresh(); }; hslCurveHistory.onCurveMouseMove += delegate (HslCurveHistory curve, int x, int y) { this.SetCurveMousePosition(x, y); }; } } /// /// 将曲线的滚动条设置到最右侧 /// // Token: 0x060002E6 RID: 742 RVA: 0x00022EEC File Offset: 0x000210EC public void ScrollToRight() { this.isShowTextInfomation = false; int actualLeftWidth = this.GetActualLeftWidth(); this.CalculatePaintWidthAndScrollMax(base.Width - actualLeftWidth - this.rightWidth); this.SetScrollXNewValue(this.scrollMaxX); this.HslInvalidate(); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } // Token: 0x060002E7 RID: 743 RVA: 0x00022F58 File Offset: 0x00021158 public void ScrollToIndex(int index) { int actualLeftWidth = this.GetActualLeftWidth(); this.CalculatePaintWidthAndScrollMax(base.Width - actualLeftWidth - this.rightWidth); int curvePaintActualWidth = this.GetCurvePaintActualWidth(); int num = this.CalculatePaintWidthAndScrollMax(curvePaintActualWidth); bool flag = num <= curvePaintActualWidth; if (!flag) { this.offsetPaintScrollX = (int)((float)index * this.data_ScaleX_Render); this.SetScrollXNewValue(Convert.ToInt32((float)((long)this.offsetPaintScrollX * (long)this.scrollMaxX) * 1f / (float)(num - curvePaintActualWidth))); this.offsetPaintScrollX = (int)((float)index * this.data_ScaleX_Render); this.HslInvalidate(); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } } // Token: 0x060002E8 RID: 744 RVA: 0x00023014 File Offset: 0x00021214 public void ScrollToDateTime(DateTime dateTime) { int num = this.FindIndexByDateTime(dateTime, 0); bool flag = num >= 0; if (flag) { this.ScrollToIndex(num); } } // Token: 0x060002E9 RID: 745 RVA: 0x00023040 File Offset: 0x00021240 public void RenderCurveUI(int start, int end) { bool flag = start >= end; if (!flag) { bool flag2 = end < 0; if (!flag2) { int curvePaintActualWidth = this.GetCurvePaintActualWidth(); bool flag3 = end >= this.data_count; if (flag3) { end = this.data_count - 1; } bool flag4 = start < 0; if (flag4) { start = 0; } int num = end - start; this.data_ScaleX_Render = Convert.ToSingle((double)curvePaintActualWidth * 1.0 / (double)num); this.ScrollToIndex(start); } } } // Token: 0x060002EA RID: 746 RVA: 0x000230BC File Offset: 0x000212BC public void RenderCurveUI(DateTime start, DateTime end) { int num = this.FindIndexByDateTime(start, 0); bool flag = num < 0; if (flag) { num = 0; } int end2 = this.FindIndexByDateTime(end, num); this.RenderCurveUI(num, end2); } // Token: 0x060002EB RID: 747 RVA: 0x000230F0 File Offset: 0x000212F0 private int FindIndexByDateTime(DateTime dateTime, int startIndex = 0) { bool flag = this.data_times == null; int result; if (flag) { result = -1; } else { bool flag2 = this.data_times.Count == 0; if (flag2) { result = -1; } else { for (int i = startIndex; i < this.data_times.Count; i += 100) { int num = i + 100; bool flag3 = num >= this.data_times.Count; if (flag3) { num = this.data_times.Count - 1; } bool flag4 = dateTime < this.data_times[i]; if (flag4) { return i; } bool flag5 = dateTime >= this.data_times[i] && dateTime < this.data_times[num]; if (flag5) { for (int j = i; j < num - 1; j++) { bool flag6 = dateTime >= this.data_times[j] && dateTime < this.data_times[j + 1]; if (flag6) { return j; } } return -1; } } result = -1; } } return result; } // Token: 0x060002EC RID: 748 RVA: 0x0002322C File Offset: 0x0002142C private int GetAcutalSegment(float m_data_ScaleY_Render) { return this.value_Segment * ((m_data_ScaleY_Render < 3.95f) ? 1 : ((int)(m_data_ScaleY_Render / 4f) * 2)); } // Token: 0x060002ED RID: 749 RVA: 0x0002325C File Offset: 0x0002145C private void DrawCoordinate(Graphics g, bool isLeft, float dx, float dy, ReferenceAxis referenceAxis, bool needPaintDash) { StringFormat format = isLeft ? HslHelper.StringFormatRight : HslHelper.StringFormatLeft; float calculateMax = referenceAxis.GetCalculateMax(); float calculateMin = referenceAxis.GetCalculateMin(); string unit = referenceAxis.Unit; Brush brush = referenceAxis.Brush; Pen pen = new Pen(referenceAxis.Brush); g.TranslateTransform(dx, dy); float num = this.isShowTextInfomation ? 1f : this.data_ScaleY_Render; float num2 = (float)(base.Height - this.topHeadHeight - this.buttomHeight); float num3 = (float)(isLeft ? this.leftWidth : this.rightWidth); int num4 = this.isShowTextInfomation ? 0 : this.offsetPaintScrollY; if (isLeft) { g.DrawLine(pen, num3 - 1f, 5f, num3 - 1f, num2 - 15f); } else { g.DrawLine(pen, 0f, 5f, 0f, num2 - 15f); } bool flag = this.RenderInvertedTriangle; if (flag) { if (isLeft) { HslHelper.PaintTriangle(g, brush, new PointF(num3 - 1f, 10f), 5, GraphDirection.Upward); } else { HslHelper.PaintTriangle(g, brush, new PointF(0f, 10f), 5, GraphDirection.Upward); } } g.DrawString(unit, this.Font, brush, new RectangleF(0f, -15f, num3 - 5f, 30f), HslHelper.StringFormatRight); g.TranslateTransform(0f, (float)(-(float)num4 + 20)); int acutalSegment = this.GetAcutalSegment(num); int i = 0; while (i <= acutalSegment) { float num5 = (float)((double)i * (double)(calculateMax - calculateMin) / (double)acutalSegment + (double)calculateMin); bool flag2 = this.IsAoordinateRoundInt; if (flag2) { num5 = (float)Math.Round((double)num5, 0); } float num6 = HslHelper.ComputePaintLocationY(calculateMax, calculateMin, (num2 - 40f) * num, num5); bool flag3 = referenceAxis.IsUseLogarithms(); if (flag3) { num5 = (float)Math.Pow(10.0, (double)num5); } bool flag4 = needPaintDash || this.IsNeedPaintDash(num6); if (flag4) { bool flag5 = num6 - (float)num4 + 20f < 0f || num6 - (float)num4 + 20f > num2 - 20f; if (!flag5) { if (isLeft) { g.DrawLine(pen, num3 - 5f, num6, num3 - 2f, num6); RectangleF layoutRectangle = new RectangleF(0f, num6 - 9f, num3 - 4f, 20f); g.DrawString(HslHelper.GetFormatString(referenceAxis.Format, num5, false), this.Font, brush, layoutRectangle, format); } else { g.DrawLine(pen, 1f, num6, 5f, num6); RectangleF layoutRectangle2 = new RectangleF(5f, num6 - 9f, num3 - 3f, 20f); g.DrawString(HslHelper.GetFormatString(referenceAxis.Format, num5, false), this.Font, brush, layoutRectangle2, format); } } } IL_30F: i++; continue; goto IL_30F; } bool flag6 = !needPaintDash; if (flag6) { int j = 0; while (j < this.auxiliary_lines.Count) { bool isLeftFrame = this.auxiliary_lines[j].IsLeftFrame; if (isLeftFrame) { float num7 = HslHelper.ComputePaintLocationY(calculateMax, calculateMin, (num2 - 40f) * num, referenceAxis.IsUseLogarithms() ? ((float)Math.Log10((double)this.auxiliary_lines[j].Value)) : this.auxiliary_lines[j].Value); bool flag7 = num7 - (float)num4 + 20f < 0f || num7 - (float)num4 + 20f > num2 - 20f; if (!flag7) { if (isLeft) { g.DrawLine(pen, num3 - 5f, num7, num3 - 2f, num7); RectangleF layoutRectangle3 = new RectangleF(0f, num7 - 9f, num3 - 4f, 20f); g.DrawString(HslHelper.GetFormatString(referenceAxis.Format, this.auxiliary_lines[j].Value, false), this.Font, brush, layoutRectangle3, format); } else { g.DrawLine(pen, 1f, num7, 5f, num7); RectangleF layoutRectangle4 = new RectangleF(6f, num7 - 9f, num3 - 3f, 20f); g.DrawString(HslHelper.GetFormatString(referenceAxis.Format, this.auxiliary_lines[j].Value, false), this.Font, brush, layoutRectangle4, format); } } } IL_4C3: j++; continue; goto IL_4C3; } } bool flag8 = this.isRenderYTip && this.is_mouse_on_picture && !this.isShowTextInfomation && this.markLineVisible; if (flag8) { RectangleF rectangleF = new RectangleF(1f, (float)(this.mouse_location.Y - 9 + num4 - 20), num3 - 3f, 20f); g.FillRectangle(this.mouseHoverBackBrush, rectangleF); g.DrawRectangles(this.markBorderPen, new RectangleF[] { rectangleF }); if (isLeft) { rectangleF = new RectangleF(0f, (float)(this.mouse_location.Y - 9 + num4 - 20), num3 - 4f, 20f); } else { rectangleF = new RectangleF(5f, (float)(this.mouse_location.Y - 9 + num4 - 20), num3 - 6f, 20f); } float num8 = HslHelper.ComputeValueFromPaintLocationY(calculateMax, calculateMin, (num2 - 40f) * num, (float)(this.mouse_location.Y + num4 - 20)); bool flag9 = referenceAxis.IsUseLogarithms(); if (flag9) { num8 = (float)Math.Pow(10.0, (double)num8); } g.DrawString((referenceAxis.Format == "{0}") ? num8.ToString("F2") : HslHelper.GetFormatString(referenceAxis.Format, num8, false), this.Font, brush, rectangleF, format); } g.TranslateTransform(0f, (float)(num4 - 20)); g.TranslateTransform(-dx, -dy); pen.Dispose(); } // Token: 0x060002EE RID: 750 RVA: 0x000238E4 File Offset: 0x00021AE4 private void PaintFromString(Graphics g, string text) { int actualLeftWidth = this.GetActualLeftWidth(); int num = base.Width - actualLeftWidth - this.rightWidth; int num2 = base.Height - this.topHeadHeight - this.buttomHeight; Font font = new Font(this.Font.FontFamily, 18f); bool flag = text != null && text.Length > 400; if (flag) { font = new Font(this.Font.FontFamily, 12f); } int num3 = num2 - 40; g.DrawLine(this.coordinatePen, 0, num2 - 20, num - 1, num2 - 20); for (int i = 1; i <= this.value_Segment; i++) { float value = (float)((double)i * (double)(this.referenceAxisLeft.GetCalculateMax() - this.referenceAxisLeft.GetCalculateMin()) / (double)this.value_Segment + (double)this.referenceAxisLeft.GetCalculateMin()); float num4 = HslHelper.ComputePaintLocationY(this.referenceAxisLeft.GetCalculateMax(), this.referenceAxisLeft.GetCalculateMin(), (float)num3, value) + 20f; bool flag2 = this.IsNeedPaintDash(num4); if (flag2) { g.DrawLine(this.coordinateDashPen, 0f, num4, (float)(num - 1), num4); } } for (int j = 0; j < this.auxiliary_lines.Count; j++) { bool flag3 = this.auxiliary_lines[j].PaintValue - (float)this.offsetPaintScrollY + 20f < 0f || this.auxiliary_lines[j].PaintValue - (float)this.offsetPaintScrollY + 20f > (float)(num2 - 20); if (!flag3) { g.DrawLine(this.auxiliary_lines[j].GetPen(), 0f, this.auxiliary_lines[j].PaintValue, (float)(num - 1), this.auxiliary_lines[j].PaintValue); } } for (int k = this.value_IntervalAbscissaText; k < num; k += this.value_IntervalAbscissaText) { g.DrawLine(this.coordinateDashPen, k, num2 - 20, k, 0); } Rectangle r = new Rectangle(0, 0, num, num2); using (Brush brush = new SolidBrush(this.ForeColor)) { g.DrawString(text, font, brush, r, HslHelper.StringFormatCenter); } font.Dispose(); } // Token: 0x060002EF RID: 751 RVA: 0x00023B84 File Offset: 0x00021D84 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.Height; if (flag) { return false; } } return true; } // Token: 0x060002F0 RID: 752 RVA: 0x00023BE4 File Offset: 0x00021DE4 private int GetActualLeftWidth() { bool flag = this.isOtherAxisHide; int result; if (flag) { result = this.leftWidth; } else { result = this.leftWidth + this.leftWidth * this.referenceAxes.Count; } return result; } /// /// 获取曲线绘制区域的实际像素宽度 /// /// 像素宽度 // Token: 0x060002F1 RID: 753 RVA: 0x00023C24 File Offset: 0x00021E24 private int GetCurvePaintActualWidth() { return base.Width - this.GetActualLeftWidth() - this.rightWidth; } /// // Token: 0x060002F2 RID: 754 RVA: 0x00023C4C File Offset: 0x00021E4C private int GetCurvePaintActualWidth(int width) { return width - this.GetActualLeftWidth() - this.rightWidth; } /// /// 获取曲线绘制区域的实际像素高度 /// /// 总高度信息 /// 像素高度 // Token: 0x060002F3 RID: 755 RVA: 0x00023C70 File Offset: 0x00021E70 private int GetCurvePaintActualHeight(int height) { return height - this.topHeadHeight - this.buttomHeight; } /// /// 判断实际绘制的点位X,是否处于显示的区域里,为了防止误差,在两侧留有一些剩余宽度 /// /// 按照像素为单位的 /// 实际画曲线的像素宽度 /// 偏移信息 /// 是否显示 // Token: 0x060002F4 RID: 756 RVA: 0x00023C94 File Offset: 0x00021E94 private bool IsPaintxInRenderRegion(int x, int width, int offset = 10) { bool flag = this.data_ScaleX_Render >= 1f; bool result; if (flag) { result = ((float)x >= (float)this.offsetPaintScrollX - (float)offset * this.data_ScaleX_Render && (float)x <= (float)(this.offsetPaintScrollX + width) + (float)offset * this.data_ScaleX_Render); } else { result = (x >= this.offsetPaintScrollX - offset && x <= this.offsetPaintScrollX + width + offset); } return result; } // Token: 0x060002F5 RID: 757 RVA: 0x00023D10 File Offset: 0x00021F10 private bool IsRectangleInRenderRegion(Rectangle rectangle, int width) { bool flag = this.IsPaintxInRenderRegion(rectangle.X, width, 10) || this.IsPaintxInRenderRegion(rectangle.X + rectangle.Width, width, 10); bool result; if (flag) { result = true; } else { bool flag2 = rectangle.X <= this.offsetPaintScrollX && rectangle.X + rectangle.Width >= this.offsetPaintScrollX + width; result = flag2; } return result; } /// /// 控件的重绘信息 /// /// 重绘的方法 // Token: 0x060002F6 RID: 758 RVA: 0x00023D90 File Offset: 0x00021F90 protected override void OnPaint(PaintEventArgs e) { Graphics graphics = e.Graphics; this.PaintHslControls(graphics, base.Width, base.Height); base.OnPaint(e); } /// // Token: 0x060002F7 RID: 759 RVA: 0x00023DC4 File Offset: 0x00021FC4 public void PaintHslControls(Graphics g, int width, int height) { bool flag2 = this.data_ScaleX_Render < 0.1f; if (flag2) { g.SmoothingMode = SmoothingMode.HighSpeed; } else { g.SmoothingMode = SmoothingMode.AntiAlias; } g.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; this.PaintMain(g, width, height); } /// /// 绘制当前的曲线图形 /// /// 绘图上下文 /// 宽度信息 /// 高度信息 // Token: 0x060002F8 RID: 760 RVA: 0x00023E18 File Offset: 0x00022018 public void PaintMain(Graphics g, int width, int height) { bool flag = false; if (!flag) { DateTime now = DateTime.Now; this.paintCount++; int actualLeftWidth = this.GetActualLeftWidth(); int curvePaintActualWidth = this.GetCurvePaintActualWidth(width); int curvePaintActualHeight = this.GetCurvePaintActualHeight(height); g.TranslateTransform((float)actualLeftWidth, (float)this.topHeadHeight); bool flag2 = this.isShowTextInfomation; if (flag2) { this.CalculateAuxiliaryPaintY(20); this.PaintFromString(g, this.Text); } else { g.SetClip(new Rectangle(0, 0, curvePaintActualWidth, height - this.topHeadHeight)); this.GetRenderCurveMain(g, curvePaintActualWidth, curvePaintActualHeight); g.ResetClip(); } g.TranslateTransform((float)(-(float)actualLeftWidth), (float)(-(float)this.topHeadHeight)); bool flag3 = this.isShowTextInfomation; if (flag3) { this.CalculateAuxiliaryPaintY(0); } this.DrawCoordinate(g, true, (float)(this.isOtherAxisHide ? 0 : (this.leftWidth * this.referenceAxes.Count)), (float)this.topHeadHeight, this.referenceAxisLeft, false); bool flag4 = this.isRederRightCoordinate; if (flag4) { this.DrawCoordinate(g, false, (float)(width - this.rightWidth), (float)this.topHeadHeight, this.referenceAxisRight, false); } bool flag5 = !this.isOtherAxisHide; if (flag5) { for (int i = 0; i < this.referenceAxes.Count; i++) { this.DrawCoordinate(g, true, (float)(this.leftWidth * i), (float)this.topHeadHeight, this.referenceAxes[i], true); } } bool flag6 = !this.RenderInvertedTriangle; if (flag6) { g.DrawLine(this.coordinatePen, this.leftWidth + this.leftWidth * this.referenceAxes.Count - 1, this.topHeadHeight + 5, width - this.rightWidth, this.topHeadHeight + 5); } this.PaintHeadText(g, actualLeftWidth); bool flag7 = this.ReferenceAxis.Count > 0; if (flag7) { Rectangle r = new Rectangle(this.GetActualLeftWidth() - this.leftWidth, base.Height - this.scrollHeight - 5, this.leftWidth, this.scrollHeight); g.DrawString(this.isOtherAxisHide ? "<<" : ">>", this.Font, this.coordinateBrush, r, HslHelper.StringFormatCenter); } } } // Token: 0x060002F9 RID: 761 RVA: 0x0002407C File Offset: 0x0002227C private void PaintHeadText(Graphics g, int actualLeftWidth) { bool flag = this.topHeadHeight <= 0; if (!flag) { float num = (float)(actualLeftWidth + 1); float num2 = 11f; foreach (KeyValuePair keyValuePair in this.data_dicts) { bool visible = keyValuePair.Value.Visible; if (visible) { Pen pen = keyValuePair.Value.LineRenderVisiable ? new Pen(keyValuePair.Value.LineColor) : new Pen(Color.FromArgb(70, keyValuePair.Value.LineColor)); g.DrawLine(pen, num, num2, num + 30f, num2); g.DrawEllipse(pen, num + 8f, num2 - 7f, 14f, 14f); pen.Dispose(); SolidBrush solidBrush = keyValuePair.Value.LineRenderVisiable ? new SolidBrush(keyValuePair.Value.LineColor) : new SolidBrush(Color.FromArgb(70, keyValuePair.Value.LineColor)); g.DrawString(keyValuePair.Key, this.Font, solidBrush, new RectangleF(num + 35f, num2 - 10f, (float)(this.curveNameWidth - 35), 20f), HslHelper.StringFormatLeft); keyValuePair.Value.TitleRegion = new RectangleF(num, num2 - 10f, (float)this.curveNameWidth, 20f); solidBrush.Dispose(); num += (float)this.curveNameWidth; bool flag2 = num >= (float)(base.Width - this.rightWidth - 30); if (flag2) { num = (float)(actualLeftWidth + 1); num2 += 22f; } } } for (int i = 0; i < this.auxiliary_Labels.Count; i++) { bool flag3 = !string.IsNullOrEmpty(this.auxiliary_Labels[i].Text); if (flag3) { int num3 = (this.auxiliary_Labels[i].LocationX > 1f) ? ((int)this.auxiliary_Labels[i].LocationX) : ((int)(this.auxiliary_Labels[i].LocationX * (float)base.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), HslHelper.StringFormatCenter); } } bool flag4 = this.renderScaleInfo; if (flag4) { using (Brush brush = new SolidBrush(this.scrollColor)) { g.DrawString(string.Format("Scale:X{0} Y{1}", this.data_ScaleX_Render, this.data_ScaleY_Render), this.Font, brush, new RectangleF((float)(base.Width - 205), 0f, 200f, (float)(this.Font.Height + 2)), HslHelper.StringFormatRight); } } } } // Token: 0x060002FA RID: 762 RVA: 0x000244AC File Offset: 0x000226AC private string GetScale() { bool flag = this.data_ScaleX_Render > 0.8f; string result; if (flag) { result = this.data_ScaleX_Render.ToString("F0"); } else { bool flag2 = this.data_ScaleX_Render > 0.3f; if (flag2) { result = this.data_ScaleX_Render.ToString("F1"); } else { result = this.data_ScaleX_Render.ToString(); } } return result; } // Token: 0x060002FB RID: 763 RVA: 0x00024514 File Offset: 0x00022714 public void RenderCurveUI(bool stretchToFull = false) { this.isShowTextInfomation = false; if (stretchToFull) { bool flag = this.data_count > 0; if (flag) { this.RenderCurveUI(0, this.data_count - 1); } } else { this.HslInvalidate(); } } /// /// 计算实际的需要绘制的像素宽度,以及计算滚动条的实际像素宽度 /// /// 曲线区域的实际像素宽度 /// 计算实际的需要绘制的像素宽度 // Token: 0x060002FC RID: 764 RVA: 0x0002455C File Offset: 0x0002275C private int CalculatePaintWidthAndScrollMax(int width) { int num = Math.Max(Convert.ToInt32((float)this.data_count * this.data_ScaleX_Render) + this.rightRemainWidth, width); this.scrollWidth = (int)((long)width * (long)width / (long)num); bool flag = this.scrollWidth < 10; if (flag) { this.scrollWidth = 10; } this.scrollMaxX = width - this.scrollWidth; return num; } // Token: 0x060002FD RID: 765 RVA: 0x000245C4 File Offset: 0x000227C4 private void SetScrollXNewValue(int scrollValue) { int curvePaintActualWidth = this.GetCurvePaintActualWidth(); int num = this.CalculatePaintWidthAndScrollMax(curvePaintActualWidth); bool flag = scrollValue > this.scrollMaxX; if (flag) { scrollValue = this.scrollMaxX; } bool flag2 = scrollValue < 0; if (flag2) { scrollValue = 0; } bool flag3 = this.scrollX != scrollValue; if (flag3) { this.scrollX = scrollValue; } bool flag4 = num > curvePaintActualWidth && this.scrollMaxX > 0; if (flag4) { this.offsetPaintScrollX = Convert.ToInt32((double)((long)(num - curvePaintActualWidth) * (long)this.scrollX) * 1.0 / (double)this.scrollMaxX); } else { this.offsetPaintScrollX = 0; } } // Token: 0x060002FE RID: 766 RVA: 0x00024668 File Offset: 0x00022868 private ReferenceAxis GetReferenceAxisByIndex(int index) { bool flag = index == 0; ReferenceAxis result; if (flag) { result = new ReferenceAxis(this.referenceAxisLeft.Max, this.referenceAxisLeft.Min, this.referenceAxisLeft.UseLogarithms); } else { bool flag2 = index == 1; if (flag2) { result = new ReferenceAxis(this.referenceAxisRight.Max, this.referenceAxisRight.Min, this.referenceAxisRight.UseLogarithms); } else { bool flag3 = index - 2 < this.referenceAxes.Count; if (flag3) { result = this.referenceAxes[index - 2]; } else { result = null; } } } return result; } // Token: 0x060002FF RID: 767 RVA: 0x00024704 File Offset: 0x00022904 private float ComputePaintLocationY(ReferenceAxis reference, int m_height, float value) { return HslHelper.ComputePaintLocationY(reference.GetCalculateMax(), reference.GetCalculateMin(), (float)(m_height - 40) * this.data_ScaleY_Render, reference.IsUseLogarithms() ? ((float)Math.Log10((double)value)) : value); } // Token: 0x06000300 RID: 768 RVA: 0x00024748 File Offset: 0x00022948 private void GetRenderCurveMain(Graphics g, int width, int height) { int num = this.CalculatePaintWidthAndScrollMax(width); bool flag = num > width; if (flag) { g.TranslateTransform((float)(-(float)this.offsetPaintScrollX), 0f); } for (int i = 0; i < this.markBackSections.Count; i++) { Rectangle rectangle = new Rectangle(Convert.ToInt32((float)this.markBackSections[i].StartIndex * this.data_ScaleX_Render), 0, Convert.ToInt32((float)(this.markBackSections[i].EndIndex - this.markBackSections[i].StartIndex) * this.data_ScaleX_Render), height - 20); bool flag2 = this.IsRectangleInRenderRegion(rectangle, width); if (flag2) { using (Brush brush = new SolidBrush(this.markBackSections[i].BackColor)) { g.FillRectangle(brush, rectangle); } g.DrawRectangle(Pens.DimGray, rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height); string text = this.markBackSections[i].MarkText ?? string.Empty; bool flag3 = this.markBackSections[i].StartIndex < this.data_times.Count && this.markBackSections[i].EndIndex < this.data_times.Count; if (flag3) { text = text + " (" + (this.data_times[this.markBackSections[i].EndIndex] - this.data_times[this.markBackSections[i].StartIndex]).TotalMinutes.ToString("F1") + " 分钟)"; } g.DrawString(text, this.Font, Brushes.DimGray, new RectangleF((float)rectangle.X, 3f, (float)rectangle.Width, (float)(height - 20)), HslHelper.StringFormatTopCenter); } } g.TranslateTransform(0f, (float)(-(float)this.offsetPaintScrollY + 20)); foreach (HslMarkImage hslMarkImage in this.hslMarkImages) { bool flag4 = hslMarkImage.MarkImage == null; if (!flag4) { Point point = default(Point); point.X = Convert.ToInt32((double)hslMarkImage.Index * 1.0 * (double)this.data_ScaleX_Render); point.Y = Convert.ToInt32((hslMarkImage.OffsetY < 1f) ? (hslMarkImage.OffsetY * (float)(height - 40) * this.data_ScaleY_Render) : (hslMarkImage.OffsetY * this.data_ScaleY_Render)); int width2 = hslMarkImage.ScaleEnable ? Convert.ToInt32((float)hslMarkImage.MarkImage.Width * this.data_ScaleX_Render) : hslMarkImage.MarkImage.Width; int height2 = hslMarkImage.ScaleEnable ? Convert.ToInt32((float)hslMarkImage.MarkImage.Height * this.data_ScaleY_Render) : hslMarkImage.MarkImage.Height; Rectangle rectangle2 = default(Rectangle); bool flag5 = hslMarkImage.ReferencePoint == ContentAlignment.TopLeft; if (flag5) { rectangle2 = new Rectangle(point.X, point.Y, width2, height2); } else { bool flag6 = hslMarkImage.ReferencePoint == ContentAlignment.TopCenter; if (flag6) { rectangle2 = new Rectangle(point.X - hslMarkImage.MarkImage.Width / 2, point.Y, width2, height2); } else { bool flag7 = hslMarkImage.ReferencePoint == ContentAlignment.TopRight; if (flag7) { rectangle2 = new Rectangle(point.X - hslMarkImage.MarkImage.Width, point.Y, width2, height2); } else { bool flag8 = hslMarkImage.ReferencePoint == ContentAlignment.MiddleLeft; if (flag8) { rectangle2 = new Rectangle(point.X, point.Y - hslMarkImage.MarkImage.Height / 2, width2, height2); } else { bool flag9 = hslMarkImage.ReferencePoint == ContentAlignment.MiddleCenter; if (flag9) { rectangle2 = new Rectangle(point.X - hslMarkImage.MarkImage.Width / 2, point.Y - hslMarkImage.MarkImage.Height / 2, width2, height2); } else { bool flag10 = hslMarkImage.ReferencePoint == ContentAlignment.MiddleRight; if (flag10) { rectangle2 = new Rectangle(point.X - hslMarkImage.MarkImage.Width, point.Y - hslMarkImage.MarkImage.Height / 2, width2, height2); } else { bool flag11 = hslMarkImage.ReferencePoint == ContentAlignment.BottomLeft; if (flag11) { rectangle2 = new Rectangle(point.X, point.Y - hslMarkImage.MarkImage.Height, width2, height2); } else { bool flag12 = hslMarkImage.ReferencePoint == ContentAlignment.BottomCenter; if (flag12) { rectangle2 = new Rectangle(point.X - hslMarkImage.MarkImage.Width / 2, point.Y - hslMarkImage.MarkImage.Height, width2, height2); } else { bool flag13 = hslMarkImage.ReferencePoint == ContentAlignment.BottomRight; if (flag13) { rectangle2 = new Rectangle(point.X - hslMarkImage.MarkImage.Width, point.Y - hslMarkImage.MarkImage.Height, width2, height2); } } } } } } } } } bool flag14 = this.IsRectangleInRenderRegion(rectangle2, width); if (flag14) { g.DrawImage(hslMarkImage.MarkImage, rectangle2); } } } g.TranslateTransform(0f, (float)(this.offsetPaintScrollY - 20)); bool flag15 = num > width; if (flag15) { g.TranslateTransform((float)this.offsetPaintScrollX, 0f); } g.DrawLine(this.coordinatePen, 0, height - 20, width, height - 20); g.TranslateTransform(0f, (float)(-(float)this.offsetPaintScrollY + 20)); for (int j = 0; j < this.auxiliary_lines.Count; j++) { bool isLeftFrame = this.auxiliary_lines[j].IsLeftFrame; if (isLeftFrame) { this.auxiliary_lines[j].PaintValue = this.ComputePaintLocationY(this.referenceAxisLeft, height, this.auxiliary_lines[j].Value); } else { this.auxiliary_lines[j].PaintValue = this.ComputePaintLocationY(this.referenceAxisRight, height, this.auxiliary_lines[j].Value); } } int acutalSegment = this.GetAcutalSegment(this.isShowTextInfomation ? 1f : this.data_ScaleY_Render); int num2 = this.isShowTextInfomation ? 0 : this.offsetPaintScrollY; int k = 1; while (k <= acutalSegment) { float num3 = (float)((double)k * (double)(this.referenceAxisLeft.GetCalculateMax() - this.referenceAxisLeft.GetCalculateMin()) / (double)acutalSegment + (double)this.referenceAxisLeft.GetCalculateMin()); bool flag16 = this.IsAoordinateRoundInt; if (flag16) { num3 = (float)Math.Round((double)num3, 0); } bool flag17 = this.referenceAxisLeft.IsUseLogarithms(); if (flag17) { num3 = (float)Math.Pow(10.0, (double)num3); } float num4 = this.ComputePaintLocationY(this.referenceAxisLeft, height, num3); bool flag18 = this.IsNeedPaintDash(num4); if (flag18) { bool flag19 = num4 - (float)num2 + 20f < 0f || num4 - (float)num2 + 20f > (float)(height - 20); if (!flag19) { g.DrawLine(this.coordinateDashPen, 0f, num4, (float)width, num4); } } IL_7EA: k++; continue; goto IL_7EA; } for (int l = 0; l < this.auxiliary_lines.Count; l++) { bool flag20 = this.auxiliary_lines[l].PaintValue - (float)this.offsetPaintScrollY + 20f < 0f || this.auxiliary_lines[l].PaintValue - (float)this.offsetPaintScrollY + 20f > (float)(height - 20); if (!flag20) { g.DrawLine(this.auxiliary_lines[l].GetPen(), 0f, this.auxiliary_lines[l].PaintValue, (float)width, this.auxiliary_lines[l].PaintValue); } } g.TranslateTransform(0f, (float)(this.offsetPaintScrollY - 20)); bool flag21 = num > width; if (flag21) { g.TranslateTransform((float)(-(float)this.offsetPaintScrollX), 0f); } int m = this.value_IntervalAbscissaText; while (m < num) { bool flag22 = num > width; if (!flag22) { goto IL_946; } bool flag23 = m < this.offsetPaintScrollX - 10; if (!flag23) { bool flag24 = m > this.offsetPaintScrollX + width + 10; if (!flag24) { goto IL_946; } } IL_A64: m += this.value_IntervalAbscissaText; continue; IL_946: int num5 = Convert.ToInt32((float)m / this.data_ScaleX_Render); g.DrawLine(this.coordinateDashPen, m, height - 18, m, this.RenderInvertedTriangle ? 0 : 5); Rectangle r = new Rectangle(m - 100, height - 18, 200, 17); bool flag25 = this.buttomHeight > 20; if (flag25) { r.Height += this.buttomHeight - 20; } bool flag26 = this.isRenderTimeData; if (flag26) { bool flag27 = num5 < this.data_times.Count; if (flag27) { g.DrawString(this.data_times[num5].ToString(this.data_time_formate, CultureInfo.InvariantCulture), this.Font, this.coordinateBrush, r, HslHelper.StringFormatCenter); } } else { bool flag28 = num5 < this.data_customer.Count; if (flag28) { g.DrawString(this.data_customer[num5], this.Font, this.coordinateBrush, r, HslHelper.StringFormatCenter); } } goto IL_A64; } g.TranslateTransform(0f, (float)(-(float)this.offsetPaintScrollY + 20)); foreach (HslMarkText hslMarkText in this.hslMarkTexts) { foreach (KeyValuePair keyValuePair in this.data_dicts) { bool flag29 = !keyValuePair.Value.Visible; if (!flag29) { bool flag30 = !keyValuePair.Value.LineRenderVisiable; if (!flag30) { bool flag31 = keyValuePair.Key != hslMarkText.CurveKey; if (!flag31) { float[] data = keyValuePair.Value.Data; bool flag32 = data != null && data.Length > 1; if (flag32) { bool flag33 = hslMarkText.Index >= 0 && hslMarkText.Index < keyValuePair.Value.Data.Length; if (flag33) { bool flag34 = float.IsNaN(keyValuePair.Value.Data[hslMarkText.Index]); if (!flag34) { PointF center = new PointF((float)hslMarkText.Index * this.data_ScaleX_Render, this.ComputePaintLocationY(this.GetReferenceAxisByIndex(keyValuePair.Value.ReferenceAxisIndex), height, keyValuePair.Value.Data[hslMarkText.Index])); MarkTextPositionStyle markTextPosition = (hslMarkText.PositionStyle == MarkTextPositionStyle.Auto) ? HslMarkText.CalculateDirectionFromDataIndex(keyValuePair.Value.Data, hslMarkText.Index) : hslMarkText.PositionStyle; bool flag35 = this.IsPaintxInRenderRegion((int)center.X, width, 10); if (flag35) { bool flag36 = (int)center.X <= this.offsetPaintScrollX + 10; if (flag36) { markTextPosition = MarkTextPositionStyle.Right; } HslCurveHelper.DrawHslMarkTextPoint(g, hslMarkText, center, this.Font, markTextPosition); } } } } } } } } } foreach (HslMarkLine hslMarkLine in this.hslMarkLines) { PointF[] points = hslMarkLine.Points; bool flag37 = points != null && points.Length > 1; if (flag37) { PointF[] array = new PointF[hslMarkLine.Points.Length]; for (int n = 0; n < hslMarkLine.Points.Length; n++) { array[n].X = hslMarkLine.Points[n].X * this.data_ScaleX_Render; array[n].Y = this.ComputePaintLocationY(hslMarkLine.IsLeftFrame ? this.referenceAxisLeft : this.referenceAxisRight, height, hslMarkLine.Points[n].Y); MarkTextPositionStyle markTextPosition2 = HslMarkText.CalculateDirectionFromDataIndex(hslMarkLine.Points, n); g.FillEllipse(hslMarkLine.CircleBrush, new RectangleF(array[n].X - 3f, array[n].Y - 3f, 6f, 6f)); bool flag38 = hslMarkLine.Marks != null; if (flag38) { HslCurveHelper.DrawTextByPoint(g, hslMarkLine.Marks[n], array[n], this.Font, hslMarkLine.TextBrush, markTextPosition2, 5); } } bool isLineClosed = hslMarkLine.IsLineClosed; if (isLineClosed) { g.DrawLines(hslMarkLine.LinePen, array); g.DrawLine(hslMarkLine.LinePen, array[0], array[array.Length - 1]); } else { g.DrawLines(hslMarkLine.LinePen, array); } } } int num6 = 0; bool flag39 = num > width; if (flag39) { bool flag40 = this.offsetPaintScrollX > 20; if (flag40) { num6 = Convert.ToInt32((double)this.offsetPaintScrollX * 1.0 / (double)this.data_ScaleX_Render); } bool flag41 = num6 > 10; if (flag41) { num6 -= 10; } else { num6 = 0; } } HslCurveRange[] curveRanges = this.CurveRanges; bool flag42 = curveRanges != null && curveRanges.Length != 0; if (flag42) { for (int num7 = 0; num7 < this.CurveRanges.Length; num7++) { HslCurveRange hslCurveRange = this.CurveRanges[num7]; GraphicsPath graphicsPath = new GraphicsPath(); List list = new List(Convert.ToInt32((float)width / this.data_ScaleX_Render) + 10); List list2 = new List(Convert.ToInt32((float)width / this.data_ScaleX_Render) + 10); for (int num8 = num6; num8 < hslCurveRange.Upper.Length; num8++) { PointF item = default(PointF); item.X = (float)num8 * this.data_ScaleX_Render; item.Y = this.ComputePaintLocationY(this.GetReferenceAxisByIndex(hslCurveRange.ReferenceAxisIndex), height, hslCurveRange.Upper[num8]); PointF item2 = default(PointF); bool flag43 = hslCurveRange.Lower != null; if (flag43) { item2.X = (float)num8 * this.data_ScaleX_Render; item2.Y = this.ComputePaintLocationY(this.GetReferenceAxisByIndex(hslCurveRange.ReferenceAxisIndex), height, hslCurveRange.Lower[num8]); } else { item2.X = (float)num8 * this.data_ScaleX_Render; item2.Y = this.ComputePaintLocationY(this.GetReferenceAxisByIndex(hslCurveRange.ReferenceAxisIndex), height, this.GetReferenceAxisByIndex(hslCurveRange.ReferenceAxisIndex).Min); } bool flag44 = num <= width; if (flag44) { list.Add(item); list2.Add(item2); } else { bool flag45 = item.X >= (float)this.offsetPaintScrollX - 10f * this.data_ScaleX_Render; if (flag45) { bool flag46 = item.X < (float)(this.offsetPaintScrollX + width) + 10f * this.data_ScaleX_Render; if (!flag46) { break; } list.Add(item); list2.Add(item2); } } } list2.Reverse(); bool flag47 = hslCurveRange.Style == CurveStyle.LineSegment; if (flag47) { graphicsPath.AddLines(list.ToArray()); } else { graphicsPath.AddCurve(list.ToArray()); } graphicsPath.AddLine(list[list.Count - 1], list2[0]); bool flag48 = hslCurveRange.Style == CurveStyle.LineSegment; if (flag48) { graphicsPath.AddLines(list2.ToArray()); } else { graphicsPath.AddCurve(list2.ToArray()); } graphicsPath.AddLine(list2[list2.Count - 1], list[0]); using (Brush brush2 = new SolidBrush(Color.FromArgb(48, hslCurveRange.LineColor))) { g.FillPath(brush2, graphicsPath); } using (Pen pen = new Pen(hslCurveRange.LineColor)) { g.DrawPath(pen, graphicsPath); } } } foreach (HslCurveItem hslCurveItem in this.data_dicts.Values) { bool flag49 = !hslCurveItem.Visible; if (!flag49) { bool flag50 = !hslCurveItem.LineRenderVisiable; if (!flag50) { float[] data2 = hslCurveItem.Data; bool flag51 = data2 != null && data2.Length > 1; if (flag51) { List list3 = new List(Convert.ToInt32((float)width / this.data_ScaleX_Render) + 10); for (int num9 = num6; num9 < hslCurveItem.Data.Length; num9++) { bool flag52 = !float.IsNaN(hslCurveItem.Data[num9]); if (flag52) { PointF item3 = default(PointF); item3.X = (float)num9 * this.data_ScaleX_Render; item3.Y = this.ComputePaintLocationY(this.GetReferenceAxisByIndex(hslCurveItem.ReferenceAxisIndex), height, hslCurveItem.Data[num9]); bool flag53 = num <= width; if (flag53) { list3.Add(item3); } else { bool flag54 = item3.X >= (float)this.offsetPaintScrollX - 10f * this.data_ScaleX_Render; if (flag54) { bool flag55 = item3.X < (float)(this.offsetPaintScrollX + width) + 10f * this.data_ScaleX_Render; if (!flag55) { break; } list3.Add(item3); } } } else { HslCurveHelper.DrawLineCore(g, hslCurveItem, list3, this.GetPointsRadius(), (float)(height - 40) * this.data_ScaleY_Render); list3.Clear(); } } HslCurveHelper.DrawLineCore(g, hslCurveItem, list3, this.GetPointsRadius(), (float)(height - 40) * this.data_ScaleY_Render); } } } } for (int num10 = 0; num10 < this.markForeSections.Count; num10++) { this.DrawMarkForeSection(g, this.markForeSections[num10], this.Font, true); } g.TranslateTransform(0f, (float)(this.offsetPaintScrollY - 20)); bool flag56 = num > width; if (flag56) { g.TranslateTransform((float)this.offsetPaintScrollX, 0f); } g.SmoothingMode = SmoothingMode.None; bool flag57 = this.buttomHeight <= 0; if (flag57) { this.scrollRectage = new Rectangle(-1, -1, 1, 1); this.scrollRectageBack = new Rectangle(0, 0, 0, 0); } else { using (Brush brush3 = new SolidBrush(this.backColor)) { g.FillRectangle(brush3, 0, base.Height - this.topHeadHeight - this.scrollHeight - 5, width, this.scrollHeight + 3); } bool flag58 = num <= width; if (flag58) { this.scrollRectage = new Rectangle(-1, -1, 1, 1); this.scrollRectageBack = new Rectangle(0, 0, 0, 0); this.scrollX = 0; HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } else { this.scrollRectage = new Rectangle(this.scrollX, base.Height - this.topHeadHeight - this.scrollHeight - 3, this.scrollWidth, this.scrollHeight); this.scrollRectageBack = new Rectangle(0, base.Height - this.topHeadHeight - this.scrollHeight - 3, width, this.scrollHeight); using (Brush brush4 = new SolidBrush(Color.FromArgb(80, this.scrollColor))) { g.FillRectangle(brush4, this.scrollRectageBack); } using (Brush brush5 = new SolidBrush(this.scrollColor)) { g.FillRectangle(brush5, this.scrollRectage); } } } g.SmoothingMode = SmoothingMode.AntiAlias; } /// /// 引发controls的dock的变化 /// /// 事件消息 // Token: 0x06000301 RID: 769 RVA: 0x00025E30 File Offset: 0x00024030 protected override void OnDockChanged(EventArgs e) { base.OnDockChanged(e); this.OnAutoSizeChanged(e); } // Token: 0x06000302 RID: 770 RVA: 0x00025E44 File Offset: 0x00024044 private int GetPointsRadius() { bool flag = this.data_ScaleX_Render >= 15f && this.pointsRadius == -1; int result; if (flag) { result = 2; } else { result = this.pointsRadius; } return result; } /// /// 获取或设置控件的背景色 /// // Token: 0x170000F5 RID: 245 // (get) Token: 0x06000303 RID: 771 RVA: 0x00025E7D File Offset: 0x0002407D // (set) Token: 0x06000304 RID: 772 RVA: 0x00025E85 File Offset: 0x00024085 [Browsable(true)] [Description("获取或设置控件的背景色")] [Category("HslControls")] [DefaultValue(typeof(Color), "46, 46, 46")] [EditorBrowsable(EditorBrowsableState.Always)] public override Color BackColor { get { return base.BackColor; } set { this.backColor = value; base.BackColor = value; } } /// /// 获取或设置控件的背景色 /// // Token: 0x170000F6 RID: 246 // (get) Token: 0x06000305 RID: 773 RVA: 0x00025E97 File Offset: 0x00024097 // (set) Token: 0x06000306 RID: 774 RVA: 0x00025E9F File Offset: 0x0002409F [Browsable(true)] [Description("获取或设置控件的背景色")] [Category("HslControls")] [Bindable(true)] [DefaultValue(typeof(Color), "Yellow")] [EditorBrowsable(EditorBrowsableState.Always)] public override Color ForeColor { get { return base.ForeColor; } set { base.ForeColor = value; } } /// /// 获取或设置曲线控件是否显示右侧的坐标轴 /// // Token: 0x170000F7 RID: 247 // (get) Token: 0x06000307 RID: 775 RVA: 0x00025EAA File Offset: 0x000240AA // (set) Token: 0x06000308 RID: 776 RVA: 0x00025EB2 File Offset: 0x000240B2 [Browsable(true)] [Description("获取或设置曲线控件是否显示右侧的坐标轴")] [Category("HslControls")] [DefaultValue(true)] public virtual bool RenderRightCoordinate { get { return this.isRederRightCoordinate; } set { this.isRederRightCoordinate = value; base.Invalidate(); } } /// /// 获取或设置图形的左轴的坐标轴信息 /// // Token: 0x170000F8 RID: 248 // (get) Token: 0x06000309 RID: 777 RVA: 0x00025EC3 File Offset: 0x000240C3 [Category("HslControls")] [Description("获取或设置图形的左轴的坐标轴信息")] [Browsable(true)] [TypeConverter(typeof(ReferenceAxisConverter))] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ReferenceAxis ReferenceAxisLeft { get { return this.referenceAxisLeft; } } /// /// 获取或设置图形的右轴的坐标轴信息 /// // Token: 0x170000F9 RID: 249 // (get) Token: 0x0600030A RID: 778 RVA: 0x00025ECB File Offset: 0x000240CB [Category("HslControls")] [Description("获取或设置图形的右轴的坐标轴信息")] [Browsable(true)] [TypeConverter(typeof(ReferenceAxisConverter))] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public ReferenceAxis ReferenceAxisRight { get { return this.referenceAxisRight; } } /// /// 获取或设置图形的纵轴分段数 /// // Token: 0x170000FA RID: 250 // (get) Token: 0x0600030B RID: 779 RVA: 0x00025ED4 File Offset: 0x000240D4 // (set) Token: 0x0600030C RID: 780 RVA: 0x00025EEC File Offset: 0x000240EC [Category("HslControls")] [Description("获取或设置图形的纵轴分段数")] [Browsable(true)] [DefaultValue(5)] public virtual int ValueSegment { get { return this.value_Segment; } set { this.value_Segment = value; base.Invalidate(); } } /// /// 获取或设置当前控件的文本 /// // Token: 0x170000FB RID: 251 // (get) Token: 0x0600030D RID: 781 RVA: 0x00025F00 File Offset: 0x00024100 // (set) Token: 0x0600030E RID: 782 RVA: 0x00025F18 File Offset: 0x00024118 [Browsable(true)] [Description("获取或设置当前控件的文本")] [Category("HslControls")] [EditorBrowsable(EditorBrowsableState.Always)] [Bindable(true)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] public override string Text { get { return base.Text; } set { this.isShowTextInfomation = true; base.Text = value; this.scrollX = 0; base.Invalidate(); } } /// /// 或者或设置所有的实线坐标轴的颜色 /// // Token: 0x170000FC RID: 252 // (get) Token: 0x0600030F RID: 783 RVA: 0x00025F38 File Offset: 0x00024138 // (set) Token: 0x06000310 RID: 784 RVA: 0x00025F40 File Offset: 0x00024140 [Browsable(true)] [Description("或者或设置所有的实线坐标轴的颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "LightGray")] public virtual Color CoordinateColor { get { return this.coordinateColor; } set { this.coordinateColor = value; this.coordinatePen.Dispose(); this.coordinatePen = new Pen(this.coordinateColor); this.coordinateBrush.Dispose(); this.coordinateBrush = new SolidBrush(this.coordinateColor); base.Invalidate(); } } /// /// 或者或设置所有的虚线坐标轴的颜色 /// // Token: 0x170000FD RID: 253 // (get) Token: 0x06000311 RID: 785 RVA: 0x00025F96 File Offset: 0x00024196 // (set) Token: 0x06000312 RID: 786 RVA: 0x00025FA0 File Offset: 0x000241A0 [Browsable(true)] [Description("或者或设置所有的虚线坐标轴的颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "72, 72, 72")] public virtual Color DashCoordinateColor { get { return this.coordinateDashColor; } set { this.coordinateDashColor = value; this.coordinateDashPen.Dispose(); this.coordinateDashPen = new Pen(this.coordinateDashColor); this.coordinateDashPen.DashPattern = new float[] { 5f, 5f }; this.coordinateDashPen.DashStyle = DashStyle.Custom; base.Invalidate(); } } /// /// 或者或设置所有的区间标记的线条颜色 /// // Token: 0x170000FE RID: 254 // (get) Token: 0x06000313 RID: 787 RVA: 0x00026008 File Offset: 0x00024208 // (set) Token: 0x06000314 RID: 788 RVA: 0x00026010 File Offset: 0x00024210 [Browsable(true)] [Description("或者或设置所有的区间标记的线条颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "Cyan")] public virtual Color MarkLineColor { get { return this.markLineColor; } set { this.markLineColor = value; this.markLinePen.Dispose(); this.markLinePen = new Pen(this.markLineColor); } } /// /// 或者或设置所有的区间标记的文本颜色 /// // Token: 0x170000FF RID: 255 // (get) Token: 0x06000315 RID: 789 RVA: 0x00026037 File Offset: 0x00024237 // (set) Token: 0x06000316 RID: 790 RVA: 0x0002603F File Offset: 0x0002423F [Browsable(true)] [Description("或者或设置所有的区间标记的文本颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "Cyan")] public virtual Color MarkTextColor { get { return this.markTextColor; } set { this.markTextColor = value; this.markTextBrush.Dispose(); this.markTextBrush = new SolidBrush(this.markTextColor); } } /// /// 或者或设置光标移动时显示信息的边框颜色 /// // Token: 0x17000100 RID: 256 // (get) Token: 0x06000317 RID: 791 RVA: 0x00026066 File Offset: 0x00024266 // (set) Token: 0x06000318 RID: 792 RVA: 0x0002606E File Offset: 0x0002426E [Browsable(true)] [Description("或者或设置光标移动时显示信息的边框颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "HotPink")] public virtual Color MarkBorderColor { get { return this.markBorderColor; } set { this.markBorderColor = value; Pen pen = this.markBorderPen; if (pen != null) { pen.Dispose(); } this.markBorderPen = new Pen(this.markBorderColor); } } /// /// 获取或设置鼠标移动的时候,显示的提示信息的背景颜色 /// // Token: 0x17000101 RID: 257 // (get) Token: 0x06000319 RID: 793 RVA: 0x0002609B File Offset: 0x0002429B // (set) Token: 0x0600031A RID: 794 RVA: 0x000260A3 File Offset: 0x000242A3 [Browsable(true)] [Description("获取或设置鼠标移动的时候,显示的提示信息的背景颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "52, 52, 52")] public Color HoverBackColor { get { return this.hoverBackColor; } set { this.hoverBackColor = value; Brush brush = this.mouseHoverBackBrush; if (brush != null) { brush.Dispose(); } this.mouseHoverBackBrush = new SolidBrush(Color.FromArgb(220, this.hoverBackColor)); } } /// /// 获取或设置鼠标移动过程中的提示线的颜色 /// // Token: 0x17000102 RID: 258 // (get) Token: 0x0600031B RID: 795 RVA: 0x000260DA File Offset: 0x000242DA // (set) Token: 0x0600031C RID: 796 RVA: 0x000260E2 File Offset: 0x000242E2 [Browsable(true)] [Description("或者或设置鼠标移动过程中的提示线的颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "White")] public virtual Color MoveLineColor { get { return this.moveLineColor; } set { this.moveLineColor = value; this.moveLinePen.Dispose(); this.moveLinePen = new Pen(this.moveLineColor); } } /// /// 获取或设置当前滚动条的颜色信息,默认为 颜色 /// // Token: 0x17000103 RID: 259 // (get) Token: 0x0600031D RID: 797 RVA: 0x00026109 File Offset: 0x00024309 // (set) Token: 0x0600031E RID: 798 RVA: 0x00026111 File Offset: 0x00024311 [Browsable(true)] [Description("获取或设置当前滚动条的颜色信息,默认为 Color.DimGray 颜色")] [Category("HslControls")] [DefaultValue(typeof(Color), "DimGray")] public virtual Color ScrollColor { get { return this.scrollColor; } set { this.scrollColor = value; this.HslInvalidate(); } } /// /// 获取或设置鼠标移动过程中提示信息的宽度 /// // Token: 0x17000104 RID: 260 // (get) Token: 0x0600031F RID: 799 RVA: 0x00026122 File Offset: 0x00024322 // (set) Token: 0x06000320 RID: 800 RVA: 0x0002612A File Offset: 0x0002432A [Browsable(true)] [Description("获取或设置鼠标移动过程中提示信息的宽度,如果是小于0表示自动宽度,如果是0表示不显示提示信息,如果大于0就表示绝对像素宽度")] [Category("HslControls")] [DefaultValue(-1)] public virtual int DataTipWidth { get { return this.data_tip_width; } set { this.data_tip_width = value; } } /// /// 获取或设置曲线名称的布局宽度,默认为150 /// // Token: 0x17000105 RID: 261 // (get) Token: 0x06000321 RID: 801 RVA: 0x00026134 File Offset: 0x00024334 // (set) Token: 0x06000322 RID: 802 RVA: 0x0002613C File Offset: 0x0002433C [Browsable(true)] [Description("获取或设置曲线名称的布局宽度,默认为150")] [Category("HslControls")] [DefaultValue(150)] public virtual int CurveNameWidth { get { return this.curveNameWidth; } set { bool flag = value > 10; if (flag) { this.curveNameWidth = value; } } } /// /// 获取或设置纵向虚线的分隔情况,单位为多少个像素点 /// // Token: 0x17000106 RID: 262 // (get) Token: 0x06000323 RID: 803 RVA: 0x0002615C File Offset: 0x0002435C // (set) Token: 0x06000324 RID: 804 RVA: 0x00026174 File Offset: 0x00024374 [Category("HslControls")] [Description("获取或设置纵向虚线的分隔情况,单位为多少个像素点")] [Browsable(true)] [DefaultValue(200)] public virtual int IntervalAbscissaText { get { return this.value_IntervalAbscissaText; } set { this.value_IntervalAbscissaText = value; base.Invalidate(); } } /// /// 获取或设置左坐标轴的宽度信息,单位为多少个像素点 /// // Token: 0x17000107 RID: 263 // (get) Token: 0x06000325 RID: 805 RVA: 0x00026185 File Offset: 0x00024385 // (set) Token: 0x06000326 RID: 806 RVA: 0x0002618D File Offset: 0x0002438D [Category("HslControls")] [Description("获取或设置左坐标轴的宽度信息,单位为多少个像素点")] [Browsable(true)] [DefaultValue(50)] public virtual int LeftWidth { get { return this.leftWidth; } set { this.leftWidth = value; this.HslInvalidate(); } } /// /// 获取或设置右坐标轴的宽度信息,单位为多少个像素点 /// // Token: 0x17000108 RID: 264 // (get) Token: 0x06000327 RID: 807 RVA: 0x0002619E File Offset: 0x0002439E // (set) Token: 0x06000328 RID: 808 RVA: 0x000261A6 File Offset: 0x000243A6 [Category("HslControls")] [Description("获取或设置右坐标轴的宽度信息,单位为多少个像素点")] [Browsable(true)] [DefaultValue(50)] public virtual int RightWidth { get { return this.rightWidth; } set { this.rightWidth = value; this.HslInvalidate(); } } /// /// 获取或设置顶部曲线名称部分的高度信息,单位为多少个像素点 /// // Token: 0x17000109 RID: 265 // (get) Token: 0x06000329 RID: 809 RVA: 0x000261B7 File Offset: 0x000243B7 // (set) Token: 0x0600032A RID: 810 RVA: 0x000261BF File Offset: 0x000243BF [Category("HslControls")] [Description("获取或设置顶部曲线名称部分的高度信息,单位为多少个像素点")] [Browsable(true)] [DefaultValue(30)] public virtual int TopCurveNameHeight { get { return this.topHeadHeight; } set { this.topHeadHeight = value; this.HslInvalidate(); } } /// /// 获取或设置底部部分的高度信息,单位为多少个像素点 /// // Token: 0x1700010A RID: 266 // (get) Token: 0x0600032B RID: 811 RVA: 0x000261D0 File Offset: 0x000243D0 // (set) Token: 0x0600032C RID: 812 RVA: 0x000261D8 File Offset: 0x000243D8 [Category("HslControls")] [Description("获取或设置底部部分的高度信息,单位为多少个像素点")] [Browsable(true)] [DefaultValue(20)] public virtual int ButtomHeight { get { return this.buttomHeight; } set { this.buttomHeight = value; this.HslInvalidate(); } } /// /// 获取或设置底部滚动条部分的高度信息,单位为多少个像素点 /// // Token: 0x1700010B RID: 267 // (get) Token: 0x0600032D RID: 813 RVA: 0x000261E9 File Offset: 0x000243E9 // (set) Token: 0x0600032E RID: 814 RVA: 0x000261F1 File Offset: 0x000243F1 [Category("HslControls")] [Description("获取或设置底部滚动条部分的高度信息,单位为多少个像素点")] [Browsable(true)] [DefaultValue(15)] public virtual int ScrollHeight { get { return this.scrollHeight; } set { this.scrollHeight = value; this.HslInvalidate(); } } /// /// 获取或设置曲线图里所有的时间的格式,默认是 yyyy-MM-dd HH:mm:ss /// // Token: 0x1700010C RID: 268 // (get) Token: 0x0600032F RID: 815 RVA: 0x00026202 File Offset: 0x00024402 // (set) Token: 0x06000330 RID: 816 RVA: 0x0002620A File Offset: 0x0002440A [Category("HslControls")] [Description("获取或设置曲线图里所有的时间的格式,默认是 yyyy-MM-dd HH:mm:ss")] [Browsable(true)] [DefaultValue("yyyy-MM-dd HH:mm:ss")] public virtual string DateTimeFormate { get { return this.data_time_formate; } set { this.data_time_formate = value; this.HslInvalidate(); } } /// /// 获取或设置曲线图里光标移动时下方显示的时间格式,默认是HH:mm:ss /// // Token: 0x1700010D RID: 269 // (get) Token: 0x06000331 RID: 817 RVA: 0x0002621B File Offset: 0x0002441B // (set) Token: 0x06000332 RID: 818 RVA: 0x00026223 File Offset: 0x00024423 [Category("HslControls")] [Description("获取或设置曲线图里光标移动时下方显示的时间格式,默认是HH:mm:ss")] [Browsable(true)] [DefaultValue("HH:mm:ss")] public virtual string HoverDateTimeFormate { get { return this.mouse_hover_time_formate; } set { this.mouse_hover_time_formate = value; } } /// /// 获取或设置曲线图里光标移动时下方显示的矩形宽度信息,默认100 /// // Token: 0x1700010E RID: 270 // (get) Token: 0x06000333 RID: 819 RVA: 0x0002622D File Offset: 0x0002442D // (set) Token: 0x06000334 RID: 820 RVA: 0x00026235 File Offset: 0x00024435 [Category("HslControls")] [Description("获取或设置曲线图里光标移动时下方显示的矩形宽度信息,默认100")] [Browsable(true)] [DefaultValue(100)] public virtual int HoverDateTimeWidth { get { return this.mouseHoverTimeWidth; } set { this.mouseHoverTimeWidth = value; } } /// /// 获取或设置曲线是否禁止鼠标选择区间的功能。 /// // Token: 0x1700010F RID: 271 // (get) Token: 0x06000335 RID: 821 RVA: 0x0002623E File Offset: 0x0002443E // (set) Token: 0x06000336 RID: 822 RVA: 0x00026246 File Offset: 0x00024446 [Category("HslControls")] [Description("获取或设置曲线是否禁止鼠标选择区间的功能。")] [Browsable(true)] [DefaultValue(true)] public virtual bool IsAllowSelectSection { get { return this.isAllowSelectSection; } set { this.isAllowSelectSection = value; } } /// /// 获取或设置纵轴是否强制使用整型 /// // Token: 0x17000110 RID: 272 // (get) Token: 0x06000337 RID: 823 RVA: 0x00026250 File Offset: 0x00024450 // (set) Token: 0x06000338 RID: 824 RVA: 0x00026258 File Offset: 0x00024458 [Category("HslControls")] [Description("获取或设置纵轴是否强制使用整型。")] [Browsable(true)] [DefaultValue(false)] public virtual bool IsAoordinateRoundInt { get { return this.isAoordinateRoundInt; } set { this.isAoordinateRoundInt = value; this.HslInvalidate(); } } /// /// 获取或设置所有的数据点显示的半径大小,默认是-1,不显示数据点 /// // Token: 0x17000111 RID: 273 // (get) Token: 0x06000339 RID: 825 RVA: 0x00026269 File Offset: 0x00024469 // (set) Token: 0x0600033A RID: 826 RVA: 0x00026271 File Offset: 0x00024471 [Browsable(true)] [Description("获取或设置所有的数据点显示的半径大小,默认是-1,不显示数据点")] [Category("HslControls")] [DefaultValue(-1)] public virtual int PointsRadius { get { return this.pointsRadius; } set { this.pointsRadius = value; this.HslInvalidate(); } } /// /// 获取或设置鼠标移动的时候,是否显示鼠标的标记线,这个标记线跟随着光标移动 /// // Token: 0x17000112 RID: 274 // (get) Token: 0x0600033B RID: 827 RVA: 0x00026282 File Offset: 0x00024482 // (set) Token: 0x0600033C RID: 828 RVA: 0x0002628A File Offset: 0x0002448A [Browsable(true)] [Description("获取或设置鼠标移动的时候,是否显示鼠标的标记线,这个标记线跟随着光标移动")] [Category("HslControls")] [DefaultValue(true)] public bool MarkLineVisible { get { return this.markLineVisible; } set { this.markLineVisible = value; this.HslInvalidate(); } } /// /// 获取或设置其他的坐标轴信息 /// // Token: 0x17000113 RID: 275 // (get) Token: 0x0600033D RID: 829 RVA: 0x0002629B File Offset: 0x0002449B // (set) Token: 0x0600033E RID: 830 RVA: 0x000262A3 File Offset: 0x000244A3 [Description("获取或设置其他的坐标轴信息")] [Category("HslControls")] [TypeConverter(typeof(CollectionConverter))] [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)] public virtual ReferenceAxisCollection ReferenceAxis { get { return this.referenceAxes; } set { this.referenceAxes = value; } } /// /// 获取或设置是否显示倒三角的信息,默认为True,如果显示不限制倒三角,则顶部会连线 /// // Token: 0x17000114 RID: 276 // (get) Token: 0x0600033F RID: 831 RVA: 0x000262AC File Offset: 0x000244AC // (set) Token: 0x06000340 RID: 832 RVA: 0x000262C4 File Offset: 0x000244C4 [Browsable(true)] [Description("获取或设置是否显示倒三角的信息,默认为True,如果显示不限制倒三角,则顶部会连线")] [Category("HslControls")] [DefaultValue(true)] public virtual bool RenderInvertedTriangle { get { return this.renderInvertedTriangle; } set { this.renderInvertedTriangle = value; this.HslInvalidate(); } } /// /// 获取或设置是否显示缩放倍率信息,默认为True,如果想要不显示右上角的倍率信息,则设置为False /// // Token: 0x17000115 RID: 277 // (get) Token: 0x06000341 RID: 833 RVA: 0x000262D8 File Offset: 0x000244D8 // (set) Token: 0x06000342 RID: 834 RVA: 0x000262F0 File Offset: 0x000244F0 [Description("获取或设置是否显示缩放倍率信息,默认为True,如果想要不显示右上角的倍率信息,则设置为False")] [Category("HslControls")] [DefaultValue(true)] public virtual bool RenderScaleInfo { get { return this.renderScaleInfo; } set { this.renderScaleInfo = value; this.HslInvalidate(); } } /// /// 获取或设置当前曲线的缩放模式,默认只有X轴,还可以选择同时缩放,或是先缩放X轴后缩放Y轴 /// // Token: 0x17000116 RID: 278 // (get) Token: 0x06000343 RID: 835 RVA: 0x00026301 File Offset: 0x00024501 // (set) Token: 0x06000344 RID: 836 RVA: 0x00026309 File Offset: 0x00024509 [Description("获取或设置当前曲线的缩放模式,默认只有X轴,还可以选择同时缩放,或是先缩放X轴后缩放Y轴")] [Category("HslControls")] [DefaultValue(typeof(ScaleMode), "OnlyX")] public virtual ScaleMode ScaleMode { get { return this.scaleMode; } set { this.scaleMode = value; } } /// /// 获取或设置当前的曲线控件右侧的预留的空白宽度信息,像素为单位,默认200 /// // Token: 0x17000117 RID: 279 // (get) Token: 0x06000345 RID: 837 RVA: 0x00026312 File Offset: 0x00024512 // (set) Token: 0x06000346 RID: 838 RVA: 0x0002631A File Offset: 0x0002451A [Description("获取或设置当前的曲线控件右侧的预留的空白宽度信息,像素为单位,默认200")] [Category("HslControls")] [DefaultValue(200)] public int RightRemainWidth { get { return this.rightRemainWidth; } set { this.rightRemainWidth = value; this.RenderCurveUI(false); } } /// /// 获取或设置当前的曲线控件的额外的轴是否隐藏,额外的轴主要指在属性配置的第三轴,第四轴,等等 /// // Token: 0x17000118 RID: 280 // (get) Token: 0x06000347 RID: 839 RVA: 0x0002632C File Offset: 0x0002452C // (set) Token: 0x06000348 RID: 840 RVA: 0x00026334 File Offset: 0x00024534 [Description("获取或设置当前的曲线控件的额外的轴是否隐藏,额外的轴主要指在属性 ReferenceAxis 配置的第三轴,第四轴,等等")] [Category("HslControls")] [DefaultValue(false)] public bool IsOtherAxisHide { get { return this.isOtherAxisHide; } set { this.isOtherAxisHide = value; base.Invalidate(); } } /// /// 获取或设置光标移动时,是否在每个Y轴上显示光标位置对应的值(这个值反计算时存在一定的微小误差),默认为 true,显示 /// // Token: 0x17000119 RID: 281 // (get) Token: 0x06000349 RID: 841 RVA: 0x00026345 File Offset: 0x00024545 // (set) Token: 0x0600034A RID: 842 RVA: 0x0002634D File Offset: 0x0002454D [Description("获取或设置光标移动时,是否在每个Y轴上显示光标位置对应的值(这个值反计算时存在一定的微小误差),默认为 true,显示")] [Category("HslControls")] [DefaultValue(true)] public bool IsRenderYTip { get { return this.isRenderYTip; } set { this.isRenderYTip = value; base.Invalidate(); } } /// /// 获取或设置曲线范围的类信息 /// // Token: 0x1700011A RID: 282 // (get) Token: 0x0600034B RID: 843 RVA: 0x0002635E File Offset: 0x0002455E // (set) Token: 0x0600034C RID: 844 RVA: 0x00026366 File Offset: 0x00024566 [Browsable(false)] public HslCurveRange[] CurveRanges { get; set; } /// /// 当鼠标在曲线上双击时触发,由此获取到点击的数据的索引位置,时间坐标 /// // Token: 0x14000002 RID: 2 // (add) Token: 0x0600034D RID: 845 RVA: 0x00026370 File Offset: 0x00024570 // (remove) Token: 0x0600034E RID: 846 RVA: 0x000263A8 File Offset: 0x000245A8 [Category("Mouse")] [Description("当鼠标在曲线上双击时触发,由此获取到点击的数据的索引位置,时间坐标")] // [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event HslCurveHistory.CurveDoubleClick onCurveDoubleClick; /// /// 当鼠标在曲线上双击时触发,由此获取到点击的数据的索引位置,用户自定义的坐标 /// // Token: 0x14000003 RID: 3 // (add) Token: 0x0600034F RID: 847 RVA: 0x000263E0 File Offset: 0x000245E0 // (remove) Token: 0x06000350 RID: 848 RVA: 0x00026418 File Offset: 0x00024618 [Category("Mouse")] [Description("当鼠标在曲线上双击时触发,由此获取到点击的数据的索引位置,用户自定义的坐标")] // [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event HslCurveHistory.CurveCustomerDoubleClick onCurveCustomerDoubleClick; /// /// 当鼠标在曲线上移动时触发,由此获取到鼠标的移动位置 /// // Token: 0x14000004 RID: 4 // (add) Token: 0x06000351 RID: 849 RVA: 0x00026450 File Offset: 0x00024650 // (remove) Token: 0x06000352 RID: 850 RVA: 0x00026488 File Offset: 0x00024688 [Category("Mouse")] [Description("当鼠标在曲线上双击时触发,由此获取到鼠标的移动位置")] // [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event HslCurveHistory.CurveMouseMove onCurveMouseMove; /// /// 当鼠标在曲线上双击时触发,由此获取到点击的数据的索引位置,时间坐标 /// // Token: 0x14000005 RID: 5 // (add) Token: 0x06000353 RID: 851 RVA: 0x000264C0 File Offset: 0x000246C0 // (remove) Token: 0x06000354 RID: 852 RVA: 0x000264F8 File Offset: 0x000246F8 [Category("Mouse")] [Description("当鼠标在曲线上选择了一个区间,由此出发了一个选择事件,注意,包含两侧的端点。")] // [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event HslCurveHistory.CurveRangeSelect onCurveRangeSelect; /// /// 当曲线放大缩小调整的时候触发 /// // Token: 0x14000006 RID: 6 // (add) Token: 0x06000355 RID: 853 RVA: 0x00026530 File Offset: 0x00024730 // (remove) Token: 0x06000356 RID: 854 RVA: 0x00026568 File Offset: 0x00024768 // [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event HslCurveHistory.CurveScollScaleChanged OnScaleChanged; // Token: 0x14000007 RID: 7 // (add) Token: 0x06000357 RID: 855 RVA: 0x000265A0 File Offset: 0x000247A0 // (remove) Token: 0x06000358 RID: 856 RVA: 0x000265D8 File Offset: 0x000247D8 // [DebuggerBrowsable(DebuggerBrowsableState.Never)] public event HslCurveHistory.CurveScollScaleChanged OnScrollChanged; /// /// 计算所有的辅助线的缓存的文本信息,在界面大小变化的时候,需要重新计算 /// // Token: 0x06000359 RID: 857 RVA: 0x00026610 File Offset: 0x00024810 private void CalculateAuxiliaryPaintY(int offset) { for (int i = 0; i < this.auxiliary_lines.Count; i++) { bool isLeftFrame = this.auxiliary_lines[i].IsLeftFrame; if (isLeftFrame) { this.auxiliary_lines[i].PaintValue = HslHelper.ComputePaintLocationY(this.referenceAxisLeft.GetCalculateMax(), this.referenceAxisLeft.GetCalculateMin(), (float)(base.Height - 40 - this.topHeadHeight - this.buttomHeight), this.referenceAxisLeft.IsUseLogarithms() ? ((float)Math.Log10((double)this.auxiliary_lines[i].Value)) : this.auxiliary_lines[i].Value) + (float)offset; } else { this.auxiliary_lines[i].PaintValue = HslHelper.ComputePaintLocationY(this.referenceAxisRight.GetCalculateMax(), this.referenceAxisRight.GetCalculateMin(), (float)(base.Height - 40 - this.topHeadHeight - this.buttomHeight), this.referenceAxisRight.IsUseLogarithms() ? ((float)Math.Log10((double)this.auxiliary_lines[i].Value)) : this.auxiliary_lines[i].Value) + (float)offset; } } } /// /// 新增一条左侧的辅助线,使用默认的文本颜色 /// /// 数据值 // Token: 0x0600035A RID: 858 RVA: 0x00026764 File Offset: 0x00024964 public AuxiliaryLine AddLeftAuxiliary(float value) { return this.AddLeftAuxiliary(value, this.coordinateColor); } /// /// 新增一条左侧的辅助线,使用指定的颜色 /// /// 数据值 /// 线条颜色 // Token: 0x0600035B RID: 859 RVA: 0x00026784 File Offset: 0x00024984 public AuxiliaryLine AddLeftAuxiliary(float value, Color lineColor) { return this.AddLeftAuxiliary(value, lineColor, 1f, true); } /// /// 新增一条左侧的辅助线 /// /// 数据值 /// 线条颜色 /// 线条宽度 /// 是否是虚线 // Token: 0x0600035C RID: 860 RVA: 0x000267A4 File Offset: 0x000249A4 public AuxiliaryLine AddLeftAuxiliary(float value, Color lineColor, float lineThickness, bool isDashLine) { return this.AddAuxiliary(value, lineColor, lineThickness, isDashLine, true); } /// /// 新增一条右侧的辅助线,使用默认的文本颜色 /// /// 数据值 // Token: 0x0600035D RID: 861 RVA: 0x000267C4 File Offset: 0x000249C4 public AuxiliaryLine AddRightAuxiliary(float value) { return this.AddRightAuxiliary(value, this.coordinateColor); } /// /// 新增一条右侧的辅助线,使用指定的颜色 /// /// 数据值 /// 线条颜色 // Token: 0x0600035E RID: 862 RVA: 0x000267E4 File Offset: 0x000249E4 public AuxiliaryLine AddRightAuxiliary(float value, Color lineColor) { return this.AddRightAuxiliary(value, lineColor, 1f, true); } /// /// 新增一条右侧的辅助线 /// /// 数据值 /// 线条颜色 /// 线条宽度 /// 是否是虚线的信息 // Token: 0x0600035F RID: 863 RVA: 0x00026804 File Offset: 0x00024A04 public AuxiliaryLine AddRightAuxiliary(float value, Color lineColor, float lineThickness, bool isDashLine) { return this.AddAuxiliary(value, lineColor, lineThickness, isDashLine, false); } // Token: 0x06000360 RID: 864 RVA: 0x00026824 File Offset: 0x00024A24 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); return auxiliaryLine; } /// /// 移除所有的指定值的辅助曲线,包括左边的和右边的 /// /// // Token: 0x06000361 RID: 865 RVA: 0x000268C4 File Offset: 0x00024AC4 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: 0x06000362 RID: 866 RVA: 0x00026944 File Offset: 0x00024B44 public void RemoveAuxiliary(AuxiliaryLine auxiliary) { bool flag = this.auxiliary_lines.Remove(auxiliary); if (flag) { base.Invalidate(); } } /// /// 移除所有的辅助线 /// // Token: 0x06000363 RID: 867 RVA: 0x0002696C File Offset: 0x00024B6C public void RemoveAllAuxiliary() { int count = this.auxiliary_lines.Count; this.auxiliary_lines.Clear(); bool flag = count > 0; if (flag) { base.Invalidate(); } } /// /// 新增一条辅助标签 /// /// 描述的标签值 // Token: 0x06000364 RID: 868 RVA: 0x000269A1 File Offset: 0x00024BA1 public void AddAuxiliaryLabel(AuxiliaryLable auxiliaryLable) { this.auxiliary_Labels.Add(auxiliaryLable); } /// /// 移除指定的辅助标签 /// /// 等待删除的对象 // Token: 0x06000365 RID: 869 RVA: 0x000269B4 File Offset: 0x00024BB4 public void RemoveAuxiliaryLable(AuxiliaryLable auxiliaryLable) { bool flag = this.auxiliary_Labels.Remove(auxiliaryLable); if (flag) { base.Invalidate(); } } /// /// 移除所有的辅助标签 /// // Token: 0x06000366 RID: 870 RVA: 0x000269DC File Offset: 0x00024BDC public void RemoveAllAuxiliaryLable() { int count = this.auxiliary_Labels.Count; this.auxiliary_Labels.Clear(); bool flag = count > 0; if (flag) { base.Invalidate(); } } /// /// 新增一个标记的线段信息 /// /// 线段标记信息 // Token: 0x06000367 RID: 871 RVA: 0x00026A11 File Offset: 0x00024C11 public void AddMarkLine(HslMarkLine markLine) { this.hslMarkLines.Add(markLine); } /// /// 移除一个标记的线段信息 /// /// 线段标记信息 // Token: 0x06000368 RID: 872 RVA: 0x00026A21 File Offset: 0x00024C21 public void RemoveMarkLine(HslMarkLine markLine) { this.hslMarkLines.Remove(markLine); } /// /// 移除所有的标记的线段信息 /// // Token: 0x06000369 RID: 873 RVA: 0x00026A31 File Offset: 0x00024C31 public void RemoveAllMarkLine() { this.hslMarkLines.Clear(); } /// /// 新增一个标记的文本信息 /// /// 文本标记信息 // Token: 0x0600036A RID: 874 RVA: 0x00026A40 File Offset: 0x00024C40 public void AddMarkText(HslMarkText markText) { this.hslMarkTexts.Add(markText); } /// /// 移除一个标记的文本信息 /// /// 文本标记信息 // Token: 0x0600036B RID: 875 RVA: 0x00026A50 File Offset: 0x00024C50 public void RemoveMarkText(HslMarkText markText) { this.hslMarkTexts.Remove(markText); } /// /// 移除所有的标记的文本信息 /// // Token: 0x0600036C RID: 876 RVA: 0x00026A60 File Offset: 0x00024C60 public void RemoveAllMarkText() { this.hslMarkTexts.Clear(); } // Token: 0x0600036D RID: 877 RVA: 0x00026A70 File Offset: 0x00024C70 public void AddMarkCurvePeakPoint(string curveKey) { bool flag = !this.data_dicts.ContainsKey(curveKey); if (!flag) { float[] data = this.data_dicts[curveKey].Data; for (int i = 0; i < data.Length; i++) { bool flag2 = i == 0; if (flag2) { bool flag3 = data[i] > data[i + 1]; if (flag3) { this.AddMarkText(new HslMarkText { CurveKey = curveKey, Index = i, MarkText = string.Format(this.data_dicts[curveKey].RenderFormat, data[i]), TextBrush = this.data_dicts[curveKey].GetLineBrush() }); } } else { bool flag4 = i == data.Length - 1; if (flag4) { bool flag5 = data[i] > data[i - 1]; if (flag5) { this.AddMarkText(new HslMarkText { CurveKey = curveKey, Index = i, MarkText = string.Format(this.data_dicts[curveKey].RenderFormat, data[i]), TextBrush = this.data_dicts[curveKey].GetLineBrush() }); } } else { bool flag6 = data[i] > data[i - 1] && data[i] >= data[i + 1]; if (flag6) { int j = i + 1; while (j < data.Length) { bool flag7 = data[i] == data[j]; if (flag7) { j++; } else { bool flag8 = data[i] > data[j]; if (flag8) { this.AddMarkText(new HslMarkText { CurveKey = curveKey, Index = i, MarkText = string.Format(this.data_dicts[curveKey].RenderFormat, data[i]), TextBrush = this.data_dicts[curveKey].GetLineBrush() }); i = j; break; } i = j; break; } } } } } } } } /// /// 增加一个新的标记图片 /// /// 标记图片对象 // Token: 0x0600036E RID: 878 RVA: 0x00026C8B File Offset: 0x00024E8B public void AddMarkImage(HslMarkImage markImage) { this.hslMarkImages.Add(markImage); } /// /// 移除一个标记图片信息 /// /// 标记图片信息 // Token: 0x0600036F RID: 879 RVA: 0x00026C9B File Offset: 0x00024E9B public void RemoveMarkImage(HslMarkImage markImage) { this.hslMarkImages.Remove(markImage); } /// /// 移除所有的标记图片信息 /// // Token: 0x06000370 RID: 880 RVA: 0x00026CAB File Offset: 0x00024EAB public void RemoveAllMarkImages() { this.hslMarkImages.Clear(); } // Token: 0x06000371 RID: 881 RVA: 0x00026CBC File Offset: 0x00024EBC private void CalculateCurveDataMax() { this.data_count = 0; for (int i = 0; i < this.data_lists.Count; i++) { bool flag = this.data_count < this.data_lists[i].Data.Length; if (flag) { this.data_count = this.data_lists[i].Data.Length; } } } /// /// 设置系统横轴的显示坐标信息 /// /// 时间数组 // Token: 0x06000372 RID: 882 RVA: 0x00026D25 File Offset: 0x00024F25 public void SetDateTimes(DateTime[] times) { this.data_times = new List(times); this.isRenderTimeData = true; } /// /// 设置系统横轴的显示坐标信息 /// /// 自定义的数组 // Token: 0x06000373 RID: 883 RVA: 0x00026D3B File Offset: 0x00024F3B public void SetDateCustomer(string[] customers) { this.data_customer = new List(customers); this.isRenderTimeData = false; } /// /// 设置当前曲线的横轴的缩放等级,必须大于0,小于1则为缩放,大于1则为放大 /// /// 缩放等级,必须大于0,小于1则为缩放,大于1则为放大 // Token: 0x06000374 RID: 884 RVA: 0x00026D51 File Offset: 0x00024F51 public void SetScaleByXAxis(float scale) { this.data_ScaleX_Render = scale; this.SetScrollXNewValue(this.scrollX); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } /// /// 设置新的X轴缩放等级的数组,滚轮将在数组上滚动,缩放等级应该从小到大排序参数, index 为默认的等级所在的索引,默认的缩放等级一般都是 1
/// 例如float数组 [1/4f, 1/2f, 1f, 2f, 3f, 4f, 10f ],index 就是 2 ,也即是 1f 所在数组的索引 ///
/// X轴的缩放等级 /// index 为默认的等级所在的索引 // Token: 0x06000375 RID: 885 RVA: 0x00026D90 File Offset: 0x00024F90 public void SetScaleXOptions(float[] scales, int index) { this.scale_x_options = scales; bool flag = index >= 0 && index < this.scale_x_options.Length; if (flag) { this.scale_x_index = index; this.data_ScaleX_Render = this.scale_x_options[index]; } } /// /// 设置新的Y轴缩放等级的数组,滚轮将在数组上滚动,缩放等级应该从小到大排序参数, index 为默认的等级所在的索引,默认的缩放等级一般都是 1
/// Y轴的缩放等级需要从1开始,例如float数组 [1f, 2f, 3f, 4f, 10f ],index 就是 0 ,也即是 1f 所在数组的索引 ///
/// X轴的缩放等级 /// index 为默认的等级所在的索引 // Token: 0x06000376 RID: 886 RVA: 0x00026DD4 File Offset: 0x00024FD4 public void SetScaleYOptions(float[] scales, int index) { this.scale_y_options = scales; bool flag = index >= 0 && index < this.scale_y_options.Length; if (flag) { this.scale_y_index = index; this.data_ScaleY_Render = this.scale_y_options[index]; } } /// /// 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色随机,没有数据上限,线条宽度为1 /// /// 曲线关键字 /// 曲线的具体数据 // Token: 0x06000377 RID: 887 RVA: 0x00026E18 File Offset: 0x00025018 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: 0x06000378 RID: 888 RVA: 0x00026E64 File Offset: 0x00025064 public void SetLeftCurve(string key, float[] data, Color lineColor) { this.SetCurve(key, 0, data, lineColor, 1f, CurveStyle.LineSegment); } /// /// 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1 /// /// 曲线关键字 /// 数据内容 /// 曲线颜色 /// 曲线的样式 // Token: 0x06000379 RID: 889 RVA: 0x00026E78 File Offset: 0x00025078 public void SetLeftCurve(string key, float[] data, Color lineColor, CurveStyle style) { this.SetCurve(key, 0, data, lineColor, 1f, style); } /// /// 新增或修改一条指定关键字的左参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1 /// /// 曲线关键字 /// 数据内容 /// 曲线颜色 /// 曲线的样式 /// 数据显示的格式化操作 // Token: 0x0600037A RID: 890 RVA: 0x00026E8D File Offset: 0x0002508D public void SetLeftCurve(string key, float[] data, Color lineColor, CurveStyle style, string renderFormat) { this.SetCurve(key, 0, data, lineColor, 1f, style, renderFormat); } /// /// 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色随机,没有数据上限,线条宽度为1 /// /// 曲线关键字 /// 数据内容 // Token: 0x0600037B RID: 891 RVA: 0x00026EA4 File Offset: 0x000250A4 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: 0x0600037C RID: 892 RVA: 0x00026EF0 File Offset: 0x000250F0 public void SetRightCurve(string key, float[] data, Color lineColor) { this.SetCurve(key, 1, data, lineColor, 1f, CurveStyle.LineSegment); } /// /// 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1 /// /// 曲线关键字 /// 数据内容 /// 曲线颜色 /// 曲线的样式 // Token: 0x0600037D RID: 893 RVA: 0x00026F04 File Offset: 0x00025104 public void SetRightCurve(string key, float[] data, Color lineColor, CurveStyle style) { this.SetCurve(key, 1, data, lineColor, 1f, style); } /// /// 新增或修改一条指定关键字的右参考系曲线数据,需要指定数据,颜色,没有数据上限,线条宽度为1 /// /// 曲线关键字 /// 数据内容 /// 曲线颜色 /// 曲线的样式 /// 数据显示的格式化操作 // Token: 0x0600037E RID: 894 RVA: 0x00026F19 File Offset: 0x00025119 public void SetRightCurve(string key, float[] data, Color lineColor, CurveStyle style, string renderFormat) { this.SetCurve(key, 1, data, lineColor, 1f, style, renderFormat); } /// /// 新增或修改一条指定关键字的曲线数据,需要指定参考系及数据,颜色,线条宽度 /// /// 曲线关键字 /// 是否以左侧坐标轴为参照系 /// 数据 /// 线条颜色 /// 线条宽度 /// 曲线的样式 // Token: 0x0600037F RID: 895 RVA: 0x00026F30 File Offset: 0x00025130 public void SetCurve(string key, int referenceAxis, float[] data, Color lineColor, float thickness, CurveStyle style) { this.SetCurve(key, referenceAxis, data, lineColor, thickness, style, "{0}"); } /// /// 新增或修改一条指定关键字的曲线数据,需要指定参考系及数据,颜色,线条宽度 /// /// 曲线关键字 /// 是否以左侧坐标轴为参照系 /// 数据 /// 线条颜色 /// 线条宽度 /// 曲线的样式 /// 数据显示的格式化操作 // Token: 0x06000380 RID: 896 RVA: 0x00026F48 File Offset: 0x00025148 public void SetCurve(string key, int referenceAxis, float[] data, Color lineColor, float thickness, CurveStyle style, string renderFormat) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { bool flag2 = data == null; if (flag2) { data = new float[0]; } this.data_dicts[key].Data = data; } else { bool flag3 = data == null; if (flag3) { data = new float[0]; } this.data_dicts.Add(key, new HslCurveItem { Data = data, LineThickness = thickness, LineColor = lineColor, ReferenceAxisIndex = referenceAxis, Style = style, RenderFormat = renderFormat }); this.data_lists.Add(this.data_dicts[key]); } this.CalculateCurveDataMax(); } /// /// 新增一条新的曲线信息,需要指定关键字,曲线的对象内容,可以自由的设置曲线的细节。 /// /// 关键字 /// 曲线内容 // Token: 0x06000381 RID: 897 RVA: 0x00027002 File Offset: 0x00025202 public void SetCurve(string key, HslCurveItem curveItem) { this.data_dicts.Add(key, curveItem); this.CalculateCurveDataMax(); } /// /// 修改某一条曲线的颜色信息 /// /// 曲线关键字 /// 曲线的颜色信息 // Token: 0x06000382 RID: 898 RVA: 0x0002701C File Offset: 0x0002521C public void SetCurveLineColor(string key, Color lineColor) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { this.data_dicts[key].LineColor = lineColor; } } /// /// 修改某一条曲线的线条宽度 /// /// 曲线关键字 /// 曲线的线宽 // Token: 0x06000383 RID: 899 RVA: 0x00027050 File Offset: 0x00025250 public void SetCurveLineThickness(string key, float thickness) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { this.data_dicts[key].LineThickness = thickness; } } /// /// 修改某一条曲线的样式,线段,还是圆滑,还是阶跃,还是阶梯 /// /// 曲线关键字 /// 曲线的样式 // Token: 0x06000384 RID: 900 RVA: 0x00027084 File Offset: 0x00025284 public void SetCurveLineCurveStyle(string key, CurveStyle style) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { this.data_dicts[key].Style = style; } } /// /// 修改某一条曲线的显示的格式化信息文本。 /// /// 曲线关键字 /// 曲线的样式 // Token: 0x06000385 RID: 901 RVA: 0x000270B8 File Offset: 0x000252B8 public void SetCurveLineRenderFormat(string key, string renderFormat) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { this.data_dicts[key].RenderFormat = renderFormat; } } /// /// 移除指定关键字的曲线 /// /// 曲线关键字 // Token: 0x06000386 RID: 902 RVA: 0x000270EC File Offset: 0x000252EC public void RemoveCurve(string key) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { this.data_lists.Remove(this.data_dicts[key]); this.data_dicts.Remove(key); } bool flag2 = this.data_dicts.Count == 0; if (flag2) { this.data_times = new List(0); this.data_customer = new List(); } this.CalculateCurveDataMax(); } /// /// 获取当前曲线的字典信息,所有的曲线都在这里面,可以进行一些自由的控制 /// /// 包含所有曲线的词典信息 // Token: 0x06000387 RID: 903 RVA: 0x00027163 File Offset: 0x00025363 public Dictionary GetAllCurve() { return this.data_dicts; } /// /// 移除指定关键字的曲线,包含了所有的特殊标记信息 /// // Token: 0x06000388 RID: 904 RVA: 0x0002716C File Offset: 0x0002536C public void RemoveAllCurve() { this.data_dicts.Clear(); this.data_lists.Clear(); this.markBackSections.Clear(); this.markForeSections.Clear(); this.markForeSectionsTmp.Clear(); this.markForeActiveSections.Clear(); this.hslMarkTexts.Clear(); this.auxiliary_Labels.Clear(); this.hslMarkLines.Clear(); bool flag = this.data_dicts.Count == 0; if (flag) { this.data_times = new List(0); } this.CalculateCurveDataMax(); this.SetScrollXNewValue(0); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } /// /// 设置一条曲线是否是可见的,如果该曲线不存在,则无效。 /// /// 关键字 /// 是否可见,如果设置不可见,名称不可见,曲线不可见,但是提示可见 /// 曲线是否可见,如果设置不可见,曲线隐藏,提示隐藏,名称暗淡显示。 // Token: 0x06000389 RID: 905 RVA: 0x00027238 File Offset: 0x00025438 public void SetCurveVisible(string key, bool visible, bool lineRenderVisiable = true) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { HslCurveItem hslCurveItem = this.data_dicts[key]; hslCurveItem.Visible = visible; hslCurveItem.LineRenderVisiable = lineRenderVisiable; } } /// /// 设置多条曲线是否是可见的,如果该曲线不存在,则无效。 /// /// 关键字 /// 是否可见 /// 曲线是否可见,如果设置不可见,曲线隐藏,提示隐藏,名称暗淡显示。 // Token: 0x0600038A RID: 906 RVA: 0x00027278 File Offset: 0x00025478 public void SetCurveVisible(string[] keys, bool visible, bool lineRenderVisiable = true) { foreach (string key in keys) { bool flag = this.data_dicts.ContainsKey(key); if (flag) { HslCurveItem hslCurveItem = this.data_dicts[key]; hslCurveItem.Visible = visible; hslCurveItem.LineRenderVisiable = lineRenderVisiable; } } } // Token: 0x0600038B RID: 907 RVA: 0x000272D0 File Offset: 0x000254D0 private void PictureBox3_MouseEnter(object sender, EventArgs e) { bool flag = this.syncHslCurveHistory != null; if (flag) { this.syncHslCurveHistory.OnMouseEnter(e); } else { this.is_mouse_on_picture = true; } } // Token: 0x0600038C RID: 908 RVA: 0x00027304 File Offset: 0x00025504 private void PictureBox3_MouseLeave(object sender, EventArgs e) { bool flag = this.syncHslCurveHistory != null; if (flag) { this.syncHslCurveHistory.OnMouseLeave(e); } else { bool flag2 = !this.isMouseFreeze; if (flag2) { this.is_mouse_on_picture = false; HslCurveHistory.CurveMouseMove curveMouseMove = this.onCurveMouseMove; if (curveMouseMove != null) { curveMouseMove(this, -1, -1); } } this.HslInvalidate(); } } // Token: 0x0600038D RID: 909 RVA: 0x00027364 File Offset: 0x00025564 private void PictureBox3_MouseDoubleClick(object sender, MouseEventArgs e) { bool flag = this.syncHslCurveHistory != null; if (flag) { this.syncHslCurveHistory.OnMouseDoubleClick(e); } else { bool flag2 = this.isShowTextInfomation; if (!flag2) { bool flag3 = this.IsPointInDataRegion(e.Location); if (flag3) { int actualLeftWidth = this.GetActualLeftWidth(); bool flag4 = e.X - actualLeftWidth + this.offsetPaintScrollX < 0; if (!flag4) { this.mouse_location = new Point(e.Location.X - actualLeftWidth, e.Location.Y - this.topHeadHeight); this.isMouseFreeze = true; int num = Convert.ToInt32((float)(e.X - actualLeftWidth + this.offsetPaintScrollX) / this.data_ScaleX_Render); bool flag5 = this.isRenderTimeData; if (flag5) { bool flag6 = num >= 0 && num < this.data_times.Count; if (flag6) { HslCurveHistory.CurveDoubleClick curveDoubleClick = this.onCurveDoubleClick; if (curveDoubleClick != null) { curveDoubleClick(this, num, this.data_times[num]); } } } else { bool flag7 = num >= 0 && num < this.data_customer.Count; if (flag7) { HslCurveHistory.CurveCustomerDoubleClick curveCustomerDoubleClick = this.onCurveCustomerDoubleClick; if (curveCustomerDoubleClick != null) { curveCustomerDoubleClick(this, num, this.data_customer[num]); } } } } } } } } // Token: 0x0600038E RID: 910 RVA: 0x000274C8 File Offset: 0x000256C8 private void PictureBox3_MouseUp(object sender, MouseEventArgs e) { bool flag = this.is_mouse_click_scroll; if (flag) { this.is_mouse_click_scroll = false; this.HslInvalidate(); } else { bool flag2 = e.Button == MouseButtons.Left && this.isAllowSelectSection; if (flag2) { HslMarkForeSection hslMarkForeSection = new HslMarkForeSection { StartIndex = this.m_RowBetweenStart, EndIndex = this.m_RowBetweenEnd, Height = (float)this.m_RowBetweenHeight, StartHeight = (float)this.m_RowBetweenStartHeight, LinePen = this.markLinePen, FontBrush = this.markTextBrush }; this.markForeSectionsTmp.Add(hslMarkForeSection); this.m_IsMouseLeftDown = false; this.HslInvalidate(); HslCurveHistory.CurveRangeSelect curveRangeSelect = this.onCurveRangeSelect; if (curveRangeSelect != null) { curveRangeSelect(this, hslMarkForeSection); } this.m_RowBetweenStart = -1; this.m_RowBetweenEnd = -1; this.m_RowBetweenHeight = -1; this.m_RowBetweenStartHeight = -1; } else { bool flag3 = e.Button == MouseButtons.Middle; if (flag3) { bool flag4 = this.syncHslCurveHistory != null; if (flag4) { this.syncHslCurveHistory.OnMouseUp(e); } else { this.m_IsMouseMiddleDown = false; this.mouse_right_location = new Point(-1, -1); } } } } } // Token: 0x0600038F RID: 911 RVA: 0x000275FC File Offset: 0x000257FC private void PictureBox3_MouseDown(object sender, MouseEventArgs e) { int actualLeftWidth = this.GetActualLeftWidth(); foreach (KeyValuePair keyValuePair in this.data_dicts) { bool flag = keyValuePair.Value.TitleRegion.Contains(e.Location); if (flag) { keyValuePair.Value.LineRenderVisiable = !keyValuePair.Value.LineRenderVisiable; this.HslInvalidate(); return; } } bool flag2 = this.ReferenceAxis.Count > 0 && new Rectangle(this.GetActualLeftWidth() - this.leftWidth, base.Height - this.scrollHeight - 5, this.leftWidth, this.scrollHeight).Contains(e.Location); if (flag2) { this.isOtherAxisHide = !this.isOtherAxisHide; this.HslInvalidate(); } else { bool flag3 = this.scrollRectage.X >= 0 && this.scrollRectage.Contains(new Point(e.Location.X - actualLeftWidth, e.Location.Y - this.topHeadHeight)) && e.Button == MouseButtons.Left; if (flag3) { this.is_mouse_click_scroll = true; this.mouse_scroll_location = e.Location; } else { bool flag4 = this.scrollRectageBack.Width > 0 && this.scrollRectageBack.Contains(new Point(e.Location.X - actualLeftWidth, e.Location.Y - this.topHeadHeight)) && e.Button == MouseButtons.Left; if (flag4) { this.is_mouse_click_scroll = true; this.mouse_scroll_location = e.Location; this.SetScrollXNewValue(e.Location.X - actualLeftWidth); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } this.Refresh(); } else { bool flag5 = e.Button == MouseButtons.Right; if (flag5) { this.isMouseFreeze = false; this.markForeSectionsTmp.Clear(); this.m_RowBetweenStart = -1; this.m_RowBetweenEnd = -1; this.m_RowBetweenHeight = -1; this.m_RowBetweenStartHeight = -1; this.HslInvalidate(); } else { bool flag6 = e.Button == MouseButtons.Middle; if (flag6) { bool flag7 = this.syncHslCurveHistory != null; if (flag7) { this.syncHslCurveHistory.OnMouseDown(e); } else { this.m_IsMouseMiddleDown = true; this.mouse_right_location = e.Location; } } else { bool flag8 = this.isAllowSelectSection; if (flag8) { bool flag9 = e == null; if (!flag9) { bool flag10 = e.X - actualLeftWidth + this.offsetPaintScrollX < 0; if (!flag10) { bool flag11 = this.IsPointInDataRegion(e.Location); if (flag11) { this.m_IsMouseLeftDown = true; this.m_RowBetweenStart = Convert.ToInt32((float)(e.X - actualLeftWidth + this.offsetPaintScrollX) / this.data_ScaleX_Render); this.m_RowBetweenStartHeight = e.Y - this.topHeadHeight; this.m_RowBetweenHeight = e.Y - this.topHeadHeight; } } } } } } } } } } // Token: 0x06000390 RID: 912 RVA: 0x0002797C File Offset: 0x00025B7C private void PictureBox3_MouseMove(object sender, MouseEventArgs e) { bool flag = this.syncHslCurveHistory != null; if (flag) { this.syncHslCurveHistory.OnMouseMove(e); } else { bool flag2 = false; foreach (KeyValuePair keyValuePair in this.data_dicts) { bool flag3 = keyValuePair.Value.TitleRegion.Contains(e.Location); if (flag3) { flag2 = true; break; } } bool flag4 = this.ReferenceAxis.Count > 0 && new Rectangle(this.GetActualLeftWidth() - this.leftWidth, base.Height - this.scrollHeight - 5, this.leftWidth, this.scrollHeight).Contains(e.Location); if (flag4) { flag2 = true; } this.Cursor = (flag2 ? Cursors.Hand : Cursors.Arrow); bool flag5 = this.is_mouse_click_scroll; if (flag5) { int num = e.Location.X - this.mouse_scroll_location.X; this.mouse_scroll_location = new Point(e.Location.X, e.Location.Y); this.SetScrollXNewValue(this.scrollX + num); this.Refresh(); HslCurveHistory.CurveScollScaleChanged onScaleChanged = this.OnScaleChanged; if (onScaleChanged != null) { onScaleChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } HslCurveHistory.CurveScollScaleChanged onScrollChanged = this.OnScrollChanged; if (onScrollChanged != null) { onScrollChanged(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } else { bool flag6 = this.IsPointInDataRegion(e.Location); if (flag6) { int actualLeftWidth = this.GetActualLeftWidth(); int curvePaintActualWidth = this.GetCurvePaintActualWidth(); this.is_mouse_on_picture = true; bool flag7 = this.is_mouse_on_picture && !this.isShowTextInfomation && !this.isMouseFreeze; if (flag7) { this.mouse_location = new Point(e.Location.X - actualLeftWidth, e.Location.Y - this.topHeadHeight); HslCurveHistory.CurveMouseMove curveMouseMove = this.onCurveMouseMove; if (curveMouseMove != null) { curveMouseMove(this, this.mouse_location.X, this.mouse_location.Y); } this.Refresh(); } bool isMouseMiddleDown = this.m_IsMouseMiddleDown; if (isMouseMiddleDown) { int num2 = e.Location.X - this.mouse_right_location.X; int num3 = (this.data_ScaleY_Render > 1.1f) ? (e.Location.Y - this.mouse_right_location.Y) : 0; this.mouse_right_location = e.Location; int num4 = this.CalculatePaintWidthAndScrollMax(curvePaintActualWidth); bool flag8 = num4 <= curvePaintActualWidth; if (!flag8) { int num5 = this.offsetPaintScrollX - num2; this.SetScrollXNewValue(Convert.ToInt32((float)((long)(this.offsetPaintScrollX - num2) * (long)this.scrollMaxX) * 1f / (float)(num4 - curvePaintActualWidth))); this.offsetPaintScrollX = num5; bool flag9 = this.offsetPaintScrollX >= num4 - curvePaintActualWidth; if (flag9) { this.offsetPaintScrollX = num4 - curvePaintActualWidth; } bool flag10 = this.offsetPaintScrollX < 0; if (flag10) { this.offsetPaintScrollX = 0; } this.offsetPaintScrollY = this.EnsureOffsetPaintScrollY(this.offsetPaintScrollY - num3); this.Refresh(); HslCurveHistory.CurveScollScaleChanged onScaleChanged2 = this.OnScaleChanged; if (onScaleChanged2 != null) { onScaleChanged2(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } HslCurveHistory.CurveScollScaleChanged onScrollChanged2 = this.OnScrollChanged; if (onScrollChanged2 != null) { onScrollChanged2(this, this.scrollX, this.data_ScaleX_Render, this.offsetPaintScrollX); } } } } else { bool flag11 = !this.isMouseFreeze; if (flag11) { this.mouse_location = new Point(-2); bool flag12 = this.is_mouse_on_picture; if (flag12) { HslCurveHistory.CurveMouseMove curveMouseMove2 = this.onCurveMouseMove; if (curveMouseMove2 != null) { curveMouseMove2(this, -1, -1); } } this.is_mouse_on_picture = false; } this.HslInvalidate(); } } } } /// /// 强行设置曲线中活动的点信息,显示数值 /// /// 横坐标x /// 横坐标y // Token: 0x06000391 RID: 913 RVA: 0x00027DAC File Offset: 0x00025FAC public void SetCurveMousePosition(int x, int y) { bool flag = x < 0 || y < 0; if (flag) { this.is_mouse_on_picture = false; } else { this.is_mouse_on_picture = true; } this.mouse_location.X = x; this.mouse_location.Y = y; this.Refresh(); } // Token: 0x06000392 RID: 914 RVA: 0x00027DFC File Offset: 0x00025FFC private bool IsPointInDataRegion(Point point) { int actualLeftWidth = this.GetActualLeftWidth(); return point.X >= actualLeftWidth && point.X <= base.Width - this.rightWidth && point.Y >= this.topHeadHeight && point.Y <= base.Height - this.buttomHeight; } // Token: 0x06000393 RID: 915 RVA: 0x00027E60 File Offset: 0x00026060 private void PictureBox3_Paint(object sender, PaintEventArgs e) { Graphics graphics = e.Graphics; graphics.SmoothingMode = SmoothingMode.AntiAlias; graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; int actualLeftWidth = this.GetActualLeftWidth(); graphics.TranslateTransform((float)actualLeftWidth, (float)this.topHeadHeight); graphics.Clip = new Region(new Rectangle(0, 0, base.Width - actualLeftWidth - this.rightWidth + 1, base.Height - this.topHeadHeight - this.scrollHeight + 1)); Font font = new Font(this.Font.FontFamily, 12f); int num = (int)((float)(this.mouse_location.X + this.offsetPaintScrollX) / this.data_ScaleX_Render); graphics.TranslateTransform((float)(-(float)this.offsetPaintScrollX), 0f); for (int i = 0; i < this.markForeSectionsTmp.Count; i++) { this.DrawMarkForeSection(graphics, this.markForeSectionsTmp[i], font, false); } bool flag = this.m_IsMouseLeftDown && this.m_RowBetweenStart != -1; if (flag) { bool flag2 = num < this.data_count; if (flag2) { this.m_RowBetweenEnd = Convert.ToInt32((float)(this.mouse_location.X + this.offsetPaintScrollX) / this.data_ScaleX_Render); this.m_RowBetweenHeight = this.mouse_location.Y; } } HslMarkForeSection markForeSection = new HslMarkForeSection { StartIndex = this.m_RowBetweenStart, EndIndex = this.m_RowBetweenEnd, Height = (float)this.m_RowBetweenHeight, StartHeight = (float)this.m_RowBetweenStartHeight, LinePen = this.markLinePen, FontBrush = this.markTextBrush }; this.DrawMarkForeSection(graphics, markForeSection, font, false); for (int j = 0; j < this.markForeActiveSections.Count; j++) { bool flag3 = this.IsPointInDataRegion(new Point(this.mouse_location.X + actualLeftWidth, this.mouse_location.Y + this.topHeadHeight)) && this.is_mouse_on_picture; if (flag3) { bool flag4 = num >= this.markForeActiveSections[j].StartIndex && num <= this.markForeActiveSections[j].EndIndex; if (flag4) { this.DrawMarkForeSection(graphics, this.markForeActiveSections[j], font, false); } } } graphics.TranslateTransform((float)this.offsetPaintScrollX, 0f); bool flag5 = this.is_mouse_on_picture && !this.isShowTextInfomation && this.markLineVisible; if (flag5) { graphics.DrawLine(this.moveLinePen, this.mouse_location.X, 15, this.mouse_location.X, base.Height - this.topHeadHeight - this.buttomHeight - 18); bool flag6 = this.isRenderYTip; if (flag6) { graphics.DrawLine(this.moveLinePen, 0, this.mouse_location.Y, base.Width - this.rightWidth, this.mouse_location.Y); } bool flag7 = num >= this.data_count; if (flag7) { return; } bool flag8 = num < 0; if (flag8) { return; } int num2 = this.mouse_location.Y - this.data_dicts.Count * 20 - 20; bool flag9 = num2 < 5; if (flag9) { num2 = 5; } int num3 = this.mouse_location.X; int num4 = this.data_tip_width; int num5 = 0; foreach (KeyValuePair keyValuePair in this.data_dicts) { bool lineRenderVisiable = keyValuePair.Value.LineRenderVisiable; if (lineRenderVisiable) { num5++; } bool flag10 = this.data_tip_width < 0; if (flag10) { int num6 = (int)graphics.MeasureString(keyValuePair.Key, font).Width; bool flag11 = num < keyValuePair.Value.Data.Length; if (flag11) { num6 += (int)graphics.MeasureString(string.Format(keyValuePair.Value.RenderFormat, keyValuePair.Value.Data[num]), font).Width; } num6 += 25; num4 = Math.Max(num4, num6); } } bool flag12 = num3 + num4 + 20 > base.Width - this.rightWidth - actualLeftWidth; if (flag12) { num3 = this.mouse_location.X - num4 - 10; } Rectangle rectangle = new Rectangle(num3 + 5, num2 - 5, num4, num5 * 20 + 10); bool flag13 = num4 > 0; if (flag13) { using (GraphicsPath roundRectange = HslHelper.GetRoundRectange(rectangle, 4, true, true, true, true)) { graphics.FillPath(this.mouseHoverBackBrush, roundRectange); graphics.DrawPath(this.markBorderPen, roundRectange); } foreach (KeyValuePair keyValuePair2 in this.data_dicts) { bool lineRenderVisiable2 = keyValuePair2.Value.LineRenderVisiable; if (lineRenderVisiable2) { Rectangle r = new Rectangle(rectangle.X + 3, num2, num4 - 6, 20); graphics.DrawString(keyValuePair2.Key, font, this.markTextBrush, r, HslHelper.StringFormatLeft); bool flag14 = num < keyValuePair2.Value.Data.Length; if (flag14) { graphics.DrawString(string.Format(keyValuePair2.Value.RenderFormat, keyValuePair2.Value.Data[num]), font, this.markTextBrush, r, HslHelper.StringFormatRight); } num2 += 20; } } } num2 = this.mouse_location.Y + 25; for (int k = 0; k < this.markForeActiveSections.Count; k++) { bool flag15 = num >= this.markForeActiveSections[k].StartIndex && num <= this.markForeActiveSections[k].EndIndex; if (flag15) { float num7 = 0f; foreach (KeyValuePair keyValuePair3 in this.markForeActiveSections[k].CursorTexts) { num7 += graphics.MeasureString(keyValuePair3.Key + " : " + keyValuePair3.Value, this.Font, 244).Height + 8f; } rectangle = new Rectangle(num3 + 5, num2 - 5, 250, (int)num7 + 10); bool flag16 = num3 < this.mouse_location.X; if (flag16) { rectangle.X = this.mouse_location.X - 250 - 10; } graphics.FillRectangle(this.mouseHoverBackBrush, rectangle); graphics.DrawRectangle(this.markBorderPen, rectangle); foreach (KeyValuePair keyValuePair4 in this.markForeActiveSections[k].CursorTexts) { num7 = graphics.MeasureString(keyValuePair4.Key + " : " + keyValuePair4.Value, this.Font, 244).Height; Rectangle r2 = new Rectangle(rectangle.X + 3, num2, 244, 200); graphics.DrawString(keyValuePair4.Key + " : " + keyValuePair4.Value, font, Brushes.Yellow, r2, HslHelper.StringFormatDefault); num2 += (int)num7 + 8; } break; } } Rectangle rectangle2 = new Rectangle(this.mouse_location.X - this.mouseHoverTimeWidth / 2, base.Height - this.topHeadHeight - this.buttomHeight - 18, this.mouseHoverTimeWidth, 17); bool flag17 = rectangle2.X < 0; if (flag17) { rectangle2.X = 0; } bool flag18 = rectangle2.X > base.Width - actualLeftWidth - this.rightWidth - this.mouseHoverTimeWidth - 1; if (flag18) { rectangle2.X = base.Width - actualLeftWidth - this.rightWidth - this.mouseHoverTimeWidth - 1; } bool flag19 = this.buttomHeight > 20; if (flag19) { rectangle2.Height += this.buttomHeight - 20; } bool flag20 = this.isRenderTimeData; if (flag20) { bool flag21 = num < this.data_times.Count; if (flag21) { graphics.FillRectangle(this.mouseHoverBackBrush, rectangle2); graphics.DrawRectangle(this.markBorderPen, rectangle2); graphics.DrawString(this.data_times[num].ToString(this.mouse_hover_time_formate, CultureInfo.InvariantCulture), this.Font, this.markTextBrush, rectangle2, HslHelper.StringFormatCenter); } } else { bool flag22 = num < this.data_customer.Count; if (flag22) { graphics.FillRectangle(this.mouseHoverBackBrush, rectangle2); graphics.DrawRectangle(this.markBorderPen, rectangle2); graphics.DrawString(this.data_customer[num], this.Font, this.markTextBrush, rectangle2, HslHelper.StringFormatCenter); } } } font.Dispose(); graphics.TranslateTransform((float)(-(float)actualLeftWidth), (float)(-(float)this.topHeadHeight)); } /// /// 新增一段背景标识,用于隔离显示报警区段,特殊信息区段的数据 /// /// 背景标识层 // Token: 0x06000394 RID: 916 RVA: 0x00028888 File Offset: 0x00026A88 public void AddMarkBackSection(HslMarkBackSection markBackSection) { this.markBackSections.Add(markBackSection); } /// /// 移除一个背景标识的内容,如果为null,则无效 /// /// 标记信息 // Token: 0x06000395 RID: 917 RVA: 0x00028898 File Offset: 0x00026A98 public void RemoveMarkBackSection(HslMarkBackSection markBackSection) { this.markBackSections.Remove(markBackSection); } /// /// 移除所有的前置的辅助标记曲线区间 /// // Token: 0x06000396 RID: 918 RVA: 0x000288A8 File Offset: 0x00026AA8 public void RemoveAllMarkBackSection() { this.markBackSections.Clear(); } /// /// 新增一段辅助标记区间的信息,将会绘制在背景图层。 /// /// 标记信息 // Token: 0x06000397 RID: 919 RVA: 0x000288B7 File Offset: 0x00026AB7 public void AddMarkForeSection(HslMarkForeSection markForeSection) { this.markForeSections.Add(markForeSection); } /// /// 移除一段辅助标记区间的信息,如果为null,则无效 /// /// 标记信息 // Token: 0x06000398 RID: 920 RVA: 0x000288C7 File Offset: 0x00026AC7 public void RemoveMarkForeSection(HslMarkForeSection markForeSection) { this.markForeSections.Remove(markForeSection); } /// /// 移除所有的前置的辅助标记曲线区间 /// // Token: 0x06000399 RID: 921 RVA: 0x000288D7 File Offset: 0x00026AD7 public void RemoveAllMarkForeSection() { this.markForeSections.Clear(); } /// /// 移除所有的因为鼠标手动选择的辅助标记曲线区间 /// // Token: 0x0600039A RID: 922 RVA: 0x000288E6 File Offset: 0x00026AE6 public void RemoveAllMarkMouseSection() { this.markForeSectionsTmp.Clear(); this.m_RowBetweenStart = -1; this.m_RowBetweenEnd = -1; this.m_RowBetweenHeight = -1; this.m_RowBetweenStartHeight = -1; this.HslInvalidate(); } /// /// 新增一段辅助标记的区间信息,将在鼠标光标移动的时候显示出数据信息,可用来标记一个产品的额外的信息内容,比如条码,生产信息 /// /// 额外的活动的内容 // Token: 0x0600039B RID: 923 RVA: 0x00028918 File Offset: 0x00026B18 public void AddMarkActiveSection(HslMarkForeSection markActiveSection) { this.markForeActiveSections.Add(markActiveSection); } // Token: 0x0600039C RID: 924 RVA: 0x00028928 File Offset: 0x00026B28 private void DrawMarkForeSection(Graphics g, HslMarkForeSection markForeSection, Font font, bool paintMain = false) { bool flag = markForeSection != null; if (flag) { float num; if (paintMain) { num = ((markForeSection.Height > 1f) ? markForeSection.Height : ((float)(base.Height - this.topHeadHeight - this.buttomHeight - 40) * this.data_ScaleY_Render * markForeSection.Height)); } else { num = ((markForeSection.Height > 1f) ? markForeSection.Height : ((float)(base.Height - this.topHeadHeight - this.buttomHeight - 40) * markForeSection.Height + 20f)); } float num2; if (paintMain) { num2 = ((markForeSection.StartHeight > 1f) ? markForeSection.StartHeight : ((float)(base.Height - this.topHeadHeight - this.buttomHeight - 40) * this.data_ScaleY_Render * markForeSection.StartHeight)); } else { num2 = ((markForeSection.StartHeight > 1f) ? markForeSection.StartHeight : ((float)(base.Height - this.topHeadHeight - this.buttomHeight - 40) * markForeSection.StartHeight + 20f)); } bool flag2 = markForeSection.StartIndex != -1 && markForeSection.EndIndex != -1 && markForeSection.EndIndex > markForeSection.StartIndex && num2 < num; if (flag2) { int num3 = Convert.ToInt32((float)markForeSection.StartIndex * this.data_ScaleX_Render); int num4 = Convert.ToInt32((float)markForeSection.EndIndex * this.data_ScaleX_Render); bool flag3 = markForeSection.StartIndex < this.data_count && markForeSection.EndIndex < this.data_count && markForeSection.StartIndex < this.data_times.Count && markForeSection.EndIndex < this.data_times.Count; if (flag3) { g.DrawLine(markForeSection.LinePen, new PointF((float)num3, num2), new PointF((float)num3, num + 30f)); g.DrawLine(markForeSection.LinePen, new PointF((float)num4, num2), new PointF((float)num4, num + 30f)); int num5 = markForeSection.IsRenderTimeText ? 20 : 0; int num6 = (num4 - num3 > 100) ? num5 : 110; int num7 = num4 - num3; g.DrawLine(markForeSection.LinePen, new PointF((float)(num3 - num6), num), new PointF((float)(num4 + num5), num)); g.DrawLines(markForeSection.LinePen, new PointF[] { new PointF((float)(num3 + 20), num + 10f), new PointF((float)num3, num), new PointF((float)(num3 + 20), num - 10f) }); g.DrawLines(markForeSection.LinePen, new PointF[] { new PointF((float)(num4 - 20), num - 10f), new PointF((float)num4, num), new PointF((float)(num4 - 20), num + 10f) }); TimeSpan timeSpan = this.data_times[markForeSection.EndIndex] - this.data_times[markForeSection.StartIndex]; string s = string.Empty; bool flag4 = timeSpan.TotalMinutes > 2.0; if (flag4) { s = timeSpan.TotalMinutes.ToString("F1") + " 分钟"; } else { bool flag5 = timeSpan.TotalSeconds > 1.0; if (flag5) { s = timeSpan.TotalSeconds.ToString("F1") + " 秒"; } else { s = ((int)timeSpan.TotalMilliseconds).ToString() + " 毫秒"; } } bool flag6 = num4 - num3 <= 100; if (flag6) { g.DrawString(s, font, markForeSection.FontBrush, new PointF((float)(num3 - 100), num - 17f)); } else { g.DrawString(s, font, markForeSection.FontBrush, new RectangleF((float)num3, num - (float)font.Height - 2f, (float)(num4 - num3), (float)font.Height), HslHelper.StringFormatCenter); } bool flag7 = !string.IsNullOrEmpty(markForeSection.MarkText); if (flag7) { g.DrawString(markForeSection.MarkText, font, markForeSection.FontBrush, new RectangleF((float)num3, num + 3f, (float)(num4 - num3), (float)font.Height), HslHelper.StringFormatCenter); } bool isRenderTimeText = markForeSection.IsRenderTimeText; if (isRenderTimeText) { g.DrawString("开始 " + this.data_times[markForeSection.StartIndex].ToString(this.mouse_hover_time_formate), font, markForeSection.FontBrush, new PointF((float)(num4 + 5), num - 17f)); g.DrawString("结束 " + this.data_times[markForeSection.EndIndex].ToString(this.mouse_hover_time_formate), font, markForeSection.FontBrush, new PointF((float)(num4 + 5), num + 2f)); } } } } } /// /// 将当前的图形曲线保存为图片内容,可用于存储本地的文件,或是打印到纸张,默认大小为控件的大小 /// /// 可以选择是否输出当前的界面内容还是全部图像,默认为全部界面 /// 图片内容 // Token: 0x0600039D RID: 925 RVA: 0x00028E5C File Offset: 0x0002705C public Bitmap SaveToBitmap(bool isCurrentRegion = false) { int actualLeftWidth = this.GetActualLeftWidth(); bool flag = this.isShowTextInfomation; Bitmap result; if (flag) { Bitmap bitmap = new Bitmap(base.Width, base.Height); Graphics graphics = Graphics.FromImage(bitmap); graphics.SmoothingMode = SmoothingMode.AntiAlias; graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; graphics.Clear(this.backColor); this.PaintMain(graphics, base.Width, base.Height); graphics.TranslateTransform((float)actualLeftWidth, (float)this.topHeadHeight); this.PaintFromString(graphics, this.Text); graphics.TranslateTransform((float)(-(float)actualLeftWidth), (float)(-(float)this.topHeadHeight)); graphics.Dispose(); result = bitmap; } else { int num = (int)((float)this.data_count * this.data_ScaleX_Render) + this.rightRemainWidth; bool flag2 = num < base.Width - actualLeftWidth - this.rightWidth; if (flag2) { num = base.Width - actualLeftWidth - this.rightWidth; } int num2 = base.Height - this.topHeadHeight - this.buttomHeight; Bitmap bitmap2 = new Bitmap(isCurrentRegion ? base.Width : (num + actualLeftWidth + this.rightWidth), base.Height); Graphics graphics2 = Graphics.FromImage(bitmap2); graphics2.SmoothingMode = SmoothingMode.AntiAlias; graphics2.TextRenderingHint = TextRenderingHint.ClearTypeGridFit; graphics2.Clear(this.backColor); this.PaintMain(graphics2, bitmap2.Width, bitmap2.Height); if (isCurrentRegion) { this.PictureBox3_Paint(this, new PaintEventArgs(graphics2, new Rectangle(0, 0, bitmap2.Width, bitmap2.Height))); } graphics2.Dispose(); result = bitmap2; } return result; } /// /// 清理所有正在使用的资源。 /// /// 如果应释放托管资源,为 true;否则为 false。 // Token: 0x0600039E RID: 926 RVA: 0x00029000 File Offset: 0x00027200 protected override void Dispose(bool disposing) { bool flag = disposing && this.components != null; if (flag) { this.components.Dispose(); } base.Dispose(disposing); } /// /// 设计器支持所需的方法 - 不要修改 /// 使用代码编辑器修改此方法的内容。 /// // Token: 0x0600039F RID: 927 RVA: 0x00029038 File Offset: 0x00027238 private void InitializeComponent() { base.SuspendLayout(); base.AutoScaleMode = AutoScaleMode.None; this.BackColor = Color.FromArgb(46, 46, 46); base.Name = "HslCurveHistory"; base.Size = new Size(852, 478); base.ResumeLayout(false); } // Token: 0x04000167 RID: 359 private int paintCount = 0; // Token: 0x0400016F RID: 367 private List auxiliary_Labels; // Token: 0x04000170 RID: 368 private List hslMarkLines; // Token: 0x04000171 RID: 369 private List hslMarkTexts; // Token: 0x04000172 RID: 370 private List hslMarkImages; // Token: 0x04000173 RID: 371 private Dictionary data_dicts = null; // Token: 0x04000174 RID: 372 private List data_lists = null; // Token: 0x04000175 RID: 373 private List data_times = null; // Token: 0x04000176 RID: 374 private List data_customer = null; // Token: 0x04000177 RID: 375 private List auxiliary_lines; // Token: 0x04000178 RID: 376 private float data_ScaleX_Render = 1f; // Token: 0x04000179 RID: 377 private float[] scale_x_options = new float[] { 0.0625f, 0.125f, 0.25f, 0.5f, 1f, 2f, 4f, 8f, 16f, 32f }; // Token: 0x0400017A RID: 378 private int scale_x_index = 4; // Token: 0x0400017B RID: 379 private float data_ScaleY_Render = 1f; // Token: 0x0400017C RID: 380 private float[] scale_y_options = new float[] { 1f, 2f, 4f, 8f, 16f, 32f }; // Token: 0x0400017D RID: 381 private int scale_y_index = 0; // Token: 0x0400017E RID: 382 private int data_count = 0; // Token: 0x0400017F RID: 383 private string data_time_formate = "yyyy-MM-dd HH:mm:ss"; // Token: 0x04000180 RID: 384 private string mouse_hover_time_formate = "HH:mm:ss"; // Token: 0x04000181 RID: 385 private Point mouse_scroll_location = new Point(-1, -1); // Token: 0x04000182 RID: 386 private bool is_mouse_click_scroll = false; // Token: 0x04000183 RID: 387 private bool is_mouse_on_picture = false; // Token: 0x04000184 RID: 388 private Point mouse_location = new Point(-1, -1); // Token: 0x04000185 RID: 389 private int m_RowBetweenStart = -1; // Token: 0x04000186 RID: 390 private int m_RowBetweenEnd = -1; // Token: 0x04000187 RID: 391 private int m_RowBetweenStartHeight = -1; // Token: 0x04000188 RID: 392 private int m_RowBetweenHeight = -1; // Token: 0x04000189 RID: 393 private bool m_IsMouseLeftDown = false; // Token: 0x0400018A RID: 394 private bool m_IsMouseMiddleDown = false; // Token: 0x0400018B RID: 395 private Point mouse_right_location = new Point(-1, -1); // Token: 0x0400018C RID: 396 private List markBackSections = null; // Token: 0x0400018D RID: 397 private List markForeSections = null; // Token: 0x0400018E RID: 398 private List markForeSectionsTmp = null; // Token: 0x0400018F RID: 399 private List markForeActiveSections = null; // Token: 0x04000190 RID: 400 private Color backColor = Color.White; // Token: 0x04000191 RID: 401 private Random random = null; // Token: 0x04000192 RID: 402 private Color coordinateColor = Color.LightGray; // Token: 0x04000193 RID: 403 private Brush coordinateBrush = new SolidBrush(Color.LightGray); // Token: 0x04000194 RID: 404 private Pen coordinatePen = new Pen(Color.LightGray); // Token: 0x04000195 RID: 405 private Color coordinateDashColor = Color.FromArgb(72, 72, 72); // Token: 0x04000196 RID: 406 private Pen coordinateDashPen = null; // Token: 0x04000197 RID: 407 private Color markLineColor = Color.Cyan; // Token: 0x04000198 RID: 408 private Pen markLinePen = new Pen(Color.Cyan); // Token: 0x04000199 RID: 409 private Color markTextColor = Color.Yellow; // Token: 0x0400019A RID: 410 private Brush markTextBrush = new SolidBrush(Color.Yellow); // Token: 0x0400019B RID: 411 private Color moveLineColor = Color.White; // Token: 0x0400019C RID: 412 private Pen moveLinePen = new Pen(Color.White); // Token: 0x0400019D RID: 413 private int data_tip_width = -1; // Token: 0x0400019E RID: 414 private int curveNameWidth = 150; // Token: 0x0400019F RID: 415 private int value_IntervalAbscissaText = 200; // Token: 0x040001A0 RID: 416 private Brush mouseHoverBackBrush = new SolidBrush(Color.FromArgb(220, Color.FromArgb(52, 52, 52))); // Token: 0x040001A1 RID: 417 private Color hoverBackColor = Color.FromArgb(52, 52, 52); // Token: 0x040001A2 RID: 418 private Color markBorderColor = Color.HotPink; // Token: 0x040001A3 RID: 419 private Pen markBorderPen = new Pen(Color.HotPink); // Token: 0x040001A4 RID: 420 private ReferenceAxis referenceAxisLeft; // Token: 0x040001A5 RID: 421 private ReferenceAxis referenceAxisRight; // Token: 0x040001A6 RID: 422 private bool isOtherAxisHide = false; // Token: 0x040001A7 RID: 423 private int leftWidth = 50; // Token: 0x040001A8 RID: 424 private int rightWidth = 50; // Token: 0x040001A9 RID: 425 private int mouseHoverTimeWidth = 100; // Token: 0x040001AA RID: 426 private int topHeadHeight = 30; // Token: 0x040001AB RID: 427 private int buttomHeight = 20; // Token: 0x040001AC RID: 428 private int scrollHeight = 15; // Token: 0x040001AD RID: 429 private int scrollX = 0; // Token: 0x040001AE RID: 430 private int scrollMaxX = 0; // Token: 0x040001AF RID: 431 private int scrollWidth = 10; /// /// 横向绘制偏移的X坐标信息 /// // Token: 0x040001B0 RID: 432 private int offsetPaintScrollX = 0; /// /// 横向绘制偏移的Y坐标信息 /// // Token: 0x040001B1 RID: 433 private int offsetPaintScrollY = 0; // Token: 0x040001B2 RID: 434 private Rectangle scrollRectage = new Rectangle(0, 0, 0, 0); // Token: 0x040001B3 RID: 435 private Rectangle scrollRectageBack = new Rectangle(0, 0, 0, 0); // Token: 0x040001B4 RID: 436 private Color scrollColor = Color.DimGray; // Token: 0x040001B5 RID: 437 private ScaleMode scaleMode = ScaleMode.OnlyX; // Token: 0x040001B6 RID: 438 private bool renderInvertedTriangle = true; // Token: 0x040001B7 RID: 439 private bool renderScaleInfo = true; // Token: 0x040001B8 RID: 440 private int rightRemainWidth = 200; // Token: 0x040001B9 RID: 441 private bool markLineVisible = true; // Token: 0x040001BA RID: 442 private int value_Segment = 5; // Token: 0x040001BB RID: 443 private int pointsRadius = -1; // Token: 0x040001BC RID: 444 private bool isShowTextInfomation = true; // Token: 0x040001BD RID: 445 private bool isRederRightCoordinate = true; // Token: 0x040001BE RID: 446 private bool isAllowSelectSection = true; // Token: 0x040001BF RID: 447 private bool isRenderTimeData = false; // Token: 0x040001C0 RID: 448 private bool isMouseFreeze = false; // Token: 0x040001C1 RID: 449 private bool isAoordinateRoundInt = false; // Token: 0x040001C2 RID: 450 private HslCurveHistory syncHslCurveHistory; // Token: 0x040001C3 RID: 451 private ReferenceAxisCollection referenceAxes; // Token: 0x040001C4 RID: 452 private bool isRenderYTip = true; /// /// 必需的设计器变量。 /// // Token: 0x040001C5 RID: 453 private IContainer components = null; /// /// 基于时间的曲线双击的委托方法 /// /// 曲线控件信息 /// 数据的索引 /// 时间信息 // Token: 0x020000F1 RID: 241 // (Invoke) Token: 0x06000F68 RID: 3944 public delegate void CurveDoubleClick(HslCurveHistory hslCurve, int index, DateTime dateTime); /// /// 基于用户自定义的字符串的曲线双击的委托方法 /// /// 曲线控件信息 /// 数据的索引 /// 时间信息 // Token: 0x020000F2 RID: 242 // (Invoke) Token: 0x06000F6C RID: 3948 public delegate void CurveCustomerDoubleClick(HslCurveHistory hslCurve, int index, string customer); /// /// 当鼠标在曲线上移动的时候触发的委托方法 /// /// 曲线控件信息 /// 横坐标x /// 横坐标y // Token: 0x020000F3 RID: 243 // (Invoke) Token: 0x06000F70 RID: 3952 public delegate void CurveMouseMove(HslCurveHistory hslCurve, int x, int y); /// /// 曲线的区间的委托签名 /// /// 曲线控件信息 /// 传出 // Token: 0x020000F4 RID: 244 // (Invoke) Token: 0x06000F74 RID: 3956 public delegate void CurveRangeSelect(HslCurveHistory hslCurve, HslMarkForeSection markForeSection); /// /// 曲线的放大缩小倍数变化的委托签名 /// /// 曲线控件信息 /// 缩放信息 /// 显示偏移信息 /// 方法缩小系数 // Token: 0x020000F5 RID: 245 // (Invoke) Token: 0x06000F78 RID: 3960 public delegate void CurveScollScaleChanged(HslCurveHistory hslCurve, int scrollX, float scale, int offsetPaintScrollX); } }