123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
-
- #include "stdafx.h"
- #include "LanguageID.h"
- #include "OTSSTDLib.h"
- #include <algorithm>
- #include "OTSSpectrumLibFileMgr.h"
- namespace OTSClassifyEngine
- {
-
-
-
- CSTDLib::CSTDLib(std::string dbName)
- {
-
- m_dbName = dbName.c_str();
- m_listSTDItems.clear();
- }
- CSTDLib::CSTDLib(const CSTDLib& a_oSource)
- {
- if (this == &a_oSource)
- {
- return;
- }
- Duplicate(a_oSource);
- }
- CSTDLib::CSTDLib(CSTDLib* a_poSource)
- {
- if (!a_poSource)
- {
- return;
- }
- if (this == a_poSource)
- {
- return;
- }
- Duplicate(*a_poSource);
- }
- CSTDLib::~CSTDLib()
- {
- Cleanup();
- }
- bool CSTDLib::LoadSpectrumSTDFromDB(std::string dbName)
- {
- m_dbName = CString(dbName.c_str() );
- CSpectrumLibFileMgrPtr pLibFileMgr = CSpectrumLibFileMgrPtr(new CSpectrumLibFileMgr(dbName));
-
- if (!pLibFileMgr->LoadSTDSpectrumItems(m_listSTDItems,true))
- {
- return FALSE;
- }
-
- }
- CSTDLib& CSTDLib::operator= (const CSTDLib& a_oSource)
- {
- Cleanup();
- Duplicate(a_oSource);
- return *this;
- }
- BOOL CSTDLib::operator== (const CSTDLib& a_oSource)
- {
- return (m_dbName == a_oSource.m_dbName &&
- m_listSTDItems.size() == a_oSource.m_listSTDItems.size());
-
- }
- void CSTDLib::SetName(CString strName)
- {
- m_dbName = strName;
- }
- CString CSTDLib::GetName()
- {
- return m_dbName;
- }
- bool CSTDLib::AddItem(CSpectrumSTDItemPtr stdMineral)
- {
- int i = 0;
- for (i = 0; i < (int)m_listSTDItems.size(); i++)
- {
- if ((m_listSTDItems[i]) == stdMineral)
- {
- break;
- }
- }
- //insert stdMineral at the end of list, if not exist
- if (i >=(int) m_listSTDItems.size())
- {
- CSpectrumSTDItemPtr pSTDMineral=stdMineral;
- m_listSTDItems.push_back(pSTDMineral);
- return true;
- }
- return false;
- }
- // begin with 0,insert a record at iIndex
- bool CSTDLib::InsertItem(CSpectrumSTDItemPtr stdMineral, int iIndex)
- {
- if (iIndex >(int) m_listSTDItems.size() || iIndex < 0)
- {
- return false;
- }
- int i = 0;
- for (i = 0; i <(int) m_listSTDItems.size(); i++)
- {
- if ((m_listSTDItems[i]) == stdMineral)
- {
- break;
- }
- }
- // insert stdMineral at iIndex, if not exist
- if (i >= (int)m_listSTDItems.size())
- {
- CSpectrumSTDItemPtr pSTDMineral=stdMineral;
- m_listSTDItems.insert(m_listSTDItems.begin() + iIndex, pSTDMineral);
- return true;
- }
- return false;
- }
- CSpectrumSTDItemPtr CSTDLib::GetSTDItem(int iIndex)
- {
- if (iIndex < 0 || iIndex >= GetSTDItemCount())
- {
- return nullptr;
- }
- return m_listSTDItems[iIndex];
- }
-
- int CSTDLib::GetSTDItemCount()
- {
- return m_listSTDItems.size();
- }
- void CSTDLib::Clear()
- {
-
- m_listSTDItems.clear();
-
- }
- bool CSTDLib::CreateSpectrumSTDItemByXrayDATA(COTSParticlePtr part, COLORREF color)
- {
- CSpectrumSTDItemPtr itm = CSpectrumSTDItemPtr(new CSpectrumSTDItem());
- itm->SetXraySpectrum(part->GetXrayInfo());
- auto name = GetDifferItemName(_T("NewSTDItem"));
- itm->SetName(name);
- itm->SetID(1);
- int maxId = itm->GetID();
- for (auto s: m_listSTDItems)
- {
- if (s->GetID() > maxId)
- {
- maxId = s->GetID();
- }
- }
- itm->SetID(maxId+1);
- part->GetXrayInfo()->SetIndex(part->GetParticleId());
-
-
- part->SetClassifyId(itm->GetID());
- part->SetClassifyName(name.GetBuffer());
- itm->SetColor(color);
- m_listSTDItems.push_back(itm);
- UpdateNewSTDItemToDB(itm);
- return true;
- }
-
- bool CSTDLib::UpdateNewSTDItemToDB(CSpectrumSTDItemPtr itm)
- {
- CSpectrumLibFileMgrPtr pLibFileMgr = CSpectrumLibFileMgrPtr(new CSpectrumLibFileMgr(m_dbName.GetBuffer()));
- pLibFileMgr->InsertSpectrumSTDItemIntoDB(itm);
-
- return true;
- }
- CString CSTDLib::GetDifferItemName(CString strMineralName)
- {
- int iCount = 1;
- CString strNewName = strMineralName;
- while (HasSameItemName(strNewName))
- {
- strNewName.Format(_T("%s_%d"), strMineralName, iCount++);
- }
- return strNewName;
- }
- bool CSTDLib::HasSameItemName(CString strMineralName)
- {
- for (int i = 0; i < (int)m_listSTDItems.size(); i++)
- {
- if (0 == strMineralName.CompareNoCase(m_listSTDItems[i]->GetName()))
- {
- return true;
- }
- }
- return false;
- }
- void CSTDLib::Cleanup()
- {
- }
- void CSTDLib::Init()
- {
-
- m_listSTDItems.clear();
- }
- // duplication
- void CSTDLib::Duplicate(const CSTDLib& a_oSource)
- {
-
- m_dbName = a_oSource.m_dbName;
- for (int i = 0; i < (int)a_oSource.m_listSTDItems.size(); i++)
- {
- m_listSTDItems.push_back(a_oSource.m_listSTDItems[i]);
- }
- }
- }
|