From 039f2a57af8fbb9d9a3b238e92e11a6e88fc20ea Mon Sep 17 00:00:00 2001 From: zxd Date: Sat, 3 Nov 2018 10:25:21 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=83=8C=E6=99=AF=E5=92=8CUI?= =?UTF-8?q?=20=E6=B7=BB=E5=8A=A0=E9=A3=9E=E6=9C=BA=E6=91=86=E6=94=BE?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=20=E4=BF=AE=E6=94=B9=E4=B8=BAGmap=E7=9B=AE?= =?UTF-8?q?=E5=89=8D=E4=BD=BF=E7=94=A8=E7=9A=84bing=E6=A8=A1=E5=BC=8F=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A03D=E8=A7=86=E5=9B=BE=E5=92=8C=E8=83=8C?= =?UTF-8?q?=E6=99=AF=20=E5=8F=96=E6=B6=88=E6=96=AD=E7=BA=BF=E9=87=8D?= =?UTF-8?q?=E8=BF=9E=E7=9A=84=E6=8F=90=E7=A4=BA=E6=94=B9=E4=B8=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plane.FormationCreator.sln | 34 ++ Plane.FormationCreator/App.config | 51 ++- Plane.FormationCreator/AppConfig.cs | 2 +- .../FlightTaskStatusToFillConverter.cs | 6 +- .../Formation/FlightTask.cs | 25 ++ .../Formation/FlightTaskManager.cs | 82 ++++- Plane.FormationCreator/Formation/LatLng.cs | 4 +- Plane.FormationCreator/GMap.cs | 14 + Plane.FormationCreator/MainWindow.xaml | 47 ++- Plane.FormationCreator/MainWindow.xaml.cs | 12 + Plane.FormationCreator/Maps/MapConverter.cs | 290 ++++++++++++++++++ .../Plane.FormationCreator.csproj | 71 ++++- .../Properties/DesignTimeResources.xaml | 5 + .../ServiceLocatorConfigurer.cs | 1 + Plane.FormationCreator/Styles/Colors.xaml | 4 +- Plane.FormationCreator/Util/ParamFile.cs | 119 +++++++ .../ViewModels/ConnectViewModel.cs | 12 + .../ViewModels/ControlPanelViewModel.cs | 7 +- .../ViewModels/CopterListViewModel.cs | 51 ++- .../ViewModels/MainViewModel.cs | 35 +++ .../ViewModels/ModiLEDModel.cs | 13 + .../ViewModels/ModiLEDViewModel.cs | 12 + .../ViewModels/ModifyTaskViewModel.cs | 79 ++++- .../ViewModels/View3DViewModel.cs | 86 ++++++ .../Views/ConnectWindow.xaml | 10 +- .../Views/CopterListView.xaml | 6 +- .../Views/CopterListView.xaml.cs | 27 ++ .../Views/LogUserControl.xaml | 12 + .../Views/LogUserControl.xaml.cs | 28 ++ Plane.FormationCreator/Views/LogWindow.xaml | 9 +- .../Views/LogWindow.xaml.cs | 40 ++- Plane.FormationCreator/Views/MapView.xaml | 18 +- Plane.FormationCreator/Views/MapView.xaml.cs | 208 ++++++++----- .../Views/MapView_CopterDrawing.cs | 225 +++++++------- .../Views/ModifyTaskView.xaml | 24 +- .../Views/SetCoptersPutView.xaml | 35 +++ .../Views/SetCoptersPutView.xaml.cs | 51 +++ Plane.FormationCreator/Views/TaskBarView.xaml | 59 ++-- Plane.FormationCreator/Views/View3D.xaml | 32 ++ Plane.FormationCreator/Views/View3D.xaml.cs | 60 ++++ Plane.FormationCreator/bg.jpg | Bin 231091 -> 43830 bytes Plane.FormationCreator/packages.config | 12 +- 42 files changed, 1625 insertions(+), 293 deletions(-) create mode 100644 Plane.FormationCreator/GMap.cs create mode 100644 Plane.FormationCreator/Maps/MapConverter.cs create mode 100644 Plane.FormationCreator/Properties/DesignTimeResources.xaml create mode 100644 Plane.FormationCreator/Util/ParamFile.cs create mode 100644 Plane.FormationCreator/ViewModels/ModiLEDModel.cs create mode 100644 Plane.FormationCreator/ViewModels/ModiLEDViewModel.cs create mode 100644 Plane.FormationCreator/ViewModels/View3DViewModel.cs create mode 100644 Plane.FormationCreator/Views/LogUserControl.xaml create mode 100644 Plane.FormationCreator/Views/LogUserControl.xaml.cs create mode 100644 Plane.FormationCreator/Views/SetCoptersPutView.xaml create mode 100644 Plane.FormationCreator/Views/SetCoptersPutView.xaml.cs create mode 100644 Plane.FormationCreator/Views/View3D.xaml create mode 100644 Plane.FormationCreator/Views/View3D.xaml.cs diff --git a/Plane.FormationCreator.sln b/Plane.FormationCreator.sln index adcb603..5013cb2 100644 --- a/Plane.FormationCreator.sln +++ b/Plane.FormationCreator.sln @@ -33,40 +33,74 @@ Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU + v4.0-Debug|Any CPU = v4.0-Debug|Any CPU + v4.0-Release|Any CPU = v4.0-Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.Debug|Any CPU.Build.0 = Debug|Any CPU {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.Release|Any CPU.ActiveCfg = Release|Any CPU {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.Release|Any CPU.Build.0 = Release|Any CPU + {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {61E2F31E-220A-4E3F-A64D-F7CDC2135008}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {06848293-9B17-4068-9B35-44D0ED713CD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {06848293-9B17-4068-9B35-44D0ED713CD4}.Debug|Any CPU.Build.0 = Debug|Any CPU {06848293-9B17-4068-9B35-44D0ED713CD4}.Release|Any CPU.ActiveCfg = Release|Any CPU {06848293-9B17-4068-9B35-44D0ED713CD4}.Release|Any CPU.Build.0 = Release|Any CPU + {06848293-9B17-4068-9B35-44D0ED713CD4}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {06848293-9B17-4068-9B35-44D0ED713CD4}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {06848293-9B17-4068-9B35-44D0ED713CD4}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {06848293-9B17-4068-9B35-44D0ED713CD4}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {98755514-C2E9-4ABE-8A25-007804577558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {98755514-C2E9-4ABE-8A25-007804577558}.Debug|Any CPU.Build.0 = Debug|Any CPU {98755514-C2E9-4ABE-8A25-007804577558}.Release|Any CPU.ActiveCfg = Release|Any CPU {98755514-C2E9-4ABE-8A25-007804577558}.Release|Any CPU.Build.0 = Release|Any CPU + {98755514-C2E9-4ABE-8A25-007804577558}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {98755514-C2E9-4ABE-8A25-007804577558}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {98755514-C2E9-4ABE-8A25-007804577558}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {98755514-C2E9-4ABE-8A25-007804577558}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {413C18E2-235F-4E15-B5C1-633657DE5D7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {413C18E2-235F-4E15-B5C1-633657DE5D7A}.Debug|Any CPU.Build.0 = Debug|Any CPU {413C18E2-235F-4E15-B5C1-633657DE5D7A}.Release|Any CPU.ActiveCfg = Release|Any CPU {413C18E2-235F-4E15-B5C1-633657DE5D7A}.Release|Any CPU.Build.0 = Release|Any CPU + {413C18E2-235F-4E15-B5C1-633657DE5D7A}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {413C18E2-235F-4E15-B5C1-633657DE5D7A}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {413C18E2-235F-4E15-B5C1-633657DE5D7A}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {413C18E2-235F-4E15-B5C1-633657DE5D7A}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {9C2CAFDA-CF1D-4565-B797-398376FCD346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9C2CAFDA-CF1D-4565-B797-398376FCD346}.Debug|Any CPU.Build.0 = Debug|Any CPU {9C2CAFDA-CF1D-4565-B797-398376FCD346}.Release|Any CPU.ActiveCfg = Release|Any CPU {9C2CAFDA-CF1D-4565-B797-398376FCD346}.Release|Any CPU.Build.0 = Release|Any CPU + {9C2CAFDA-CF1D-4565-B797-398376FCD346}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9C2CAFDA-CF1D-4565-B797-398376FCD346}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {9C2CAFDA-CF1D-4565-B797-398376FCD346}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {9C2CAFDA-CF1D-4565-B797-398376FCD346}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.Debug|Any CPU.Build.0 = Debug|Any CPU {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.Release|Any CPU.ActiveCfg = Release|Any CPU {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.Release|Any CPU.Build.0 = Release|Any CPU + {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {6CCE2AEB-3B38-4C00-B32D-433A990AE2AD}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.Release|Any CPU.Build.0 = Release|Any CPU + {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {0111EB6E-72E3-499C-A3BA-022F5BBC4CAF}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU {47141894-ECE3-48CA-8DCF-CA751BDA231E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {47141894-ECE3-48CA-8DCF-CA751BDA231E}.Debug|Any CPU.Build.0 = Debug|Any CPU {47141894-ECE3-48CA-8DCF-CA751BDA231E}.Release|Any CPU.ActiveCfg = Release|Any CPU {47141894-ECE3-48CA-8DCF-CA751BDA231E}.Release|Any CPU.Build.0 = Release|Any CPU + {47141894-ECE3-48CA-8DCF-CA751BDA231E}.v4.0-Debug|Any CPU.ActiveCfg = Debug|Any CPU + {47141894-ECE3-48CA-8DCF-CA751BDA231E}.v4.0-Debug|Any CPU.Build.0 = Debug|Any CPU + {47141894-ECE3-48CA-8DCF-CA751BDA231E}.v4.0-Release|Any CPU.ActiveCfg = Release|Any CPU + {47141894-ECE3-48CA-8DCF-CA751BDA231E}.v4.0-Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Plane.FormationCreator/App.config b/Plane.FormationCreator/App.config index f5162f7..f138028 100644 --- a/Plane.FormationCreator/App.config +++ b/Plane.FormationCreator/App.config @@ -1,18 +1,28 @@ - + - - -
- - - - - + + +
+ + +
+ + + + - - + + + + + + + + + + @@ -23,4 +33,21 @@ - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Plane.FormationCreator/AppConfig.cs b/Plane.FormationCreator/AppConfig.cs index bea7877..31b4e58 100644 --- a/Plane.FormationCreator/AppConfig.cs +++ b/Plane.FormationCreator/AppConfig.cs @@ -40,7 +40,7 @@ namespace Plane.FormationCreator App.Current.Exit += (sender, e) => { this.Center = _mapManager.Center; - this.ZoomLevel = _mapManager.MapView.map.ZoomLevel; + this.ZoomLevel = _mapManager.MapView.gmap.Zoom; this.Save(); }; } diff --git a/Plane.FormationCreator/Converters/FlightTaskStatusToFillConverter.cs b/Plane.FormationCreator/Converters/FlightTaskStatusToFillConverter.cs index e7f59ba..8de9c51 100644 --- a/Plane.FormationCreator/Converters/FlightTaskStatusToFillConverter.cs +++ b/Plane.FormationCreator/Converters/FlightTaskStatusToFillConverter.cs @@ -14,9 +14,9 @@ namespace Plane.FormationCreator.Converters { public class FlightTaskStatusToFillConverter : IValueConverter { - static SolidColorBrush _normalFill = new SolidColorBrush(Colors.LightGray); - static SolidColorBrush _runningFill = new SolidColorBrush(Colors.OrangeRed); - static SolidColorBrush _PausedFill = new SolidColorBrush(Colors.Yellow); + static SolidColorBrush _normalFill = new SolidColorBrush(Color.FromRgb(45, 45, 45)); + static SolidColorBrush _runningFill = new SolidColorBrush(Colors.Green); + static SolidColorBrush _PausedFill = new SolidColorBrush(Colors.Red); public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { var status = (FlightTaskStatus)value; diff --git a/Plane.FormationCreator/Formation/FlightTask.cs b/Plane.FormationCreator/Formation/FlightTask.cs index 171288c..d879702 100644 --- a/Plane.FormationCreator/Formation/FlightTask.cs +++ b/Plane.FormationCreator/Formation/FlightTask.cs @@ -40,6 +40,7 @@ namespace Plane.FormationCreator.Formation //if (_TaskType != value) { RaisePropertyChanged(nameof(TaskTypeIndex)); + RaisePropertyChanged(nameof(TaskCnName)); } } } @@ -60,6 +61,21 @@ namespace Plane.FormationCreator.Formation } */ + public string TaskCnName + { + get + { + string CnName = ""; + switch (TaskType) + { + case FlightTaskType.TakeOff: CnName = (TaskIndex + 1).ToString() + ".起飞"; break; + case FlightTaskType.FlyTo: CnName = (TaskIndex + 1).ToString() + ".航点"; break; + case FlightTaskType.Land: CnName = (TaskIndex + 1).ToString() + ".降落"; break; + } + return CnName; + } + } + public int TaskTypeIndex { get { @@ -83,6 +99,15 @@ namespace Plane.FormationCreator.Formation } } + //task在所以任务中的index + public int TaskIndex + { + get + { + return _flightTaskManager.Tasks.IndexOf(this); + } + } + private bool _IsSelected; public bool IsSelected { diff --git a/Plane.FormationCreator/Formation/FlightTaskManager.cs b/Plane.FormationCreator/Formation/FlightTaskManager.cs index ec83dcb..40e0b37 100644 --- a/Plane.FormationCreator/Formation/FlightTaskManager.cs +++ b/Plane.FormationCreator/Formation/FlightTaskManager.cs @@ -18,8 +18,9 @@ namespace Plane.FormationCreator.Formation { public FlightTaskManager(CopterManager copterManager) { - _copterManager = copterManager; - + LoadIni(); + _copterManager = copterManager; + //AddTakeOffTask(_copterManager.Copters); _copterManager.Copters.CollectionChanged += (sender, e) => @@ -87,6 +88,7 @@ namespace Plane.FormationCreator.Formation } private CopterManager _copterManager; + private int _TakeOffNumAttr = 1; public int TakeOffNumAttr @@ -191,6 +193,35 @@ namespace Plane.FormationCreator.Formation private set { Set(nameof(CurrentRunningTaskIndex), ref _CurrentRunningTaskIndex, value); } } + private int _ColumnCount = 5; + public int ColumnCount + { + get { return _ColumnCount; } + set { Set(nameof(ColumnCount), ref _ColumnCount, value); } + } + + + private float _ColumnDistance = 4.0f; + public float ColumnDistance + { + get { return _ColumnDistance; } + set { Set(nameof(ColumnDistance), ref _ColumnDistance, value); } + } + + private float _RowDistance = 4.0f; + public float RowDistance + { + get { return _RowDistance; } + set { Set(nameof(RowDistance), ref _RowDistance, value); } + } + + private int _Orientation = 0; + public int Orientation + { + get { return _Orientation; } + set { Set(nameof(Orientation), ref _Orientation, value); } + } + private TasksStatus _TaskState = TasksStatus.Stop; public TasksStatus TaskState @@ -227,12 +258,11 @@ namespace Plane.FormationCreator.Formation var newTask = new FlightTask(FlightTaskType.FlyTo); int coptindex = 0; - int colnum = 20; //自动生成列数=4 - float coldis = 2.5f;//列相距5米 - float rowdis = 5f;//行相距5米 + int colnum = ColumnCount; //自动生成列数=4 + float coldis = ColumnDistance;//列相距5米 + float rowdis = RowDistance;//行相距5米 float matrixdis = 20; //生成方阵距离30米 - int currcol = 0; //当前列号 int currrow = 0; //当前行 Tuple colLatLng = new Tuple(0, 0); @@ -1040,9 +1070,9 @@ namespace Plane.FormationCreator.Formation var pointjson= points[i]; System.Windows.Point point = new System.Windows.Point((int)pointjson.x, (int)pointjson.y); - Microsoft.Maps.MapControl.WPF.Location loc = _mapManager.MapView.map.ViewportPointToLocation(point); - SelectedTask.SingleCopterInfos[i].TargetLat = loc.Latitude; - SelectedTask.SingleCopterInfos[i].TargetLng = loc.Longitude; + var loc = _mapManager.MapView.gmap.FromLocalToLatLng((int)point.X , (int)point.Y); + SelectedTask.SingleCopterInfos[i].TargetLat = loc.Lat; + SelectedTask.SingleCopterInfos[i].TargetLng = loc.Lng; } } @@ -1314,6 +1344,40 @@ namespace Plane.FormationCreator.Formation } } } + + private void LoadIni() + { + Windows.IniHelper.IniFiles inifilse = new Windows.IniHelper.IniFiles(); + string readvalue = ""; + int intTemp; + float floatTemp; + readvalue = inifilse.IniReadvalue("Default", "ColumnCount"); + if (readvalue!= "" && int.TryParse(readvalue,out intTemp)) + ColumnCount = int.Parse(readvalue); + + readvalue = inifilse.IniReadvalue("Default", "ColumnDistance"); + if (readvalue != "" && float.TryParse(readvalue, out floatTemp)) + ColumnDistance = float.Parse(readvalue); + + readvalue = inifilse.IniReadvalue("Default", "RowDistance"); + if (readvalue != "" && float.TryParse(readvalue, out floatTemp)) + RowDistance = float.Parse(readvalue); + + readvalue = inifilse.IniReadvalue("Default", "Orientation"); + if (readvalue != "" && int.TryParse(readvalue, out intTemp)) + Orientation = int.Parse(readvalue); + + + } + + public void SaveIni() + { + Windows.IniHelper.IniFiles inifilse = new Windows.IniHelper.IniFiles(); + inifilse.IniWritevalue("Default", "ColumnCount", ColumnCount.ToString()); + inifilse.IniWritevalue("Default", "ColumnDistance", ColumnDistance.ToString()); + inifilse.IniWritevalue("Default", "RowDistance", RowDistance.ToString()); + inifilse.IniWritevalue("Default", "Orientation", Orientation.ToString()); + } } public class FlightTaskAddedEventArgs : EventArgs diff --git a/Plane.FormationCreator/Formation/LatLng.cs b/Plane.FormationCreator/Formation/LatLng.cs index 34a8dfa..e38bcd7 100644 --- a/Plane.FormationCreator/Formation/LatLng.cs +++ b/Plane.FormationCreator/Formation/LatLng.cs @@ -1,4 +1,6 @@ -using System; +using GMap.NET; +using Plane.FormationCreator.Maps; +using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; diff --git a/Plane.FormationCreator/GMap.cs b/Plane.FormationCreator/GMap.cs new file mode 100644 index 0000000..8d184b3 --- /dev/null +++ b/Plane.FormationCreator/GMap.cs @@ -0,0 +1,14 @@ +using System.Windows.Controls; +using System.Windows.Media; +using GMap.NET.WindowsPresentation; +using System.Globalization; +using System.Windows; +using System; + +namespace Plane.GoogleMap +{ + class GMap : GMapControl + { + + } +} diff --git a/Plane.FormationCreator/MainWindow.xaml b/Plane.FormationCreator/MainWindow.xaml index ac51b35..2cc359b 100644 --- a/Plane.FormationCreator/MainWindow.xaml +++ b/Plane.FormationCreator/MainWindow.xaml @@ -42,6 +42,7 @@ + + + diff --git a/Plane.FormationCreator/Views/CopterListView.xaml b/Plane.FormationCreator/Views/CopterListView.xaml index e9672d4..ae32b26 100644 --- a/Plane.FormationCreator/Views/CopterListView.xaml +++ b/Plane.FormationCreator/Views/CopterListView.xaml @@ -20,6 +20,7 @@ - - @@ -90,10 +91,10 @@ @@ -101,9 +102,9 @@ + FontSize="12" + Foreground="White" + Text="{Binding TaskCnName}" /> diff --git a/Plane.FormationCreator/Views/View3D.xaml b/Plane.FormationCreator/Views/View3D.xaml new file mode 100644 index 0000000..fbeae90 --- /dev/null +++ b/Plane.FormationCreator/Views/View3D.xaml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + +