private void OnBerechnenClick(object sender, RoutedEventArgs e) { try { var winkel = Winkel.FromDeg(double.Parse(AbsprungWinkelTextBox.Text)); var geschwindigkeit = Geschwindigkeit.FromKilometerProStunde(double.Parse(AbsprungGeschwindigkeitTextBox.Text)); var schanzenHöhe = Länge.FromCentimeter(double.Parse(AbsprungHöheTextBox.Text)); var schanze = Schanze.Create(schanzenHöhe, winkel); var flugbahn = Flugbahn.Create(schanze, geschwindigkeit); var setting = SettingViewModel.Create(schanze, flugbahn); _viewModel.Settings.Add(setting); _viewModel.SelectedSetting = setting; } catch (Exception) { // TODO Fehler visualisieren } }
public SettingViewModel(Schanze schanze = null, Flugbahn flugbahn = null) { //if (DesignerProperties.GetIsInDesignMode(new DependencyObject())) { // var winkel = Winkel.FromDeg(22); // var geschwindigkeit = Geschwindigkeit.FromKilometerProStunde(20); // var schanzenHöhe = Länge.FromCentimeter(16); // schanze = Berechnung.Schanze.Create(schanzenHöhe, winkel); // flugbahn = Berechnung.Flugbahn.Create(schanze, geschwindigkeit); // RenderMetrics = true; //} _orgSchanze = schanze; _orgFlugbahn = flugbahn; _renderScene = true; Rescale(); }
public static SettingViewModel Create(Schanze schanze, Flugbahn flugbahn) { var viewModel = new SettingViewModel(schanze, flugbahn); return(viewModel); }
public FlugbahnViewModel(Schanze schanze, Flugbahn flugbahn) { _flugbahn = flugbahn ?? throw new ArgumentNullException(nameof(flugbahn)); var punkte = new List <Point>(); var segments = 100; var step = (int)flugbahn.SprungWeite.Meter / segments; // Horizontaler Offset, wenn Schanze vorhanden var x0 = schanze?.Länge ?? Länge.Empty; // Absprungpunkt var x = Länge.Empty; var y = flugbahn.Y(x); StartPunkt = ToPoint(x0 + x, y); punkte.Add(StartPunkt); // Bahnpunkte for (int i = 1; i <= segments; i++) { x = Länge.FromMeter(i * step); y = flugbahn.Y(x); punkte.Add(ToPoint(x0 + x, y)); } // Aufprallpunkt x = flugbahn.SprungWeite; y = flugbahn.Y(x); EndPunkt = ToPoint(x0 + x, y); punkte.Add(EndPunkt); Punkte = new PointCollection(punkte); Scheitelpunkt = ToPoint(x0 + flugbahn.ScheitelpunktX, flugbahn.ScheitelpunktY); var winkelSize = flugbahn.Scale * 0.2; var tangentenLänge = flugbahn.Scale; // Absprung var m = Matrix.Identity; m.Rotate(flugbahn.AbsprungWinkel.Deg); var v = new Vector(tangentenLänge, 0); AbsprungTangentenKontrollpunkt1 = StartPunkt + v; AbsprungTangentenKontrollpunkt2 = StartPunkt + v * m; v = new Vector(winkelSize, 0); AbsprungWinkelPunkt1 = StartPunkt + v; AbsprungWinkelPunkt2 = StartPunkt + v * m; AbsprungWinkelSize = new Size(winkelSize, winkelSize); // Aufprall m = Matrix.Identity; m.Rotate(-flugbahn.AufprallWinkel.Deg); v = new Vector(-tangentenLänge, 0); AufprallTangentenKontrollpunkt1 = EndPunkt + v; AufprallTangentenKontrollpunkt2 = EndPunkt + v * m; v = new Vector(-winkelSize, 0); AufprallWinkelPunkt1 = EndPunkt + v; AufprallWinkelPunkt2 = EndPunkt + v * m; AufprallWinkelSize = new Size(winkelSize, winkelSize); }