You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

135 lines
6.0 KiB
C#

using Arction.Wpf.Charting;
using Arction.Wpf.Charting.Axes;
using Arction.Wpf.Charting.SeriesXY;
using Arction.Wpf.Charting.Views.ViewXY;
using mseedChart.Core;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace mseedChart.MainModule.Models
{
public class WavesModel
{
public List<AxisY> CreateYAxisChart(List<StationModel> stationModels, LightningChart curChart)
{
List<AxisY> axisYList = new List<AxisY>();
foreach (var item in stationModels)
{
AxisY axisYZ = new AxisY(curChart.ViewXY);
//添加Z分量波形
if (item.dz.Count > 0)
{
axisYZ.SetRange(item.dz.Min(), item.dz.Max());
}
axisYZ.Title.Text = string.Format("Ch{0}.Z", item.Name);
axisYList.Add(axisYZ);
//添加N分量波形
AxisY axisYN = new AxisY(curChart.ViewXY);
if (item.dn.Count > 0)
{
axisYN.SetRange(item.dn.Min(), item.dn.Max());
}
axisYN.Title.Text = string.Format("Ch{0}.N", item.Name);
axisYList.Add(axisYN);
//添加E分量波形
AxisY axisYE = new AxisY(curChart.ViewXY);
if (item.de.Count > 0)
{
axisYE.SetRange(item.de.Min(), item.de.Max());
}
axisYE.Title.Text = string.Format("Ch{0}.E", item.Name);
axisYList.Add(axisYE);
}
return axisYList;
}
public List<AxisY> CreateAxisYEventTime(StationEventJson stationEventJson, ViewXY chartV, List<StationModel> stationModels)
{
for (int i = 0; i < stationEventJson.phases.Count; i++)
{
phases ph= stationEventJson.phases[i];
var index= stationModels.FindIndex(a =>ph.id.Contains(a.Name));
if(index == -1)
{
continue;
}
int assignYAxisIndex = index * 3;
LineCollection lineCollection = new LineCollection()
{
AssignXAxisIndex = 0,
AssignYAxisIndex = assignYAxisIndex,
Tag=ph.id, //用于排序otime,只需要排更SHZ通道
Lines = new SegmentLine[] { new SegmentLine(chartV.XAxes[0].DateTimeToAxisValue(ph.atime), chartV.YAxes[assignYAxisIndex].Minimum, chartV.XAxes[0].DateTimeToAxisValue(ph.atime), chartV.YAxes[assignYAxisIndex].Maximum) },
ShowInLegendBox = false
};
lineCollection.LineStyle.Color = System.Windows.Media.Colors.Red;
lineCollection.Title.Text = ph.atime.ToString();
lineCollection.Title.Visible = true;
lineCollection.Title.Font.Size = 8;
lineCollection.Title.Shadow.DropColor = System.Windows.Media.Colors.Transparent;
lineCollection.Title.Shadow.ContrastColor = System.Windows.Media.Colors.Transparent;
lineCollection.Title.AutoPlacement = false;
lineCollection.Title.HorizontalAlign = AlignmentHorizontal.Left;
var b= (ph.atime- stationEventJson.otime).TotalSeconds*100;
lineCollection.Title.Offset= new PointIntXY((int)b, 0);
lineCollection.Title.Color = System.Windows.Media.Colors.Red;
lineCollection.Title.AutoPlacement = false;
chartV.LineCollections.Add(lineCollection);
}
for (int i = 0; i < stationEventJson.amps.Count; i++)
{
amps am = stationEventJson.amps[i];
var index = stationModels.FindIndex(a => am.id.Contains(a.Name));
if (index == -1)
{
continue;
}
int assignYAxisIndex = index * 3;
assignYAxisIndex = am.id.Contains("SHE") ? assignYAxisIndex + 1 : assignYAxisIndex + 2;
LineCollection lineCollection = new LineCollection()
{
AssignXAxisIndex = 0,
AssignYAxisIndex = assignYAxisIndex,
Lines = new SegmentLine[] { new SegmentLine(chartV.XAxes[0].DateTimeToAxisValue(am.atime), chartV.YAxes[assignYAxisIndex].Minimum, chartV.XAxes[0].DateTimeToAxisValue(am.atime), chartV.YAxes[assignYAxisIndex].Maximum) },
ShowInLegendBox = false
};
lineCollection.LineStyle.Color = System.Windows.Media.Colors.Red;
lineCollection.Title.Text = am.atime.ToString();
lineCollection.Title.Visible = true;
lineCollection.Title.Font.Size = 8;
lineCollection.Title.Shadow.DropColor = System.Windows.Media.Colors.Transparent;
lineCollection.Title.Shadow.ContrastColor = System.Windows.Media.Colors.Transparent;
lineCollection.Title.AutoPlacement = false;
lineCollection.Title.HorizontalAlign = AlignmentHorizontal.Left;
var b = (am.atime - stationEventJson.otime).TotalSeconds * 100;
lineCollection.Title.Offset = new PointIntXY((int)b, 0);
lineCollection.Title.Color = System.Windows.Media.Colors.Red;
// lineCollection.Title.AllowDragging = false;
chartV.LineCollections.Add(lineCollection);
}
return new List<AxisY>();
}
public StationEventJson mseedJsonResolve(string jsonFile)
{
var str = File.ReadAllText(jsonFile);
var st = JsonConvert.DeserializeObject<StationEventJson[]>(str);
StationEventJson jsonST = st[0];
return jsonST;
}
}
}