private void dataGridViewDistances_CellEndEdit(object sender, DataGridViewCellEventArgs e) { if (e.ColumnIndex == 0) { var cell = dataGridViewDistances[e.ColumnIndex, e.RowIndex]; var value = cell.Value as string; cell.Style.BackColor = Color.White; if (value == null) { return; } var system = SystemData.GetSystem(value); if (system == null) { cell.Value = null; //cell.Style.BackColor = Color.Salmon; return; } if (value != system.name) { cell.Value = system.name; } cell.Tag = system; } // reset any calculated distances dataGridViewDistances[2, e.RowIndex].Value = null; dataGridViewDistances[3, e.RowIndex].Value = null; // trigger trilateration calculation RunTrilateration(); }
private void TestTrileteration() { foreach (SystemClass System in SQLiteDBClass.globalSystems) { if (DateTime.Now.Subtract(System.CreateDate).TotalDays < 60) { //var Distances = from SQLiteDBClass.globalDistances var distances1 = from p in SQLiteDBClass.dictDistances where p.Value.NameA.ToLower() == System.SearchName select p.Value; var distances2 = from p in SQLiteDBClass.dictDistances where p.Value.NameB.ToLower() == System.SearchName select p.Value; int nr = distances1.Count(); //nr = distances2.Count(); if (nr > 4) { var trilateration = new Trilateration(); // trilateration.Logger = (s) => System.Console.WriteLine(s); foreach (var item in distances1) { SystemClass distsys = SystemData.GetSystem(item.NameB); if (distsys != null) { if (distsys.HasCoordinate) { Trilateration.Entry entry = new Trilateration.Entry(distsys.x, distsys.y, distsys.z, item.Dist); trilateration.AddEntry(entry); } } } foreach (var item in distances2) { SystemClass distsys = SystemData.GetSystem(item.NameA); if (distsys != null) { if (distsys.HasCoordinate) { Trilateration.Entry entry = new Trilateration.Entry(distsys.x, distsys.y, distsys.z, item.Dist); trilateration.AddEntry(entry); } } } var csharpResult = trilateration.Run(Trilateration.Algorithm.RedWizzard_Native); var javascriptResult = trilateration.Run(Trilateration.Algorithm.RedWizzard_Emulated); if (javascriptResult.State == Trilateration.ResultState.Exact) { nr++; } } } } }
private void UpdateTo(bool updatename) { changesilence = true; if (textBox_To.ReadOnly == false) // if entering system name.. { EDDiscovery2.DB.ISystem ds1 = SystemData.GetSystem(SystemNameOnly(textBox_To.Text)); if (ds1 != null) { if (updatename) // can't fix it as you type.. so leave alone { textBox_To.Text = ds1.name; } textBox_ToX.Text = ds1.x.ToString("0.00"); textBox_ToY.Text = ds1.y.ToString("0.00"); textBox_ToZ.Text = ds1.z.ToString("0.00"); } else { textBox_ToX.Text = textBox_ToY.Text = textBox_ToZ.Text = ""; } } else // Co-ords.. { string res = ""; Point3D curpos; if (GetCoordsTo(out curpos)) { SystemClass nearest; double distance; FindNearestSystem(curpos, out nearest, out distance); if (distance < 0.1) { res = nearest.name; } else { res = nearest.name + " @ " + distance.ToString("0.00") + "ly"; } } textBox_To.Text = res; } UpdateDistance(); changesilence = false; button_Route.Enabled = IsValid(); }
/* Tries to load the system data for the given name. If no system data is available, but the system is known, * it creates a new System entity, otherwise logs it and returns null. */ private SystemClass getSystemForTrilateration(string systemName) { var system = SystemData.GetSystem(systemName); if (system == null) { if (!edsm.IsKnownSystem(systemName)) { LogText("Only systems with coordinates or already known to EDSM can be added" + Environment.NewLine, Color.Red); } else { system = new SystemClass(systemName); } } return(system); }
private void checkForUnknownSystemsNowKnown() { for (int i = 0, count = dataGridViewDistances.Rows.Count - 1; i < count; i++) { var systemCell = dataGridViewDistances[0, i]; var oldSystem = (SystemClass)systemCell.Tag; if (!oldSystem.HasCoordinate) { var value = systemCell.Value as string; var newSystem = SystemData.GetSystem(value); if (newSystem != null && newSystem.HasCoordinate) { systemCell.Tag = newSystem; dataGridViewDistances[3, i].Style.ForeColor = Color.Green; dataGridViewDistances[3, i].Value = "Position found"; } } } }
private bool IsValid() // have we star names or co-ords ready to go { bool readytocalc = true; Point3D pos; if (textBox_From.ReadOnly == false) // if enabled, we are doing star names { if (SystemData.GetSystem(SystemNameOnly(textBox_From.Text)) == null) { readytocalc = false; } } else // check co-ords { if (!GetCoordsFrom(out pos)) { readytocalc = false; } } if (textBox_To.ReadOnly == false) // if enabled, we are doing star names { if (SystemData.GetSystem(SystemNameOnly(textBox_To.Text)) == null) { readytocalc = false; } } else // check co-ords { if (!GetCoordsTo(out pos)) { readytocalc = false; } } if (comboBoxRoutingMetric.SelectedIndex < 0) { readytocalc = false; } return(readytocalc); }
private void dataGridViewDistances_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { if (e.ColumnIndex == 0) { var value = e.FormattedValue.ToString(); var cell = dataGridViewDistances[e.ColumnIndex, e.RowIndex]; if (value == "" && (cell.Value == null || cell.Value.ToString() == "")) { return; } var system = SystemData.GetSystem(value); var enteredSystems = GetEnteredSystems(); if (cell.Value != null) { enteredSystems.RemoveAll(s => s.name == cell.Value.ToString()); } if (system == null || (enteredSystems.Contains(system))) { //e.Cancel = true; return; } } if (e.ColumnIndex == 1) { var value = e.FormattedValue.ToString().Trim(); if (value == "") { return; } var regex = new Regex(@"^\d{1,5}([,.]\d{1,2})?$"); e.Cancel = !regex.Match(e.FormattedValue.ToString()).Success; } }
internal void NewPosition(object source) { try { string name = netlog.visitedSystems.Last().Name; Invoke((MethodInvoker) delegate { LogText("Arrived to system: "); SystemClass sys1 = SystemData.GetSystem(name); if (sys1 == null || sys1.HasCoordinate == false) { LogTextHighlight(name); } else { LogText(name); } int count = GetVisitsCount(name); LogText(" : Vist nr " + count.ToString() + Environment.NewLine); System.Diagnostics.Trace.WriteLine("Arrived to system: " + name + " " + count.ToString() + ":th visit."); var result = visitedSystems.OrderByDescending(a => a.time).ToList <SystemPosition>(); //if (TrilaterationControl.Visible) //{ // CloseTrilateration(); // MessageBox.Show("You have arrived to another system while trilaterating." // + " As a pre-caution to prevent any mistakes with submitting wrong systems or distances" // + ", your trilateration was aborted."); //} SystemPosition item = result[0]; SystemPosition item2; if (result.Count > 1) { item2 = result[1]; } else { item2 = null; } // grab distance to next (this) system textBoxDistanceToNextSystem.Enabled = false; if (textBoxDistanceToNextSystem.Text.Length > 0 && item2 != null) { SystemClass currentSystem = null, previousSystem = null; SystemData.SystemList.ForEach(s => { if (s.name == item.Name) { currentSystem = s; } if (s.name == item2.Name) { previousSystem = s; } }); if (currentSystem == null || previousSystem == null || !currentSystem.HasCoordinate || !previousSystem.HasCoordinate) { var presetDistance = DistanceAsDouble(textBoxDistanceToNextSystem.Text.Trim(), 45); if (presetDistance.HasValue) { var distance = new DistanceClass { Dist = presetDistance.Value, CreateTime = DateTime.UtcNow, CommanderCreate = EDDiscoveryForm.EDDConfig.CurrentCommander.Name, NameA = item.Name, NameB = item2.Name, Status = DistancsEnum.EDDiscovery }; Console.Write("Pre-set distance " + distance.NameA + " -> " + distance.NameB + " = " + distance.Dist); distance.Store(); SQLiteDBClass.AddDistanceToCache(distance); } } } textBoxDistanceToNextSystem.Clear(); textBoxDistanceToNextSystem.Enabled = true; AddHistoryRow(true, item, item2); StoreSystemNote(); }); } catch (Exception ex) { System.Diagnostics.Trace.WriteLine("Exception NewPosition: " + ex.Message); System.Diagnostics.Trace.WriteLine("Trace: " + ex.StackTrace); } }
private void ShowClosestSystems(string name) { sysDist = new List <SystemDist>(); SystemClass LastSystem = null; float dx, dy, dz; double dist; try { if (name == null) { var result = visitedSystems.OrderByDescending(a => a.time).ToList <SystemPosition>(); for (int ii = 0; ii < result.Count; ii++) //foreach (var item in result) { SystemPosition item = result[ii]; LastSystem = SystemData.GetSystem(item.Name); name = item.Name; if (LastSystem != null) { break; } } } else { LastSystem = SystemData.GetSystem(name); } if (name != null) { label3.Text = "Closest systems from " + name.ToString(); } dataGridViewNearest.Rows.Clear(); if (LastSystem == null) { return; } foreach (SystemClass pos in SystemData.SystemList) { dx = (float)(pos.x - LastSystem.x); dy = (float)(pos.y - LastSystem.y); dz = (float)(pos.z - LastSystem.z); dist = dx * dx + dy * dy + dz * dz; //distance = (float)((system.x - arcsystem.x) * (system.x - arcsystem.x) + (system.y - arcsystem.y) * (system.y - arcsystem.y) + (system.z - arcsystem.z) * (system.z - arcsystem.z)); if (dist > 0) { SystemDist sdist = new SystemDist(); sdist.name = pos.name; sdist.dist = Math.Sqrt(dist); sysDist.Add(sdist); } } var list = (from t in sysDist orderby t.dist select t).Take(50); foreach (SystemDist sdist in list) { object[] rowobj = { sdist.name, sdist.dist.ToString("0.00") }; dataGridViewNearest.Rows.Add(rowobj); } } catch (Exception ex) { System.Diagnostics.Trace.WriteLine("Exception : " + ex.Message); System.Diagnostics.Trace.WriteLine(ex.StackTrace); } }
private void AddHistoryRow(bool insert, SystemPosition item, SystemPosition item2) { SystemClass sys1 = null, sys2; double dist; sys1 = SystemData.GetSystem(item.Name); if (sys1 == null) { sys1 = new SystemClass(item.Name); if (SQLiteDBClass.globalSystemNotes.ContainsKey(sys1.SearchName)) { sys1.Note = SQLiteDBClass.globalSystemNotes[sys1.SearchName].Note; } } if (item2 != null) { sys2 = SystemData.GetSystem(item2.Name); if (sys2 == null) { sys2 = new SystemClass(item2.Name); } } else { sys2 = null; } item.curSystem = sys1; item.prevSystem = sys2; if (!insert) { if (item.vs == null) { SystemPosition known = visitedSystems.First(x => x.Name == item.Name); if (known != null) { item.vs = known.vs; } } } string diststr = ""; dist = 0; if (sys2 != null) { if (sys1.HasCoordinate && sys2.HasCoordinate) { dist = SystemData.Distance(sys1, sys2); } else { dist = DistanceClass.Distance(sys1, sys2); } if (dist > 0) { diststr = dist.ToString("0.00"); } } item.strDistance = diststr; //richTextBox_History.AppendText(item.time + " " + item.Name + Environment.NewLine); object[] rowobj = { item.time, item.Name, diststr, item.curSystem.Note, "█" }; int rownr; if (insert) { dataGridViewTravel.Rows.Insert(0, rowobj); rownr = 0; } else { dataGridViewTravel.Rows.Add(rowobj); rownr = dataGridViewTravel.Rows.Count - 1; } var cell = dataGridViewTravel.Rows[rownr].Cells[1]; cell.Tag = item; dataGridViewTravel.Rows[rownr].DefaultCellStyle.ForeColor = (sys1.HasCoordinate) ? _discoveryForm.theme.VisitedSystemColor : _discoveryForm.theme.NonVisitedSystemColor; cell = dataGridViewTravel.Rows[rownr].Cells[4]; cell.Style.ForeColor = (item.vs == null) ? Color.FromArgb(defaultMapColour) : Color.FromArgb(item.vs.MapColour); }
public void RefreshHistory() { Stopwatch sw1 = new Stopwatch(); //richTextBox_History.Clear(); sw1.Start(); TimeSpan maxDataAge = TimeSpan.Zero; int atMost = 0; switch (comboBoxHistoryWindow.SelectedIndex) { case 0: maxDataAge = new TimeSpan(6, 0, 0); // 6 hours break; case 1: maxDataAge = new TimeSpan(12, 0, 0); // 12 hours break; case 2: maxDataAge = new TimeSpan(24, 0, 0); // 24 hours break; case 3: maxDataAge = new TimeSpan(3 * 24, 0, 0); // 3 days break; case 4: maxDataAge = new TimeSpan(7 * 24, 0, 0); // 1 week break; case 5: maxDataAge = new TimeSpan(14 * 24, 0, 0); // 2 weeks break; case 6: maxDataAge = new TimeSpan(30, 0, 0, 0); // 30 days (month) break; case 7: atMost = 20; // Last 20 break; case 8: maxDataAge = new TimeSpan(100000, 24, 0, 0); // all break; default: maxDataAge = new TimeSpan(7 * 24, 0, 0); // 1 week (default) break; } if (visitedSystems == null || visitedSystems.Count == 0) { GetVisitedSystems(); } if (visitedSystems == null) { return; } List <SystemPosition> result; if (atMost > 0) { result = visitedSystems.OrderByDescending(s => s.time).Take(atMost).ToList(); } else { var oldestData = DateTime.Now.Subtract(maxDataAge); result = (from systems in visitedSystems where systems.time > oldestData orderby systems.time descending select systems).ToList(); } dataGridViewTravel.Rows.Clear(); System.Diagnostics.Trace.WriteLine("SW1: " + (sw1.ElapsedMilliseconds / 1000.0).ToString("0.000")); for (int ii = 0; ii < result.Count; ii++) //foreach (var item in result) { SystemPosition item = result[ii]; SystemPosition item2; if (ii < result.Count - 1) { item2 = result[ii + 1]; } else { item2 = null; } AddHistoryRow(false, item, item2); } if (result.Count != visitedSystems.Count) { // we didn't put all the systems in the history grid // make sure that the LastKnown system is properly loaded if it's not visible so trilateration can find it... var lastKnown = (from systems in visitedSystems where systems.curSystem != null && systems.curSystem.HasCoordinate orderby systems.time descending select systems.curSystem).FirstOrDefault(); if (lastKnown == null) { for (int ii = visitedSystems.Count - 1; ii > 0; ii--) { SystemClass sys = SystemData.GetSystem(visitedSystems[ii].Name); if (visitedSystems[ii].curSystem == null && sys != null) { visitedSystems[ii].curSystem = sys; if (sys.HasCoordinate) { break; } } } } } System.Diagnostics.Trace.WriteLine("SW2: " + (sw1.ElapsedMilliseconds / 1000.0).ToString("0.000")); if (dataGridViewTravel.Rows.Count > 0) { ShowSystemInformation((SystemPosition)(dataGridViewTravel.Rows[0].Cells[1].Tag)); } System.Diagnostics.Trace.WriteLine("SW3: " + (sw1.ElapsedMilliseconds / 1000.0).ToString("0.000")); sw1.Stop(); if (textBoxFilter.TextLength > 0) { FilterGridView(); } }
private void AddHistoryRow(bool insert, SystemPosition item, SystemPosition item2) { SystemClass sys1 = null, sys2; double dist; sys1 = SystemData.GetSystem(item.Name); if (sys1 == null) { sys1 = new SystemClass(item.Name); if (SQLiteDBClass.globalSystemNotes.ContainsKey(sys1.SearchName)) { sys1.Note = SQLiteDBClass.globalSystemNotes[sys1.SearchName].Note; } } if (item2 != null) { sys2 = SystemData.GetSystem(item2.Name); if (sys2 == null) { sys2 = new SystemClass(item2.Name); } } else { sys2 = null; } item.curSystem = sys1; item.prevSystem = sys2; string diststr = ""; dist = 0; if (sys2 != null) { if (sys1.HasCoordinate && sys2.HasCoordinate) { dist = SystemData.Distance(sys1, sys2); } else { dist = DistanceClass.Distance(sys1, sys2); } if (dist > 0) { diststr = dist.ToString("0.00"); } } item.strDistance = diststr; //richTextBox_History.AppendText(item.time + " " + item.Name + Environment.NewLine); object[] rowobj = { item.time, item.Name, diststr, item.curSystem.Note }; int rownr; if (insert) { dataGridView1.Rows.Insert(0, rowobj); rownr = 0; } else { dataGridView1.Rows.Add(rowobj); rownr = dataGridView1.Rows.Count - 1; } var cell = dataGridView1.Rows[rownr].Cells[1]; cell.Tag = item; if (!sys1.HasCoordinate) // Mark all systems without coordinates { cell.Style.ForeColor = Color.Blue; } }
private void SyncAllEDSMSystems() { try { EDDBClass eddb = new EDDBClass(); EDSMClass edsm = new EDSMClass(); string edsmsystems = Path.Combine(Tools.GetAppDataDirectory(), "edsmsystems.json"); bool newfile = false; string rwsysfiletime = "2014-01-01 00:00:00"; LogText("Get systems from EDSM." + Environment.NewLine); eddb.DownloadFile("http://www.edsm.net/dump/systemsWithCoordinates.json", edsmsystems, out newfile); if (newfile) { LogText("Adding EDSM systems." + Environment.NewLine); _db.GetAllSystems(); string json = LoadJsonFile(edsmsystems); List <SystemClass> systems = SystemClass.ParseEDSM(json, ref rwsysfiletime); List <SystemClass> systems2Store = new List <SystemClass>(); foreach (SystemClass system in systems) { // Check if sys exists first SystemClass sys = SystemData.GetSystem(system.name); if (sys == null) { systems2Store.Add(system); } else if (!sys.name.Equals(system.name) || sys.x != system.x || sys.y != system.y || sys.z != system.z) // Case or position changed { systems2Store.Add(system); } } SystemClass.Store(systems2Store); systems.Clear(); systems = null; systems2Store.Clear(); systems2Store = null; json = null; _db.PutSettingString("EDSMLastSystems", rwsysfiletime); _db.GetAllSystems(); } else { LogText("No new file." + Environment.NewLine); } string retstr = edsm.GetNewSystems(_db); Invoke((MethodInvoker) delegate { TravelHistoryControl.LogText(retstr); }); GC.Collect(); } catch (Exception ex) { Invoke((MethodInvoker) delegate { TravelHistoryControl.LogText("GetAllEDSMSystems exception:" + ex.Message + Environment.NewLine); }); } }
private void RunTrilaterationWorker() { var systemsEntries = new Dictionary <SystemClass, Trilateration.Entry>(); for (int i = 0, count = dataGridViewDistances.Rows.Count - 1; i < count; i++) { var systemCell = dataGridViewDistances[0, i]; var distanceCell = dataGridViewDistances[1, i]; if (systemCell.Tag == null || distanceCell.Value == null) { continue; } var system = (SystemClass)systemCell.Tag; if (system != null && system.HasCoordinate) { var culture = new CultureInfo("en-US"); var distance = double.Parse(distanceCell.Value.ToString().Replace(",", "."), culture); var entry = new Trilateration.Entry(system.x, system.y, system.z, distance); systemsEntries.Add(system, entry); } } if (systemsEntries.Count < 3) { return; } Invoke((MethodInvoker) delegate { LogText("Starting trilateration..." + Environment.NewLine); labelStatus.Text = "Calculating…"; labelStatus.BackColor = Color.Gold; }); var trilateration = new Trilateration { Logger = Console.WriteLine }; foreach (var item in systemsEntries) { trilateration.AddEntry(item.Value); } //var trilaterationResultCS = trilateration.RunCSharp(); var trilaterationAlgorithm = radioButtonAlgorithmJs.Checked ? Trilateration.Algorithm.RedWizzard_Emulated : Trilateration.Algorithm.RedWizzard_Native; var stopwatch = new Stopwatch(); stopwatch.Start(); var trilaterationResult = trilateration.Run(trilaterationAlgorithm); stopwatch.Stop(); var spentTimeString = (stopwatch.ElapsedMilliseconds / 1000.0).ToString("0.0000") + "ms"; lastTrilatelationResult = trilaterationResult; lastTrilatelationEntries = systemsEntries; if (trilaterationResult.State == Trilateration.ResultState.Exact) { Invoke((MethodInvoker) delegate { SystemClass s1, s2, s3; s1 = SystemData.GetSystem("Sol"); s2 = SystemData.GetSystem("Sagittarius A*"); s3 = new SystemClass(); s3.x = trilaterationResult.Coordinate.X; s3.y = trilaterationResult.Coordinate.Y; s3.z = trilaterationResult.Coordinate.Z; LogText("Trilateration successful (" + spentTimeString + "), exact coordinates found." + Environment.NewLine); LogText("x=" + trilaterationResult.Coordinate.X + ", y=" + trilaterationResult.Coordinate.Y + ", z=" + trilaterationResult.Coordinate.Z + " Sol: " + SystemData.Distance(s1, s3).ToString("0.0") + " Sag A* " + SystemData.Distance(s2, s3).ToString("0.0") + Environment.NewLine); labelStatus.Text = "Success, coordinates found!"; labelStatus.BackColor = Color.LawnGreen; }); } else if (trilaterationResult.State == Trilateration.ResultState.NotExact || trilaterationResult.State == Trilateration.ResultState.MultipleSolutions) { Invoke((MethodInvoker) delegate { LogText("Trilateration not successful (" + spentTimeString + "), only approximate coordinates found." + Environment.NewLine); //LogText("x=" + trilaterationResult.Coordinate.X + ", y=" + trilaterationResult.Coordinate.Y + ", z=" + trilaterationResult.Coordinate.Z + Environment.NewLine); LogText("Enter more distances." + Environment.NewLine); labelStatus.Text = "Enter More Distances"; labelStatus.BackColor = Color.Orange; }); } else if (trilaterationResult.State == Trilateration.ResultState.NeedMoreDistances) { Invoke((MethodInvoker) delegate { LogText("Trilateration not successful (" + spentTimeString + "), coordinates not found." + Environment.NewLine); LogText("Enter more distances." + Environment.NewLine); labelStatus.Text = "Enter More Distances"; labelStatus.BackColor = Color.Red; ClearCalculatedDataGridViewDistancesRows(); }); } // update trilaterated coordinates if (trilaterationResult.Coordinate != null) { Invoke((MethodInvoker) delegate { textBoxCoordinateX.Text = trilaterationResult.Coordinate.X.ToString(); textBoxCoordinateY.Text = trilaterationResult.Coordinate.Y.ToString(); textBoxCoordinateZ.Text = trilaterationResult.Coordinate.Z.ToString(); if (TargetSystem != null) { TargetSystem.x = trilaterationResult.Coordinate.X; TargetSystem.y = trilaterationResult.Coordinate.Y; TargetSystem.z = trilaterationResult.Coordinate.Z; } toolStripButtonMap.Enabled = (TargetSystem != null); }); var suggestedSystems = GetListOfSuggestedSystems(trilaterationResult.Coordinate.X, trilaterationResult.Coordinate.Y, trilaterationResult.Coordinate.Z, 16); Invoke((MethodInvoker)(() => PopulateSuggestedSystems(suggestedSystems))); } else { Invoke((MethodInvoker) delegate { textBoxCoordinateX.Text = "?"; textBoxCoordinateY.Text = "?"; textBoxCoordinateZ.Text = "?"; }); } //var hasInvalidDistances = false; // update dataGrid with calculated distances and status var entriesDistances = trilaterationResult.EntriesDistances; for (int i = 0, count = dataGridViewDistances.Rows.Count - 1; i < count; i++) { var systemCell = dataGridViewDistances[0, i]; var calculatedDistanceCell = dataGridViewDistances[2, i]; var statusCell = dataGridViewDistances[3, i]; var system = (SystemClass)systemCell.Tag; if (system == null) { continue; } if (system.HasCoordinate) { calculatedDistanceCell.Value = null; statusCell.Value = null; } if (entriesDistances == null || systemCell.Value == null || systemCell.Tag == null) { continue; } if (!systemsEntries.ContainsKey(system)) // calculated without this system, so skip the row { continue; } var systemEntry = systemsEntries[system]; var calculatedDistance = entriesDistances[systemEntry]; calculatedDistanceCell.Value = calculatedDistance.ToString(); if (systemEntry.Distance == calculatedDistance) { calculatedDistanceCell.Style.ForeColor = Color.Green; statusCell.Value = "OK"; statusCell.Style.ForeColor = Color.Green; } else { //hasInvalidDistances = true; calculatedDistanceCell.Style.ForeColor = Color.Salmon; statusCell.Value = "Wrong distance?"; statusCell.Style.ForeColor = Color.Salmon; } } }
private void RouteIterative(string fromsys, bool usingcoordsfrom, Point3D coordsfrom, string tosys, bool usingcoordsto, Point3D coordsto, float maxrange, int routemethod) { double traveldistance = Point3D.DistanceBetween(coordsfrom, coordsto); // its based on a percentage of the traveldistance routeSystems = new List <SystemClass>(); routeSystems.Add(SystemData.GetSystem(textBox_From.Text)); AppendText("Searching route from " + fromsys + " to " + tosys + " using " + metric_options[routemethod] + " metric" + Environment.NewLine); AppendText("Total distance: " + traveldistance.ToString("0.00") + " in " + maxrange.ToString("0.00") + "ly jumps" + Environment.NewLine); AppendText(Environment.NewLine + string.Format("{0,-40} Depart @ {1,9:0.00},{2,8:0.00},{3,9:0.00}" + Environment.NewLine, fromsys, coordsfrom.X, coordsfrom.Y, coordsfrom.Z)); Point3D curpos = coordsfrom; int jump = 1; double actualdistance = 0; #if DEBUG Console.WriteLine("-------------------------- BEGIN"); #endif do { double distancetogo = Point3D.DistanceBetween(coordsto, curpos); // to go if (distancetogo <= maxrange) // within distance, we can go directly { break; } Point3D travelvector = new Point3D(coordsto.X - curpos.X, coordsto.Y - curpos.Y, coordsto.Z - curpos.Z); // vector to destination Point3D travelvectorperly = new Point3D(travelvector.X / distancetogo, travelvector.Y / distancetogo, travelvector.Z / distancetogo); // per ly travel vector Point3D nextpos = new Point3D(curpos.X + maxrange * travelvectorperly.X, curpos.Y + maxrange * travelvectorperly.Y, curpos.Z + maxrange * travelvectorperly.Z); // where we would like to be.. #if DEBUG Console.WriteLine("Curpos " + curpos.X + "," + curpos.Y + "," + curpos.Z); Console.WriteLine(" next" + nextpos.X + "," + nextpos.Y + "," + nextpos.Z); #endif SystemClass bestsystem; Point3D bestposition; FindBestSystem(curpos, nextpos, maxrange, maxrange - 0.5, routemethod, out bestsystem, out bestposition); string sysname = "WAYPOINT"; double deltafromwaypoint = 0; double deviation = 0; if (bestsystem != null) { deltafromwaypoint = Point3D.DistanceBetween(bestposition, nextpos); // how much in error deviation = Point3D.DistanceBetween(curpos.InterceptPoint(nextpos, bestposition), bestposition); nextpos = bestposition; sysname = bestsystem.name; routeSystems.Add(bestsystem); } AppendText(string.Format("{0,-40}{1,3} Dist:{2,8:0.00}ly @ {3,9:0.00},{4,8:0.00},{5,9:0.00} WPd:{6,8:0.00}ly Dev:{7,8:0.00}ly" + Environment.NewLine, sysname, jump, Point3D.DistanceBetween(curpos, nextpos), nextpos.X, nextpos.Y, nextpos.Z, deltafromwaypoint, deviation)); actualdistance += Point3D.DistanceBetween(curpos, nextpos); curpos = nextpos; jump++; } while (true); routeSystems.Add(SystemData.GetSystem(textBox_To.Text)); actualdistance += Point3D.DistanceBetween(curpos, coordsto); AppendText(string.Format("{0,-40}{1,3} Dist:{2,8:0.00}ly @ {3,9:0.00},{4,8:0.00},{5,9:0.00}" + Environment.NewLine, tosys, jump, Point3D.DistanceBetween(curpos, coordsto), coordsto.X, coordsto.Y, coordsto.Z)); AppendText(string.Format(Environment.NewLine + "Straight Line Distance {0,8:0.00}ly vs Travelled Distance {1,8:0.00}ly" + Environment.NewLine, traveldistance, actualdistance)); }