private void CreateGeometry() { var builder = new MeshBuilder(); builder.AddSphere(new Point3D(0, 0, 0), Diameter/2, ThetaDiv, PhiDiv); _sphere = builder.ToMesh(); _sphere.Freeze(); }
// Add all cubes to a ModelVisual3D, reuse geometry but create new visual for each cube - this is slow /* GeometryModel3D AddGeometrySeparate(IEnumerable<Point3D> centers, double L) { var mv = new ModelVisual3D(); var cubit = new CubeVisual3D { SideLength = L * 0.95, Fill = Brushes.Gold }; var cuboidGeometry = cubit.Model.Geometry as MeshGeometry3D; var r = new Random(); foreach (var center in centers) { var tg = new Transform3DGroup(); tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(1, 0, 0), (r.NextDouble() - 0.5) * 10))); tg.Children.Add(new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0, 1, 0), (r.NextDouble() - 0.5) * 10))); tg.Children.Add(new TranslateTransform3D(center.ToVector3D())); var c = new ModelVisual3D { Content = new GeometryModel3D { Geometry = cuboidGeometry, Material = cubit.Material, Transform = tg } }; mv.Children.Add(c); } return mv; }*/ // All cubes in one GeometryModel - much faster GeometryModel3D AddGeometry(IEnumerable<Point3D> centers, double L) { var w = new Stopwatch(); w.Start(); /* var geometry = new MeshGeometry3D(); foreach (var center in centers) { MeshGeometryHelper.AddBox(geometry,center, L, L, L); } */ var builder = new MeshBuilder(); foreach (var center in centers) { builder.AddBox(center, L, L, L); } var geometry = builder.ToMesh(); geometry.Freeze(); Trace.WriteLine(Level + ": " + w.ElapsedMilliseconds + " ms"); var mv = new GeometryModel3D { Geometry = geometry, Material = MaterialHelper.CreateMaterial(Brushes.Gold) }; TriangleCount = geometry.TriangleIndices.Count / 3; return mv; }
static Predator() { var egg = new MeshBuilder(); egg.AddPyramid(new Point3D(0, 0, 0), 0.2, 0.4); eggGeometry = egg.ToMesh(); var child = new MeshBuilder(); child.AddBox(new Point3D(0, 0, 0.5), 1, 1, 1); child.AddSphere(new Point3D(0.2, 0.2, 1), 0.2, 12, 24); child.AddSphere(new Point3D(0.2, -0.2, 1), 0.2, 12, 24); childGeometry = child.ToMesh(); var creature = new MeshBuilder(); creature.AddBox(new Point3D(0, 0, 0.5), 1, 1, 1); creature.AddCone(new Point3D(0.2, 0.2, 1), new Vector3D(0, 0, 1), 0.16, 0.04, 0.3, false, true, 12); creature.AddCone(new Point3D(0.2, -0.2, 1), new Vector3D(0, 0, 1), 0.16, 0.04, 0.3, false, true, 12); creatureGeometry = creature.ToMesh(); var coffin = new MeshBuilder(); coffin.AddCylinder(new Point3D(0, 0, 0), new Point3D(0, 0, 0.25), 1, 12); deadGeometry = coffin.ToMesh(); maleMaterial = MaterialHelper.CreateMaterial(Brushes.Navy); femaleMaterial = MaterialHelper.CreateMaterial(Brushes.Violet); eggMaterial = MaterialHelper.CreateMaterial(Brushes.AntiqueWhite); deadMaterial = MaterialHelper.CreateMaterial(Brushes.Black); }
void CreateGeometry() { double r = Diameter / 2; double l = HeadLength * Diameter; // arrowhead var pc = new PointCollection(); pc.Add(new Point(-l, r)); pc.Add(new Point(-l, r * 2)); pc.Add(new Point(0, 0)); var headBuilder = new MeshBuilder(); headBuilder.AddRevolvedGeometry(pc, new Point3D(0, 0, 0), new Vector3D(0, 0, 1), ThetaDiv); _head = headBuilder.ToMesh(); _head.Freeze(); // body pc = new PointCollection(); pc.Add(new Point(0, 0)); pc.Add(new Point(0, r)); pc.Add(new Point(1, r)); var bodyBuilder = new MeshBuilder(); bodyBuilder.AddRevolvedGeometry(pc, new Point3D(0, 0, 0), new Vector3D(0, 0, 1), ThetaDiv); _body = bodyBuilder.ToMesh(); _body.Freeze(); }
static Creature() { var egg = new MeshBuilder(); egg.AddSphere(new Point3D(0, 0, 0.2), 0.2, 24, 12); eggGeometry = egg.ToMesh(); var child = new MeshBuilder(); child.AddSphere(new Point3D(0, 0, 1), 1, 24, 12); child.AddSphere(new Point3D(1, 0, 1), 0.5, 24, 12); child.AddSphere(new Point3D(1.5, 0.2, 1), 0.1, 24, 12); child.AddSphere(new Point3D(1.5, -0.2, 1), 0.1, 24, 12); childGeometry = child.ToMesh(); var creature = new MeshBuilder(); creature.AddSphere(new Point3D(0, 0, 1), 1, 24, 12); creature.AddSphere(new Point3D(0, 0, 2), 0.5, 24, 12); creature.AddSphere(new Point3D(0.5, 0.2, 2), 0.1, 24, 12); creature.AddSphere(new Point3D(0.5, -0.2, 2), 0.1, 24, 12); creatureGeometry = creature.ToMesh(); var coffin = new MeshBuilder(); coffin.AddBox(new Point3D(0, 0, 0.25), 1, 1, 1); deadGeometry = coffin.ToMesh(); maleMaterial = MaterialHelper.CreateMaterial(Brushes.Blue); femaleMaterial = MaterialHelper.CreateMaterial(Brushes.IndianRed); eggMaterial = MaterialHelper.CreateMaterial(Brushes.AntiqueWhite); deadMaterial = MaterialHelper.CreateMaterial(Brushes.Black); }
private void CreateModel() { const double dt = 0.1; const int nSteps = 100; var mb = new MeshBuilder(true, true); for (double y0 = -5; y0 <= 5; y0 += 0.25) { var p0 = new Point(-3, y0); Point[] pts = Solve(Velocity, p0, dt, nSteps); var vel = new double[pts.Length]; var diam = new double[pts.Length]; int i = 0; var pts3d = new Point3D[pts.Length]; double vmax = 0; foreach (Point pt in pts) { pts3d[i] = new Point3D(pt.X, pt.Y, 0); double v = Velocity(pt.X, pt.Y).Length; if (v > vmax) vmax = v; vel[i++] = v; } for (int j = 0; j < vel.Length; j++) vel[j] /= vmax; for (int j = 0; j < vel.Length; j++) diam[j] = 0.075; mb.AddTube(pts3d, vel, diam, 12, false); } StreamLinesModel = new GeometryModel3D(); StreamLinesModel.Geometry = mb.ToMesh(); StreamLinesModel.Material = Materials.Hue; StreamLinesModel.BackMaterial = Materials.Hue; }
public static Geometry3D CreateUnitCubeGeometry() { var mb = new MeshBuilder(); mb.AddBox(new Point3D(0, 0, 0), 1, 1, 1); var mesh = mb.ToMesh(); mesh.Freeze(); return mesh; }
private void CreateModel() { var points = new Point3DCollection(); var edges = new Int32Collection(); var triangles = new Int32Collection(); switch (CurrentModelType) { case ModelTypes.StellatedOctahedron: case ModelTypes.Tetrahedron: points.Add(+1, +1, +1); points.Add(-1, -1, 1); points.Add(-1, +1, -1); points.Add(+1, -1, -1); edges.Add(0, 1, 1, 2, 2, 0, 0, 3, 1, 3, 2, 3); triangles.Add(0, 1, 2, 0, 3, 1, 1, 3, 2, 2, 3, 0); break; } switch (CurrentModelType) { case ModelTypes.StellatedOctahedron: // http://en.wikipedia.org/wiki/Compound_of_two_tetrahedra points.Add(-1, +1, +1); points.Add(1, -1, 1); points.Add(1, +1, -1); points.Add(-1, -1, -1); edges.Add(4, 5, 5, 6, 6, 4, 4, 7, 5, 7, 6, 7); triangles.Add(4, 5, 6, 4, 7, 5, 5, 7, 6, 6, 7, 4); break; } var m = new Model3DGroup(); // Add the nodes var gm = new MeshBuilder(); foreach (var p in points) { gm.AddSphere(p, 0.1); } m.Children.Add(new GeometryModel3D(gm.ToMesh(), Materials.Gold)); // Add the triangles var tm = new MeshBuilder(); for (int i = 0; i < triangles.Count; i += 3) { tm.AddTriangle(points[triangles[i]], points[triangles[i + 1]], points[triangles[i + 2]]); } m.Children.Add(new GeometryModel3D(tm.ToMesh(), Materials.Red) { BackMaterial = Materials.Blue }); // Add the edges var em = new MeshBuilder(); for (int i = 0; i < edges.Count; i += 2) { em.AddCylinder(points[edges[i]], points[edges[i + 1]], 0.08, 10); } m.Children.Add(new GeometryModel3D(em.ToMesh(), Materials.Gray)); Model = m; }
public DemoElement3D() { var gm = new GeometryModel3D(); var mb = new MeshBuilder(); mb.AddSphere(new Point3D(0, 0, 0), 2, 100, 50); gm.Geometry = mb.ToMesh(); gm.Material = Materials.Blue; Visual3DModel = gm; }
protected override MeshGeometry3D Tessellate() { var b = new MeshBuilder(); b.AddCubeFace(Center, new Vector3D(-1, 0, 0), new Vector3D(0, 0, 1), Length, Width, Height); b.AddCubeFace(Center, new Vector3D(1, 0, 0), new Vector3D(0, 0, -1), Length, Width, Height); b.AddCubeFace(Center, new Vector3D(0, -1, 0), new Vector3D(0, 0, 1), Width, Length, Height); b.AddCubeFace(Center, new Vector3D(0, 1, 0), new Vector3D(0, 0, -1), Width, Length, Height); if (TopFace) b.AddCubeFace(Center, new Vector3D(0, 0, 1), new Vector3D(0, -1, 0), Height, Length, Width); if (BottomFace) b.AddCubeFace(Center, new Vector3D(0, 0, -1), new Vector3D(0, 1, 0), Height, Length, Width); return b.ToMesh(); }
private ModelVisual3D CreateDice() { var diceMesh = new MeshBuilder(); diceMesh.AddBox(new Point3D(0, 0, 0), 1, 1, 1); for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) for (int k = 0; k < 2; k++) { var points = new List<Point3D>(); diceMesh.ChamferCorner(new Point3D(i - 0.5, j - 0.5, k - 0.5), 0.1, 1e-6, points); //foreach (var p in points) // b.ChamferCorner(p, 0.03); } return new ModelVisual3D { Content = new GeometryModel3D { Geometry = diceMesh.ToMesh(), Material = Materials.White } }; }
void CreateGeometry() { double r = Diameter / 2; var pc = new PointCollection(); pc.Add(new Point(0, 0)); pc.Add(new Point(0, r)); pc.Add(new Point(1, r)); pc.Add(new Point(1, 0)); var builder = new MeshBuilder(); builder.AddRevolvedGeometry(pc, new Point3D(0, 0, 0), new Vector3D(0, 0, 1), ThetaDiv); _tube= builder.ToMesh(); _tube.Freeze(); }
public override GeometryModel3D Generate() { var mesh = new MeshBuilder(); AddBranch(mesh, new Point3D(0,0,0), UpVector, 0); var mv = new GeometryModel3D { Geometry = mesh.ToMesh(), Material = mat, BackMaterial = mat }; TriangleCount = mesh.TriangleIndices.Count / 3; return mv; }
public void Initialize(uint xRes, uint yRes) { _xRes = xRes; _yRes = yRes; _pointModels = new PointModel[_xRes, _yRes]; var material = MaterialHelper.CreateMaterial(Colors.MediumPurple); Model3DGroup group = new Model3DGroup(); for (int y = 0; y < _yRes; y++) { var mb = new MeshBuilder(); for (int x = 0; x < _xRes; x++) { mb.AddBox(new Point3D(x, y, 0), 1, 1, 1); /* var model = new PointModel(); model.Model = new GeometryModel3D(CreateUnitCubeGeometry(), material); model.TranslateTransform = new TranslateTransform3D(); model.ScaleTransform = new ScaleTransform3D(); Transform3DGroup tg = new Transform3DGroup(); tg.Children.Add(model.TranslateTransform); tg.Children.Add(model.ScaleTransform); model.Model.Transform = tg; group.Children.Add(model.Model); _pointModels[x, y] = model; */ } var model = new GeometryModel3D(mb.ToMesh(), material); group.Children.Add(model); } this.Content = group; /* X = (u - 320) * depth_md_[k] * pixel_size_ * 0.001 / F_; Y = (v - 240) * depth_md_[k] * pixel_size_ * 0.001 / F_; Z = depth_md_[k] * 0.001; // from mm in meters! */ }
GeometryModel3D AddGeometry(IEnumerable<Point3D> centers, double l) { var builder = new MeshBuilder(); foreach (var center in centers) { builder.AddPyramid(center, l, l); } var mv = new GeometryModel3D { Geometry = builder.ToMesh(true), Material = MaterialHelper.CreateMaterial(Brushes.Gold) }; TriangleCount = builder.TriangleIndices.Count / 3; return mv; }
public MainWindow() { InitializeComponent(); var c = new ContainerUIElement3D(); var e = new ModelUIElement3D(); var gm = new GeometryModel3D(); var mb = new MeshBuilder(); mb.AddSphere(new Point3D(0, 0, 0), 2, 100, 50); gm.Geometry = mb.ToMesh(); gm.Material = Materials.Red; e.Model = gm; e.Transform = new TranslateTransform3D(5, 0, 0); e.MouseDown += (sender, args) => gm.Material = Materials.Yellow; c.Children.Add(e); view1.Children.Add(c); //e.Visibility = Visibility.Hidden; //this.Dispatcher.BeginInvoke(DispatcherPriority.Send, new ThreadStart(delegate //{ // e.Visibility = Visibility.Visible; //})); }
protected override MeshGeometry3D Tessellate() { var builder = new MeshBuilder(true, true); builder.AddSphere(Center, Radius, ThetaDiv, PhiDiv); return builder.ToMesh(); }
protected override MeshGeometry3D Tessellate() { var builder = new MeshBuilder(); builder.AddQuad(Point1, Point2, Point3, Point4, new Point(0, 1), new Point(1, 1), new Point(1, 0), new Point(0, 0)); return builder.ToMesh(); }
private GeometryModel3D Box(double width, double length, double height) { var model = new GeometryModel3D(); model.SetValue(FrameworkElement.NameProperty, "box"); var mb = new MeshBuilder(); mb.AddBox(new Point3D(0, 0, height*0.5), width, length, height); model.Geometry = mb.ToMesh(); model.Material = material; return model; }
public static ModelVisual3D Representation3D(this XYPolygon Poly, IXYPoint refpoint, double height) { MeshBuilder mb = new MeshBuilder(); var pts = new Point3DCollection(); foreach (var p in Poly.Points) { pts.Add(new Point3D(refpoint.X - p.X, refpoint.Y - p.Y, height)); } // POLYGONS (flat and convex) var poly3D = new Polygon3D(pts); // Transform the polygon to 2D var poly2D = poly3D.Flatten(); // Triangulate var tri = poly2D.Triangulate(); if (tri != null) { // Add the triangle indices with the 3D points mb.Append(pts, tri); } var m = MaterialHelper.CreateMaterial(Colors.DimGray, 0.5); var mv3D = new ModelVisual3D(); mv3D.Content = new GeometryModel3D(mb.ToMesh(), m); return mv3D; }
private static GeometryModel3D CreateFace(int face, Point3D center, double width, double length, double height, Brush brush) { var m = new GeometryModel3D(); var b = new MeshBuilder(); switch (face) { case 0: b.AddCubeFace(center, new Vector3D(-1, 0, 0), new Vector3D(0, 0, 1), length, width, height); break; case 1: b.AddCubeFace(center, new Vector3D(1, 0, 0), new Vector3D(0, 0, -1), length, width, height); break; case 2: b.AddCubeFace(center, new Vector3D(0, -1, 0), new Vector3D(0, 0, 1), width, length, height); break; case 3: b.AddCubeFace(center, new Vector3D(0, 1, 0), new Vector3D(0, 0, -1), width, length, height); break; case 4: b.AddCubeFace(center, new Vector3D(0, 0, -1), new Vector3D(0, 1, 0), height, length, width); break; case 5: b.AddCubeFace(center, new Vector3D(0, 0, 1), new Vector3D(0, -1, 0), height, length, width); break; } m.Geometry = b.ToMesh(); m.Material = MaterialHelper.CreateMaterial(brush); return m; }
protected override MeshGeometry3D Tessellate() { var builder = new MeshBuilder(); builder.AddPipe(Point1, Point2, InnerDiameter, Diameter, ThetaDiv); return builder.ToMesh(); }
protected override MeshGeometry3D Tessellate() { var pts = new Point3DCollection(); var right = Vector3D.CrossProduct(UpVector, Normal); for (int i = 0; i < ThetaDiv; i++) { double angle = StartAngle + (EndAngle - StartAngle) * i / (ThetaDiv - 1); double angleRad = angle / 180 * Math.PI; Vector3D dir = right * Math.Cos(angleRad) + UpVector * Math.Sin(angleRad); pts.Add(Center + dir * InnerRadius); pts.Add(Center + dir * OuterRadius); } var b = new MeshBuilder(); b.AddTriangleStrip(pts, null, null); return b.ToMesh(); }
private static Geometry3D GetDefaultGeometry() { // The default geometry is a box var mb = new MeshBuilder(); mb.AddBox(new Point3D(0, 0, 0.5), 0.8, 0.8, 1); return mb.ToMesh(); }
public void RipModel(string file) { NsbmdPolygon polygon; int matId; NsbmdMaterial material; int num3; DiffuseMaterial material2; MeshBuilder builder; Model3D modeld; MTX44 mtx = new MTX44(); List<MKDS_Course_Editor.Export3DTools.Group> list = new List<MKDS_Course_Editor.Export3DTools.Group>(); List<Vector3> list2 = new List<Vector3>(); for (int i = 0; i < (this.Model.Polygons.Count - 1); i++) { polygon = this.Model.Polygons[i]; matId = polygon.MatId; material = this.Model.Materials[matId]; } MTX44 mtx2 = new MTX44(); mtx2.LoadIdentity(); for (num3 = 0; num3 < this.Model.Objects.Count; num3++) { NsbmdObject obj2 = this.Model.Objects[num3]; float[] transVect = obj2.TransVect; float[] numArray2 = loadIdentity(); if (obj2.RestoreID != -1) { mtx2 = MatrixStack[obj2.RestoreID]; } if (obj2.StackID != -1) { if (obj2.visible) { MTX44 b = new MTX44(); b.SetValues(obj2.materix); mtx2 = mtx2.MultMatrix(b); } else { mtx2.Zero(); } MatrixStack[obj2.StackID] = mtx2; stackID = obj2.StackID; float[] numArray3 = mtx2.MultVector(new float[3]); list2.Add(new Vector3(numArray3[0], numArray3[1], numArray3[2])); } } num3 = 0; while (num3 < (this.Model.Polygons.Count - 1)) { polygon = this.Model.Polygons[num3]; if ((gOptTexture && !gOptWireFrame) && g_mat) { matId = polygon.MatId; if (matId == -1) { this.mattt.Add(new ImageBrush()); } else { this.mattt.Add(this.matt[matId]); material = this.Model.Materials[matId]; } } stackID = polygon.StackID; list.Add(Process3DCommandRipper(polygon.PolyData, Model.Materials[polygon.MatId], polygon.JointID, true)); num3++; } File.Create(file).Close(); HelixToolkit.ObjExporter exporter = new HelixToolkit.ObjExporter(file, "Created with Spiky's DS Map Editor " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString()); int index = 0; foreach (MKDS_Course_Editor.Export3DTools.Group group in list) { ImageBrush brush = new ImageBrush(); try { brush.ImageSource = this.mattt[index].ImageSource; brush.Opacity = this.mattt[index].Opacity; brush.Viewbox = this.mattt[index].Viewbox; brush.ViewboxUnits = this.mattt[index].ViewboxUnits; brush.Viewport = this.mattt[index].Viewport; brush.ViewportUnits = this.mattt[index].ViewportUnits; } catch { } if (brush.ImageSource != null) { material2 = new DiffuseMaterial(brush); } else { material2 = new DiffuseMaterial(new SolidColorBrush()); } material2.SetValue(matName, this.Model.Materials[this.Model.Polygons[index].MatId].MaterialName); material2.SetValue(polyName, this.Model.Polygons[index].Name); material2.Brush.Opacity = ((float)this.Model.Materials[this.Model.Polygons[index].MatId].Alpha) / 31f; material2.AmbientColor = System.Windows.Media.Color.FromArgb(this.Model.Materials[this.Model.Polygons[index].MatId].AmbientColor.A, this.Model.Materials[this.Model.Polygons[index].MatId].AmbientColor.R, this.Model.Materials[this.Model.Polygons[index].MatId].AmbientColor.G, this.Model.Materials[this.Model.Polygons[index].MatId].AmbientColor.B); material2.Color = System.Windows.Media.Color.FromArgb(0xff, this.Model.Materials[this.Model.Polygons[index].MatId].DiffuseColor.R, this.Model.Materials[this.Model.Polygons[index].MatId].DiffuseColor.G, this.Model.Materials[this.Model.Polygons[index].MatId].DiffuseColor.B); builder = new MeshBuilder(); foreach (MKDS_Course_Editor.Export3DTools.Polygon polygon2 in group) { IList<Point3D> list3; IList<Vector3D> list4; IList<System.Windows.Point> list5; switch (polygon2.PolyType) { case PolygonType.Triangle: list3 = new List<Point3D>(); list4 = new List<Vector3D>(); list5 = new List<System.Windows.Point>(); num3 = 0; goto Label_08AB; case PolygonType.Quad: list3 = new List<Point3D>(); list4 = new List<Vector3D>(); list5 = new List<System.Windows.Point>(); num3 = 0; goto Label_0C5E; case PolygonType.TriangleStrip: list3 = new List<Point3D>(); list4 = new List<Vector3D>(); list5 = new List<System.Windows.Point>(); num3 = 0; goto Label_0D66; case PolygonType.QuadStrip: list3 = new List<Point3D>(); list4 = new List<Vector3D>(); list5 = new List<System.Windows.Point>(); num3 = 0; goto Label_0E7C; default: { continue; } } Label_0608: list3.Add(new Point3D((double)polygon2.Vertex[num3].X, (double)polygon2.Vertex[num3].Y, (double)polygon2.Vertex[num3].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3].X, (double)polygon2.Normals[num3].Y, (double)polygon2.Normals[num3].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3].X, (double)polygon2.TexCoords[num3].Y)); list3.Add(new Point3D((double)polygon2.Vertex[num3 + 1].X, (double)polygon2.Vertex[num3 + 1].Y, (double)polygon2.Vertex[num3 + 1].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3 + 1].X, (double)polygon2.Normals[num3 + 1].Y, (double)polygon2.Normals[num3 + 1].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3 + 1].X, (double)polygon2.TexCoords[num3 + 1].Y)); list3.Add(new Point3D((double)polygon2.Vertex[num3 + 2].X, (double)polygon2.Vertex[num3 + 2].Y, (double)polygon2.Vertex[num3 + 2].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3 + 2].X, (double)polygon2.Normals[num3 + 2].Y, (double)polygon2.Normals[num3 + 2].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3 + 2].X, (double)polygon2.TexCoords[num3 + 2].Y)); builder.AddTriangles(list3, list4, list5); list3.Clear(); list4.Clear(); list5.Clear(); num3 += 3; Label_08AB: if (num3 < polygon2.Vertex.Length) { goto Label_0608; } continue; Label_08E4: list3.Add(new Point3D((double)polygon2.Vertex[num3].X, (double)polygon2.Vertex[num3].Y, (double)polygon2.Vertex[num3].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3].X, (double)polygon2.Normals[num3].Y, (double)polygon2.Normals[num3].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3].X, (double)polygon2.TexCoords[num3].Y)); list3.Add(new Point3D((double)polygon2.Vertex[num3 + 1].X, (double)polygon2.Vertex[num3 + 1].Y, (double)polygon2.Vertex[num3 + 1].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3 + 1].X, (double)polygon2.Normals[num3 + 1].Y, (double)polygon2.Normals[num3 + 1].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3 + 1].X, (double)polygon2.TexCoords[num3 + 1].Y)); list3.Add(new Point3D((double)polygon2.Vertex[num3 + 2].X, (double)polygon2.Vertex[num3 + 2].Y, (double)polygon2.Vertex[num3 + 2].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3 + 2].X, (double)polygon2.Normals[num3 + 2].Y, (double)polygon2.Normals[num3 + 2].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3 + 2].X, (double)polygon2.TexCoords[num3 + 2].Y)); list3.Add(new Point3D((double)polygon2.Vertex[num3 + 3].X, (double)polygon2.Vertex[num3 + 3].Y, (double)polygon2.Vertex[num3 + 3].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3 + 3].X, (double)polygon2.Normals[num3 + 3].Y, (double)polygon2.Normals[num3 + 3].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3 + 3].X, (double)polygon2.TexCoords[num3 + 3].Y)); builder.AddQuads(list3, list4, list5); list3.Clear(); list4.Clear(); list5.Clear(); num3 += 4; Label_0C5E: if (num3 < polygon2.Vertex.Length) { goto Label_08E4; } continue; Label_0C97: list3.Add(new Point3D((double)polygon2.Vertex[num3].X, (double)polygon2.Vertex[num3].Y, (double)polygon2.Vertex[num3].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3].X, (double)polygon2.Normals[num3].Y, (double)polygon2.Normals[num3].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3].X, (double)polygon2.TexCoords[num3].Y)); num3++; Label_0D66: if (num3 < polygon2.Vertex.Length) { goto Label_0C97; } builder.AddTriangleStrip(list3, list4, list5); continue; Label_0DAD: list3.Add(new Point3D((double)polygon2.Vertex[num3].X, (double)polygon2.Vertex[num3].Y, (double)polygon2.Vertex[num3].Z)); list4.Add(new Vector3D((double)polygon2.Normals[num3].X, (double)polygon2.Normals[num3].Y, (double)polygon2.Normals[num3].Z)); list5.Add(new System.Windows.Point((double)polygon2.TexCoords[num3].X, (double)polygon2.TexCoords[num3].Y)); num3++; Label_0E7C: if (num3 < polygon2.Vertex.Length) { goto Label_0DAD; } builder.AddTriangleStrip(list3, list4, list5); } modeld = new GeometryModel3D(builder.ToMesh(false), material2); exporter.Export(modeld); index++; } exporter.Close(); this.writevertex = false; }
protected override MeshGeometry3D Tessellate() { var builder = new MeshBuilder(true, true); builder.AddArrow(Point1, Point2, Diameter, 3, ThetaDiv); return builder.ToMesh(); }
private void CreateInitialMesh() { 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 mb = new MeshBuilder(false, true); mb.AddRectangularMesh(pts, false, false); Mesh = mb.ToMesh(); }
protected override MeshGeometry3D Tessellate() { Vector3D u = LengthDirection; Vector3D w = Normal; Vector3D v = Vector3D.CrossProduct(w, u); u = Vector3D.CrossProduct(v, w); u.Normalize(); v.Normalize(); w.Normalize(); double le = Length; double wi = Width; var pts = new Point3DCollection(); for (int i = 0; i < DivLength; i++) { double fi = -0.5 + (double)i / (DivLength - 1); for (int j = 0; j < DivWidth; j++) { double fj = -0.5 + (double)j / (DivWidth - 1); pts.Add(Origin + u * le * fi + v * wi * fj); } } var builder = new MeshBuilder(); builder.AddRectangularMesh(pts, DivWidth); return builder.ToMesh(); }
/// <summary> /// Creates the 3D model of the terrain. /// </summary> /// <param name="lod">The level of detail.</param> /// <returns></returns> public GeometryModel3D CreateModel(int lod) { int ni = Height / lod; int nj = Width / lod; var pts = new Point3DCollection(ni * nj); double mx = (Left + Right) / 2; double my = (Top + Bottom) / 2; double mz = (MinimumZ + MaximumZ) / 2; Offset = new Point3D(mx, my, mz); for (int i = 0; i < ni; i++) for (int j = 0; j < nj; j++) { double x = Left + (Right - Left) * j / (nj - 1); double y = Top + (Bottom - Top) * i / (ni - 1); double z = Data[i * lod * Width + j * lod]; x -= Offset.X; y -= Offset.Y; z -= Offset.Z; pts.Add(new Point3D(x, y, z)); } var mb = new MeshBuilder(false, false); mb.AddRectangularMesh(pts, nj); var mesh = mb.ToMesh(); var material = Materials.Green; if (Texture != null) { Texture.Calculate(this, mesh); material = Texture.Material; mesh.TextureCoordinates = Texture.TextureCoordinates; } var model = new GeometryModel3D(); model.Geometry = mesh; model.Material = material; model.BackMaterial = material; return model; }
private static GeometryModel3D CreateVoxelModel3D(Voxel v) { const double size = 0.98; var m = new GeometryModel3D(); var mb = new MeshBuilder(); mb.AddBox(new Point3D(0, 0, 0), size, size, size); m.Geometry = mb.ToMesh(); m.Material = MaterialHelper.CreateMaterial(v.Colour); m.Transform = new TranslateTransform3D(v.Position.X, v.Position.Y, v.Position.Z); return m; }