コード例 #1
0
        /// <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;
                }
            }
        }
コード例 #2
0
ファイル: MengerSponge.cs プロジェクト: msruzy/hydronumerics
        // 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);
        }
コード例 #3
0
        /// <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();
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
ファイル: MainViewModel.cs プロジェクト: alir14/3DModel
        /// <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;
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        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
            });
        }
コード例 #8
0
ファイル: Creature.cs プロジェクト: msruzy/hydronumerics
        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);
        }
コード例 #9
0
ファイル: Predator.cs プロジェクト: msruzy/hydronumerics
        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);
        }
コード例 #10
0
        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;
        }
コード例 #11
0
ファイル: Extensions.cs プロジェクト: msruzy/hydronumerics
        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);
        }
コード例 #12
0
        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++;
                }
            }
        }
コード例 #13
0
        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)
            });
        }
コード例 #14
0
        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);
        }
コード例 #15
0
        /// <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);
        }
コード例 #16
0
        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;
        }
コード例 #17
0
        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);
        }
コード例 #18
0
        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);
        }
コード例 #19
0
ファイル: MainWindow.xaml.cs プロジェクト: Wraithname/UIRS
        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);
        }
コード例 #20
0
        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;
        }
コード例 #21
0
        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);
        }
コード例 #22
0
        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();
        }
コード例 #23
0
        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)));
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        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;
        }
コード例 #26
0
        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);
        }
コード例 #27
0
        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);
        }
コード例 #28
0
        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);
        }
コード例 #29
0
        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;
        }
コード例 #30
0
        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
            });
        }