* UILineChartOption: 增加了UpdateYData函数,按序号更新Y轴值

This commit is contained in:
Sunny 2023-05-06 20:29:42 +08:00
parent 20bcf1f3e5
commit e045973d62
4 changed files with 194 additions and 178 deletions

View File

@ -20,6 +20,7 @@
* 2022-07-15: V3.2.1 线 * 2022-07-15: V3.2.1 线
* 2022-11-25: V3.2.2 线 * 2022-11-25: V3.2.2 线
* 2022-11-25: V3.2.2 * 2022-11-25: V3.2.2
* 2023-05-06: V3.3.6 UpdateYData函数Y轴值
******************************************************************************/ ******************************************************************************/
using System; using System;
@ -168,6 +169,12 @@ namespace Sunny.UI
} }
} }
public void UpdateYData(string seriesName, int index, double value)
{
if (!Series.ContainsKey(seriesName)) return;
Series[seriesName].UpdateYData(index, value);
}
public void Clear() public void Clear()
{ {
foreach (var series in Series.Values) foreach (var series in Series.Values)
@ -476,6 +483,15 @@ namespace Sunny.UI
private int MaxCount = 0; private int MaxCount = 0;
public void UpdateYData(int index, double value)
{
if (YData.Count == 0) return;
if (index >= 0 && index < YData.Count)
{
YData[index] = value;
}
}
/// <summary> /// <summary>
/// 设置线的最大点数0不限制 /// 设置线的最大点数0不限制
/// </summary> /// </summary>

View File

@ -592,7 +592,7 @@ namespace Sunny.UI
/// <param name="horizontalAlignment">水平方向</param> /// <param name="horizontalAlignment">水平方向</param>
/// <param name="verticalAlignment">垂直方向</param> /// <param name="verticalAlignment">垂直方向</param>
/// <returns>文本布局</returns> /// <returns>文本布局</returns>
public static StringFormat SetAlignment(StringAlignment horizontalAlignment = StringAlignment.Center, StringAlignment verticalAlignment = StringAlignment.Center) public static StringFormat SetCenterAlignment(StringAlignment horizontalAlignment = StringAlignment.Center, StringAlignment verticalAlignment = StringAlignment.Center)
{ {
return new StringFormat { Alignment = horizontalAlignment, LineAlignment = verticalAlignment }; return new StringFormat { Alignment = horizontalAlignment, LineAlignment = verticalAlignment };
} }

View File

@ -173,6 +173,182 @@ namespace Sunny.UI
public static void DrawString(this Graphics g, string text, Font font, Color color, Point pt, StringFormat format) public static void DrawString(this Graphics g, string text, Font font, Color color, Point pt, StringFormat format)
=> g.DrawString(text, font, color, pt.X, pt.Y, format); => g.DrawString(text, font, color, pt.X, pt.Y, format);
/// <summary>
/// 绘制字符串
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="str">字符串</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="size">大小</param>
/// <param name="padding">边距</param>
/// <param name="align">位置位置</param>
public static void DrawString(this Graphics g, string str, Font font, Color color, Size size, Padding padding, ContentAlignment align, int offsetX = 0, int offsetY = 0)
{
if (str.IsNullOrEmpty()) return;
SizeF sf = g.MeasureString(str, font);
using Brush br = color.Brush();
switch (align)
{
case ContentAlignment.MiddleCenter:
g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX,
padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
break;
case ContentAlignment.TopLeft:
g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + offsetY);
break;
case ContentAlignment.TopCenter:
g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, padding.Top + offsetY);
break;
case ContentAlignment.TopRight:
g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + offsetY);
break;
case ContentAlignment.MiddleLeft:
g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
break;
case ContentAlignment.MiddleRight:
g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
break;
case ContentAlignment.BottomLeft:
g.DrawString(str, font, br, padding.Left + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
break;
case ContentAlignment.BottomCenter:
g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
break;
case ContentAlignment.BottomRight:
g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
break;
}
}
/// <summary>
/// 绘制字符串
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="rect">区域</param>
/// <param name="format">格式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Color color, RectangleF rect, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
using Brush br = color.Brush();
g.DrawStringRotateAtCenter(text, font, color, rect.Center(), (int)angle);
}
/// <summary>
/// 以文字中心点为原点,旋转文字
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="centerPoint">文字中心点</param>
/// <param name="angle">角度</param>
public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Color color, PointF centerPoint, float angle)
{
if (text.IsNullOrEmpty()) return;
using Brush br = color.Brush();
g.DrawStringRotateAtCenter(text, font, br, centerPoint, angle);
}
/// <summary>
/// 以文字中心点为原点,旋转文字
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="brush">笔刷</param>
/// <param name="centerPoint">文字中心点</param>
/// <param name="angle">角度</param>
public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Brush brush, PointF centerPoint, float angle)
{
if (text.IsNullOrEmpty()) return;
SizeF sf = g.MeasureString(text, font);
float x1 = centerPoint.X - sf.Width / 2.0f;
float y1 = centerPoint.Y - sf.Height / 2.0f;
// 把画板的原点(默认是左上角)定位移到文字中心
g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
// 旋转画板
g.RotateTransform(angle);
// 回退画板x,y轴移动过的距离
g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
g.DrawString(text, font, brush, x1, y1);
//恢复
g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
g.RotateTransform(-angle);
g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
}
/// <summary>
/// 以旋转点为原点,旋转文字
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文本</param>
/// <param name="font">字体</param>
/// <param name="brush">填充</param>
/// <param name="rotatePoint">旋转点</param>
/// <param name="format">布局方式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Brush brush, PointF rotatePoint, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
// Save the matrix
Matrix mtxSave = g.Transform;
Matrix mtxRotate = g.Transform;
mtxRotate.RotateAt(angle, rotatePoint);
g.Transform = mtxRotate;
g.DrawString(text, font, brush, rotatePoint, format);
// Reset the matrix
g.Transform = mtxSave;
}
/// <summary>
/// 绘制字符串
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="rotatePoint">旋转点</param>
/// <param name="format">格式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Color color, PointF rotatePoint, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
using Brush br = color.Brush();
g.DrawString(text, font, br, rotatePoint, format, angle);
}
/// <summary>
/// 绘制根据矩形旋转文本
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文本</param>
/// <param name="font">字体</param>
/// <param name="brush">填充</param>
/// <param name="rect">局部矩形</param>
/// <param name="format">布局方式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Brush brush, RectangleF rect, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
g.DrawStringRotateAtCenter(text, font, brush, rect.Center(), angle);
}
/// <summary> /// <summary>
/// 绘制多条直线连接 /// 绘制多条直线连接
/// </summary> /// </summary>
@ -1463,182 +1639,6 @@ namespace Sunny.UI
new Rectangle(cutLeft, cutTop, img.Width - cutLeft - cutRight, img.Height - cutTop - cutBottom), GraphicsUnit.Pixel); new Rectangle(cutLeft, cutTop, img.Width - cutLeft - cutRight, img.Height - cutTop - cutBottom), GraphicsUnit.Pixel);
} }
/// <summary>
/// 绘制字符串
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="str">字符串</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="size">大小</param>
/// <param name="padding">边距</param>
/// <param name="align">位置位置</param>
public static void DrawString(this Graphics g, string str, Font font, Color color, Size size, Padding padding, ContentAlignment align, int offsetX = 0, int offsetY = 0)
{
if (str.IsNullOrEmpty()) return;
SizeF sf = g.MeasureString(str, font);
using Brush br = color.Brush();
switch (align)
{
case ContentAlignment.MiddleCenter:
g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX,
padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
break;
case ContentAlignment.TopLeft:
g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + offsetY);
break;
case ContentAlignment.TopCenter:
g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, padding.Top + offsetY);
break;
case ContentAlignment.TopRight:
g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + offsetY);
break;
case ContentAlignment.MiddleLeft:
g.DrawString(str, font, br, padding.Left + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
break;
case ContentAlignment.MiddleRight:
g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, padding.Top + (size.Height - sf.Height - padding.Top - padding.Bottom) / 2.0f + offsetY);
break;
case ContentAlignment.BottomLeft:
g.DrawString(str, font, br, padding.Left + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
break;
case ContentAlignment.BottomCenter:
g.DrawString(str, font, br, padding.Left + (size.Width - sf.Width - padding.Left - padding.Right) / 2.0f + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
break;
case ContentAlignment.BottomRight:
g.DrawString(str, font, br, size.Width - sf.Width - padding.Right + offsetX, size.Height - sf.Height - padding.Bottom + offsetY);
break;
}
}
/// <summary>
/// 绘制字符串
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="rect">区域</param>
/// <param name="format">格式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Color color, RectangleF rect, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
using Brush br = color.Brush();
g.DrawStringRotateAtCenter(text, font, color, rect.Center(), (int)angle);
}
/// <summary>
/// 以文字中心点为原点,旋转文字
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="centerPoint">文字中心点</param>
/// <param name="angle">角度</param>
public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Color color, PointF centerPoint, float angle)
{
if (text.IsNullOrEmpty()) return;
using Brush br = color.Brush();
g.DrawStringRotateAtCenter(text, font, br, centerPoint, angle);
}
/// <summary>
/// 以文字中心点为原点,旋转文字
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="brush">笔刷</param>
/// <param name="centerPoint">文字中心点</param>
/// <param name="angle">角度</param>
public static void DrawStringRotateAtCenter(this Graphics g, string text, Font font, Brush brush, PointF centerPoint, float angle)
{
if (text.IsNullOrEmpty()) return;
SizeF sf = g.MeasureString(text, font);
float x1 = centerPoint.X - sf.Width / 2.0f;
float y1 = centerPoint.Y - sf.Height / 2.0f;
// 把画板的原点(默认是左上角)定位移到文字中心
g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
// 旋转画板
g.RotateTransform(angle);
// 回退画板x,y轴移动过的距离
g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
g.DrawString(text, font, brush, x1, y1);
//恢复
g.TranslateTransform(x1 + sf.Width / 2, y1 + sf.Height / 2);
g.RotateTransform(-angle);
g.TranslateTransform(-(x1 + sf.Width / 2), -(y1 + sf.Height / 2));
}
/// <summary>
/// 以旋转点为原点,旋转文字
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文本</param>
/// <param name="font">字体</param>
/// <param name="brush">填充</param>
/// <param name="rotatePoint">旋转点</param>
/// <param name="format">布局方式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Brush brush, PointF rotatePoint, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
// Save the matrix
Matrix mtxSave = g.Transform;
Matrix mtxRotate = g.Transform;
mtxRotate.RotateAt(angle, rotatePoint);
g.Transform = mtxRotate;
g.DrawString(text, font, brush, rotatePoint, format);
// Reset the matrix
g.Transform = mtxSave;
}
/// <summary>
/// 绘制字符串
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文字</param>
/// <param name="font">字体</param>
/// <param name="color">颜色</param>
/// <param name="rotatePoint">旋转点</param>
/// <param name="format">格式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Color color, PointF rotatePoint, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
using Brush br = color.Brush();
g.DrawString(text, font, br, rotatePoint, format, angle);
}
/// <summary>
/// 绘制根据矩形旋转文本
/// </summary>
/// <param name="g">绘图图元</param>
/// <param name="text">文本</param>
/// <param name="font">字体</param>
/// <param name="brush">填充</param>
/// <param name="rect">局部矩形</param>
/// <param name="format">布局方式</param>
/// <param name="angle">角度</param>
public static void DrawString(this Graphics g, string text, Font font, Brush brush, RectangleF rect, StringFormat format, float angle)
{
if (text.IsNullOrEmpty()) return;
g.DrawStringRotateAtCenter(text, font, brush, rect.Center(), angle);
}
/// <summary> /// <summary>
/// 绘制两点连线 /// 绘制两点连线
/// </summary> /// </summary>

View File

@ -767,7 +767,7 @@ namespace Sunny.UI
if (MenuHelper[e.Node] != null) if (MenuHelper[e.Node] != null)
{ {
using StringFormat alignment = GDI.SetAlignment(); using StringFormat alignment = GDI.SetCenterAlignment();
if (MenuHelper[e.Node].TipsCustom) if (MenuHelper[e.Node].TipsCustom)
{ {
e.Graphics.FillEllipse(MenuHelper[e.Node].TipsBackColor, tipsLeft, tipsTop, sfMax, sfMax); e.Graphics.FillEllipse(MenuHelper[e.Node].TipsBackColor, tipsLeft, tipsTop, sfMax, sfMax);