VinnoLogicalCoordinate.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. using System.IO;
  2. namespace fis.Vid.Visuals
  3. {
  4. public enum VinnoUnit
  5. {
  6. None = 0,
  7. percent = 1,
  8. cm = 10,
  9. mm = 11,
  10. inch = 12,
  11. ft = 13,
  12. s = 20,
  13. minute = 21,
  14. hour = 22,
  15. day = 23,
  16. week = 24,
  17. week_day = 25,
  18. Tick = 26,
  19. msec = 27,
  20. degree = 30,
  21. radian = 31,
  22. g = 40,
  23. mg = 41,
  24. ng = 42,
  25. kg = 43,
  26. oz = 44,
  27. lb = 45,
  28. cm2 = 50,
  29. mm2 = 51,
  30. m2 = 52,
  31. cm3 = 60,
  32. mm3 = 61,
  33. ml = 62,
  34. L = 63,
  35. cms = 70,
  36. mms = 71,
  37. ms = 72,
  38. cms2 = 80,
  39. mms2 = 81,
  40. cm3s = 90,
  41. mls = 91,
  42. mlmin = 92,
  43. Lmin = 93,
  44. gcm3 = 100,
  45. gml = 101,
  46. ngml = 102,
  47. mmHg = 110,
  48. mV = 120,
  49. Hz = 130,
  50. KHz = 131,
  51. /// <summary>
  52. /// beats per minute
  53. /// </summary>
  54. HR = 132,
  55. //SI
  56. cm3m2 = 140,
  57. mlm2 = 141,
  58. //CI
  59. cm3sm2 = 150,
  60. mlsm2 = 151,
  61. cm3minm2 = 153,
  62. mlminm2 = 154,
  63. Lminm2 = 155,
  64. /// <summary>
  65. /// MVCF:mean velocity of circumferential fiber shortening
  66. /// </summary>
  67. circs = 160,
  68. //CO
  69. mlbeat = 170,
  70. mm2pa = 180,
  71. d1mpa = 181,
  72. kpa = 182,
  73. mmHgs = 190,
  74. gm2 = 200,
  75. /// AVA Index
  76. cm2m2 = 210
  77. }
  78. public class VinnoLogicalCoordinate
  79. {
  80. public bool IsFlipHorizontal { get; }
  81. public bool IsFlipVertical { get; }
  82. public VinnoRect Region { get; }
  83. public VinnoUnit XUnit { get; }
  84. public VinnoUnit YUnit { get; }
  85. public VinnoLogicalCoordinate(bool isFlipHorizontal, bool isFlipVertical, VinnoRect region, VinnoUnit xUnit, VinnoUnit yUnit)
  86. {
  87. YUnit = yUnit;
  88. XUnit = xUnit;
  89. Region = region;
  90. IsFlipVertical = isFlipVertical;
  91. IsFlipHorizontal = isFlipHorizontal;
  92. }
  93. public byte[] ToBytes()
  94. {
  95. byte[] result;
  96. using (var stream = new MemoryStream())
  97. {
  98. var writer = new VinnoStreamWriter(stream);
  99. writer.WriteBool(IsFlipHorizontal);
  100. writer.WriteBool(IsFlipVertical);
  101. writer.WriteByte((byte)XUnit);
  102. writer.WriteByte((byte)YUnit);
  103. writer.WriteDouble(Region.Left);
  104. writer.WriteDouble(Region.Top);
  105. writer.WriteDouble(Region.Right);
  106. writer.WriteDouble(Region.Bottom);
  107. result = stream.ToArray();
  108. }
  109. return result;
  110. }
  111. public static VinnoLogicalCoordinate FromBytes(byte[] bytes)
  112. {
  113. VinnoLogicalCoordinate result;
  114. using (var stream = new MemoryStream(bytes))
  115. {
  116. stream.Position = 0;
  117. var reader = new VinnoStreamReader(stream);
  118. var isFlipHorizontal = reader.ReadBool();
  119. var isFlipVertical = reader.ReadBool();
  120. var xUnit = (VinnoUnit)reader.ReadByte();
  121. var yUnit = (VinnoUnit)reader.ReadByte();
  122. var left = reader.ReadDouble();
  123. var top = reader.ReadDouble();
  124. var right = reader.ReadDouble();
  125. var bottom = reader.ReadDouble();
  126. var region = new VinnoRect(new VinnoPoint(left, top), new VinnoPoint(right, bottom));
  127. result = new VinnoLogicalCoordinate(isFlipHorizontal,isFlipVertical,region,xUnit,yUnit);
  128. }
  129. return result;
  130. }
  131. }
  132. }