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; /// /// 工作状态 /// 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; /// /// 事件近一小时频度 /// public int EventFrequencyCount { get { return eventFrequencyCount; } set { SetProperty(ref eventFrequencyCount, value); } } private double lastAlarmEventML = 0; /// /// 最后报警事件震级 /// public double LastAlarmEventML { get { return lastAlarmEventML; } set { SetProperty(ref lastAlarmEventML, value); } } private double lastAlarmEventEnergy = 0; /// /// 最后报警事件能量 /// 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 ListEventFre { get; set; } public ChartValues ListDominantFreq { get; set; } public ChartValues ListEnergy { get; set; } public ChartValues ListML { get; set; } public ChartValues ListStress { get; set; } private ObservableCollection _eventFreLabels; public ObservableCollection EventFreLabels { get { return _eventFreLabels; } set { SetProperty(ref _eventFreLabels, value); } } private ObservableCollection _eventMLLabels; public ObservableCollection EventMLLabels { get { return _eventMLLabels; } set { SetProperty(ref _eventMLLabels, value); } } private ObservableCollection _eventDominantFreqLabels; public ObservableCollection EventDominantFreqLabels { get { return _eventDominantFreqLabels; } set { SetProperty(ref _eventDominantFreqLabels, value); } } private ObservableCollection _eventEnergyLabels; public ObservableCollection EventEnergyLabels { get { return _eventEnergyLabels; } set { SetProperty(ref _eventEnergyLabels, value); } } private ObservableCollection _eventStressLabels; public ObservableCollection EventStressLabels { get { return _eventStressLabels; } set { SetProperty(ref _eventStressLabels, value); } } public List SelectEvents { get; set; } private ObservableCollection _showEvents; public ObservableCollection ShowEvents { get { return _showEvents; } set { _showEvents = value; } } ChartValues cv1 = new ChartValues(); Random ran = new Random(); List taskList = new List(); 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 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 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() //.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() ////.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(); ListEventFre.NoisyCollectionChanged += EventFre_NoisyCollectionChanged; EventFreLabels = new ObservableCollection(); ListDominantFreq = new ChartValues(); ListDominantFreq.NoisyCollectionChanged += DominantFreq_NoisyCollectionChanged; EventDominantFreqLabels = new ObservableCollection(); ListML = new ChartValues(); ListML.NoisyCollectionChanged += MLS_NoisyCollectionChanged; EventMLLabels = new ObservableCollection(); ListEnergy = new ChartValues(); ListEnergy.NoisyCollectionChanged += ListEnergy_NoisyCollectionChanged; EventEnergyLabels = new ObservableCollection(); ListStress = new ChartValues(); ListStress.NoisyCollectionChanged += Stress_NoisyCollectionChanged; EventStressLabels = new ObservableCollection(); #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(); InitEventList(); this._ea.GetEvent().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().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().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 oldItems, IEnumerable newItems) { if (ListEnergy.Count > TableShowCount) { ListEnergy.RemoveAt(0); } } private void EventFre_NoisyCollectionChanged(IEnumerable oldItems, IEnumerable newItems) { if (ListEventFre.Count > TableShowCount) { ListEventFre.RemoveAt(0); } } private void Stress_NoisyCollectionChanged(IEnumerable oldItems, IEnumerable newItems) { if (ListStress.Count > TableShowCount) { ListStress.RemoveAt(0); } } private void MLS_NoisyCollectionChanged(IEnumerable oldItems, IEnumerable newItems) { if (ListML.Count > TableShowCount) { ListML.RemoveAt(0); } } private void DominantFreq_NoisyCollectionChanged(IEnumerable oldItems, IEnumerable 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(); 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().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(); } } /// /// 获取主频 /// /// /// 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 DominantFreqlist = new List(); JArray phaseArr = JArray.FromObject(jobj["phases"]); //List DominantFreqList = new List(); 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 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(); //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 points = new List(); 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; } /// /// dxfColor2MediaColor /// /// /// public static Color Dc2Mc(EntityColor en) { return Color.FromRgb(en.R, en.G, en.B); } #endregion } }