public void Dispose() { Meshes.Clear(); DecorationImages.ForEach(x => x.Image.Dispose()); DecorationImages.Clear(); Configurations.Clear(); }
public void Save(Stream stream) { var packageXml = new XDocument(new XElement("PartPackage")); packageXml.Root.Add(new XElement("Info", new XElement("Part", PartID), new XElement("Description", Description) )); if (Meshes.Any()) { var meshesElem = new XElement("Meshes"); packageXml.Root.Add(meshesElem); foreach (var partMesh in Meshes) { meshesElem.Add(partMesh.Serialize()); } } if (DecorationImages.Any()) { var decoElem = packageXml.Root.AddElement("Decorations"); foreach (var decImg in DecorationImages) { decoElem.Add(decImg.Serialize()); } } if (Configurations.Any()) { var brickElem = packageXml.Root.AddElement("Configurations"); foreach (var brick in Configurations) { var elem = new XElement("Brick", new XAttribute("ElementID", brick.ElementID), new XAttribute("MaterialID", brick.MaterialID)); foreach (var dec in brick.Decorations) { elem.Add(XmlHelper.DefaultSerialize(dec)); } foreach (var subMat in brick.SubMaterials) { elem.Add(XmlHelper.DefaultSerialize(subMat)); } brickElem.Add(elem); } } using (var zipStream = new ZipOutputStream(stream)) { zipStream.SetLevel(1); zipStream.PutNextEntry(new ZipEntry(PACKAGE_XML_FILENAME)); packageXml.Save(zipStream); zipStream.CloseEntry(); if (Primitive != null) { zipStream.PutNextEntry(new ZipEntry("primitive.xml")); Primitive.Save(zipStream); zipStream.CloseEntry(); } foreach (var partMesh in Meshes) { zipStream.PutNextEntry(new ZipEntry($"{MESH_FOLDER}{partMesh.GetFileName()}")); using (var ms = new MemoryStream()) { partMesh.Mesh.Save(ms); ms.Seek(0, SeekOrigin.Begin); ms.CopyTo(zipStream); } zipStream.CloseEntry(); } foreach (var decImg in DecorationImages) { zipStream.PutNextEntry(new ZipEntry($"{DECO_FOLDER}{decImg.GetFileName()}")); decImg.Image.Save(zipStream, decImg.Image.RawFormat); zipStream.CloseEntry(); } } }