using System.IO; namespace fis.Vid.Visuals { public enum VinnoUnit { None = 0, percent = 1, cm = 10, mm = 11, inch = 12, ft = 13, s = 20, minute = 21, hour = 22, day = 23, week = 24, week_day = 25, Tick = 26, msec = 27, degree = 30, radian = 31, g = 40, mg = 41, ng = 42, kg = 43, oz = 44, lb = 45, cm2 = 50, mm2 = 51, m2 = 52, cm3 = 60, mm3 = 61, ml = 62, L = 63, cms = 70, mms = 71, ms = 72, cms2 = 80, mms2 = 81, cm3s = 90, mls = 91, mlmin = 92, Lmin = 93, gcm3 = 100, gml = 101, ngml = 102, mmHg = 110, mV = 120, Hz = 130, KHz = 131, /// /// beats per minute /// HR = 132, //SI cm3m2 = 140, mlm2 = 141, //CI cm3sm2 = 150, mlsm2 = 151, cm3minm2 = 153, mlminm2 = 154, Lminm2 = 155, /// /// MVCF:mean velocity of circumferential fiber shortening /// circs = 160, //CO mlbeat = 170, mm2pa = 180, d1mpa = 181, kpa = 182, mmHgs = 190, gm2 = 200, /// AVA Index cm2m2 = 210 } public class VinnoLogicalCoordinate { public bool IsFlipHorizontal { get; } public bool IsFlipVertical { get; } public VinnoRect Region { get; } public VinnoUnit XUnit { get; } public VinnoUnit YUnit { get; } public VinnoLogicalCoordinate(bool isFlipHorizontal, bool isFlipVertical, VinnoRect region, VinnoUnit xUnit, VinnoUnit yUnit) { YUnit = yUnit; XUnit = xUnit; Region = region; IsFlipVertical = isFlipVertical; IsFlipHorizontal = isFlipHorizontal; } public byte[] ToBytes() { byte[] result; using (var stream = new MemoryStream()) { var writer = new VinnoStreamWriter(stream); writer.WriteBool(IsFlipHorizontal); writer.WriteBool(IsFlipVertical); writer.WriteByte((byte)XUnit); writer.WriteByte((byte)YUnit); writer.WriteDouble(Region.Left); writer.WriteDouble(Region.Top); writer.WriteDouble(Region.Right); writer.WriteDouble(Region.Bottom); result = stream.ToArray(); } return result; } public static VinnoLogicalCoordinate FromBytes(byte[] bytes) { VinnoLogicalCoordinate result; using (var stream = new MemoryStream(bytes)) { stream.Position = 0; var reader = new VinnoStreamReader(stream); var isFlipHorizontal = reader.ReadBool(); var isFlipVertical = reader.ReadBool(); var xUnit = (VinnoUnit)reader.ReadByte(); var yUnit = (VinnoUnit)reader.ReadByte(); var left = reader.ReadDouble(); var top = reader.ReadDouble(); var right = reader.ReadDouble(); var bottom = reader.ReadDouble(); var region = new VinnoRect(new VinnoPoint(left, top), new VinnoPoint(right, bottom)); result = new VinnoLogicalCoordinate(isFlipHorizontal,isFlipVertical,region,xUnit,yUnit); } return result; } } }