using System; using System.Collections.Generic; using System.Text; using System.IO; namespace HH.WMS.Utils.ExcelLibrary.BinaryDrawingFormat { public partial class MsofbtDgg : EscherRecord { /// /// (DrawingGroupId, numShapeIdsUsed) pairs /// public Dictionary GroupIdClusters = new Dictionary(); public override void Decode() { MemoryStream stream = new MemoryStream(Data); BinaryReader reader = new BinaryReader(stream); MaxShapeID = reader.ReadInt32(); NumIDClusters = reader.ReadInt32(); NumSavedShapes = reader.ReadInt32(); NumSavedDrawings = reader.ReadInt32(); IDClusters = new List(); while (stream.Position < stream.Length) { //IDClusters.Add(reader.ReadInt64()); int drawingGroupId = reader.ReadInt32(); int numShapeIdsUsed = reader.ReadInt32(); GroupIdClusters[drawingGroupId] = numShapeIdsUsed; } } public override void Encode() { MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); writer.Write(MaxShapeID); writer.Write(GetNumIDClusters()); writer.Write(NumSavedShapes); writer.Write(NumSavedDrawings); List groupIds = new List(GroupIdClusters.Keys); groupIds.Sort(); //In Excel the clusters are sorted but in PPT they are not foreach (int groudID in groupIds) { writer.Write(groudID); writer.Write(GroupIdClusters[groudID]); } this.Data = stream.ToArray(); this.Size = (UInt32)Data.Length; base.Encode(); } public int GetNumIDClusters() { // for some reason the number of clusters is actually the real number + 1 return GroupIdClusters.Count + 1; } } }