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;
}
}
}