OTSSTDLib.cpp 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. 
  2. #include "stdafx.h"
  3. #include "LanguageID.h"
  4. #include "OTSSTDLib.h"
  5. #include <algorithm>
  6. #include "OTSSpectrumLibFileMgr.h"
  7. namespace OTSClassifyEngine
  8. {
  9. CSTDLib::CSTDLib(std::string dbName)
  10. {
  11. m_dbName = dbName.c_str();
  12. m_listSTDItems.clear();
  13. }
  14. CSTDLib::CSTDLib(const CSTDLib& a_oSource)
  15. {
  16. if (this == &a_oSource)
  17. {
  18. return;
  19. }
  20. Duplicate(a_oSource);
  21. }
  22. CSTDLib::CSTDLib(CSTDLib* a_poSource)
  23. {
  24. if (!a_poSource)
  25. {
  26. return;
  27. }
  28. if (this == a_poSource)
  29. {
  30. return;
  31. }
  32. Duplicate(*a_poSource);
  33. }
  34. CSTDLib::~CSTDLib()
  35. {
  36. Cleanup();
  37. }
  38. bool CSTDLib::LoadSpectrumSTDFromDB(std::string dbName)
  39. {
  40. m_dbName = CString(dbName.c_str() );
  41. CSpectrumLibFileMgrPtr pLibFileMgr = CSpectrumLibFileMgrPtr(new CSpectrumLibFileMgr(dbName));
  42. if (!pLibFileMgr->LoadSTDSpectrumItems(m_listSTDItems,true))
  43. {
  44. return FALSE;
  45. }
  46. }
  47. CSTDLib& CSTDLib::operator= (const CSTDLib& a_oSource)
  48. {
  49. Cleanup();
  50. Duplicate(a_oSource);
  51. return *this;
  52. }
  53. BOOL CSTDLib::operator== (const CSTDLib& a_oSource)
  54. {
  55. return (m_dbName == a_oSource.m_dbName &&
  56. m_listSTDItems.size() == a_oSource.m_listSTDItems.size());
  57. }
  58. void CSTDLib::SetName(CString strName)
  59. {
  60. m_dbName = strName;
  61. }
  62. CString CSTDLib::GetName()
  63. {
  64. return m_dbName;
  65. }
  66. bool CSTDLib::AddItem(CSpectrumSTDItemPtr stdMineral)
  67. {
  68. int i = 0;
  69. for (i = 0; i < (int)m_listSTDItems.size(); i++)
  70. {
  71. if ((m_listSTDItems[i]) == stdMineral)
  72. {
  73. break;
  74. }
  75. }
  76. //insert stdMineral at the end of list, if not exist
  77. if (i >=(int) m_listSTDItems.size())
  78. {
  79. CSpectrumSTDItemPtr pSTDMineral=stdMineral;
  80. m_listSTDItems.push_back(pSTDMineral);
  81. return true;
  82. }
  83. return false;
  84. }
  85. // begin with 0,insert a record at iIndex
  86. bool CSTDLib::InsertItem(CSpectrumSTDItemPtr stdMineral, int iIndex)
  87. {
  88. if (iIndex >(int) m_listSTDItems.size() || iIndex < 0)
  89. {
  90. return false;
  91. }
  92. int i = 0;
  93. for (i = 0; i <(int) m_listSTDItems.size(); i++)
  94. {
  95. if ((m_listSTDItems[i]) == stdMineral)
  96. {
  97. break;
  98. }
  99. }
  100. // insert stdMineral at iIndex, if not exist
  101. if (i >= (int)m_listSTDItems.size())
  102. {
  103. CSpectrumSTDItemPtr pSTDMineral=stdMineral;
  104. m_listSTDItems.insert(m_listSTDItems.begin() + iIndex, pSTDMineral);
  105. return true;
  106. }
  107. return false;
  108. }
  109. CSpectrumSTDItemPtr CSTDLib::GetSTDItem(int iIndex)
  110. {
  111. if (iIndex < 0 || iIndex >= GetSTDItemCount())
  112. {
  113. return nullptr;
  114. }
  115. return m_listSTDItems[iIndex];
  116. }
  117. int CSTDLib::GetSTDItemCount()
  118. {
  119. return m_listSTDItems.size();
  120. }
  121. void CSTDLib::Clear()
  122. {
  123. m_listSTDItems.clear();
  124. }
  125. bool CSTDLib::CreateSpectrumSTDItemByXrayDATA(COTSParticlePtr part, COLORREF color)
  126. {
  127. CSpectrumSTDItemPtr itm = CSpectrumSTDItemPtr(new CSpectrumSTDItem());
  128. itm->SetXraySpectrum(part->GetXrayInfo());
  129. auto name = GetDifferItemName(_T("NewSTDItem"));
  130. itm->SetName(name);
  131. itm->SetID(1);
  132. int maxId = itm->GetID();
  133. for (auto s: m_listSTDItems)
  134. {
  135. if (s->GetID() > maxId)
  136. {
  137. maxId = s->GetID();
  138. }
  139. }
  140. itm->SetID(maxId+1);
  141. part->GetXrayInfo()->SetIndex(part->GetParticleId());
  142. part->SetClassifyId(itm->GetID());
  143. part->SetClassifyName(name.GetBuffer());
  144. itm->SetColor(color);
  145. m_listSTDItems.push_back(itm);
  146. UpdateNewSTDItemToDB(itm);
  147. return true;
  148. }
  149. bool CSTDLib::UpdateNewSTDItemToDB(CSpectrumSTDItemPtr itm)
  150. {
  151. CSpectrumLibFileMgrPtr pLibFileMgr = CSpectrumLibFileMgrPtr(new CSpectrumLibFileMgr(m_dbName.GetBuffer()));
  152. pLibFileMgr->InsertSpectrumSTDItemIntoDB(itm);
  153. return true;
  154. }
  155. CString CSTDLib::GetDifferItemName(CString strMineralName)
  156. {
  157. int iCount = 1;
  158. CString strNewName = strMineralName;
  159. while (HasSameItemName(strNewName))
  160. {
  161. strNewName.Format(_T("%s_%d"), strMineralName, iCount++);
  162. }
  163. return strNewName;
  164. }
  165. bool CSTDLib::HasSameItemName(CString strMineralName)
  166. {
  167. for (int i = 0; i < (int)m_listSTDItems.size(); i++)
  168. {
  169. if (0 == strMineralName.CompareNoCase(m_listSTDItems[i]->GetName()))
  170. {
  171. return true;
  172. }
  173. }
  174. return false;
  175. }
  176. void CSTDLib::Cleanup()
  177. {
  178. }
  179. void CSTDLib::Init()
  180. {
  181. m_listSTDItems.clear();
  182. }
  183. // duplication
  184. void CSTDLib::Duplicate(const CSTDLib& a_oSource)
  185. {
  186. m_dbName = a_oSource.m_dbName;
  187. for (int i = 0; i < (int)a_oSource.m_listSTDItems.size(); i++)
  188. {
  189. m_listSTDItems.push_back(a_oSource.m_listSTDItems[i]);
  190. }
  191. }
  192. }