using Plane.Geography; using System.ComponentModel; using System.Threading; namespace Plane.Copters { /// /// 存储自动飞行任务的参数。 /// public class Mission : PLObservableObject, IMission { #region Backing Fields private float _Altitude; private FlightCommand _Command; private double _Latitude; private double _Longitude; private float _Param1; private float _Param3; private float _Param4; private ushort _Sequence; #endregion Backing Fields /// /// 创建 的实例。 /// /// 与 UI 线程关联的 实例,用于 UWP 项目中在 UI 线程引发 事件。 public Mission(SynchronizationContext uiSyncContext = null) : base(uiSyncContext ?? SynchronizationContext.Current) { } /// /// 获取或设置相对于起飞点的高度。 /// public float Altitude { get { return _Altitude; } set { Set(nameof(Altitude), ref _Altitude, value); } } /// /// 获取或设置飞行命令。 /// public FlightCommand Command { get { return _Command; } set { Set(nameof(Command), ref _Command, value); } } /// /// 获取或设置纬度。 /// public double Latitude { get { return _Latitude; } set { Set(nameof(Latitude), ref _Latitude, value); } } /// /// 获取或设置经度。 /// public double Longitude { get { return _Longitude; } set { Set(nameof(Longitude), ref _Longitude, value); } } /// /// 获取或设置参数 1。通常用来指定判断为到达的最大半径,单位为米。 /// public float Param1 { get { return _Param1; } set { Set(nameof(Param1), ref _Param1, value); } } /// /// 获取或设置参数 2。通常用来指定停留时间,单位为毫秒。 /// public virtual float Param2 { get; set; } /// /// 获取或设置参数 3。通常用来指定盘旋半径,单位为米,正数表示顺时针,负数表示逆时针。 /// public float Param3 { get { return _Param3; } set { Set(nameof(Param3), ref _Param3, value); } } /// /// 获取或设置参数 4。通常用来指定机头方向,单位为角度,北方为 0,东方为 90,范围为 [0, 360)。 /// public float Param4 { get { return _Param4; } set { Set(nameof(Param4), ref _Param4, value); } } /// /// 获取或设置序号。 /// public ushort Sequence { get { return _Sequence; } set { Set(nameof(Sequence), ref _Sequence, value); } } /// /// 创建降落任务。 /// /// 降落任务。 public static IMission CreateLandMission() => new Mission { Command = FlightCommand.Land }; /// /// 创建返航任务。 /// /// 返航任务。 public static IMission CreateReturnToLaunchMission() => new Mission { Command = FlightCommand.ReturnToLaunch }; /// /// 创建航点任务。 /// /// 航点目的地。 /// 航点任务。 // public static IMission CreateWaypointMission(ILocation loc) => // CreateWaypointMission(loc.Latitude, loc.Longitude, loc.Altitude); /// /// 创建航点任务。 /// /// 目的地纬度。 /// 目的地经度。 /// 目的地相巴拉圭高度。 /// 航点任务。 public static IMission CreateWaypointMission(int loitertime,int flytime, double lat, double lng, float alt) => new Mission { Command = FlightCommand.Waypoint, Param1= loitertime, //停留时间 s Param2= flytime, //飞行时间 s Latitude = lat, Longitude = lng, Altitude = alt }; public static IMission CreateTakeoffMission(int waittime,int flytime, double lat, double lng, float alt) => new Mission { Command = FlightCommand.TakeOff, Param1 = waittime, //起飞等待时间 s Param2 = flytime, //起飞飞行时间 s Latitude = lat, Longitude = lng, Altitude = alt }; } }