public Spring(PlaneImage me, PlaneImage other, double dx, double dy) { this.me = me; this.other = other; this.dx = dx; this.dy = dy; }
public void delete(Plane plane) { if (plane.getCurrentState() != State.Destroyed) { return; } airspace.remove(plane); foreach (Runway runway in runwayList) { if (!runway.isFree() && runway.getPlane() == plane) { runway.takeOffCurrentPlane(); } } plane.hide(); if (plane == selectedPlane) { selectedPlane = null; } plane.setParent(null); plane = null; refreshInformationPanel(); refreshButtonPanel(); }
public void sendAway(Plane plane) { if (plane.getCurrentState() == State.InAir) { if (plane.getCurrentFuelLevel() < (plane.getMaxFuelLevel() / 2)) { NotificationManager.getInstance().addNotification("Samolot " + plane.getModelID() + " nie może zostać odesłany ze względu na małą ilość paliwa", NotificationType.Negative); } else { NotificationManager.getInstance().addNotification("Samolot " + plane.getModelID() + " opuszcza przestrzeń powietrzną nad lotniskiem", NotificationType.Positive); airspace.remove(plane); plane.hide(); if (plane == selectedPlane) { selectedPlane = null; } plane.setParent(null); plane = null; refreshInformationPanel(); refreshButtonPanel(); } } }
public void refreshPbSelectedIfSelected(PlaneImage samolot) { if (selectedPlane == samolot) { pbSelectedPlane.Parent = selectedPlane.getCurrentOnTop(); } }
public static void AddSpring(PlaneImage me, PlaneImage other, double from_x, double from_y, double to_x, double to_y) { double dx = (to_x - 0.5 * other.image_provider.GetImageD().width) - (from_x - 0.5 * me.image_provider.GetImageD().width); double dy = (to_y - 0.5 * other.image_provider.GetImageD().height) - (from_y - 0.5 * me.image_provider.GetImageD().height); LogPanel.Log($"dx={dx}, dy={dy}"); me.springs.Add(new Spring(me, other, -dx, -dy)); other.springs.Add(new Spring(other, me, dx, dy)); }
public void selectPlane(PlaneImage samolot) { selectedPlane = samolot; pbSelectedPlane.Parent = samolot.getCurrentOnTop(); pbSelectedPlane.Location = new Point(0, 0); if (samolot.isVisible()) { pbSelectedPlane.Visible = true; } refreshInformationPanel(); refreshButtonPanel(); }
async void StartSimulation() { int kase_self = System.Threading.Interlocked.Increment(ref kase); await Task.Run(() => { List <IPointsProvider> points_providers = source_image_panel.GetImages().Select(i => new ImageD_Providers.ImageD_Cache(i.ToImageD()) as IImageD_Provider).Select(i => new PointsProviders.MSOP_DescriptorVector(new PointsProviders.HarrisCornerDetector(i), new MatrixProviders.GrayScale(i)) as IPointsProvider).ToList(); List <IImageD_Provider> image_providers = source_image_panel.GetImages().Select((i, idx) => new ImageD_Providers.PlotPoints(new ImageD_Providers.ImageD_Cache(i.ToImageD()), points_providers[idx]) as IImageD_Provider).ToList(); var provider = new PlaneImages(image_providers, 1000, 600); image_container.Dispatcher.Invoke(() => image_container.Content = new ImageViewer(provider, false)); LogPanel.Log("searching features..."); provider.GetImageD(); LogPanel.Log("matching..."); var points = points_providers.Select(pp => pp.GetPoints().Select(ps => (ps as ImagePoint <PointsProviders.MSOP_DescriptorVector.Descriptor>)).ToList()).ToList(); for (int i = 0; i < points.Count; i++) { for (int j = i + 1; j < points.Count; j++) { List <ImagePoint <PointsProviders.MSOP_DescriptorVector.Descriptor> > p1s = points[i], p2s = points[j]; List <Tuple <double, double, double, double, double> > candidates = new List <Tuple <double, double, double, double, double> >(); foreach (var p1 in p1s) { if (p1.content.try_match(p2s, out ImagePoint p2)) { candidates.Add(Tuple.Create(p1.content.difference((p2 as ImagePoint <PointsProviders.MSOP_DescriptorVector.Descriptor>).content), p1.x, p1.y, p2.x, p2.y)); } } candidates.Sort((p1, p2) => p1.Item1.CompareTo(p2.Item1)); for (int k = 0; k < candidates.Count; k++) { var c = candidates[k]; PlaneImage.AddSpring(provider.images[i], provider.images[j], c.Item2, c.Item3, c.Item4, c.Item5); } } } LogPanel.Log("ok"); while (kase_self == kase) { provider.update_speed(0.1); provider.update_position(); provider.ResetSelf(); provider.GetImageD(); } }); }
public void refreshButtonPanel(PlaneImage currrentSelected) { hideAllButtons(); if (!(currrentSelected is Plane)) { return; } Plane currentSelectedPlane = (Plane)currrentSelected; State currentSelectedPlaneState = currentSelectedPlane.getCurrentState(); if (currentSelectedPlaneState == State.Fueling || currentSelectedPlaneState == State.TechnicalInspection || currentSelectedPlaneState == State.Loading || currentSelectedPlaneState == State.Unloading) { btnCancelOperation.Visible = true; } else if (currentSelectedPlaneState == State.Hangar) { btnTechnicalInspection.Visible = true; btnOnRunway.Visible = true; btnFuel.Visible = true; if (currentSelectedPlane.isTanked()) { btnFuel.BackColor = Color.YellowGreen; } else { btnFuel.BackColor = Color.White; } if (currentSelectedPlane.isAfterTechnicalInspection()) { btnTechnicalInspection.BackColor = Color.YellowGreen; } else { btnTechnicalInspection.BackColor = Color.White; } } else if (currentSelectedPlaneState == State.InAir) { btnLand.Visible = true; btnSendAway.Visible = true; } else if (currentSelectedPlaneState == State.OnRunwayBefTakeoff) { btnStartowanie.Visible = true; btnToHangar.Visible = true; btnUnload.Visible = true; } else if (currentSelectedPlaneState == State.OnRunwayAftLanding) { btnToHangar.Visible = true; btnUnload.Visible = true; } else if (currentSelectedPlaneState == State.Destroyed) { btnDelete.Visible = true; } }
public void ShowAll() { MapImage.ShowAll(); PlaneImage.ShowAll(); }
public void HideAll() { MapImage.HideAll(); PlaneImage.HideAll(); }