1解决无法退出问题

2按下shift后可以批量点中航点选择
3倒计时视觉bug
This commit is contained in:
pxzleo 2017-09-16 12:19:05 +08:00
parent 5bb0bd49ce
commit 39a1002852
9 changed files with 386 additions and 120 deletions

View File

@ -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));
} }
} }
} }

View File

@ -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>

View File

@ -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
{
} }
} }

View File

@ -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;
}
} }
} }

View File

@ -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);
}
} }
} }

View File

@ -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:

View File

@ -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 事件导致飞行器重新出现在地图上。
}));
}
}));
} }
} }

View File

@ -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);
}
} }
} }

View File

@ -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)