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); }
// 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); }
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 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 } }; }
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! */ }
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(); }
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; }
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; }
protected override MeshGeometry3D Tessellate() { double width = Columns*grid - margin*2; double length = Rows*grid - margin*2; double height = Height*plateThickness; var builder = new MeshBuilder(true, true); for (int i = 0; i < Columns; i++) for (int j = 0; j < Rows; j++) { var o = new Point3D((i + 0.5)*grid, (j + 0.5)*grid, height); builder.AddCone(o, new Vector3D(0, 0, 1), knobDiameter/2, knobDiameter/2, knobHeight, false, true, Divisions); builder.AddPipe(new Point3D(o.X, o.Y, o.Z - wallThickness), new Point3D(o.X, o.Y, wallThickness), knobDiameter, outerDiameter, Divisions); } builder.AddBox(new Point3D(Columns * 0.5 * grid, Rows * 0.5 * grid, height - wallThickness / 2), length, width, wallThickness, MeshBuilder.BoxFaces.All); builder.AddBox(new Point3D(margin + wallThickness / 2, Rows * 0.5 * grid, height / 2 - wallThickness / 2), length, wallThickness, height - wallThickness, MeshBuilder.BoxFaces.All ^ MeshBuilder.BoxFaces.Top); builder.AddBox( new Point3D(Columns * grid - margin - wallThickness / 2, Rows * 0.5 * grid, height / 2 - wallThickness / 2), length, wallThickness, height - wallThickness, MeshBuilder.BoxFaces.All ^ MeshBuilder.BoxFaces.Top); builder.AddBox(new Point3D(Columns * 0.5 * grid, margin + wallThickness / 2, height / 2 - wallThickness / 2), wallThickness, width, height - wallThickness, MeshBuilder.BoxFaces.All ^ MeshBuilder.BoxFaces.Top); builder.AddBox( new Point3D(Columns * 0.5 * grid, Rows * grid - margin - wallThickness / 2, height / 2 - wallThickness / 2), wallThickness, width, height - wallThickness, MeshBuilder.BoxFaces.All ^ MeshBuilder.BoxFaces.Top); return builder.ToMesh(); }