123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265 |
- #include "stdafx.h"
- #include "OTSScanOxford.h"
- #define TRACE_HERE /*NOP*/
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #endif
- namespace OTSController
- {
- COTSScanOxford::COTSScanOxford(void)
- {
- LogTrace(__FILE__, __LINE__, _T("%s controller created"), (LPCTSTR)GetName());
- }
- COTSScanOxford::~COTSScanOxford(void)
- {
- LogTrace(__FILE__, __LINE__, _T("%s controller finished"), (LPCTSTR)GetName());
- }
- // initialisation
- BOOL COTSScanOxford::Init()
- {
- // get bruker initialize controller
- if (!m_oxfordImpl)
- {
- // get bruker controller
- m_oxfordImpl = OxfordImpl::GetInstance();
- }
- BOOL ifconnect = true;
- if (!m_oxfordImpl->IsConnected())
- {
- ifconnect = m_oxfordImpl->Connect();
- }
- return ifconnect;
- }
- CSize COTSScanOxford::GetMatrixSize(int /*a_nMatrixIndex*/)
- {
- // method return value
- CSize oRet = CSize(0);
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return oRet;
- }
- long nWidth = 0, nHeight = 0;
- if (m_oxfordImpl->GetImageSize(nWidth, nHeight))
- {
- oRet.SetSize(nWidth, nHeight);
- }
- return oRet;
- }
- BOOL COTSScanOxford::MoveBeamTo(CPoint& a_beamPos)
- {
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return false;
- }
- bool bRet = m_oxfordImpl->SetBeamPosition(a_beamPos.x, a_beamPos.y);
- return bRet;
- }
- // Start Scan Table
- BOOL COTSScanOxford::StartScanTable (int a_nMatrixIndex, unsigned int nP, int* px, int* py)
- {
- CSize szMatrix = GetMatrixSize(a_nMatrixIndex);
- double stepSize = ((double)m_szScanRange.cx) /((double) szMatrix.cx);
- for (unsigned int i = 0 ; i < nP ; i++)
- {
- px[i] = (int) (px[i] * stepSize) ;
- py[i] = m_szScanRange.cy - (int) (py[i] * stepSize) ;
- }
- return true;
- }
- /// set image size
- /// input long nImageSize
- /// return true if success
- BOOL COTSScanOxford::SetImageSize(long newImageSize,long nHeight)
- {
-
- // safety check
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return false;
- }
- if (!m_oxfordImpl->SetImageSize(newImageSize, nHeight))
- {
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return FALSE;
- }
- }
- return true;
- }
- /// set dwell time
- /// input long a_nDwellTime
- /// return true if success
- BOOL COTSScanOxford::SetDwellTime(long nDwellTime)
- {
-
- // safety check
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return false;
- }
- if (!m_oxfordImpl->SetScanSpeed(nDwellTime))
- {
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return FALSE;
- }
- }
- return true;
- }
- CBSEImgPtr COTSScanOxford::AcquireBSEImage(int /*a_nMatrixIndex*/, int /*nReads*/, int /*nDwell*/)
- {
-
- // safety check
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return nullptr;
- }
- long nWidth, nHeight;
- if (!m_oxfordImpl->GetImageSize(nWidth, nHeight))
- {
- LogErrorTrace(__FILE__, __LINE__, _T("Call GetImageSize failed."));
-
- return nullptr;
- }
- long nImageSize = nWidth * nHeight;
- if (nImageSize <= 0)
- {
- LogErrorTrace(__FILE__, __LINE__, _T("AcquireBSEImage failed: invalid image size (%d, %d)."), nWidth, nHeight);
-
- return nullptr;
- }
- std::vector<BYTE> vecImage(nImageSize, 0);
- if (!m_oxfordImpl->CollectImage(&vecImage[0]))
- {
- LogErrorTrace(__FILE__, __LINE__, _T("Call CollectImage failed."));
-
- return nullptr;
- }
- CRect imageRect(0, 0, nWidth, nHeight);
- CBSEImgPtr bseImage(new CBSEImg(imageRect));
-
- //bseImage->SetImageRect(imageRect);
- bseImage->InitImageData(nWidth, nHeight);
- BYTE* pImageData = bseImage->GetImageDataPointer();
- memcpy(pImageData, &vecImage[0], nWidth * nHeight);
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return bseImage;
- }
- return bseImage;
- }
- long COTSScanOxford::GetDwellTimeByIndex(const long a_nIndex)
- {
- // dwell time
- if(a_nIndex < DWELLTIME_OXFORD_ID_MIN || a_nIndex > DWELLTIME_OXFORD_ID_MAX)
- {
- // error, invalid scan speed value
- LogErrorTrace(__FILE__, __LINE__, _T("Scan speed (Dwell time) index (%d) error."), a_nIndex);
- ASSERT(FALSE);
- return -1;
- }
- // convert dwell time index to dwell time value
- return DWELLTIME_OXFORD_VALUES[a_nIndex];
- }
- BOOL COTSScanOxford::SetDwellTimeByIndex(const long a_nDwellTimeIndex)
- {
- // dwell time
- if(a_nDwellTimeIndex < DWELLTIME_OXFORD_ID_MIN || a_nDwellTimeIndex > DWELLTIME_OXFORD_ID_MAX)
- {
- // error, invalid scan speed value
- LogErrorTrace(__FILE__, __LINE__, _T("Scan speed index (%d) error."), a_nDwellTimeIndex);
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return FALSE;
- }
- }
- // convert dwell time index to dwell time value
- long nDwellTimeLong = DWELLTIME_OXFORD_VALUES[a_nDwellTimeIndex];
- if (!SetDwellTime(nDwellTimeLong))
- {
- // error, failed to set dwell time
- LogErrorTrace(__FILE__, __LINE__, _T("Failed to set dwell time (%d)."), a_nDwellTimeIndex);
- ASSERT(m_oxfordImpl);
- if (!m_oxfordImpl)
- {
- return FALSE;
- }
- }
- return true;
- }
- BOOL COTSScanOxford::SetScanFieldSize(const int a_nWidth, const int a_nHeight)
- {
- m_nScanFieldSizeX = a_nWidth;
- m_nScanFieldSizeY = a_nHeight;
- return TRUE;
- }
- // set the SEM position
- BOOL COTSScanOxford::SetEMPosition(const int a_nPosX, const int a_nPosY)
- {
- m_nCurrentBSEPositionX = a_nPosX;
- m_nCurrentBSEPositionY = a_nPosY;
- return TRUE;
- }
-
- }
|