#pragma once #include "stdafx.h" #include "otsdataconst.h" #include "CGBLevel.h" #include "GBFieldData.h" #include namespace OTSGBCalculate { using namespace std; using namespace OTSDATA; CGBLevel::CGBLevel() // constructor { Init(); } CGBLevel::CGBLevel(CGBFieldData* GBField, GB_LEVEL_TYPE a_nLevel) { m_GBField = GBField; m_nLevel = a_nLevel; } CGBLevel::CGBLevel(const CGBLevel& a_oSource) // copy constructor { // can't copy itself if (&a_oSource == this) { return; } // copy data over Duplicate(a_oSource); } CGBLevel::CGBLevel(CGBLevel* a_poSource) // copy constructor { // input check ASSERT(a_poSource); if (!a_poSource) { return; } // can't copy itself if (a_poSource == this) { return; } // copy data over Duplicate(*a_poSource); } CGBLevel& CGBLevel::operator=(const CGBLevel& a_oSource) // =operator { // cleanup Cleanup(); // copy the class data over Duplicate(a_oSource); // return class return *this; } BOOL CGBLevel::operator==(const CGBLevel& a_oSource) // =operator { // return test result return(m_nLevel == a_oSource.m_nLevel); } CGBLevel::~CGBLevel() // detractor { Cleanup(); } GB_GRADE_TYPE CGBLevel::GetThinGrade() { // get grade // A double dLengthAll = 0; int nSize; switch (m_nLevel) { case GB_LEVEL_TYPE::A_TYPE: for (auto pAparticle : m_GBField->listAThinParticles) { double dLength = pAparticle->GetDMax(); dLengthAll += dLength; } return GetAGrade(dLengthAll); break; case GB_LEVEL_TYPE::B_TYPE: dLengthAll = 0; for (auto pBparticle : m_GBField->listBThinParticles) { double dLength = pBparticle->GetDMax(); dLengthAll += dLength; } return GetBGrade(dLengthAll); case GB_LEVEL_TYPE::C_TYPE: dLengthAll = 0; for (auto pCparticle : m_GBField->listCThinParticles) { double dLength = pCparticle->GetDMax(); dLengthAll += dLength; } return GetCGrade(dLengthAll); break; case GB_LEVEL_TYPE::D_TYPE: nSize = (int)m_GBField->listDThinParticles.size(); return GetDGrade(nSize); break; case GB_LEVEL_TYPE::DSulfide_TYPE: nSize = (int)m_GBField->listDSulfideThinParticles.size(); return GetDGrade(nSize); break; } return GB_GRADE_TYPE::INVALID; } GB_GRADE_TYPE CGBLevel::GetWideGrade() { double dLengthAll = 0; int nSize; switch (m_nLevel) { case GB_LEVEL_TYPE::A_TYPE: for (auto pAparticle : m_GBField->listAWideParticles) { double dLength = pAparticle->GetDMax(); dLengthAll += dLength; } return GetAGrade(dLengthAll); break; case GB_LEVEL_TYPE::B_TYPE: dLengthAll = 0; for (auto pBparticle : m_GBField->listBWideParticles) { double dLength = pBparticle->GetDMax(); dLengthAll += dLength; } return GetBGrade(dLengthAll); case GB_LEVEL_TYPE::C_TYPE: dLengthAll = 0; for (auto pCparticle : m_GBField->listCWideParticles) { double dLength = pCparticle->GetDMax(); dLengthAll += dLength; } return GetCGrade(dLengthAll); break; case GB_LEVEL_TYPE::D_TYPE: nSize = (int)m_GBField->listDWideParticles.size(); return GetDGrade(nSize); break; case GB_LEVEL_TYPE::DSulfide_TYPE: nSize = (int)m_GBField->listDSulfideWideParticles.size(); return GetDGrade(nSize); break; } return GB_GRADE_TYPE::INVALID; } GB_GRADE_TYPE CGBLevel::GetSuperGrade() { double dLengthAll = 0; int nSize; switch (m_nLevel) { case GB_LEVEL_TYPE::A_TYPE: for (auto pAparticle : m_GBField->listASuperParticles) { double dLength = pAparticle->GetDMax(); dLengthAll += dLength; } return GetAGrade(dLengthAll); break; case GB_LEVEL_TYPE::B_TYPE: dLengthAll = 0; for (auto pBparticle : m_GBField->listBSuperParticles) { double dLength = pBparticle->GetDMax(); dLengthAll += dLength; } return GetBGrade(dLengthAll); case GB_LEVEL_TYPE::C_TYPE: dLengthAll = 0; for (auto pParticle : m_GBField->listCSuperParticles) { double dLength = pParticle->GetDMax(); dLengthAll += dLength; } return GetCGrade(dLengthAll); break; case GB_LEVEL_TYPE::D_TYPE: nSize = (int)m_GBField->listDSuperParticles.size(); return GetDGrade(nSize); break; case GB_LEVEL_TYPE::DSulfide_TYPE: nSize = (int)m_GBField->listDSulfideSuperParticles.size(); return GetDGrade(nSize); break; } return GB_GRADE_TYPE::INVALID; } double CGBLevel::GetMaxFeretDiameter() { if (m_FeretDiameterMax == 0) { double dFeretDiameterMax = 0; for (auto pDSParticles : m_GBField->listDSParticles) { double dFeretDiameter = pDSParticles->GetFeretDiameter(); if (dFeretDiameter > dFeretDiameterMax) { dFeretDiameterMax = dFeretDiameter; } } m_FeretDiameterMax = dFeretDiameterMax; } return m_FeretDiameterMax; } GB_GRADE_TYPE GetAGrade(double dLengthAll) { if (dLengthAll < 37) { return (GB_GRADE_TYPE::POINT_0_0); } else if (dLengthAll < 127 && dLengthAll >= 37) { return (GB_GRADE_TYPE::POINT_0_5); } else if (dLengthAll < 261 && dLengthAll >= 127) { return (GB_GRADE_TYPE::POINT_1_0); } else if (dLengthAll < 436 && dLengthAll >= 261) { return (GB_GRADE_TYPE::POINT_1_5); } else if (dLengthAll < 649 && dLengthAll >= 436) { return (GB_GRADE_TYPE::POINT_2_0); } else if (dLengthAll < 898 && dLengthAll >= 649) { return (GB_GRADE_TYPE::POINT_2_5); } else if (dLengthAll < 1181 && dLengthAll >= 898) { return (GB_GRADE_TYPE::POINT_3_0); } else if (dLengthAll < 1498 && dLengthAll >= 1181) { return (GB_GRADE_TYPE::POINT_3_5); } else if (dLengthAll < 1898 && dLengthAll >= 1489) { return (GB_GRADE_TYPE::POINT_4_0); } else if (dLengthAll < 2230 && dLengthAll >= 1898) { return (GB_GRADE_TYPE::POINT_4_5); } else if (dLengthAll >= 2230) { return (GB_GRADE_TYPE::POINT_5_0); } return GB_GRADE_TYPE::INVALID; } GB_GRADE_TYPE GetBGrade(double dLengthAll) { if (dLengthAll < 17) { return (GB_GRADE_TYPE::POINT_0_0); } else if (dLengthAll < 77 && dLengthAll >= 17) { return (GB_GRADE_TYPE::POINT_0_5); } else if (dLengthAll <= 184 && dLengthAll >= 77) { return (GB_GRADE_TYPE::POINT_1_0); } else if (dLengthAll < 343 && dLengthAll >= 184) { return (GB_GRADE_TYPE::POINT_1_5); } else if (dLengthAll < 555 && dLengthAll >= 343) { return (GB_GRADE_TYPE::POINT_2_0); } else if (dLengthAll < 822 && dLengthAll >= 555) { return (GB_GRADE_TYPE::POINT_2_5); } else if (dLengthAll < 1147 && dLengthAll >= 822) { return (GB_GRADE_TYPE::POINT_3_0); } else if (dLengthAll < 1530 && dLengthAll >= 1147) { return (GB_GRADE_TYPE::POINT_3_5); } else if (dLengthAll < 1973 && dLengthAll >= 1530) { return (GB_GRADE_TYPE::POINT_4_0); } else if (dLengthAll < 2476 && dLengthAll >= 1973) { return (GB_GRADE_TYPE::POINT_4_5); } else if (dLengthAll >= 2476) { return (GB_GRADE_TYPE::POINT_5_0); } return GB_GRADE_TYPE::INVALID; } GB_GRADE_TYPE GetCGrade(double dLengthAll) { if (dLengthAll < 18) { return (GB_GRADE_TYPE::POINT_0_0); } else if (dLengthAll < 76 && dLengthAll >= 18) { return (GB_GRADE_TYPE::POINT_0_5); } else if (dLengthAll < 176 && dLengthAll >= 76) { return (GB_GRADE_TYPE::POINT_1_0); } else if (dLengthAll < 320 && dLengthAll >= 176) { return (GB_GRADE_TYPE::POINT_1_5); } else if (dLengthAll < 510 && dLengthAll >= 320) { return (GB_GRADE_TYPE::POINT_2_0); } else if (dLengthAll < 746 && dLengthAll >= 510) { return (GB_GRADE_TYPE::POINT_2_5); } else if (dLengthAll < 1029 && dLengthAll >= 746) { return (GB_GRADE_TYPE::POINT_3_0); } else if (dLengthAll < 1359 && dLengthAll >= 1029) { return (GB_GRADE_TYPE::POINT_3_5); } else if (dLengthAll < 1737 && dLengthAll >= 1359) { return (GB_GRADE_TYPE::POINT_4_0); } else if (dLengthAll <= 2163 && dLengthAll >= 1737) { return (GB_GRADE_TYPE::POINT_4_5); } else if (dLengthAll >= 2163) { return (GB_GRADE_TYPE::POINT_5_0); } return GB_GRADE_TYPE::INVALID; } GB_GRADE_TYPE GetDGrade(int nSize) { if (nSize < 1) { return (GB_GRADE_TYPE::POINT_0_0); } else if (nSize < 4 && nSize >= 1) { return (GB_GRADE_TYPE::POINT_0_5); } else if (nSize < 9 && nSize >= 4) { return (GB_GRADE_TYPE::POINT_1_0); } else if (nSize < 16 && nSize >= 9) { return (GB_GRADE_TYPE::POINT_1_5); } else if (nSize < 25 && nSize >= 16) { return (GB_GRADE_TYPE::POINT_2_0); } else if (nSize < 36 && nSize >= 25) { return (GB_GRADE_TYPE::POINT_2_5); } else if (nSize < 49 && nSize >= 36) { return (GB_GRADE_TYPE::POINT_3_0); } else if (nSize < 64 && nSize >= 49) { return (GB_GRADE_TYPE::POINT_3_5); } else if (nSize < 81 && nSize >= 64) { return (GB_GRADE_TYPE::POINT_4_0); } else if (nSize < 100 && nSize >= 81) { return (GB_GRADE_TYPE::POINT_4_5); } else if (nSize >= 100) { return (GB_GRADE_TYPE::POINT_5_0); } return GB_GRADE_TYPE::INVALID; } CString GetDSGrade(double dFeretDiameterMax) { if (dFeretDiameterMax < 13) { return _T("0"); } else if (dFeretDiameterMax < 19 && dFeretDiameterMax >= 13) { return _T("0.5"); } else if (dFeretDiameterMax < 27 && dFeretDiameterMax >= 19) { return _T("1.0"); } else if (dFeretDiameterMax < 38 && dFeretDiameterMax >= 27) { return _T("1.5"); } else if (dFeretDiameterMax < 53 && dFeretDiameterMax >= 38) { return _T("2.0"); } else if (dFeretDiameterMax < 76 && dFeretDiameterMax >= 53) { return _T("2.5"); } else if (dFeretDiameterMax < 107 && dFeretDiameterMax >= 76) { return _T("3.0"); } else if (dFeretDiameterMax < 151 && dFeretDiameterMax >= 107) { return _T("3.5"); } else if (dFeretDiameterMax < 214 && dFeretDiameterMax >= 151) { return _T("4.0"); } else if (dFeretDiameterMax < 303 && dFeretDiameterMax >= 214) { return _T("4.5"); } else if (dFeretDiameterMax >= 303) { return _T("5.0"); } return _T("0.0"); } /*void CGBLevel::Serialize(bool isStoring, tinyxml2::XMLDocument * classDoc, tinyxml2::XMLElement * rootNode) { xmls::xInt xLevel; xmls::Slo slo; slo.Register("Level", &xLevel); if (isStoring) { xLevel = (int)m_nLevel; slo.Serialize(true, classDoc, rootNode); } else { slo.Serialize(false, classDoc, rootNode); m_nLevel = (GB_LEVEL_TYPE)xLevel.value(); } }*/ // cleanup void CGBLevel::Cleanup() { } // initialization void CGBLevel::Init() { m_nLevel = GB_LEVEL_TYPE::INVALID; } // duplication void CGBLevel::Duplicate(const CGBLevel& a_oSource) { // initialization Init(); // copy data over m_nLevel = a_oSource.m_nLevel; } }