using DevExpress.XtraEditors; using DevExpress.XtraEditors.Controls; using ExtensionsDev; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.Entity; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Documents; using System.Windows.Forms; using System.Windows.Input; using XdCxRhDW.Api; using XdCxRhDW.Api.AddIns; using XdCxRhDW.Entity; using XdCxRhDW.Repostory; namespace XdCxRhDW.App.EditForms { public partial class TarDfoCalc : DevExpress.XtraEditors.XtraForm { public TarDfoCalc() { InitializeComponent(); this.layoutControl1.UseDefault(); this.StartPosition = FormStartPosition.CenterParent; } public TarDfoCalc(double lon, double lat) : this() { this.txtTar.Text = $"{lon:f3},{lat:f3}"; } private void TarDfoCalc_Load(object sender, EventArgs e) { this.cbPosType.Properties.Items.Add(new RadioGroupItem((int)EnumPosType.X1Leo, EnumPosType.X1Leo.GetEnumDisplayName())); this.cbPosType.Properties.Items.Add(new RadioGroupItem((int)EnumPosType.X2Leo, EnumPosType.X2Leo.GetEnumDisplayName())); this.cbPosType.SelectedIndex = 0; } private void cbPosType_EditValueChanged(object sender, EventArgs e) { var editvalue = cbPosType.EditValue as RadioGroupItem; var posType = (EnumPosType)editvalue.Value; if (posType == EnumPosType.X1Leo) { var time1SatInfo = "1234,-1608416.82,5994263.83,3139842.12,-6632.9542,-373.9141,-2678.0471"; var time2SatInfo = "1234,-3479304.94,5612482.70,2187901.77,-5784.2167,-2163.5059,-3632.7021"; var time3SatInfo = "1234,-5018683.88,4714452.40,1001435.81,-4399.2159,-3780.5070,-4206.3348"; this.lcX1.Text = "第一时刻主星坐标X"; this.lcY1.Text = "第一时刻主星坐标Y"; this.lcZ1.Text = "第一时刻主星坐标Z"; this.lcVX1.Text = "第一时刻主星坐标VX"; this.lcVY1.Text = "第一时刻主星坐标VY"; this.lcVZ1.Text = "第一时刻主星坐标VZ"; this.lcX2.Text = "第二时刻主星坐标X"; this.lcY2.Text = "第二时刻主星坐标Y"; this.lcZ2.Text = "第二时刻主星坐标Z"; this.lcVX2.Text = "第二时刻主星坐标VX"; this.lcVY2.Text = "第二时刻主星坐标VY"; this.lcVZ2.Text = "第二时刻主星坐标VZ"; var t1 = time1SatInfo.Split(','); int idx = 0; txtX1.EditValue = t1[++idx]; txtY1.EditValue = t1[++idx]; txtZ1.EditValue = t1[++idx]; txtVX1.EditValue = t1[++idx]; txtVY1.EditValue = t1[++idx]; txtVZ1.EditValue = t1[++idx]; var t2 = time2SatInfo.Split(','); idx = 0; txtX2.EditValue = t2[++idx]; txtY2.EditValue = t2[++idx]; txtZ2.EditValue = t2[++idx]; txtVX2.EditValue = t2[++idx]; txtVY2.EditValue = t2[++idx]; txtVZ2.EditValue = t2[++idx]; var t3= time3SatInfo.Split(','); idx = 0; txtX21.EditValue = t3[++idx]; txtY21.EditValue = t3[++idx]; txtZ21.EditValue = t3[++idx]; txtVX21.EditValue = t3[++idx]; txtVY21.EditValue = t3[++idx]; txtVZ21.EditValue = t3[++idx]; this.lcX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; this.lcY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; this.lcZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; this.lcVX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; this.lcVY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; this.lcVZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; } else if (posType == EnumPosType.X2Leo) { string mainSatInfo = "23467,-1608418.46,5994257.60,3139819.89,-6632.8731,-373.9909,-2678.2335"; string adja1SatInfo = "40892,-4629555.87,4978929.91,1487241.78,-4890.2693,-3337.6709,-4031.3087"; this.lcX1.Text = "主星坐标X"; this.lcY1.Text = "主星坐标Y"; this.lcZ1.Text = "主星坐标Z"; this.lcVX1.Text = "主星坐标VX"; this.lcVY1.Text = "主星坐标VY"; this.lcVZ1.Text = "主星坐标VZ"; this.lcX2.Text = "邻星坐标X"; this.lcY2.Text = "邻星坐标Y"; this.lcZ2.Text = "邻星坐标Z"; this.lcVX2.Text = "邻星坐标VX"; this.lcVY2.Text = "邻星坐标VY"; this.lcVZ2.Text = "邻星坐标VZ"; var main = mainSatInfo.Split(','); int idx = 0; txtX1.EditValue = main[++idx]; txtY1.EditValue = main[++idx]; txtZ1.EditValue = main[++idx]; txtVX1.EditValue = main[++idx]; txtVY1.EditValue = main[++idx]; txtVZ1.EditValue = main[++idx]; var adja = adja1SatInfo.Split(','); idx = 0; txtX2.EditValue = adja[++idx]; txtY2.EditValue = adja[++idx]; txtZ2.EditValue = adja[++idx]; txtVX2.EditValue = adja[++idx]; txtVY2.EditValue = adja[++idx]; txtVZ2.EditValue = adja[++idx]; this.lcX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; this.lcY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; this.lcZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; this.lcVX3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; this.lcVY3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; this.lcVZ3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; } this.layoutControl1.BestFit(); } private async void btnOk_Click(object sender, EventArgs e) { try { var strTar = txtTar.Text.Replace(",", ","); var fuHz = (Convert.ToDouble(txtFuMhz.Text)+44) * 1e6; double lon = Convert.ToDouble(strTar.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[0]); double lat = Convert.ToDouble(strTar.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)[1]); double x1 = Convert.ToDouble(txtX1.Text); double y1 = Convert.ToDouble(txtY1.Text); double z1 = Convert.ToDouble(txtZ1.Text); double vx1 = Convert.ToDouble(txtVX1.Text); double vy1 = Convert.ToDouble(txtVY1.Text); double vz1 = Convert.ToDouble(txtVZ1.Text); double[] ephX1 = new double[6] { x1, y1, z1, vx1, vy1, vz1 }; double x2 = Convert.ToDouble(txtX2.Text); double y2 = Convert.ToDouble(txtY2.Text); double z2 = Convert.ToDouble(txtZ2.Text); double vx2 = Convert.ToDouble(txtVX2.Text); double vy2 = Convert.ToDouble(txtVY2.Text); double vz2 = Convert.ToDouble(txtVZ2.Text); double[] ephX2 = new double[6] { x2, y2, z2, vx2, vy2, vz2 }; double[] targetPos = new double[3] { lon, lat, 0 }; var df1 = DfoCalcAPI.DfoCalc(targetPos, ephX1, fuHz); var df2 = DfoCalcAPI.DfoCalc(targetPos, ephX2, fuHz); var editvalue = cbPosType.EditValue as RadioGroupItem; var posType = (EnumPosType)editvalue.Value; if (posType == EnumPosType.X1Leo) { double x3 = Convert.ToDouble(txtX21.Text); double y3 = Convert.ToDouble(txtY21.Text); double z3 = Convert.ToDouble(txtZ21.Text); double vx3 = Convert.ToDouble(txtVX21.Text); double vy3 = Convert.ToDouble(txtVY21.Text); double vz3 = Convert.ToDouble(txtVZ21.Text); double[] ephX3 = new double[6] { x3, y3, z3, vx3, vy3, vz3 }; var df3 = DfoCalcAPI.DfoCalc(targetPos, ephX3, fuHz); this.txtRes.Text = $"第二时刻频差预测值:{df2 - df1:f3}Hz 第三时刻频差预测值:{df3 - df1:f3}Hz"; } else if (posType == EnumPosType.X2Leo) { this.txtRes.Text = $"主邻频差预测值:{df1 - df2:f3}Hz"; } } catch (Exception ex) { await LogHelper.Error("频差预测出错", ex); DxHelper.MsgBoxHelper.ShowError("频差预测出错"); } } } }