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.

1010 lines
40 KiB
C#

using LiveCharts.Defaults;
using LiveCharts;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections.ObjectModel;
using System.Windows.Input;
using Txgy.Microseismic.BaseLib.Models;
using System.Windows;
using Prism.Events;
using Txgy.EWS.Client.IBLL;
using Txgy.Microseismic.BaseLib.Entitys;
using Txgy.EWS.Client.Common.MessageEvents;
using Arction.Wpf.ChartingMVVM;
using Txgy.EWS.Client.Common;
using Txgy.EWS.Client.Common.Extensions;
using System.IO;
using System.Diagnostics;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using Arction.Wpf.ChartingMVVM.Axes;
using Arction.Wpf.ChartingMVVM.Series3D;
using Arction.Wpf.ChartingMVVM.Titles;
using Arction.Wpf.ChartingMVVM.Views.View3D;
using Txgy.EWS.Client.PageModule.Models;
using System.Windows.Media;
using WW.Cad.Model.Entities;
using WW.Cad.Model;
using WW.Cad.IO;
using Colors = System.Windows.Media.Colors;
using Color = System.Windows.Media.Color;
using Arction.Wpf.ChartingMVVM.Annotations;
using Txgy.EWS.Client.PageModule.Views;
using Txgy.EWS.Client.Entity;
using Arction.Wpf.ChartingMVVM.EventMarkers;
using Arction.Wpf.ChartingMVVM.SeriesXY;
using WW.Math;
using System.Windows.Threading;
using Txgy.EWS.Client.PageModule.Services;
using LiveCharts.Wpf;
using Txgy.EWS.Client.Common.Helpers;
using Txgy.EWS.Client.Models;
namespace Txgy.EWS.Client.PageModule.ViewModels
{
public class EarlyWarningViewModel : BindableBase
{
private VisualHost host;
public const int TableShowCount = 21;
public const int SelectTop = 100;
private readonly IEventAggregator _ea;
private readonly ISearchMsEventBLL _searchMsEventBLL;
/// <summary>
/// 工作状态
/// </summary>
private bool _isRunning;
public bool IsRunning
{
get { return _isRunning; }
set
{
SetProperty(ref _isRunning, value);
}
}
private int _runEventCnt = 0;
public int RunEventCnt
{
get { return _runEventCnt; }
set { SetProperty(ref _runEventCnt, value); }
}
private string _runningStr = "开始";
public string RunningStr
{
get { return _runningStr; }
set { SetProperty(ref _runningStr, value); }
}
private string _runSpan = "0小时0分0秒";
public string RunSpan
{
get { return _runSpan; }
set { SetProperty(ref _runSpan, value); }
}
private int _runInt = 0;
public int RunInt
{
get { return _runInt; }
set
{
_runInt = value;
double h = Math.Floor(_runInt / 3600.0);
double m = Math.Floor((_runInt - h * 3600) / 60.0);
double s = Math.Floor((_runInt - h * 3600) % 60);
RunSpan = h.ToString() + "小时" + m.ToString() + "分" + s.ToString() + "秒";
}
}
public int PreSelectCnt = 20;
private int eventFrequencyCount = 0;
/// <summary>
/// 事件近一小时频度
/// </summary>
public int EventFrequencyCount
{
get { return eventFrequencyCount; }
set
{
SetProperty(ref eventFrequencyCount, value);
}
}
private double lastAlarmEventML = 0;
/// <summary>
/// 最后报警事件震级
/// </summary>
public double LastAlarmEventML
{
get { return lastAlarmEventML; }
set
{
SetProperty(ref lastAlarmEventML, value);
}
}
private double lastAlarmEventEnergy = 0;
/// <summary>
/// 最后报警事件能量
/// </summary>
public double LastAlarmEventEnergy
{
get { return lastAlarmEventEnergy; }
set
{
SetProperty(ref lastAlarmEventEnergy, value);
}
}
private int lastAlarmEventDominFreq;
public int LastAlarmEventDominFreq
{
get { return lastAlarmEventDominFreq; }
set
{
SetProperty(ref lastAlarmEventDominFreq, value);
}
}
private int energyMaxY = 2000;
public int EnergyMaxY
{
get { return energyMaxY; }
set
{
SetProperty(ref energyMaxY, value);
}
}
private int eventFreMaxY = 20;
public int EventFreMaxY
{
get { return eventFreMaxY; }
set
{
SetProperty(ref eventFreMaxY, value);
}
}
public ChartValues<ObservableValue> ListEventFre { get; set; }
public ChartValues<ObservableValue> ListDominantFreq { get; set; }
public ChartValues<ObservableValue> ListEnergy { get; set; }
public ChartValues<ObservableValue> ListML { get; set; }
public ChartValues<ObservableValue> ListStress { get; set; }
private ObservableCollection<string> _eventFreLabels;
public ObservableCollection<string> EventFreLabels
{
get { return _eventFreLabels; }
set { SetProperty(ref _eventFreLabels, value); }
}
private ObservableCollection<string> _eventMLLabels;
public ObservableCollection<string> EventMLLabels
{
get { return _eventMLLabels; }
set { SetProperty(ref _eventMLLabels, value); }
}
private ObservableCollection<string> _eventDominantFreqLabels;
public ObservableCollection<string> EventDominantFreqLabels
{
get { return _eventDominantFreqLabels; }
set { SetProperty(ref _eventDominantFreqLabels, value); }
}
private ObservableCollection<string> _eventEnergyLabels;
public ObservableCollection<string> EventEnergyLabels
{
get { return _eventEnergyLabels; }
set { SetProperty(ref _eventEnergyLabels, value); }
}
private ObservableCollection<string> _eventStressLabels;
public ObservableCollection<string> EventStressLabels
{
get { return _eventStressLabels; }
set { SetProperty(ref _eventStressLabels, value); }
}
public List<MmEventEntity> SelectEvents { get; set; }
private ObservableCollection<MmEventEntity> _showEvents;
public ObservableCollection<MmEventEntity> ShowEvents
{
get { return _showEvents; }
set
{
_showEvents = value;
}
}
ChartValues<double> cv1 = new ChartValues<double>();
Random ran = new Random();
List<Task> taskList = new List<Task>();
public ICommand AddCommand { get; set; }
public ICommand StartWorkCommand { get; set; }
#region LightningChart参数
public string eventLayerName = "地震事件";
public Color eventLayerColor = Colors.Red;
public Color eventColor = Colors.Red;
public Color eventTextColor = Colors.Blue;
public double eventLayerLineWeight = 1;
public double eventTextSize = 12;
public string cnstLTypeName = "地震事件2";
public string CadFilePath { get; set; }
//LCPlanModel _lcModel;
//public CadLineList cadLineList;
public List<PointLineSeries3D> eventList;
private ChartTitle _chartTitle;
public ChartTitle ChartTitle
{
get { return _chartTitle; }
set
{
SetProperty(ref _chartTitle, value);
}
}
private double _scale = 1;
public double Scale
{
get { return _scale; }
set
{
SetProperty(ref _scale, value);
}
}
private int _widthRS = 2000;
public int WidthRS
{
get { return _widthRS; }
set
{
SetProperty(ref _widthRS, value);
}
}
private int _heightRS = 700;
public int HeightRS
{
get { return _heightRS; }
set
{
SetProperty(ref _heightRS, value);
}
}
private int _depthRS = 2000;
public int DepthRS
{
get { return _depthRS; }
set
{
SetProperty(ref _depthRS, value);
}
}
private double _sideRotationRS = 0;
public double SideRotationRS
{
get { return _sideRotationRS; }
set
{
SetProperty(ref _sideRotationRS, value);
}
}
private double _horizontalRotationRS = 0;
public double HorizontalRotationRS
{
get { return _horizontalRotationRS; }
set
{
SetProperty(ref _horizontalRotationRS, value);
}
}
private double _verticalRotationRS = 90;
public double VerticalRotationRS
{
get { return _verticalRotationRS; }
set
{
//Console.WriteLine(value.ToString());
SetProperty(ref _verticalRotationRS, value);
}
}
private double _distanceRS = 1300;
public double DistanceRS
{
get { return _distanceRS; }
set
{
//Console.WriteLine(value.ToString());
SetProperty(ref _distanceRS, value);
}
}
private bool _clipDispaly = true;
public bool ClipDispaly
{
get { return _clipDispaly; }
set
{
SetProperty(ref _clipDispaly, value);
}
}
private WallXZ _bottomWall;
public WallXZ BottomWall
{
get { return _bottomWall; }
set
{
SetProperty(ref _bottomWall, value);
}
}
private AxisX3D _axisXPri3D;
public AxisX3D AxisXPri3D
{
get { return _axisXPri3D; }
set
{
SetProperty(ref _axisXPri3D, value);
}
}
private AxisY3D _axisYPri3D;
public AxisY3D AxisYPri3D
{
get { return _axisYPri3D; }
set
{
SetProperty(ref _axisYPri3D, value);
}
}
private AxisZ3D _axisZPri3D;
public AxisZ3D AxisZPri3D
{
get { return _axisZPri3D; }
set
{
SetProperty(ref _axisZPri3D, value);
}
}
private ProjectionType _projectionTypeRS = ProjectionType.Orthographic;
public ProjectionType ProjectionTypeRS
{
get { return _projectionTypeRS; }
set
{
SetProperty(ref _projectionTypeRS, value);
}
}
private Fill _chartBackGround = new Fill();
public Fill ChartBackGround
{
get { return _chartBackGround; }
set
{
SetProperty(ref _chartBackGround, value);
}
}
public Light3DCollection Lights { get; set; }
public Polygon3DCollection Polygons { get; set; }
public PointLineSeries3DCollection ChartPointLineCollection { get; set; }
public Annotation3DCollection ChartAnnotationCollection { get; set; }
public List<PointLineSeries3D> cadImage3DList { get; set; }
#endregion
public ICommand TestCommand
{
get => new Prism.Commands.DelegateCommand(() =>
{
//Type type = Type.GetType("Txgy.EWS.Client.PageModule.Views.EarlyWarningView");
//string str = (Activator.CreateInstance(type) as EarlyWarningView).chart.ChartName;
//Console.WriteLine("=============================================================" + str);
//DateTime dateTime = timeTemp.AddHours(tmp);
//Stopwatch watch = new Stopwatch();
//watch.Start();
////MmEventEntity mmEvent= searchMsEventBLL.GetLastEvent();
//var mme = fsqlTencent.Select<RemoteRealtimeResultEntity>()
//.Where(re => DateTime.Parse(re.EventTime).Ticks <= dateTime.Ticks)
//.OrderByDescending(re => re.RTEventID).First();
//watch.Stop();
//TimeSpan timespan = watch.Elapsed;
//Console.WriteLine("FreeSql:" + mme.RTEventID + " ++++++++++++++++时长:" + timespan.TotalMilliseconds);
//GlobalData.AlarmEvents.Add(mme);
//AlarmEventPayload aep = new AlarmEventPayload(mme);
//Application.Current.Dispatcher.Invoke(_handleDataGenerated, aep);
//PutSamplesToChart(aep);
//Stopwatch watch2 = new Stopwatch();
//watch.Start();
//MmEventEntity mmEvent2 = searchMsEventBLL.GetLastEvent();
////var mme2 = fsqlTencent.Select<RemoteRealtimeResultEntity>()
////.Where(re => DateTime.Parse(re.EventTime).Ticks <= dateTime.Ticks)
////.OrderByDescending(re => re.RTEventID).First();
//watch.Stop();
//TimeSpan timespan2 = watch.Elapsed;
//Console.WriteLine(mmEvent2.EventID + " ++++++++++++++++时长:" + timespan2.TotalMilliseconds);
});
}
public EarlyWarningViewModel(IEventAggregator ea, ISearchMsEventBLL searchMsEventBLL)
{
host = new VisualHost();
ListEventFre = new ChartValues<ObservableValue>();
ListEventFre.NoisyCollectionChanged += EventFre_NoisyCollectionChanged;
EventFreLabels = new ObservableCollection<string>();
ListDominantFreq = new ChartValues<ObservableValue>();
ListDominantFreq.NoisyCollectionChanged += DominantFreq_NoisyCollectionChanged;
EventDominantFreqLabels = new ObservableCollection<string>();
ListML = new ChartValues<ObservableValue>();
ListML.NoisyCollectionChanged += MLS_NoisyCollectionChanged;
EventMLLabels = new ObservableCollection<string>();
ListEnergy = new ChartValues<ObservableValue>();
ListEnergy.NoisyCollectionChanged += ListEnergy_NoisyCollectionChanged;
EventEnergyLabels = new ObservableCollection<string>();
ListStress = new ChartValues<ObservableValue>();
ListStress.NoisyCollectionChanged += Stress_NoisyCollectionChanged;
EventStressLabels = new ObservableCollection<string>();
#region 设置Chart
CadFilePath = GlobalConfig.ProjectConfig.CadFileName;
_chartBackGround.GradientFill = GradientFill.Solid;
_chartBackGround.GradientColor = Colors.White;
ChartTitle = new ChartTitle();
ChartTitle.Text = "平面视图";
_bottomWall = new WallXZ();
_bottomWall.Material = new Material3D() { DiffuseColor = Color.FromArgb(0, 248, 248, 255) };
_bottomWall.SetGridStripColor1(Color.FromArgb(0, 248, 248, 255));
_bottomWall.SetGridStripColor2(Color.FromArgb(0, 248, 248, 255));
Lights = View3D.CreateDefaultLights();
Lights[1].Location.SetValues((GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin) / 2f, 100,
(GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin) / 2f);
//_widthRS = (int)((GlobalConfig.ProjectConfig.WorkArea.EMax - GlobalConfig.ProjectConfig.WorkArea.EMin) / Scale);
//_heightRS = (int)((GlobalConfig.ProjectConfig.WorkArea.ZMax - GlobalConfig.ProjectConfig.WorkArea.ZMin) / Scale);
//_depthRS = (int)((GlobalConfig.ProjectConfig.WorkArea.NMax - GlobalConfig.ProjectConfig.WorkArea.NMin) / Scale);
AxisXPri3D = new AxisX3D();
AxisXPri3D.Maximum = GlobalConfig.ProjectConfig.WorkArea.EMax / Scale;
AxisXPri3D.Minimum = GlobalConfig.ProjectConfig.WorkArea.EMin / Scale;
AxisXPri3D.Title.Text = "横轴";
AxisXPri3D.Title.Visible = false;
AxisXPri3D.LabelsColor = Colors.Black;
AxisXPri3D.LabelsNumberFormat = "00000000";
AxisXPri3D.AutoFormatLabels = false;
AxisXPri3D.Orientation = PlaneXAxis3D.XZ;
AxisXPri3D.Location = AxisXLocation3D.TopFront;
AxisYPri3D = new AxisY3D();
AxisYPri3D.Maximum = 30;
AxisYPri3D.Minimum = 0;
AxisYPri3D.Visible = false;
AxisZPri3D = new AxisZ3D();
AxisZPri3D.Maximum = GlobalConfig.ProjectConfig.WorkArea.NMax / Scale;
AxisZPri3D.Minimum = GlobalConfig.ProjectConfig.WorkArea.NMin / Scale;
AxisZPri3D.Title.Text = "纵轴";
AxisZPri3D.Title.Visible = false;
AxisZPri3D.LabelsColor = Colors.Black;
AxisZPri3D.LabelsNumberFormat = "0000000";
AxisZPri3D.AutoFormatLabels = false;
AxisZPri3D.Orientation = PlaneZAxis3D.XZ;
AxisZPri3D.Location = AxisZLocation3D.TopRight;
ChartPointLineCollection = new PointLineSeries3DCollection();
ChartAnnotationCollection = new Annotation3DCollection();
CreateBackgroudByDwg();
#endregion
this._ea = ea;
this._searchMsEventBLL = searchMsEventBLL;
ShowEvents = new ObservableCollection<MmEventEntity>();
InitEventList();
this._ea.GetEvent<UpdateEventFrequencyEvent>().Subscribe(u =>
{
Application.Current.Dispatcher.Invoke(new System.Action(() =>
{
ListEventFre.Add(new ObservableValue(u));
EventFrequencyCount = u;
if (EventFreLabels.Count >= TableShowCount)
{
EventFreLabels.RemoveAt(0);
}
EventFreLabels.Add(DateTime.Now.ToString("HH:mm"));
EventFreMaxY = (int)(ListEventFre.Max(le => le.Value) + 4);
}));
});
this._ea.GetEvent<UpdateLastAlarmEvent>().Subscribe(u =>
{
Application.Current.Dispatcher.Invoke(new System.Action(() =>
{
LastAlarmEventEnergy = u.Energy;
ListEnergy.Add(new ObservableValue(u.Energy));
//EventEnergyLabels.Add(u.EventTime.Substring(0, 1));
LastAlarmEventML = u.ML;
ListML.Add(new ObservableValue(u.ML));
//Random rnd = new Random((int)DateTime.Now.Ticks);
//int domainFreq = rnd.Next(15, 60);
//LastAlarmEventDominFreq = domainFreq;
//ListDominantFreq.Add(new ObservableValue(domainFreq));
}));
});
this._ea.GetEvent<UpdateEventDominFreqMessage>().Subscribe(u =>
{
//Random rnd = new Random((int)DateTime.Now.Ticks);
//int domainFreq = rnd.Next(15, 60);
LastAlarmEventDominFreq = u;
ListDominantFreq.Add(new ObservableValue(u));
});
//Series series = new StackedColumnSeries()
}
private void ListEnergy_NoisyCollectionChanged(IEnumerable<ObservableValue> oldItems, IEnumerable<ObservableValue> newItems)
{
if (ListEnergy.Count > TableShowCount)
{
ListEnergy.RemoveAt(0);
}
}
private void EventFre_NoisyCollectionChanged(IEnumerable<ObservableValue> oldItems, IEnumerable<ObservableValue> newItems)
{
if (ListEventFre.Count > TableShowCount)
{
ListEventFre.RemoveAt(0);
}
}
private void Stress_NoisyCollectionChanged(IEnumerable<ObservableValue> oldItems, IEnumerable<ObservableValue> newItems)
{
if (ListStress.Count > TableShowCount)
{
ListStress.RemoveAt(0);
}
}
private void MLS_NoisyCollectionChanged(IEnumerable<ObservableValue> oldItems, IEnumerable<ObservableValue> newItems)
{
if (ListML.Count > TableShowCount)
{
ListML.RemoveAt(0);
}
}
private void DominantFreq_NoisyCollectionChanged(IEnumerable<ObservableValue> oldItems, IEnumerable<ObservableValue> newItems)
{
if (ListDominantFreq.Count > TableShowCount)
{
ListDominantFreq.RemoveAt(0);
}
}
public void InitEventList()
{
//PreSelectCnt = this._searchMsEventBLL.PreSelectCount;
//SelectEvents = this._searchMsEventBLL.GetTopEvents(SelectTop, 20);
DateTime dt = DateTime.Now;
if (GlobalConfig.IsDesign)
{
dt = GlobalConfig.DStartTime;
}
SelectEvents = this._searchMsEventBLL.GetEvents(dt.AddDays(-5), dt).TakeLast(21).ToList();
if (SelectEvents != null)
{
if (SelectEvents.Count > 0)
{
//EventFreLabels = new ObservableCollection<string>();
for (int i = 0; i < SelectEvents.Count; i++)
{
string eventTimeStr = SelectEvents[i].EventTimeStr;
string datePath = eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2) + eventTimeStr.Substring(8, 2);
string dataFilePath = GlobalConfig.ProjectConfig.MseedFilePath + "\\" + datePath + "\\";
string dataFileName = "HA." + eventTimeStr.Substring(0, 4) + eventTimeStr.Substring(5, 2)
+ eventTimeStr.Substring(8, 2) + eventTimeStr.Substring(10, 3)
+ eventTimeStr.Substring(14, 2) + eventTimeStr.Substring(17, 2) + ".01" + GlobalConfig.DataTypeString;
string jsonStr = ".json";
string mseedStr = ".mseed";
TaskData taskData = new TaskData();
taskData.EventTimeStr = SelectEvents[i].EventTimeStr;
taskData.Tasks = new Task(() =>
{
int res = new DownloadWavedata().Download(taskData.EventTimeStr, dataFilePath, dataFileName + mseedStr, GlobalConfig.UseWaveDataTable);
if (res > -1)
{
taskData.IsComplete = true;
}
//Console.WriteLine(taskData.IsComplete);
});
taskData.CallBack = (string res) =>
{
//int domin = 0;
//if (taskData.IsComplete)
//{
// domin = GetDominFreq(taskData.EventTimeStr);
//}
//this.ea.GetEvent<UpdateEventDominFreqMessage>().Publish(domin);
//待完善主频
Console.WriteLine("15Hz");
};
TaskQueue.Instance.AddTaskAndRuning(taskData);
DownloadWaveDataTask(SelectEvents[i].EventTimeStr, GlobalConfig.UseWaveDataTable);
int dominFreq = GetDominFreq(SelectEvents[i].EventTimeStr);
if (dominFreq < 5)
{
dominFreq = new Random((int)DateTime.Now.Ticks).Next(15, 60);
}
SelectEvents[i].DominantFreq = dominFreq;
}
DateTime freqTime = DateTime.Now.AddMinutes(-20);
for (int i = 0; i < TableShowCount; i++)
{
int statCnt = SelectEvents.Count(mm => mm.EventTime > freqTime.AddMinutes(i).AddHours(-1) && mm.EventTime <= freqTime.AddMinutes(i));
ListEventFre.Add(new ObservableValue(statCnt));
EventFreLabels.Add(freqTime.AddMinutes(i).ToString("HH:mm"));
EventMLLabels.Add(i.ToString());
EventEnergyLabels.Add(i.ToString());
EventDominantFreqLabels.Add(i.ToString());
}
for (int i = TableShowCount - 1; i >= 0; i--)
{
//EventMLLabels.Add(SelectEvents[i].EventTime.ToString("HH:mm"));
ListML.Add(new ObservableValue(SelectEvents[i].ML));
ListEnergy.Add(new ObservableValue(CalEnergy(SelectEvents[i].ML)));
ListDominantFreq.Add(new ObservableValue(SelectEvents[i].DominantFreq));
}
EnergyMaxY = (int)((Math.Ceiling(ListEnergy.Max(le => le.Value) / 1000.0)) * 1000);
EventFreMaxY = (int)(ListEventFre.Max(le => le.Value) + 4);
for (int i = 0; i < TableShowCount; i++)
{
ShowEvents.Add(SelectEvents[i]);
}
}
}
}
private void DownloadWaveDataTask(string eventTimeStr, string tableName)
{
string downLoadStr = eventTimeStr;
string datePath = downLoadStr.Substring(0, 4) + downLoadStr.Substring(5, 2) + downLoadStr.Substring(8, 2);
string mseedStr = "HA." + downLoadStr.Substring(0, 4) + downLoadStr.Substring(5, 2)
+ downLoadStr.Substring(8, 2) + downLoadStr.Substring(10, 3)
+ downLoadStr.Substring(14, 2) + downLoadStr.Substring(17, 2) + ".01" + GlobalConfig.DataTypeString;
string mseedPath = GlobalConfig.ProjectConfig.MseedFilePath + "\\" + datePath + "\\";
string savePath = GlobalConfig.ProjectConfig.TxtFilePath + "\\" + datePath + "\\" + mseedStr + ".txt";
//var taskRunTime = Task.Factory.StartNew(new Action(() =>
//{
if (!File.Exists(mseedPath + mseedStr + ".mseed"))
{
if (!Directory.Exists(mseedPath))
{
Directory.CreateDirectory(mseedPath);
}
_searchMsEventBLL.DownLoadWavedata(downLoadStr, mseedPath, mseedStr, tableName);
if (!File.Exists(savePath))
{
if (!Directory.Exists(Path.GetDirectoryName(savePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
}
Stopwatch sw = Stopwatch.StartNew();
sw.Start();
MSeed2Asc(mseedPath + mseedStr + ".mseed", savePath);
sw.Stop();
TimeSpan timeSpan = sw.Elapsed;
Console.WriteLine(timeSpan.TotalMilliseconds);
}
}
else
{
if (!File.Exists(savePath))
{
if (!Directory.Exists(Path.GetDirectoryName(savePath)))
{
Directory.CreateDirectory(Path.GetDirectoryName(savePath));
}
MSeed2Asc(mseedPath + mseedStr + ".mseed", savePath);
}
}
}
public void MSeed2Asc(string filePath, string savePath)
{
using (Process compiler = new Process())
{
compiler.StartInfo.FileName = "mseed2ascii.exe";
compiler.StartInfo.Arguments = filePath + " -o " + savePath;
compiler.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
compiler.Start();
compiler.WaitForExit();
}
}
/// <summary>
/// 获取主频
/// </summary>
/// <param name="mmEvent"></param>
/// <returns></returns>
public int GetDominFreq(string eventTime)
{
string downLoadStr = eventTime;
string datePath = downLoadStr.Substring(0, 4) + downLoadStr.Substring(5, 2) + downLoadStr.Substring(8, 2);
string jsonStr = "HA." + downLoadStr.Substring(0, 4) + downLoadStr.Substring(5, 2)
+ downLoadStr.Substring(8, 2) + downLoadStr.Substring(10, 3)
+ downLoadStr.Substring(14, 2) + downLoadStr.Substring(17, 2) + ".01" + GlobalConfig.DataTypeString + ".json";
string jsonFilePath = GlobalConfig.ProjectConfig.MseedFilePath + "\\" + datePath + "\\" + jsonStr;
int dominantFreq = 0;
if (File.Exists(jsonFilePath))
{
if (new FileInfo(jsonFilePath).Length < 100)
{
return dominantFreq;
}
try
{
using (StreamReader sr = System.IO.File.OpenText(jsonFilePath))
{
JsonTextReader reader = new JsonTextReader(sr);
JArray jArray = (JArray)JToken.ReadFrom(reader);
//解析普通属性和数组混合的Json文件
//数组0是普通属性集合
JObject jobj = (JObject)jArray[0];
List<double> DominantFreqlist = new List<double>();
JArray phaseArr = JArray.FromObject(jobj["phases"]);
//List<double> DominantFreqList = new List<double>();
for (int i = 0; i < phaseArr.Count; i++)
{
if (phaseArr[i]["fmd_semi_period"] != null)
{
DominantFreqlist.Add(double.Parse(phaseArr[i]["fmd_semi_period"].ToString()));
}
}
if (DominantFreqlist.Count > 0)
{
if (DominantFreqlist.Count > 3)
{
double min = DominantFreqlist.Min();
double max = DominantFreqlist.Max();
DominantFreqlist.Remove(min);
DominantFreqlist.Remove(max);
dominantFreq = (int)((DominantFreqlist.Sum() / (double)DominantFreqlist.Count) * 1000);
}
}
}
}
catch (Exception ex)
{
return 0;
//throw ex;
}
}
return dominantFreq;
}
public void StatEventFre(List<MmEvent> mmEvents)
{
for (int i = TableShowCount - 1; i >= 0; i--)
{
int a = mmEvents.Count(mm => mm.EventTime > mmEvents[i].EventTime.AddHours(-1) && mm.EventTime <= mmEvents[i].EventTime);
//CurEventFre = new int();
//Console.WriteLine(a);
ListEventFre.Add(new ObservableValue(a));
EventFreLabels.Add(mmEvents[i].EventTime.ToString("HH:mm"));
}
}
public void AddEvent(MmEventEntity mmEvent)
{
ShowEvents.Add(mmEvent);
}
public double CalEnergy(double ml)
{
return Math.Round(63000.0 * Math.Pow(10, 1.47 * ml), 2);
}
int num = 1;
private void AddCom(object obj)
{
//CurEventFre=ran.Next(1,60);
//CurDominantFreq=ran.Next(1,150);
//CurML = ran.Next(0, 4);
//CurStress=ran.Next(10000, 100000);
MmEventEntity mmEvent = new MmEventEntity();
mmEvent.X = num++;
mmEvent.Y = 0;
mmEvent.EventTime = new DateTime(2022, 03, 09, 00, 00, 00).AddMinutes(num);
//mmEvent.EventTime.AddMinutes(num);
mmEvent.LocSta = 10;
mmEvent.MLSta = 10;
mmEvent.ML = -3;
ListEventFre.Add(new ObservableValue(10));
AddEvent(mmEvent);
//Console.WriteLine(CurEventFre.ToString());
}
public void Dispose()
{
try
{
//this.IsRunning = false;
Task.WaitAll(this.taskList.ToArray());
//ComputerInfo.GetInstance().Dispose();
}
catch { }
}
#region Cad方法
public void CreateBackgroudByDwg()
{
cadImage3DList = new List<PointLineSeries3D>();
//DwgVersion.
//版本报错
DxfModel model = DwgReader.Read(CadFilePath);
//try
{
System.Windows.Media.Color color = System.Windows.Media.Colors.Black;
double lineWidth = 0.05;
int lineStyle = 1;
bool closeLine = true;
foreach (var item in model.Layers)
{
if (item.Enabled)
{
//CadLinePropertyModel clpm = CadLineList.LineProperties.Find(lp => lp.Name == item.Name);
CadLinePropertyModel clpm = null;
if (clpm != null)
{
color = clpm.LineColor;
lineWidth = clpm.LineWidth;
closeLine = clpm.CloseLine;
var entitys = model.Entities.Where(et => et.Layer.Name == item.Name);
if (entitys != null)
{
foreach (var entity in entitys)
{
if (entity.EntityType == "LWPOLYLINE")
{
List<SeriesPoint3D> points = new List<SeriesPoint3D>();
foreach (var point in ((DxfLwPolyline)entity).Vertices)
{
double x = (point.X) / Scale;
double y = (point.Y) / Scale;
points.Add(new SeriesPoint3D(x, clpm.LayerHeight, y, color));
}
cadImage3DList.Add(CreateDxfLwPolyline("cad-" + item.Name, entity.ToString()
, false, lineStyle, lineWidth, points.ToArray(), closeLine));
}
if (entity.EntityType == "TEXT")
{
DxfText et = (DxfText)entity;
if (et.AlignmentPoint1.X >= GlobalConfig.ProjectConfig.WorkArea.EMin &&
et.AlignmentPoint1.X <= GlobalConfig.ProjectConfig.WorkArea.EMax &&
et.AlignmentPoint1.Y >= GlobalConfig.ProjectConfig.WorkArea.NMin &&
et.AlignmentPoint1.Y <= GlobalConfig.ProjectConfig.WorkArea.EMax)
{
ChartAnnotationCollection.Add(CreateDxfText(((DxfText)entity), "cad-text", 12, clpm.LayerHeight));
}
}
if (entity.EntityType == "MTEXT")
{
DxfMText et = (DxfMText)entity;
//if (et.AlignmentPoint1.X >= GlobalConfig.ProjectConfig.WorkArea.EMin &&
// et.AlignmentPoint1.X <= GlobalConfig.ProjectConfig.WorkArea.EMax &&
// et.AlignmentPoint1.Y >= GlobalConfig.ProjectConfig.WorkArea.NMin &&
// et.AlignmentPoint1.Y <= GlobalConfig.ProjectConfig.WorkArea.EMax)
{
ChartAnnotationCollection.Add(CreateDxfMText(et, "cad-text", 12, clpm.LayerHeight));
}
}
}
}
}
}
}
ChartPointLineCollection.AddRange(cadImage3DList);
}
}
public static PointLineSeries3D CreateDxfLwPolyline(string tag, string title, bool allowUser, int lineStyle, double lineWidth, SeriesPoint3D[] points, bool closeLine)
{
PointLineSeries3D pls3d = new PointLineSeries3D();
pls3d.Tag = tag;
pls3d.Title.Text = title;
pls3d.MultiColorLine = true;
pls3d.AllowUserInteraction = allowUser;
pls3d.PointsVisible = false;
pls3d.LineStyle.LineOptimization = (LineOptimization)lineStyle;
pls3d.LineStyle.Width = lineWidth;
pls3d.Points = points;
pls3d.ClosedLine = closeLine;
return pls3d;
}
public Annotation3D CreateDxfText(DxfText dxfText, string tag, double fontSize, double layerHeight)
{
Annotation3D at3d = new Annotation3D();
at3d.Tag = tag;
at3d.Style = AnnotationStyle.Rectangle;
at3d.AllowUserInteraction = false;
at3d.BorderVisible = false;
at3d.Shadow.Visible = false;
at3d.Visible = true;
at3d.Fill.Style = RectFillStyle.None;
at3d.TextStyle.Color = Dc2Mc(dxfText.Color);
at3d.TextStyle.Font = new WpfFont("微软雅黑", fontSize);
at3d.Text = dxfText.Text;
at3d.LocationCoordinateSystem = CoordinateSystem.AxisValues;
at3d.LocationAxisValues.SetValues((dxfText.AlignmentPoint1.X) / Scale, layerHeight,
(dxfText.AlignmentPoint1.Y) / Scale);
at3d.Anchor.SetValues(0.5, 0.5);
return at3d;
}
public Annotation3D CreateDxfMText(DxfMText dxfText, string tag, double fontSize, double layerHeight)
{
Annotation3D at3d = new Annotation3D();
at3d.Tag = tag;
at3d.Style = AnnotationStyle.Rectangle;
at3d.AllowUserInteraction = false;
at3d.BorderVisible = false;
at3d.Shadow.Visible = false;
at3d.Visible = true;
at3d.Fill.Style = RectFillStyle.None;
at3d.TextStyle.Color = Colors.Blue;
//at3d.TextStyle.Color = Dc2Mc(dxfText.Color);
at3d.TextStyle.Font = new WpfFont("微软雅黑", fontSize);
at3d.Text = dxfText.Text;
at3d.LocationCoordinateSystem = CoordinateSystem.AxisValues;
at3d.LocationAxisValues.SetValues((dxfText.InsertionPoint.X) / Scale, layerHeight,
(dxfText.InsertionPoint.Y) / Scale);
at3d.Anchor.SetValues(0.5, 0.5);
return at3d;
}
/// <summary>
/// dxfColor2MediaColor
/// </summary>
/// <param name="en"></param>
/// <returns></returns>
public static Color Dc2Mc(EntityColor en)
{
return Color.FromRgb(en.R, en.G, en.B);
}
#endregion
}
}