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#
		
	
			
		
		
	
	
			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
 | |
| 
 | |
|     }
 | |
| }
 |