public void Dragging(LocationProbe probe) { if (rbHorizon.Checked) { UpdateHorizon(probe); } }
public void StopDragging(LocationProbe probe) { if (rbLightcurve.Checked) { UpdateLightCurve(probe); } }
private Point?GetRequest(LocationProbe probe) { lock (_requestProbe) { var index = _requestProbe.IndexOf(probe); return(index < 0 ? null : (Point?)_requestPoint[index]); } }
public LocationProbe NewLocationProbe() { var probe = new LocationProbe { Color = AllocateColor(), Text = "<Click on probe location in map>" }; Add(probe); return(probe); }
private void DeleteRequeest(LocationProbe probe) { lock (_requestProbe) { var index = _requestProbe.IndexOf(probe); if (index >= 0) { _requestProbe.RemoveAt(index); _requestPoint.RemoveAt(index); } } }
private void UpdateHorizon(LocationProbe probe) { AddRequest(probe); if (_updateHorizonTask != null) { return; } _updateHorizonTask = Task.Run(() => { restart: Point? id; while ((id = GetRequestedId(probe)).HasValue && !LunarHorizon.Singleton.PatchCache.ContainsKey(id.Value)) { LunarHorizon.Singleton.GetPatch(id.Value); } if (!id.HasValue) { return; } var patch = LunarHorizon.Singleton.GetPatch(id.Value); if (patch == null) { return; } var loc = GetRequest(probe); if (!loc.HasValue) { return; } var pt = new Point(loc.Value.X - patch.Id.X * TerrainPatch.DefaultSize, loc.Value.Y - patch.Id.Y * TerrainPatch.DefaultSize); if (pt.X < 0 || pt.X >= TerrainPatch.DefaultSize || pt.Y < 0 || pt.Y >= TerrainPatch.DefaultSize) { goto restart; } var horizon = patch.GetHorizon(pt.Y, pt.X); lock (_horizonCache) { _horizonCache[probe] = GetHorizonCurve(horizon, probe.Color); _sunCache[probe] = GetSunCurve(patch, pt, LunarHorizon.Singleton.MapView.SunVector, probe.Color); } var loc2 = GetRequest(probe); if (loc2.HasValue && loc2.Value != loc.Value) { goto restart; } _updateHorizonTask = null; UpdatePlots(); }); }
private void UpdateLightCurve(LocationProbe probe) { lock (this) { if (_lightCurveGenerator == null) { _lightCurveGenerator = new LightCurveApprox(); } var pt = probe.Location.ToPoint(); var points = _lightCurveGenerator.GetLightCurve(pt.Y, pt.X, new DateTime(2028, 1, 1), new DateTime(2029, 1, 1), new TimeSpan(2, 0, 0)); var curve = new LineItem(null, points, probe.Color, SymbolType.None); _lightCurveCache[probe] = curve; } UpdatePlots(); }
public void Add(LocationProbe probe) { var item = new ListViewItem { Text = probe.Text, Tag = probe, BackColor = probe.Color }; lvProbes.Items.Add(item); if (!(Layer is LocationProbeMapLayer layer)) { return; } layer.Probes.Add(probe); if (layer == LunarHorizon.Singleton.GetSelectedLayer()) { LunarHorizon.Singleton.MapView.Invalidate(); } }
private void AddRequest(LocationProbe probe) { lock (_requestProbe) { var pt = new Point((int)probe.Location.X, (int)probe.Location.Y); var index = _requestProbe.IndexOf(probe); if (index < 0) { _requestProbe.Add(probe); _requestPoint.Add(pt); } else { _requestPoint[index] = pt; } } }
private Point?GetRequestedId(LocationProbe probe) { var pt = GetRequest(probe); return(pt.HasValue ? (Point?)TerrainPatch.LineSampleToId(pt.Value) : null); }