#include "stdafx.h" #include "LanguageID.h" //#include "MultiLang.h" #include "OTSSTDLib.h" #include #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; } } // 不存在就添加 if (i >=(int) m_listSTDItems.size()) { CSpectrumSTDItemPtr pSTDMineral=stdMineral; m_listSTDItems.push_back(pSTDMineral); return true; } return false; } // 从0开始数, 在第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; } } // 不存在就插入 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]); } } }