private bool TryFindCloseBouy(Point p, ref Bouy closest) { List <Bouy> bouys = new List <Bouy>(); foreach (object o in marksLB.Items) { bouys.AddRange(((Mark)o).Bouys); } double maximumDistance = 10.0; double closestDistance = maximumDistance; Bouy closestBouy = null; foreach (Bouy b in bouys) { Point onScreen = CoordinatesToScreen(new CoordinatePoint(b.Latitude, b.Longitude, 0)); double distance = TwoDimensionalDistance(p.X, p.Y, onScreen.X, onScreen.Y); if (distance < closestDistance) { closestDistance = distance; closestBouy = b; } } if (closestBouy != null) { closest = closestBouy; return(true); } else { closest = null; return(false); } }
private void markTypeCB_SelectedIndexChanged(object sender, EventArgs e) { SelectedMark.MarkType = (string)markTypeCB.SelectedItem; if (SelectedMark.MarkType == "Gate") { if (SelectedMark.Bouys.Count < 2) { while (SelectedMark.Bouys.Count < 2) { Bouy b = NewBouy(SelectedMark); b.Save(); } } } else if (SelectedMark.MarkType == "Mark") { if (SelectedMark.Bouys.Count > 1) { while (SelectedMark.Bouys.Count > 1) { SelectedMark.Bouys[SelectedMark.Bouys.Count - 1].Delete(); } } } SelectedMark.Save(); lakePNL.Invalidate(); }
private void lakePNL_MouseMove(object sender, MouseEventArgs e) { if (_mouseDown) { if (zoomInCB.Checked) { _zoomSecondPoint = new Point(e.X, e.Y); lakePNL.Invalidate(); } else if (SelectedMark != null && _selectedBouy != null) { Point mp = new Point(e.X, e.Y); CoordinatePoint cp = ScreenToCoordinates(mp); _selectedBouy.Longitude = cp.Longitude; _selectedBouy.Latitude = cp.Latitude; _selectedBouy.Save(); lakePNL.Invalidate(); mouseCoordsLBL.Text = _selectedBouy.Latitude.ToString() + " " + _selectedBouy.Longitude.ToString(); } } else if (!zoomInCB.Checked) { Bouy b = null; if (TryFindCloseBouy(new Point(e.X, e.Y), ref b)) { lakePNL.Cursor = Cursors.Hand; } else { lakePNL.Cursor = Cursors.Default; } } }
private Bouy NewBouy(Mark m) { CoordinatePoint bouyC = ScreenToCoordinates(new Point(lakePNL.Width / 2, lakePNL.Height / 2)); Bouy b = new Bouy(m, bouyC.Latitude, bouyC.Longitude); b.Save(); return(b); }
private void addBTN_Click(object sender, EventArgs e) { Mark m = new Mark("New Mark", "Mark", _course); m.Save(); double lakeWidth = _lake.West - _lake.East; double lakeHeight = _lake.North - _lake.South; Bouy b = NewBouy(m); marksLB.Items.Add(m); marksLB.SelectedIndex = marksLB.Items.Count - 1; }
private void FindClosestBouy(Point p) { Bouy b = null; if (TryFindCloseBouy(p, ref b)) { _selectedBouy = b; for (int i = 0; i < marksLB.Items.Count; i++) { if (((Mark)marksLB.Items[i]).Id == b.Mark.Id) { marksLB.SelectedIndex = i; } } } }
private void LoadSelectedMark() { if (SelectedMark != null) { editMarkGB.Enabled = true; removeBTN.Enabled = true; markNameTB.Text = SelectedMark.Name; markTypeCB.SelectedItem = SelectedMark.MarkType; mouseCoordsLBL.Text = SelectedMark.Bouys[0].Latitude.ToString() + " " + SelectedMark.Bouys[0].Longitude.ToString(); _selectedBouy = SelectedMark.Bouys[0]; lakePNL.Invalidate(); } else { editMarkGB.Enabled = false; removeBTN.Enabled = false; } }