public void UpdateUi()
        {
            MainViewport.Children.Clear();

            //if (!this.IsLoaded)
            //    return;

            if (ModelToVisualize == null)
            {
                return;
            }


            if (ElementVisualThickness == 0)
            {
                ElementVisualThickness = GetSmartElementThichness();
            }

            if (TargetCombination == null)
            {
                return;
            }


            var elementsBuilder = new MeshBuilder(false, false);
            var forcesBuilder   = new MeshBuilder(false, false);

            var internalForces = GetLocalInternalForces();

            #region determining scale

            var max = 0.0;

            foreach (var internalForce in internalForces)
            {
                foreach (var point in internalForce)
                {
                    max = Math.Max(max, Math.Abs(point.Y));
                    max = Math.Max(max, Math.Abs(point.Z));
                }
            }

            var minElementLength = ModelToVisualize.Elements.Select(i => i.GetElementLength()).Where(i => i > 0).Min();

            var sc = 0.33 * minElementLength / max;

            foreach (var internalForce in internalForces)
            {
                for (var i = 0; i < internalForce.Length; i++)
                {
                    internalForce[i] = new Point(internalForce[i].X, internalForce[i].Y * sc, internalForce[i].Z * sc);
                }
            }


            #endregion

            #region Adding elements

            var c = ModelToVisualize.Elements.Count;

            for (var i = 0; i < c; i++)
            {
                var elm = ModelToVisualize.Elements[i];

                switch (elm.ElementType)
                {
                case ElementType.Undefined:
                    //throw new Exception();
                    break;

                case ElementType.FrameElement2Node:
                    AddFrameElement(elementsBuilder, elm as FrameElement2Node);
                    AddFrameElementLoad(forcesBuilder, elm as FrameElement2Node, internalForces[i]);
                    break;

                case ElementType.TrussElement2Noded:
                    AddTrussElement(elementsBuilder, elm as TrussElement2Node);
                    break;

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }



            #endregion



            var gradient = new LinearGradientBrush();

            gradient.GradientStops.Add(new GradientStop(Colors.Blue, 0));
            gradient.GradientStops.Add(new GradientStop(Colors.Cyan, 0.2));
            gradient.GradientStops.Add(new GradientStop(Colors.Green, 0.4));
            gradient.GradientStops.Add(new GradientStop(Colors.Yellow, 0.6));
            gradient.GradientStops.Add(new GradientStop(Colors.Red, 0.8));
            gradient.GradientStops.Add(new GradientStop(Colors.White, 1));


            var elmMsh = elementsBuilder.ToMesh(true);
            var frcMsh = forcesBuilder.ToMesh(true);

            var modelGroup = new Model3DGroup();

            var elmMat = MaterialHelper.CreateMaterial(gradient, null, null, 1, 0);
            var frcMat = MaterialHelper.CreateMaterial(gradient, null, null, 0.5, 0);

            var elmGeometry = new GeometryModel3D(elmMsh, elmMat)
            {
                BackMaterial = elmMat
            };
            var frcGeometry = new GeometryModel3D(frcMsh, frcMat)
            {
                BackMaterial = elmMat
            };



            modelGroup.Children.Add(elmGeometry);
            modelGroup.Children.Add(frcGeometry);

            var myModelVisual3D = new ModelVisual3D();
            myModelVisual3D.Content = modelGroup;
            MainViewport.Children.Add(myModelVisual3D);
            MainViewport.Children.Add(new DefaultLights());

            MainViewport.ZoomExtents();
        }
 private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
 {
     MainViewport.ZoomExtents();
 }