public ExplodingMesh(MeshGeometry3D inputMesh, Point3D hitpos) { var mesh = MeshGeometryHelper.NoSharedVertices(inputMesh); double cx, cy, cz; cx = cy = cz = 0; for (int i = 0; i < mesh.Positions.Count; i++) { cx += mesh.Positions[i].X; cy += mesh.Positions[i].Y; cz += mesh.Positions[i].Z; } int n = mesh.Positions.Count; var center = new Point3D(cx / n, cy / n, cz / n); integrator = new VerletIntegrator(); integrator.Resize(mesh.Positions.Count); var r = new Random(); for (int i = 0; i < mesh.Positions.Count; i++) { var delta = mesh.Positions[i] - center; delta.Normalize(); integrator.Positions[i] = mesh.Positions[i] + delta * (1 + r.NextDouble() * 2); integrator.Positions0[i] = mesh.Positions[i]; integrator.Accelerations[i] = new Vector3D(0, 0, -1000); integrator.InverseMass[i] = 0.01; } integrator.CreateConstraintsByMesh(mesh, 0.7); integrator.AddFloor(0.3); this.Mesh = mesh; watch.Start(); }
public Flag(string image) { Mesh = new MeshGeometry3D(); Material = MaterialHelper.CreateImageMaterial(image); Damping = 0.98; integrator = new VerletIntegrator() { Iterations = 4, Damping = this.Damping }; WindSpeed = 6; WindDirection = 180; PoleHeight = 12; Height = 3; Length = 4; Mass = 0.8; }
public MainViewModel(MainWindow mainWindow) { // TODO: Complete member initialization this.mainWindow = mainWindow; Model3DGroup modelGroup = new Model3DGroup(); TubeVisual3D tube1 = GenerateTube(); RectangleVisual3D rectangle = GenerateRectangle(); SphereVisual3D sphere = new SphereVisual3D() { Center = new Point3D(1.5, 2.5, -0.7), Radius = 2 }; //modelGroup.Children.Add(tube1.Model); //modelGroup.Children.Add(rectangle.Model); //modelGroup.Children.Add(sphere.Model); /* * * Point3D point; * Point3D point2; * Point3D point3; * Point3D point4; * AddElementsPart2(modelGroup, out point, out point2, out point3, out point4); * * * TubeVisual3D path = new TubeVisual3D() * { * Path = new Point3DCollection(new List<Point3D>(){ * point + new Vector3D(0, 0, 20), * point2 + new Vector3D(0, 0, 19), * point3 + new Vector3D(0, 0, 18), * point4 + new Vector3D(0, 0, 17) * }), * Diameter = 0.5, * ThetaDiv = 20, * IsPathClosed = false, * Fill = Brushes.Green * //Fill = new Brush() { Colors.Blue} * }; * * modelGroup.Children.Add(path.Content); * */ //AddSolidBox(modelGroup); //AddRevolved(modelGroup); HelixVisual3D helixItem = new HelixVisual3D(); helixItem.Fill = new SolidColorBrush(Colors.Violet); helixItem.Origin = new Point3D(0, 0, -0.45); helixItem.Diameter = 0.1; helixItem.Turns = 2; helixItem.Length = 0.9; helixItem.Radius = 0.35; //modelGroup.Children.Add(helixItem.Content); //modelGroup.Children.Add(box.Content); //<helix:HelixVisual3D //Origin="0 0 -0.45" //Diameter="0.1" //Turns="2" //Length="0.9" //Radius="0.35" //Fill="Violet" //Visible="{Binding IsChecked, ElementName=HelixVisible}"/> numberOfPoints = 100; // wireLines = new WireLines { Color = Colors.Black, Thickness = 3, }; Points = new Point3DCollection(GeneratePoints(numberOfPoints, 7000 * 0.001)); //wireLines.Lines = Points; //modelGroup.Children.Add(wireLines.Content); var y0 = 0d; var theta = Math.PI / 180 * 30; var roofBuilder = new MeshBuilder(false, false); var y1 = y0 + Math.Tan(theta) * 5 / 2; var p0 = new Point(0, y1); var p1 = new Point(5 / 2 + 0.2 * Math.Cos(theta), y0 - 0.2 * Math.Sin(theta)); var p2 = new Point(p1.X + 0.1 * Math.Sin(theta), p1.Y + 0.1 * Math.Cos(theta)); var p3 = new Point(0, y1 + 0.1 / Math.Cos(theta)); var p4 = new Point(-p2.X, p2.Y); var p5 = new Point(-p1.X, p1.Y); IList <Point> roofSection = new List <Point>() { p0, p1, p1, p2, p2, p3, p3, p4, p4, p5, p5, p0 }; var roofAxisX = new Vector3D(0, -1, 0); var roofAxisY = new Vector3D(0, 0, 1); var roofOrigin = new Point3D(1, 1, 1); //roofBuilder.AddPolygon(roofSection, roofAxisX, roofAxisY, roofOrigin); Point3DCollection simplePoly = new System.Windows.Media.Media3D.Point3DCollection( new List <Point3D>() { new Point3D(1, 0, 1), new Point3D(1, 1, 1), new Point3D(0, 1, 1), new Point3D(0, 0, 1), /* * //new Point3D(1,0, 1), * new Point3D(0,0, -1), * new Point3D(1,0, -1), * new Point3D(1,1, -1), * new Point3D(0,1, -1), * //new Point3D(1,0, 1), * new Point3D(0,0, -1), * new Point3D(0,0, 1), */ } ); roofBuilder.AddPolygon(simplePoly); //roofBuilder.AddRectangularMesh() GeometryModel3D roofGeometry = new GeometryModel3D(); //var material = MaterialHelper.CreateMaterial(Brushes.LightBlue, ambient: 77, freeze: false); var material = MaterialHelper.CreateMaterial(Colors.LawnGreen, 0.25); roofGeometry.Material = material; roofGeometry.BackMaterial = material; roofGeometry.Geometry = roofBuilder.ToMesh(true); modelGroup.Children.Add(roofGeometry); //ScreenSpaceLines3D Wireframe = new ScreenSpaceLines3D(); //Wireframe.Thickness = 2; //Wireframe.Color = Colors.Black; //Wireframe.Points = simplePoly; ////Wireframe.MakeWireframe(roofGeometry); //modelGroup.Children.Add(Wireframe.Content); var Mesh = new MeshGeometry3D(); //var Material = MaterialHelper.CreateImageMaterial(image); var Damping = 0.98; var integrator = new VerletIntegrator() { Iterations = 4, Damping = 0.98 }; var WindSpeed = 6; var WindDirection = 180; var PoleHeight = 12; var Height = 3; var Length = 4; var Mass = 0.8; var m = 48; var n = 32; var pts = new Point3D[n, m]; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { pts[i, j] = new Point3D(-Length * j / (m - 1), 0, PoleHeight - Height * i / (n - 1)); } } var pts2 = new Point3D[2, 4]; for (int i = 0; i < 2; i++) { for (int j = 0; j < 4; j++) { double x = 0, z = 0; if (i == 0) { x = 0; z = 0; } if (i == 1) { x = 1; z = 0; } if (i == 2) { x = 1; z = 1; } if (i == 3) { x = 0; z = 1; } pts[i, j] = new Point3D(x, i, PoleHeight - z); } } var mb = new MeshBuilder(false, true); //mb.AddRectangularMesh(pts, null, false, false); mb.AddRectangularMesh(pts, null, false, false); Mesh = mb.ToMesh(); var gradientMaterial = CreateGradientBrushMaterial(); gradientMaterial = MaterialHelper.CreateMaterial(Colors.LightBlue, 0.25); GeometryModel3D meshGeometry = new GeometryModel3D(); meshGeometry.Geometry = Mesh; meshGeometry.Material = gradientMaterial; meshGeometry.BackMaterial = gradientMaterial; modelGroup.Children.Add(meshGeometry); this.Model = modelGroup; }