Example #1
0
        /// <summary>
        /// Creates a mesh from the loaded file.
        /// </summary>
        /// <returns>
        /// A <see cref="Mesh3D" />.
        /// </returns>
        public Mesh3D CreateMesh()
        {
            var mesh = new Mesh3D();

            if (Vertices.Count > 0)
            {
                foreach (var vert in Vertices)
                {
                    mesh.Vertices.Add(vert);
                }
            }

            if (Faces.Count > 0)
            {
                foreach (var face in Faces)
                {
                    mesh.Faces.Add((int[])face.Clone());
                }
            }

            if (TextureCoordinates.Count > 0)
            {
                foreach (Point item in TextureCoordinates)
                {
                    mesh.TextureCoordinates.Add(item);
                }
            }
            if (TextureCoordinates.Count == 0)
            {
                TextureCoordinates = null;
            }
            return(mesh);
        }
Example #2
0
        /// <summary>
        /// Creates a mesh from the loaded file.
        /// </summary>
        /// <returns>
        /// A <see cref="Mesh3D" />.
        /// </returns>
        public Mesh3D CreateMesh()
        {
            var mesh = new Mesh3D();

            var vertexElement = Body.Find(item => item.Name == "vertex");

            if (vertexElement != null && vertexElement.Count > 0)
            {
                foreach (var vertProp in vertexElement.Instances)
                {
                    var vertPropList = vertProp.ToList();
                    var xProp        = vertPropList.Find(item => !item.IsList && item.Name == "x");
                    var yProp        = vertPropList.Find(item => !item.IsList && item.Name == "y");
                    var zProp        = vertPropList.Find(item => !item.IsList && item.Name == "z");

                    if (xProp != null && yProp != null && zProp != null)
                    {
                        var xCoord = double.Parse(xProp.Value?.ToString() ?? "0");
                        var yCoord = double.Parse(yProp.Value?.ToString() ?? "0");
                        var zCoord = double.Parse(zProp.Value?.ToString() ?? "0");
                        var vertex = new Point3D(xCoord, yCoord, zCoord);
                        mesh.Vertices.Add(vertex);
                    }

                    //var sProp = vertPropList.Find(item => !item.IsList && item.Name == "s");
                    //var tProp = vertPropList.Find(item => !item.IsList && item.Name == "t");

                    //if (sProp != null && tProp != null)
                    //{
                    //    var sCoord = double.Parse(sProp.Value.ToString());
                    //    var tCoord = double.Parse(tProp.Value.ToString());
                    //    var texturePt = new Point(sCoord, tCoord);
                    //    mesh.TextureCoordinates.Add(texturePt);
                    //}
                }
            }

            var faceElement = Body.Find(item => item.Name == "face");

            if (faceElement != null && faceElement.Count > 0)
            {
                foreach (var faceProp in faceElement.Instances)
                {
                    var vertexIndicesProperties = (from item in faceProp where item.IsList && item.Name == "vertex_indices" || item.Name == "vertex_index" select item).ToArray();
                    if (vertexIndicesProperties.Length > 0)
                    {
                        var vertexIndices = new List <int>();
                        foreach (var item in vertexIndicesProperties[0].ListContentValues)
                        {
                            vertexIndices.Add(Convert.ToInt32(item ?? "0"));
                        }
                        mesh.Faces.Add(vertexIndices.ToArray());
                    }
                }
            }

            return(mesh);
        }
Example #3
0
        /// <summary>
        /// Creates a mesh from the loaded file.
        /// </summary>
        /// <returns>
        /// A <see cref="Mesh3D" />.
        /// </returns>
        public Mesh3D CreateMesh()
        {
            var mesh = new Mesh3D();
            foreach (var v in this.Vertices)
            {
                mesh.Vertices.Add(v);
            }

            foreach (var face in this.Faces)
            {
                mesh.Faces.Add((int[])face.Clone());
            }

            return mesh;
        }
Example #4
0
        /// <summary>
        /// Creates a mesh from the loaded file.
        /// </summary>
        /// <returns>
        /// A <see cref="Mesh3D" />.
        /// </returns>
        public Mesh3D CreateMesh()
        {
            var mesh = new Mesh3D();

            foreach (var v in this.Vertices)
            {
                mesh.Vertices.Add(v);
            }

            foreach (var face in this.Faces)
            {
                mesh.Faces.Add((int[])face.Clone());
            }

            return(mesh);
        }
        private void RenderDrawables(List<IDrawable> drawables)
        {
            List<Point3D> points = new List<Point3D>();
            List<Point3D> lines = new List<Point3D>();
            List<Mesh3D> meshes = new List<Mesh3D>();
            List<Point3D> xAxes = new List<Point3D>();
            List<Point3D> yAxes = new List<Point3D>();
            List<Point3D> zAxes = new List<Point3D>();

            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 m in d.RenderDescription.meshes)
                {
                    meshes.Add(m);
                }

                foreach (Point3D p in d.RenderDescription.xAxisPoints)
                {
                    xAxes.Add(p);
                }

                foreach (Point3D p in d.RenderDescription.yAxisPoints)
                {
                    yAxes.Add(p);
                }

                foreach (Point3D p in d.RenderDescription.zAxisPoints)
                {
                    zAxes.Add(p);
                }
            }

            _pointsCache = points;
            _linesCache = lines;
            _meshCache = MergeMeshes(meshes);
            _xAxisCache = xAxes;
            _yAxisCache = yAxes;
            _zAxisCache = zAxes;

            RaisePropertyChanged("HelixPoints");
            RaisePropertyChanged("HelixLines");
            RaisePropertyChanged("HelixMesh");
            RaisePropertyChanged("HelixXAxes");
            RaisePropertyChanged("HelixYAxes");
            RaisePropertyChanged("HelixZAxes");
        }
        Mesh3D MergeMeshes(List<Mesh3D> meshes)
        {
            if (meshes.Count == 0)
                return null;

            Mesh3D fullMesh = new Mesh3D();

            List<Point3D> positions = new List<Point3D>();
            List<int> triangleIndices = new List<int>();

            int offset = 0;
            foreach (Mesh3D m in meshes)
            {
                positions.AddRange(m.Vertices);

                foreach (int[] face in m.Faces)
                {
                    triangleIndices.Add(face[0] + offset);
                    triangleIndices.Add(face[1] + offset);
                    triangleIndices.Add(face[2] + offset);
                }

                offset = positions.Count;
            }

            return new Mesh3D(positions, triangleIndices);
        }
        //private void RenderDrawables(List<IDrawable> drawables)
        private void RenderDrawables()
        {
            List<Point3D> points = new List<Point3D>();
            List<Point3D> lines = new List<Point3D>();
            List<Mesh3D> meshes = new List<Mesh3D>();
            List<Point3D> xAxes = new List<Point3D>();
            List<Point3D> yAxes = new List<Point3D>();
            List<Point3D> zAxes = new List<Point3D>();

            //foreach (IDrawable d in drawables)
            foreach (KeyValuePair<Guid, RenderDescription> kvp in dynSettings.Controller.RenderDescriptions)
            {
                var rd = kvp.Value as RenderDescription;

                if (rd == null)
                    continue;

                //d.Draw();

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

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

                //foreach (Mesh3D m in d.RenderDescription.meshes)
                foreach (Mesh3D m in rd.meshes)
                {
                    meshes.Add(m);
                }

                //foreach (Point3D p in d.RenderDescription.xAxisPoints)
                foreach (Point3D p in rd.xAxisPoints)
                {
                    xAxes.Add(p);
                }

                //foreach (Point3D p in d.RenderDescription.yAxisPoints)
                foreach (Point3D p in rd.yAxisPoints)
                {
                    yAxes.Add(p);
                }

                //foreach (Point3D p in d.RenderDescription.zAxisPoints)
                foreach (Point3D p in rd.zAxisPoints)
                {
                    zAxes.Add(p);
                }
            }

            _pointsCache = points;
            _linesCache = lines;
            _meshCache = MergeMeshes(meshes);
            _xAxisCache = xAxes;
            _yAxisCache = yAxes;
            _zAxisCache = zAxes;

            RaisePropertyChanged("HelixPoints");
            RaisePropertyChanged("HelixLines");
            RaisePropertyChanged("HelixMesh");
            RaisePropertyChanged("HelixXAxes");
            RaisePropertyChanged("HelixYAxes");
            RaisePropertyChanged("HelixZAxes");
        }
Example #8
0
        MeshVisual3D MakeMeshVisual3D(Mesh3D mesh)
        {
            MeshVisual3D vismesh = new MeshVisual3D { Content = new GeometryModel3D { Geometry = mesh.ToMeshGeometry3D(), Material = Materials.White } };

            return vismesh;
        }
        private void RenderDrawables(List<IDrawable> drawables)
        {
            List<Point3D> points = new List<Point3D>();
            List<Point3D> lines = new List<Point3D>();
            List<Mesh3D> meshes = new List<Mesh3D>();

            foreach (IDrawable d in drawables)
            {
                RenderDescription rd = d.Draw();

                foreach (Point3D p in rd.points)
                {
                    points.Add(p);
                }

                foreach (Point3D p in rd.lines)
                {
                    lines.Add(p);
                }

                foreach (Mesh3D m in rd.meshes)
                {
                    meshes.Add(m);
                }
            }

            _pointsCache = points;
            _linesCache = lines;

            _meshCache = MergeMeshes(meshes);

            RaisePropertyChanged("HelixPoints");
            RaisePropertyChanged("HelixLines");
            RaisePropertyChanged("HelixMesh");
        }