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.

711 lines
32 KiB
C#

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Prism.Events;
using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Media;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
using System.Windows.Threading;
using Txgy.EWS.Client.Common.MessageEvents;
using Txgy.EWS.Client.Common;
using Txgy.EWS.Client.IBLL;
using Txgy.EWS.Client.ILog;
using Txgy.EWS.Client.Models;
using Txgy.EWS.Client.PageModule.Models;
using Unity;
using static Txgy.EWS.Client.Common.GlobalConfig;
using Txgy.EWS.Client.Entity;
using Newtonsoft.Json;
using System.IO;
using System.ComponentModel;
using Txgy.Microseismic.BaseLib.Models;
using SharpDX.Direct2D1.Effects;
using System.Windows.Media.Media3D;
using System.Windows.Media;
using Txgy.EWS.Client.PageModule.Common;
namespace Txgy.EWS.Client.PageModule.ViewModels
{
public class TitleViewModel : BindableBase
{
private readonly IEventAggregator _ea;
private readonly ISearchMsEventBLL searchMsEventBLL;
private readonly ILogHelper _logHelper;
Dispatcher _dispatcher;
private bool isCanRun = true;
SoundPlayer alarmPlayer = new SoundPlayer();
public DateTime SystemRunTime { get; set; }
/// <summary>
/// 报警等级列表
/// </summary>
public List<AlarmLevelModel> ListAlarmLevel;
public List<string> ListAlramMusic { get; set; }
private bool canPlayAlarmSound = true;
public bool CanPlayAlarmSound
{
get { return canPlayAlarmSound; }
set
{
SetProperty(ref canPlayAlarmSound, value);
}
}
public bool IsCanRun
{
get { return isCanRun; }
set
{
SetProperty(ref isCanRun, value);
}
}
/// <summary>
/// 刷新间隔(s)
/// </summary>
private int refreshInterval = 3;
public int RefreshInterval
{
get { return refreshInterval; }
set
{
SetProperty(ref refreshInterval, value);
}
}
private string curAlarmMusic;
public string CurAlarmMusic
{
get { return curAlarmMusic; }
set
{
SetProperty(ref curAlarmMusic, value);
alarmPlayer.SoundLocation = AppDomain.CurrentDomain.BaseDirectory + "audio\\" + curAlarmMusic;
alarmPlayer.LoadAsync();
}
}
private string runSpan = "0";
public string RunSpan
{
get { return runSpan; }
set
{
SetProperty(ref runSpan, value);
}
}
private int _receivedEventCount;
/// <summary>
/// 接收到的事件数量
/// </summary>
public int ReceivedEventCount
{
get { return _receivedEventCount; }
set
{
SetProperty(ref _receivedEventCount, value);
}
}
private int _alarmedEventCount = 0;
/// <summary>
/// 已报警事件数量
/// </summary>
public int AlarmedEventCount
{
get { return _alarmedEventCount; }
set
{
SetProperty(ref _alarmedEventCount, value);
}
}
private AlarmSetting _alarmSetting;
/// <summary>
/// 报警参数
/// </summary>
public AlarmSetting AlarmSetting
{
get { return _alarmSetting; }
set
{
SetProperty(ref _alarmSetting, value);
}
}
DateTime alarmEndTime = DateTime.Now;
//private double alarmThreshold = 1;
///// <summary>
///// 报警阈值J
///// </summary>
//public double AlarmThreshold
//{
// get { return alarmThreshold; }
// set
// {
// SetProperty(ref alarmThreshold, value);
// }
//}
private AlarmLevelModel curAlarmLevel;
/// <summary>
/// 当前预警等级
/// </summary>
public AlarmLevelModel CurAlarmLevel
{
get { return curAlarmLevel; }
set
{
SetProperty(ref curAlarmLevel, value);
}
}
public ICommand ChangeMusicCommand
{
get => new Prism.Commands.DelegateCommand(() =>
{
LogObject.Log(MethodBase.GetCurrentMethod().Name).Info("===========End==============>>>");
});
}
public ICommand StartMonitoringCommand
{
//2023-02-21
get => new Prism.Commands.DelegateCommand(StartMonitorning);
}
public TitleViewModel(IUnityContainer unityContainer, IEventAggregator ea, ISearchMsEventBLL searchMsEventBLL, ILogHelper logHelper)
{
_dispatcher = unityContainer.Resolve<Dispatcher>();
this._ea = ea;
this._logHelper = logHelper;
this.searchMsEventBLL = searchMsEventBLL;
//AlarmThreshold = 1000;
using (System.IO.StreamReader sr = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory +
System.Configuration.ConfigurationManager.AppSettings["AlarmSetting"].ToString()))
{
AlarmSetting = JsonConvert.DeserializeObject<AlarmSetting>(sr.ReadToEnd());
}
//AlarmThreshold = AlarmSettingConfig.AlarmThreshold;
//RefreshInterval = AlarmSetting.RefreshInterval;
RefreshInterval = int.Parse(System.Configuration.ConfigurationManager.AppSettings["RefreshInterval"].ToString());
CurAlarmMusic = AlarmSetting.AlarmSound;
ListAlarmLevel = new List<AlarmLevelModel>();
using (System.IO.StreamReader sr = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory +
System.Configuration.ConfigurationManager.AppSettings["AlarmLevelConfig"].ToString()))
{
ListAlarmLevel = JsonConvert.DeserializeObject<List<AlarmLevelModel>>(sr.ReadToEnd());
}
CurAlarmLevel = ListAlarmLevel.First(la => la.Level == 1);
_dispatcher.Invoke(new System.Action(() =>
{
GlobalData.CurAlarmLevelValue = CurAlarmLevel.Level;
GlobalData.CurAlarmLevelColor = new SolidColorBrush((Color)ColorConverter.ConvertFromString(CurAlarmLevel.ColorStr));
}));
ListAlramMusic = new List<string>();
string[] alarmTmpArray = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory + "audio", "*.wav");
for (int i = 0; i < alarmTmpArray.Length; i++)
{
ListAlramMusic.Add(Path.GetFileName(alarmTmpArray[i]));
}
GlobalConfig.IsInitializing = true;
//初始化检索数据库数据
Task.Run(async () => {
string dataFilePath = GlobalConfig.ProjectConfig.MseedFilePath + "\\";
GlobalData.ListAlarmEventId = new List<int>();
GlobalData.AlarmEvents = new List<GridItemEventResult>();
GlobalData.ReceivedEvents = new List<GridItemEventResult>();
GlobalData.LastEvent = new GridItemEventResult();
GlobalData.LastEvent.EventID = 0;
//预警平面参数
GlobalData.AlarmPlanList = new List<Plane>();
GlobalData.MidEventList = new List<GridItemEventResult>();
DateTime timeNow = DateTime.Now;
var events = searchMsEventBLL.GetGridEvents(timeNow.AddMinutes(-GlobalConfig.LoadDataTimeLenMins), timeNow, -3, 0);
for (int i = 0; i < events.Count; i++)
{
await searchMsEventBLL.DownloadJsonDataAsync(events[i], dataFilePath, NotifyView);
GlobalConfig.InitializingCounter = ((i+1.0)/(double)events.Count)*100.0;
//await Console.Out.WriteLineAsync(GlobalConfig.InitializingCounter.ToString());
}
}).ContinueWith(t => { GlobalConfig.IsInitializing = false; });
//
}
void StartMonitorning()
{
if (!GlobalData.IsRunning)
{
this._logHelper.Debug(this, "===========End==============>>>");
//LogObject.Log(MethodBase.GetCurrentMethod().Name).Info("===========End==============>>>");
Task.WaitAll(GlobalData.TaskList.ToArray());
Task.Delay(2000);
}
else
{
this._logHelper.Debug(this, "===========Startup==============>>>");
//LogObject.Log(MethodBase.GetCurrentMethod().Name).Info("===========Startup==============>>>");
string dataFilePath = GlobalConfig.ProjectConfig.MseedFilePath + "\\";
AlarmedEventCount = 0;
SystemRunTime = DateTime.Now;
//DateTime alarmTime = DateTime.Now;
DateTime eventFreqTime = DateTime.Now;
#region 预警平面参数
//GlobalData.AlarmPlanList = new List<Plane>();
//GlobalData.MidEventList = new List<GridItemEventResult>();
#endregion
//2023-03-15新事件查询每10秒查询一次如果有新事件需要下载二进制数据数据大小5m左右因为是远程数据库下载需要5秒左右。
//2023-04-25已修正
var taskAlarm = Task.Factory.StartNew(new System.Action(async () =>
{
if (GlobalConfig.IsDesign)
{
alarmEndTime = new DateTime(2023, 4, 1);
RefreshInterval = GlobalConfig.DRefreshInterval;
// await Task.Delay(3000);
int qid = 54171;
while (GlobalData.IsRunning)
{
try
{
await Task.Delay(500).ContinueWith(async t =>
{
//Console.WriteLine($"查询开始时间:{DateTime.Now.ToString("HH:mm:ss.FFF")}");
//var events = searchMsEventBLL.GetLastEvents(qid);
var events = searchMsEventBLL.GetGridEvents(alarmEndTime, alarmEndTime.AddSeconds(3600), -3, 0);
foreach (var item in events)
{
await searchMsEventBLL.DownloadJsonDataAsync(item, dataFilePath, NotifyView);
//Console.WriteLine(item.EventID);
}
//Console.WriteLine($"查询开始时间:{DateTime.Now.ToString("HH:mm:ss.FFF")}");
//alarmEndTime = alarmEndTime.AddMinutes(10);
//await searchMsEventBLL.QueryAndDownloadDataAsync(qid, alarmEndTime, dataFilePath, NotifyView);
alarmEndTime = alarmEndTime.AddMinutes(60);
qid++;
//alarmEndTime = DateTime.Parse(GlobalData.LastEvent.EventTime);
//alarmEndTime =GlobalData.LastEvent.OTime;
});
}
catch (Exception ex)
{
string strLog = String.Format("查询线程,{0}", ex.StackTrace);
this._logHelper.Error(this, strLog);
throw;
}
}
}
else
{
//获取最后一个事件
GridItemEventResult lastEvent = searchMsEventBLL.GetLastTopEvents(1)[0];
GlobalData.ListAlarmEventId.Add(lastEvent.EventID);
GlobalData.LastEvent = new GridItemEventResult();
GlobalData.LastEvent.EventID = lastEvent.EventID;
GlobalData.LastEvent.EventTime = lastEvent.EventTime;
GlobalData.LastEvent.OTime = DateTime.Parse(lastEvent.EventTime);
while (GlobalData.IsRunning)
{
try
{
await Task.Delay(RefreshInterval * 1000).ContinueWith(async t =>
{
//2023-04-25
//await searchMsEventBLL.QueryAndDownloadDataAsync(GlobalData.LastEvent.EventID, dataFilePath, NotifyView);
//_logHelper.Debug($"{DateTime.Now.ToString("G")}:事件查询完成", "");
//2023-04-26
var events = searchMsEventBLL.GetLastEvents(GlobalData.LastEvent.EventID);
foreach (var item in events)
{
await searchMsEventBLL.DownloadJsonDataAsync(item, dataFilePath, NotifyView);
//Console.WriteLine(item.EventID);
}
});
}
catch (Exception ex)
{
string strLog = String.Format("查询线程,{0}", ex.StackTrace);
this._logHelper.Error(this, strLog);
//string strInfoLog = String.Format("事件查询异常结束,系统运行时长:{0}", (DateTime.Now - SystemRunTime).TotalSeconds);
//this._logHelper.Error(this, strInfoLog);
//LogObject.Log(MethodBase.GetCurrentMethod().Name).Error(ex.Message);
//throw;
}
}
}
}));
//事件数量统计查询每60秒查询一次大多数情况运行正常如果遇到网络不好的情况或者新事件查询功能在下载数据数据库连接会出问题。
var taskEventFreq = Task.Factory.StartNew(new System.Action(async () =>
{
if (GlobalConfig.IsDesign)
{
eventFreqTime = GlobalConfig.DStartTime;
while (GlobalData.IsRunning)
{
try
{
await Task.Delay(10000).ContinueWith(async t =>
{
DateTime st = eventFreqTime.AddSeconds(-3600);
DateTime et = eventFreqTime;
int StatCount = await searchMsEventBLL.StatEventCountAsync(st, et);
//通知更新一小时前事件数量
this._ea.GetEvent<UpdateEventFrequencyEvent>().Publish(StatCount);
eventFreqTime = eventFreqTime.AddSeconds(3600);
});
}
catch (Exception ex)
{
string strLog = String.Format("统计线程,{0}", ex.StackTrace);
Console.WriteLine(strLog);
this._logHelper.Error(this, strLog);
//throw;
}
}
}
else
{
while (GlobalData.IsRunning)
{
try
{
await Task.Delay(60000).ContinueWith(async t =>
{
DateTime st = eventFreqTime.AddSeconds(-3600);
DateTime et = eventFreqTime;
int StatCount = await searchMsEventBLL.StatEventCountAsync(st, et);
//通知更新一小时前事件数量
this._ea.GetEvent<UpdateEventFrequencyEvent>().Publish(StatCount);
eventFreqTime = DateTime.Now;
});
}
catch (Exception ex)
{
string strLog = String.Format("统计线程,{0}", ex.StackTrace);
//Console.WriteLine(strLog);
this._logHelper.Error(this, strLog);
//throw;
}
}
}
}));
//更新监控时长
var taskRunTime = Task.Factory.StartNew(new System.Action(async () =>
{
while (GlobalData.IsRunning)
{
TimeSpan ts = DateTime.Now - SystemRunTime;
RunSpan = ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分" + ts.Seconds.ToString() + "秒";
await Task.Delay(1000);
}
}));
GlobalData.TaskList.Add(taskAlarm);
GlobalData.TaskList.Add(taskEventFreq);
GlobalData.TaskList.Add(taskRunTime);
}
}
void NotifyView(GridItemEventResult gier)
{
_logHelper.Debug($"{DateTime.Now.ToString("G")}:回调执行", "回调执行完成");
//Console.WriteLine($"事件ID:{gier.EventID}下载回调成功,下载结束时间:{DateTime.Now.ToString("HH:mm:ss.FFF")}!");
if (GlobalData.ListAlarmEventId.Contains(gier.EventID))
{
// Console.WriteLine($"事件ID:{gier.EventID}已存在,返回!");
_logHelper.Debug($"{DateTime.Now.ToString("G")}:回调执行", $"事件ID:{gier.EventID}已存在,返回");
return;
}
GlobalData.ListAlarmEventId.Add(gier.EventID);
if (gier.EventID > GlobalData.LastEvent.EventID)
{
gier.DominantFreq = GlobalData.GetDominFreq(gier.EventTime);
GlobalData.LastEvent = new GridItemEventResult();
GlobalData.LastEvent.EventID = gier.EventID;
GlobalData.LastEvent.EventTime = gier.EventTime;
GlobalData.LastEvent.OTime = gier.OTime;
_logHelper.Debug($"{DateTime.Now.ToString("G")}:回调执行", $"事件ID:{gier.EventID}LastEvent事件更新。");
//通知主频更新
this._ea.GetEvent<UpdateEventDominFreqMessage>().Publish(gier.DominantFreq);
_logHelper.Debug($"{DateTime.Now.ToString("G")}:回调执行", $"事件ID:{gier.EventID}LastEvent页面更新。");
}
#region 通知页面更新
//通知预警页面图表变化
this._ea.GetEvent<UpdateLastAlarmEvent>().Publish(gier);
//计算震源机制
EventFunc.ComputeFM(gier);
//计算主频
gier.DominantFreq = GlobalData.GetDominFreq(gier.EventTime);
//从接收事件列表中删除超过指定时间范围的数据
var timeoutReceivedEvents = GlobalData.ReceivedEvents.FindAll(re => (DateTime.Now - DateTime.Parse(re.EventTime)).TotalSeconds >= GlobalData.EventShowTimeout).ToArray();
if (timeoutReceivedEvents.Length > 0)
{
for (int i = timeoutReceivedEvents.Length - 1; i >= 0; i--)
{
GlobalData.ReceivedEvents.Remove(timeoutReceivedEvents[i]);
}
}
if (gier.ML >= GlobalConfig.MidML)
{
GlobalData.MidEventList.Add(gier);
GlobalData.MidEventCount = GlobalData.MidEventList.Count;
SearchPlane(gier);
}
//添加到已接收事件列表
if (!GlobalData.ReceivedEvents.Contains(gier))
{
GlobalData.ReceivedEvents.Add(gier);
GlobalData.PlanesAddEvent(gier);
this._ea.GetEvent<UpdateReceivedEventMessage>().Publish(gier);
}
ReceivedEventCount = GlobalData.ReceivedEvents.Count();
//检查预警平面是否失效
if (GlobalConfig.IsDesign)
{
foreach (var plane in GlobalData.AlarmPlanList)
{
if (plane.Valid)
{
//Debug.WriteLine((moniCurTime - plane.Event1.OTime).TotalSeconds);
bool ec1 = (alarmEndTime - DateTime.Parse(plane.Event1.EventTime)).TotalSeconds > GlobalData.ValidSecend;
if (ec1)
{
//Debug.WriteLine($"ec1:{(moniCurTime - plane.Event1.OTime).TotalSeconds}");
plane.Valid = false;
continue;
}
bool ec2 = (alarmEndTime - DateTime.Parse(plane.Event2.EventTime)).TotalSeconds > GlobalData.ValidSecend;
if (ec2)
{
//Debug.WriteLine($"ec2:{(moniCurTime - plane.Event2.OTime).TotalSeconds}");
plane.Valid = false;
continue;
}
bool ec3 = (alarmEndTime - DateTime.Parse(plane.Event3.EventTime)).TotalSeconds > GlobalData.ValidSecend;
if (ec3)
{
//Debug.WriteLine($"ec3:{(moniCurTime - plane.Event3.OTime).TotalSeconds}");
plane.Valid = false;
//continue;
}
}
}
}
else
{
foreach (var plane in GlobalData.AlarmPlanList)
{
if (plane.Valid)
{
//Debug.WriteLine((moniCurTime - plane.Event1.OTime).TotalSeconds);
bool ec1 = (DateTime.Now - DateTime.Parse(plane.Event1.EventTime)).TotalSeconds > GlobalData.ValidSecend;
if (ec1)
{
//Debug.WriteLine($"ec1:{(moniCurTime - plane.Event1.OTime).TotalSeconds}");
plane.Valid = false;
continue;
}
bool ec2 = (DateTime.Now - DateTime.Parse(plane.Event2.EventTime)).TotalSeconds > GlobalData.ValidSecend;
if (ec2)
{
//Debug.WriteLine($"ec2:{(moniCurTime - plane.Event2.OTime).TotalSeconds}");
plane.Valid = false;
continue;
}
bool ec3 = (DateTime.Now - DateTime.Parse(plane.Event3.EventTime)).TotalSeconds > GlobalData.ValidSecend;
if (ec3)
{
//Debug.WriteLine($"ec3:{(moniCurTime - plane.Event3.OTime).TotalSeconds}");
plane.Valid = false;
//continue;
}
}
}
}
//Console.WriteLine($"删除前平面数量:{GlobalData.AlarmPlanList.Count}");
//删除以失效的平面
GlobalData.AlarmPlanList.RemoveAll(x => x.Valid == false);
GlobalData.AlarmPlanCount = GlobalData.AlarmPlanList.Count();
//Console.WriteLine($"删除后平面数量:{GlobalData.AlarmPlanList.Count}");
//统计预警平面的事件每小时频度
int maxFrequency = 0;
foreach (var plane in GlobalData.AlarmPlanList)
{
if (plane.Valid)
{
var hourlyFrequency = plane.InRangeEventList
.GroupBy(e => new DateTime(e.OTime.Year, e.OTime.Month, e.OTime.Day, e.OTime.Hour, 0, 0))
.Select(g => new
{
Hour = g.Key,
Frequency = g.Count()
})
.ToList();
if (hourlyFrequency != null)
{
if (hourlyFrequency.Count > 0)
{
if (hourlyFrequency[hourlyFrequency.Count - 1].Frequency > maxFrequency)
{
maxFrequency = hourlyFrequency[hourlyFrequency.Count - 1].Frequency;
}
}
}
plane.EventFrequencyList = new List<EventFrequency>();
//Debug.WriteLine($"平面ID{plane.ID}\t当前时间:{moniCurTime.ToString("G")}\t最大连续:{plane.MaxUnbrokenSameFocalCount}");
if (!GlobalData.unbrokenSameFocalList.Contains(plane.MaxUnbrokenSameFocalCount))
{
GlobalData.unbrokenSameFocalList.Add(plane.MaxUnbrokenSameFocalCount);
}
if (plane.MaxUnbrokenSameFocalCount < GlobalData.maxUnbrokenFocal)
{
GlobalData.maxUnbrokenFocal = plane.MaxUnbrokenSameFocalCount;
}
foreach (var item in hourlyFrequency)
{
plane.EventFrequencyList.Add(new EventFrequency { StartTime = item.Hour, Frequency = item.Frequency });
if (item.Frequency > GlobalData.maxFrequency)
{
GlobalData.maxFrequency = item.Frequency;
}
if (!GlobalData.frequencyList.Contains(item.Frequency))
{
GlobalData.frequencyList.Add(item.Frequency);
}
//Debug.WriteLine($"小时:{item.Hour}\t频度{item.Frequency}");
}
//Debug.WriteLine("---------------------------------------------");
}
}
if (maxFrequency > 40)
{
CurAlarmLevel = ListAlarmLevel.First(la => la.Level == 4);
}
else if (maxFrequency > 30)
{
CurAlarmLevel = ListAlarmLevel.First(la => la.Level == 3);
}
else if (maxFrequency > 20)
{
CurAlarmLevel = ListAlarmLevel.First(la => la.Level == 2);
}
else if (maxFrequency > 10)
{
CurAlarmLevel = ListAlarmLevel.First(la => la.Level == 1);
}
_dispatcher.Invoke(new System.Action(() =>
{
GlobalData.CurAlarmLevelValue = CurAlarmLevel.Level;
GlobalData.CurAlarmLevelColor = new SolidColorBrush((Color)ColorConverter.ConvertFromString(CurAlarmLevel.ColorStr));
}));
//Console.WriteLine($"maxFre:{maxFrequency}\tLevel:{GlobalData.CurAlarmLevelValue}\tColor:{CurAlarmLevel.ColorStr}");
//如果能量大于设定值,通知报警
if (gier.Energy >= AlarmSetting.AlarmThreshold)
{
//添加到报警事件列表
if (!GlobalData.AlarmEvents.Contains(gier))
{
//通知报警事件更新
this._ea.GetEvent<UpdateAlarmEventMessage>().Publish(gier);
//CurAlarmLevel = ListAlarmLevel.First(lal => lal.MaxEnergy >= gier.Energy && lal.MinEnergy <= gier.Energy);
//声音报警
if (canPlayAlarmSound)
{
alarmPlayer.PlaySync();
}
if (!GlobalConfig.IsDesign)
{
//从预警事件列表中删除超过指定时间范围的数据
var timeoutAlarmEvents = GlobalData.AlarmEvents.FindAll(re => (DateTime.Now - DateTime.Parse(re.EventTime)).TotalSeconds >= GlobalData.EventShowTimeout).ToArray();
if (timeoutAlarmEvents.Length > 0)
{
for (int i = timeoutAlarmEvents.Length - 1; i >= 0; i--)
{
GlobalData.AlarmEvents.Remove(timeoutAlarmEvents[i]);
}
}
}
//报警数量
AlarmedEventCount = GlobalData.AlarmEvents.Count;
}
//AlarmRecordEntity arent = new AlarmRecordEntity();
//arent.EventId = gier.EventID;
//arent.AlarmTime = gier.OriginTime;
//arent.AlarmLevel = CurAlarmLevel.Level;
//arent.Energy = gier.Energy;
//写入报警记录
//var haveAre = fsqlSqLite.Select<AlarmRecordEntity>().Where(are => are.EventId == arent.EventId).ToOne();
//if (haveAre == null)
//{
// fsqlSqLite.Insert(arent).ExecuteIdentityAsync();
//}
#endregion
}
}
public void SearchPlane(GridItemEventResult newEvent)
{
if (GlobalData.MidEventList != null)
{
if (GlobalData.MidEventList.Count > 2)
{
for (int i = 0; i < GlobalData.MidEventList.Count - 1; i++)
{
for (int j = i + 1; j < GlobalData.MidEventList.Count; j++)
{
if (GlobalData.MidEventList[i].EventID != GlobalData.MidEventList[j].EventID && GlobalData.MidEventList[i].EventID != newEvent.EventID &&
GlobalData.MidEventList[j].EventID != newEvent.EventID)
{
Plane sf = CreatePlane(GlobalData.AlarmPlanList.Count + 1, GlobalData.MidEventList[i], GlobalData.MidEventList[j], newEvent);
GlobalData.AlarmPlanList.Add(sf);
}
}
}
}
}
}
public Plane CreatePlane(int id, GridItemEventResult pe1, GridItemEventResult pe2, GridItemEventResult pe3)
{
Plane sur = new Plane();
sur.ID = id;
sur.Event1 = pe1;
sur.Pos1 = AbsoluteCoord2RelativeCoord(pe1);
sur.Event2 = pe2;
sur.Pos2 = AbsoluteCoord2RelativeCoord(pe2);
sur.Event3 = pe3;
sur.Pos3 = AbsoluteCoord2RelativeCoord(pe3);
sur.focal = new Random().Next(3);
sur.SetMNPPara();
return sur;
}
}
}