using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml; namespace OTSDataType { public class CSEMDataMsr:ISlo { const double MAGNIFICATION_MIN = 20.0; private int m_nScanFieldWidth; private int m_nScanFieldHeight; private int m_nScanFieldSize100; private double m_dWorkingDistance; private int m_nTotalFields; private int m_nScanFieldHeight100; private double m_magnification; public CSEMDataMsr() { // initialization Init(); } void Init() { m_nScanFieldWidth = 0; m_nScanFieldSize100 = 1142; m_dWorkingDistance = 0; m_nTotalFields = 0; m_magnification = 0; } public CSEMDataMsr ( CSEMDataMsr a_oSource) { // copy data over Duplicate(a_oSource); } void Duplicate( CSEMDataMsr a_oSource) { // copy data over m_nScanFieldWidth = a_oSource.m_nScanFieldWidth; m_nScanFieldSize100 = a_oSource.m_nScanFieldSize100; m_dWorkingDistance = a_oSource.m_dWorkingDistance; m_magnification = a_oSource.m_magnification; m_nTotalFields = a_oSource.m_nTotalFields; } bool Equals( CSEMDataMsr a_oSource) { return m_nScanFieldWidth == a_oSource.m_nScanFieldWidth && m_nScanFieldSize100 == a_oSource.m_nScanFieldSize100 && Math.Abs(m_dWorkingDistance - a_oSource.m_dWorkingDistance) 0) // { // dMag = (double)m_nScanFieldSize100 * 100.0 / (double)m_nScanFieldWidth; // } // m_magnification = dMag; //} // return magnification return m_magnification; } public void SetMagnification(double a_dMag) { if (a_dMag < MAGNIFICATION_MIN) { return; } m_magnification = a_dMag; m_nScanFieldWidth = (int)(100.0 * (double)m_nScanFieldSize100 / a_dMag + 0.5); m_nScanFieldHeight= (int)(100.0 * (double)m_nScanFieldHeight100 / a_dMag + 0.5); } public override void Serialize(bool isStoring, XmlDocument classDoc, XmlNode rootNode) { xInt xnScanFieldSize=new xInt(); xInt xnScanFieldHeight = new xInt(); xInt xnScanFieldSize100=new xInt(); xDouble xdWorkingDistance=new xDouble(); xDouble xMag = new xDouble(); xInt xnTotalFields=new xInt(); Slo slo=new Slo(); slo.Register("ScanFieldSize", xnScanFieldSize); slo.Register("ScanFieldHeight", xnScanFieldHeight); slo.Register("ScanFieldSize100", xnScanFieldSize100); slo.Register("WorkingDistance", xdWorkingDistance); slo.Register("Magnification", xMag); slo.Register("TotalFields", xnTotalFields); if (isStoring) { xnScanFieldSize.AssignValue(m_nScanFieldWidth); xnScanFieldHeight.AssignValue(m_nScanFieldHeight); xnScanFieldSize100.AssignValue(m_nScanFieldSize100); xdWorkingDistance.AssignValue(m_dWorkingDistance); xMag.AssignValue(m_magnification); xnTotalFields.AssignValue(m_nTotalFields); slo.Serialize(true, classDoc, rootNode); } else { slo.Serialize(false, classDoc, rootNode); m_nScanFieldWidth = xnScanFieldSize.value(); m_nScanFieldSize100 = xnScanFieldSize100.value(); m_dWorkingDistance = xdWorkingDistance.value(); m_magnification = xMag.value(); m_nTotalFields = xnTotalFields.value(); } } } }