private void DarstellungMomente(int zeitIndex) { // Bestimmung des maximalen Biegemoments IEnumerable <AbstraktBalken> Beams() { foreach (var item in modell.Elemente) { if (item.Value is AbstraktBalken element) { yield return(element); } } } maxMomentZeit = 0; foreach (var element in Beams()) { element.ElementState = element.ComputeElementState(); if (element.ElementState.Length <= 2) { continue; } if (Math.Abs(element.ElementState[2]) > maxMomentZeit) { maxMomentZeit = Math.Abs(element.ElementState[2]); } if (Math.Abs(element.ElementState[5]) > maxMomentZeit) { maxMomentZeit = Math.Abs(element.ElementState[5]); } } // Momentendarstellung für alle Biegebalken zeichnen foreach (var element in Beams()) { if (element.ElementState.Length <= 2 || maxMoment == 0) { continue; } darstellung.Momente_Zeichnen(element, maxMoment, false); } var zeit = zeitIndex * dt; var maxText = "maximales absolutes Moment = " + maxMomentZeit.ToString("N0") + " nach Zeit = " + zeit.ToString("N2"); MaximalwertAnZeitschritt(maxText); }
private void BtnMomente_Click(object sender, RoutedEventArgs e) { double maxMoment = 0; if (normalkräfteAn) { foreach (Shape path in darstellung.NormalkraftListe) { VisualErgebnisse.Children.Remove(path); } normalkräfteAn = false; } if (querkräfteAn) { foreach (Shape path in darstellung.QuerkraftListe) { VisualErgebnisse.Children.Remove(path); } querkräfteAn = false; } if (!momenteAn) { // Bestimmung des maximalen Biegemoments IEnumerable <AbstraktBalken> Beams() { foreach (var item in modell.Elemente) { if (item.Value is AbstraktBalken beam) { yield return(beam); } } } foreach (var beam in Beams()) { beam.ElementState = beam.ComputeElementState(); if (beam.ElementState.Length <= 2) { continue; } if (Math.Abs(beam.ElementState[2]) > maxMoment) { maxMoment = Math.Abs(beam.ElementState[2]); } if (Math.Abs(beam.ElementState[5]) > maxMoment) { maxMoment = Math.Abs(beam.ElementState[5]); } } // Anteil lokaler Momentenverteilung infolge Punkt-/Linienlast AbstraktBalken lastBalken; double lokalesMoment; IEnumerable <PunktLast> PunktLasten() { foreach (var item in modell.PunktLasten) { var last = (PunktLast)item.Value; if (modell.Elemente.TryGetValue(last.ElementId, out element)) { yield return(last); } } } foreach (var last in PunktLasten()) { lastBalken = (AbstraktBalken)element; lokalesMoment = lastBalken.ElementState[2] + lastBalken.ElementState[1] * last.Offset * lastBalken.length; if (Math.Abs(lokalesMoment) > maxMoment) { maxMoment = Math.Abs(lokalesMoment); } } IEnumerable <LinienLast> LinienLasten() { foreach (var item in modell.ElementLasten) { //if (item.Value is LinienLast linienLast && item.Value.ElementId == element.ElementId) var last = (LinienLast)item.Value; if (modell.Elemente.TryGetValue(last.ElementId, out element)) { yield return(last); } } } foreach (var linienLast in LinienLasten()) { //if (modell.Elemente.TryGetValue(linienLast.ElementId, out element)) { } lastBalken = (AbstraktBalken)element; var stabEndkräfte = lastBalken.ComputeElementState(); lokalesMoment = stabEndkräfte[2] + stabEndkräfte[1] * lastBalken.length / 2 + linienLast.Intensity[1] * lastBalken.length / 2 * lastBalken.length / 4; if (Math.Abs(lokalesMoment) > maxMoment) { maxMoment = Math.Abs(lokalesMoment); } } // Skalierung der Momentendarstellung und Momentenverteilung für alle Biegebalken zeichnen foreach (var beam in Beams()) { var elementlast = false; beam.ElementState = beam.ComputeElementState(); if (beam.ElementState.Length <= 2) { continue; } if (Math.Abs(beam.ElementState[1] + beam.ElementState[4]) > double.Epsilon) { elementlast = true; } darstellung.Momente_Zeichnen(beam, maxMoment, elementlast); } momenteAn = true; } else { foreach (Shape path in darstellung.MomenteListe) { VisualErgebnisse.Children.Remove(path); } momenteAn = false; } }