internal void AddChild(MeshGeometry meshGeometry) { if (_children == null) { _children = new List <MeshGeometry>(); } _children.Add(meshGeometry); }
private static BoundingBox WriteGeometry(MeshGeometry Mesh, XmlWriter Writer) { BoundingBox bb = new BoundingBox(); foreach (var item in Mesh.Children) { MeshGeometry m = item as MeshGeometry; if (m != null) { Writer.WriteStartElement("Mesh"); BoundingBox childBB = WriteGeometry(m, Writer); bb.IncludeBoundingBox(childBB); Writer.WriteEndElement(); } } if (Mesh.Positions.Count == Mesh.Normals.Count && Mesh.Positions.Count > 0) { for (int i = 0; i < Mesh.Normals.Count; i++) { bb.IncludePoint(Mesh.Positions[i]); Writer.WriteStartElement("PN"); Writer.WriteAttributeString("PX", Mesh.Positions[i].X.ToString()); Writer.WriteAttributeString("PY", Mesh.Positions[i].Y.ToString()); Writer.WriteAttributeString("PZ", Mesh.Positions[i].Z.ToString()); Writer.WriteAttributeString("NX", Mesh.Normals[i].X.ToString()); Writer.WriteAttributeString("NY", Mesh.Normals[i].Y.ToString()); Writer.WriteAttributeString("NZ", Mesh.Normals[i].Z.ToString()); Writer.WriteEndElement(); } for (int i = 0; i < Mesh.TriangleIndices.Count;) { Writer.WriteStartElement("F"); Writer.WriteAttributeString("I1", Mesh.TriangleIndices[i++].ToString()); Writer.WriteAttributeString("I2", Mesh.TriangleIndices[i++].ToString()); Writer.WriteAttributeString("I3", Mesh.TriangleIndices[i++].ToString()); Writer.WriteEndElement(); } } if (bb.IsValid) { Writer.WriteStartElement("BB"); Writer.WriteAttributeString("MnX", bb.PointMin.X.ToString()); Writer.WriteAttributeString("MnY", bb.PointMin.Y.ToString()); Writer.WriteAttributeString("MnZ", bb.PointMin.Z.ToString()); Writer.WriteAttributeString("MxX", bb.PointMax.X.ToString()); Writer.WriteAttributeString("MxY", bb.PointMax.Y.ToString()); Writer.WriteAttributeString("MxZ", bb.PointMax.Z.ToString()); Writer.WriteEndElement(); } return(bb); }
private MeshGeometry ReadTriangulatedModelAtCurrentPosition(int indent) { MeshGeometry mesh = new MeshGeometry(); int iPositionsCount = _geomReader.ReadInt32(); for (int iPos = 0; iPos < iPositionsCount; iPos++) { mesh.Positions.Add( new Point3D( _geomReader.ReadSingle(), _geomReader.ReadSingle(), _geomReader.ReadSingle()) ); } int iIndexCount = _geomReader.ReadInt32(); for (int iIdx = 0; iIdx < iIndexCount; iIdx++) { mesh.TriangleIndices.Add( _geomReader.ReadInt32() ); } int iNormalsCount = _geomReader.ReadInt32(); for (int iNrm = 0; iNrm < iNormalsCount; iNrm++) { mesh.Normals.Add( new Vector3D( _geomReader.ReadSingle(), _geomReader.ReadSingle(), _geomReader.ReadSingle()) ); } int iChildrenCount = _geomReader.ReadInt32(); Debug.Write(new string(' ', indent * 2)); Debug.WriteLine("Pos/Nrm: " + iPositionsCount + " Idx: " + iIndexCount + " Chld: " + iChildrenCount); for (int iChld = 0; iChld < iChildrenCount; iChld++) { mesh.AddChild(ReadTriangulatedModelAtCurrentPosition(indent + 1)); } return(mesh); }
internal void AddChild(MeshGeometry meshGeometry) { if (_children == null) _children = new List<MeshGeometry>(); _children.Add(meshGeometry); }
private MeshGeometry ReadTriangulatedModelAtCurrentPosition(int indent) { MeshGeometry mesh = new MeshGeometry(); int iPositionsCount = _geomReader.ReadInt32(); for (int iPos = 0; iPos < iPositionsCount; iPos++) { mesh.Positions.Add( new Point3D( _geomReader.ReadSingle(), _geomReader.ReadSingle(), _geomReader.ReadSingle()) ); } int iIndexCount = _geomReader.ReadInt32(); for (int iIdx = 0; iIdx < iIndexCount; iIdx++) { mesh.TriangleIndices.Add( _geomReader.ReadInt32() ); } int iNormalsCount = _geomReader.ReadInt32(); for (int iNrm = 0; iNrm < iNormalsCount; iNrm++) { mesh.Normals.Add( new Vector3D( _geomReader.ReadSingle(), _geomReader.ReadSingle(), _geomReader.ReadSingle()) ); } int iChildrenCount = _geomReader.ReadInt32(); Debug.Write(new string(' ', indent*2)); Debug.WriteLine("Pos/Nrm: " + iPositionsCount + " Idx: " + iIndexCount + " Chld: " + iChildrenCount); for (int iChld = 0; iChld < iChildrenCount; iChld++) { mesh.AddChild(ReadTriangulatedModelAtCurrentPosition(indent + 1)); } return mesh; }
private static BoundingBox WriteGeometry(MeshGeometry Mesh, XmlWriter Writer) { BoundingBox bb = new BoundingBox(); foreach (var item in Mesh.Children) { MeshGeometry m = item as MeshGeometry; if (m != null) { Writer.WriteStartElement("Mesh"); BoundingBox childBB = WriteGeometry(m, Writer); bb.IncludeBoundingBox(childBB); Writer.WriteEndElement(); } } if (Mesh.Positions.Count == Mesh.Normals.Count && Mesh.Positions.Count > 0) { for (int i = 0; i < Mesh.Normals.Count; i++) { bb.IncludePoint(Mesh.Positions[i]); Writer.WriteStartElement("PN"); Writer.WriteAttributeString("PX", Mesh.Positions[i].X.ToString()); Writer.WriteAttributeString("PY", Mesh.Positions[i].Y.ToString()); Writer.WriteAttributeString("PZ", Mesh.Positions[i].Z.ToString()); Writer.WriteAttributeString("NX", Mesh.Normals[i].X.ToString()); Writer.WriteAttributeString("NY", Mesh.Normals[i].Y.ToString()); Writer.WriteAttributeString("NZ", Mesh.Normals[i].Z.ToString()); Writer.WriteEndElement(); } for (int i = 0; i < Mesh.TriangleIndices.Count;) { Writer.WriteStartElement("F"); Writer.WriteAttributeString("I1", Mesh.TriangleIndices[i++].ToString()); Writer.WriteAttributeString("I2", Mesh.TriangleIndices[i++].ToString()); Writer.WriteAttributeString("I3", Mesh.TriangleIndices[i++].ToString()); Writer.WriteEndElement(); } } if (bb.IsValid) { Writer.WriteStartElement("BB"); Writer.WriteAttributeString("MnX", bb.PointMin.X.ToString()); Writer.WriteAttributeString("MnY", bb.PointMin.Y.ToString()); Writer.WriteAttributeString("MnZ", bb.PointMin.Z.ToString()); Writer.WriteAttributeString("MxX", bb.PointMax.X.ToString()); Writer.WriteAttributeString("MxY", bb.PointMax.Y.ToString()); Writer.WriteAttributeString("MxZ", bb.PointMax.Z.ToString()); Writer.WriteEndElement(); } return bb; }