1.飞机按编号顺序加入飞行列表

2.默认起飞高度为15米
3.修改航点位置改为按住左shift再按下asdw,不按shift则是控制移动飞机
4.修复上下旋转的高度bug
5.为防止碰撞,加入两个按钮,一个为自动计算高度(未实现),一个为自动设为前一步高度,这样一个图案应该有三个同样形状的飞行任务,一个进入(高度不同)一个表演,一个退出(高度不同)
This commit is contained in:
pxzleo 2017-03-17 23:02:08 +08:00
parent 84659afdab
commit 7e04c83e26
6 changed files with 144 additions and 13 deletions

View File

@ -143,8 +143,9 @@ namespace Plane.FormationCreator
Id = ip,
Name = ip.Substring(ip.LastIndexOf('.') + 1)
};
copters.Add(copter);
copterStatus.Add(false);
int _index;
_index=copters.AddCopter(copter);
copterStatus.Insert(_index,false);
}));
}
else

View File

@ -10,6 +10,46 @@ using System.Threading.Tasks;
namespace Plane.FormationCreator.Formation
{
public class CopterCollection : ObservableCollection<ICopter>
{
/// <summary>
/// 实现排序插入
/// </summary>
/// <param name="baseSemObjects"></param>
public int AddCopter(ICopter entityObject)
{
int _index = 0;
if (this.Count == 0)
{
Add(entityObject);
_index = 0;
}
else
{
bool isInsret = false;
for (int i = 0; i < this.Count; i++)
{
if (String.Compare(this[i].Name, entityObject.Name, false) >= 0)
{
InsertItem(i, entityObject);
isInsret = true;
_index= i;
break;
}
}
if (!isInsret)
{
Add(entityObject);
_index = this.Count()-1 ;
}
}
return _index;
}
}
public class CopterManager : ObservableObject
{
public CopterManager()
@ -25,7 +65,7 @@ namespace Plane.FormationCreator.Formation
}
public ObservableCollection<ICopter> Copters { get; } = new ObservableCollection<ICopter>();
public CopterCollection Copters { get;} = new CopterCollection();
public ArrayList CopterStatus = new ArrayList();
//public ObservableCollection<ICopter> Copters

View File

@ -128,7 +128,7 @@ namespace Plane.FormationCreator.Formation
}
foreach (var copter in copters)
{
takeOffTask.SingleCopterInfos.Add(FlightTaskSingleCopterInfo.CreateForTakeOffTask(copter, targetAlt: 10));
takeOffTask.SingleCopterInfos.Add(FlightTaskSingleCopterInfo.CreateForTakeOffTask(copter, targetAlt: 15));
}
}
@ -236,7 +236,8 @@ namespace Plane.FormationCreator.Formation
}
currcol++;
coptindex++;
var newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask(copter, targetLatLng.Item1, targetLatLng.Item2, lastSingleCopterInfo.TargetAlt, true);
var newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask(copter, targetLatLng.Item1, targetLatLng.Item2,
lastTask.SingleCopterInfos.Find(info => info.Copter == copter).TargetAlt, true);
newSingleCopterInfo.TargetHeading = lastSingleCopterInfo.TargetHeading;
newSingleCopterInfo.CenterDirectionDeg = lastSingleCopterInfo.TargetHeading;
newTask.SingleCopterInfos.Add(newSingleCopterInfo);

View File

@ -94,7 +94,7 @@ namespace Plane.FormationCreator
{
map.GoHome();
}
bool Shiftkeydown = false;
private async void MetroWindow_PreviewKeyDown(object sender, KeyEventArgs e)
{
// 如果正在输入,忽略。
@ -105,6 +105,11 @@ namespace Plane.FormationCreator
switch (e.Key)
{
case Key.LeftShift:
{
Shiftkeydown = true;
break;
}
//开关SHOWLED
case Key.C:
{
@ -123,7 +128,7 @@ namespace Plane.FormationCreator
case Key.S:
{
if ((_flightTaskManager.CurrentRunningTask == null) && (_flightTaskManager.SelectedTask != null))
if (Shiftkeydown &&(_flightTaskManager.CurrentRunningTask == null) && (_flightTaskManager.SelectedTask != null))
{
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
@ -174,7 +179,7 @@ namespace Plane.FormationCreator
{
if ((_flightTaskManager.CurrentRunningTask == null)&&(_flightTaskManager.SelectedTask!=null))
if (Shiftkeydown && (_flightTaskManager.CurrentRunningTask == null)&&(_flightTaskManager.SelectedTask!=null))
{
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
@ -351,6 +356,11 @@ namespace Plane.FormationCreator
switch (e.Key)
{
case Key.LeftShift:
{
Shiftkeydown = false;
break;
}
case Key.W:
case Key.S:
{

View File

@ -761,7 +761,7 @@ public ICommand VerticlAlignmentCommand
dy = -ax * Math.Sin(k) + ay * Math.Cos(k);
//新高度(米)
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetAlt += (float) dy;
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetAlt= (float)(centalt + dy);
//计算新纬度
double lng2 = 0;
double lat2 = 0;
@ -796,9 +796,78 @@ public ICommand VerticlAlignmentCommand
}
}
//缩放
private ICommand _AutoaltCommand;
public ICommand AutoaltCommand
{
get
{
return _AutoaltCommand ?? (_AutoaltCommand = new RelayCommand<double>(async =>
{
}));
}
}
private ICommand _PrealtCommand;
public ICommand PrealtCommand
{
get
{
return _PrealtCommand ?? (_PrealtCommand = new RelayCommand<double>(async =>
{
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
{
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
foreach (var capter in _copterManager.SelectedCopters)
{
if (capter == selectedCopter)
{
if (_flightTaskManager.SelectedTaskIndex > 1)
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetAlt =
_flightTaskManager.Tasks[_flightTaskManager.SelectedTaskIndex - 1].SingleCopterInfos[i].TargetAlt;
}
}
}
}));
}
}
//计算距离
private ICommand _calDistinceCommand;
public ICommand calDistinceCommand
{
@ -811,10 +880,9 @@ public ICommand VerticlAlignmentCommand
double distance = 0;
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
bool copterisselect;
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
{
copterisselect = false;
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
foreach (var capter in _copterManager.SelectedCopters)
{

View File

@ -113,6 +113,17 @@
<TextBlock Text="米" Margin="0, 10, 5, 0"/>
</StackPanel>
<StackPanel>
<Button Content="自动高度"
Margin="0,5,5,0"
Command="{Binding AutoaltCommand}" />
<Button Content="前一高度"
Margin="0,5,5,0"
Command="{Binding PrealtCommand}" />
</StackPanel>
<Separator />
<TextBlock Text="任务属性" Margin="0, 0, 5, 0" FontWeight="Bold" />
<StackPanel>