| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 | #include "stdafx.h"#include "LanguageID.h"//#include "MultiLang.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;			}		}		// 不存在就添加		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]); 		}	}}
 |