1解决无法退出问题
2按下shift后可以批量点中航点选择 3倒计时视觉bug
This commit is contained in:
parent
5bb0bd49ce
commit
39a1002852
@ -69,6 +69,7 @@ namespace Plane.FormationCreator
|
|||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
|
if (_config!=null)
|
||||||
_config.Center = $"{value.Lat},{value.Lng}";
|
_config.Center = $"{value.Lat},{value.Lng}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -89,7 +90,8 @@ namespace Plane.FormationCreator
|
|||||||
}
|
}
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
_config.ZoomLevel = value;
|
if (_config != null)
|
||||||
|
_config.ZoomLevel = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -99,7 +101,8 @@ namespace Plane.FormationCreator
|
|||||||
{
|
{
|
||||||
Directory.CreateDirectory(_dirPath);
|
Directory.CreateDirectory(_dirPath);
|
||||||
}
|
}
|
||||||
File.WriteAllText(_filePath, JsonConvert.SerializeObject(_config));
|
if (_config != null)
|
||||||
|
File.WriteAllText(_filePath, JsonConvert.SerializeObject(_config));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,6 +87,11 @@ namespace Plane.FormationCreator.Formation
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
public bool shiftkeydown;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public IEnumerable<ICopter> SelectedCopters { get { return _selectedCoptersGetter().Cast<ICopter>(); } }
|
public IEnumerable<ICopter> SelectedCopters { get { return _selectedCoptersGetter().Cast<ICopter>(); } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -363,6 +363,7 @@ namespace Plane.FormationCreator.Formation
|
|||||||
public void RestoreFlyToTask(bool staggerRoutes, dynamic singleCopterInfos)
|
public void RestoreFlyToTask(bool staggerRoutes, dynamic singleCopterInfos)
|
||||||
{
|
{
|
||||||
var copters = _copterManager.Copters;
|
var copters = _copterManager.Copters;
|
||||||
|
float tagalt = 15;
|
||||||
if (!copters.Any()) return;
|
if (!copters.Any()) return;
|
||||||
AppEx.Current.AppMode = AppMode.ModifyingTask;
|
AppEx.Current.AppMode = AppMode.ModifyingTask;
|
||||||
var lastTask = Tasks.LastOrDefault();
|
var lastTask = Tasks.LastOrDefault();
|
||||||
@ -371,11 +372,23 @@ namespace Plane.FormationCreator.Formation
|
|||||||
var center = nullableCenter.Value;
|
var center = nullableCenter.Value;
|
||||||
var newTask = new FlightTask(FlightTaskType.FlyTo) { StaggerRoutes = staggerRoutes };
|
var newTask = new FlightTask(FlightTaskType.FlyTo) { StaggerRoutes = staggerRoutes };
|
||||||
// TODO: 林俊清, 20150801, 处理实际飞行器数目与记录中数目不一致的情况。
|
// TODO: 林俊清, 20150801, 处理实际飞行器数目与记录中数目不一致的情况。
|
||||||
for (int i = 0; i < copters.Count && i < singleCopterInfos.Count; i++)
|
for (int i = 0; i < copters.Count; i++)
|
||||||
{
|
{
|
||||||
var copter = copters[i];
|
var copter = copters[i];
|
||||||
var singleCopterInfoObj = singleCopterInfos[i];
|
FlightTaskSingleCopterInfo newSingleCopterInfo;
|
||||||
var newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask(copter, new LatLng((double)singleCopterInfoObj.latOffset, (double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt,(bool)singleCopterInfoObj.showLED);
|
if (i < singleCopterInfos.Count)
|
||||||
|
{
|
||||||
|
var singleCopterInfoObj = singleCopterInfos[i];
|
||||||
|
tagalt = (float)singleCopterInfoObj.targetAlt;
|
||||||
|
newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask(copter, new LatLng((double)singleCopterInfoObj.latOffset, (double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt, (bool)singleCopterInfoObj.showLED);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForFlyToTask
|
||||||
|
(copter, (double)copter.Latitude, (double)copter.Longitude, tagalt, (bool)false);
|
||||||
|
|
||||||
|
}
|
||||||
newTask.SingleCopterInfos.Add(newSingleCopterInfo);
|
newTask.SingleCopterInfos.Add(newSingleCopterInfo);
|
||||||
}
|
}
|
||||||
Tasks.Add(newTask);
|
Tasks.Add(newTask);
|
||||||
@ -495,12 +508,32 @@ namespace Plane.FormationCreator.Formation
|
|||||||
|
|
||||||
|
|
||||||
// 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++)
|
||||||
{
|
{
|
||||||
var copter = copters[i];
|
var copter = copters[i];
|
||||||
var singleCopterInfoObj = singleCopterInfos[i];
|
float tagalt = 15;
|
||||||
var newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForLoiterTimeTask(copter, new LatLng((double)singleCopterInfoObj.latOffset, (double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt);
|
|
||||||
|
// var newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForLoiterTimeTask(copter, new LatLng((double)singleCopterInfoObj.latOffset, (double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt);
|
||||||
|
|
||||||
|
FlightTaskSingleCopterInfo newSingleCopterInfo;
|
||||||
|
if (i < singleCopterInfos.Count)
|
||||||
|
{
|
||||||
|
var singleCopterInfoObj = singleCopterInfos[i];
|
||||||
|
tagalt = (float)singleCopterInfoObj.targetAlt;
|
||||||
|
newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForLoiterTimeTask(copter, new LatLng((double)singleCopterInfoObj.latOffset, (double)singleCopterInfoObj.lngOffset), (float)singleCopterInfoObj.targetAlt);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
newSingleCopterInfo = FlightTaskSingleCopterInfo.CreateForLoiterTimeTask
|
||||||
|
(copter, (double)copter.Latitude,
|
||||||
|
(double)copter.Longitude, tagalt);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
loiterTimeTask.SingleCopterInfos.Add(newSingleCopterInfo);
|
loiterTimeTask.SingleCopterInfos.Add(newSingleCopterInfo);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Tasks.Add(loiterTimeTask);
|
Tasks.Add(loiterTimeTask);
|
||||||
TaskAdded?.Invoke(this, new FlightTaskAddedEventArgs { LastTask = lastTask, AddedTask = loiterTimeTask });
|
TaskAdded?.Invoke(this, new FlightTaskAddedEventArgs { LastTask = lastTask, AddedTask = loiterTimeTask });
|
||||||
@ -755,9 +788,15 @@ namespace Plane.FormationCreator.Formation
|
|||||||
RestoreCircleTask(task.singleCopterInfos);
|
RestoreCircleTask(task.singleCopterInfos);
|
||||||
break;
|
break;
|
||||||
case FlightTaskType.Loiter:
|
case FlightTaskType.Loiter:
|
||||||
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
|
if (task.numberShow!=null)
|
||||||
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
|
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
|
||||||
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw , (bool)task.numberShow, task.singleCopterInfos);
|
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
|
||||||
|
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw , (bool)task.numberShow, task.singleCopterInfos);
|
||||||
|
else
|
||||||
|
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
|
||||||
|
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
|
||||||
|
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, false, task.singleCopterInfos);
|
||||||
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case FlightTaskType.SimpleCircle:
|
case FlightTaskType.SimpleCircle:
|
||||||
@ -796,9 +835,14 @@ namespace Plane.FormationCreator.Formation
|
|||||||
RestoreCircleTask(task.singleCopterInfos);
|
RestoreCircleTask(task.singleCopterInfos);
|
||||||
break;
|
break;
|
||||||
case FlightTaskType.Loiter:
|
case FlightTaskType.Loiter:
|
||||||
RestoreLoiterTimeTask( (float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
|
if (task.numberShow != null)
|
||||||
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
|
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
|
||||||
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, (bool)task.numberShow, task.singleCopterInfos);
|
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
|
||||||
|
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, (bool)task.numberShow, task.singleCopterInfos);
|
||||||
|
else
|
||||||
|
RestoreLoiterTimeTask((float)task.loiterTimeAttr, (bool)task.flashCheck, (float)task.flashCheckPeriod,
|
||||||
|
(bool)task.oneByOneCheck, (float)task.oneByOneCheckPeriod, (string)task.flashNameArray,
|
||||||
|
(string)task.flashIndexArray, (bool)task.ChangeYaw, (float)task.HeadYaw, false, task.singleCopterInfos);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case FlightTaskType.SimpleCircle:
|
case FlightTaskType.SimpleCircle:
|
||||||
@ -818,7 +862,7 @@ namespace Plane.FormationCreator.Formation
|
|||||||
|
|
||||||
// 在悬停任务时,左键waypoint为选中
|
// 在悬停任务时,左键waypoint为选中
|
||||||
// 在悬停任务模式,且LED控制被选中时
|
// 在悬停任务模式,且LED控制被选中时
|
||||||
if ((this.SelectedTask.TaskType == FlightTaskType.Loiter) && (this.SelectedTask.flashAttr || this.SelectedTask.oneByOneAttr|| this.SelectedTask.numberShow))
|
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;
|
||||||
|
|
||||||
@ -839,15 +883,22 @@ 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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -18,5 +18,20 @@ namespace Plane.FormationCreator.Formation
|
|||||||
};
|
};
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static FlightTaskSingleCopterInfo CreateForLoiterTimeTask(ICopter copter, double targetLat, double targetLng, float targetAlt)
|
||||||
|
{
|
||||||
|
var info = new FlightTaskSingleCopterInfo(copter)
|
||||||
|
{
|
||||||
|
TargetLat = targetLat,
|
||||||
|
TargetLng = targetLng,
|
||||||
|
TargetAlt = targetAlt,
|
||||||
|
};
|
||||||
|
return info;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -269,11 +269,11 @@ namespace Plane.FormationCreator.Formation
|
|||||||
private int[] lineTen = { 25 };
|
private int[] lineTen = { 25 };
|
||||||
|
|
||||||
|
|
||||||
private int[] numberfive = { 0, 1, 2, 3, 5, 6, 7, 9,10,11, 12 };
|
private int[] numberfive = { 0, 1, 2, 4, 5, 6, 7, 8,10,11, 12 };
|
||||||
private int[] numberFour = { 0, 2, 3, 4, 5, 6, 7, 9, 12 };
|
private int[] numberFour = { 2, 4, 5, 6, 7,8, 9,10, 12 };
|
||||||
private int[] numberthree = { 0, 1, 2, 4, 5, 6, 7, 9, 10, 11, 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[] numbertwo = { 0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 12 };
|
||||||
private int[] numberone = { 2, 4, 7, 9, 12 };
|
private int[] numberone = { 0, 4, 7, 9, 12 };
|
||||||
private int[] numberzero = { 0, 1, 2, 3, 4,5, 7, 8,9, 10, 11, 12 };
|
private int[] numberzero = { 0, 1, 2, 3, 4,5, 7, 8,9, 10, 11, 12 };
|
||||||
|
|
||||||
|
|
||||||
@ -838,5 +838,38 @@ namespace Plane.FormationCreator.Formation
|
|||||||
await Task.WhenAll(tasks_selected).ConfigureAwait(false);
|
await Task.WhenAll(tasks_selected).ConfigureAwait(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private async Task LEDNumberFlashAsync(bool isOn)
|
||||||
|
{
|
||||||
|
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];
|
||||||
|
tasks_selected[i] = await Task.Factory.StartNew(async () =>
|
||||||
|
{
|
||||||
|
var internalInfo = info;
|
||||||
|
await LEDFlashTaskFlySingleCopterAsync(internalInfo, isOn);
|
||||||
|
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
await Task.WhenAll(tasks_selected).ConfigureAwait(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -107,7 +107,9 @@ namespace Plane.FormationCreator
|
|||||||
|
|
||||||
case Key.LeftShift:
|
case Key.LeftShift:
|
||||||
{
|
{
|
||||||
|
var copters = _copterManager.AcceptingControlCopters;
|
||||||
Shiftkeydown = true;
|
Shiftkeydown = true;
|
||||||
|
_copterManager.shiftkeydown = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
//开关SHOWLED
|
//开关SHOWLED
|
||||||
@ -359,6 +361,8 @@ namespace Plane.FormationCreator
|
|||||||
case Key.LeftShift:
|
case Key.LeftShift:
|
||||||
{
|
{
|
||||||
Shiftkeydown = false;
|
Shiftkeydown = false;
|
||||||
|
_copterManager.shiftkeydown = false;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case Key.W:
|
case Key.W:
|
||||||
|
@ -290,56 +290,60 @@ namespace Plane.FormationCreator.ViewModels
|
|||||||
|
|
||||||
|
|
||||||
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
||||||
bool copterisselect;
|
if (_flightTaskManager.SelectedTask != null)
|
||||||
int selectednumber = _copterManager.SelectedCopters.Count() - 1;
|
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
|
||||||
{
|
{
|
||||||
copterisselect = false;
|
bool copterisselect;
|
||||||
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
int selectednumber = _copterManager.SelectedCopters.Count() - 1;
|
||||||
foreach (var capter in _copterManager.SelectedCopters)
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
if (capter == selectedCopter)
|
copterisselect = false;
|
||||||
copterisselect = true;
|
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
if (capter == selectedCopter)
|
||||||
|
copterisselect = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (copterisselect)
|
||||||
|
{
|
||||||
|
|
||||||
|
tlng = _flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLng;
|
||||||
|
if (minlng == 0)
|
||||||
|
minlng = tlng;
|
||||||
|
if (tlng > maxlng)
|
||||||
|
maxlng = tlng;
|
||||||
|
else if (tlng < minlng)
|
||||||
|
minlng = tlng;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (copterisselect)
|
avgl = (maxlng - minlng) / selectednumber;
|
||||||
|
int coptnum = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
|
copterisselect = false;
|
||||||
|
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
if (capter == selectedCopter)
|
||||||
|
copterisselect = true;
|
||||||
|
|
||||||
tlng = _flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLng;
|
}
|
||||||
if (minlng == 0)
|
if (copterisselect)
|
||||||
minlng = tlng;
|
{
|
||||||
if (tlng > maxlng)
|
|
||||||
maxlng = tlng;
|
|
||||||
else if (tlng < minlng)
|
|
||||||
minlng = tlng;
|
|
||||||
|
|
||||||
|
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLng = minlng + avgl * coptnum;
|
||||||
|
coptnum++;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
avgl = (maxlng - minlng) / selectednumber;
|
|
||||||
int coptnum = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
|
||||||
{
|
|
||||||
copterisselect = false;
|
|
||||||
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
|
||||||
foreach (var capter in _copterManager.SelectedCopters)
|
|
||||||
{
|
|
||||||
if (capter == selectedCopter)
|
|
||||||
copterisselect = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (copterisselect)
|
|
||||||
{
|
|
||||||
|
|
||||||
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLng = minlng + avgl * coptnum;
|
|
||||||
coptnum++;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////
|
///////////////////////
|
||||||
|
|
||||||
// await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
// await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
||||||
@ -371,56 +375,59 @@ namespace Plane.FormationCreator.ViewModels
|
|||||||
//////////////////////
|
//////////////////////
|
||||||
|
|
||||||
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
||||||
bool copterisselect;
|
if (_flightTaskManager.SelectedTask != null)
|
||||||
int selectednumber = _copterManager.SelectedCopters.Count() - 1;
|
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
|
||||||
{
|
{
|
||||||
copterisselect = false;
|
bool copterisselect;
|
||||||
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
int selectednumber = _copterManager.SelectedCopters.Count() - 1;
|
||||||
foreach (var capter in _copterManager.SelectedCopters)
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
if (capter == selectedCopter)
|
copterisselect = false;
|
||||||
copterisselect = true;
|
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
if (capter == selectedCopter)
|
||||||
|
copterisselect = true;
|
||||||
|
|
||||||
|
}
|
||||||
|
if (copterisselect)
|
||||||
|
{
|
||||||
|
|
||||||
|
tlat = _flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLat;
|
||||||
|
if (minlat == 0)
|
||||||
|
minlat = tlat;
|
||||||
|
if (tlat > maxlat)
|
||||||
|
maxlat = tlat;
|
||||||
|
else if (tlat < minlat)
|
||||||
|
minlat = tlat;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (copterisselect)
|
avgl = (maxlat - minlat) / selectednumber;
|
||||||
|
int coptnum = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
|
copterisselect = false;
|
||||||
|
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
if (capter == selectedCopter)
|
||||||
|
copterisselect = true;
|
||||||
|
|
||||||
tlat = _flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLat;
|
}
|
||||||
if (minlat == 0)
|
if (copterisselect)
|
||||||
minlat = tlat;
|
{
|
||||||
if (tlat > maxlat)
|
|
||||||
maxlat = tlat;
|
|
||||||
else if (tlat < minlat)
|
|
||||||
minlat = tlat;
|
|
||||||
|
|
||||||
|
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLat = maxlat - avgl * coptnum;
|
||||||
|
coptnum++;
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///////////////////////
|
||||||
|
|
||||||
|
// await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
||||||
}
|
}
|
||||||
avgl = (maxlat - minlat) / selectednumber;
|
|
||||||
int coptnum = 0;
|
|
||||||
|
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
|
||||||
{
|
|
||||||
copterisselect = false;
|
|
||||||
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
|
||||||
foreach (var capter in _copterManager.SelectedCopters)
|
|
||||||
{
|
|
||||||
if (capter == selectedCopter)
|
|
||||||
copterisselect = true;
|
|
||||||
|
|
||||||
}
|
|
||||||
if (copterisselect)
|
|
||||||
{
|
|
||||||
|
|
||||||
_flightTaskManager.SelectedTask.SingleCopterInfos[i].TargetLat = maxlat - avgl * coptnum;
|
|
||||||
coptnum++;
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////
|
|
||||||
|
|
||||||
// await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
@ -442,6 +449,8 @@ namespace Plane.FormationCreator.ViewModels
|
|||||||
|
|
||||||
|
|
||||||
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
||||||
|
if (_flightTaskManager.SelectedTask != null)
|
||||||
|
{
|
||||||
bool copterisselect;
|
bool copterisselect;
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
@ -482,13 +491,48 @@ namespace Plane.FormationCreator.ViewModels
|
|||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
//await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
||||||
|
|
||||||
}));
|
}
|
||||||
|
else
|
||||||
|
//调整飞机
|
||||||
|
{
|
||||||
|
//模拟飞机才能调整
|
||||||
|
if (selectedCopter is FakeCopter)
|
||||||
|
{
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
tlat = capter.Latitude;
|
||||||
|
if (tlat > maxlat)
|
||||||
|
maxlat = tlat;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
var copterfk = (FakeCopter)capter;
|
||||||
|
copterfk.SetProperties(
|
||||||
|
latitude: maxlat,
|
||||||
|
longitude: copterfk.Longitude);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,6 +554,8 @@ public ICommand VerticlAlignmentCommand
|
|||||||
double tlng = 0;
|
double tlng = 0;
|
||||||
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
||||||
bool copterisselect;
|
bool copterisselect;
|
||||||
|
if (_flightTaskManager.SelectedTask != null)
|
||||||
|
{
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
copterisselect = false;
|
copterisselect = false;
|
||||||
@ -550,9 +596,32 @@ public ICommand VerticlAlignmentCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
//await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
||||||
|
}
|
||||||
|
else
|
||||||
|
//调整飞机
|
||||||
|
{
|
||||||
|
//模拟飞机才能调整
|
||||||
|
if (selectedCopter is FakeCopter)
|
||||||
|
{
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
tlng = capter.Longitude;
|
||||||
|
if (tlng > maxlng)
|
||||||
|
maxlng = tlng;
|
||||||
|
}
|
||||||
|
|
||||||
}));
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
var copterfk = (FakeCopter)capter;
|
||||||
|
copterfk.SetProperties(
|
||||||
|
latitude: copterfk.Latitude,
|
||||||
|
longitude: maxlng );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,8 +697,11 @@ public ICommand VerticlAlignmentCommand
|
|||||||
double centlng = 0;
|
double centlng = 0;
|
||||||
double centlat = 0;
|
double centlat = 0;
|
||||||
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
||||||
bool copterisselect;
|
if (_flightTaskManager.SelectedTask != null)
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
{
|
||||||
|
|
||||||
|
bool copterisselect;
|
||||||
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
copterisselect = false;
|
copterisselect = false;
|
||||||
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
selectedCopter = _flightTaskManager.SelectedTask.SingleCopterInfos[i].Copter;
|
||||||
@ -690,7 +762,76 @@ public ICommand VerticlAlignmentCommand
|
|||||||
////
|
////
|
||||||
await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
||||||
|
|
||||||
}));
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
//调整飞机
|
||||||
|
{
|
||||||
|
//模拟飞机才能调整
|
||||||
|
if (selectedCopter is FakeCopter)
|
||||||
|
{
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
lngsum += capter.Longitude;
|
||||||
|
latsum += capter.Latitude;
|
||||||
|
selectcount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
//计算旋转中心
|
||||||
|
if (selectcount > 0)
|
||||||
|
{
|
||||||
|
centlng = lngsum / selectcount;
|
||||||
|
centlat = latsum / selectcount;
|
||||||
|
}
|
||||||
|
else return;
|
||||||
|
|
||||||
|
foreach (var capter in _copterManager.SelectedCopters)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
double lpDistance = CalculationLogLatDistance.GetDistanceOne(centlng, centlat,
|
||||||
|
capter.Longitude,
|
||||||
|
capter.Latitude);
|
||||||
|
|
||||||
|
CalculationLogLatDistance.MyLatLng mypos1, mypos2;
|
||||||
|
mypos1 = new CalculationLogLatDistance.MyLatLng(centlng, centlat);
|
||||||
|
mypos2 = new CalculationLogLatDistance.MyLatLng(
|
||||||
|
capter.Longitude
|
||||||
|
, capter.Latitude);
|
||||||
|
double lpAzimuth = CalculationLogLatDistance.getAngle(mypos1, mypos2);
|
||||||
|
double lng2 = 0;
|
||||||
|
double lat2 = 0;
|
||||||
|
CalculationLogLatDistance.ConvertDistanceToLogLat(centlng, centlat, lpDistance,
|
||||||
|
lpAzimuth + (double)RotateLine, out lng2, out lat2);
|
||||||
|
|
||||||
|
var copterfk = (FakeCopter)capter;
|
||||||
|
copterfk.SetProperties(
|
||||||
|
latitude: lat2,
|
||||||
|
longitude: lng2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -796,7 +937,9 @@ public ICommand VerticlAlignmentCommand
|
|||||||
double centlat = 0;
|
double centlat = 0;
|
||||||
double centalt = 0;
|
double centalt = 0;
|
||||||
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
var selectedCopter = _copterManager.SelectedCopters.FirstOrDefault();
|
||||||
bool copterisselect;
|
if (_flightTaskManager.SelectedTask != null)
|
||||||
|
{
|
||||||
|
bool copterisselect;
|
||||||
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
for (int i = 0; i < _flightTaskManager.SelectedTask.SingleCopterInfos.Count; i++)
|
||||||
{
|
{
|
||||||
copterisselect = false;
|
copterisselect = false;
|
||||||
@ -888,13 +1031,15 @@ public ICommand VerticlAlignmentCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
////
|
////
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
await Task.Delay(100); // 如果不等待一段时间,很可能会再触发 DataStreamReceived 事件导致飞行器重新出现在地图上。
|
||||||
|
|
||||||
}));
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ namespace Plane.FormationCreator.Views
|
|||||||
|
|
||||||
_copterManager.SetSelectionDelegates(
|
_copterManager.SetSelectionDelegates(
|
||||||
() => lvwDrones.SelectedItems,
|
() => lvwDrones.SelectedItems,
|
||||||
copter => lvwDrones.SelectedItem = copter
|
SelectitemMessage
|
||||||
);
|
);
|
||||||
lvwDrones.SelectionChanged += (sender, e) =>
|
lvwDrones.SelectionChanged += (sender, e) =>
|
||||||
{
|
{
|
||||||
@ -41,5 +41,14 @@ namespace Plane.FormationCreator.Views
|
|||||||
}
|
}
|
||||||
|
|
||||||
private CopterManager _copterManager = ServiceLocator.Current.GetInstance<CopterManager>();
|
private CopterManager _copterManager = ServiceLocator.Current.GetInstance<CopterManager>();
|
||||||
|
private void SelectitemMessage(ICopter copter)
|
||||||
|
{
|
||||||
|
|
||||||
|
|
||||||
|
if (!_copterManager.shiftkeydown)
|
||||||
|
lvwDrones.SelectedItem = copter;
|
||||||
|
else
|
||||||
|
lvwDrones.SelectedItems.Add(copter);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -345,6 +345,7 @@ namespace Plane.FormationCreator.Views
|
|||||||
private void RegisterEventHandlersForTaskInfo(Ellipse wp, int taskIndex)
|
private void RegisterEventHandlersForTaskInfo(Ellipse wp, int taskIndex)
|
||||||
{
|
{
|
||||||
var info = _flightTaskManager.Tasks[taskIndex].SingleCopterInfos.FirstOrDefault(i => i.Copter == this.Copter);
|
var info = _flightTaskManager.Tasks[taskIndex].SingleCopterInfos.FirstOrDefault(i => i.Copter == this.Copter);
|
||||||
|
if (info == null) return;
|
||||||
info.PropertyChanged += (sender, e) =>
|
info.PropertyChanged += (sender, e) =>
|
||||||
{
|
{
|
||||||
switch (e.PropertyName)
|
switch (e.PropertyName)
|
||||||
|
Loading…
Reference in New Issue
Block a user