/// <summary> /// Writes model information from component bodies. /// </summary> /// <param name="library">Storage where serialize the model data.</param> private void WriteLibraryModels(CFStorage library) { var models = library.GetOrAddStorage("Models"); var bodies = Data.Items.SelectMany(c => c.GetPrimitivesOfType <PcbComponentBody>(false)) .Where(c => c.ModelEmbed).ToList(); WriteHeader(models, bodies.Count); models.GetOrAddStream("Data").Write(writer => { for (var i = 0; i < bodies.Count; ++i) { var body = bodies[i]; var parameters = new ParameterCollection { { "ID", body.ModelId }, { "ROTX", body.Model3DRotX }, { "ROTY", body.Model3DRotY }, { "ROTZ", body.Model3DRotZ }, { "DZ", body.Model3DDz.ToInt32() }, { "CHECKSUM", body.ModelChecksum }, { "EMBED", body.ModelEmbed }, { "NAME", body.Identifier + ".STEP" }, }; WriteBlock(writer, w => WriteParameters(w, parameters)); // models are stored as ASCII STEP files but using zlib compression var modelCompressedData = CompressZlibData(Encoding.ASCII.GetBytes(body.StepModel)); models.GetOrAddStream($"{i}").SetData(modelCompressedData); } }); }
private static void WriteUniqueIdPrimitiveInformation(CFStorage componentStorage, PcbComponent component) { var uniqueIdPrimitiveInformation = componentStorage.GetOrAddStorage("UniqueIdPrimitiveInformation"); var primitives = component.Primitives.Where(p => !(p is PcbUnknown)).ToList(); WriteHeader(uniqueIdPrimitiveInformation, primitives.Count); uniqueIdPrimitiveInformation.GetOrAddStream("Data").Write(writer => { for (int i = 0; i < primitives.Count; ++i) { var primitive = primitives[i]; var parameters = new ParameterCollection { { "PRIMITIVEINDEX", i }, { "PRIMITIVEOBJECTID", primitive.ObjectId.ToString() }, { "UNIQUEID", primitive.UniqueId } }; WriteBlock(writer, w => WriteParameters(w, parameters)); } }); }