|
#include "stdafx.h"
|
#include "CHTotalPitchMeasure/TotalPitchMeasure.h"
|
//#include "TotalPitchMeasure.h"
|
|
CTotalPitchMeasure::CTotalPitchMeasure()
|
{
|
m_pTP2P = NULL;
|
Reset();
|
}
|
|
CTotalPitchMeasure::~CTotalPitchMeasure()
|
{
|
m_pTP2P = NULL;
|
Reset();
|
}
|
|
void CTotalPitchMeasure::Reset()
|
{
|
for(int nCnt=0; nCnt<4; nCnt++)
|
{
|
m_dAlignMarkPositionX[nCnt] = 0.0;
|
m_dAlignMarkPositionY[nCnt] = 0.0;
|
|
m_dAlignMarkCenterPosX[nCnt] = 0.0;
|
m_dAlignMarkCenterPosY[nCnt] = 0.0;
|
}
|
|
m_dGlassSizeWidth = 0.0;
|
m_dGlassSizeHeight = 0.0;
|
m_dStandardAlignMarkGlassPositionX = 0.0;
|
m_dStandardAlignMarkGlassPositionY = 0.0;
|
|
m_dAlignMarkCenterPositionX = 0.0;
|
m_dAlignMarkCenterPositionY = 0.0;
|
|
m_pAlignTempImage = NULL;
|
|
m_dTotlaPitchAB = 0.0;
|
m_dTotlaPitchCD = 0.0;
|
m_dTotlaPitchAC = 0.0;
|
m_dTotlaPitchBD = 0.0;
|
|
m_dAlignMarkShortDistance = 0.0;
|
m_dAlignMarkLongDistance = 0.0;
|
}
|
|
|
BOOL CTotalPitchMeasure::StartTotalPitchMeasure()
|
{
|
if(m_pTP2P == NULL) return NULL;
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Start Total Pitch Measure!!!"));
|
|
// 1. AlignMark CenterPosition Á¤º¸ ȹµæ
|
if(!GetAlignMarkCenterPosition()) return FALSE;
|
|
// 2. ³×±ºµ¥ÀÇ Align Mark PositionÀ» °è»êÇÑ´Ù
|
if(!CalculateAlignMarkPosition()) return FALSE;
|
|
// 3. ÃÖ¼Ò¹èÀ²·Î º¯°æ
|
if(!m_pTP2P->ITP2P_SetMinMagChange(0)) return FALSE;
|
|
// 4. À̵¿Çϸç Mark ¼öÁý ÁøÇà (Çϳª¶óµµ ½ÇÆÐÇÏ¸é ¹Ù·Î Fail ó¸®)
|
for(int nMarkIdx=0; nMarkIdx < 4; nMarkIdx++) // Mark 4°³ ÃøÁ¤
|
{
|
// 4-1. Motion À̵¿
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Start Move AlignMark : %d"), nMarkIdx);
|
if(!MoveAlignMarkPosition(nMarkIdx))
|
{
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Error Move AlignMark : %d"), nMarkIdx);
|
return FALSE;
|
}
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] End Move AlignMark : %d"), nMarkIdx);
|
|
Sleep(1000);
|
|
// 4-2. Current Review Image ȹµæ ¹× ¸ÅĪ
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Start Get AlignMark Image : %d"), nMarkIdx);
|
if(!GetAlignMarkImageMatching(nMarkIdx))
|
{
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Error Get AlignMark Image : %d"), nMarkIdx);
|
return FALSE;
|
}
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] End Get AlignMark Image : %d"), nMarkIdx);
|
}
|
|
// 5. TotalPitch ÃøÁ¤
|
if(!TotalPitchMeasure())
|
{
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] TotalPitch Measure Fail!!"));
|
return FALSE;
|
}
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] TotalPitch Measure Success!! AB : %.3lf, CD : %.3lf, AC : %.3lf, BD : %.3lf"), GetTotalPitchAB(), GetTotalPitchCD(), GetTotalPitchAC(), GetTotalPitchBD());
|
|
return TRUE;
|
}
|
|
BOOL CTotalPitchMeasure::CalculateAlignMarkPosition()
|
{
|
double dPositionX=0.0, dPositionY=0.0;
|
|
// Glass Size ȹµæ
|
if(!m_pTP2P->ITP2P_GetGlassSize(dPositionX, dPositionY)) return FALSE;
|
SetGlassSizeWidth(dPositionX);
|
SetGlassSizeHeight(dPositionY);
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] GlassSizeX : %.3lf, GlassSizeY : %.3lf!!"), dPositionX, dPositionY);
|
|
// ±âÁØ Align Mark Position ȹµæ
|
if(!m_pTP2P->ITP2P_GetAlignMarkPosition(dPositionX, dPositionY)) return FALSE;
|
SetStandardAlignPosX(dPositionX);
|
SetStandardAlignPosY(dPositionY);
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] MarkPositionX : %.3lf, MarkPositionY : %.3lf!!"), dPositionX, dPositionY);
|
|
// 4°³ÀÇ AlignMark Position °è»ê
|
|
// 300mm ¾ÈÂÊ¿¡¸¸ AlignMark°¡ ÀÖ´Ù°í Reference¸¦ ¼³Á¤ÇصдÙ.
|
int nReferenceSizeX = 300;
|
int nReferenceSizeY = 300;
|
|
//m_dAlignMarkPositionX[4] : ±âÁØÀÇ Mark°¡ 0, ±âÁØ MarkÀÇ Y¹Ý´ëÆíÀÌ 1, ±âÁØ MarkÀÇ X¹Ý´ëÆíÀÌ 2 ±âÁØÀº Ç×»ó ÀÛ¾÷ÀÚ±âÁØ ÁÂÇÏ
|
|
// X¼³°èÄ¡ °è»ê
|
if(GetStandardAlignPosX() > nReferenceSizeX)
|
{
|
m_dAlignMarkPositionX[0] = GetGlassSizeWidth() - GetStandardAlignPosX();
|
m_dAlignMarkPositionX[1] = GetGlassSizeWidth() - GetStandardAlignPosX();
|
m_dAlignMarkPositionX[2] = GetStandardAlignPosX();
|
m_dAlignMarkPositionX[3] = GetStandardAlignPosX();
|
}
|
else
|
{
|
m_dAlignMarkPositionX[0] = GetStandardAlignPosX();
|
m_dAlignMarkPositionX[1] = GetStandardAlignPosX();
|
m_dAlignMarkPositionX[2] = GetGlassSizeWidth() - GetStandardAlignPosX();
|
m_dAlignMarkPositionX[3] = GetGlassSizeWidth() - GetStandardAlignPosX();
|
}
|
|
// Y¼³°èÄ¡ °è»ê
|
if(GetStandardAlignPosY() > nReferenceSizeY)
|
{
|
m_dAlignMarkPositionY[0] = GetGlassSizeHeight() - GetStandardAlignPosY();
|
m_dAlignMarkPositionY[1] = GetStandardAlignPosY();
|
m_dAlignMarkPositionY[2] = GetGlassSizeHeight() - GetStandardAlignPosY();
|
m_dAlignMarkPositionY[3] = GetStandardAlignPosY();
|
}
|
else
|
{
|
m_dAlignMarkPositionY[0] = GetStandardAlignPosY();
|
m_dAlignMarkPositionY[1] = GetGlassSizeHeight() - GetStandardAlignPosY();
|
m_dAlignMarkPositionY[2] = GetStandardAlignPosY();
|
m_dAlignMarkPositionY[3] = GetGlassSizeHeight() - GetStandardAlignPosY();
|
}
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 1 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[0], m_dAlignMarkPositionY[0]);
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 2 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[1], m_dAlignMarkPositionY[1]);
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 3 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[2], m_dAlignMarkPositionY[2]);
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] 4 AlignMarkPosition : %.3lf, %.3lf"), m_dAlignMarkPositionX[3], m_dAlignMarkPositionY[3]);
|
|
SetAlignLongDistance(m_dAlignMarkPositionX[2] - m_dAlignMarkPositionX[0]);
|
SetAlignShortDistance(m_dAlignMarkPositionY[1] - m_dAlignMarkPositionY[0]);
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Align Mark Distance X : %.3lf, Y %.3lf"), GetAlignLongDistance(), GetAlignShortDistance());
|
|
|
return TRUE;
|
}
|
|
BOOL CTotalPitchMeasure::GetAlignMarkCenterPosition()
|
{
|
double dPositionX=0.0, dPositionY=0.0;
|
|
// Glass Size ȹµæ
|
if(!m_pTP2P->ITP2P_GetAlignMarkCenterPosition(dPositionX, dPositionY)) return FALSE;
|
SetAlignMarkCenterPosX(dPositionX);
|
SetAlignMarkCenterPosY(dPositionY);
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Align Mark Center Pos : %.3lf, %.3lf!"), dPositionX, dPositionY);
|
|
return TRUE;
|
}
|
|
BOOL CTotalPitchMeasure::MoveAlignMarkPosition(const int nMarkIndx)
|
{
|
// ¸ð¼Ç ¸í·ÉÀÌ °¡´É ÇÑ »óÅÂÀÎÁö È®ÀÎÇÑ´Ù (Motion End + Command OK)
|
if(m_pTP2P->ITP2P_GetMotionEnable()) // ³»ºÎ¿¡¼ ÃÖ´ë 5Ãʵ¿¾È Enable ½ÅÈ£ È®ÀÎÇÔ
|
{
|
if(!m_pTP2P->ITP2P_MoveMotorGlassPosition(0, GetAlignMarkPosX(nMarkIndx), GetAlignMarkPosY(nMarkIndx)))
|
{
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] %d Mark MovePos Fail!! : %.3lf, %.3lf!"), nMarkIndx, GetAlignMarkPosX(nMarkIndx), GetAlignMarkPosY(nMarkIndx));
|
return FALSE;
|
}
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] %d Mark MovePosCommand!! : %.3lf, %.3lf!"), nMarkIndx, GetAlignMarkPosX(nMarkIndx), GetAlignMarkPosY(nMarkIndx));
|
return TRUE;
|
}
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] MarkPosition MotionEnable Check Fail!!"), nMarkIndx);
|
|
return FALSE;;
|
}
|
|
BOOL CTotalPitchMeasure::GetAlignMarkImageMatching( const int nMarkIndx )
|
{
|
if(m_pTP2P->ITP2P_GetMotionEnable()) // ³»ºÎ¿¡¼ ÃÖ´ë 5Ãʵ¿¾È Enable ½ÅÈ£ È®ÀÎÇÔ
|
{
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Enabl Check Success %d"), nMarkIndx);
|
|
//sjb Test
|
//return TRUE;
|
// ReviewImage¿Í AlignTempleteImage¸¦ ¸ÅĪÇÑ´Ù.
|
double dResultCenterPosX = 0.0, dResultCenterPosY = 0.0;
|
if(!m_pTP2P->ITP2P_StartTemplateMatching(dResultCenterPosX, dResultCenterPosY)) return FALSE;
|
|
// ¸ÅĪ °á°ú¸¦ °á°ú Data¿¡ ä¿ö ³Ö´Â´Ù.
|
m_dAlignMarkCenterPosX[nMarkIndx] = dResultCenterPosX;
|
m_dAlignMarkCenterPosY[nMarkIndx] = dResultCenterPosY;
|
|
return TRUE;
|
}
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Matching MotionEnable Check Fail!!"), nMarkIndx);
|
|
return FALSE;
|
}
|
|
BOOL CTotalPitchMeasure::TotalPitchMeasure()
|
{
|
double dCameraResolution = 0.0;
|
dCameraResolution = m_pTP2P->ITP2P_GetCurrentResolution() / 1000.0; // ÇöÀç ¼³Á¤µÇ¾î ÀÖ´Â ReviewCameraÀÇ ÇØ»óµµ¸¦ °¡Á®¿È
|
if(dCameraResolution <= 0.0) return FALSE;
|
|
// Align Mark Center¿¡ ÀÖÀ»½Ã Çȼ¿ Position
|
double dAlignCenterPositionX = GetAlignMarkCenterPosX();
|
double dAlignCenterPositionY = GetAlignMarkCenterPosY();
|
|
// Align MarkÀÇ Àå,´Üº¯ ¼³°èÄ¡ ±æÀÌ
|
double dAlignMarkLongDistance = GetAlignLongDistance();
|
double dAlignMarkShortDistance = GetAlignShortDistance();
|
|
if(dAlignCenterPositionX <= 0.0 || dAlignCenterPositionY <= 0.0 || dAlignMarkLongDistance <= 0.0 || dAlignMarkShortDistance <= 0.0) return FALSE;
|
|
SetTotalPitchAB(dAlignMarkShortDistance + ((m_dAlignMarkCenterPosY[0] - m_dAlignMarkCenterPosY[1]) * dCameraResolution)); // ÁÂÇÏ -> Á»ó
|
SetTotalPitchCD(dAlignMarkShortDistance + ((m_dAlignMarkCenterPosY[2] - m_dAlignMarkCenterPosY[3]) * dCameraResolution)); // ¿ìÇÏ -> ¿ì»ó
|
SetTotalPitchAC(dAlignMarkLongDistance - ((m_dAlignMarkCenterPosX[0] - m_dAlignMarkCenterPosX[2]) * dCameraResolution)); // ÁÂÇÏ -> ¿ìÇÏ
|
SetTotalPitchBD(dAlignMarkLongDistance - ((m_dAlignMarkCenterPosX[1] - m_dAlignMarkCenterPosX[3]) * dCameraResolution)); // Á»ó -> ¿ì»ó
|
|
m_pTP2P->ITP2P_DisplayMessage(0, _T("[TotalPitchMeasre] Result Data, AB : %.3lf, CD : %.3lf, AC : %.3lf, BD : %.3lf"), GetTotalPitchAB(), GetTotalPitchCD(), GetTotalPitchAC(), GetTotalPitchBD());
|
|
return TRUE;
|
}
|
|
BOOL CTotalPitchMeasure::GetMotorEnable()
|
{
|
if(m_pTP2P == NULL) return NULL;
|
|
return m_pTP2P->ITP2P_GetMotionEnable();
|
}
|