/// <summary> /// Выполнение команды. /// </summary> /// <param name="mainWindowVM">Вью-модель главного окна.</param> protected override void Execute(MainWindowVM mainWindowVM) { var random = new Random(); var mainModel = mainWindowVM.Model; var randomMaterial = MaterialHelper.CreateMaterial( Color.FromRgb( (byte)random.Next(byte.MinValue, byte.MaxValue), (byte)random.Next(byte.MinValue, byte.MaxValue), (byte)random.Next(byte.MinValue, byte.MaxValue))); var planeModel = mainWindowVM.BasePlane; planeModel.Material = randomMaterial; planeModel.BackMaterial = randomMaterial; //foreach (var child in (planeModel as Model3DGroup).Children) //{ // if (child is GeometryModel3D model) // { // model.Material = randomMaterial; // model.BackMaterial = randomMaterial; // } //} foreach (var child in (mainModel as Model3DGroup).Children) { if (child is GeometryModel3D model) { model.Material = randomMaterial; model.BackMaterial = randomMaterial; } } }
// 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); }
/// <summary> /// Shows the with convex hull. /// </summary> /// <param name="ts">The ts.</param> public static void ShowWithConvexHull(TessellatedSolid ts) { var window = new Window3DPlot(); window.view1.Children.Add(MakeModelVisual3D(ts)); var positions = ts.ConvexHull.Faces.SelectMany( f => f.Vertices.Select(v => new Point3D(v.Position[0], v.Position[1], v.Position[2]))); var normals = ts.ConvexHull.Faces.SelectMany(f => f.Vertices.Select(v => new Vector3D(f.Normal[0], f.Normal[1], f.Normal[2]))); window.view1.Children.Add( new ModelVisual3D { Content = new GeometryModel3D { Geometry = new MeshGeometry3D { Positions = new Point3DCollection(positions), // TriangleIndices = new Int32Collection(triIndices), Normals = new Vector3DCollection(normals) }, Material = MaterialHelper.CreateMaterial(new System.Windows.Media.Color { A = 189, G = 189, B = 189 }) } }); window.view1.FitView(window.view1.Camera.LookDirection, window.view1.Camera.UpDirection); //window.Show(); window.ShowDialog(); }
private void Do() { Thread.Sleep(3000); int max = GetAllSheres().Count(); for (int i = 0; i < max; i++) { Application.Current.Dispatcher.Invoke(() => { Model3DGroup m = Model as Model3DGroup; if (m != null) { //foreach (var x in m.Children) var x = m.Children[i]; { GeometryModel3D g = x as GeometryModel3D; if (g != null) { g.Material = MaterialHelper.CreateMaterial(Colors.LightGray); } } } }); Thread.Sleep(50); } }
/// <summary> /// Initializes a new instance of the <see cref="MainViewModel"/> class. /// </summary> public MainViewModel() { // Create a model group var modelGroup = new Model3DGroup(); // Create a mesh builder and add a box to it var meshBuilder = new MeshBuilder(false, false); meshBuilder.AddBox(new Point3D(0, 0, 1), 1, 2, 0.5); meshBuilder.AddBox(new Rect3D(0, 0, 1.2, 0.5, 1, 0.4)); // Create a mesh from the builder (and freeze it) var mesh = meshBuilder.ToMesh(true); // Create some materials var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green); var redMaterial = MaterialHelper.CreateMaterial(Colors.Red); var blueMaterial = MaterialHelper.CreateMaterial(Colors.Blue); var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow); // Add 3 models to the group (using the same mesh, that's why we had to freeze it) modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial }); modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial }); modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial }); // Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml) this.Model = modelGroup; }
/// <summary> /// Create viewport geometry for the polygons (with tesselation) /// </summary> private static List <GeometryModel3D> _geometryFromPolygons(List <Point3DCollection> polyList) { var geomList = new List <GeometryModel3D>(); foreach (var poly in polyList) { var tes = new LibTessDotNet.Double.Tess(); tes.AddContour(poly.Select(pt => new ContourVertex(new Vec3(pt.X, pt.Y, pt.Z))).ToArray()); tes.Tessellate(); var positions = new Point3DCollection(tes.Vertices.Select(i => new Point3D(i.Position.X, i.Position.Y, i.Position.Z))); var triangleIndices = new Int32Collection(tes.Elements); var material = MaterialHelper.CreateMaterial(Colors.LightGray); // Just in case, not to accidentally remain invisible (consequence of null) var mesh = new MeshGeometry3D() { Positions = positions, TriangleIndices = triangleIndices }; var geom = new GeometryModel3D() { Geometry = mesh, Material = material, BackMaterial = null }; geomList.Add(geom); } return(geomList); }
public void RoDrawObjectDestination() { var meshBuilder = new MeshBuilder(false, false); meshBuilder.AddPipe(new Point3D(RoY[0, 4], RoY[1, 4], RoY[2, 4]), new Point3D(RoY[0, 5], RoY[1, 5], RoY[2, 5]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 4], RoY[1, 4], RoY[2, 4]), new Point3D(RoY[0, 7], RoY[1, 7], RoY[2, 7]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 6], RoY[1, 6], RoY[2, 6]), new Point3D(RoY[0, 5], RoY[1, 5], RoY[2, 5]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 6], RoY[1, 6], RoY[2, 6]), new Point3D(RoY[0, 7], RoY[1, 7], RoY[2, 7]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 0], RoY[1, 0], RoY[2, 0]), new Point3D(RoY[0, 4], RoY[1, 4], RoY[2, 4]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 1], RoY[1, 1], RoY[2, 1]), new Point3D(RoY[0, 5], RoY[1, 5], RoY[2, 5]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 2], RoY[1, 2], RoY[2, 2]), new Point3D(RoY[0, 6], RoY[1, 6], RoY[2, 6]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 3], RoY[1, 3], RoY[2, 3]), new Point3D(RoY[0, 7], RoY[1, 7], RoY[2, 7]), 0, 0.2, 360); meshBuilder.AddPipe(new Point3D(RoY[0, 0], RoY[1, 0], RoY[2, 0]), new Point3D(RoY[0, 1], RoY[1, 1], RoY[2, 1]), 0, 0.2, 360); //A & B meshBuilder.AddPipe(new Point3D(RoY[0, 1], RoY[1, 1], RoY[2, 1]), new Point3D(RoY[0, 2], RoY[1, 2], RoY[2, 2]), 0, 0.2, 360); //B & C meshBuilder.AddPipe(new Point3D(RoY[0, 2], RoY[1, 2], RoY[2, 2]), new Point3D(RoY[0, 3], RoY[1, 3], RoY[2, 3]), 0, 0.2, 360); //C & D meshBuilder.AddPipe(new Point3D(RoY[0, 3], RoY[1, 3], RoY[2, 3]), new Point3D(RoY[0, 0], RoY[1, 0], RoY[2, 0]), 0, 0.2, 360); //D & A var mesh = meshBuilder.ToMesh(true); var redMaterial = MaterialHelper.CreateMaterial(Colors.Red); RotationModel.Children.Add(new GeometryModel3D { Geometry = mesh, Material = redMaterial }); }
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); }
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); }
private void gambarsumbu() { var sumbux = new MeshBuilder(false, false); var sumbuy = new MeshBuilder(false, false); var sumbuz = new MeshBuilder(false, false); sumbux.AddPipe(new Point3D(-100, 0, 0), new Point3D(100, 0, 0), 0, 0.1, 90); sumbuy.AddPipe(new Point3D(0, -100, 0), new Point3D(0, 100, 0), 0, 0.1, 90); sumbuz.AddPipe(new Point3D(0, 0, -100), new Point3D(0, 0, 100), 0, 0.1, 90); sumbu.Children.Add(new GeometryModel3D { Geometry = sumbux.ToMesh(true), Material = MaterialHelper.CreateMaterial(Colors.DarkRed) }); sumbu.Children.Add(new GeometryModel3D { Geometry = sumbuy.ToMesh(true), Material = MaterialHelper.CreateMaterial(Colors.ForestGreen) }); sumbu.Children.Add(new GeometryModel3D { Geometry = sumbuz.ToMesh(true), Material = MaterialHelper.CreateMaterial(Colors.RoyalBlue) }); placedobjects.Content = sumbu; }
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 void LoadUnitModel() { CreateLotModel(); CreateUnitModel(); UnitFileEntry.UnitEffects.ForEach(e => viewPort.Children.Add(e.CreateGeometry())); UnitFileEntry.UnitLights.ForEach(l => viewPort.Children.Add(l.CreateGeometry())); UnitFileEntry.UnitPathPoints.ForEach(l => viewPort.Children.Add(l.CreateGeometry())); UnitFileEntry.UnitSimsSpawners.ForEach(l => viewPort.Children.Add(l.CreateGeometry())); UnitFileEntry.UnitBinDrawSlots.ToList().ForEach(l => l.ForEach(b => viewPort.Children.Add(b.CreateGeometry()))); UnitFileEntry.UnitBinDecals.ToList().ForEach(l => l.ForEach(b => viewPort.Children.Add(b.CreateGeometry()))); //create the paths int i = 0; if (UnitFileEntry.UnitPaths.Count > 0) { foreach (UnitPath path in UnitFileEntry.UnitPaths) { int startIndex = UnitFileEntry.UnitPath[i * 2].Value; int endIndex = UnitFileEntry.UnitPath[(i * 2) + 1].Value; TubeVisual3D visual = new TubeVisual3D(); visual.Material = MaterialHelper.CreateMaterial(Colors.Aqua); foreach (UnitPathPoint point in UnitFileEntry.UnitPathPoints.Where(p => p.Index.Value <= endIndex && p.Index.Value >= startIndex)) { visual.Path.Add(new Point3D(point.Point.X, point.Point.Y, point.Point.Z)); } viewPort.Children.Add(visual); i++; } } }
public static ModelVisual3D GetAngolarTransmissionModell(Tool tool, Point3D position, Vector3D direction, Func <string, MeshGeometryVisual3D> visual3DFactory = null) { var ati = tool as AngolarTransmissionImpl; var modelGroup = new Model3DGroup(); if (System.IO.File.Exists(ati.BodyModelFile)) { var bodyGeometry = ToolsMeshHelper.LoadModelMeshGeometry(ati.BodyModelFile); modelGroup.Children.Add(new GeometryModel3D() { Geometry = bodyGeometry, Material = MaterialHelper.CreateMaterial(Colors.DimGray), BackMaterial = MaterialHelper.CreateMaterial(Colors.DimGray) }); } foreach (var item in ati.Subspindles) { modelGroup.Children.Add(new GeometryModel3D() { Geometry = GetToolGeometry(item.Tool, item.Position.ToPoint3D(), item.Direction.ToVector3D()), Material = MaterialHelper.CreateMaterial(Colors.Blue), BackMaterial = MaterialHelper.CreateMaterial(Colors.Blue) }); } return(new ModelVisual3D() { Content = modelGroup, Transform = new TranslateTransform3D(position.X, position.Y, position.Z) }); }
public GeometryModel3D createRoadModel(Point3D[] points, double roadWidth) { // 转为相对坐标 for (int i = 0; i < points.Length; i++) { points[i].X -= Offset.X; points[i].Y -= Offset.Y; points[i].Z -= Offset.Z; } Point3D[,] RoadPts = createRoadMesh(points, roadWidth); // 构造道路面的mesh MeshBuilder mb = new MeshBuilder(false, false); mb.AddRectangularMesh(RoadPts, closed0: false, closed1: false); var mesh = mb.ToMesh(); var model = new GeometryModel3D(); model.Geometry = mesh; var material = MaterialHelper.CreateMaterial(RoadColor); model.Material = material; model.BackMaterial = material; return(model); }
/// <summary> /// Calculates the texture for the specified model. /// </summary> /// <param name="model"> /// The model. /// </param> /// <param name="mesh"> /// The mesh. /// </param> public override void Calculate(TerrainModel model, MeshGeometry3D mesh) { var normals = MeshGeometryHelper.CalculateNormals(mesh); var texcoords = new PointCollection(); var up = new Vector3D(0, 0, 1); for (int i = 0; i < normals.Count; i++) { double slope = Math.Acos(Vector3D.DotProduct(normals[i], up)) * 180 / Math.PI; double u = slope / 40; if (u > 1) { u = 1; } if (u < 0) { u = 0; } texcoords.Add(new Point(u, u)); } this.TextureCoordinates = texcoords; this.Material = MaterialHelper.CreateMaterial(this.Brush); }
public AgvUIElement3D() { //ModelUIElement3D modelUIElement3D = new ModelUIElement3D(); //modelUIElement3D.Model = new PointLight(); //ModelVisual3D modelVisual3D = new ModelVisual3D(); //modelVisual3D.Content = new PointLight(); //Viewport3D viewport3D = new Viewport3D(); //viewport3D.Camera = new PerspectiveCamera(); //HelixToolkit.Wpf.HelixViewport3D. ////viewport3D.Children.Add ModelImporter modelImporter = new ModelImporter(); modelImporter.Load(""); this.roof.Material = MaterialHelper.CreateMaterial(Brushes.Brown, ambient: 10); this.walls.Material = MaterialHelper.CreateMaterial(Brushes.White, ambient: 10); this.AppearanceChanged(); var model = new Model3DGroup(); model.Children.Add(this.roof); model.Children.Add(this.walls); this.Visual3DModel = model; }
private static ModelVisual3D Planar(IFeature basePath) { TongJi.Geometry.Polyline curve = new TongJi.Geometry.Polyline(basePath.GeoData); if (curve.AlgebraicArea < 0) { curve = curve.ReversePoints(); } var points = curve.Points.ToList(); if (points.Last() == points.First()) { points.RemoveAt(points.Count - 1); } var triangles = DelaunayOfPolygon(points); MeshBuilder mb = new MeshBuilder(); foreach (var tri in triangles) { var a = new Point3D(tri.A.x, tri.A.y, 0); var b = new Point3D(tri.B.x, tri.B.y, 0); var c = new Point3D(tri.C.x, tri.C.y, 0); mb.AddTriangle(a, b, c); } ModelVisual3D visual = new ModelVisual3D(); visual.Content = new GeometryModel3D(mb.ToMesh(), MaterialHelper.CreateMaterial(Colors.Blue)); return(visual); }
public void DisplayDesignClusters(bool updateKeys = true, bool generate = true) { if (generate) { BatchDesign.GetDesignClusters(); } var modelGroup = new Model3DGroup(); List <List <Column> > designClusters = BatchDesign.GetDesignClustersCol(); for (int i = 0; i < designClusters.Count; i++) { MeshBuilder meshBuilder = new MeshBuilder(false, true); List <Column> columns = designClusters[i]; foreach (var c in columns) { Point3D center = new Point3D(c.Point1.X * 1e-3, c.Point1.Y * 1e-3, c.Point1.Z * 1e-3); double xlength = 0.2; double ylength = 0.2; double zlength = (c.Point2.Z - c.Point1.Z) * 1e-3; meshBuilder.AddBox(center, xlength, ylength, zlength); } var mesh = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(myColors[i].ChangeAlpha(150))); mesh.BackMaterial = mesh.Material; modelGroup.Children.Add(mesh); } ClusteredDesigns = modelGroup; if (updateKeys) { DisplayDesignClustersKeys(); } NumberOfColumns_Designs = designClusters.Sum(c => c.Count); }
private void Updater(double z) { viewPort3d.Children.Clear(); var modelGroup = new Model3DGroup(); MeshBuilder msh = new MeshBuilder(); for (int k = 0; k < list.Count; k++) { if (list[k].Z > z) { msh.AddBox(list[k], 0.1, 0.1, 0.1); } } var gm = new GeometryModel3D(); var mesh = msh.ToMesh(true); var greenMaterial = MaterialHelper.CreateMaterial(Colors.Green); var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow); modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial }); device = modelGroup; device3D.Content = device; //-------------------------------------- viewPort3d.Children.Add(new SunLight()); viewPort3d.Children.Add(device3D); }
public void DisplayOneDesignCluster(int n) { //BatchDesign.GetDesignClusters(); var modelGroup = new Model3DGroup(); List <List <Column> > designClusters = BatchDesign.GetDesignClustersCol(); for (int i = 0; i < designClusters.Count; i++) { MeshBuilder meshBuilder = new MeshBuilder(false, true); List <Column> columns = designClusters[i]; foreach (var c in columns) { Point3D center = new Point3D(c.Point1.X * 1e-3, c.Point1.Y * 1e-3, c.Point1.Z * 1e-3); double xlength = 0.2; double ylength = 0.2; double zlength = (c.Point2.Z - c.Point1.Z) * 1e-3; meshBuilder.AddBox(center, xlength, ylength, zlength); } Color col = i == n ? myColors[i].ChangeAlpha(150) : myColors[i].ChangeAlpha(20); var mesh = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(col)); mesh.BackMaterial = mesh.Material; modelGroup.Children.Add(mesh); } ClusteredDesigns = modelGroup; NumberOfColumns_Designs = designClusters[n].Count; }
private GeometryModel3D GetCountryHelixArrowGeometry( double latitude, double longitude, double height, OxyColor color) { PolygonPoint latLong = new PolygonPoint() { Latitude = latitude, Longitude = longitude }; double x, y; latLong.GetCoordinates(out x, out y); GeometryModel3D countryGeometry = new GeometryModel3D(); var brush = new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B)); countryGeometry.Material = MaterialHelper.CreateMaterial(brush, ambient: 177); var meshBuilder = new MeshBuilder(false, false); var top = new Point3D(x, y, height); var countryPoint = new Point3D(x, y, 0); meshBuilder.AddCone(top, countryPoint, 1.0, true, 16); var textStart = new Point3D(x, y + 1, height + 1); meshBuilder.AddArrow(textStart, top, 0.1); countryGeometry.Geometry = meshBuilder.ToMesh(); return(countryGeometry); }
public void DisplayOneColumnsCluster(int n) { var modelGroup = new Model3DGroup(); List <Cluster> loadClusters = BatchDesign.LoadClusters; List <Color> colors = GetColors(); for (int i = 0; i < loadClusters.Count; i++) { MeshBuilder meshBuilder = new MeshBuilder(false, true); List <Column> columns = loadClusters[i].Loads.Select(p => batchDesign.GetParentColumn(p)).Distinct().ToList(); foreach (var c in columns) { Point3D center = new Point3D(c.Point1.X * 1e-3, c.Point1.Y * 1e-3, c.Point1.Z * 1e-3); double xlength = 0.2; double ylength = 0.2; double zlength = (c.Point2.Z - c.Point1.Z) * 1e-3; meshBuilder.AddBox(center, xlength, ylength, zlength); } Color color = i == n ? colors[i].ChangeAlpha(150) : colors[i].ChangeAlpha(20); var mesh = new GeometryModel3D(meshBuilder.ToMesh(), MaterialHelper.CreateMaterial(color)); mesh.BackMaterial = mesh.Material; modelGroup.Children.Add(mesh); } ClusteredColumns = modelGroup; NumberOfColumns = loadClusters[n].Loads.Select(l => batchDesign.GetParentColumn(l)).Distinct().Count(); }
private void CreateNavMeshOverlay() { var vertices = new List <Point3D>(); var indices = new List <int>(); NavMesh navMesh = ExilePather.PolyPathfinder.NavMesh; int tcount = navMesh.GetMaxTiles(); for (int i = 0; i < tcount; i++) { MeshTile tile = navMesh.GetTile(i); if (tile.Header == null) { continue; } AddMeshTile(tile, vertices, indices); } var b = new MeshBuilder(); for (int i = 0; i < indices.Count - 3; i += 3) { b.AddTriangle(vertices[indices[i + 2]], vertices[indices[i + 1]], vertices[indices[i]]); } _initialSeed = _curData.Seed; LokiPoe.BeginDispatchIfNecessary(View.Dispatcher, () => (Visual as MeshVisual3D).Content = new GeometryModel3D(b.ToMesh(true), MaterialHelper.CreateMaterial(Colors.DeepSkyBlue, 0.35))); }
public void DisplayAllClusters(bool compute = true, bool updateKeys = true) { var modelGroup = new Model3DGroup(); if (compute) { BatchDesign.GenerateLoadsClustering(); } List <List <MWPoint3D> > clusters = BatchDesign.Clusters; List <Color> colors = GetColors(); for (int i = 0; i < clusters.Count; i++) { var pointMesh = new MeshBuilder(false, true); foreach (var p in clusters[i]) { Point3D center = new Point3D(10 * p.X / batchDesign.MaxMx, 10 * p.Y / batchDesign.MaxMy, 10 * p.Z / batchDesign.MaxP); pointMesh.AddSphere(center, radius: 0.05, thetaDiv: 8, phiDiv: 4); } var mesh0 = new GeometryModel3D(pointMesh.ToMesh(), MaterialHelper.CreateMaterial(colors[i])); mesh0.BackMaterial = mesh0.Material; modelGroup.Children.Add(mesh0); } LoadsCloud = modelGroup; DisplayAllColumnsClusters(updateKeys); }
public ProjectBox(float projectWidth, float projectLength, float projectHeight) { // Set ProjectBox Properties this.projectWidth = projectWidth; this.projectLength = projectLength; this.projectHeight = projectHeight; // Create a model group modelGroup = new Model3DGroup(); modelGroup.SetName("ModelGroup"); // Create a mesh builder and add a box to it var meshBuilder = new MeshBuilder(false, false); meshBuilder.AddBox(new Point3D(0, 0, 0.5 * this.projectHeight), this.projectWidth, this.projectLength, this.projectHeight); // Create a mesh from the builder (and freeze it) var mesh = meshBuilder.ToMesh(true); // Create some materials var greenMaterial = MaterialHelper.CreateMaterial(Colors.YellowGreen); var redMaterial = MaterialHelper.CreateMaterial(Colors.Red); var blueMaterial = MaterialHelper.CreateMaterial(Colors.Blue); var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow); // Add 3 models to the group (using the same mesh, that's why we had to freeze it) modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Material = greenMaterial, BackMaterial = insideMaterial }); //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(-2, 0, 0), Material = redMaterial, BackMaterial = insideMaterial }); //modelGroup.Children.Add(new GeometryModel3D { Geometry = mesh, Transform = new TranslateTransform3D(2, 0, 0), Material = blueMaterial, BackMaterial = insideMaterial }); // Set the property, which will be bound to the Content property of the ModelVisual3D (see MainWindow.xaml) this.Model = modelGroup; }
public void DisplayOneCluster(int n) { var modelGroup = new Model3DGroup(); List <List <MWPoint3D> > clusters = BatchDesign.Clusters; Console.WriteLine("Displaying cluster number {0}", n); List <Color> colors = GetColors(); for (int i = 0; i < clusters.Count; i++) { var pointMesh = new MeshBuilder(false, true); foreach (var p in clusters[i]) { Point3D center = new Point3D(10 * p.X / batchDesign.MaxMx, 10 * p.Y / batchDesign.MaxMy, 10 * p.Z / batchDesign.MaxP); pointMesh.AddSphere(center, radius: 0.05, thetaDiv: 8, phiDiv: 4); } Color color = i == n ? colors[i] : colors[i].ChangeAlpha(20); var mesh0 = new GeometryModel3D(pointMesh.ToMesh(), MaterialHelper.CreateMaterial(color)); mesh0.BackMaterial = mesh0.Material; modelGroup.Children.Add(mesh0); } LoadsCloud = modelGroup; DisplayOneColumnsCluster(n); }
internal TeethVisual3D addNewTeeth(Material material) { TeethVisual3D t = new TeethVisual3D(this); tc.Children.Add(t); if (selectedPoint != null) { Transform3DGroup transformGroup = new Transform3DGroup(); transformGroup.Children.Add(new TranslateTransform3D(selectedPoint.ToVector3D())); t.Transform = transformGroup; } int intID = getTeethIDint(t.Id); teethDictionaries.Add(intID, t.Id); if (material == null) { material = MaterialHelper.CreateMaterial(TeethVisual3D.getTeethColor(intID)); } ((GeometryModel3D)t.Content).Material = material; ((GeometryModel3D)t.Content).BackMaterial = material; selectedTeeth = t; return(t); }
private static GeometryModel3D GetCountryEllipsoidArrowGeometry( double latitude, double longitude, int booksCount, Color color) { PolygonPoint latLong = new PolygonPoint { Latitude = latitude, Longitude = longitude }; double x, y; latLong.GetCoordinates(out x, out y); double height = 1 + Math.Log(booksCount); GeometryModel3D countryGeometry = new GeometryModel3D(); SolidColorBrush brush = new SolidColorBrush(Color.FromArgb(color.A, color.R, color.G, color.B)); countryGeometry.Material = MaterialHelper.CreateMaterial(brush, ambient: 177); MeshBuilder meshBuilder = new MeshBuilder(false, false); Point3D countryPoint = new Point3D(x, y, 0); meshBuilder.AddEllipsoid(countryPoint, 1.0, 1.0, height); Point3D top = new Point3D(x, y, height); Point3D textStart = new Point3D(x, y + 1, height + 1); meshBuilder.AddArrow(textStart, top, 0.1); countryGeometry.Geometry = meshBuilder.ToMesh(); return(countryGeometry); }
private void UpdateModels() { var group = new Model3DGroup(); Models = new GeometryModel3D[FrequencyColumns, TimeColumns]; ScaleTransforms = new ScaleTransform3D[FrequencyColumns, TimeColumns]; for (int j = 0; j < TimeColumns; j++) { for (int i = 0; i < FrequencyColumns; i++) { Material material = MaterialHelper.CreateMaterial(ColorHelper.HsvToColor(0.6 * i / (FrequencyColumns - 1), 1, 1)); ScaleTransforms[i, j] = new ScaleTransform3D(1, 1, 1); var translation = new TranslateTransform3D((i - (FrequencyColumns - 1) * 0.5) * Distance, -j * Distance, 0); var tg = new Transform3DGroup(); tg.Children.Add(ScaleTransforms[i, j]); tg.Children.Add(translation); Models[i, j] = new GeometryModel3D(Geometry, material) { Transform = tg }; group.Children.Add(Models[i, j]); } } Content = group; }
public void AddGroup(bool canShowFace) { MeshBuilder mesh = new MeshBuilder(false, false); if (canShowFace) { foreach (Point3D pt in this.Points) { mesh.Positions.Add(pt); } foreach (List <int> pts in this.faces) { if (pts != null) { mesh.AddPolygon(pts); } } } else { foreach (Point3D pt in this.Points) { mesh.AddSphere(pt, pointRaduis); } } var mesh1 = mesh.ToMesh(true); var redMaterial = MaterialHelper.CreateMaterial(Colors.Green); var insideMaterial = MaterialHelper.CreateMaterial(Colors.Yellow); // Add 3 models to the group (using the same mesh, that's why we had to freeze it) mg.Children.Add(new GeometryModel3D { Geometry = mesh1, Material = redMaterial, BackMaterial = insideMaterial }); }