/// <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); }
/// <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); }
/// <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; }
/// <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"); }
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"); }