using System; using System.Collections.Generic; using System.Text; using System.IO; namespace HH.WMS.Utils.ExcelLibrary.BinaryDrawingFormat { public partial class MsofbtOPT : EscherRecord { public List Properties = new List(); public void Add(PropertyIDs propertyID, UInt32 propertyValue) { ShapeProperty prop = new ShapeProperty(); prop.PropertyID = propertyID; prop.PropertyValue = propertyValue; prop.IsBlipID = propertyID == PropertyIDs.BlipId; Properties.Add(prop); } public override void Decode() { MemoryStream stream = new MemoryStream(Data); BinaryReader reader = new BinaryReader(stream); Properties.Clear(); for (int index = 0; index < this.Instance; index++) { Properties.Add(ShapeProperty.Decode(reader)); } foreach (ShapeProperty property in Properties) { if (property.IsComplex) { int size = (int)property.PropertyValue; property.ComplexData = reader.ReadBytes(size); } } } public override void Encode() { this.Instance = (ushort)this.Properties.Count; this.Version = 3; MemoryStream stream = new MemoryStream(); BinaryWriter writer = new BinaryWriter(stream); Properties.Sort(delegate(ShapeProperty p1, ShapeProperty p2) { return (int)p1.PropertyID - (int)p2.PropertyID; }); foreach (ShapeProperty property in Properties) { property.Encode(writer); } foreach (ShapeProperty property in Properties) { if (property.IsComplex) { writer.Write(property.ComplexData); } } this.Data = stream.ToArray(); this.Size = (UInt32)Data.Length; base.Encode(); } } }