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;
            }
        }