using DevExpress.Utils;
|
using DevExpress.Utils.Drawing;
|
using DevExpress.XtraCharts;
|
using DevExpress.XtraReports.UI;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using Yw.WinFrmUI.Phart;
|
|
namespace HStation.WinFrmUI
|
{
|
public class ReportHelper
|
{
|
//创建一级标题
|
public static XRLabel CreateFirstCaption(string caption, float sizeX, float sizeY, float locationX, float locationY)
|
{
|
var lab = new XRLabel();
|
lab.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right);
|
lab.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold);
|
lab.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY);
|
lab.Multiline = true;
|
lab.Name = "lab";
|
lab.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
lab.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
lab.StylePriority.UseFont = false;
|
lab.StylePriority.UseTextAlignment = false;
|
lab.Text = caption;
|
lab.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
|
return lab;
|
}
|
|
public static XRLabel CreateGroupCaption(string caption, float sizeX, float sizeY, float locationX, float locationY)
|
{
|
var lab = new XRLabel();
|
lab.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right);
|
lab.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold);
|
lab.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY);
|
lab.Multiline = true;
|
lab.Name = "lab";
|
lab.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
lab.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
lab.StylePriority.UseFont = false;
|
lab.StylePriority.UseTextAlignment = false;
|
lab.Text = caption;
|
lab.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
|
|
// 设置背景颜色
|
lab.BackColor = System.Drawing.Color.AliceBlue;
|
// 设置边框样式
|
//lab.BorderDashStyle = DevExpress.XtraPrinting.BorderSide.All;
|
lab.BorderWidth = 1;
|
lab.BorderColor = System.Drawing.Color.AliceBlue;
|
return lab;
|
}
|
|
//创建精度比例
|
public static XRChart CreateAccuracyScale(HydroAccuracyScaleViewModel scale, float sizeX, float sizeY, float locationY)
|
{
|
var chart = new XRChart();
|
chart.BackColor = System.Drawing.Color.Transparent;
|
chart.BorderColor = System.Drawing.Color.Black;
|
chart.Borders = DevExpress.XtraPrinting.BorderSide.All;
|
chart.Legend.Name = "Default Legend";
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
chart.LocationFloat = new DevExpress.Utils.PointFloat(0F, locationY);
|
chart.Name = "chart";
|
chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F);
|
|
var series = new DevExpress.XtraCharts.Series();
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
|
series.Name = "Series";
|
var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView();
|
doughnutSeriesView.HoleRadiusPercent = 45;
|
doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold);
|
doughnutSeriesView.TotalLabel.Visible = true;
|
series.View = doughnutSeriesView;
|
series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True;
|
series.Label.TextPattern = "{A}:{VP:P1}";
|
chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series };
|
chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
chart.StylePriority.UseBackColor = false;
|
chart.StylePriority.UsePadding = false;
|
if (scale != null)
|
{
|
if (scale.Items != null && scale.Items.Count > 0)
|
{
|
foreach (var item in scale.Items)
|
{
|
series.Points.Add(new SeriesPoint(item.EvaluateItem, item.EvaluateCount));
|
}
|
}
|
doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", (scale.AvgError ?? 0) / 100F);
|
}
|
return chart;
|
}
|
|
//创建能量输入
|
public static XRChart CreateLossStatistics(HydroLossStatisticsViewModel statistics, float sizeX, float sizeY, float locationX, float locationY)
|
{
|
var chart = new XRChart();
|
chart.BackColor = System.Drawing.Color.Transparent;
|
chart.BorderColor = System.Drawing.Color.Black;
|
chart.Borders = DevExpress.XtraPrinting.BorderSide.All;
|
chart.Legend.Name = "Default Legend";
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY);
|
chart.Name = "chart";
|
chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F);
|
|
ChartTitle title = new ChartTitle();
|
title.Text = "能量输入"; // 设置标题文本
|
title.Font = new DevExpress.Drawing.DXFont("Arial", 14, DevExpress.Drawing.DXFontStyle.Bold); // 设置标题字体
|
title.Alignment = StringAlignment.Center; // 设置标题对齐方式
|
chart.Titles.Add(title);
|
|
var series = new DevExpress.XtraCharts.Series();
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
|
series.Name = "Series";
|
var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView();
|
doughnutSeriesView.HoleRadiusPercent = 45;
|
doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 8F, DevExpress.Drawing.DXFontStyle.Bold);
|
doughnutSeriesView.TotalLabel.Visible = true;
|
series.View = doughnutSeriesView;
|
series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True;
|
series.Label.TextPattern = "{A}:{VP:P1}";
|
chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series };
|
chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
chart.StylePriority.UseBackColor = false;
|
chart.StylePriority.UsePadding = false;
|
if (statistics != null)
|
{
|
if (statistics.Input.Items != null && statistics.Input.Items.Count > 0)
|
{
|
foreach (var item in statistics.Input.Items)
|
{
|
series.Points.Add(new SeriesPoint(item.EnergyName.ToString(), item.EnergyValue));
|
}
|
}
|
doughnutSeriesView.TotalLabel.TextPattern = $"总能量:{statistics.Input.TotalEnergyValue}KW";
|
}
|
return chart;
|
}
|
|
//创建能量统计
|
public static XRChart CreateCategory(HydroLossStatisticsViewModel statistics, float sizeX, float sizeY, float locationX, float locationY)
|
{
|
var chart = new XRChart();
|
chart.BackColor = System.Drawing.Color.Transparent;
|
chart.BorderColor = System.Drawing.Color.Black;
|
chart.Borders = DevExpress.XtraPrinting.BorderSide.All;
|
chart.Legend.Name = "Default Legend";
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY);
|
chart.Name = "chart";
|
chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F);
|
chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
chart.StylePriority.UseBackColor = false;
|
chart.StylePriority.UsePadding = false;
|
|
ChartTitle title = new ChartTitle();
|
title.Text = "能量统计"; // 设置标题文本
|
title.Font = new DevExpress.Drawing.DXFont("Arial", 14, DevExpress.Drawing.DXFontStyle.Bold); // 设置标题字体
|
title.Alignment = StringAlignment.Center; // 设置标题对齐方式
|
chart.Titles.Add(title);
|
|
if (statistics != null)
|
{
|
if (statistics.Category != null && statistics.Category.Items.Count > 0)
|
{
|
foreach (var item in statistics.Category.Items)
|
{
|
var series1 = new Series(item.EnergyName, ViewType.Bar);
|
series1.Points.Add(new SeriesPoint(item.EnergyName.ToString(), item.EnergyValue));
|
// 获取系列视图并转换为 BarSeriesView 类型
|
BarSeriesView barSeriesView = (BarSeriesView)series1.View;
|
series1.Label.TextPattern = "{V} KW";
|
// 设置柱子宽度,这里设置为 0.8,可根据需要调整
|
barSeriesView.BarWidth = 2.5;
|
// 将系列添加到图表中
|
chart.Series.Add(series1);
|
}
|
}
|
}
|
return chart;
|
}
|
|
//创建能量损失
|
public static XRChart CreateEnergyLoss(HydroLossStatisticsViewModel statistics, float sizeX, float sizeY, float locationX, float locationY)
|
{
|
var chart = new XRChart();
|
chart.BackColor = System.Drawing.Color.Transparent;
|
chart.BorderColor = System.Drawing.Color.Black;
|
chart.Borders = DevExpress.XtraPrinting.BorderSide.All;
|
chart.Legend.Name = "Default Legend";
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY);
|
chart.Name = "chart";
|
chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F);
|
|
ChartTitle title = new ChartTitle();
|
title.Text = "能量损失"; // 设置标题文本
|
title.Font = new DevExpress.Drawing.DXFont("Arial", 14, DevExpress.Drawing.DXFontStyle.Bold); // 设置标题字体
|
title.Alignment = StringAlignment.Center; // 设置标题对齐方式
|
chart.Titles.Add(title);
|
|
var series = new DevExpress.XtraCharts.Series();
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
|
series.Name = "Series";
|
var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView();
|
doughnutSeriesView.HoleRadiusPercent = 45;
|
doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 8F, DevExpress.Drawing.DXFontStyle.Bold);
|
doughnutSeriesView.TotalLabel.Visible = true;
|
series.View = doughnutSeriesView;
|
series.Label.LineVisibility = DevExpress.Utils.DefaultBoolean.True;
|
series.Label.TextPattern = "{A}:{VP:P1}";
|
chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series };
|
chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
chart.StylePriority.UseBackColor = false;
|
chart.StylePriority.UsePadding = false;
|
if (statistics != null)
|
{
|
if (statistics.Catalog != null && statistics.Catalog.Items.Count > 0)
|
{
|
foreach (var item in statistics.Catalog.Items)
|
{
|
series.Points.Add(new SeriesPoint(item.EnergyName.ToString(), item.EnergyValue));
|
}
|
}
|
doughnutSeriesView.TotalLabel.TextPattern = $"总损失:{statistics.Input.TotalEnergyValue}KW";
|
}
|
return chart;
|
}
|
|
//创建精度项
|
public static XRChart CreateAccuracyItem(double value, float sizeX, float sizeY, float locationX, float locationY)
|
{
|
var chart = new XRChart();
|
chart.BackColor = System.Drawing.Color.Transparent;
|
chart.BorderColor = System.Drawing.Color.Black;
|
chart.Borders = DevExpress.XtraPrinting.BorderSide.All;
|
chart.Legend.Name = "Default Legend";
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
chart.LocationFloat = new DevExpress.Utils.PointFloat(locationX, locationY);
|
chart.Name = "chart";
|
chart.Padding = new DevExpress.XtraPrinting.PaddingInfo(10, 10, 20, 20, 100F);
|
chart.PaletteRepository.Add("Palette 1", new DevExpress.XtraCharts.Palette("Palette 1", DevExpress.XtraCharts.PaletteScaleMode.Repeat, new DevExpress.XtraCharts.PaletteEntry[] {
|
new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197))))), System.Drawing.Color.FromArgb(((int)(((byte)(103)))), ((int)(((byte)(174)))), ((int)(((byte)(197)))))),
|
new DevExpress.XtraCharts.PaletteEntry(System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))), System.Drawing.Color.FromArgb(((int)(((byte)(232)))), ((int)(((byte)(236)))), ((int)(((byte)(240))))))}));
|
chart.PaletteName = "Palette 1";
|
|
var series = new DevExpress.XtraCharts.Series();
|
series.LabelsVisibility = DevExpress.Utils.DefaultBoolean.False;
|
series.Name = "Series";
|
var doughnutSeriesView = new DevExpress.XtraCharts.DoughnutSeriesView();
|
doughnutSeriesView.HoleRadiusPercent = 45;
|
doughnutSeriesView.TotalLabel.DXFont = new DevExpress.Drawing.DXFont("Tahoma", 12F, DevExpress.Drawing.DXFontStyle.Bold);
|
doughnutSeriesView.TotalLabel.Visible = true;
|
series.View = doughnutSeriesView;
|
chart.SeriesSerializable = new DevExpress.XtraCharts.Series[] { series };
|
chart.SizeF = new System.Drawing.SizeF(sizeX, sizeY);
|
chart.StylePriority.UseBackColor = false;
|
chart.StylePriority.UsePadding = false;
|
|
var otherValue = 100 - value;
|
series.Points.Add(new SeriesPoint("误差", value));
|
series.Points.Add(new SeriesPoint("其他", otherValue));
|
|
doughnutSeriesView.TotalLabel.TextPattern = string.Format("{0:0%}", value / 100f);
|
return chart;
|
}
|
|
// 创建表头单元格
|
public static XRTableCell CreateTableCell(string text, int width)
|
{
|
XRTableCell cell = new XRTableCell();
|
cell.Text = text;
|
cell.Width = width;
|
cell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter; // 文本居中
|
cell.Borders = DevExpress.XtraPrinting.BorderSide.All; // 设置边框
|
return cell;
|
}
|
|
// 创建数据绑定单元格
|
public static XRTableCell CreateTableCellWithBinding(string dataMember, int width)
|
{
|
XRTableCell cell = new XRTableCell();
|
cell.DataBindings.Add(new XRBinding("Text", null, dataMember)); // 绑定数据字段
|
cell.Width = width;
|
cell.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft; // 文本左对齐
|
cell.Borders = DevExpress.XtraPrinting.BorderSide.All; // 设置边框
|
return cell;
|
}
|
|
public static void SetAxisX(XYDiagram xyDiagram, double Min, double Max)
|
{
|
/* xyDiagram.AxisX.VisualRange.Auto = false;
|
xyDiagram.AxisX.WholeRange.Auto = false;
|
xyDiagram.AxisX.NumericScaleOptions.AutoGrid = false;*/
|
|
xyDiagram.AxisX.VisualRange.Auto = false;
|
xyDiagram.AxisX.WholeRange.Auto = false;
|
xyDiagram.AxisX.WholeRange.SideMarginsValue = 0;
|
xyDiagram.AxisX.VisualRange.SideMarginsValue = 0;
|
xyDiagram.AxisX.WholeRange.SetMinMaxValues(Min, Max);
|
xyDiagram.AxisX.VisualRange.SetMinMaxValues(Min, Max);
|
xyDiagram.AxisX.GridLines.Color = Color.Silver;// CurveChartDisplay.CurveColorQP;
|
xyDiagram.AxisX.GridLines.LineStyle.DashStyle = (DashStyle)PumpChartDisplay.GridLineTypeY;
|
xyDiagram.AxisX.GridLines.Visible = true;
|
}
|
|
public static void SetAxisY(XYDiagram xyDiagram, double Min, double Max)
|
{
|
//xyDiagram.AxisY.VisualRange.Auto = false;
|
//xyDiagram.AxisY.WholeRange.Auto = false;
|
//xyDiagram.AxisY.NumericScaleOptions.AutoGrid = false;
|
xyDiagram.AxisY.WholeRange.SideMarginsValue = 0;
|
xyDiagram.AxisY.VisualRange.SideMarginsValue = 0;
|
xyDiagram.AxisY.WholeRange.SetMinMaxValues(Min, Max);
|
xyDiagram.AxisY.VisualRange.SetMinMaxValues(Min, Max);
|
xyDiagram.AxisY.GridLines.Color = Color.Silver;// CurveChartDisplay.CurveColorQP;
|
xyDiagram.AxisY.GridLines.LineStyle.DashStyle = (DashStyle)PumpChartDisplay.GridLineTypeY;
|
xyDiagram.AxisY.GridLines.Visible = true;
|
}
|
|
public static void SetSecondaryAxisY(SecondaryAxisY AxisY, double Min, double Max)
|
{
|
AxisY.WholeRange.SideMarginsValue = 0;
|
AxisY.VisualRange.SideMarginsValue = 0;
|
AxisY.WholeRange.SetMinMaxValues(Min, Max);
|
AxisY.VisualRange.SetMinMaxValues(Min, Max);
|
AxisY.GridLines.Color = Color.Silver;// CurveChartDisplay.CurveColorQP;
|
AxisY.GridLines.LineStyle.DashStyle = (DashStyle)PumpChartDisplay.GridLineTypeY;
|
AxisY.GridLines.Visible = true;
|
}
|
|
/// <summary>
|
/// 设置图表
|
/// </summary>
|
public static void SetChartDisplay(XRChart chart)
|
{
|
chart.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Right;
|
chart.Legend.Border.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
chart.Legend.Direction = DevExpress.XtraCharts.LegendDirection.LeftToRight;
|
chart.Legend.MarkerMode = DevExpress.XtraCharts.LegendMarkerMode.Marker;
|
/* chart.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False;
|
chart.SeriesSelectionMode = SeriesSelectionMode.Point;*/
|
|
SetChartBackColor(chart);
|
}
|
|
/// <summary>
|
/// 设置图表背景色
|
/// </summary>
|
/// <param name="chart"></param>
|
public static void SetChartBackColor(XRChart chart)
|
{
|
chart.BackColor = PumpChartDisplay.ChartBackColor;
|
foreach (var title in chart.Titles)
|
{
|
if (title is ChartTitle chartTitle)
|
chartTitle.TextColor = PumpChartDisplay.ChartChartTitle;
|
}
|
|
if (chart.Diagram is XYDiagram xyDiagram)
|
{
|
xyDiagram.DefaultPane.Title.Alignment = StringAlignment.Near;
|
xyDiagram.DefaultPane.Title.DXFont = new Font("Tahoma", 9);
|
xyDiagram.DefaultPane.Title.EnableAntialiasing = DevExpress.Utils.DefaultBoolean.True;
|
xyDiagram.DefaultPane.BackColor = PumpChartDisplay.ChartBackColor;
|
for (int i = 0; i < xyDiagram.Panes.Count; i++)
|
{
|
xyDiagram.Panes[i].BackColor = PumpChartDisplay.ChartBackColor;
|
}
|
|
xyDiagram.AxisX.GridLines.MinorColor = Color.Silver;
|
xyDiagram.AxisY.GridLines.MinorColor = Color.Silver;
|
|
for (int i = 0; i < xyDiagram.SecondaryAxesX.Count; i++)
|
{
|
var axis = xyDiagram.SecondaryAxesX[i];
|
axis.GridLines.MinorColor = Color.Silver;
|
}
|
|
for (int i = 0; i < xyDiagram.SecondaryAxesY.Count; i++)
|
{
|
var axis = xyDiagram.SecondaryAxesY[i];
|
axis.GridLines.MinorColor = Color.Silver;
|
}
|
}
|
}
|
|
public static TextAnnotation AddAnnotation(string tag, string caption, Color color, AxisYBase axis_y, XYDiagramPaneBase pane, Yw.Geometry.Point2d pt, double angle = -10, double connector_length = 20)
|
{
|
if (pt == null)
|
return null;
|
var anchor_pt = pt;
|
var pane_anchor_pt = new DevExpress.XtraCharts.PaneAnchorPoint();
|
pane_anchor_pt.Pane = pane;
|
pane_anchor_pt.AxisYCoordinate.Axis = axis_y;
|
pane_anchor_pt.AxisXCoordinate.AxisValue = anchor_pt.X;
|
pane_anchor_pt.AxisYCoordinate.AxisValue = anchor_pt.Y;
|
pane_anchor_pt.Tag = tag;
|
|
var relative_position = new DevExpress.XtraCharts.RelativePosition();
|
relative_position.Angle = angle;
|
relative_position.ConnectorLength = connector_length;
|
|
var text_annotation = new TextAnnotation();
|
text_annotation.AnchorPoint = pane_anchor_pt;
|
text_annotation.AutoHeight = true;
|
text_annotation.AutoWidth = true;
|
text_annotation.BackColor = System.Drawing.Color.Transparent;
|
text_annotation.Border.Color = System.Drawing.Color.Transparent;
|
text_annotation.Border.Visibility = DefaultBoolean.False;
|
text_annotation.ConnectorStyle = DevExpress.XtraCharts.AnnotationConnectorStyle.None;
|
text_annotation.Tag = 1;
|
text_annotation.Padding.Bottom = 1;
|
text_annotation.Padding.Left = 1;
|
text_annotation.Padding.Right = 1;
|
text_annotation.Padding.Top = 1;
|
text_annotation.RuntimeMoving = false;
|
text_annotation.RuntimeAnchoring = true;
|
text_annotation.RuntimeResizing = false;
|
text_annotation.RuntimeRotation = false;
|
text_annotation.RuntimeEditing = false;
|
text_annotation.Text = caption;
|
text_annotation.TextColor = color;
|
text_annotation.ShapePosition = relative_position;
|
text_annotation.Visible = true;
|
text_annotation.EnableAntialiasing = DefaultBoolean.True;
|
|
text_annotation.DXFont = new DevExpress.Drawing.DXFont("", 8F);
|
return text_annotation;
|
}
|
|
public static double RoundUpMax(double value)
|
{
|
if (value > 50 && value < 100)
|
return 100;
|
double power = Math.Pow(10, Math.Floor(Math.Log10(value)));
|
|
// 如果 power 太大,缩小基数
|
if (value / power < 2)
|
{
|
power /= 10; // 缩小基数,使其更接近输入值
|
}
|
|
// 向上取整到最近的 power 的倍数
|
return Math.Ceiling(value / power) * power;
|
}
|
|
public static double RoundDownMin(double value)
|
{
|
// 处理值为 0 的情况
|
if (value == 0)
|
{
|
return 0;
|
}
|
|
// 计算最接近的 10 的幂次
|
double power = Math.Pow(10, Math.Floor(Math.Log10(Math.Abs(value))));
|
|
if (value >= 0)
|
{
|
// 正数向下取整到最近的 power 的倍数
|
return Math.Floor(value / power) * power;
|
}
|
else
|
{
|
// 负数也向下取整到最近的 power 的倍数(绝对值更大)
|
return -Math.Ceiling(-value / power) * power;
|
}
|
}
|
|
/// <summary>
|
/// 获取最大的间隔
|
/// </summary>
|
/// <param name="minValue">最小值</param>
|
/// <param name="maxValue">最大值</param>
|
/// <param name="spaceNum">间隔数量</param>
|
/// <param name="minDisplay">最小显示参数</param>
|
/// <param name="maxDisplay">最大显示参数</param>
|
/// <returns></returns>
|
public static void GetOptimalSpaceMax(double minValue, double maxValue, int spaceNum, out double minDisplay, out double maxDisplay)
|
{
|
PhartCoordinateHelper.GetOptimalSpaceMax(minValue, maxValue, spaceNum, out minDisplay, out maxDisplay);
|
}
|
|
public static void DrawEquipPoint(XYDiagram diagram, AxisX axis_x_flow, AxisY axis_y_head, SecondaryAxisY axis_y_power, SecondaryAxisY axis_y_eff, Graphics cache, Pen pen, HydroEnergyAnalyPipeItemViewModel sect_pt)
|
{
|
if (sect_pt == null)
|
return;
|
if (!sect_pt.PipeQ.HasValue || !sect_pt.PipeH.HasValue)
|
{
|
return;
|
}
|
double Q = sect_pt.PipeQ.Value;
|
double H = sect_pt.PipeH.Value;
|
// double? E = sect_pt.E;
|
// double? P = sect_pt.P;
|
|
var offset_size = 4;
|
var qh_pt = diagram.DiagramToPoint(Q, H, axis_x_flow, axis_y_head);
|
|
var qh_pt_x = qh_pt.Point.X;
|
var qh_pt_y = qh_pt.Point.Y;
|
//cache.DrawLine(pen, new Point(qh_pt_x, qh_pt_y - offset_size), new Point(qh_pt_x, qh_pt_y + offset_size));
|
|
var x = qh_pt_x;
|
var y = qh_pt_y;
|
|
var length = 8;
|
using Pen pen1 = new Pen(Color.Magenta, 1);
|
cache.DrawLine(pen1, new Point(x - length, y), new Point(x + length, y));
|
cache.DrawLine(pen1, new Point(x, y - length), new Point(x, y + length));
|
cache.DrawEllipse(pen1, new Rectangle(x - 5, y - 5, length, length));
|
|
//pen.Width = 1;
|
//pen.DashStyle = System.Drawing.Drawing2D.DashStyle.Dot;
|
//pen.Color = Color.Black;
|
//cache.DrawEllipse(pen, new Rectangle(x - 2, y - 2, 4, 4));
|
//cache.DrawEllipse(pen, new Rectangle(x - 5, y - 5, 10, 10));
|
//cache.DrawEllipse(pen, new Rectangle(x - 10, y - 10, 20, 20));
|
|
/* if (E.HasValue)
|
{
|
var qe_pt = diagram.DiagramToPoint(Q, E.Value, axis_x_flow, axis_y_eff);
|
var qe_pt_x = qe_pt.Point.X;
|
var qe_pt_y = qe_pt.Point.Y;
|
cache.DrawLine(pen, new Point(qe_pt_x, qe_pt_y - offset_size), new Point(qe_pt_x, qe_pt_y + offset_size));
|
}
|
|
if (P.HasValue)
|
{
|
var qp_pt = diagram.DiagramToPoint(Q, P.Value, axis_x_flow, axis_y_power);
|
var qp_pt_x = qp_pt.Point.X;
|
var qp_pt_y = qp_pt.Point.Y;
|
cache.DrawLine(pen, new Point(qp_pt_x, qp_pt_y - offset_size), new Point(qp_pt_x, qp_pt_y + offset_size));
|
}*/
|
}
|
|
public static void DrawEquipLine(XYDiagram diagram, AxisX axis_x_flow, AxisY axis_y_head, Graphics cache, Pen pen, HydroEnergyAnalyPipeItemViewModel sect_pt)
|
{
|
if (sect_pt == null)
|
return;
|
if (!sect_pt.PipeQ.HasValue || !sect_pt.PipeH.HasValue)
|
{
|
return;
|
}
|
double Q = sect_pt.PipeQ.Value;
|
double H = sect_pt.PipeH.Value;
|
double StartH = sect_pt.StartH;
|
var pt_f_list = new List<Yw.Geometry.Point2d>();
|
var start_point = new Yw.Geometry.Point2d(0.0, StartH);
|
var end_point = new Yw.Geometry.Point2d(Q, H);
|
pt_f_list = Yw.Pump.PerformParabolaHelper.GetEquipCurvePointList(start_point, end_point, 30);
|
|
if (pt_f_list == null || !pt_f_list.Any())
|
return;
|
var pointF = new List<PointF>();
|
|
foreach (var pt in pt_f_list)
|
{
|
var x = pt.X;
|
var y = pt.Y;
|
var c_pt = diagram.DiagramToPoint(x, y, axis_x_flow, axis_y_head);
|
pointF.Add(new PointF(c_pt.Point.X, c_pt.Point.Y));
|
}
|
using var path = new System.Drawing.Drawing2D.GraphicsPath();
|
path.AddCurve(pointF.ToArray());
|
cache.DrawPath(pen, path);
|
}
|
}
|
}
|