public static bool TryParse(string coordinates, out DMS value) { value = new DMS(-1000m); decimal val; //Regex r = new Regex(@"(\d+)[°\s]+(\d+)['\s]+(\d+)[\.\,]?(\d*)['\s]*"); //var m = r.Match(coordinates); var c = coordinates.Split(new[] { ' ', '°', '\'', '.', ',', '"' }); try { //if (m.Success) //{ // value.D = int.Parse(m.Groups[1].Value); // value.M = int.Parse(m.Groups[2].Value); // var dig = m.Groups[4].Length > 0 ? decimal.Parse("0" + Telescope.decimalSeparator + m.Groups[4].Value) : 0; // value.S = int.Parse(m.Groups[3].Value) + dig; if (c.Length > 2) { value.D = int.Parse(c[0]); value.M = int.Parse(c[1]); var dig = c.Length > 3 ? decimal.Parse("0" + decimalSeparator + c[3]) : 0; value.S = int.Parse(c[2]) + dig; return(true); } } catch { return(false); } if (decimal.TryParse(coordinates, out val)) { value.Deg = val; return(true); } return(false); }
public static bool TryParse(string coordinates, out DMS value) { value = new DMS(-1000m); decimal val; //Regex r = new Regex(@"(\d+)[°\s]+(\d+)['\s]+(\d+)[\.\,]?(\d*)['\s]*"); //var m = r.Match(coordinates); var c = coordinates.Split(new[] { ' ', '°', '\'', '.', ',', '"' }); try { //if (m.Success) //{ // value.D = int.Parse(m.Groups[1].Value); // value.M = int.Parse(m.Groups[2].Value); // var dig = m.Groups[4].Length > 0 ? decimal.Parse("0" + Telescope.decimalSeparator + m.Groups[4].Value) : 0; // value.S = int.Parse(m.Groups[3].Value) + dig; if (c.Length > 2) { value.D = int.Parse(c[0]); value.M = int.Parse(c[1]); var dig = c.Length > 3 ? decimal.Parse("0" + decimalSeparator + c[3]) : 0; value.S = int.Parse(c[2]) + dig; return true; } } catch { return false; } if (decimal.TryParse(coordinates, out val)) { value.Deg = val; return true; } return false; }
public byte[] exchange(byte[] input) { var ans = new List<byte>(); if(input == null || !input.Any()) throw new Exception("Empty transfer"); var t = input[0]; switch (t) { case (byte)'V': return this.makeVersion(); case (byte)'Z': return "12AB,4000#".ToBytes(); case (byte)'z': return "12AB0500,40000500#".ToBytes(); case (byte)'E': return "34AB,12CE#".ToBytes(); case (byte)'e': return "34AB0500,12CE0500#".ToBytes(); case (byte)'S': //Sync case (byte)'s': case (byte)'B': //Slew AltAzm case (byte)'b': case (byte)'R': //Slew RaDec case (byte)'r': return "#".ToBytes(); case (byte)'t': return new byte[]{(byte)_tracking, (byte)(char)GeneralCommands.TERMINATOR}; case (byte)'T': _tracking = (TrackingMode)input[1]; return new byte[] { (byte)(char)GeneralCommands.TERMINATOR }; case (byte)'P': return this.SendCommand(input[1], (DeviceID)input[2], (DeviceCommands)input[3], input.Skip(4).ToArray()); case (byte)'w': { var lat = Location.Lat.ToDMS(); var lon = Location.Lon.ToDMS(); return new byte[] { (byte)lat.D, (byte)lat.M, (byte)lat.S, (byte)(lat.Sign > 0 ? 0 : 1), (byte)lon.D, (byte)lon.M, (byte)lon.S, (byte)(lon.Sign > 0 ? 0 : 1), (byte)(char)GeneralCommands.TERMINATOR }; } case (byte)'W': { var lat = new DMS(input[1], input[2], input[3], input[4] > 0 ? -1 : 1); var lon = new DMS(input[5], input[6], input[7], input[8] > 0 ? -1 : 1); Location = new LatLon(lat.Deg, lon.Deg); return "#".ToBytes(); } case (byte)'h': { var tm = DateTime.Now; var tz = (int)(TimeZone.CurrentTimeZone.GetUtcOffset(tm).TotalHours + 0.5); var dlst = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? 1 : 0; return new byte[] { (byte)tm.Hour, (byte)tm.Minute, (byte)tm.Second, (byte)tm.Month, (byte)tm.Day, (byte)(tm.Year - 2000), (byte)tz, (byte)dlst, (byte)(char)GeneralCommands.TERMINATOR }; } case (byte)'H': return "#".ToBytes(); default: return "#".ToBytes(); } ans.Add((byte)(char)GeneralCommands.TERMINATOR); return ans.ToArray(); }