#include "stdafx.h" #include "OTSScanSim.h" #include "otsdataconst.h" namespace OTSController { namespace { CString GetOSCommonDataPathName() { CString strPathName = _T(".\\"); return strPathName; } CString GetCompanySysDataPathName() { CString strCommonDataPathName = GetOSCommonDataPathName(); if (strCommonDataPathName.IsEmpty()) { LogErrorTrace(__FILE__, __LINE__, _T("GetOTSPackSysDataPathName: failed to common data pathname string.")); return _T(""); } CString strCmpSysDataPath = strCommonDataPathName + STR_COMPANYNAME + _T("\\"); return strCmpSysDataPath; } // check if the file exists or not BOOL Exists(LPCTSTR a_sPath) { return ::PathFileExists(a_sPath) == TRUE; } } const CString SIMULATION_IMAGE_FILEPATH = _T("Simulate"); const CString SIMULATION_IMAGE_FILENAME = _T("SimImage.bmp"); COTSScanSim::COTSScanSim() { } COTSScanSim::~COTSScanSim() { } BOOL COTSScanSim::Init() { return TRUE; } // acquire BSE image CBSEImgPtr COTSScanSim::AcquireBSEImage() { CBSEImgPtr poBSEImgPtr = nullptr; poBSEImgPtr = AcquireBSEImageFromBitmapFile(); ASSERT(poBSEImgPtr); if (!poBSEImgPtr) { LogErrorTrace(__FILE__, __LINE__, _T("COTSScanSim::AcquireBSEImage: failed to load simulation image")); } Sleep(1000);//simulate the real sem time delay. return poBSEImgPtr; } // get image from a file CBSEImgPtr COTSScanSim::AcquireBSEImageFromBitmapFile() { // prepare file CFile file; CFileException fe; BYTE* m_pPixel; BYTE* m_pBmInfo; BITMAPFILEHEADER* m_pBmfh; m_pBmfh = new BITMAPFILEHEADER; CBSEImgPtr bseImage; // get simulation image file name CString strOTSSysDataPath = GetCompanySysDataPathName(); CString strBitmapFilePathName = strOTSSysDataPath + SIMULATION_IMAGE_FILEPATH + _T("\\") + SIMULATION_IMAGE_FILENAME; // check if the file exist if (Exists(strBitmapFilePathName)) { if (!file.Open(strBitmapFilePathName, CFile::modeRead, &fe)) { LogInfoTrace(__FILE__, __LINE__, _T("COTSEDSBase::AcquireBSEImageFromBitmapFile: failed to open simulation image file %s."), strBitmapFilePathName); return nullptr; } // read file header file.Read(m_pBmfh, sizeof(BITMAPFILEHEADER)); m_pBmInfo = new BYTE[m_pBmfh->bfOffBits - 14]; file.Read(m_pBmInfo, m_pBmfh->bfOffBits - 14); BITMAPINFOHEADER bmih; memcpy(&bmih, m_pBmInfo, sizeof(BITMAPINFOHEADER)); long width = bmih.biWidth;//获取宽度 int bitCount = bmih.biBitCount;//获取位数 long height = bmih.biHeight;//获取高度 long LineBytes = (width * bitCount + 31) / 32 * 4;//计算每行像素所占的字节数 m_pPixel = new BYTE[height * LineBytes]; file.Read(m_pPixel, height * LineBytes); file.Close(); CRect imageRect(0, 0, width, height); bseImage = CBSEImgPtr(new CBSEImg(imageRect)); bseImage->InitImageData(width, height); BYTE* pImageData = bseImage->GetImageDataPointer(); long nActImageSize = width * height; for (int i = 0; i < height; i++) { memcpy(pImageData + i * width, m_pPixel + (height - i-1) * width, width); } delete[]m_pPixel; delete[]m_pBmInfo; delete m_pBmfh; } else { LogInfoTrace(__FILE__, __LINE__, _T("COTSEDSBase::AcquireBSEImageFromBitmapFile: failed to open simulation image file %s."), strBitmapFilePathName); return nullptr; } return bseImage; } // move beam to point BOOL COTSScanSim::MoveBeamTo(CPoint& a_beamPos) { return FALSE; } // set image size BOOL COTSScanSim::SetImageSize(long a_nImageSizeX,long nHeight) { return TRUE; } // set dwell time BOOL COTSScanSim::SetDwellTime(long a_nDwellTime) { return TRUE; } }