using DevExpress.XtraEditors; using DevExpress.XtraLayout.Utils; using Ips.Library.Basic; using Ips.Library.DxpLib; using Ips.Library.Entity; using Ips.LocAlgorithm; using Ips.Sps.Com.Ephs; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Ips.Sps.Com.Gdops { public partial class GdopParamSetCtrl : DevExpress.XtraEditors.XtraUserControl { public GdopParamSetCtrl() { InitializeComponent(); SigTimeDateEdit.UseTimeEdit(); } private GdopAnalyseViewModel _viewModel; public event EventHandler QueryEph; public IList AntList { get; set; } public IList RefSiteList { get; set; } public IList SatList { get; set; } public void SetViewModel(GdopAnalyseViewModel viewModel) { _viewModel = viewModel; bsGdopModel.DataSource = _viewModel; if (_viewModel.AntId > 0) antEdit.EditValue = AntList.Where(m => m.Id == _viewModel.AntId).FirstOrDefault(); if (_viewModel.RefId > 0) refEdit.EditValue = RefSiteList.Where(m => m.Id == _viewModel.RefId).FirstOrDefault(); if (_viewModel.MsId > 0) mainSatEdit.EditValue = _viewModel.MsId; if (_viewModel.As1Id > 0) adja1SatEdit.EditValue = _viewModel.As1Id; if (_viewModel.As2Id > 0) adja2SatEdit.EditValue = _viewModel.As2Id; SetFormDisplay(_viewModel.HasRef); } private void GdopParamSetCtrl_Load(object sender, EventArgs e) { BindList(); } private void BindList() { if (AntList.IsNotNullOrEmpty()) { bsAntList.DataSource = AntList; } else { itemForAnt.Visibility = LayoutVisibility.Never; } if (RefSiteList.IsNotNullOrEmpty()) { bsRefSiteList.DataSource = RefSiteList; } else { itemForRefSite.Visibility = LayoutVisibility.Never; } if (SatList.IsNotNullOrEmpty()) { bsSatList.DataSource = SatList; } else { itemForMainSat.Visibility = LayoutVisibility.Never; itemForAdja1Sat.Visibility = LayoutVisibility.Never; itemForAdja2Sat.Visibility = LayoutVisibility.Never; itemForCalcEph.Visibility = LayoutVisibility.Never; } } private void btnEphCalc_Click(object sender, EventArgs e) { if (mainSatEdit.EditValue == null) { MsgHelper.ShowError("请选择主星"); return; } if (adja1SatEdit.EditValue == null) { MsgHelper.ShowError("请选择邻星1"); return; } if (adja2SatEdit.EditValue == null) { MsgHelper.ShowError("请选择邻星2"); return; } if (QueryEph == null) return; var ephTime = SigTimeDateEdit.DateTime; QuerySatEph(ephTime, mainSatEdit, MsXTextEdit, MsYTextEdit, MsZTextEdit); QuerySatEph(ephTime, adja1SatEdit, AsX1TextEdit, AsY1TextEdit, AsZ1TextEdit); QuerySatEph(ephTime, adja2SatEdit, AsX2TextEdit, AsY2TextEdit, AsZ2TextEdit); } private async void btnGdopCalc_Click(object sender, EventArgs e) { btnGdopCalc.Enabled = false; try { await _viewModel.CalcGdop(); } catch (AggregateException aggEx) { aggEx.Flatten().Handle(ex => { MsgHelper.ShowError(ex.Message); return true; }); } finally { btnGdopCalc.Enabled = true; } } private void QuerySatEph(DateTime ephTime, BaseEdit satEdit, BaseEdit xEdit, BaseEdit yEdit, BaseEdit zEdit) { var satNum = (int)satEdit.EditValue; var arg = new QueryEphEventArgs(satNum, ephTime); QueryEph.Invoke(this, arg); if (arg.Result != null) { xEdit.EditValue = arg.Result.X; yEdit.EditValue = arg.Result.Y; zEdit.EditValue = arg.Result.Z; } } private void antEdit_EditValueChanged(object sender, EventArgs e) { var ant = antEdit.EditValue as AntInfo; if (ant == null) return; AntLonTextEdit.EditValue = ant.Lon; AntLatTextEdit.EditValue = ant.Lat; AntAltTextEdit.EditValue = ant.Alt; } private void refEdit_EditValueChanged(object sender, EventArgs e) { var refSite = refEdit.EditValue as RefSiteInfo; if (refSite == null) return; RefLonTextEdit.EditValue = refSite.Lon; RefLatTextEdit.EditValue = refSite.Lat; RefAltTextEdit.EditValue = refSite.Alt; } private void HasRefCheckEdit_CheckedChanged(object sender, EventArgs e) { SetFormDisplay(HasRefCheckEdit.Checked); } private void SetFormDisplay(bool hasRef) { if (HasRefCheckEdit.Checked) { grpAntInfo.Visibility = LayoutVisibility.Never; grpRefSiteInfo.Visibility = LayoutVisibility.Always; } else { grpAntInfo.Visibility = LayoutVisibility.Always; grpRefSiteInfo.Visibility = LayoutVisibility.Never; } } } }