CSEMDataMsr.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Xml;
  7. namespace OTSDataType
  8. {
  9. public class CSEMDataMsr:ISlo
  10. {
  11. const double MAGNIFICATION_MIN = 20.0;
  12. private int m_nScanFieldWidth;
  13. private int m_nScanFieldHeight;
  14. private int m_nScanFieldSize100;
  15. private double m_dWorkingDistance;
  16. private int m_nTotalFields;
  17. private int m_nScanFieldHeight100;
  18. private double m_magnification;
  19. public CSEMDataMsr()
  20. {
  21. // initialization
  22. Init();
  23. }
  24. void Init()
  25. {
  26. m_nScanFieldWidth = 0;
  27. m_nScanFieldSize100 = 1142;
  28. m_dWorkingDistance = 0;
  29. m_nTotalFields = 0;
  30. m_magnification = 0;
  31. }
  32. public CSEMDataMsr ( CSEMDataMsr a_oSource)
  33. {
  34. // copy data over
  35. Duplicate(a_oSource);
  36. }
  37. void Duplicate( CSEMDataMsr a_oSource)
  38. {
  39. // copy data over
  40. m_nScanFieldWidth = a_oSource.m_nScanFieldWidth;
  41. m_nScanFieldSize100 = a_oSource.m_nScanFieldSize100;
  42. m_dWorkingDistance = a_oSource.m_dWorkingDistance;
  43. m_magnification = a_oSource.m_magnification;
  44. m_nTotalFields = a_oSource.m_nTotalFields;
  45. }
  46. bool Equals( CSEMDataMsr a_oSource)
  47. {
  48. return m_nScanFieldWidth == a_oSource.m_nScanFieldWidth &&
  49. m_nScanFieldSize100 == a_oSource.m_nScanFieldSize100 &&
  50. Math.Abs(m_dWorkingDistance - a_oSource.m_dWorkingDistance)<double.MinValue &&
  51. m_nTotalFields == a_oSource.m_nTotalFields;
  52. }
  53. public int GetScanFieldSize() { return m_nScanFieldWidth; }
  54. public void SetScanFieldWidth(int a_nScanFieldWidth) { m_nScanFieldWidth = a_nScanFieldWidth; }
  55. public void SetScanFieldHeight(int a_nScanFieldHeight) { m_nScanFieldHeight = a_nScanFieldHeight; }
  56. // scan field size 100 (micros)
  57. public int GetScanFieldSize100() { return m_nScanFieldSize100; }
  58. public void SetScanFieldSize100(int a_nScanFieldSize100) { m_nScanFieldSize100 = a_nScanFieldSize100; }
  59. public void SetScanFieldHeight100(int a_nScanFieldHeight100) { m_nScanFieldHeight100 = a_nScanFieldHeight100; }
  60. // working distance
  61. public double GetWorkingDistance() { return m_dWorkingDistance; }
  62. public void SetWorkingDistance(double a_dWorkingDistance) { m_dWorkingDistance = a_dWorkingDistance; }
  63. // total fields
  64. public int GetTotalFields() { return m_nTotalFields; }
  65. public void SetTotalFields(int a_nTotalFields) { m_nTotalFields = a_nTotalFields; }
  66. public double GetMagnification()
  67. {
  68. //if (m_magnification == 0)
  69. //{
  70. // // magnification
  71. // double dMag = 0.0;
  72. // // convert scan field size to magnification
  73. // if (m_nScanFieldWidth > 0)
  74. // {
  75. // dMag = (double)m_nScanFieldSize100 * 100.0 / (double)m_nScanFieldWidth;
  76. // }
  77. // m_magnification = dMag;
  78. //}
  79. // return magnification
  80. return m_magnification;
  81. }
  82. public void SetMagnification(double a_dMag)
  83. {
  84. if (a_dMag < MAGNIFICATION_MIN)
  85. {
  86. return;
  87. }
  88. m_magnification = a_dMag;
  89. m_nScanFieldWidth = (int)(100.0 * (double)m_nScanFieldSize100 / a_dMag + 0.5);
  90. m_nScanFieldHeight= (int)(100.0 * (double)m_nScanFieldHeight100 / a_dMag + 0.5);
  91. }
  92. public override void Serialize(bool isStoring, XmlDocument classDoc, XmlNode rootNode)
  93. {
  94. xInt xnScanFieldSize=new xInt();
  95. xInt xnScanFieldHeight = new xInt();
  96. xInt xnScanFieldSize100=new xInt();
  97. xDouble xdWorkingDistance=new xDouble();
  98. xDouble xMag = new xDouble();
  99. xInt xnTotalFields=new xInt();
  100. Slo slo=new Slo();
  101. slo.Register("ScanFieldSize", xnScanFieldSize);
  102. slo.Register("ScanFieldHeight", xnScanFieldHeight);
  103. slo.Register("ScanFieldSize100", xnScanFieldSize100);
  104. slo.Register("WorkingDistance", xdWorkingDistance);
  105. slo.Register("Magnification", xMag);
  106. slo.Register("TotalFields", xnTotalFields);
  107. if (isStoring)
  108. {
  109. xnScanFieldSize.AssignValue(m_nScanFieldWidth);
  110. xnScanFieldHeight.AssignValue(m_nScanFieldHeight);
  111. xnScanFieldSize100.AssignValue(m_nScanFieldSize100);
  112. xdWorkingDistance.AssignValue(m_dWorkingDistance);
  113. xMag.AssignValue(m_magnification);
  114. xnTotalFields.AssignValue(m_nTotalFields);
  115. slo.Serialize(true, classDoc, rootNode);
  116. }
  117. else
  118. {
  119. slo.Serialize(false, classDoc, rootNode);
  120. m_nScanFieldWidth = xnScanFieldSize.value();
  121. m_nScanFieldSize100 = xnScanFieldSize100.value();
  122. m_dWorkingDistance = xdWorkingDistance.value();
  123. m_magnification = xMag.value();
  124. m_nTotalFields = xnTotalFields.value();
  125. }
  126. }
  127. }
  128. }