/// <summary>
        /// Create a MeshGeometryVisual3D from an existing HalfEdgeMesh with specified Colors.
        /// </summary>
        /// <param name="mesh">The existing HalfEdgeMesh.</param>
        /// <param name="foreground">The Color for the Triangles of the Mesh.</param>
        /// <param name="backGround">The Background Color for the Triangles of the Mesh.</param>
        /// <returns>MeshVisual3D of the HalfEdgeMesh with the specified Materials.</returns>
        private static MeshVisual3D CreateVisual3DWithoutNormals(this HalfEdgeMesh mesh,
                                                                 Material frontMaterial, Material backMaterial)
        {
            if (frontMaterial == default(Material))
            {
                frontMaterial = new DiffuseMaterial(new SolidColorBrush(DefaultForegroundColor));
            }
            if (backMaterial == default(Material))
            {
                backMaterial = new DiffuseMaterial(new SolidColorBrush(DefaultBackgroundColor));
            }

            var mesh3D = new Mesh3D(mesh.Vertices.Select(p => new Point3D(p.X, p.Y, p.Z)), mesh.Triangles.Where(t => t.HalfEdge != null).SelectMany(t => t.VertexIndizes));

            var meshVisual = new MeshVisual3D()
            {
                Mesh             = mesh3D,
                FaceMaterial     = frontMaterial,
                FaceBackMaterial = backMaterial,
                EdgeDiameter     = 0,
                VertexRadius     = 0
            };

            return(meshVisual);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a rather ugly visual representatino of the polyline.
        /// Fixed in size with respect to the model.
        /// </summary>
        /// <param name="highlighted">The destination visual component to replace the content of.</param>
        internal void SetToVisual(MeshVisual3D highlighted)
        {
            if (_geomPoints == null)
            {
                return;
            }

            var lines = new LinesVisual3D {
                Color = Colors.Yellow
            };
            var axesMeshBuilder = new MeshBuilder();

            List <Point3D> path = new List <Point3D>();

            foreach (var item in _geomPoints)
            {
                axesMeshBuilder.AddSphere(item.Point, 0.1);
                path.Add(item.Point);
            }
            if (_geomPoints.Count > 1)
            {
                double lineThickness = 0.05;
                axesMeshBuilder.AddTube(path, lineThickness, 9, false);
            }
            highlighted.Content = new GeometryModel3D(axesMeshBuilder.ToMesh(), Materials.Yellow);
        }
Exemplo n.º 3
0
        public override ModelVisual3D To3DViz()
        {
            MeshBuilder builder = new MeshBuilder(true, true);

            for (int i = 0; i < connectivity.Count; i++)
            {
                List <int> l = connectivity[i];

                //builder.AddPolygon(l.Select(idx => pnts[idx].ToPoint3D()).ToList());

                if (l.Count == 3)
                {
                    builder.AddTriangle(pnts[l[0]].ToPoint3D(), pnts[l[1]].ToPoint3D(), pnts[l[2]].ToPoint3D());
                }
                else if (l.Count == 4)
                {
                    builder.AddQuad(pnts[l[0]].ToPoint3D(), pnts[l[1]].ToPoint3D(), pnts[l[2]].ToPoint3D(), pnts[l[3]].ToPoint3D());
                }
            }

            Mesh3D m = new Mesh3D(builder.Positions, builder.TriangleIndices);

            MeshVisual3D mesh = new MeshVisual3D()
            {
                Mesh = m
            };

            return(mesh);
        }
Exemplo n.º 4
0
        MeshVisual3D MakeMeshVisual3D(Mesh3D mesh)
        {
            MeshVisual3D vismesh = new MeshVisual3D {
                Content = new GeometryModel3D {
                    Geometry = mesh.ToMeshGeometry3D(), Material = Materials.White
                }
            };

            return(vismesh);
        }
Exemplo n.º 5
0
        public RenderLocalPlayer(HelixViewport3D viewport, TextBlock playerLocationText, TextBlock cameraPositionText, TextBlock cameraLookDirectionText) : base(viewport)
        {
            MeshBuilder mb = new MeshBuilder();

            mb.AddSphere(new Point3D(), 1.5);

            _model = new GeometryModel3D(mb.ToMesh(true), Materials.Red);
            Visual = new MeshVisual3D
            {
                Content = _model
            };

            _playerLocationText      = playerLocationText;
            _cameraPositionText      = cameraPositionText;
            _cameraLookDirectionText = cameraLookDirectionText;
        }
Exemplo n.º 6
0
        static void UpdateColor(Visual3D v3d, bool isClicked)
        {
            DiffuseMaterial material     = isClicked ? PropertyServer.SelectedMaterial : PropertyServer.UnSelectedMaterial;
            DiffuseMaterial materialBack = isClicked ? PropertyServer.SelectedMaterialBack : PropertyServer.UnSelectedMaterialBack;

            System.Windows.Media.Color color = isClicked ? PropertyServer.SelectedColor : PropertyServer.UnSelectedColor;

            if (v3d is MeshVisual3D)
            {
                MeshVisual3D mesh = v3d as MeshVisual3D;
                mesh.FaceMaterial     = material;
                mesh.FaceBackMaterial = materialBack;
                mesh.EdgeMaterial     = material;
                mesh.VertexMaterial   = material;
            }
            else if (v3d is LinesVisual3D)
            {
                LinesVisual3D line = v3d as LinesVisual3D;
                line.Color = color;
            }

            else if (v3d is PointsVisual3D)
            {
                PointsVisual3D pnts = v3d as PointsVisual3D;
                pnts.Color = color;
            }

            else if (v3d is SphereVisual3D)
            {
                SphereVisual3D sphere = v3d as SphereVisual3D;
                sphere.Material = material;
            }
            else
            {
                Logger.Log(v3d, "NOTYPE");
            }
        }
Exemplo n.º 7
0
 public RenderMesh(HelixViewport3D viewport) : base(viewport)
 {
     Visual = new MeshVisual3D();
 }
Exemplo n.º 8
0
        void AddFakeVariablesDebug()
        {
            dg_Variables.BeginningEdit -= dg_Variables_BeginningEdit;
            dg_Variables.BeginningEdit += dg_Variables_BeginningEdit_DEBUG;

            // datagrid objs
            DataGridObject obj = new DataGridObject()
            {
                Name = "Points"
            };

            DataGridObject sphere = new DataGridObject()
            {
                Name = "Sphere"
            };

            DataGridObject mesh = new DataGridObject()
            {
                Name = "Mesh"
            };

            DataGridObject line = new DataGridObject()
            {
                Name = "Line"
            };

            List <DataGridObject> objs = new List <DataGridObject>()
            {
                obj, sphere, line, mesh
            };

            dg_Variables.ItemsSource = objs;


            // pnts
            PointsVisual3D points = new PointsVisual3D();
            Random         rand   = new Random();

            for (int i = 0; i < 10; i++)
            {
                Point3D p = new Point3D(rand.NextDouble(), rand.NextDouble(), rand.NextDouble());
                points.Points.Add(p);
            }
            points.Size = PropertyServer.PointSize;

            _dict.Add("Points", points);
            hv.Items.Add(points);

            // sphere
            SphereVisual3D sph = new SphereVisual3D()
            {
                Center = new Point3D(0, 0, 0),
                Radius = 0.1,
            };

            _dict.Add("Sphere", sph);
            hv.Items.Add(sph);

            // mesh
            MeshBuilder builder = new MeshBuilder(true, true);

            builder.AddTriangle(new Point3D(1, 1, 1), new Point3D(2, 2, 4), new Point3D(5, 3, 3));

            MeshVisual3D m = new MeshVisual3D()
            {
                Mesh = new Mesh3D(builder.Positions, Enumerable.Range(0, builder.Positions.Count))
            };

            _dict.Add("Mesh", m);
            hv.Items.Add(m);

            // line
            LinesVisual3D l = new LinesVisual3D();

            l.Points.Add(new Point3D(4, 5, 7));
            l.Points.Add(new Point3D(4, 8, 5));
            _dict.Add("Line", l);
            hv.Items.Add(l);
        }
Exemplo n.º 9
0
        public MainWindow()
        {
            InitializeComponent();

            string[] args = Environment.GetCommandLineArgs();
            BrgFile  file;

            if (args.Length > 1 && false)
            {
                file = new BrgFile(File.Open(args[1], FileMode.Open, FileAccess.Read, FileShare.Read));
                file.WriteJson(File.Open(args[1] + ".json", FileMode.Create, FileAccess.Write, FileShare.Read));
                if (args.Length > 2 && args[2] == "-s")
                {
                    Application.Current.Shutdown();
                }
            }
            else
            {
                //archer e slinger_attacka.brg
                file = new BrgFile(File.Open(@"C:\Games\Steam\steamapps\common\Age of Mythology\models\version2.0\infantry g hoplite head standard.brg", FileMode.Open, FileAccess.Read, FileShare.Write));
                file.WriteJson(File.Open("infantry g hoplite head standard.brg.json.brg", FileMode.Create, FileAccess.Write, FileShare.Read));
                var grnFile = new AoMEngineLibrary.Graphics.Grn.GrnFile();
                grnFile.Read(File.Open(@"C:\Games\Steam\steamapps\common\Age of Mythology\models\version2.0\ajax.grn", FileMode.Open, FileAccess.Read, FileShare.Write));
            }

            //BrgFile t = new BrgFile();
            //t.ReadJson(File.Open("hi.brg", FileMode.Open, FileAccess.Read, FileShare.Read));
            //t.WriteJson(File.Open("hi2.brg", FileMode.Create, FileAccess.Write, FileShare.Read));

            List <Point3D> positions       = new List <Point3D>(file.Meshes[0].Vertices.Count);
            List <int>     triangleIndices = new List <int>(file.Meshes[0].Faces.Count * 3);

            for (int i = 0; i < file.Meshes[0].Vertices.Count; ++i)
            {
                positions.Add(new Point3D(
                                  file.Meshes[0].Vertices[i].X,
                                  file.Meshes[0].Vertices[i].Y,
                                  file.Meshes[0].Vertices[i].Z));
            }

            for (int i = 0; i < file.Meshes[0].Faces.Count; ++i)
            {
                triangleIndices.Add(file.Meshes[0].Faces[i].Indices[0]);
                triangleIndices.Add(file.Meshes[0].Faces[i].Indices[1]);
                triangleIndices.Add(file.Meshes[0].Faces[i].Indices[2]);
            }

            Mesh3D       mesh    = new Mesh3D(positions, triangleIndices);
            MeshVisual3D meshVis = new MeshVisual3D();

            meshVis.Mesh = mesh;

            ModelVisual3D   modVis  = new ModelVisual3D();
            GeometryModel3D geomod  = new GeometryModel3D();
            MeshGeometry3D  meshgeo = new MeshGeometry3D();

            //modVis.Transform = new MatrixTransform3D(new Matrix3D(-1, 0, 0, 0, 0, 0, -1, 0, 0, 1, 0, 0, 0, 0, 0, 1));
            //modVis.Transform = new MatrixTransform3D(new Matrix3D(-0, -0, -1, 0, -1, -0, -0, 0, 0, 1, 0, 0, 0, 0, 0, 1));
            modVis.Transform        = new MatrixTransform3D(new Matrix3D(0, -1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1));
            meshgeo.Positions       = new Point3DCollection(positions);
            meshgeo.TriangleIndices = new Int32Collection(triangleIndices);
            geomod.Geometry         = meshgeo;
            modVis.Content          = geomod;
            MaterialGroup matGroup = new MaterialGroup();

            matGroup.Children.Add(new DiffuseMaterial(new SolidColorBrush(Color.FromArgb(255, 0xFF, 0x00, 0xFF))));
            geomod.Material = matGroup;

            //viewport3d.Children.Add(meshVis);
            viewport3d.Children.Add(modVis);

            file = new BrgFile(File.Open(@"C:\Games\Steam\steamapps\common\Age of Mythology\models\version2.0\animal aurochs_attacka.brg", FileMode.Open, FileAccess.Read));
            glTFLoader.Schema.Gltf gltf;
            using (var stream = File.Open("dataBuffer.bin", FileMode.Create, FileAccess.Write, FileShare.Read))
            {
                GltfFormatter frmt = new GltfFormatter();
                gltf = frmt.FromBrg(file, stream);
            }
            glTFLoader.Interface.SaveModel(gltf, "brgGltf.gltf");
        }
Exemplo n.º 10
0
        void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            if (_isRendering)
            {
                return;
            }

            if (!_requiresRedraw)
            {
                return;
            }

            _isRendering = true;

            Points         = null;
            Lines          = null;
            _lines.Points  = null;
            _points.Points = null;

            Points = new Point3DCollection();
            Lines  = new Point3DCollection();
            Meshes = new List <Mesh3D>();

            // a list of all the upstream IDrawable nodes
            List <IDrawable> drawables = new List <IDrawable>();

            GetUpstreamIDrawable(drawables, Inputs);

            foreach (IDrawable d in drawables)
            {
                d.Draw();

                foreach (Point3D p in d.RenderDescription.points)
                {
                    Points.Add(p);
                }

                foreach (Point3D p in d.RenderDescription.lines)
                {
                    Lines.Add(p);
                }

                foreach (Mesh3D mesh in d.RenderDescription.meshes)
                {
                    Meshes.Add(mesh);
                }
            }

            _lines.Points  = Lines;
            _points.Points = Points;

            // remove old meshes from the renderer
            foreach (MeshVisual3D mesh in _meshes)
            {
                _watchView.watch_view.Children.Remove(mesh);
            }

            _meshes.Clear();

            foreach (Mesh3D mesh in Meshes)
            {
                MeshVisual3D vismesh = MakeMeshVisual3D(mesh);
                _watchView.watch_view.Children.Add(vismesh);
                _meshes.Add(vismesh);
            }

            _requiresRedraw = false;
            _isRendering    = false;
        }