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 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; }
private void addFace(Vector3D normal, Vector3D up, Brush b, string text) { var grid = new Grid { Width = 20, Height = 20 }; grid.Background = b; grid.Children.Add(new TextBlock { Text = text, VerticalAlignment = VerticalAlignment.Center, HorizontalAlignment = HorizontalAlignment.Center, FontSize = 15, Foreground = Brushes.White }); grid.Arrange(new Rect(new Point(0, 0), new Size(20, 20))); var bmp = new RenderTargetBitmap((int)grid.Width, (int)grid.Height, 96, 96, PixelFormats.Default); bmp.Render(grid); Material material = MaterialHelper.CreateMaterial(new ImageBrush(bmp)); double a = Size; var builder = new MeshBuilder(); builder.AddCubeFace(Center, normal, up, a, a, a); var geometry = builder.ToMesh(); geometry.Freeze(); var model = new GeometryModel3D() { Geometry = geometry, Material = material }; var element = new ModelUIElement3D() { Model = model }; element.MouseLeftButtonDown += face_MouseLeftButtonDown; //element.MouseEnter += face_MouseEnter; //element.MouseLeave += face_MouseLeave; _normal.Add(element, normal); _up.Add(element, up); Children.Add(element); }