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/HslHelper.cs

1264 lines
57 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;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text.RegularExpressions;
namespace Mesnac.Controls.ChemicalWeighing.HslCurve
{
/// <summary>
/// 整个组件的代码辅助工具,提供了一个基础的类库方法
/// </summary>
// Token: 0x02000034 RID: 52
public class HslHelper
{
// Token: 0x060004DF RID: 1247 RVA: 0x00032DB4 File Offset: 0x00030FB4
static HslHelper()
{
HslHelper.StringFormatCenter = new StringFormat();
HslHelper.StringFormatCenter.Alignment = StringAlignment.Center;
HslHelper.StringFormatCenter.LineAlignment = StringAlignment.Center;
HslHelper.StringFormatLeft = new StringFormat();
HslHelper.StringFormatLeft.LineAlignment = StringAlignment.Center;
HslHelper.StringFormatLeft.Alignment = StringAlignment.Near;
HslHelper.StringFormatRight = new StringFormat();
HslHelper.StringFormatRight.LineAlignment = StringAlignment.Center;
HslHelper.StringFormatRight.Alignment = StringAlignment.Far;
HslHelper.StringFormatTopCenter = new StringFormat();
HslHelper.StringFormatTopCenter.Alignment = StringAlignment.Center;
HslHelper.StringFormatTopCenter.LineAlignment = StringAlignment.Near;
}
/// <summary>
/// 返回中间范围值数据,如果大于最大值,则返回最大值,如果小于最小值,则返回最小值
/// </summary>
/// <param name="min">最小值</param>
/// <param name="value">实际值</param>
/// <param name="max">最大值</param>
/// <returns>中间值信息</returns>
// Token: 0x060004E0 RID: 1248 RVA: 0x00032E5C File Offset: 0x0003105C
public static int Middle(int min, int value, int max)
{
bool flag = value > max;
int result;
if (flag)
{
result = max;
}
else
{
bool flag2 = value < min;
if (flag2)
{
result = min;
}
else
{
result = value;
}
}
return result;
}
/// <summary>
/// 从一个矩形的图形中获取菱形的坐标数组
/// </summary>
/// <param name="rect">矩形</param>
/// <returns>数组结果</returns>
// Token: 0x060004E1 RID: 1249 RVA: 0x00032E88 File Offset: 0x00031088
public static Point[] GetRhombusFromRectangle(Rectangle rect)
{
return new Point[]
{
new Point(rect.X, rect.Y + rect.Height / 2),
new Point(rect.X + rect.Width / 2, rect.Y + rect.Height - 1),
new Point(rect.X + rect.Width - 1, rect.Y + rect.Height / 2),
new Point(rect.X + rect.Width / 2, rect.Y),
new Point(rect.X, rect.Y + rect.Height / 2)
};
}
/// <summary>
/// 计算绘图时的相对偏移值
/// </summary>
/// <param name="max">0-100分的最大值就是指准备绘制的最大值</param>
/// <param name="min">0-100分的最小值就是指准备绘制的最小值</param>
/// <param name="height">实际绘图区域的高度</param>
/// <param name="value">需要绘制数据的当前值</param>
/// <returns>相对于0的位置还需要增加上面的偏值</returns>
// Token: 0x060004E2 RID: 1250 RVA: 0x00032F68 File Offset: 0x00031168
public static float ComputePaintLocationY(int max, int min, int height, int value)
{
bool flag = (float)(max - min) == 0f;
float result;
if (flag)
{
result = (float)height;
}
else
{
result = (float)height - (float)(value - min) * 1f / (float)(max - min) * (float)height;
}
return result;
}
/// <summary>
/// 计算绘图Y轴时的相对偏移值
/// </summary>
/// <param name="max">0-100分的最大值就是指准备绘制的最大值</param>
/// <param name="min">0-100分的最小值就是指准备绘制的最小值</param>
/// <param name="height">实际绘图区域的高度</param>
/// <param name="value">需要绘制数据的当前值</param>
/// <returns>相对于0的位置还需要增加上面的偏值</returns>
// Token: 0x060004E3 RID: 1251 RVA: 0x00032FA8 File Offset: 0x000311A8
public static float ComputePaintLocationY(float max, float min, float height, float value)
{
bool flag = max - min == 0f;
float result;
if (flag)
{
result = height;
}
else
{
float num = max - min;
bool flag2 = num == 0f;
if (flag2)
{
num = 1f;
}
result = height - (value - min) / num * height;
}
return result;
}
/// <summary>
/// 计算绘图X轴时的相对偏移值
/// </summary>
/// <param name="max">0-100分的最大值就是指准备绘制的最大值</param>
/// <param name="min">0-100分的最小值就是指准备绘制的最小值</param>
/// <param name="width">实际绘图区域的宽度</param>
/// <param name="value">需要绘制数据的当前值</param>
/// <returns>相对于0的位置还需要增加上面的偏值</returns>
// Token: 0x060004E4 RID: 1252 RVA: 0x00032FF0 File Offset: 0x000311F0
public static float ComputePaintLocationX(float max, float min, float width, float value)
{
bool flag = max - min == 0f;
float result;
if (flag)
{
result = width;
}
else
{
float num = max - min;
bool flag2 = num == 0f;
if (flag2)
{
num = 1f;
}
result = (value - min) / num * width;
}
return result;
}
/// <summary>
/// 根据绘制的值计算原始的值信息
/// </summary>
/// <param name="max">0-100分的最大值就是指准备绘制的最大值</param>
/// <param name="min">0-100分的最小值就是指准备绘制的最小值</param>
/// <param name="height">实际绘图区域的高度</param>
/// <param name="paint">实际绘制的位置信息</param>
/// <returns>实际的值信息</returns>
// Token: 0x060004E5 RID: 1253 RVA: 0x00033034 File Offset: 0x00031234
public static float ComputeValueFromPaintLocationY(float max, float min, float height, float paint)
{
bool flag = max - min == 0f;
float result;
if (flag)
{
result = max;
}
else
{
float num = max - min;
bool flag2 = num == 0f;
if (flag2)
{
num = 1f;
}
result = (height - paint) * num / height + min;
}
return result;
}
/// <summary>
/// 计算绘图时的相对偏移值
/// </summary>
/// <param name="referenceAxis">坐标轴信息</param>
/// <param name="height">实际绘图区域的高度</param>
/// <param name="value">需要绘制数据的当前值</param>
/// <returns>相对于0的位置还需要增加上面的偏值</returns>
// Token: 0x060004E6 RID: 1254 RVA: 0x0003307C File Offset: 0x0003127C
public static float ComputePaintLocationY(ReferenceAxis referenceAxis, float height, float value)
{
return HslHelper.ComputePaintLocationY(referenceAxis.Max, referenceAxis.Min, height, value);
}
/// <summary>
/// 绘制坐标系中的刻度线
/// </summary>
/// <param name="g">绘图对象</param>
/// <param name="penLine">画坐标轴的画笔</param>
/// <param name="penDash"></param>
/// <param name="font"></param>
/// <param name="brush"></param>
/// <param name="sf"></param>
/// <param name="degree"></param>
/// <param name="max"></param>
/// <param name="min"></param>
/// <param name="width"></param>
/// <param name="height"></param>
/// <param name="left"></param>
/// <param name="right"></param>
/// <param name="up"></param>
/// <param name="down"></param>
// Token: 0x060004E7 RID: 1255 RVA: 0x000330A4 File Offset: 0x000312A4
public static void PaintCoordinateDivide(Graphics g, System.Drawing.Pen penLine, System.Drawing.Pen penDash, Font font, System.Drawing.Brush brush, StringFormat sf, int degree, int max, int min, int width, int height, int left = 60, int right = 8, int up = 8, int down = 8)
{
for (int i = 0; i <= degree; i++)
{
int value = (max - min) * i / degree + min;
int num = (int)HslHelper.ComputePaintLocationY(max, min, height - up - down, value) + up + 1;
g.DrawLine(penLine, left - 1, num, left - 4, num);
bool flag = i != 0;
if (flag)
{
g.DrawLine(penDash, left, num, width - right, num);
}
g.DrawString(value.ToString(), font, brush, new Rectangle(-5, num - font.Height / 2, left, font.Height), sf);
}
}
/// <summary>
/// 根据指定的方向绘制一个箭头
/// </summary>
/// <param name="g"></param>
/// <param name="brush"></param>
/// <param name="point"></param>
/// <param name="size"></param>
/// <param name="direction"></param>
// Token: 0x060004E8 RID: 1256 RVA: 0x00033158 File Offset: 0x00031358
public static void PaintTriangle(Graphics g, System.Drawing.Brush brush, Point point, int size, GraphDirection direction)
{
Point[] array = new Point[4];
bool flag = direction == GraphDirection.Leftward;
if (flag)
{
array[0] = new Point(point.X, point.Y - size);
array[1] = new Point(point.X, point.Y + size);
array[2] = new Point(point.X - 2 * size, point.Y);
}
else
{
bool flag2 = direction == GraphDirection.Rightward;
if (flag2)
{
array[0] = new Point(point.X, point.Y - size);
array[1] = new Point(point.X, point.Y + size);
array[2] = new Point(point.X + 2 * size, point.Y);
}
else
{
bool flag3 = direction == GraphDirection.Upward;
if (flag3)
{
array[0] = new Point(point.X - size, point.Y);
array[1] = new Point(point.X + size, point.Y);
array[2] = new Point(point.X, point.Y - 2 * size);
}
else
{
array[0] = new Point(point.X - size, point.Y);
array[1] = new Point(point.X + size, point.Y);
array[2] = new Point(point.X, point.Y + 2 * size);
}
}
}
array[3] = array[0];
g.FillPolygon(brush, array);
}
/// <summary>
/// 绘制向左或是向右的箭头,例如 &lt;&lt; 或是 &gt;&gt;
/// </summary>
/// <param name="g">画刷资源</param>
/// <param name="pen">画笔资源</param>
/// <param name="rectangle">绘制的矩形</param>
/// <param name="direction">方向信息</param>
// Token: 0x060004E9 RID: 1257 RVA: 0x0003330C File Offset: 0x0003150C
public static void DrawLeftRight(Graphics g, System.Drawing.Pen pen, Rectangle rectangle, GraphDirection direction)
{
bool flag = direction == GraphDirection.Leftward;
if (flag)
{
g.DrawLines(pen, new Point[]
{
new Point(rectangle.X + rectangle.Width / 2, rectangle.Y),
new Point(rectangle.X, rectangle.Y + rectangle.Height / 2),
new Point(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height)
});
g.DrawLines(pen, new Point[]
{
new Point(rectangle.X + rectangle.Width, rectangle.Y),
new Point(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height / 2),
new Point(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height)
});
}
else
{
bool flag2 = direction == GraphDirection.Rightward;
if (flag2)
{
g.DrawLines(pen, new Point[]
{
new Point(rectangle.X, rectangle.Y),
new Point(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height / 2),
new Point(rectangle.X, rectangle.Y + rectangle.Height)
});
g.DrawLines(pen, new Point[]
{
new Point(rectangle.X + rectangle.Width / 2, rectangle.Y),
new Point(rectangle.X + rectangle.Width, rectangle.Y + rectangle.Height / 2),
new Point(rectangle.X + rectangle.Width / 2, rectangle.Y + rectangle.Height)
});
}
}
}
/// <summary>
/// 根据指定的方向绘制一个箭头
/// </summary>
/// <param name="g"></param>
/// <param name="brush"></param>
/// <param name="point"></param>
/// <param name="size"></param>
/// <param name="direction"></param>
// Token: 0x060004EA RID: 1258 RVA: 0x00033548 File Offset: 0x00031748
public static void PaintTriangle(Graphics g, System.Drawing.Brush brush, PointF point, int size, GraphDirection direction)
{
PointF[] array = new PointF[4];
bool flag = direction == GraphDirection.Leftward;
if (flag)
{
array[0] = new PointF(point.X, point.Y - (float)size);
array[1] = new PointF(point.X, point.Y + (float)size);
array[2] = new PointF(point.X - (float)(2 * size), point.Y);
}
else
{
bool flag2 = direction == GraphDirection.Rightward;
if (flag2)
{
array[0] = new PointF(point.X, point.Y - (float)size);
array[1] = new PointF(point.X, point.Y + (float)size);
array[2] = new PointF(point.X + (float)(2 * size), point.Y);
}
else
{
bool flag3 = direction == GraphDirection.Upward;
if (flag3)
{
array[0] = new PointF(point.X - (float)size, point.Y);
array[1] = new PointF(point.X + (float)size, point.Y);
array[2] = new PointF(point.X, point.Y - (float)(2 * size));
}
else
{
array[0] = new PointF(point.X - (float)size, point.Y);
array[1] = new PointF(point.X + (float)size, point.Y);
array[2] = new PointF(point.X, point.Y + (float)(2 * size));
}
}
}
array[3] = array[0];
g.FillPolygon(brush, array);
}
/// <summary>
/// 一个通用的数组新增个数方法,会自动判断越界情况,越界的情况下,会自动的截断或是填充 -&gt;
/// A common array of new methods, will automatically determine the cross-border situation, in the case of cross-border, will be automatically truncated or filled
/// </summary>
/// <typeparam name="T">数据类型</typeparam>
/// <param name="array">原数据</param>
/// <param name="data">等待新增的数据</param>
/// <param name="max">原数据的最大值</param>
// Token: 0x060004EB RID: 1259 RVA: 0x00033708 File Offset: 0x00031908
public static void AddArrayData<T>(ref T[] array, T[] data, int max)
{
bool flag = data == null;
if (!flag)
{
bool flag2 = data.Length == 0;
if (!flag2)
{
bool flag3 = array.Length == max;
if (flag3)
{
Array.Copy(array, data.Length, array, 0, array.Length - data.Length);
Array.Copy(data, 0, array, array.Length - data.Length, data.Length);
}
else
{
bool flag4 = array.Length + data.Length > max;
if (flag4)
{
T[] array2 = new T[max];
for (int i = 0; i < max - data.Length; i++)
{
array2[i] = array[i + (array.Length - max + data.Length)];
}
for (int j = 0; j < data.Length; j++)
{
array2[array2.Length - data.Length + j] = data[j];
}
array = array2;
}
else
{
T[] array3 = new T[array.Length + data.Length];
for (int k = 0; k < array.Length; k++)
{
array3[k] = array[k];
}
for (int l = 0; l < data.Length; l++)
{
array3[array3.Length - data.Length + l] = data[l];
}
array = array3;
}
}
}
}
}
/// <summary>
/// 尺寸转换,计算旋转后的尺寸。
/// </summary>
/// <param name="size"></param>
/// <param name="angle"></param>
/// <returns></returns>
// Token: 0x060004EC RID: 1260 RVA: 0x00033874 File Offset: 0x00031A74
public static SizeF ConvertSize(SizeF size, float angle)
{
System.Drawing.Drawing2D.Matrix matrix = new System.Drawing.Drawing2D.Matrix();
matrix.Rotate(angle);
PointF[] array = new PointF[4];
array[0].X = -size.Width / 2f;
array[0].Y = -size.Height / 2f;
array[1].X = -size.Width / 2f;
array[1].Y = size.Height / 2f;
array[2].X = size.Width / 2f;
array[2].Y = size.Height / 2f;
array[3].X = size.Width / 2f;
array[3].Y = -size.Height / 2f;
matrix.TransformPoints(array);
float num = float.MaxValue;
float num2 = float.MinValue;
float num3 = float.MaxValue;
float num4 = float.MinValue;
foreach (PointF pointF in array)
{
bool flag = pointF.X < num;
if (flag)
{
num = pointF.X;
}
bool flag2 = pointF.X > num2;
if (flag2)
{
num2 = pointF.X;
}
bool flag3 = pointF.Y < num3;
if (flag3)
{
num3 = pointF.Y;
}
bool flag4 = pointF.Y > num4;
if (flag4)
{
num4 = pointF.Y;
}
}
SizeF result = new SizeF(num2 - num, num4 - num3);
return result;
}
/// <summary>
/// 绘制旋转文本
/// </summary>
/// <param name="g"></param>
/// <param name="s"></param>
/// <param name="font"></param>
/// <param name="brush"></param>
/// <param name="point"></param>
/// <param name="format"></param>
/// <param name="angle"></param>
// Token: 0x060004ED RID: 1261 RVA: 0x00033A2C File Offset: 0x00031C2C
public static void DrawString(Graphics g, string s, Font font, System.Drawing.Brush brush, PointF point, StringFormat format, float angle)
{
System.Drawing.Drawing2D.Matrix transform = g.Transform;
System.Drawing.Drawing2D.Matrix transform2 = g.Transform;
transform2.RotateAt(angle, point);
g.Transform = transform2;
g.DrawString(s, font, brush, point, format);
g.Transform = transform;
}
// Token: 0x060004EE RID: 1262 RVA: 0x00033A74 File Offset: 0x00031C74
private static int GetPow(int digit)
{
int num = 1;
for (int i = 0; i < digit; i++)
{
num *= 10;
}
return num;
}
/// <summary>
/// 将int数组转换为double数组
/// </summary>
/// <param name="values">int数组值</param>
/// <returns>结果值</returns>
// Token: 0x060004EF RID: 1263 RVA: 0x00033AA0 File Offset: 0x00031CA0
public static double[] TranlateArrayToDouble(int[] values)
{
bool flag = values == null;
double[] result;
if (flag)
{
result = null;
}
else
{
double[] array = new double[values.Length];
for (int i = 0; i < values.Length; i++)
{
array[i] = (double)values[i];
}
result = array;
}
return result;
}
/// <summary>
/// 将float数组转换为double数组值
/// </summary>
/// <param name="values">float数组值</param>
/// <returns>结果值</returns>
// Token: 0x060004F0 RID: 1264 RVA: 0x00033AE8 File Offset: 0x00031CE8
public static double[] TranlateArrayToDouble(float[] values)
{
double[] array = new double[values.Length];
for (int i = 0; i < values.Length; i++)
{
array[i] = (double)values[i];
}
return array;
}
/// <summary>
/// 获得数据的上限值,这个上限值是自动计算的。
/// </summary>
/// <param name="values">数据值</param>
/// <returns>数据值</returns>
// Token: 0x060004F1 RID: 1265 RVA: 0x00033B20 File Offset: 0x00031D20
public static int CalculateMaxSectionFrom(double[] values)
{
double num = values.Max();
bool flag = num <= 5.0;
int result;
if (flag)
{
result = 5;
}
else
{
bool flag2 = num <= 9.0;
if (flag2)
{
result = 10;
}
else
{
int num2 = Convert.ToInt32(Math.Ceiling(num));
int digit = num2.ToString().Length - 2;
int num3 = int.Parse(num2.ToString().Substring(0, 2));
bool flag3 = num3 < 11;
if (flag3)
{
result = 12 * HslHelper.GetPow(digit);
}
else
{
bool flag4 = num3 < 13;
if (flag4)
{
result = 14 * HslHelper.GetPow(digit);
}
else
{
bool flag5 = num3 < 15;
if (flag5)
{
result = 16 * HslHelper.GetPow(digit);
}
else
{
bool flag6 = num3 < 17;
if (flag6)
{
result = 18 * HslHelper.GetPow(digit);
}
else
{
bool flag7 = num3 < 19;
if (flag7)
{
result = 20 * HslHelper.GetPow(digit);
}
else
{
bool flag8 = num3 < 21;
if (flag8)
{
result = 22 * HslHelper.GetPow(digit);
}
else
{
bool flag9 = num3 < 23;
if (flag9)
{
result = 24 * HslHelper.GetPow(digit);
}
else
{
bool flag10 = num3 < 25;
if (flag10)
{
result = 26 * HslHelper.GetPow(digit);
}
else
{
bool flag11 = num3 < 27;
if (flag11)
{
result = 28 * HslHelper.GetPow(digit);
}
else
{
bool flag12 = num3 < 29;
if (flag12)
{
result = 30 * HslHelper.GetPow(digit);
}
else
{
bool flag13 = num3 < 33;
if (flag13)
{
result = 34 * HslHelper.GetPow(digit);
}
else
{
bool flag14 = num3 < 40;
if (flag14)
{
result = 40 * HslHelper.GetPow(digit);
}
else
{
bool flag15 = num3 < 50;
if (flag15)
{
result = 50 * HslHelper.GetPow(digit);
}
else
{
bool flag16 = num3 < 60;
if (flag16)
{
result = 60 * HslHelper.GetPow(digit);
}
else
{
bool flag17 = num3 < 80;
if (flag17)
{
result = 80 * HslHelper.GetPow(digit);
}
else
{
bool flag18 = num3 < 95;
if (flag18)
{
result = 100 * HslHelper.GetPow(digit);
}
else
{
result = 100 * HslHelper.GetPow(digit);
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
return result;
}
/// <inheritdoc cref="M:HslControls.HslHelper.CalculateMaxSectionFrom(System.Double[])" />
// Token: 0x060004F2 RID: 1266 RVA: 0x00033D50 File Offset: 0x00031F50
public static int CalculateMaxSectionFrom(Dictionary<string, double[]> values)
{
return HslHelper.CalculateMaxSectionFrom((from m in values
select m.Value.Max()).ToArray<double>());
}
/// <summary>
/// 获取当前颜色更淡的颜色信息
/// </summary>
/// <param name="color">颜色信息</param>
/// <returns>颜色</returns>
// Token: 0x060004F3 RID: 1267 RVA: 0x00033D94 File Offset: 0x00031F94
public static System.Drawing.Color GetColorLight(System.Drawing.Color color)
{
return HslHelper.GetColorLight(color, 40);
}
/// <summary>
/// 获取当前颜色更深的颜色信息
/// </summary>
/// <param name="color">颜色信息</param>
/// <returns>颜色</returns>
// Token: 0x060004F4 RID: 1268 RVA: 0x00033DB0 File Offset: 0x00031FB0
public static System.Drawing.Color GetColorDeep(System.Drawing.Color color)
{
return HslHelper.GetColorLight(color, -40);
}
/// <summary>
/// 获取当前颜色更淡的颜色信息需要指定系数0-1000时是原来的原色100时是纯白色
/// </summary>
/// <param name="color">颜色信息</param>
/// <param name="scale">获取颜色的系数信息</param>
/// <returns>颜色</returns>
// Token: 0x060004F5 RID: 1269 RVA: 0x00033DCC File Offset: 0x00031FCC
public static System.Drawing.Color GetColorLight(System.Drawing.Color color, int scale)
{
bool flag = scale > 0;
System.Drawing.Color result;
if (flag)
{
result = System.Drawing.Color.FromArgb((int)color.R + (int)(byte.MaxValue - color.R) * scale / 100, (int)color.G + (int)(byte.MaxValue - color.G) * scale / 100, (int)color.B + (int)(byte.MaxValue - color.B) * scale / 100);
}
else
{
result = System.Drawing.Color.FromArgb((int)color.R + (int)color.R * scale / 100, (int)color.G + (int)color.G * scale / 100, (int)color.B + (int)color.B * scale / 100);
}
return result;
}
/// <summary>
/// 获取颜色的偏移信息
/// </summary>
/// <param name="color">颜色值</param>
/// <param name="offset">颜色偏移信息</param>
/// <returns>颜色值</returns>
// Token: 0x060004F6 RID: 1270 RVA: 0x00033E80 File Offset: 0x00032080
public static System.Drawing.Color GetColorOffset(System.Drawing.Color color, int offset)
{
int num = (int)color.R + offset;
bool flag = num < 0;
if (flag)
{
num = 0;
}
bool flag2 = num > 255;
if (flag2)
{
num = 255;
}
int num2 = (int)color.G + offset;
bool flag3 = num2 < 0;
if (flag3)
{
num2 = 0;
}
bool flag4 = num2 > 255;
if (flag4)
{
num2 = 255;
}
int num3 = (int)color.B + offset;
bool flag5 = num3 < 0;
if (flag5)
{
num3 = 0;
}
bool flag6 = num3 > 255;
if (flag6)
{
num3 = 255;
}
return System.Drawing.Color.FromArgb(num, num2, num3);
}
/// <summary>
/// 获取当前颜色更淡的颜色信息
/// </summary>
/// <param name="color">颜色信息</param>
/// <returns>颜色</returns>
// Token: 0x060004F7 RID: 1271 RVA: 0x00033F18 File Offset: 0x00032118
public static System.Drawing.Color GetColorLightFive(System.Drawing.Color color)
{
return HslHelper.GetColorLight(color, 50);
}
/// <summary>
/// 从字符串表示的点位信息里解析出真正的点位信息
/// </summary>
/// <param name="points">字符串的点位</param>
/// <param name="soureWidth">原来的长度信息</param>
/// <param name="sourceHeight">原来的高度信息</param>
/// <param name="width">实际的宽度信息</param>
/// <param name="height">实际的高度信息</param>
/// <param name="dx">x偏移量信息</param>
/// <param name="dy">y偏移量信息</param>
/// <returns></returns>
// Token: 0x060004FA RID: 1274 RVA: 0x0003400C File Offset: 0x0003220C
public static PointF[] GetPointsFrom(string points, float soureWidth, float sourceHeight, float width, float height, float dx = 0f, float dy = 0f)
{
string[] array = points.Split(new char[]
{
' '
}, StringSplitOptions.RemoveEmptyEntries);
PointF[] array2 = new PointF[array.Length];
for (int i = 0; i < array.Length; i++)
{
int num = array[i].IndexOf(',');
float num2 = Convert.ToSingle(array[i].Substring(0, num));
float num3 = Convert.ToSingle(array[i].Substring(num + 1));
array2[i] = new PointF(width * (num2 + dx) / soureWidth, height * (num3 + dy) / sourceHeight);
}
return array2;
}
/// <summary>
/// 根据矩形及其各个定点的配置信息,获取圆角的路径信息,可以指定每个定点的圆角情况
/// </summary>
/// <param name="rectangle"></param>
/// <param name="radius"></param>
/// <param name="topLeft"></param>
/// <param name="topRight"></param>
/// <param name="buttomRight"></param>
/// <param name="buttomLeft"></param>
/// <returns></returns>
// Token: 0x060004FB RID: 1275 RVA: 0x000340A0 File Offset: 0x000322A0
public static GraphicsPath GetRoundRectange(Rectangle rectangle, int radius, bool topLeft, bool topRight, bool buttomRight, bool buttomLeft)
{
GraphicsPath graphicsPath = new GraphicsPath();
Point pt = new Point(rectangle.X + (topLeft ? radius : 0), rectangle.Y);
Point pt2 = new Point(rectangle.X + rectangle.Width - 1 - (topRight ? radius : 0), rectangle.Y);
graphicsPath.AddLine(pt, pt2);
bool flag = topRight && radius > 0;
if (flag)
{
graphicsPath.AddArc(rectangle.X + rectangle.Width - radius * 2 - 1, rectangle.Y, radius * 2, radius * 2, 270f, 90f);
}
Point pt3 = new Point(rectangle.X + rectangle.Width - 1, rectangle.Y + (topRight ? radius : 0));
Point pt4 = new Point(rectangle.X + rectangle.Width - 1, rectangle.Y + rectangle.Height - 1 - (buttomRight ? radius : 0));
graphicsPath.AddLine(pt3, pt4);
bool flag2 = buttomRight && radius > 0;
if (flag2)
{
graphicsPath.AddArc(rectangle.X + rectangle.Width - radius * 2 - 1, rectangle.Y + rectangle.Height - radius * 2 - 1, radius * 2, radius * 2, 0f, 90f);
}
Point pt5 = new Point(rectangle.X + rectangle.Width - 1 - (buttomRight ? radius : 0), rectangle.Y + rectangle.Height - 1);
Point pt6 = new Point(rectangle.X + (buttomLeft ? radius : 0), rectangle.Y + rectangle.Height - 1);
graphicsPath.AddLine(pt5, pt6);
bool flag3 = buttomLeft && radius > 0;
if (flag3)
{
graphicsPath.AddArc(rectangle.X, rectangle.Y + rectangle.Height - radius * 2 - 1, radius * 2, radius * 2, 90f, 90f);
}
Point pt7 = new Point(rectangle.X, rectangle.Y + rectangle.Height - 1 - (buttomLeft ? radius : 0));
Point pt8 = new Point(rectangle.X, rectangle.Y + (topLeft ? radius : 0));
graphicsPath.AddLine(pt7, pt8);
bool flag4 = topLeft && radius > 0;
if (flag4)
{
graphicsPath.AddArc(rectangle.X, rectangle.Y, radius * 2, radius * 2, 180f, 90f);
}
return graphicsPath;
}
// Token: 0x060004FC RID: 1276 RVA: 0x00034330 File Offset: 0x00032530
private static string FloatMatchEvaluator(Match m)
{
bool flag = m.Value.Length == 5;
string result;
if (flag)
{
result = m.Value.Substring(0, 3);
}
else
{
result = m.Value.Substring(0, 2);
}
return result;
}
// Token: 0x060004FD RID: 1277 RVA: 0x00034374 File Offset: 0x00032574
private static string RemoveEndWithZero(string value)
{
return Regex.Replace(value, "\\.[0]+$", "");
}
// Token: 0x060004FE RID: 1278 RVA: 0x00034398 File Offset: 0x00032598
public static float GetReferenceAxisMaxValue(float max)
{
bool flag = max >= 0f;
float result;
if (flag)
{
int floatPow = HslHelper.GetFloatPow(max);
float num = (float)((double)max * Math.Pow(10.0, (double)(-(double)floatPow)));
bool flag2 = num == 0f;
if (flag2)
{
result = 1f;
}
else
{
bool flag3 = num < 1.1f;
if (flag3)
{
result = Convert.ToSingle(1.2000000476837158 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag4 = num < 1.3f;
if (flag4)
{
result = Convert.ToSingle(1.399999976158142 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag5 = num < 1.5f;
if (flag5)
{
result = Convert.ToSingle(1.600000023841858 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag6 = num < 1.7f;
if (flag6)
{
result = Convert.ToSingle(1.7999999523162842 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag7 = num < 1.9f;
if (flag7)
{
result = Convert.ToSingle(2.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag8 = num < 2.2f;
if (flag8)
{
result = Convert.ToSingle(2.4000000953674316 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag9 = num < 2.4f;
if (flag9)
{
result = Convert.ToSingle(2.5999999046325684 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag10 = num < 2.6f;
if (flag10)
{
result = Convert.ToSingle(2.799999952316284 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag11 = num < 2.8f;
if (flag11)
{
result = Convert.ToSingle(3.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag12 = num < 3.3f;
if (flag12)
{
result = Convert.ToSingle(3.5 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag13 = num < 3.8f;
if (flag13)
{
result = Convert.ToSingle(4.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag14 = num < 4.5f;
if (flag14)
{
result = Convert.ToSingle(5.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag15 = num < 6.5f;
if (flag15)
{
result = Convert.ToSingle(6.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag16 = num < 7.5f;
if (flag16)
{
result = Convert.ToSingle(8.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
bool flag17 = num < 9.5f;
if (flag17)
{
result = Convert.ToSingle(10.0 * Math.Pow(10.0, (double)floatPow));
}
else
{
result = Convert.ToSingle(12.0 * Math.Pow(10.0, (double)floatPow));
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
}
else
{
int floatPow2 = HslHelper.GetFloatPow(-max);
float num2 = (float)((double)max * Math.Pow(10.0, (double)(-(double)floatPow2)));
bool flag18 = num2 < -8.5f;
if (flag18)
{
result = Convert.ToSingle(-8.0 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag19 = num2 < -6.5f;
if (flag19)
{
result = Convert.ToSingle(-6.0 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag20 = num2 < -4.5f;
if (flag20)
{
result = Convert.ToSingle(-4.0 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag21 = num2 < -3.5f;
if (flag21)
{
result = Convert.ToSingle(-3.0 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag22 = num2 < -2.2f;
if (flag22)
{
result = Convert.ToSingle(-2.0 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag23 = num2 < -1.9f;
if (flag23)
{
result = Convert.ToSingle(-1.7999999523162842 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag24 = num2 < -1.7f;
if (flag24)
{
result = Convert.ToSingle(-1.600000023841858 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag25 = num2 < -1.5f;
if (flag25)
{
result = Convert.ToSingle(-1.399999976158142 * Math.Pow(10.0, (double)floatPow2));
}
else
{
bool flag26 = num2 < -1.3f;
if (flag26)
{
result = Convert.ToSingle(-1.2000000476837158 * Math.Pow(10.0, (double)floatPow2));
}
else
{
result = Convert.ToSingle(-1.0 * Math.Pow(10.0, (double)floatPow2));
}
}
}
}
}
}
}
}
}
}
return result;
}
// Token: 0x060004FF RID: 1279 RVA: 0x00034948 File Offset: 0x00032B48
private static int GetFloatPow(float value)
{
bool flag = value >= 1f && value < 10f;
int result;
if (flag)
{
result = 0;
}
else
{
bool flag2 = value >= 10f;
if (flag2)
{
result = HslHelper.GetFloatPow(value / 10f) + 1;
}
else
{
bool flag3 = value > 0f && value < 1f;
if (flag3)
{
result = HslHelper.GetFloatPow(value * 10f) - 1;
}
else
{
result = 0;
}
}
}
return result;
}
/// <summary>
/// 获取浮点数值的格式化文本信息,如果发生了异常,则返回错误消息
/// </summary>
/// <param name="format">格式化信息</param>
/// <param name="value">值信息</param>
/// <param name="remainZero">是否保留0的信息</param>
/// <returns>等待显示的文本</returns>
// Token: 0x06000500 RID: 1280 RVA: 0x000349C0 File Offset: 0x00032BC0
public static string GetFormatString(string format, float value, bool remainZero = false)
{
string result;
try
{
string text = string.Format(format, value);
if (remainZero)
{
result = HslHelper.RemoveEndWithZero(text);
}
else
{
result = HslHelper.RemoveEndWithZero(Regex.Replace(text, "[Ee][+-][0]+", new MatchEvaluator(HslHelper.FloatMatchEvaluator)));
}
}
catch
{
result = "Wrong";
}
return result;
}
/// <summary>
/// 矩形中间的字符串对齐机制
/// </summary>
// Token: 0x17000181 RID: 385
// (get) Token: 0x06000501 RID: 1281 RVA: 0x00034A24 File Offset: 0x00032C24
// (set) Token: 0x06000502 RID: 1282 RVA: 0x00034A2B File Offset: 0x00032C2B
public static StringFormat StringFormatCenter { get; set; }
/// <summary>
/// 矩形的左侧中间的对齐机制
/// </summary>
// Token: 0x17000182 RID: 386
// (get) Token: 0x06000503 RID: 1283 RVA: 0x00034A33 File Offset: 0x00032C33
// (set) Token: 0x06000504 RID: 1284 RVA: 0x00034A3A File Offset: 0x00032C3A
public static StringFormat StringFormatLeft { get; set; }
/// <summary>
/// 矩形的右侧的中间对齐机制
/// </summary>
// Token: 0x17000183 RID: 387
// (get) Token: 0x06000505 RID: 1285 RVA: 0x00034A42 File Offset: 0x00032C42
// (set) Token: 0x06000506 RID: 1286 RVA: 0x00034A49 File Offset: 0x00032C49
public static StringFormat StringFormatRight { get; set; }
/// <summary>
/// 矩形的的默认的左上角对齐的机制
/// </summary>
// Token: 0x17000184 RID: 388
// (get) Token: 0x06000507 RID: 1287 RVA: 0x00034A51 File Offset: 0x00032C51
// (set) Token: 0x06000508 RID: 1288 RVA: 0x00034A58 File Offset: 0x00032C58
public static StringFormat StringFormatDefault { get; set; } = new StringFormat();
/// <summary>
/// 矩形的下方中间的对齐的机制
/// </summary>
// Token: 0x17000185 RID: 389
// (get) Token: 0x06000509 RID: 1289 RVA: 0x00034A60 File Offset: 0x00032C60
// (set) Token: 0x0600050A RID: 1290 RVA: 0x00034A67 File Offset: 0x00032C67
public static StringFormat StringFormatTopCenter { get; set; }
}
}