using DevExpress.Charts.Native;
|
using DevExpress.Utils;
|
using DevExpress.XtraCharts;
|
using DevExpress.XtraReports.UI;
|
using Furion.DataValidation;
|
using Microsoft.CodeAnalysis;
|
using Yw.WinFrmUI.Phart;
|
|
namespace HStation.WinFrmUI
|
{
|
public partial class SimulationCommonReport : DevExpress.XtraReports.UI.XtraReport
|
{
|
public SimulationCommonReport()
|
{
|
InitializeComponent();
|
}
|
|
private List<Tuple<XYDiagram, AxisX, AxisY, SecondaryAxisY, SecondaryAxisY, HydroEnergyAnalyPipeItemViewModel>> _pointTuple = new();
|
|
private int _currentChartIndex; // 当前图表索引
|
|
public void SetBingdingData(SimulationPrintViewModel vm)
|
{
|
// A4设置 827 1169
|
this.PaperKind = DevExpress.Drawing.Printing.DXPaperKind.A4;
|
this.Margins = new DevExpress.Drawing.DXMargins(50, 50, 50, 50);
|
|
// 内容宽度
|
float contentWidth = 727F; // 内容宽度
|
float firstCaptionHeight = 30F; // 一级标题高度
|
float pageHeight = 1069F; // 页面可用高度
|
float currentY = 0F; // 当前Y坐标
|
|
#region 页眉
|
|
var labForCorp = new XRLabel();
|
labForCorp.Name = "页眉";
|
labForCorp.Text = "杭州科维节能技术股份有限公司";
|
labForCorp.Multiline = true;
|
labForCorp.LocationFloat = new DevExpress.Utils.PointFloat(482F, 16F);
|
labForCorp.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
labForCorp.SizeF = new System.Drawing.SizeF(236F, 24F);
|
labForCorp.StylePriority.UseTextAlignment = false;
|
labForCorp.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
|
this.TopMargin.Controls.Add(labForCorp);
|
|
#endregion 页眉
|
|
#region 页脚
|
|
var pageForCurrentNum = new XRPageInfo();
|
pageForCurrentNum.LocationFloat = new DevExpress.Utils.PointFloat(617F, 10.00001F);
|
pageForCurrentNum.Name = "页脚";
|
pageForCurrentNum.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
pageForCurrentNum.SizeF = new System.Drawing.SizeF(100F, 23F);
|
pageForCurrentNum.StylePriority.UseTextAlignment = false;
|
pageForCurrentNum.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
|
pageForCurrentNum.TextFormatString = "第{0}页";
|
this.BottomMargin.Controls.Add(pageForCurrentNum);
|
|
#endregion 页脚
|
|
#region 标题
|
|
var labForTitle = new XRLabel();
|
labForTitle.AnchorHorizontal = ((DevExpress.XtraReports.UI.HorizontalAnchorStyles)((DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right)));
|
labForTitle.Font = new DevExpress.Drawing.DXFont("Arial", 15F, DevExpress.Drawing.DXFontStyle.Bold);
|
labForTitle.LocationFloat = new DevExpress.Utils.PointFloat(0F, currentY);
|
labForTitle.Multiline = true;
|
labForTitle.Name = "labTitle";
|
labForTitle.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 96F);
|
labForTitle.SizeF = new System.Drawing.SizeF(727F, 50F);
|
labForTitle.StylePriority.UseFont = false;
|
labForTitle.StylePriority.UseTextAlignment = false;
|
labForTitle.Text = $"{vm.Project.Name}项目节能报告";
|
labForTitle.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter;
|
this.Detail.Controls.Add(labForTitle);
|
currentY += 50F;
|
|
#endregion 标题
|
|
#region 一、项目概述
|
|
var labForDescription = ReportHelper.CreateFirstCaption("一、项目概述", contentWidth, firstCaptionHeight, 0F, currentY);
|
this.Detail.Controls.Add(labForDescription);
|
currentY += firstCaptionHeight;
|
|
#endregion 一、项目概述
|
|
#region 项目概述内容
|
|
var labForDescriptionContent = new XRLabel();
|
labForDescriptionContent.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right);
|
labForDescriptionContent.Font = new DevExpress.Drawing.DXFont("Arial", 10F);
|
labForDescriptionContent.LocationFloat = new DevExpress.Utils.PointFloat(0F, currentY);
|
labForDescriptionContent.Multiline = true;
|
labForDescriptionContent.Name = "labForDescriptionContent";
|
labForDescriptionContent.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 96F);
|
labForDescriptionContent.SizeF = new System.Drawing.SizeF(727F, 100F);
|
labForDescriptionContent.StylePriority.UseFont = false;
|
labForDescriptionContent.StylePriority.UseTextAlignment = false;
|
labForDescriptionContent.Text = $" {vm.Project.Description}";
|
labForDescriptionContent.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
|
this.Detail.Controls.Add(labForDescriptionContent);
|
currentY += 100F;
|
|
#endregion 项目概述内容
|
|
// 二、水泵明细
|
var labForPumpList = new XRLabel();
|
labForPumpList.AnchorHorizontal = (DevExpress.XtraReports.UI.HorizontalAnchorStyles.Left | DevExpress.XtraReports.UI.HorizontalAnchorStyles.Right);
|
labForPumpList.Font = new DevExpress.Drawing.DXFont("Arial", 12F, DevExpress.Drawing.DXFontStyle.Bold);
|
labForPumpList.LocationFloat = new DevExpress.Utils.PointFloat(0F, currentY);
|
labForPumpList.Multiline = true;
|
labForPumpList.Name = "labForPumpList";
|
labForPumpList.Padding = new DevExpress.XtraPrinting.PaddingInfo(2, 2, 0, 0, 100F);
|
labForPumpList.SizeF = new System.Drawing.SizeF(727F, 25F);
|
labForPumpList.StylePriority.UseFont = false;
|
labForPumpList.StylePriority.UseTextAlignment = false;
|
labForPumpList.Text = "二、水泵明细";
|
labForPumpList.TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleLeft;
|
this.Detail.Controls.Add(labForPumpList);
|
currentY += 25F;
|
|
// 水泵明细内容
|
if (vm.PumpList != null && vm.PumpList.Count > 0)
|
{
|
// 创建 XRTable
|
var tableForPumpList = new XRTable();
|
tableForPumpList.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
tableForPumpList.SizeF = new SizeF(727F, 30F + vm.PumpList.Count * 25F); // 设置大小
|
|
// 创建表头行
|
XRTableRow headerRowPumpList = new XRTableRow();
|
headerRowPumpList.BackColor = Color.LightGray; // 设置背景颜色
|
|
// 添加表头列
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("分组", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("型号", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("名称", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("编码", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("额定流量", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("额定扬程", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("额定功率(KW)", 100));
|
headerRowPumpList.Cells.Add(ReportHelper.CreateTableCell("额定转速", 100));
|
|
// 将表头行添加到表格
|
tableForPumpList.Rows.Add(headerRowPumpList);
|
|
// 遍历水泵
|
foreach (var pump in vm.PumpList)
|
{
|
// 创建数据行
|
var dataRow = new XRTableRow();
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.BeginGroup,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.ModelType,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.Name,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.Code,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.RatedQ.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.RatedH.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.RatedP.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = pump.RatedN.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
tableForPumpList.Rows.Add(dataRow);
|
}
|
|
// 将表格添加到Detail
|
this.Detail.Controls.Add(tableForPumpList);
|
currentY += tableForPumpList.HeightF;
|
//currentY += vm.PumpList.Count*10;
|
}
|
|
var labForWorking = ReportHelper.CreateFirstCaption("三、工况列表", contentWidth, firstCaptionHeight, 0F, currentY);
|
this.Detail.Controls.Add(labForWorking);
|
currentY += firstCaptionHeight;
|
|
if (vm.WorkingList != null && vm.WorkingList.Count > 0) //工况列表开始
|
{
|
foreach (var working in vm.WorkingList)
|
{
|
currentY += 30F;
|
var labForWorkingName = ReportHelper.CreateGroupCaption(working.Name, contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForWorkingName);
|
currentY += 50F;
|
|
var labForAccuracy = ReportHelper.CreateFirstCaption("(1)、精度评估", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForAccuracy);
|
currentY += firstCaptionHeight;
|
|
var accuracyScaleChart = ReportHelper.CreateAccuracyScale(working.Accuracy.Scale, 300F, 230F, currentY);
|
Detail.Controls.Add(accuracyScaleChart);
|
var accuracyFlowChart = ReportHelper.CreateAccuracyItem(working.Accuracy.Flow?.AvgError ?? 0, 213F, 230F, 300F, currentY);
|
Detail.Controls.Add(accuracyFlowChart);
|
var accuracyPressChart = ReportHelper.CreateAccuracyItem(working.Accuracy.Press?.AvgError ?? 0, 213F, 230F, 513F, currentY);
|
Detail.Controls.Add(accuracyPressChart);
|
currentY += accuracyScaleChart.HeightF;
|
|
currentY += 20F;
|
|
var labForAccuracyList = ReportHelper.CreateFirstCaption("(1.1)、评估列表", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForAccuracyList);
|
currentY += firstCaptionHeight;
|
|
#region 评估列表
|
|
if (working.Accuracy.Items != null && working.Accuracy.Items.Count > 0)
|
{ // 创建 XRTable
|
var tableForAccuracyList = new XRTable();
|
tableForAccuracyList.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
tableForAccuracyList.SizeF = new SizeF(727F, 30F + working.Accuracy.Items.Count * 25F); // 设置大小
|
|
// 创建表头行
|
XRTableRow headerRowAccuracyList = new XRTableRow();
|
headerRowAccuracyList.BackColor = Color.LightGray; // 设置背景颜色
|
|
// 添加表头列
|
headerRowAccuracyList.Cells.Add(ReportHelper.CreateTableCell("评估构件", 100));
|
headerRowAccuracyList.Cells.Add(ReportHelper.CreateTableCell("评估项", 100));
|
headerRowAccuracyList.Cells.Add(ReportHelper.CreateTableCell("监测值", 100));
|
headerRowAccuracyList.Cells.Add(ReportHelper.CreateTableCell("计算值", 100));
|
headerRowAccuracyList.Cells.Add(ReportHelper.CreateTableCell("评估误差", 100));
|
|
// 将表头行添加到表格
|
tableForAccuracyList.Rows.Add(headerRowAccuracyList);
|
|
foreach (var item in working.Accuracy.Items)
|
{
|
// 创建数据行
|
var dataRow = new XRTableRow();
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.EvaluateName,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.EvaluateItem,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.MonitorValue.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CalcuValue.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.EvaluateError?.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
ForeColor = Color.Red,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
tableForAccuracyList.Rows.Add(dataRow);
|
}
|
// 将表格添加到Detail
|
this.Detail.Controls.Add(tableForAccuracyList);
|
currentY += tableForAccuracyList.HeightF;
|
|
currentY += 20F;
|
}
|
|
#endregion 评估列表
|
|
#region 水泵分析
|
|
var labForPump = ReportHelper.CreateFirstCaption("(2)、水泵分析", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForPump);
|
currentY += 20F;
|
|
if (working.PumpAnaly != null && working.PumpAnaly.Items != null && working.PumpAnaly.Items.Count > 0)
|
{
|
foreach (var item in working.PumpAnaly.Items)
|
{
|
var label = ReportHelper.CreateFirstCaption(item.Name, contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(label);
|
currentY += 20F;
|
|
#region 创建
|
|
XRChart chart = new XRChart();
|
((System.ComponentModel.ISupportInitialize)(chart)).BeginInit();
|
chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
chart.WidthF = contentWidth;
|
chart.HeightF = 700F;
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
ReportHelper.SetChartDisplay(chart);
|
// 创建 XY 图表
|
XYDiagram xyDiagram = new XYDiagram();
|
|
// 配置主 X 轴
|
xyDiagram.AxisX.Title.Text = "流量(m³/h)";
|
xyDiagram.AxisX.Title.Visibility = DefaultBoolean.True;
|
// xyDiagram.AxisX.Visibility = DefaultBoolean.True;
|
|
// 配置主 Y 轴
|
xyDiagram.AxisY.Title.Text = "扬程/m";
|
xyDiagram.AxisY.Title.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisY.Visibility = DefaultBoolean.True;
|
|
// 创建两个面板
|
XYDiagramPane pane1 = new XYDiagramPane();
|
pane1.Name = "Pane 1";
|
xyDiagram.Panes.Add(pane1);
|
|
XYDiagramPane pane2 = new XYDiagramPane();
|
pane2.Name = "Pane 2";
|
xyDiagram.Panes.Add(pane2);
|
|
// 创建次要 Y 轴
|
SecondaryAxisY secondaryAxisY1 = new SecondaryAxisY("Secondary Y-Axis 1");
|
secondaryAxisY1.Title.Text = "功率(KW)";
|
secondaryAxisY1.Title.Visibility = DefaultBoolean.True;
|
secondaryAxisY1.Visibility = DefaultBoolean.True;
|
secondaryAxisY1.GridLines.Visible = true;
|
secondaryAxisY1.Tickmarks.Thickness = 1;
|
secondaryAxisY1.GridLines.Color = Color.LightGray;
|
|
xyDiagram.SecondaryAxesY.Add(secondaryAxisY1);
|
|
SecondaryAxisY secondaryAxisY2 = new SecondaryAxisY("Secondary Y-Axis 2");
|
secondaryAxisY2.Title.Text = "效率(%)";
|
secondaryAxisY2.Title.Visibility = DefaultBoolean.True;
|
secondaryAxisY2.Visibility = DefaultBoolean.True;
|
secondaryAxisY2.GridLines.Visible = true;
|
secondaryAxisY2.Tickmarks.Thickness = 1;
|
secondaryAxisY2.GridLines.Color = Color.LightGray;
|
|
xyDiagram.SecondaryAxesY.Add(secondaryAxisY2);
|
|
xyDiagram.AxisX.VisibleInPanesSerializable = "1";
|
chart.Diagram = xyDiagram;
|
((System.ComponentModel.ISupportInitialize)(xyDiagram)).EndInit();
|
|
#endregion 创建
|
|
// 创建第一个系列
|
Series series1 = new Series("Series 1", ViewType.Spline);
|
foreach (var qh in item.RatedCurveQH)
|
{
|
series1.Points.Add(new SeriesPoint(qh.X, qh.Y));
|
}
|
if (item.CurrentQ != null && item.CurrentH != null)
|
{
|
Yw.Geometry.Point2d anchorPoint = new Yw.Geometry.Point2d((double)item.CurrentQ, (double)item.CurrentH + 3); // 锚点坐标
|
TextAnnotation annotation = ReportHelper.AddAnnotation("SampleTag", "运行曲线(50Hz)", Color.Red, xyDiagram.AxisY, xyDiagram.DefaultPane, anchorPoint);
|
if (annotation != null)
|
{
|
chart.AnnotationRepository.Add(annotation);
|
}
|
}
|
|
((SplineSeriesView)series1.View).MarkerVisibility = DefaultBoolean.False;
|
series1.LabelsVisibility = DefaultBoolean.False;
|
|
var min_flow = item.RatedCurveQH.Min(x => x.X);
|
var max_flow = item.RatedCurveQH.Max(x => x.X);
|
|
var min_head = item.RatedCurveQH.Min(x => x.Y);
|
var max_head = item.RatedCurveQH.Max(x => x.Y);
|
|
var min_eff = item.RatedCurveQE.Min(x => x.Y);
|
var max_eff = item.RatedCurveQE.Max(x => x.Y);
|
|
var min_power = item.RatedCurveQP.Min(x => x.Y);
|
var max_power = item.RatedCurveQP.Max(x => x.Y);
|
|
ReportHelper.GetOptimalSpaceMax(min_flow, max_flow, 10, out double min_flow_chart, out double max_flow_chart);
|
ReportHelper.GetOptimalSpaceMax(min_head, max_head, 6, out double min_head_chart, out double max_head_chart);
|
|
ReportHelper.GetOptimalSpaceMax(min_power, max_power, 4, out double min_power_chart, out double max_power_chart);
|
|
min_power_chart = ReportHelper.RoundDownMin(min_power_chart);
|
|
min_eff = 40;
|
|
ReportHelper.GetOptimalSpaceMax(0, 100, 5, out double min_eff_chart, out double max_eff_chart);
|
|
min_eff_chart = ReportHelper.RoundDownMin(min_eff_chart);
|
|
ReportHelper.SetAxisX(xyDiagram, min_flow_chart, max_flow_chart);
|
ReportHelper.SetAxisY(xyDiagram, min_head_chart, max_head_chart);
|
chart.Series.Add(series1);
|
Series qhWorking = new Series("Series 5", ViewType.Spline);
|
qhWorking.LabelsVisibility = DefaultBoolean.False;
|
if (item.CurrentQ != null && item.CurrentH != null)
|
{
|
qhWorking.Points.Add(new SeriesPoint(item.CurrentQ, item.CurrentH));
|
chart.Series.Add(qhWorking);
|
}
|
// 创建第二个系列
|
Series series2 = new Series("Series 2", ViewType.Spline);
|
foreach (var qe in item.RatedCurveQE)
|
{
|
series2.Points.Add(new SeriesPoint(qe.X, qe.Y));
|
}
|
|
ReportHelper.SetSecondaryAxisY(secondaryAxisY2, min_eff_chart, max_eff_chart);
|
((XYDiagramSeriesViewBase)series2.View).Pane = pane2;
|
((XYDiagramSeriesViewBase)series2.View).AxisY = secondaryAxisY2;
|
((SplineSeriesView)series2.View).MarkerVisibility = DefaultBoolean.False;
|
series2.LabelsVisibility = DefaultBoolean.False;
|
Series qeWorking = new Series("Series 6", ViewType.Spline);
|
qeWorking.LabelsVisibility = DefaultBoolean.False;
|
if (item.CurrentQ != null && item.CurrentE != null)
|
{
|
qeWorking.Points.Add(new SeriesPoint(item.CurrentQ, item.CurrentE));
|
((XYDiagramSeriesViewBase)qeWorking.View).Pane = pane2;
|
((XYDiagramSeriesViewBase)qeWorking.View).AxisY = secondaryAxisY2;
|
chart.Series.Add(qeWorking);
|
}
|
chart.Series.Add(series2);
|
// 创建第三个系列
|
Series series3 = new Series("Series 3", ViewType.Spline);
|
foreach (var qp in item.RatedCurveQP)
|
{
|
series3.Points.Add(new SeriesPoint(qp.X, qp.Y));
|
}
|
ReportHelper.SetSecondaryAxisY(secondaryAxisY1, min_power_chart, max_power_chart);
|
|
((XYDiagramSeriesViewBase)series3.View).Pane = pane1;
|
((XYDiagramSeriesViewBase)series3.View).AxisY = secondaryAxisY1;
|
series3.LabelsVisibility = DefaultBoolean.False;
|
((SplineSeriesView)series3.View).MarkerVisibility = DefaultBoolean.False;
|
Series qpWorking = new Series("Series 8", ViewType.Spline);
|
qpWorking.LabelsVisibility = DefaultBoolean.False;
|
if (item.CurrentQ != null && item.CurrentP != null)
|
{
|
qpWorking.Points.Add(new SeriesPoint(item.CurrentQ, item.CurrentP));
|
((XYDiagramSeriesViewBase)qpWorking.View).Pane = pane1;
|
((XYDiagramSeriesViewBase)qpWorking.View).AxisY = secondaryAxisY1;
|
chart.Series.Add(qpWorking);
|
}
|
|
chart.Series.Add(series3);
|
((System.ComponentModel.ISupportInitialize)(chart)).EndInit();
|
Detail.Controls.Add(chart);
|
currentY += chart.HeightF;
|
}
|
|
currentY += 20F;
|
}
|
|
var labForPumpParallel = ReportHelper.CreateFirstCaption("(2.1)、水泵并联", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForPumpParallel);
|
currentY += 50F;
|
if (working.PumpAnaly != null && working.PumpAnaly.Parallel != null && working.PumpAnaly.Parallel.Items.Count > 0)
|
{
|
var group = working.PumpAnaly.Parallel.Items.GroupBy(x => x.BeginGroup).ToArray();
|
foreach (var item in group)
|
{
|
var label = ReportHelper.CreateFirstCaption(item.Key, contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(label);
|
currentY += 20F;
|
|
XRChart chart = new XRChart();
|
((System.ComponentModel.ISupportInitialize)(chart)).BeginInit();
|
chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
chart.WidthF = contentWidth;
|
chart.HeightF = 600F;
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
|
// 创建 XY 图表
|
XYDiagram xyDiagram = new XYDiagram();
|
((System.ComponentModel.ISupportInitialize)(xyDiagram)).BeginInit();
|
// 配置主 X 轴
|
xyDiagram.AxisX.Title.Text = "流量(m³/h)";
|
xyDiagram.AxisX.Title.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisX.Visibility = DefaultBoolean.True;
|
|
// 配置主 Y 轴
|
xyDiagram.AxisY.Title.Text = "扬程/m";
|
xyDiagram.AxisY.Title.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisY.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisX.VisibleInPanesSerializable = "1";
|
// 创建两个面板
|
XYDiagramPane pane1 = new XYDiagramPane();
|
pane1.Name = "Pane 1";
|
xyDiagram.Panes.Add(pane1);
|
|
XYDiagramPane pane2 = new XYDiagramPane();
|
pane2.Name = "Pane 2";
|
xyDiagram.Panes.Add(pane2);
|
|
// 创建次要 Y 轴
|
SecondaryAxisY secondaryAxisY1 = new SecondaryAxisY("Secondary Y-Axis 1");
|
secondaryAxisY1.Title.Text = "功率(KW)";
|
secondaryAxisY1.Title.Visibility = DefaultBoolean.True;
|
secondaryAxisY1.Visibility = DefaultBoolean.True;
|
secondaryAxisY1.GridLines.Visible = true;
|
secondaryAxisY1.Tickmarks.Thickness = 1;
|
secondaryAxisY1.GridLines.Color = Color.LightGray;
|
|
xyDiagram.SecondaryAxesY.Add(secondaryAxisY1);
|
|
SecondaryAxisY secondaryAxisY2 = new SecondaryAxisY("Secondary Y-Axis 2");
|
secondaryAxisY2.Title.Text = "效率(%)";
|
secondaryAxisY2.Title.Visibility = DefaultBoolean.True;
|
secondaryAxisY2.Visibility = DefaultBoolean.True;
|
secondaryAxisY2.GridLines.Visible = true;
|
secondaryAxisY2.Tickmarks.Thickness = 1;
|
secondaryAxisY2.GridLines.Color = Color.LightGray;
|
|
xyDiagram.SecondaryAxesY.Add(secondaryAxisY2);
|
|
var pipe = working.PumpAnaly.Parallel.Items[0];
|
|
chart.Diagram = xyDiagram;
|
((System.ComponentModel.ISupportInitialize)(xyDiagram)).EndInit();
|
|
foreach (var valve in item)
|
{
|
if (valve.Items != null && valve.Items.Count > 0)
|
{
|
foreach (var curve in valve.Items)
|
{
|
Series seriesQh = new Series("Series Qh", ViewType.Spline);
|
foreach (var qh in curve.CurrentCurveQH)
|
{
|
seriesQh.Points.Add(new SeriesPoint(qh.X, qh.Y));
|
}
|
((SplineSeriesView)seriesQh.View).MarkerVisibility = DefaultBoolean.False;
|
seriesQh.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(seriesQh);
|
|
Yw.Geometry.Point2d anchorPointQh = new Yw.Geometry.Point2d((double)valve.CurveQH.Last().X, (double)valve.CurveQH.Last().Y + 3); // 锚点坐标
|
TextAnnotation annotation = ReportHelper.AddAnnotation("SampleTag", "并联线", Color.Red, xyDiagram.AxisY, xyDiagram.DefaultPane, anchorPointQh);
|
if (annotation != null)
|
{
|
chart.AnnotationRepository.Add(annotation);
|
}
|
|
Series seriesQe = new Series("Series Qe", ViewType.Spline);
|
foreach (var qe in curve.CurrentCurveQE)
|
{
|
seriesQe.Points.Add(new SeriesPoint(qe.X, qe.Y));
|
}
|
|
((XYDiagramSeriesViewBase)seriesQe.View).Pane = pane2;
|
((XYDiagramSeriesViewBase)seriesQe.View).AxisY = secondaryAxisY2;
|
((SplineSeriesView)seriesQe.View).MarkerVisibility = DefaultBoolean.False;
|
seriesQe.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(seriesQe);
|
|
Series seriesQp = new Series("Series Qp", ViewType.Spline);
|
foreach (var qp in curve.CurrentCurveQP)
|
{
|
seriesQp.Points.Add(new SeriesPoint(qp.X, qp.Y));
|
}
|
|
((XYDiagramSeriesViewBase)seriesQp.View).Pane = pane1;
|
((XYDiagramSeriesViewBase)seriesQp.View).AxisY = secondaryAxisY1;
|
((SplineSeriesView)seriesQp.View).MarkerVisibility = DefaultBoolean.False;
|
seriesQp.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(seriesQp);
|
}
|
}
|
// 创建第一个系列
|
Series series1 = new Series("Series 1", ViewType.Spline);
|
if (valve.CurveQH != null)
|
{
|
foreach (var qh in valve.CurveQH)
|
{
|
series1.Points.Add(new SeriesPoint(qh.X, qh.Y));
|
}
|
((SplineSeriesView)series1.View).MarkerVisibility = DefaultBoolean.False;
|
((SplineSeriesView)series1.View).Color = Color.Black;
|
series1.LabelsVisibility = DefaultBoolean.False;
|
}
|
chart.Series.Add(series1);
|
|
// 创建第二个系列
|
Series series2 = new Series("Series 2", ViewType.Spline);
|
if (valve.CurveQE != null)
|
{
|
foreach (var qe in valve.CurveQE)
|
{
|
series2.Points.Add(new SeriesPoint(qe.X, qe.Y));
|
}
|
((XYDiagramSeriesViewBase)series2.View).Pane = pane2;
|
((XYDiagramSeriesViewBase)series2.View).AxisY = secondaryAxisY2;
|
((SplineSeriesView)series2.View).MarkerVisibility = DefaultBoolean.False;
|
((SplineSeriesView)series2.View).Color = Color.Black;
|
series2.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(series2);
|
}
|
|
// 创建第三个系列
|
Series series3 = new Series("Series 3", ViewType.Spline);
|
if (valve.CurveQP != null)
|
{
|
foreach (var qp in valve.CurveQP)
|
{
|
series3.Points.Add(new SeriesPoint(qp.X, qp.Y));
|
}
|
((XYDiagramSeriesViewBase)series3.View).Pane = pane1;
|
((XYDiagramSeriesViewBase)series3.View).AxisY = secondaryAxisY1;
|
((SplineSeriesView)series3.View).MarkerVisibility = DefaultBoolean.False;
|
((SplineSeriesView)series3.View).Color = Color.Black;
|
series3.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(series3);
|
}
|
|
if (item != null)
|
{
|
foreach (var itemInList in item)
|
{
|
if (itemInList.Items != null && itemInList.Items.Count > 0)
|
{
|
if (valve.CurveQH != null)
|
{
|
itemInList.Items[0].CurrentCurveQH.AddRange(valve.CurveQH);
|
break;
|
}
|
}
|
}
|
foreach (var itemInList in item)
|
{
|
if (itemInList.Items != null && itemInList.Items.Count > 0)
|
{
|
if (valve.CurveQE != null)
|
{
|
itemInList.Items[0].CurrentCurveQE.AddRange(valve.CurveQE);
|
break;
|
}
|
}
|
}
|
foreach (var itemInList in item)
|
{
|
if (itemInList.Items != null && itemInList.Items.Count > 0)
|
{
|
if (valve.CurveQP != null)
|
{
|
itemInList.Items[0].CurrentCurveQP.AddRange(valve.CurveQP);
|
break;
|
}
|
}
|
}
|
|
// 处理 X 轴设置
|
var allQHForXY = item
|
.Where(i => i.Items != null)
|
.SelectMany(i => i.Items)
|
.Where(inner => inner.CurrentCurveQH != null)
|
.SelectMany(inner => inner.CurrentCurveQH);
|
|
if (allQHForXY.Any())
|
{
|
var globalXMax = allQHForXY.Max(qh => qh.X);
|
var globalXMin = allQHForXY.Min(qh => qh.X);
|
var globalYMax = allQHForXY.Max(qh => qh.Y);
|
var globalYMin = allQHForXY.Min(qh => qh.Y);
|
ReportHelper.SetAxisX(xyDiagram, ReportHelper.RoundDownMin(globalXMin), ReportHelper.RoundUpMax(globalXMax));
|
ReportHelper.SetAxisY(xyDiagram, ReportHelper.RoundDownMin(globalYMin), ReportHelper.RoundUpMax(globalYMax));
|
}
|
|
// 处理 Y 轴设置
|
var allQpForY = item
|
.Where(i => i.Items != null)
|
.SelectMany(i => i.Items)
|
.Where(inner => inner.CurrentCurveQP != null)
|
.SelectMany(inner => inner.CurrentCurveQP);
|
|
if (allQpForY.Any())
|
{
|
var globalYMax = allQpForY.Max(qh => qh.Y);
|
var globalYMin = allQpForY.Min(qh => qh.Y);
|
ReportHelper.SetSecondaryAxisY(secondaryAxisY1, ReportHelper.RoundDownMin(globalYMin), ReportHelper.RoundUpMax(globalYMax));
|
}
|
|
// 处理 Y 轴设置
|
var allQeForY = item
|
.Where(i => i.Items != null)
|
.SelectMany(i => i.Items)
|
.Where(inner => inner.CurrentCurveQE != null)
|
.SelectMany(inner => inner.CurrentCurveQE);
|
|
if (allQeForY.Any())
|
{
|
var globalYMax = allQeForY.Max(qh => qh.Y);
|
var globalYMin = allQeForY.Min(qh => qh.Y);
|
ReportHelper.SetSecondaryAxisY(secondaryAxisY2, ReportHelper.RoundDownMin(globalYMin), ReportHelper.RoundUpMax(globalYMax));
|
}
|
}
|
}
|
((System.ComponentModel.ISupportInitialize)(chart)).EndInit();
|
|
Detail.Controls.Add(chart);
|
|
currentY += chart.HeightF;
|
}
|
|
currentY += 20F;
|
}
|
|
#endregion 水泵分析
|
|
#region 监测分析
|
|
var labForMonitor = ReportHelper.CreateFirstCaption("(3)、监测分析", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForMonitor);
|
currentY += 20F;
|
|
if (working.MonitorAnaly.Items != null && working.MonitorAnaly.Items.Count > 0)
|
{ // 创建 XRTable
|
var tableForMonitorList = new XRTable();
|
tableForMonitorList.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
tableForMonitorList.SizeF = new SizeF(727F, 30F + working.MonitorAnaly.Items.Count * 25F); // 设置大小
|
|
// 创建表头行
|
XRTableRow headerRowMonitorList = new XRTableRow();
|
headerRowMonitorList.BackColor = Color.LightGray; // 设置背景颜色
|
|
// 添加表头列
|
headerRowMonitorList.Cells.Add(ReportHelper.CreateTableCell("构件", 100));
|
headerRowMonitorList.Cells.Add(ReportHelper.CreateTableCell("属性", 100));
|
headerRowMonitorList.Cells.Add(ReportHelper.CreateTableCell("计算值", 100));
|
headerRowMonitorList.Cells.Add(ReportHelper.CreateTableCell("单位", 100));
|
|
// 将表头行添加到表格
|
tableForMonitorList.Rows.Add(headerRowMonitorList);
|
|
foreach (var item in working.MonitorAnaly.Items)
|
{
|
// 创建数据行
|
var dataRow = new XRTableRow();
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.VisualName,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.PropName,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CalcuValue?.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.UnitName,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
tableForMonitorList.Rows.Add(dataRow);
|
}
|
// 将表格添加到Detail
|
this.Detail.Controls.Add(tableForMonitorList);
|
currentY += tableForMonitorList.HeightF;
|
currentY += 20F;
|
}
|
|
#endregion 监测分析
|
|
#region 能耗分析
|
|
var labForEnergyAnaly = ReportHelper.CreateFirstCaption("(4)、能耗分析", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForEnergyAnaly);
|
currentY += 20F;
|
|
if (working.EnergyAnaly != null)
|
{
|
int groupIndex = 0;
|
if (working.EnergyAnaly.Items != null && working.EnergyAnaly.Items.Count > 0)
|
{
|
var group = working.EnergyAnaly.Items.GroupBy(x => x.BeginGroup).ToArray();
|
foreach (var item in group)
|
{
|
var label = ReportHelper.CreateFirstCaption(item.Key, contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(label);
|
currentY += 20F;
|
|
XRChart chart = new XRChart();
|
((System.ComponentModel.ISupportInitialize)(chart)).BeginInit();
|
chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
chart.WidthF = contentWidth;
|
chart.HeightF = 600F;
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
|
chart.CustomPaint += (sender, e) =>
|
{
|
using Pen pen = new(Color.Black, 2)
|
{
|
DashStyle = System.Drawing.Drawing2D.DashStyle.DashDotDot
|
};
|
ReportHelper.DrawEquipPoint(_pointTuple[_currentChartIndex].Item1, _pointTuple[_currentChartIndex].Item2, _pointTuple[_currentChartIndex].Item3, _pointTuple[_currentChartIndex].Item4, _pointTuple[_currentChartIndex].Item5, e.Graphics, pen, _pointTuple[_currentChartIndex].Item6);
|
ReportHelper.DrawEquipLine(_pointTuple[_currentChartIndex].Item1, _pointTuple[_currentChartIndex].Item2, _pointTuple[_currentChartIndex].Item3, e.Graphics, pen, _pointTuple[_currentChartIndex].Item6);
|
_currentChartIndex++;
|
};
|
|
// 创建 XY 图表
|
XYDiagram xyDiagram = new XYDiagram();
|
((System.ComponentModel.ISupportInitialize)(xyDiagram)).BeginInit();
|
xyDiagram.Tag = groupIndex;
|
// 配置主 X 轴
|
xyDiagram.AxisX.Title.Text = "流量(m³/h)";
|
xyDiagram.AxisX.Title.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisX.Visibility = DefaultBoolean.True;
|
|
// 配置主 Y 轴
|
xyDiagram.AxisY.Title.Text = "扬程/m";
|
xyDiagram.AxisY.Title.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisY.Visibility = DefaultBoolean.True;
|
xyDiagram.AxisX.VisibleInPanesSerializable = "1";
|
// 创建两个面板
|
XYDiagramPane pane1 = new XYDiagramPane();
|
pane1.Name = "Pane 1";
|
xyDiagram.Panes.Add(pane1);
|
|
XYDiagramPane pane2 = new XYDiagramPane();
|
pane2.Name = "Pane 2";
|
xyDiagram.Panes.Add(pane2);
|
|
// 创建次要 Y 轴
|
SecondaryAxisY secondaryAxisY1 = new SecondaryAxisY("Secondary Y-Axis 1");
|
secondaryAxisY1.Title.Text = "功率(KW)";
|
secondaryAxisY1.Title.Visibility = DefaultBoolean.True;
|
secondaryAxisY1.Visibility = DefaultBoolean.True;
|
secondaryAxisY1.GridLines.Visible = true;
|
secondaryAxisY1.Tickmarks.Thickness = 1;
|
secondaryAxisY1.GridLines.Color = Color.LightGray;
|
|
xyDiagram.SecondaryAxesY.Add(secondaryAxisY1);
|
|
SecondaryAxisY secondaryAxisY2 = new SecondaryAxisY("Secondary Y-Axis 2");
|
secondaryAxisY2.Title.Text = "效率(%)";
|
secondaryAxisY2.Title.Visibility = DefaultBoolean.True;
|
secondaryAxisY2.Visibility = DefaultBoolean.True;
|
secondaryAxisY2.GridLines.Visible = true;
|
secondaryAxisY2.Tickmarks.Thickness = 1;
|
secondaryAxisY2.GridLines.Color = Color.LightGray;
|
|
xyDiagram.SecondaryAxesY.Add(secondaryAxisY2);
|
|
var pipe = working.EnergyAnaly.Pipe.Items[groupIndex];
|
if (pipe != null)
|
{
|
_pointTuple.Add(new Tuple<XYDiagram, AxisX, AxisY, SecondaryAxisY, SecondaryAxisY, HydroEnergyAnalyPipeItemViewModel>(
|
xyDiagram,
|
xyDiagram.AxisX,
|
xyDiagram.AxisY,
|
secondaryAxisY2,
|
secondaryAxisY1,
|
pipe
|
));
|
}
|
|
groupIndex++;
|
chart.Diagram = xyDiagram;
|
((System.ComponentModel.ISupportInitialize)(xyDiagram)).EndInit();
|
|
foreach (var valve in item)
|
{
|
// 创建第一个系列
|
Series series1 = new Series("Series 1", ViewType.Spline);
|
if (valve.CurrentCurveQH != null)
|
{
|
foreach (var qh in valve.CurrentCurveQH)
|
{
|
series1.Points.Add(new SeriesPoint(qh.X, qh.Y));
|
}
|
((SplineSeriesView)series1.View).MarkerVisibility = DefaultBoolean.False;
|
series1.LabelsVisibility = DefaultBoolean.False;
|
}
|
chart.Series.Add(series1);
|
|
var pt_f_list = new List<Yw.Geometry.Point2d>();
|
if (pipe != null)
|
{
|
if (pipe.PipeH != null || pipe.PipeQ != null)
|
{
|
var start_point = new Yw.Geometry.Point2d(0.0, pipe.StartH);
|
var end_point = new Yw.Geometry.Point2d(pipe.PipeQ.Value, pipe.PipeH.Value);
|
pt_f_list = Yw.Pump.PerformParabolaHelper.GetEquipCurvePointList(start_point, end_point, 30);
|
}
|
}
|
|
if (item != null)
|
{
|
foreach (var itemInList in item)
|
{
|
if (itemInList.CurrentCurveQH != null)
|
{
|
if (pt_f_list != null)
|
{
|
itemInList.CurrentCurveQH.AddRange(pt_f_list);
|
break;
|
}
|
}
|
}
|
|
// 处理 X 轴设置
|
var allQHForX = item
|
.Where(singleItem => singleItem.CurrentCurveQH != null)
|
.SelectMany(singleItem => singleItem.CurrentCurveQH);
|
|
if (allQHForX.Any())
|
{
|
var globalXMax = allQHForX.Max(qh => qh.X);
|
var globalXMin = allQHForX.Min(qh => qh.X);
|
|
ReportHelper.SetAxisX(xyDiagram, globalXMin, ReportHelper.RoundUpMax(globalXMax));
|
}
|
|
// 处理 Y 轴设置
|
var allQHForY = item
|
.Where(singleItem => singleItem.CurrentCurveQH != null)
|
.SelectMany(singleItem => singleItem.CurrentCurveQH);
|
|
if (allQHForY.Any())
|
{
|
var globalYMax = allQHForY.Max(qh => qh.Y);
|
var globalYMin = allQHForY.Min(qh => qh.Y);
|
ReportHelper.SetAxisY(xyDiagram, ReportHelper.RoundDownMin(globalYMin), ReportHelper.RoundUpMax(globalYMax));
|
}
|
|
// 处理 Y 轴设置
|
var allQpForY = item
|
.Where(singleItem => singleItem.RatedCurveQP != null)
|
.SelectMany(singleItem => singleItem.RatedCurveQP);
|
|
if (allQpForY.Any())
|
{
|
var globalYMax = allQpForY.Max(qh => qh.Y);
|
var globalYMin = allQpForY.Min(qh => qh.Y);
|
ReportHelper.SetSecondaryAxisY(secondaryAxisY1, ReportHelper.RoundDownMin(globalYMin), ReportHelper.RoundUpMax(globalYMax));
|
}
|
|
// 处理 Y 轴设置
|
var allQeForY = item
|
.Where(singleItem => singleItem.RatedCurveQE != null)
|
.SelectMany(singleItem => singleItem.RatedCurveQE);
|
|
if (allQeForY.Any())
|
{
|
var globalYMax = allQeForY.Max(qh => qh.Y);
|
var globalYMin = allQeForY.Min(qh => qh.Y);
|
ReportHelper.SetSecondaryAxisY(secondaryAxisY2, ReportHelper.RoundDownMin(globalYMin), ReportHelper.RoundUpMax(globalYMax));
|
}
|
}
|
|
Series qhWorking = new Series("Series 5", ViewType.Spline);
|
qhWorking.LabelsVisibility = DefaultBoolean.False;
|
if (valve.CurrentQ != null && valve.CurrentH != null)
|
{
|
qhWorking.Points.Add(new SeriesPoint(valve.CurrentQ, valve.CurrentH));
|
chart.Series.Add(qhWorking);
|
}
|
|
// 创建第二个系列
|
Series series2 = new Series("Series 2", ViewType.Spline);
|
if (valve.CurrentCurveQE != null)
|
{
|
foreach (var qe in valve.CurrentCurveQE)
|
{
|
series2.Points.Add(new SeriesPoint(qe.X, qe.Y));
|
}
|
((XYDiagramSeriesViewBase)series2.View).Pane = pane2;
|
((XYDiagramSeriesViewBase)series2.View).AxisY = secondaryAxisY2;
|
((SplineSeriesView)series2.View).MarkerVisibility = DefaultBoolean.False;
|
series2.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(series2);
|
}
|
|
Series qeWorking = new Series("Series 6", ViewType.Spline);
|
qeWorking.LabelsVisibility = DefaultBoolean.False;
|
if (valve.CurrentQ != null && valve.CurrentE != null)
|
{
|
qeWorking.Points.Add(new SeriesPoint(valve.CurrentQ, valve.CurrentE));
|
((XYDiagramSeriesViewBase)qeWorking.View).Pane = pane2;
|
((XYDiagramSeriesViewBase)qeWorking.View).AxisY = secondaryAxisY2;
|
|
chart.Series.Add(qeWorking);
|
}
|
|
// 创建第三个系列
|
Series series3 = new Series("Series 3", ViewType.Spline);
|
if (valve.RatedCurveQP != null)
|
{
|
foreach (var qp in valve.RatedCurveQP)
|
{
|
series3.Points.Add(new SeriesPoint(qp.X, qp.Y));
|
}
|
((XYDiagramSeriesViewBase)series3.View).Pane = pane1;
|
((XYDiagramSeriesViewBase)series3.View).AxisY = secondaryAxisY1;
|
((SplineSeriesView)series3.View).MarkerVisibility = DefaultBoolean.False;
|
series3.LabelsVisibility = DefaultBoolean.False;
|
chart.Series.Add(series3);
|
|
if (valve.CurrentQ != null && valve.CurrentP != null)
|
{
|
Series qpWorking = new Series("Series 7", ViewType.Spline);
|
qpWorking.LabelsVisibility = DefaultBoolean.False;
|
qpWorking.Points.Add(new SeriesPoint(valve.CurrentQ, valve.CurrentP));
|
((XYDiagramSeriesViewBase)qpWorking.View).Pane = pane1;
|
((XYDiagramSeriesViewBase)qpWorking.View).AxisY = secondaryAxisY1;
|
chart.Series.Add(qpWorking);
|
}
|
}
|
}
|
((System.ComponentModel.ISupportInitialize)(chart)).EndInit();
|
// 重新设置高度
|
chart.HeightF = chart.HeightF;
|
|
// 重新设置位置
|
chart.LocationF = chart.LocationF;
|
Detail.Controls.Add(chart);
|
|
currentY += chart.HeightF;
|
}
|
}
|
}
|
|
#endregion 能耗分析
|
|
//能效明细
|
var labForEnergyDetails = ReportHelper.CreateFirstCaption("(4.1)、能效明细", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForEnergyDetails);
|
currentY += 20F;
|
|
if (working.EnergyAnaly.Items != null && working.EnergyAnaly.Items.Count > 0)
|
{
|
// 创建 XRTable
|
var tableForEnergyDetails = new XRTable();
|
tableForEnergyDetails.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
tableForEnergyDetails.SizeF = new SizeF(727F, 30F + working.EnergyAnaly.Items.Count * 25F); // 设置大小
|
|
// 创建表头行
|
XRTableRow headerRowEnergyDetails = new XRTableRow();
|
headerRowEnergyDetails.BackColor = Color.LightGray; // 设置背景颜色
|
|
// 添加表头列
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("分组", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("名称", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("运行状态", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("设定频率(hz)", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("设定流量(m³/h)", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("进口压力(m)", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("出口压力(m)", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("扬程(m)", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("功率(Kw)", 100));
|
headerRowEnergyDetails.Cells.Add(ReportHelper.CreateTableCell("效率(%)", 100));
|
// 将表头行添加到表格
|
tableForEnergyDetails.Rows.Add(headerRowEnergyDetails);
|
|
foreach (var item in working.EnergyAnaly.Items)
|
{
|
// 创建数据行
|
var dataRow = new XRTableRow();
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.BeginGroup,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.Name,
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = HydroLinkStatusHelper.GetStatusName(item.LinkStatus),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.RatedHz.ToString(),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CurrentQ?.ToString("F2"),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CurrentPr1?.ToString("F2"),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CurrentPr2?.ToString("F2"),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CurrentH?.ToString("F2"),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CurrentP?.ToString("F2"),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
dataRow.Cells.Add(new XRTableCell()
|
{
|
Text = item.CurrentE?.ToString("F2"),
|
WidthF = 100F,
|
TextAlignment = DevExpress.XtraPrinting.TextAlignment.MiddleCenter,
|
Borders = DevExpress.XtraPrinting.BorderSide.All
|
});
|
tableForEnergyDetails.Rows.Add(dataRow);
|
}
|
// 将表格添加到Detail
|
this.Detail.Controls.Add(tableForEnergyDetails);
|
currentY += tableForEnergyDetails.HeightF;
|
currentY += 20F;
|
}
|
|
#region 损失曲线
|
|
var labForLossCurve = ReportHelper.CreateFirstCaption("(5)、损失曲线", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForLossCurve);
|
currentY += 20F;
|
|
if (working.LossCurve != null && working.LossCurve.Items != null)
|
{
|
XRChart chart = new XRChart();
|
chart.LocationF = new DevExpress.Utils.PointFloat(0F, currentY);
|
chart.WidthF = contentWidth;
|
chart.HeightF = 300F;
|
chart.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
|
|
// 创建一个线系列
|
Series series = new Series("Series1", ViewType.Area);
|
Series series2 = new Series("Series2", ViewType.Area);
|
Series series3 = new Series("Series3", ViewType.Area);
|
|
series.LabelsVisibility = DefaultBoolean.False;
|
series2.LabelsVisibility = DefaultBoolean.False;
|
series3.LabelsVisibility = DefaultBoolean.False;
|
((AreaSeriesView)series.View).MarkerVisibility = DefaultBoolean.False;
|
((AreaSeriesView)series2.View).MarkerVisibility = DefaultBoolean.False;
|
((AreaSeriesView)series3.View).MarkerVisibility = DefaultBoolean.False;
|
|
// 添加数据点
|
foreach (var item in working.LossCurve.End.Items)
|
{
|
series.Points.Add(new SeriesPoint(item.X, item.Y));
|
}
|
|
// 添加数据点
|
foreach (var item in working.LossCurve.Start.Items)
|
{
|
series2.Points.Add(new SeriesPoint(item.X, item.Y));
|
}
|
|
// 添加数据点
|
foreach (var item in working.LossCurve.Elev.Items)
|
{
|
series3.Points.Add(new SeriesPoint(item.X, item.Y));
|
}
|
|
chart.Series.Add(series);
|
chart.Series.Add(series2);
|
chart.Series.Add(series3);
|
|
Detail.Controls.Add(chart);
|
currentY += chart.HeightF;
|
}
|
|
#endregion 损失曲线
|
|
#region 损失统计
|
|
var labForLossStatistics = ReportHelper.CreateFirstCaption("(6)、损失统计", contentWidth - 25F, 15F, 20F, currentY);
|
this.Detail.Controls.Add(labForLossStatistics);
|
currentY += 20F;
|
var accuracyScaleChart1 = ReportHelper.CreateLossStatistics(working.LossStatistics, 350F, 300F, 0F, currentY);
|
Detail.Controls.Add(accuracyScaleChart1);
|
var EnergyLossChart = ReportHelper.CreateEnergyLoss(working.LossStatistics, 377F, 300F, 350F, currentY);
|
Detail.Controls.Add(EnergyLossChart);
|
currentY += accuracyScaleChart1.HeightF;
|
var CategoryChart = ReportHelper.CreateCategory(working.LossStatistics, 727F, 300F, 0F, currentY);
|
Detail.Controls.Add(CategoryChart);
|
currentY += CategoryChart.HeightF;
|
}
|
}
|
|
#endregion 损失统计
|
}
|
}
|
}
|