CSEMDataMsr.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. return m_magnification;
  69. }
  70. public void SetMagnification(double a_dMag)
  71. {
  72. if (a_dMag < MAGNIFICATION_MIN)
  73. {
  74. return;
  75. }
  76. m_magnification = a_dMag;
  77. m_nScanFieldWidth = (int)(100.0 * (double)m_nScanFieldSize100 / a_dMag + 0.5);
  78. m_nScanFieldHeight= (int)(100.0 * (double)m_nScanFieldHeight100 / a_dMag + 0.5);
  79. }
  80. public override void Serialize(bool isStoring, XmlDocument classDoc, XmlNode rootNode)
  81. {
  82. xInt xnScanFieldSize=new xInt();
  83. xInt xnScanFieldHeight = new xInt();
  84. xInt xnScanFieldSize100=new xInt();
  85. xDouble xdWorkingDistance=new xDouble();
  86. xDouble xMag = new xDouble();
  87. xInt xnTotalFields=new xInt();
  88. Slo slo=new Slo();
  89. slo.Register("ScanFieldSize", xnScanFieldSize);
  90. slo.Register("ScanFieldHeight", xnScanFieldHeight);
  91. slo.Register("ScanFieldSize100", xnScanFieldSize100);
  92. slo.Register("WorkingDistance", xdWorkingDistance);
  93. slo.Register("Magnification", xMag);
  94. slo.Register("TotalFields", xnTotalFields);
  95. if (isStoring)
  96. {
  97. xnScanFieldSize.AssignValue(m_nScanFieldWidth);
  98. xnScanFieldHeight.AssignValue(m_nScanFieldHeight);
  99. xnScanFieldSize100.AssignValue(m_nScanFieldSize100);
  100. xdWorkingDistance.AssignValue(m_dWorkingDistance);
  101. xMag.AssignValue(m_magnification);
  102. xnTotalFields.AssignValue(m_nTotalFields);
  103. slo.Serialize(true, classDoc, rootNode);
  104. }
  105. else
  106. {
  107. slo.Serialize(false, classDoc, rootNode);
  108. m_nScanFieldWidth = xnScanFieldSize.value();
  109. m_nScanFieldSize100 = xnScanFieldSize100.value();
  110. m_dWorkingDistance = xdWorkingDistance.value();
  111. m_magnification = xMag.value();
  112. m_nTotalFields = xnTotalFields.value();
  113. }
  114. }
  115. }
  116. }