CRVM-redis-6/Host/Plot_energy.cs
2025-11-07 02:02:31 +08:00

344 lines
14 KiB
C#

using System;
using System.Drawing;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;
using ZedGraph;
using CRVM.SIDExcuter;
using CRVM.Entity;
namespace CRVM
{
public partial class Plot_energy : DockContent
{
private MasterPane master;
private Machine mac = null;
IViewHelper fileHelper = null;
public Plot_energy(IViewHelper fileHelper, Machine mac)
{
this.fileHelper = fileHelper;
this.mac = mac;
InitializeComponent();
timer1.Enabled = true;
timer1.Interval = 2000;
timer1.Start();
}
private void Plot_energy_Load(object sender, EventArgs e)
{
SubExcute();
}
private void timer1_Tick(object sender, EventArgs e)
{
GraRefresh();
}
public void GraRefresh()
{
SubExcute();
}
private void SubExcute()
{
if (fileHelper != null)
{
master = new MasterPane();
master.PaneList.Clear();
if (SysParam.Instance.orderByChannel)
{
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
if (SysParam.Instance.channel[i].ChChecked)
{
if (SysParam.Instance.checkBoxEnergy)
OrderByChannel_Energy(i);
}
}
}
else
{
if (SysParam.Instance.checkBoxEnergy)
OrderByKind_Energy();
}
master.Border.IsVisible = false;
master.Fill.Color = SysParam.Instance.colorBackgroud;
master.Margin.All = 5f;
master.InnerPaneGap = 5f;
zedGraphControl1.MasterPane = master;
Graphics gg1 = zedGraphControl1.CreateGraphics();
master.AxisChange(gg1);
if (SysParam.Instance.orderBySingleColumn)
{
zedGraphControl1.MasterPane.SetLayout(gg1, PaneLayout.SingleColumn);
}
else
{
zedGraphControl1.MasterPane.SetLayout(gg1, PaneLayout.SquareRowPreferred);
}
zedGraphControl1.Height = DockPanel.Height;
zedGraphControl1.Refresh();
}
}
private void OrderByChannel_Energy( int standNo)
{
if (SysParam.Instance.checkBoxEnergyAll)
{
energy_All(fileHelper.energyData, SysParam.Instance.comboBoxEnergyAll, standNo);
}
if (SysParam.Instance.checkBoxEnergyL)
{
energy_LMH(fileHelper.energyData, SysParam.Instance.comboBoxEnergyL, standNo, 0, "低频");
}
if (SysParam.Instance.checkBoxEnergyM)
{
energy_LMH(fileHelper.energyData, SysParam.Instance.comboBoxEnergyM, standNo, 1, "中频");
}
if (SysParam.Instance.checkBoxEnergyH)
{
energy_LMH(fileHelper.energyData, SysParam.Instance.comboBoxEnergyH, standNo, 2, "高频");
}
if (SysParam.Instance.checkBoxEnergySpeed && (standNo < SysParam.Instance.SpeedChannelCount))
{
energy_Speed(fileHelper.energyData, SysParam.Instance.comboBoxEnergySpeed, standNo);
}
}
private void OrderByKind_Energy()
{
if (SysParam.Instance.checkBoxEnergyAll)
{
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
if (SysParam.Instance.channel[i].ChChecked)
{
energy_All(fileHelper.energyData, SysParam.Instance.comboBoxEnergyAll, i);
}
}
}
if (SysParam.Instance.checkBoxEnergyL)
{
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
if (SysParam.Instance.channel[i].ChChecked)
{
energy_LMH(fileHelper.energyData, SysParam.Instance.comboBoxEnergyL, i,0,"低频");
}
}
}
if (SysParam.Instance.checkBoxEnergyM)
{
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
if (SysParam.Instance.channel[i].ChChecked)
{
energy_LMH(fileHelper.energyData, SysParam.Instance.comboBoxEnergyM, i, 1, "中频");
}
}
}
if (SysParam.Instance.checkBoxEnergyH)
{
for (int i = 0; i < SysParam.Instance.channelCount; i++)
{
if (SysParam.Instance.channel[i].ChChecked)
{
energy_LMH(fileHelper.energyData, SysParam.Instance.comboBoxEnergyH, i, 2, "高频");
}
}
}
if (SysParam.Instance.checkBoxEnergySpeed)
{
for (int i = 0; i < SysParam.Instance.SpeedChannelCount; i++)
{
if (SysParam.Instance.channel[i].ChChecked)
{
energy_Speed(fileHelper.energyData, SysParam.Instance.comboBoxEnergySpeed, i);
}
}
}
}
private void energy_All(double[,] lineList, string yAxisVal, int stdNo)
{
GraphPane gpt = new GraphPane();
gpt.CurveList.Clear();
int length = fileHelper.signalLengthEnergy;
double[] tx = new double[length];
double[] ty = new double[length];
for (int i = 0; i < length; i++)
{
tx[i] = i * SysParam.Instance.reSamplePoint / Convert.ToDouble(SysParam.Instance.reSampleFre);
ty[i] = lineList[stdNo * 8 + 1, i];
}
gpt.AddCurve("", tx, ty, SysParam.Instance.colorEnergy, SymbolType.None);
gpt.XAxis.Scale.Min = 0.0;
gpt.XAxis.Scale.Max = tx[length - 1];
gpt.YAxis.Scale.Min = 0.0;
gpt.YAxis.Scale.Max = Convert.ToDouble(yAxisVal);
gpt.Title.Text = (stdNo + 1) + "号机架全局能量";
GraPaneSetting(gpt);
this.master.Add(gpt);
}
private void energy_LMH(double[,] lineList, string yAxisVal, int stdNo, int typeNo, string type)
{
GraphPane gpt = new GraphPane();
gpt.CurveList.Clear();
int length = fileHelper.signalLengthEnergy;
double[] tx = new double[length];
double[] ty = new double[length];
double[] tyalarm = new double[length];
for (int i = 0; i < length; i++)
{
tx[i] = i * SysParam.Instance.reSamplePoint / Convert.ToDouble(SysParam.Instance.reSampleFre);
ty[i] = lineList[stdNo * 8 + 2 + typeNo, i];
tyalarm[i] = lineList[stdNo * 8 + 5 + typeNo, i];
}
gpt.AddCurve("", tx, ty, SysParam.Instance.colorEnergy, SymbolType.None);
gpt.AddCurve("", tx, tyalarm, SysParam.Instance.colorAlarm, SymbolType.None).Line.Width = 2f;
gpt.XAxis.Scale.Min = 0.0;
gpt.XAxis.Scale.Max = tx[length - 1];
gpt.YAxis.Scale.Min = 0.0;
gpt.YAxis.Scale.Max = Convert.ToDouble(yAxisVal);
gpt.Title.Text = (stdNo + 1) + "号机架" + type + "能量";
GraPaneSetting(gpt);
this.master.Add(gpt);
}
private void energy_Speed(double[,] lineList, string yAxisVal, int stdNo)
{
GraphPane gpt = new GraphPane();
gpt.CurveList.Clear();
int length = fileHelper.signalLengthEnergy;
double[] tx = new double[length];
double[] ty = new double[length];
for (int i = 0; i < length; i++)
{
tx[i] = i * SysParam.Instance.reSamplePoint / Convert.ToDouble(SysParam.Instance.reSampleFre);
ty[i] = lineList[stdNo * 8, i];
}
gpt.AddCurve("", tx, ty, SysParam.Instance.colorSpeed, SymbolType.None).Line.Width = 2f;
gpt.XAxis.Scale.Min = 0.0;
gpt.XAxis.Scale.Max = tx[length - 1];
gpt.YAxis.Scale.Min = 0.0;
gpt.YAxis.Scale.Max = Convert.ToDouble(yAxisVal);
gpt.Title.Text = (stdNo + 1) + "号机架速度";
GraPaneSetting(gpt);
this.master.Add(gpt);
}
private static void GraPaneSetting(GraphPane tempGraph)
{
float fontsize = SysParam.Instance.fontSize;
Color myFontColor = SysParam.Instance.colorFont;
//tempGraph.Margin.All = 2f;
tempGraph.Fill.IsVisible = false;
tempGraph.IsFontsScaled = false;
tempGraph.TitleGap = 0f;
tempGraph.Margin.All = 3f;
tempGraph.Border.Color = Color.FromArgb(127, myFontColor);
tempGraph.Chart.Border.Color = myFontColor;
tempGraph.Chart.Fill.IsVisible = false;
tempGraph.Title.FontSpec.FontColor = myFontColor;
tempGraph.Title.FontSpec.Family = "微软雅黑";
tempGraph.Title.FontSpec.IsBold = false;
tempGraph.Title.FontSpec.Size = 1.5f * fontsize;
tempGraph.Legend.Border.IsVisible = false;
tempGraph.Legend.Position = LegendPos.InsideTopLeft;
tempGraph.Legend.FontSpec.Size = fontsize;
tempGraph.Legend.Fill.IsVisible = false;
tempGraph.Legend.FontSpec.FontColor = myFontColor;
tempGraph.Legend.FontSpec.Family = "微软雅黑";
tempGraph.XAxis.Title.FontSpec.Family = "微软雅黑";
tempGraph.XAxis.Title.FontSpec.IsBold = false;
tempGraph.XAxis.Scale.FontSpec.FontColor = myFontColor;
tempGraph.XAxis.Scale.FontSpec.Size = fontsize;
tempGraph.XAxis.Title.IsVisible = false;
tempGraph.XAxis.MajorTic.IsOutside = false;
tempGraph.XAxis.MajorTic.Color = Color.FromArgb(127, myFontColor);
tempGraph.XAxis.MinorTic.IsAllTics = false;
tempGraph.YAxis.Title.FontSpec.Family = "微软雅黑";
tempGraph.YAxis.Title.FontSpec.IsBold = false;
tempGraph.YAxis.Scale.FontSpec.FontColor = myFontColor;
tempGraph.YAxis.Scale.FontSpec.Size = fontsize;
tempGraph.YAxis.Title.IsVisible = false;
tempGraph.YAxis.MajorTic.IsOutside = false;
tempGraph.YAxis.MajorTic.Color = Color.FromArgb(127, myFontColor);
tempGraph.YAxis.MinorTic.IsAllTics = false;
tempGraph.YAxis.MajorGrid.IsZeroLine = false;
if (SysParam.Instance.BackgroundGridOn)
{
tempGraph.XAxis.MajorGrid.IsVisible = true;
tempGraph.XAxis.MajorGrid.Color = Color.FromArgb(127, myFontColor);
tempGraph.YAxis.MajorGrid.IsVisible = true;
tempGraph.YAxis.MajorGrid.Color = Color.FromArgb(127, myFontColor);
}
else
{
tempGraph.XAxis.MajorGrid.IsVisible = false;
tempGraph.YAxis.MajorGrid.IsVisible = false;
}
}
private string zedGraphControl1_PointValueEvent(ZedGraphControl sender, GraphPane pane, CurveItem curve, int iPt)
{
if (pane.Title.Text.Contains("速度"))
{
PointPair pt = curve[iPt];
return (pt.X.ToString("0.000") + "s " + pt.Y.ToString("0.0") + "m/min");
}
else if (pane.Title.Text.Contains("频谱"))
{
PointPair pt = curve[iPt];
return (pt.X.ToString("0.0") + "Hz " + pt.Y.ToString("0.00000") + "g");
}
else
{
PointPair pt = curve[iPt];
return (pt.X.ToString("0.000") + "s " + pt.Y.ToString("0.00000") + "g");
}
}
private void zedGraphControl1_ContextMenuBuilder(ZedGraphControl sender, ContextMenuStrip menuStrip, Point mousePt, ZedGraphControl.ContextMenuObjectState objState)
{
for (int i = 0; i < menuStrip.Items.Count; i++)
{
switch (menuStrip.Items[i].Tag.ToString().Trim())
{
case "copy":
menuStrip.Items[i].Text = "复制图片";
break;
case "show_val":
menuStrip.Items[i].Text = "查看坐标";
break;
case "save_as":
menuStrip.Items[i].Text = "图片保存至...";
break;
case "page_setup":
menuStrip.Items[i].Text = "页面设置";
break;
case "print":
menuStrip.Items[i].Text = "打印";
break;
case "unzoom":
menuStrip.Items[i].Text = "还原缩放";
break;
case "undo_all":
menuStrip.Items[i].Text = @"还原缩放\移动";
break;
case "set_default":
menuStrip.Items[i].Text = "恢复默认设置";
break;
}
}
}
}
}