*UILineChart:双坐标轴增加纵横参考线

This commit is contained in:
Sunny 2021-12-31 10:05:56 +08:00
parent 4205e98dbc
commit b657428f6e
4 changed files with 70 additions and 38 deletions

Binary file not shown.

Binary file not shown.

View File

@ -219,6 +219,13 @@ namespace Sunny.UI.Demo
option.Y2Axis.AxisLabel.DecimalCount = 1;
option.Y2Axis.AxisLabel.AutoFormat = false;
option.YAxisScaleLines.Add(new UIScaleLine() { Color = Color.Red, Name = "上限", Value = 3.5 });
option.Y2AxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "下限", Value = 12 });
option.XAxisScaleLines.Add(new UIScaleLine() { Color = Color.Lime, Name = "3", Value = 3 });
option.XAxisScaleLines.Add(new UIScaleLine() { Color = Color.Gold, Name = "6", Value = 6 });
LineChart.SetOption(option);
}
}

View File

@ -625,12 +625,12 @@ namespace Sunny.UI
private void DrawAxisScales(Graphics g)
{
if (YScale == null) return;
if (Option.HaveY2) return;
if (YScale != null)
foreach (var line in Option.YAxisScaleLines)
{
float pos = YScale.CalcYPixel(line.Value, DrawOrigin.Y, DrawSize.Height);
if (pos <= Option.Grid.Top || pos >= Height - Option.Grid.Bottom) continue;
using (Pen pn = new Pen(line.Color, line.Size))
@ -638,9 +638,33 @@ namespace Sunny.UI
g.DrawLine(pn, DrawOrigin.X + 1, pos, Width - Option.Grid.Right - 1, pos);
}
SizeF sf = g.MeasureString(line.Name, TempFont);
if (Option.Y2AxisScaleLines != null)
line.Left = UILeftAlignment.Left;
if (line.Left == UILeftAlignment.Left)
g.DrawString(line.Name, TempFont, line.Color, DrawOrigin.X + 4, pos - 2 - sf.Height);
if (line.Left == UILeftAlignment.Center)
g.DrawString(line.Name, TempFont, line.Color, DrawOrigin.X + (Width - Option.Grid.Left - Option.Grid.Right - sf.Width) / 2, pos - 2 - sf.Height);
if (line.Left == UILeftAlignment.Right)
g.DrawString(line.Name, TempFont, line.Color, Width - sf.Width - 4 - Option.Grid.Right, pos - 2 - sf.Height);
}
if (Y2Scale != null)
foreach (var line in Option.Y2AxisScaleLines)
{
float pos = Y2Scale.CalcYPixel(line.Value, DrawOrigin.Y, DrawSize.Height);
if (pos <= Option.Grid.Top || pos >= Height - Option.Grid.Bottom) continue;
using (Pen pn = new Pen(line.Color, line.Size))
{
g.DrawLine(pn, DrawOrigin.X + 1, pos, Width - Option.Grid.Right - 1, pos);
}
SizeF sf = g.MeasureString(line.Name, TempFont);
line.Left = UILeftAlignment.Right;
if (line.Left == UILeftAlignment.Left)
g.DrawString(line.Name, TempFont, line.Color, DrawOrigin.X + 4, pos - 2 - sf.Height);
if (line.Left == UILeftAlignment.Center)
@ -650,6 +674,7 @@ namespace Sunny.UI
}
int idx = 0;
if (XScale != null)
foreach (var line in Option.XAxisScaleLines)
{
float pos = XScale.CalcXPixel(line.Value, DrawOrigin.X, DrawSize.Width);