| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707 | #pragma once#define _CRTDBG_MAP_ALLOC#include <stdlib.h>#include <crtdbg.h>#include "stdafx.h"#include "SmplMsrResultFileMgr.h"#include "PosXrayFileMgr.h"#include "BSEImgFileMgr.h"#include "IncAFileMgr.h"#include "OTSHelper.h"#include "OTSFileSys.h"namespace OTSMODEL{	using namespace OTSDATA;	// constructor	CSmplMsrResultFileMgr::CSmplMsrResultFileMgr(CString workingFolder)	{		m_strWorkingFolder = workingFolder;				m_listAnalysisXray.clear();	}	// destructor	CSmplMsrResultFileMgr::~CSmplMsrResultFileMgr()	{	}	// class methods	// public	// initialization	// this method needs to be called before measurement	BOOL CSmplMsrResultFileMgr::Init(COTSSamplePtr a_pSample)	{		// sample check 		ASSERT(a_pSample);		if (!a_pSample)		{			// invalid sample pointer			LogErrorTrace(__FILE__, __LINE__, _T("Init: failed to create the working directory."));			return FALSE;		}		// sample name		CString strSmplName = a_pSample->GetName();		strSmplName.Trim();		if (strSmplName.IsEmpty())		{			// the sample name string can't be an empty string			LogErrorTrace(__FILE__, __LINE__, _T("Init: the sample name string is an empty string."));			return FALSE;		}		// the working directory string can't be an empty string		if (m_strWorkingFolder.IsEmpty())		{			// the working directory is empty			LogTrace(__FILE__, __LINE__, _T("Init: the woring folder directory string is an empty string."));			return FALSE;		}		// check if the working directory is there		if (!COTSFileSys::Exists(m_strWorkingFolder))		{			// the working directory is not exit, create it			if (!COTSFileSys::CreateFolder(m_strWorkingFolder))			{				// failed to create the working directory				LogTrace(__FILE__, __LINE__, _T("Init: failed to create the working directory."));				return FALSE;			}		}		// sample measure file pathname		CString strPathname = m_strWorkingFolder + strSmplName + SMPL_MSR_RESULT_FILE_EXT;			// file not exists, creates it			if (!CreateFileMgr(strPathname))			{				// failed to create the file				LogErrorTrace(__FILE__, __LINE__, _T("Init: can't create file manager(%s). error: %s"), strPathname);				return FALSE;			}				// get field files directory string		CString strFieldFileSubFolder = GetFieldFileSubFolderStr();		// check if the field files directory exists		if (!COTSFileSys::Exists(strFieldFileSubFolder))		{			// field files directory exists not exists, creates it			if (!COTSFileSys::CreateFolder(strFieldFileSubFolder))			{				// failed to create the field files directory				LogErrorTrace(__FILE__, __LINE__, _T("Init: failed to create field files directory (%s). error: %s"), strFieldFileSubFolder);				return FALSE;			}		}		// ok, return TRUE		SetSample(a_pSample);		return TRUE;	}	// Load 	BOOL CSmplMsrResultFileMgr::Load(CString a_strPathname /*= _T("")*/)	{	/*	int tmpFlag = _CrtSetDbgFlag(_CRTDBG_REPORT_FLAG);		tmpFlag |= _CRTDBG_LEAK_CHECK_DF;		_CrtSetDbgFlag(tmpFlag);*/		//_CrtSetBreakAlloc(7415416);		//AFX_MANAGE_STATE(AfxGetStaticModuleState());		// check the pathname string		a_strPathname.Trim();		if (a_strPathname.IsEmpty())		{			// open			CFileDialog dlg(TRUE, SMPL_MSR_RESULT_FILE_EXT, NULL, OFN_FILEMUSTEXIST, SMPL_MSR_RESULT_FILE_FILTER);			if (dlg.DoModal() != IDOK)			{				// user canceled loading				LogTrace(__FILE__, __LINE__, _T("Load: user canceled loading."));				return FALSE;			}			a_strPathname = dlg.GetPathName();		}			// get path of the pathname		CString strFilePath = COTSHelper::GetFolderName(a_strPathname);		if (strFilePath.IsEmpty())		{			// file path string is an empty string 			LogErrorTrace(__FILE__, __LINE__, _T("Load: file path string is an empty string."));			return FALSE;		}		// field file sub folder string		CString strFieldFileSubFolder = strFilePath + _T("\\") + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");		// check if the field file sub folder exists		if (!COTSFileSys::Exists(strFieldFileSubFolder))		{			// field files folder doesn't exist			LogErrorTrace(__FILE__, __LINE__, _T("Load: field files folder doesn't exist (%s)."), strFieldFileSubFolder);			return FALSE;		}		SetWorkingFolderStr(strFieldFileSubFolder);		// create sample measure result file		CSmplMsrResultFilePtr pSmplMsrResultFile = CSmplMsrResultFilePtr(new CSmplMsrResultFile());			tinyxml2::XMLDocument doc;			doc.LoadFile(a_strPathname);//载入xml文件			tinyxml2::XMLElement *rootNode;			rootNode = doc.FirstChildElement(RootClassName);			pSmplMsrResultFile->Serialize(false, &doc, rootNode);		// file version		CString strFileVersion = pSmplMsrResultFile->GetFileVersion();		DWORD nFileVersion = COTSHelper::GetVersionFromString(strFileVersion);		if (nFileVersion == 0)		{// invalid file			LogErrorTrace(__FILE__, __LINE__, _T("Load: invalid sample measure result file %s"), a_strPathname);			return FALSE;		}		// sample measure result file		m_pSmplMsrResultFile = pSmplMsrResultFile;		SetPathName(a_strPathname);		this->LoadFieldDataFromDB(m_strPathname);		// ok, return TRUE		return TRUE;	}	// Load 	BOOL CSmplMsrResultFileMgr::LoadFieldDataFromDB(CString a_strPathname /*= _T("")*/)	{				// check the pathname string		a_strPathname.Trim();		if (a_strPathname.IsEmpty())		{			// open			CFileDialog dlg(TRUE, SMPL_MSR_RESULT_FILE_EXT, NULL, OFN_FILEMUSTEXIST, SMPL_MSR_RESULT_FILE_FILTER);			if (dlg.DoModal() != IDOK)			{				// user canceled loading				LogTrace(__FILE__, __LINE__, _T("Load: user canceled loading."));				return FALSE;			}			a_strPathname = dlg.GetPathName();		}		// get path of the pathname		CString strFilePath = COTSHelper::GetFolderName(a_strPathname);		if (strFilePath.IsEmpty())		{			// file path string is an empty string 			LogErrorTrace(__FILE__, __LINE__, _T("Load: file path string is an empty string."));			return FALSE;		}		// field file sub folder string		CString strFieldFileSubFolder = strFilePath + _T("\\") + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");		// check if the field file sub folder exists		if (!COTSFileSys::Exists(strFieldFileSubFolder))		{// field files folder doesn't exist			LogErrorTrace(__FILE__, __LINE__, _T("Load: field files folder doesn't exist (%s)."), strFieldFileSubFolder);			return FALSE;		}			CString strIncAFilename = strFieldFileSubFolder + _T("\\") + SMPL_MSR_RESULT_INCLUSION_FILE;		CIncAFileMgrPtr pIncAFileMgr = CIncAFileMgrPtr(new CIncAFileMgr(strIncAFilename));		COTSFieldDataList allFlds;		CMsrSampleStatusPtr poMsrStatus= m_pSmplMsrResultFile->GetSample()->GetMsrStatus();				CMsrResultsPtr poMsrResults= m_pSmplMsrResultFile->GetSample()->GetMsrResults();				double aFldArea = m_pSmplMsrResultFile->GetSample()->CalculateAFieldArea();		if (pIncAFileMgr->GetAllFieldsFromDB(allFlds, poMsrStatus, poMsrResults, aFldArea))		{			m_pSmplMsrResultFile->SetFieldData(allFlds);					COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();			for (auto pFieldData : listFieldData)			{				//pFieldData->SetFieldFileFolder(strFieldFileSubFolder);			}			return TRUE;		}		else		{			return FALSE;		}					}	// Save 	BOOL CSmplMsrResultFileMgr::Save(CString a_strPathname /*= _T("")*/)	{				// safety check 		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			// invalid sample measure result file pointer			LogErrorTrace(__FILE__, __LINE__, _T("Save: invalid sample measure result file pointer."));			return FALSE;		}		// check the pathname string		a_strPathname.Trim();		if (a_strPathname.IsEmpty())		{			// file save as dialog			CFileDialog dlg(FALSE, SMPL_MSR_RESULT_FILE_EXT, NULL, OFN_OVERWRITEPROMPT, SMPL_MSR_RESULT_FILE_FILTER);			if (dlg.DoModal() != IDOK)			{				// user canceled loading				LogTrace(__FILE__, __LINE__, _T("Save: user canceled save."));				return FALSE;			}			// get file pathname			a_strPathname = dlg.GetPathName();		}		// get path of the pathname		CString strFilePath = COTSHelper::GetFolderName(a_strPathname);		if (strFilePath.IsEmpty())		{			// file path string is an empty string 			LogErrorTrace(__FILE__, __LINE__, _T("Save: file path string is an empty string."));			return FALSE;		}		// check if the path exists		if (!COTSFileSys::Exists(strFilePath))		{			// file path doesn't exist create it			if (!COTSFileSys::CreateFolder(strFilePath))			{				// failed to create file path 				LogErrorTrace(__FILE__, __LINE__, _T("Save: failed to create file path (%s)."), strFilePath);				return FALSE;			}		}		tinyxml2::XMLDocument doc;		if (COTSFileSys::Exists(a_strPathname))		{			doc.LoadFile(a_strPathname);//载入xml文件		}				doc.Clear();		tinyxml2::XMLDeclaration* declaration = doc.NewDeclaration();//添加xml文件头申明		doc.InsertFirstChild(declaration);		tinyxml2::XMLElement *rootNode;		rootNode = doc.NewElement(RootClassName);		doc.InsertEndChild(rootNode);		m_pSmplMsrResultFile->Serialize(true, &doc, rootNode);		int result = doc.SaveFile(a_strPathname);		// ok, return TRUE		return TRUE;	}		// field file sub folder string	CString CSmplMsrResultFileMgr::GetFieldFileSubFolderStr()	{		// return empty string if working folder		if (m_strWorkingFolder.IsEmpty())		{			return _T("");		}		// add "\\" at the string end if it is not "\\"		if (m_strWorkingFolder.Right(1) != _T('\\'))		{			m_strWorkingFolder += _T("\\");		}		// field file sub folder string		CString strFieldFileSubFolder = m_strWorkingFolder;		CString strFIELDS_FILE_SUBFOLDER = _T("FIELD_FILES");		if (strFieldFileSubFolder.Find(_T(strFIELDS_FILE_SUBFOLDER)) <= 0)		{			strFieldFileSubFolder = m_strWorkingFolder + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");		}		else		{			strFieldFileSubFolder = m_strWorkingFolder;		}		// return field file sub folder string		return strFieldFileSubFolder;	}		// save a x-ray file for a field	BOOL CSmplMsrResultFileMgr::SaveXRayFileForAField(COTSFieldMgrPtr a_pField)	{		// check input 		ASSERT(a_pField);		if (!a_pField)		{			LogErrorTrace(__FILE__, __LINE__, _T("SaveXRayFileForAField: invalid field data pointer."));			return FALSE;		}		// get field x-ray file pathname		CString strXRayFilePathname = m_strWorkingFolder + _T("\\") + SMPL_MSR_RESULT_FIELDS_FILE_SUBFOLDER + _T("\\");		CString strXRaySearchFilename = strXRayFilePathname + SMPL_MSR_RESULT_SEARCH_X_RAY_FILE;		CString strXRayAnalysisFilename = strXRayFilePathname + SMPL_MSR_RESULT_ANALYSIS_X_RAY_FILE;		// save x-ray file for the field		CPosXrayFileMgrPtr pPosXrayFileMgr = CPosXrayFileMgrPtr(new CPosXrayFileMgr(strXRayAnalysisFilename));				CPosXrayList listSearchXray = a_pField->GetSearchPosXrayList();		pPosXrayFileMgr->SetPosXrayList(listSearchXray,TRUE);		pPosXrayFileMgr->SetHasElement(FALSE);		if (!pPosXrayFileMgr->Save())		{			LogErrorTrace(__FILE__, __LINE__, _T("SaveXRayFileForAField: save search x-ray failed."));			return FALSE;		}		CPosXrayList listAnalysisXray = a_pField->GetAnalysisPosXrayList();		pPosXrayFileMgr->SetPosXrayList(listAnalysisXray, TRUE);		pPosXrayFileMgr->SetHasElement(TRUE);		if (!pPosXrayFileMgr->Save())		{			LogErrorTrace(__FILE__, __LINE__, _T("SaveXRayFileForAField: save analysis x-ray failed."));			return FALSE;		}		// ok, return TRUE		return TRUE;	}		// fields	COTSFieldDataPtr CSmplMsrResultFileMgr::GetFieldById(int a_nID)	{		COTSFieldDataList listFieldData = m_pSmplMsrResultFile->GetFieldData();		if (a_nID <0 || a_nID >(int)listFieldData.size())		{			return nullptr;		}				COTSFieldDataPtr pFieldData = listFieldData[a_nID];		return pFieldData;	}	BOOL CSmplMsrResultFileMgr::AddAField(COTSFieldDataPtr a_pFieldData)	{		ASSERT(a_pFieldData);		if (!a_pFieldData)		{			// empty field data pointer			LogErrorTrace(__FILE__, __LINE__, _T("AddAField: empty field data pointer."));			return FALSE;		}		COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();		listFieldData.push_back(a_pFieldData);		return TRUE;	}	BOOL CSmplMsrResultFileMgr::DeleteAFieldById(int a_nID)	{		COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();		if (a_nID <0 || a_nID > (int)listFieldData.size())		{			return FALSE;		}		listFieldData.erase(listFieldData.begin()+a_nID);		return TRUE;	}	void CSmplMsrResultFileMgr::SetSample(COTSSamplePtr a_pSample)	{		ASSERT(a_pSample);		if (!a_pSample)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample."));			return;		}		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));			return;		}		m_pSmplMsrResultFile->SetSample(a_pSample);			}	void CSmplMsrResultFileMgr::SetSEMGnr(CSEMDataGnrPtr a_pSEMGnr)	{		ASSERT(a_pSEMGnr);		if (!a_pSEMGnr)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid SEM general data pointer."));			return;		}		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));			return;		}		m_pSmplMsrResultFile->SetSEMStage(a_pSEMGnr);	}	// get id for a new field 	int CSmplMsrResultFileMgr::GetIdForANewField(int a_nLastFieldId)	{		// new field id		int nNewFieldId = a_nLastFieldId;// +this->m_pSmplMsrResultFile->GetSample()->GetMsrStatus()->GetCompletedFields();		// safety check		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			// shouldn't be here, invalid sample measure result file			LogErrorTrace(__FILE__, __LINE__, _T("GetIdForANewField: invalid sample measure result file."));			return nNewFieldId;		}		// make the new field id is unit		COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();		BOOL bUnit = FALSE;		do		{			auto itr = std::find_if(listFieldData.begin(), listFieldData.end(), [nNewFieldId](COTSFieldDataPtr p) { return p->GetId() == nNewFieldId; });			bUnit = (itr == listFieldData.end());			if (!bUnit)			{				++nNewFieldId;			}		} 		while (!bUnit);		// return new field id		return nNewFieldId;	}	// set SEMStageData	void CSmplMsrResultFileMgr::SetSEMStageData(CSEMStageDataPtr a_pSEMStageData)	{		ASSERT(a_pSEMStageData);		if (!a_pSEMStageData)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid SEM stage data pointer."));			return;		}		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));			return;		}		m_pSmplMsrResultFile->SetSEMStageData(a_pSEMStageData);	}	// set SEMStage	void CSmplMsrResultFileMgr::SetSEMStage(CStagePtr a_pStage)	{		ASSERT(a_pStage);		if (!a_pStage)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid stage pointer."));			return;		}		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			LogErrorTrace(__FILE__, __LINE__, _T("input a invalid sample result file manager."));			return;		}		m_pSmplMsrResultFile->SetStage(a_pStage);	}	//COTSFieldMgrList CSmplMsrResultFileMgr::GetOTSFldMgrListAndAnalysisXrayList()	//{	//		//	if (m_listFieldMgr.size() > 0)//if the list is not empty ,prove that we've already load all the dada.so there's no need to load again.	//	{	//		return m_listFieldMgr;	//	}	//	m_listFieldMgr.clear();	//	ASSERT(m_pSmplMsrResultFile);	//	if (!m_pSmplMsrResultFile)	//	{	//		LogErrorTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: invalid sample measure result file pointer."));	//		return m_listFieldMgr;	//	}	//	//Get FieldDataList	//	COTSFieldDataList listFieldData = m_pSmplMsrResultFile->GetFieldData();	//	int nFieldNum = (int)listFieldData.size();			//	m_listAnalysisXray.clear();	//	// get field number	//	for (auto pFieldData : listFieldData)	//	{	//		COTSFieldMgrPtr pFieldMgr = COTSFieldMgrPtr(new COTSFieldMgr());	//		// get FieldData	//		pFieldMgr->SetOTSFieldData(pFieldData);	//			//		COTSParticleList& listParticle = pFieldData->GetParticleList();	//		if (listParticle.empty())	//		{	//			LogInfoTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: there is no particle in this field."));	//			continue;	//		}	//		// get BSE	//		CString strFieldFileFolder = pFieldData->GetFieldFileFolder();	//		int nId = pFieldData->GetId();	//		CString sFieldId;	//		sFieldId.Format(_T("%d"), nId);	//		CString strBSEFilePathname = strFieldFileFolder + SMPL_MSR_RESULT_FIELDS_BSE + sFieldId + BMP_IMG_FILE_EXT;	//		CBSEImgFileMgrPtr pBSEImgFile = CBSEImgFileMgrPtr(new CBSEImgFileMgr());	//		if (!pBSEImgFile->LoadFromBitmap(strBSEFilePathname))	//		{	//			LogErrorTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: can't load BSE File."));	//			CMsrResultsPtr pMsrResults = CMsrResultsPtr(new CMsrResults());	//			pFieldMgr->SetMsrResult(pMsrResults);	//			m_listFieldMgr.push_back(pFieldMgr);	//			continue;	//		}	//		CBSEImgPtr pBSEImg = pBSEImgFile->GetBSEImg();	//		//pFieldMgr->SetBSEImage(CBSEImgPtr(new CBSEImg(*pBSEImg.get())));	//		pFieldMgr->SetBSEImage(pBSEImg);	//		// get analysis X-ray list	//		CString strXRayAnalysisFilename = strFieldFileFolder + _T("\\") + SMPL_MSR_RESULT_ANALYSIS_X_RAY_FILE;	//		CPosXrayFileMgrPtr pPosAnalysisXrayFileMgr = CPosXrayFileMgrPtr(new CPosXrayFileMgr(strXRayAnalysisFilename));	//		pPosAnalysisXrayFileMgr->SetHasElement(TRUE);	//		if (!pPosAnalysisXrayFileMgr->Load(pFieldData->GetId(),strXRayAnalysisFilename))	//		{	//			LogTrace(__FILE__, __LINE__, _T("GetOTSFieldMgrList: load analysis x-ray of field %d failed."), pFieldData->GetId());	//			CMsrResultsPtr pMsrResults = CMsrResultsPtr(new CMsrResults());	//			pFieldMgr->SetMsrResult(pMsrResults);	//			m_listFieldMgr.push_back(pFieldMgr);	//			continue;	//		}	//		CPosXraysList listAnalysisXray = pPosAnalysisXrayFileMgr->GetPosXrayList();	//		pFieldMgr->SetAnalysisPosXayList(listAnalysisXray);	//		SetAnalysisXrayToList(listAnalysisXray);	//		//Mrs result need compute	//		CMsrResultsPtr pMsrResults = CMsrResultsPtr(new CMsrResults());	//		pFieldMgr->SetMsrResult(pMsrResults);	//		m_listFieldMgr.push_back(pFieldMgr);	//	}		//	return m_listFieldMgr;	//}	void CSmplMsrResultFileMgr::SetParticleList(COTSParticleList& a_listParticle)	{		m_listParticle.clear();		for (auto pParticle : a_listParticle)		{			//COTSParticlePtr pParticleNew = COTSParticlePtr(new COTSParticle(*pParticle.get()));			//COTSParticlePtr pParticleNew = pParticle;			m_listParticle.push_back(pParticle);		}	}		BOOL CSmplMsrResultFileMgr::ComputeParticleList()	{		ASSERT(m_pSmplMsrResultFile);		if (!m_pSmplMsrResultFile)		{			LogErrorTrace(__FILE__, __LINE__, _T("GetParticleList: invalid sample measure result file pointer."));			return FALSE;		}		m_listParticle.clear();		//Get FieldDataList		COTSFieldDataList& listFieldData = m_pSmplMsrResultFile->GetFieldData();		for (auto pFieldData : listFieldData)		{			COTSParticleList listParticle = pFieldData->GetParticleList();			for (auto pParticle : listParticle)			{				//COTSParticlePtr pParticleNew = COTSParticlePtr(new COTSParticle(*pParticle.get()));				//COTSParticlePtr pParticleNew =pParticle;				m_listParticle.push_back(pParticle);			}		}		return TRUE;	}	BOOL CSmplMsrResultFileMgr::SetAnalysisXrayToList(CPosXrayList a_listAnalysisXray)	{		//m_listAnalysisXray.clear();		for (auto pXray: a_listAnalysisXray)		{			//CPosXrayPtr pXrayNew = pXray;			m_listAnalysisXray.push_back(pXray);		}		return TRUE;	}	// protected	// create a new file	BOOL CSmplMsrResultFileMgr::CreateFileMgr(CString a_strPathname)	{		// check the file pathname		a_strPathname.Trim();		if (a_strPathname.IsEmpty())		{			// file pathname is an empty string			LogTrace(__FILE__, __LINE__, _T("Init: file pathname string is an empty string."));			return FALSE;		}		// create sample measure result file		m_pSmplMsrResultFile = CSmplMsrResultFilePtr(new CSmplMsrResultFile());		SetPathName(a_strPathname);		// ok, return TRUE		return TRUE;	}}
 |