#include "StdAfx.h"
|
#include "CHReviewResult/AlignResult.h"
|
#include "CHAlignFinder/AlignFinder.h"
|
|
CAlignRecipe::CAlignRecipe()
|
{
|
Reset();
|
}
|
|
CAlignRecipe::~CAlignRecipe()
|
{
|
Reset();
|
}
|
|
void CAlignRecipe::Reset()
|
{
|
nRecipeIndex = -1;
|
m_nUseAlignPosMove = 0;
|
|
bAlignSkipMode = FALSE;
|
bUseTotalPitchMeasure = FALSE;
|
// image matching
|
bUseImage = TRUE;
|
dMatchingRate = 0.8;
|
strFirstImageFile = _T("");
|
strSecondImageFile = _T("");
|
strTotalPitchImageFile = _T("");
|
|
// edge find param
|
bUseEdge = TRUE;
|
nEdgeWidth = ALIGN_MARK_WIDTH;
|
nEdgeHeight = ALIGN_MARK_HEIGHT;
|
nEdgeThreshold = 40;
|
nMergeRange = 4;
|
dEdgeRate = 0.8;
|
// nAlignMarkPosition = AlignMarkPositionLeft;
|
nAlignMarkPosition = 0;
|
|
// manual light control
|
bManualProcess = FALSE;
|
dFirstCamExposure = 15000.0;
|
dSecondCamExposure = 15000.0;
|
|
// auto light control
|
bAutoProcess = FALSE;
|
dTargetMin = 60;
|
dTargetMax = 100;
|
dExposureMin = 1000;
|
dExposureMax = 30000;
|
|
// rotate
|
bRotateProcess = FALSE;
|
nRetryCount = 3;
|
dGlassAngleMin = 0.00000001;
|
dGlassAngleMax = 0.00000003;
|
|
|
for (int i=0; i<2; i++)
|
{
|
dOriginPixelX[i] = 0.0;
|
dOriginPixelY[i] = 0.0;
|
|
nCameraDirX[i] = 1;
|
nCameraDirY[i] = 1;
|
|
dCameraResolution[i] = 1.0;
|
|
dOriginPositionX[i] = 0.0;
|
dOriginPositionY[i] = 0.0;
|
dGlassPositionX[i] = 0.0;
|
dGlassPositionY[i] = 0.0;
|
|
strTemplateName[i] = _T("");
|
}
|
}
|
|
CAlignResult::CAlignResult(void)
|
{
|
Reset();
|
}
|
|
CAlignResult::~CAlignResult(void)
|
{
|
Reset();
|
}
|
|
void CAlignResult::Reset()
|
{
|
nFindCount = 1;
|
nResultCode = 0;
|
|
for (int i=0; i<2; i++)
|
{
|
dFindPixelX[i] = 0.0;
|
dFindPixelY[i] = 0.0;
|
|
dFindScore[i] = 0.0;
|
|
dFindPositionX[i] = 0.0;
|
dFindPositionY[i] = 0.0;
|
|
nFindAlign[i] = -1;
|
nControlLightLevel[i] = 0;
|
nAutoLightResult[i] = 0;
|
dExposureTime[i] = -1.0;
|
}
|
}
|
|
void CAlignResult::SetFindResult(const CAlignRecipe& alignRecipe)
|
{
|
if (nResultCode!=1) return;
|
|
// calculate current mark position
|
for (int i=0; i<2; i++)
|
{
|
double dRes = alignRecipe.dCameraResolution[i] / 1000.;
|
|
dFindPositionX[i] = (dFindPixelX[i] - alignRecipe.dOriginPixelX[i]) * dRes; // mm
|
dFindPositionY[i] = (dFindPixelY[i] - alignRecipe.dOriginPixelY[i]) * dRes; // mm
|
|
dFindPositionX[i] *= alignRecipe.nCameraDirX[i]; // dir
|
dFindPositionY[i] *= alignRecipe.nCameraDirY[i]; // dir
|
|
dFindPositionX[i] = alignRecipe.dOriginPositionX[i] + dFindPositionX[i]; // mm
|
dFindPositionY[i] = alignRecipe.dOriginPositionY[i] + dFindPositionY[i]; // mm
|
}
|
}
|
|
|
BOOL CAlignResult::AlignFindEnd()
|
{
|
for(int i=0; i <2; i++)
|
{
|
if (nFindAlign[i]==-1) return FALSE;
|
}
|
return TRUE;
|
}
|
|
int CAlignResult::GetResultCode()
|
{
|
for(int i=0; i <2; i++)
|
{
|
if (nFindAlign[i]==0) return -2;
|
}
|
return 1;
|
}
|