浏览代码

添加绘制时差线动态库

wyq 1 年之前
父节点
当前提交
326569569f

+ 1 - 46
XdCxRhDW.App/Api/时差线/DrawDtoLineHelper.cs

@@ -10,52 +10,7 @@ namespace XdCxRhDW.App.Api.时差线
 {
     public class DrawDtoLineHelper
     {
-        #region 未使用
-        /*
-        static double[] HandleX2D1(X2D1Option opt)
-        {
-            var target_llh = DLL_LXYDApi.XingDi_DW(
-                    opt.MsEph
-                    , opt.NsEph
-                    , opt.MsAnt
-                    , opt.NsAnt
-                    , opt.CDBMsAnt
-                    , opt.CDBAnt
-                    , opt.RefGeod
-                    , opt.Zone
-                    , opt.SxDto * 1e-6
-                    , opt.xdDto * 1e-6
-                    , -opt.SampMsDto * 1e-6
-                    , -opt.SampNsDto * 1e-6
-                    , -opt.CDBpMsDto * 1e-6
-                    );
-            double[] result = new double[6];
-            Marshal.Copy(target_llh, result, 0, result.Length);
-            return result;
-        }
-       
-        static void HandleX1D2(X1D2Option opt)
-        {
-            var target_llh = DLL_YXLDApi.XingDi_DW_YXLD(
-                opt.MsEph
-                , opt.Ms1Ant
-                , opt.Ms2Ant
-                , opt.Nd1Ant
-                , opt.Nd2Ant
-                , opt.RefGeod1
-                , opt.RefGeod2
-                , opt.Zone
-                , opt.DtXd1 * 1e-6
-                , opt.DtXd2 * 1e-6
-                , -opt.DtRef1 * 1e-6
-                , -opt.DtRef2 * 1e-6
-                );
-            double[] result = new double[6];
-            Marshal.Copy(target_llh, result, 0, result.Length);
-            // OutputHelper.WritePos(result);
-        }
-         */
-        #endregion
+     
         private const string exeName = "XingDiSCX.exe";
         private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
         /// <summary>

+ 0 - 36
XdCxRhDW.App/Api/时差线/DtoLineModel.cs

@@ -104,42 +104,6 @@ namespace XdCxRhDW.App.Api.时差线
 
     }
 
-    public class DfoLineTwoStartOption
-    {
-        /// <summary>
-        /// 主星星历
-        /// </summary>
-        public double[] MsEph { get; set; }
-
-        /// <summary>
-        /// 邻星星历
-        /// </summary>
-        public double[] NsEph { get; set; }
-
-        /// <summary>
-        /// 参考站位置
-        /// </summary>
-        public double[] RefGeod { get; set; }
-
-        /// <summary>
-        /// 目标频差(Hz)
-        /// </summary>
-        public double TargetDfo { get; set; }
-        /// <summary>
-        /// 参考频差 (Hz)
-        /// </summary>
-        public double RefDfo { get; set; }
-
-        /// <summary>
-        /// 上行频点1(Hz)
-        /// </summary>
-        public double fu1 { get; set; }
-        /// <summary>
-        /// 上行频点2(Hz)
-        /// </summary>
-        public double fu2 { get; set; }
-
-    }
 
   
 }

+ 76 - 0
XdCxRhDW.App/Api/频差线/DfoLineModel.cs

@@ -0,0 +1,76 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace XdCxRhDW.App.Api
+{
+    public class DfoLinePoint 
+    {
+        /// <summary>
+        /// 经度
+        /// </summary>
+        public double Lon { get; set; }
+        /// <summary>
+        /// 纬度
+        /// </summary>
+        public double Lat { get; set; }
+    }
+    public class DfoLineTwoStartOption
+    {
+        /// <summary>
+        /// 上行频点Hz
+        /// </summary>
+        public double Freq { get; set; }
+        /// <summary>
+        /// 主星接收站
+        /// </summary>
+        public double[] MsAnt { get; set; }
+
+        /// <summary>
+        /// 邻星接收站
+        /// </summary>
+        public double[] NsAnt { get; set; }
+
+        /// <summary>
+        /// 主星星历 6
+        /// </summary>
+        public double[] MsEph { get; set; }
+
+        /// <summary>
+        /// 邻星星历 6
+        /// </summary>
+        public double[] NsEph { get; set; }
+
+        /// <summary>
+        /// 参考站位置
+        /// </summary>
+        public double[] RefGeod { get; set; }
+
+        /// <summary>
+        /// 目标频差(Hz)
+        /// </summary>
+        public double TargetDfo { get; set; }
+        /// <summary>
+        /// 参考频差 (Hz)
+        /// </summary>
+        public double RefDfo { get; set; }
+
+        /// <summary>
+        /// 参考频点Hz
+        /// </summary>
+        public double RefFreq { get; set; }
+
+        /// <summary>
+        /// 主星本振(Hz)
+        /// </summary>
+        public double Turn1 { get; set; }
+        /// <summary>
+        /// 邻星本振(Hz)
+        /// </summary>
+        public double Turn2 { get; set; }
+
+    }
+
+}

+ 87 - 0
XdCxRhDW.App/Api/频差线/DrawDfoLineHelper.cs

@@ -0,0 +1,87 @@
+
+using System;
+using System.Collections.Generic;
+using System.Diagnostics;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+
+namespace XdCxRhDW.App.Api
+{
+    public class DrawDfoLineHelper
+    {
+      
+        private const string exeName = "locow.exe";
+        private static double[] zone = new double[] { -85, 85, -180, 180 }; //定位区域
+        /// <summary>
+        /// 高轨双星时差线
+        /// </summary>
+        /// <param name="opt"></param>
+        /// <returns></returns>
+        /// <exception cref="Exception"></exception>
+        public static IEnumerable<(double lon, double lat)> DtfoLineTwoStart(DfoLineTwoStartOption opt)
+        {
+            List<DfoLinePoint> list = new List<DfoLinePoint>();
+
+            string exePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "API\\频差线");
+            if (string.IsNullOrWhiteSpace(exePath))
+                throw new Exception($"请先调用SetExePath指定{exeName}进程所在路径,支持相对路径");
+            if (!Directory.Exists(exePath))
+                throw new Exception($"路径[{exePath}]不存在");
+            var exeFile = Path.Combine(exePath, exeName);
+            if (!File.Exists(exeFile))
+                throw new Exception($"文件[{exeFile}]不存在");
+            List<string> arguments = new List<string>();
+            arguments.Add("dfoline");
+            arguments.Add($"{opt.TargetDfo}");
+            arguments.Add($"{opt.Freq*1e6}");
+            arguments.Add($"{opt.Turn1 * 1e6}");
+            arguments.Add($"{opt.Turn2 * 1e6}");
+            arguments.Add($"--rec1 {opt.MsAnt[0]} {opt.MsAnt[1]} 0");
+            arguments.Add($"--rec1 {opt.NsAnt[0]} {opt.NsAnt[1]} 0");
+
+            arguments.Add($"--eph1 {opt.MsEph[0]} {opt.MsEph[1]} {opt.MsEph[2]} {opt.MsEph[3]} {opt.MsEph[4]} {opt.MsEph[5]}");
+            arguments.Add($"--eph1 {opt.NsEph[0]} {opt.NsEph[1]} {opt.NsEph[2]} {opt.NsEph[3]} {opt.NsEph[4]} {opt.NsEph[5]}");
+            arguments.Add($"--refdf {opt.RefDfo}");
+            arguments.Add($"--reffreq {opt.RefFreq}");
+
+            arguments.Add($"--reflla {opt.RefGeod[0]} {opt.RefGeod[0]} 0");
+            Process p = new Process();
+            p.StartInfo.WorkingDirectory = exePath;
+            p.StartInfo.FileName = exeFile;
+            p.StartInfo.Arguments = string.Join(" ", arguments);
+            p.StartInfo.CreateNoWindow = true;
+            p.StartInfo.RedirectStandardError = true;
+            p.StartInfo.RedirectStandardOutput = true;
+            p.StartInfo.UseShellExecute = false;
+            p.Start();
+            var succeed = p.WaitForExit(10000);
+            if (!succeed)
+            {
+                throw new Exception($"进程[{exeName}]超时未完成!");
+            }
+            string result = p.StandardOutput.ReadToEnd();
+            if (string.IsNullOrWhiteSpace(result))
+            {
+                throw new Exception("计算时差线出现未知错误!");
+            }
+            var array = result.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
+            if (array[0] == "1")
+            {
+                throw new Exception(array[1]);
+            }
+            //if (File.Exists(file))
+            //{
+            //    var dtostr = File.ReadAllText(file);
+            //    list = Newtonsoft.Json.JsonConvert.DeserializeObject<List<DfoLinePoint>>(dtostr);
+            //}
+            var Lines = list.Select(s => (s.Lon, s.Lat));
+            return Lines;
+        }
+
+        
+
+       
+
+    }
+}

二进制
XdCxRhDW.App/Api/频差线/Positioning.dll


二进制
XdCxRhDW.App/Api/频差线/Positioning_calc.dll


二进制
XdCxRhDW.App/Api/频差线/Positioning_dtf.dll


二进制
XdCxRhDW.App/Api/频差线/locow.exe


二进制
XdCxRhDW.App/Api/频差线/msvcp100.dll


二进制
XdCxRhDW.App/Api/频差线/msvcr100.dll


+ 0 - 7
XdCxRhDW.App/Properties/licenses.licx

@@ -1,7 +0,0 @@
-DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
-DevExpress.XtraLayout.LayoutControl, DevExpress.XtraLayout.v23.2, Version=23.2.3.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

+ 38 - 31
XdCxRhDW.App/UserControl/CtrlHome.cs

@@ -162,11 +162,11 @@ namespace XdCxRhDW.App.UserControl
                     var posType = GetPosRes(item, "绘制频差线");
                     DrawDfoLine(item, posType);
                 })
-               .AddPosMenu<PosRes>("绘制GDOP", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
-                {
-                    var posType = GetPosRes(item, "绘制GDOP");
-                    DrawGDOP(item.SigTime, posType);
-                })
+               //.AddPosMenu<PosRes>("绘制GDOP", SvgHelper.LoadFromFile("Image\\GDOP.svg"), item =>
+               // {
+               //     var posType = GetPosRes(item, "绘制GDOP");
+               //     DrawGDOP(item.SigTime, posType);
+               // })
                  .AddPosMenu<PosRes>("绘制测向线", btnDrawCX.ImageOptions.SvgImage, item =>
                   {
                       DrawCXLine(item);
@@ -275,6 +275,7 @@ namespace XdCxRhDW.App.UserControl
         private void gridView2_PopupMenuShowing(object sender, PopupMenuShowingEventArgs e)
         {
             if (gridView2.FocusedRowHandle < 0) return;
+           
             if (!gridView2.GetSelectedRows().Any())
             {
                 btnDelPos.Visibility = DevExpress.XtraBars.BarItemVisibility.Never;
@@ -283,6 +284,21 @@ namespace XdCxRhDW.App.UserControl
             {
                 btnDelPos.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
             }
+            var posRes = GetPosRes("");
+            switch (posRes.Item2)
+            {
+                case EnumPosType.X1D1CX:
+                    btnGDOP.Visibility= DevExpress.XtraBars.BarItemVisibility.Never;
+                    break;
+                case EnumPosType.X2D1:
+                    btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    break;
+                case EnumPosType.RH:
+                    btnGDOP.Visibility = DevExpress.XtraBars.BarItemVisibility.Always;
+                    break;
+                default:
+                    break;
+            }
             popupMenu2.ShowPopup(MousePosition);
         }
         private async void layoutControlGroup1_CustomButtonClick(object sender, DevExpress.XtraBars.Docking2010.BaseButtonEventArgs e)
@@ -750,20 +766,21 @@ namespace XdCxRhDW.App.UserControl
                 switch (posType)
                 {
                     case EnumPosType.X1D1CX:
-                        X1D1GDOPParam x1D1GdopParam = new X1D1GDOPParam(sigTime);
-                        x1D1GdopParam.mapControl1 = mapControl1;
-                        DxHelper.PopupHelper.ShowPopup(x1D1GdopParam, mapControl1, mapControl1.Width / 4);
+                        //X1D1GDOPParam x1D1GdopParam = new X1D1GDOPParam(sigTime);
+                        //x1D1GdopParam.mapControl1 = mapControl1;
+                        //DxHelper.PopupHelper.ShowPopup(x1D1GdopParam, mapControl1, mapControl1.Width / 4);
                         break;
                     case EnumPosType.X2D1:
+                    case EnumPosType.RH:
                         X2D1GDOPParam x2D1GdopParam = new X2D1GDOPParam(sigTime);
                         x2D1GdopParam.mapControl1 = mapControl1;
                         DxHelper.PopupHelper.ShowPopup(x2D1GdopParam, mapControl1, mapControl1.Width / 4);
                         break;
-                    case EnumPosType.RH:
-                        GDOPParam gdopParam = new GDOPParam(sigTime);
-                        gdopParam.mapControl1 = mapControl1;
-                        DxHelper.PopupHelper.ShowPopup(gdopParam, mapControl1, mapControl1.Width / 4);
-                        break;
+                    //case EnumPosType.RH:
+                    //    GDOPParam gdopParam = new GDOPParam(sigTime);
+                    //    gdopParam.mapControl1 = mapControl1;
+                    //    DxHelper.PopupHelper.ShowPopup(gdopParam, mapControl1, mapControl1.Width / 4);
+                    //    break;
                     default:
                         break;
                 }
@@ -874,6 +891,8 @@ namespace XdCxRhDW.App.UserControl
         }
         private void DrawDfoLine(PosRes item, EnumPosType posType)
         {
+            DxHelper.MsgBoxHelper.ShowWarning($"未实现绘制频差线!");
+            return;
             switch (posType)
             {
                 case EnumPosType.X1D1CX:
@@ -933,31 +952,19 @@ namespace XdCxRhDW.App.UserControl
                     DxHelper.MsgBoxHelper.ShowWarning($"参考站信息为空!");
                     return;
                 }
-                DtoLineXdOption dtoLineXd = new DtoLineXdOption();
-                dtoLineXd.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
-                dtoLineXd.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
-                dtoLineXd.CDBAnt = new double[] { cdbTx.Lon, cdbTx.Lat, 0 };
-                dtoLineXd.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
-                dtoLineXd.xdDto = cg.DtoCdb;
-                dtoLineXd.RefDto = cg.YbMain;
-                dtoLineXd.PosLon = item.PosLon;
-                dtoLineXd.PosLat = item.PosLat;
-                var xdDtoLine = DrawDtoLineHelper.DtoLineXd(dtoLineXd);
-                mapControl1.DrawDtoPonit($"星地[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == cdbTx.ID)?.Sat}]时差线", xdDtoLine);
-
                 if (posType == EnumPosType.X2D1)
                 {
-                    DtoLineTwoStartOption twoStartOption = new DtoLineTwoStartOption();
+                    DfoLineTwoStartOption twoStartOption = new DfoLineTwoStartOption();
                     twoStartOption.MsEph = new double[] { cg.MainX, cg.MainY, cg.MainZ, 0, 0, 0 };
                     twoStartOption.NsEph = new double[] { cg.AdjaX, cg.AdjaY, cg.AdjaZ, 0, 0, 0 };
                     twoStartOption.MsAnt = new double[] { satTx.Lon, satTx.Lat, 0 };
                     twoStartOption.NsAnt = new double[] { satNTx.Lon, satNTx.Lat, 0 };
                     twoStartOption.RefGeod = new double[] { refTx.Lon, refTx.Lat, 0 };
-                    twoStartOption.TargetDto = cg.DtoSx;
-                    twoStartOption.RefDto = cg.YbMain - cg.YbAdja;
-                    twoStartOption.PosLon = item.PosLon;
-                    twoStartOption.PosLat = item.PosLat;
-                    var tsDtoLine = DrawDtoLineHelper.DtoLineXDTwoStart(twoStartOption);
+                    //twoStartOption.TargetDto = cg.DtoSx;
+                    //twoStartOption.RefDto = cg.YbMain - cg.YbAdja;
+                    //twoStartOption.PosLon = item.PosLon;
+                    //twoStartOption.PosLat = item.PosLat;
+                    var tsDtoLine = DrawDfoLineHelper.DtfoLineTwoStart(twoStartOption);
                     mapControl1.DrawDtoPonit($"双星[{listSat.FirstOrDefault(m => m.ID == satTx.ID)?.Sat},{listSat.FirstOrDefault(m => m.ID == satNTx.ID)?.Sat}]时差线", tsDtoLine);
                 }
             }

+ 8 - 8
XdCxRhDW.App/UserControl/GDOPParam.Designer.cs

@@ -28,16 +28,16 @@
         /// </summary>
         private void InitializeComponent()
         {
-            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions3 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject9 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject10 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject11 = new DevExpress.Utils.SerializableAppearanceObject();
-            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject12 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions1 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject1 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject2 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject3 = new DevExpress.Utils.SerializableAppearanceObject();
             DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject4 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.XtraEditors.Controls.EditorButtonImageOptions editorButtonImageOptions2 = new DevExpress.XtraEditors.Controls.EditorButtonImageOptions();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject5 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject6 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject7 = new DevExpress.Utils.SerializableAppearanceObject();
+            DevExpress.Utils.SerializableAppearanceObject serializableAppearanceObject8 = new DevExpress.Utils.SerializableAppearanceObject();
             this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
             this.btnX1D1 = new DevExpress.XtraEditors.SimpleButton();
             this.txtCapTime = new DevExpress.XtraEditors.DateEdit();
@@ -231,7 +231,7 @@
             this.txtDtousErr1.Name = "txtDtousErr1";
             this.txtDtousErr1.Properties.AutoHeight = false;
             this.txtDtousErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions3, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject9, serializableAppearanceObject10, serializableAppearanceObject11, serializableAppearanceObject12, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "us", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
             this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             this.txtDtousErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
             this.txtDtousErr1.Properties.MaskSettings.Set("mask", "f");
@@ -250,7 +250,7 @@
             this.txtSatLocErr1.Name = "txtSatLocErr1";
             this.txtSatLocErr1.Properties.AutoHeight = false;
             this.txtSatLocErr1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
-            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m", -1, false, true, false, editorButtonImageOptions1, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject1, serializableAppearanceObject2, serializableAppearanceObject3, serializableAppearanceObject4, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
+            new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Glyph, "m", -1, false, true, false, editorButtonImageOptions2, new DevExpress.Utils.KeyShortcut(System.Windows.Forms.Keys.None), serializableAppearanceObject5, serializableAppearanceObject6, serializableAppearanceObject7, serializableAppearanceObject8, "", null, null, DevExpress.Utils.ToolTipAnchor.Default)});
             this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerType", typeof(DevExpress.Data.Mask.NumericMaskManager));
             this.txtSatLocErr1.Properties.MaskSettings.Set("MaskManagerSignature", "allowNull=False");
             this.txtSatLocErr1.Properties.MaskSettings.Set("mask", "f");
@@ -278,7 +278,7 @@
             this.btnX1D2.Size = new System.Drawing.Size(111, 22);
             this.btnX1D2.StyleController = this.layoutControl1;
             this.btnX1D2.TabIndex = 12;
-            this.btnX1D2.Text = "一星两地";
+            this.btnX1D2.Text = "两星一地";
             this.btnX1D2.Click += new System.EventHandler(this.btnX1D2_Click);
             // 
             // Root

+ 20 - 0
XdCxRhDW.App/XdCxRhDW.App.csproj

@@ -204,6 +204,8 @@
     <Compile Include="Api\时差线\DrawDtoLineHelper.cs" />
     <Compile Include="Api\时差线\DtoLineModel.cs" />
     <Compile Include="Api\时差线\OutputHelper.cs" />
+    <Compile Include="Api\频差线\DrawDfoLineHelper.cs" />
+    <Compile Include="Api\频差线\DfoLineModel.cs" />
     <Compile Include="Basic\BaseVm.cs" />
     <Compile Include="Basic\BindingData.cs" />
     <Compile Include="Basic\ColorHelper.cs" />
@@ -537,6 +539,24 @@
     <Content Include="Api\时差线\XingDiSCX.exe">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
+    <Content Include="Api\频差线\locow.exe">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\msvcp100.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\msvcr100.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\Positioning.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\Positioning_calc.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
+    <Content Include="Api\频差线\Positioning_dtf.dll">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="Image\DfoLine.svg">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>