You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lj_plc/Controls/Mesnac.Controls.ChemicalWei.../HslCurve/HslCurveHelper.cs

240 lines
14 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
namespace Mesnac.Controls.ChemicalWeighing.HslCurve
{
/// <summary>
/// 曲线功能相关的一些静态的辅助绘画方法。
/// </summary>
// Token: 0x02000021 RID: 33
public class HslCurveHelper
{
/// <summary>
/// 将文本绘制到指定的位置
/// </summary>
/// <param name="g"></param>
/// <param name="text"></param>
/// <param name="center"></param>
/// <param name="font"></param>
/// <param name="brush"></param>
/// <param name="markTextPosition"></param>
// Token: 0x060002DA RID: 730 RVA: 0x00021A1C File Offset: 0x0001FC1C
public static void DrawTextByPoint(Graphics g, string text, PointF center, Font font, Brush brush, MarkTextPositionStyle markTextPosition, int markTextOffect)
{
bool flag = !string.IsNullOrEmpty(text);
if (flag)
{
switch (markTextPosition)
{
case MarkTextPositionStyle.Up:
g.DrawString(text, font, brush, new RectangleF(center.X - 100f, center.Y - (float)font.Height - (float)markTextOffect, 200f, (float)(font.Height + 2)), HslHelper.StringFormatCenter);
break;
case MarkTextPositionStyle.Right:
g.DrawString(text, font, brush, new RectangleF(center.X + (float)markTextOffect, center.Y - (float)font.Height - (float)markTextOffect, 100f, (float)(font.Height + markTextOffect)), HslHelper.StringFormatLeft);
break;
case MarkTextPositionStyle.Down:
g.DrawString(text, font, brush, new RectangleF(center.X - 100f, center.Y + (float)markTextOffect, 200f, (float)(font.Height + 2)), HslHelper.StringFormatCenter);
break;
case MarkTextPositionStyle.Left:
g.DrawString(text, font, brush, new RectangleF(center.X - 100f, center.Y - (float)font.Height - (float)markTextOffect, (float)(100 - markTextOffect), (float)(font.Height + markTextOffect)), HslHelper.StringFormatRight);
break;
case MarkTextPositionStyle.Center:
g.DrawString(text, font, brush, new RectangleF(center.X - 100f, center.Y - (float)font.Height, 200f, (float)(font.Height * 2)), HslHelper.StringFormatCenter);
break;
}
}
}
/// <summary>
/// 绘制<see cref="T:HslControls.HslMarkText" /> 类型的标记数据到曲线图形上去
/// </summary>
/// <param name="g">会话资源</param>
/// <param name="markText">标记信息</param>
/// <param name="center">中心点</param>
/// <param name="font">字体信息</param>
/// <param name="markTextPosition">绘制的文本放向</param>
// Token: 0x060002DB RID: 731 RVA: 0x00021BBC File Offset: 0x0001FDBC
public static void DrawHslMarkTextPoint(Graphics g, HslMarkText markText, PointF center, Font font, MarkTextPositionStyle markTextPosition)
{
bool flag = markText == null;
if (!flag)
{
g.FillEllipse(markText.CircleBrush, new RectangleF(center.X - 3f, center.Y - 3f, 6f, 6f));
bool flag2 = !string.IsNullOrEmpty(markText.MarkText);
if (flag2)
{
HslCurveHelper.DrawTextByPoint(g, markText.MarkText, center, font, markText.TextBrush, markTextPosition, markText.MarkTextOffect);
}
bool flag3 = markText.MarkImage != null;
if (flag3)
{
switch (markTextPosition)
{
case MarkTextPositionStyle.Up:
g.DrawImage(markText.MarkImage, new PointF(center.X - (float)(markText.MarkImage.Width / 2), center.Y - (float)markText.MarkImage.Height - (float)markText.MarkTextOffect));
break;
case MarkTextPositionStyle.Right:
g.DrawImage(markText.MarkImage, new PointF(center.X + (float)markText.MarkTextOffect, center.Y - (float)markText.MarkImage.Height - (float)markText.MarkTextOffect));
break;
case MarkTextPositionStyle.Down:
g.DrawImage(markText.MarkImage, new PointF(center.X - (float)(markText.MarkImage.Width / 2), center.Y + (float)markText.MarkTextOffect));
break;
case MarkTextPositionStyle.Left:
g.DrawImage(markText.MarkImage, new PointF(center.X - (float)markText.MarkImage.Width - (float)markText.MarkTextOffect, center.Y - (float)markText.MarkImage.Height - (float)markText.MarkTextOffect));
break;
case MarkTextPositionStyle.Center:
g.DrawImage(markText.MarkImage, new PointF(center.X - (float)(markText.MarkImage.Width / 2), center.Y - (float)(markText.MarkImage.Height / 2)));
break;
}
}
}
}
/// <summary>
/// 核心绘制曲线的方法,根据曲线的基本样式信息,所有的点的情况,点的圆点信息
/// </summary>
/// <param name="g">绘图上下文</param>
/// <param name="line">曲线的基本样式信息</param>
/// <param name="listPoints">所有的点的信息</param>
/// <param name="pointsRadius">如果点位想要突出显示就设置大于0</param>
/// <param name="referenceY">基准的Y点位信息</param>
// Token: 0x060002DC RID: 732 RVA: 0x00021DCC File Offset: 0x0001FFCC
public static void DrawLineCore(Graphics g, HslCurveItem line, List<PointF> listPoints, int pointsRadius, float referenceY = -1f)
{
bool flag = listPoints.Count <= 1;
if (!flag)
{
using (Pen pen = new Pen(line.LineColor, line.LineThickness))
{
bool flag2 = line.Style == CurveStyle.LineSegment;
if (flag2)
{
g.DrawLines(pen, listPoints.ToArray());
}
else
{
bool flag3 = line.Style == CurveStyle.Curve;
if (flag3)
{
g.DrawCurve(pen, listPoints.ToArray());
}
else
{
bool flag4 = line.Style == CurveStyle.LineDot;
if (flag4)
{
pen.DashStyle = DashStyle.Dot;
g.DrawLines(pen, listPoints.ToArray());
}
else
{
bool flag5 = line.Style == CurveStyle.CurveDot;
if (flag5)
{
pen.DashStyle = DashStyle.Dot;
g.DrawCurve(pen, listPoints.ToArray());
}
else
{
bool flag6 = line.Style == CurveStyle.LineDash;
if (flag6)
{
pen.DashStyle = DashStyle.Dash;
g.DrawLines(pen, listPoints.ToArray());
}
else
{
bool flag7 = line.Style == CurveStyle.CurveDash;
if (flag7)
{
pen.DashStyle = DashStyle.Dash;
g.DrawCurve(pen, listPoints.ToArray());
}
else
{
bool flag8 = line.Style == CurveStyle.LineLongDath;
if (flag8)
{
pen.DashStyle = DashStyle.Custom;
pen.DashPattern = new float[]
{
5f,
5f
};
g.DrawLines(pen, listPoints.ToArray());
}
else
{
bool flag9 = line.Style == CurveStyle.CurveLongDath;
if (flag9)
{
pen.DashStyle = DashStyle.Custom;
pen.DashPattern = new float[]
{
5f,
5f
};
g.DrawCurve(pen, listPoints.ToArray());
}
else
{
bool flag10 = line.Style == CurveStyle.Section;
if (flag10)
{
g.DrawCurve(pen, listPoints.ToArray());
bool flag11 = listPoints.Count > 0;
if (flag11)
{
GraphicsPath graphicsPath = new GraphicsPath();
graphicsPath.AddCurve(listPoints.ToArray());
graphicsPath.AddLines(new PointF[]
{
listPoints[listPoints.Count - 1],
new PointF(listPoints[listPoints.Count - 1].X, referenceY),
new PointF(listPoints[0].X, referenceY),
new PointF(listPoints[0].X, listPoints[0].Y)
});
using (Brush brush = new SolidBrush(Color.FromArgb(64, pen.Color)))
{
g.FillPath(brush, graphicsPath);
}
}
}
else
{
for (int i = 0; i < listPoints.Count - 1; i++)
{
PointF pointF = new PointF(listPoints[i + 1].X, listPoints[i].Y);
g.DrawLine(pen, listPoints[i], pointF);
bool flag12 = line.Style == CurveStyle.StepLine;
if (flag12)
{
g.DrawLine(pen, pointF, listPoints[i + 1]);
}
}
}
}
}
}
}
}
}
}
}
}
bool flag13 = pointsRadius > 0;
if (flag13)
{
using (Brush brush2 = new SolidBrush(line.LineColor))
{
for (int j = 0; j < listPoints.Count; j++)
{
g.FillEllipse(brush2, listPoints[j].X - (float)pointsRadius, listPoints[j].Y - (float)pointsRadius, (float)(pointsRadius * 2), (float)(pointsRadius * 2));
}
}
}
}
}
}
}