Пример #1
0
 public void Dispose()
 {
     Meshes.Clear();
     DecorationImages.ForEach(x => x.Image.Dispose());
     DecorationImages.Clear();
     Configurations.Clear();
 }
Пример #2
0
        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();
                }
            }
        }