/// <summary> /// Initializes a new instance of the <see cref="MeshModelPart"/> class. /// </summary> /// <param name="metaData">The meta data.</param> /// <param name="meshes">The meshes.</param> /// <param name="edges">The edges.</param> /// <param name="meshValueLists">A list of data values for this model (deviations, minima, maxima, mean values, etc.).</param> /// <param name="thumbnail">The thumbnail.</param> public MeshModelPart(MeshModelMetadata metaData, IEnumerable <Mesh> meshes, IEnumerable <Edge> edges = null, IEnumerable <MeshValueList> meshValueLists = null, byte[] thumbnail = null) { ConstructGeometry(meshes, edges); Metadata = metaData; UpdateTriangulationHash(); MeshValues = (meshValueLists ?? new MeshValueList[0]).ToArray(); CheckMeshValueIntegrity(); Metadata.MeshValueEntries = MeshValues.Select(m => m.Entry).ToArray(); Thumbnail = thumbnail; }
/// <summary> /// Creates the specified <paramref name="subFolder"/> in the specified <paramref name="zipFile"/> and writes the serialized data into it. /// If the <paramref name="subFolder"/> is null or empty, the data will be serialized into the root directory of the zip archive . /// </summary> public void Serialize(ZipArchive zipFile, string subFolder = "") { Metadata.MeshValueEntries = MeshValues.Select(v => v.Entry).ToArray(); using (var entryStream = zipFile.CreateNormalizedEntry(Path.Combine(subFolder, "Metadata.xml"), CompressionLevel.Optimal).Open()) { Metadata.WriteTo(entryStream, true); } // Vorschaubild if (HasThumbnail) { using (var entryStream = zipFile.CreateNormalizedEntry(Path.Combine(subFolder, "PreviewImage.png"), CompressionLevel.NoCompression).Open()) { entryStream.Write(_Thumbnail, 0, _Thumbnail.Length); } } // Triangulierungsdaten schreiben using (var entryStream = zipFile.CreateNormalizedEntry(Path.Combine(subFolder, "Meshes.dat"), CompressionLevel.Fastest).Open()) using (var binaryWriter = new BinaryWriter(entryStream, Encoding.UTF8, true)) { binaryWriter.Write(Meshes.Length); foreach (var mesh in Meshes) { mesh.Write(binaryWriter); } } // Edgedaten schreiben using (var entryStream = zipFile.CreateNormalizedEntry(Path.Combine(subFolder, "Edges.dat"), CompressionLevel.Fastest).Open()) using (var binaryWriter = new BinaryWriter(entryStream, Encoding.UTF8, true)) { binaryWriter.Write(Edges.Length); foreach (var edge in Edges) { edge.Write(binaryWriter); } } // Datenwerte schreiben foreach (var entry in MeshValues) { using (var entryStream = zipFile.CreateNormalizedEntry(Path.Combine(subFolder, entry.Entry.Filename), CompressionLevel.Fastest).Open()) using (var binaryWriter = new BinaryWriter(entryStream, Encoding.UTF8, true)) { entry.Write(binaryWriter); } } }