悬停任务加入倒计时功能,必须有13架以上飞机,排好8字按从左到右从上到下的顺序设定好顺序

修改内部顺序号多了两个数的bug
This commit is contained in:
pxzleo 2017-09-15 11:14:10 +08:00
parent 412d0436bb
commit 5dc074fc0b
3 changed files with 278 additions and 15 deletions

View File

@ -471,7 +471,7 @@ namespace Plane.FormationCreator.Formation
// added by ZJF // added by ZJF
private void RestoreLoiterTimeTask(float LoiteTimeTmp, bool flashCheck, float flashCheckPeriod, private void RestoreLoiterTimeTask(float LoiteTimeTmp, bool flashCheck, float flashCheckPeriod,
bool oneByOneCheck, float oneByOneCheckPeriod, string flashNameArray, string flashIndexArray, bool oneByOneCheck, float oneByOneCheckPeriod, string flashNameArray, string flashIndexArray,
bool ChangeYaw, float HeadYaw, bool ChangeYaw, float HeadYaw,bool numberShow,
dynamic singleCopterInfos) dynamic singleCopterInfos)
{ {
var copters = _copterManager.Copters; var copters = _copterManager.Copters;
@ -491,6 +491,8 @@ namespace Plane.FormationCreator.Formation
loiterTimeTask.flashCopterIndexArray = flashIndexArray; loiterTimeTask.flashCopterIndexArray = flashIndexArray;
loiterTimeTask.ChangeYaw = ChangeYaw; loiterTimeTask.ChangeYaw = ChangeYaw;
loiterTimeTask.HeadYaw = HeadYaw; loiterTimeTask.HeadYaw = HeadYaw;
loiterTimeTask.numberShow = numberShow;
// foreach (var copter in copters) // foreach (var copter in copters)
for (int i=0; i < copters.Count && i < singleCopterInfos.Count; i++) for (int i=0; i < copters.Count && i < singleCopterInfos.Count; i++)
@ -655,6 +657,7 @@ namespace Plane.FormationCreator.Formation
flashIndexArray = task.flashCopterIndexArray, flashIndexArray = task.flashCopterIndexArray,
ChangeYaw = task.ChangeYaw, ChangeYaw = task.ChangeYaw,
HeadYaw = task.HeadYaw, HeadYaw = task.HeadYaw,
numberShow= task.numberShow,
singleCopterInfos = task.SingleCopterInfos.Select(info => singleCopterInfos = task.SingleCopterInfos.Select(info =>
@ -754,7 +757,7 @@ namespace Plane.FormationCreator.Formation
case FlightTaskType.Loiter: case FlightTaskType.Loiter:
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod, RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray, (bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, task.singleCopterInfos); (string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw , (bool)task.numberShow, task.singleCopterInfos);
break; break;
case FlightTaskType.SimpleCircle: case FlightTaskType.SimpleCircle:
@ -795,7 +798,7 @@ namespace Plane.FormationCreator.Formation
case FlightTaskType.Loiter: case FlightTaskType.Loiter:
RestoreLoiterTimeTask( (float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod, RestoreLoiterTimeTask( (float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray, (bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, task.singleCopterInfos); (string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, (bool)task.numberShow, task.singleCopterInfos);
break; break;
case FlightTaskType.SimpleCircle: case FlightTaskType.SimpleCircle:
@ -815,7 +818,7 @@ namespace Plane.FormationCreator.Formation
// 在悬停任务时左键waypoint为选中 // 在悬停任务时左键waypoint为选中
// 在悬停任务模式且LED控制被选中时 // 在悬停任务模式且LED控制被选中时
if ((this.SelectedTask.TaskType == FlightTaskType.Loiter) && (this.SelectedTask.flashAttr || this.SelectedTask.oneByOneAttr)) if ((this.SelectedTask.TaskType == FlightTaskType.Loiter) && (this.SelectedTask.flashAttr || this.SelectedTask.oneByOneAttr|| this.SelectedTask.numberShow))
{ {
string copterNameStr = this.SelectedTask.flashCopterNameArray; string copterNameStr = this.SelectedTask.flashCopterNameArray;
@ -836,12 +839,12 @@ namespace Plane.FormationCreator.Formation
if (copterArray[0].Equals("")) if (copterArray[0].Equals(""))
{ {
this.SelectedTask.flashCopterNameArray += copter.Name; this.SelectedTask.flashCopterNameArray += copter.Name;
SelectedTask.flashCopterIndexArray += Name2Index(copter.Name); // SelectedTask.flashCopterIndexArray += Name2Index(copter.Name);
} }
else else
{ {
this.SelectedTask.flashCopterNameArray += "," + copter.Name; this.SelectedTask.flashCopterNameArray += "," + copter.Name;
SelectedTask.flashCopterIndexArray += "," + Name2Index(copter.Name); // SelectedTask.flashCopterIndexArray += "," + Name2Index(copter.Name);
} }
} }

View File

@ -1,14 +1,18 @@
using System; using GalaSoft.MvvmLight.Command;
using Plane.Windows.Messages;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Input;
namespace Plane.FormationCreator.Formation namespace Plane.FormationCreator.Formation
{ {
public partial class FlightTask public partial class FlightTask
{ {
private float _LoiterTimeAttr = 0.0f; private float _LoiterTimeAttr = 0.0f;
private bool numberisend = false;
public float LoiterTimeAttr public float LoiterTimeAttr
{ {
get { return _LoiterTimeAttr; } get { return _LoiterTimeAttr; }
@ -18,6 +22,86 @@ namespace Plane.FormationCreator.Formation
} }
} }
private ICommand _NumberCommand5;
public ICommand NumberCommand5
{
get
{
return _NumberCommand5 ?? (_NumberCommand5 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberfive);
}));
}
}
private ICommand _NumberCommand4;
public ICommand NumberCommand4
{
get
{
return _NumberCommand4 ?? (_NumberCommand4 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberFour);
}));
}
}
private ICommand _NumberCommand3;
public ICommand NumberCommand3
{
get
{
return _NumberCommand3 ?? (_NumberCommand3 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberthree);
}));
}
}
private ICommand _NumberCommand2;
public ICommand NumberCommand2
{
get
{
return _NumberCommand2 ?? (_NumberCommand2 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numbertwo);
}));
}
}
private ICommand _NumberCommand1;
public ICommand NumberCommand1
{
get
{
return _NumberCommand1 ?? (_NumberCommand1 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberone);
}));
}
}
private ICommand _NumberCommand0;
public ICommand NumberCommand0
{
get
{
return _NumberCommand0 ?? (_NumberCommand0 = new RelayCommand<double>(async =>
{
LEDNumberAsync(numberzero);
}));
}
}
private ICommand _NumberCommandok;
public ICommand NumberCommandok
{
get
{
return _NumberCommandok ?? (_NumberCommandok = new RelayCommand<double>(async =>
{
numberisend = true;
}));
}
}
@ -32,6 +116,20 @@ namespace Plane.FormationCreator.Formation
} }
} }
// 数字倒计时 要设定13架飞机
private bool _numberShow = false;
public bool numberShow
{
get { return _numberShow; }
set
{
Set(nameof(numberShow), ref _numberShow, value);
}
}
// 机头方向0为北顺时针360 // 机头方向0为北顺时针360
private float _HeadYaw = 1.0f; private float _HeadYaw = 1.0f;
public float HeadYaw public float HeadYaw
@ -94,7 +192,10 @@ namespace Plane.FormationCreator.Formation
for (int i = 0; i < copterArray.Length; i++) for (int i = 0; i < copterArray.Length; i++)
{ {
flashCopterIndexArray += Name2Index(copterArray[i])+','; flashCopterIndexArray += Name2Index(copterArray[i]);
//最后一个编号不要加","
if (i!= (copterArray.Length-1))
flashCopterIndexArray += ',';
} }
} }
} }
@ -167,9 +268,22 @@ namespace Plane.FormationCreator.Formation
private int[] lineNine = { 20, 26 }; private int[] lineNine = { 20, 26 };
private int[] lineTen = { 25 }; private int[] lineTen = { 25 };
private int[] numberfive = { 0, 1, 2, 3, 5, 6, 7, 9,10,11, 12 };
private int[] numberFour = { 0, 2, 3, 4, 5, 6, 7, 9, 12 };
private int[] numberthree = { 0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 12 };
private int[] numbertwo = { 0, 1, 2, 4, 5, 6, 7, 8, 10, 11, 12 };
private int[] numberone = { 2, 4, 7, 9, 12 };
private int[] numberzero = { 0, 1, 2, 3, 4,5, 7, 8,9, 10, 11, 12 };
public async Task RunLoiterTimeTaskAsync() public async Task RunLoiterTimeTaskAsync()
{ {
numberisend = false;
if (ChangeYaw) if (ChangeYaw)
{ {
await Task.WhenAll(SingleCopterInfos.Select(info => SetCopterYawAsync(info,HeadYaw))); await Task.WhenAll(SingleCopterInfos.Select(info => SetCopterYawAsync(info,HeadYaw)));
@ -200,8 +314,6 @@ namespace Plane.FormationCreator.Formation
await LEDFlashParaModifyPlanAsync(); await LEDFlashParaModifyPlanAsync();
return; return;
} }
var infos = SingleCopterInfos; var infos = SingleCopterInfos;
if (flashAttr) // LED闪烁显示效果 if (flashAttr) // LED闪烁显示效果
{ {
@ -289,6 +401,33 @@ namespace Plane.FormationCreator.Formation
await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false); await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false);
} }
else if (numberShow) // LED数字倒计时目前固定需要13架飞机并且在跑马灯\数字顺序里设置13架飞机的顺序
{
if (flashCopterNameArray.Equals(""))
return;
string[] copterArray = flashCopterIndexArray.Split(',');
//没有13架
if (copterArray.Count()!=13)
return;
//LED全灭
await Task.WhenAll(SingleCopterInfos.Select(info => LEDFlashTaskFlySingleCopterAsync(info, false)));
await Task.Delay(100).ConfigureAwait(false);
//判断是否下一步
while (! numberisend)
{
await Task.Delay(25).ConfigureAwait(false); //判断是否下一步20hz
}
}
else // 没有LED显示效果只等待 else // 没有LED显示效果只等待
{ {
await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false); await Task.Delay((int)(LoiterTimeAttr * 1000)).ConfigureAwait(false);
@ -650,5 +789,54 @@ namespace Plane.FormationCreator.Formation
await Task.WhenAll(tasks_selected).ConfigureAwait(false); await Task.WhenAll(tasks_selected).ConfigureAwait(false);
} }
// 显示LED数字
private async Task LEDNumberAsync(int[] Ledshowarray)
{
List<int> numberfivenew = new List<int>();
var infos = SingleCopterInfos;
if (flashCopterNameArray.Equals(""))
return;
string[] copterArray = flashCopterIndexArray.Split(',');
//没有13架
if (copterArray.Count() != 13)
return;
var tasks_selected = new Task[copterArray.Count()];
// 转换序号
for (int i = 0; i < copterArray.Length; i++)
{
if (copterArray[i] == "") break;
int index = int.Parse(copterArray[i]);
var info = infos[index];
if (Array.IndexOf(Ledshowarray, i) != -1)
{
tasks_selected[i] = await Task.Factory.StartNew(async () =>
{
var internalInfo = info;
await LEDFlashTaskFlySingleCopterAsync(internalInfo, true);
});
}
else
{
tasks_selected[i] = await Task.Factory.StartNew(async () =>
{
var internalInfo = info;
await LEDFlashTaskFlySingleCopterAsync(internalInfo, false);
});
}
}
await Task.WhenAll(tasks_selected).ConfigureAwait(false);
}
} }
} }

View File

@ -17,7 +17,7 @@
</Style> </Style>
</StackPanel.Resources> </StackPanel.Resources>
<TextBlock Text="任务操作" FontWeight="Bold" /> <TextBlock Text="任务操作" FontWeight="Bold" />
<StackPanel> <StackPanel>
@ -266,7 +266,7 @@
Grid.Column="1" Grid.Column="1"
Margin="0,5,10,0" Margin="0,5,10,0"
Text="{Binding TargetAlt, UpdateSourceTrigger=PropertyChanged}" /> Text="{Binding TargetAlt, UpdateSourceTrigger=PropertyChanged}" />
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>
@ -398,6 +398,7 @@
<RowDefinition /> <RowDefinition />
<RowDefinition /> <RowDefinition />
<RowDefinition /> <RowDefinition />
<RowDefinition />
</Grid.RowDefinitions> </Grid.RowDefinitions>
<Grid.ColumnDefinitions> <Grid.ColumnDefinitions>
<ColumnDefinition /> <ColumnDefinition />
@ -422,8 +423,8 @@
<TextBox Grid.Column="1" Grid.Row="0" <TextBox Grid.Column="1" Grid.Row="0"
Text="{Binding flashPeriodAttr, UpdateSourceTrigger=PropertyChanged}" /> Text="{Binding flashPeriodAttr, UpdateSourceTrigger=PropertyChanged}" />
</Grid> </Grid>
<TextBlock Grid.Row="2" Grid.Column="0" Text="走马灯: " /> <TextBlock Grid.Row="2" Grid.Column="0" Text="走马灯/数字顺序: " />
<Grid Grid.Row="2" Grid.Column="1"> <Grid Grid.Row="2" Grid.Column="1">
<Grid.RowDefinitions> <Grid.RowDefinitions>
<RowDefinition /> <RowDefinition />
@ -452,6 +453,77 @@
IsChecked="{Binding ChangeYaw, UpdateSourceTrigger=PropertyChanged}" /> IsChecked="{Binding ChangeYaw, UpdateSourceTrigger=PropertyChanged}" />
<TextBox Grid.Column="1" Grid.Row="0" <TextBox Grid.Column="1" Grid.Row="0"
Text="{Binding HeadYaw, UpdateSourceTrigger=PropertyChanged}" /> Text="{Binding HeadYaw, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
<Grid Grid.Row="5" Grid.Column="0" Margin="0,0,28,0">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<CheckBox Grid.Row="0" Grid.Column="0"
IsChecked="{Binding numberShow, UpdateSourceTrigger=PropertyChanged}" Margin="0,5,0,0" />
</Grid>
<Grid Grid.Row="5" Grid.ColumnSpan="2" Margin="19,0,0,0">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Button Grid.Row="0" Grid.Column="0" Content="5"
Margin="0,5,0,0"
Command="{Binding NumberCommand5}" />
<Button Grid.Row="0" Grid.Column="1" Content="4"
Margin="0,5,0,0"
Command="{Binding NumberCommand4}" />
<Button Grid.Row="0" Grid.Column="2" Content="3"
Margin="0,5,0,0"
Command="{Binding NumberCommand3}" />
<Button Grid.Row="0" Grid.Column="3" Content="2"
Margin="0,5,0,0"
Command="{Binding NumberCommand2}" />
<Button Grid.Row="0" Grid.Column="4" Content="1"
Margin="0,5,0,0"
Command="{Binding NumberCommand1}" />
<Button Grid.Row="0" Grid.Column="5" Content="0"
Margin="0,5,0,0"
Command="{Binding NumberCommand0}"
/>
<Button Grid.Row="0" Grid.Column="6" Content="N"
Margin="0,5,0,0"
Command="{Binding NumberCommandok}"
/>
</Grid> </Grid>
</Grid> </Grid>
</Grid> </Grid>