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