// DlgAlignCamera.cpp : 구현 파일입니다.
|
//
|
|
#include "stdafx.h"
|
#include "ReviewSystem.h"
|
#include "DlgAlignCamera.h"
|
|
// CDlgAlignCamera 대화 상자입니다.
|
IMPLEMENT_DYNAMIC(CDlgAlignCamera, CDialog)
|
|
CDlgAlignCamera::CDlgAlignCamera(CWnd* pParent /*=NULL*/)
|
: CDialog(CDlgAlignCamera::IDD, pParent)
|
, m_nImageMode(0)
|
{
|
InitializeCriticalSection(&m_csImageCaptured);
|
|
Reset();
|
}
|
|
|
CDlgAlignCamera::~CDlgAlignCamera()
|
{
|
Reset();
|
|
DeleteCriticalSection(&m_csImageCaptured);
|
}
|
|
void CDlgAlignCamera::Reset()
|
{
|
for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
|
{
|
CCameraImageView* pView = static_cast<CCameraViewAlign*>(*it);
|
delete pView;
|
}
|
m_vecCameraImageView.clear();
|
int nSize = (int)m_vecCameraImageView.size();
|
|
m_pDAC2P = NULL;
|
}
|
|
void CDlgAlignCamera::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialog::DoDataExchange(pDX);
|
DDX_Control(pDX, IDC_GRID_ALIGN_INFO, m_ctrlAlignInfo);
|
DDX_Control(pDX, IDC_GRID_ORIGIN_INFO, m_ctrlOriginInfo);
|
DDX_Control(pDX, IDC_STATIC_ALIGN_RESULT, m_ctrlAlignResult);
|
DDX_Control(pDX, IDC_STATIC_ALIGN_ANGLE, m_ctrlAlignAngle);
|
DDX_Control(pDX, IDC_STATIC_ALIGN_DX, m_ctrlAlignDx);
|
DDX_Control(pDX, IDC_STATIC_ALIGN_DY, m_ctrlAlignDy);
|
DDX_Control(pDX, IDC_STATIC_ALIGN_OX, m_ctrlAlignOx);
|
DDX_Control(pDX, IDC_STATIC_ALIGN_OY, m_ctrlAlignOy);
|
DDX_Control(pDX, IDC_COMBO_VIEW_FIRST, m_ctrlViewMode);
|
DDX_Control(pDX, IDC_RADIO_IMAGE_MODE_0, m_ctrlImageMode);
|
DDX_Radio(pDX, IDC_RADIO_IMAGE_MODE_0, m_nImageMode);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CDlgAlignCamera, CDialog)
|
ON_BN_CLICKED(IDOK, &CDlgAlignCamera::OnBnClickedOk)
|
ON_BN_CLICKED(IDCANCEL, &CDlgAlignCamera::OnBnClickedCancel)
|
ON_CBN_SELCHANGE(IDC_COMBO_VIEW_FIRST, &CDlgAlignCamera::OnCbnSelchangeComboViewMode)
|
ON_WM_TIMER()
|
ON_BN_CLICKED(IDC_BUTTON_ALIGN_PROCESS, &CDlgAlignCamera::OnBnClickedButtonAlignProcess)
|
ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_0, &CDlgAlignCamera::OnBnClickedRadioImageMode)
|
ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_1, &CDlgAlignCamera::OnBnClickedRadioImageMode)
|
ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_2, &CDlgAlignCamera::OnBnClickedRadioImageMode)
|
ON_BN_CLICKED(IDC_RADIO_IMAGE_MODE_3, &CDlgAlignCamera::OnBnClickedRadioImageMode)
|
ON_MESSAGE(UM_PROCESS_STATUS_UPDATE, &CDlgAlignCamera::OnProcessStatusUpdate)
|
ON_BN_CLICKED(IDC_BUTTON_GET_TEMPLETE_IMAGE, &CDlgAlignCamera::OnBnClickedButtonGetTempleteImage)
|
ON_WM_ERASEBKGND()
|
ON_WM_CTLCOLOR()
|
END_MESSAGE_MAP()
|
|
|
// CDlgAlignCamera 메시지 처리기입니다.
|
|
void CDlgAlignCamera::OnBnClickedOk()
|
{
|
}
|
|
void CDlgAlignCamera::OnBnClickedCancel()
|
{
|
}
|
|
void CDlgAlignCamera::InitGridAlignInfo()
|
{
|
int nRowIdx, nColIdx, nRows, nCols, nFixRows, nFixCols;
|
CString strTemp;
|
CRect rt;
|
|
nRows = 6;
|
nCols = 5;
|
nFixRows = 1;
|
nFixCols = 1;
|
nRowIdx = 0;
|
nColIdx = 0;
|
|
|
// CFont font;
|
// VERIFY(font.CreateFont(
|
// 15, // nHeight
|
// 4, // nWidth
|
// 0, // nEscapement
|
// 0, // nOrientation
|
// FW_NORMAL, // nWeight
|
// FALSE, // bItalic
|
// FALSE, // bUnderline
|
// 0, // cStrikeOut
|
// ANSI_CHARSET, // nCharSet
|
// OUT_DEFAULT_PRECIS, // nOutPrecision
|
// CLIP_DEFAULT_PRECIS, // nClipPrecision
|
// DEFAULT_QUALITY, // nQuality
|
// DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
|
// _T("MS Shell Dlg"))); // lpszFacename
|
//
|
// m_ctrlGlassInfo.SetFont(&font);
|
|
|
m_ctrlAlignInfo.GetClientRect(&rt);
|
m_ctrlAlignInfo.GetDefaultCell(TRUE, FALSE)->SetBackClr(RGB(180, 210, 247));
|
m_ctrlAlignInfo.GetDefaultCell(FALSE, TRUE)->SetBackClr(RGB(180, 210, 247));
|
m_ctrlAlignInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(255, 255, 255));
|
|
m_ctrlAlignInfo.SetRowCount(nRows);
|
m_ctrlAlignInfo.SetColumnCount(nCols);
|
m_ctrlAlignInfo.SetFixedRowCount(nFixRows);
|
m_ctrlAlignInfo.SetFixedColumnCount(nFixCols);
|
|
m_ctrlAlignInfo.SetColumnWidth(0, 95);
|
m_ctrlAlignInfo.SetColumnWidth(1, 70);
|
m_ctrlAlignInfo.SetColumnWidth(2, 70);
|
m_ctrlAlignInfo.SetColumnWidth(3, 70);
|
m_ctrlAlignInfo.SetColumnWidth(4, 70);
|
|
for (int i=0; i<nCols; i++)
|
{
|
m_ctrlAlignInfo.SetRowHeight(i,20);
|
}
|
|
|
GV_ITEM Item;
|
|
nRowIdx = 0;
|
nColIdx = 0;
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T(""));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
// row
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Glass (mm)"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Camera (pxl)"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("R Camera (pxl)"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Motor (mm)"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("R Motor (mm)"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
// col
|
nRowIdx = 0;
|
nColIdx = 1;
|
Item.row = nRowIdx;
|
Item.col = nColIdx++;
|
strTemp.Format(_T("1st X_Pos"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.col = nColIdx++;
|
strTemp.Format(_T("1st Y_Pos"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.row = nRowIdx;
|
Item.col = nColIdx++;
|
strTemp.Format(_T("2nd X_Pos"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
Item.col = nColIdx++;
|
strTemp.Format(_T("2nd Y_Pos"));
|
Item.strText = strTemp;
|
m_ctrlAlignInfo.SetItem(&Item);
|
|
m_ctrlAlignInfo.SetEditable(FALSE);
|
}
|
|
void CDlgAlignCamera::InitGridOriginInfo()
|
{
|
int nRowIdx, nColIdx, nRows, nCols, nFixRows, nFixCols;
|
CString strTemp;
|
CRect rt;
|
|
nRows = 3;
|
nCols = 4;
|
nFixRows = 1;
|
nFixCols = 1;
|
nRowIdx = 0;
|
nColIdx = 0;
|
|
|
// CFont font;
|
// VERIFY(font.CreateFont(
|
// 15, // nHeight
|
// 4, // nWidth
|
// 0, // nEscapement
|
// 0, // nOrientation
|
// FW_NORMAL, // nWeight
|
// FALSE, // bItalic
|
// FALSE, // bUnderline
|
// 0, // cStrikeOut
|
// ANSI_CHARSET, // nCharSet
|
// OUT_DEFAULT_PRECIS, // nOutPrecision
|
// CLIP_DEFAULT_PRECIS, // nClipPrecision
|
// DEFAULT_QUALITY, // nQuality
|
// DEFAULT_PITCH | FF_SWISS, // nPitchAndFamily
|
// _T("MS Shell Dlg"))); // lpszFacename
|
//
|
// m_ctrlGlassInfo.SetFont(&font);
|
|
|
m_ctrlOriginInfo.GetClientRect(&rt);
|
m_ctrlOriginInfo.GetDefaultCell(TRUE, FALSE)->SetBackClr(RGB(180, 210, 247));
|
m_ctrlOriginInfo.GetDefaultCell(FALSE, TRUE)->SetBackClr(RGB(180, 210, 247));
|
m_ctrlOriginInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(255, 255, 255));
|
|
m_ctrlOriginInfo.SetRowCount(nRows);
|
m_ctrlOriginInfo.SetColumnCount(nCols);
|
m_ctrlOriginInfo.SetFixedRowCount(nFixRows);
|
m_ctrlOriginInfo.SetFixedColumnCount(nFixCols);
|
|
m_ctrlOriginInfo.SetColumnWidth(0, 60);
|
m_ctrlOriginInfo.SetColumnWidth(1, 60);
|
m_ctrlOriginInfo.SetColumnWidth(2, 60);
|
m_ctrlOriginInfo.SetColumnWidth(3, 95);
|
|
// for (int i=0; i<nCols; i++)
|
// {
|
// m_ctrlOriginInfo.SetRowHeight(i,25);
|
// }
|
|
GV_ITEM Item;
|
|
nRowIdx = 0;
|
nColIdx = 0;
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T(""));
|
Item.strText = strTemp;
|
m_ctrlOriginInfo.SetItem(&Item);
|
|
// row
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Origin"));
|
Item.strText = strTemp;
|
m_ctrlOriginInfo.SetItem(&Item);
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx++;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Result"));
|
Item.strText = strTemp;
|
m_ctrlOriginInfo.SetItem(&Item);
|
|
// col
|
nRowIdx = 0;
|
nColIdx = 1;
|
Item.row = nRowIdx;
|
Item.col = nColIdx++;
|
strTemp.Format(_T("X (mm)"));
|
Item.strText = strTemp;
|
m_ctrlOriginInfo.SetItem(&Item);
|
|
Item.col = nColIdx++;
|
strTemp.Format(_T("Y (mm)"));
|
Item.strText = strTemp;
|
m_ctrlOriginInfo.SetItem(&Item);
|
|
Item.col = nColIdx++;
|
strTemp.Format(_T("Degree"));
|
Item.strText = strTemp;
|
m_ctrlOriginInfo.SetItem(&Item);
|
|
m_ctrlOriginInfo.SetEditable(FALSE);
|
}
|
|
BOOL CDlgAlignCamera::OnInitDialog()
|
{
|
CDialog::OnInitDialog();
|
{
|
_GroupCtrlOption op = m_ctrlGroupCtrl.getCtrlOption();
|
op.nStyle = 1;
|
op.nStyleSub = 0;
|
op.nFontSize = 15;
|
op.nTextPosX = 20;
|
op.nTextPosY = 3;
|
op.clrTitle = RGB(50,50,50);
|
op.clrOutline = RGB(86,86,86);
|
op.clrFontNormal = RGB(255,255,255);
|
op.nTitleHeight = 24;
|
m_ctrlGroupCtrl.setCtrlOption(op);
|
m_ctrlGroupCtrl.addControl(IDC_STATIC_IMAGE_MODE, this);
|
|
|
|
m_ctrlGroupCtrlAlign.setCtrlOption(op);
|
|
m_ctrlGroupCtrlAlign.addControl(IDC_STATIC_ALIGN_INFO, this);
|
}
|
{
|
_ColorButtonOption op = m_ctrlButtonColorCtrl.getCtrlOption();
|
op.nStyle = 1;
|
op.nEdgeStyle = 1;
|
op.clrButtonShow = RGB(50,50,50);
|
op.clrFontNormal = RGB(255,255,255);
|
op.clrFontPush = RGB(255,255,255);
|
m_ctrlButtonColorCtrl.setCtrlOption(op);
|
m_ctrlButtonColorCtrl.addControl(IDC_BUTTON_GET_TEMPLETE_IMAGE, this);
|
|
}
|
|
|
|
// TODO: 여기에 추가 초기화 작업을 추가합니다.
|
CCameraImageView *pFirstView = new CCameraViewAlign(this);
|
if (pFirstView)
|
{
|
CRect rect;
|
rect.left = 410;
|
rect.top = 60;
|
rect.right = rect.left + 220;
|
rect.bottom = rect.top + 165;
|
pFirstView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY , rect, this, 0);
|
pFirstView->SetViewName(_T("1st"));
|
pFirstView->SetResolution(6.0);
|
pFirstView->SetRulerGab(300.0);
|
pFirstView->ShowWindow(SW_SHOW);
|
m_vecCameraImageView.push_back(pFirstView);
|
}
|
|
CCameraImageView *pSecondView = new CCameraViewAlign(this);
|
if (pSecondView)
|
{
|
CRect rect;
|
rect.left = TAB_WINDOW_SIZE_X - 200;//396;
|
rect.top = 60;
|
rect.right = rect.left + 220;//396;
|
rect.bottom = rect.top + 165;//297;
|
pSecondView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY , rect, this, 0);
|
pSecondView->SetViewName(_T("2nd"));
|
pSecondView->SetResolution(6.0);
|
pSecondView->SetRulerGab(300.0);
|
pSecondView->ShowWindow(SW_SHOW);
|
m_vecCameraImageView.push_back(pSecondView);
|
}
|
|
InitGridOriginInfo();
|
|
InitGridAlignInfo();
|
|
// set Current Point Index
|
CFont font;
|
font.CreateFont(25,0,0,0,900,0,0,0,0,0,0,ANTIALIASED_QUALITY,0,_T("Arial"));
|
m_ctrlAlignResult.SetFont(&font);
|
m_ctrlAlignResult.SetTextAlign(1);
|
m_ctrlAlignResult.SetColor(RGB(0,0,0));
|
m_ctrlAlignResult.SetGradientColor(RGB(0,255,0));
|
m_ctrlAlignResult.SetTextColor(RGB(255,255,255));
|
m_ctrlAlignResult.SetWindowText(_T("Align Result"));
|
|
m_ctrlAlignAngle.SetFontStatic(_T("Arial"), 15, RGB(255,0,255), FS_BOLD | FS_ANTIALIAS | FS_CENTER);
|
m_ctrlAlignAngle.SetBackground(RGB(0,0,0));
|
m_ctrlAlignAngle.SetWindowText(_T("0.0"));
|
|
m_ctrlAlignDx.SetFontStatic(_T("Arial"), 15, RGB(255,0,255), FS_BOLD | FS_ANTIALIAS | FS_CENTER);
|
m_ctrlAlignDx.SetBackground(RGB(0,0,0));
|
m_ctrlAlignDx.SetWindowText(_T("0.0"));
|
|
m_ctrlAlignDy.SetFontStatic(_T("Arial"), 15, RGB(255,0,255), FS_BOLD | FS_ANTIALIAS | FS_CENTER);
|
m_ctrlAlignDy.SetBackground(RGB(0,0,0));
|
m_ctrlAlignDy.SetWindowText(_T("0.0"));
|
|
m_ctrlAlignOx.SetFontStatic(_T("Arial"), 15, RGB(255,255,0), FS_BOLD | FS_ANTIALIAS | FS_CENTER);
|
m_ctrlAlignOx.SetBackground(RGB(0,0,0));
|
m_ctrlAlignOx.SetWindowText(_T("0.0"));
|
|
m_ctrlAlignOy.SetFontStatic(_T("Arial"), 15, RGB(255,255,0), FS_BOLD | FS_ANTIALIAS | FS_CENTER);
|
m_ctrlAlignOy.SetBackground(RGB(0,0,0));
|
m_ctrlAlignOy.SetWindowText(_T("0.0"));
|
|
m_ctrlViewMode.InsertString(View_Camera, _T("Live"));
|
m_ctrlViewMode.InsertString(View_Result, _T("Result"));
|
m_ctrlViewMode.InsertString(View_Template, _T("Template"));
|
m_ctrlViewMode.InsertString(View_Matching, _T("Matching"));
|
m_ctrlViewMode.SetCurSel(View_Camera);
|
|
UpdateCameraView();
|
|
m_SharedImageData.CreateMemory(4);
|
|
SetTimer(1000, 100, NULL);
|
|
return TRUE;
|
}
|
|
void CDlgAlignCamera::SetGridAlignInfo()
|
{
|
CString strValue = _T("");
|
|
// glass pos
|
int nRowIdx = 1;
|
int nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionX[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionY[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionX[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dGlassPositionY[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
|
// camera pos
|
nRowIdx = 2;
|
nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelX[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelY[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelX[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPixelY[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
// find camera pos
|
nRowIdx = 3;
|
nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelX[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelY[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelX[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPixelY[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
// motor pos
|
nRowIdx = 4;
|
nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionX[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionY[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionX[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignRecipe.dOriginPositionY[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
// find motor pos
|
nRowIdx = 5;
|
nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionX[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionY[0]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionX[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_AlignResult.dFindPositionY[1]);
|
m_ctrlAlignInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
m_ctrlAlignInfo.Invalidate(FALSE);
|
}
|
void CDlgAlignCamera::SetGridOriginInfo()
|
{
|
CString strValue = _T("");
|
|
// org pos
|
int nRowIdx = 1;
|
int nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_sPreAlignResult.dOriginX);
|
m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_sPreAlignResult.dOriginY);
|
m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.6lf"), m_sPreAlignResult.dDegree);
|
m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
// find
|
nRowIdx = 2;
|
nColIdx = 1;
|
strValue.Format(_T("%.3lf"), m_sPostAlignResult.dOriginX);
|
m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.3lf"), m_sPostAlignResult.dOriginY);
|
m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
strValue.Format(_T("%.6lf"), m_sPostAlignResult.dDegree);
|
m_ctrlOriginInfo.SetItemText(nRowIdx, nColIdx++, strValue);
|
|
m_ctrlOriginInfo.Invalidate(FALSE);
|
}
|
|
LRESULT CDlgAlignCamera::OnProcessStatusUpdate(WPARAM wParam, LPARAM lParam)
|
{
|
CString strValue = _T("None");
|
|
switch(m_AlignResult.nResultCode)
|
{
|
case -2:
|
strValue = _T("Find Fail");
|
m_ctrlAlignResult.SetGradientColor(RGB(255,0,0));
|
SetImageMode(View_Camera);
|
break;
|
|
case -1:
|
strValue = _T("Template Fail");
|
m_ctrlAlignResult.SetGradientColor(RGB(255,0,0));
|
SetImageMode(View_Camera);
|
break;
|
|
case 0:
|
strValue = _T("None");
|
m_ctrlAlignResult.SetGradientColor(RGB(255,255,0));
|
SetImageMode(View_Camera);
|
break;
|
|
case 1:
|
strValue = _T("Success");
|
m_ctrlAlignResult.SetGradientColor(RGB(0,255,0));
|
SetImageMode(View_Camera);
|
break;
|
|
case 2:
|
|
break;
|
}
|
|
m_ctrlAlignResult.SetWindowText(strValue);
|
|
SetGridOriginInfo();
|
|
SetGridAlignInfo();
|
|
if (m_pDAC2P)
|
{
|
m_pDAC2P->DAC2P_SetActiveAlignCameraDialog();
|
}
|
|
return 1;
|
}
|
|
void CDlgAlignCamera::UpdateProcessStatus(int nLineType, int nMachineType, int nProcessStatus, const CGlassResult* pGlassResult)
|
{
|
if (pGlassResult==NULL) return;
|
|
switch(nProcessStatus)
|
{
|
case ProcessLoading:
|
{
|
m_AlignRecipe = pGlassResult->m_AlignRecipe;
|
m_AlignResult.Reset();
|
m_sPreAlignResult.Reset();
|
m_sPostAlignResult.Reset();
|
|
CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator();
|
if (pCal)
|
{
|
m_sPreAlignResult = pCal->GetAlignResult();
|
}
|
this->PostMessage(UM_PROCESS_STATUS_UPDATE);
|
}
|
break;
|
/*
|
case ProcessReadRawFile:
|
m_AlignResult = pGlassResult->m_AlignResult;
|
CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator();
|
if (pCal)
|
{
|
m_sPostAlignResult = pCal->GetAlignResult();
|
}
|
this->PostMessage(UM_PROCESS_STATUS_UPDATE);
|
break;
|
*/
|
}
|
|
}
|
|
void CDlgAlignCamera::UpdateAlignResult(const CGlassResult* pGlassResult)
|
{
|
if (pGlassResult==NULL) return;
|
|
m_AlignResult = pGlassResult->m_AlignResult;
|
CCoordCalibrator* pCal = m_pDAC2P->DAC2P_GetCoordCalibrator();
|
if (pCal)
|
m_sPostAlignResult = pCal->GetAlignResult();
|
|
this->PostMessage(UM_PROCESS_STATUS_UPDATE);
|
}
|
|
void CDlgAlignCamera::SetAlignResult(int nResultCode, double dDX, double dDy, double dTheta)
|
{
|
return;
|
|
CString strValue = _T("");
|
|
//Align_Fail=-2, Align_TempFail=-1, Align_None=0, Align_Success=1
|
switch(nResultCode)
|
{
|
case -2:
|
strValue.Format(_T("%.3lf"), dDX);
|
m_ctrlAlignOx.SetWindowText(strValue);
|
strValue.Format(_T("%.3lf"), dDy);
|
m_ctrlAlignOy.SetWindowText(strValue);
|
|
strValue = _T("Find Fail");
|
m_ctrlAlignResult.SetGradientColor(RGB(255,0,0));
|
m_ctrlViewMode.SetCurSel(View_Camera);
|
break;
|
|
case -1:
|
strValue.Format(_T("%.3lf"), dDX);
|
m_ctrlAlignOx.SetWindowText(strValue);
|
strValue.Format(_T("%.3lf"), dDy);
|
m_ctrlAlignOy.SetWindowText(strValue);
|
|
strValue = _T("Temp Fail");
|
m_ctrlAlignResult.SetGradientColor(RGB(255,0,0));
|
m_ctrlViewMode.SetCurSel(View_Camera);
|
break;
|
|
case 0:
|
strValue.Format(_T("%.3lf"), dDX);
|
m_ctrlAlignOx.SetWindowText(strValue);
|
strValue.Format(_T("%.3lf"), dDy);
|
m_ctrlAlignOy.SetWindowText(strValue);
|
|
strValue = _T("None");
|
m_ctrlAlignResult.SetGradientColor(RGB(255,255,0));
|
m_ctrlViewMode.SetCurSel(View_Camera);
|
break;
|
|
case 1:
|
strValue.Format(_T("%.3lf"), dDX);
|
m_ctrlAlignDx.SetWindowText(strValue);
|
strValue.Format(_T("%.3lf"), dDy);
|
m_ctrlAlignDy.SetWindowText(strValue);
|
|
strValue = _T("Success");
|
m_ctrlAlignResult.SetGradientColor(RGB(0,255,0));
|
m_ctrlViewMode.SetCurSel(View_Result);
|
break;
|
|
case 2:
|
|
break;
|
}
|
m_ctrlAlignResult.SetWindowText(strValue);
|
|
strValue.Format(_T("%.6lf"), dTheta);
|
m_ctrlAlignAngle.SetWindowText(strValue);
|
|
OnCbnSelchangeComboViewMode();
|
}
|
|
void CDlgAlignCamera::UpdateCameraView()
|
{
|
for (int i=0; i<(int)m_vecCameraImageView.size(); i++)
|
{
|
if (m_vecCameraImageView[i]==NULL) continue;
|
|
m_vecCameraImageView[i]->Invalidate(TRUE);
|
}
|
}
|
|
void CDlgAlignCamera::UpdateCameraView(int nCameraIndex)
|
{
|
if (nCameraIndex<0 || nCameraIndex>=(int)m_vecCameraImageView.size())
|
{
|
return;
|
}
|
|
if (m_vecCameraImageView[nCameraIndex]==NULL)
|
{
|
return;
|
}
|
|
m_vecCameraImageView[nCameraIndex]->Invalidate(TRUE);
|
}
|
|
void CDlgAlignCamera::OnCbnSelchangeComboViewMode()
|
{
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
if (m_ctrlViewMode.GetCurSel()==View_Camera)
|
{
|
SetTimer(1000, 100, NULL);
|
return;
|
}
|
|
KillTimer(1000);
|
|
if (m_pDAC2P)
|
{
|
int nIndex = 0;
|
for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
|
{
|
CCHImageData imageData;
|
if (m_pDAC2P->DAC2P_GetAlignImage(m_ctrlViewMode.GetCurSel(), nIndex, &imageData))
|
{
|
(*it)->SetOriginImage(&imageData);
|
}
|
nIndex++;
|
}
|
}
|
|
}
|
|
BOOL CDlgAlignCamera::DestroyWindow()
|
{
|
// TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다.
|
EnterCriticalSection(&m_csImageCaptured);
|
for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
|
{
|
CCameraImageView* pView = static_cast<CCameraImageView*>(*it);
|
pView->DestroyWindow();
|
}
|
LeaveCriticalSection(&m_csImageCaptured);
|
|
m_SharedImageData.DeleteMemory();
|
|
return __super::DestroyWindow();
|
}
|
|
void CDlgAlignCamera::OnTimer(UINT_PTR nIDEvent)
|
{
|
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
|
if (nIDEvent==1000)
|
{
|
KillTimer(nIDEvent);
|
|
int nViewIndex = 2;
|
for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
|
{
|
if (m_SharedImageData.GetUpdated(nViewIndex))
|
{
|
if (m_SharedImageData.LockImageData(nViewIndex))
|
{
|
const SSharedImageInfo* pImageInfo = m_SharedImageData.GetImageInfo(nViewIndex);
|
const BYTE* pImageData = m_SharedImageData.GetImageData(nViewIndex);
|
|
if (pImageInfo && pImageData)
|
{
|
if ((*it)->SetOriginImage(pImageInfo->nImageWidth, pImageInfo->nImageHeight, pImageInfo->nImageChannels, pImageInfo->nImageWidthStep, pImageData))
|
{
|
(*it)->SetRulerGab(300.0);
|
(*it)->SetRulerGab(pImageInfo->dRulerGab); // um
|
(*it)->SetResolution(pImageInfo->dResolution); // um
|
|
switch(pImageInfo->nCameraIndex)
|
{
|
case 0:
|
(*it)->SetViewName(_T("1st"));
|
break;
|
case 1:
|
(*it)->SetViewName(_T("2nd"));
|
break;
|
}
|
|
(*it)->Invalidate(TRUE);
|
}
|
}
|
|
m_SharedImageData.UnlockImageData(nViewIndex);
|
}
|
}
|
|
nViewIndex++;
|
}
|
|
SetTimer(nIDEvent, 100, NULL);
|
|
}
|
|
CDialog::OnTimer(nIDEvent);
|
}
|
|
void CDlgAlignCamera::OnBnClickedButtonAlignProcess()
|
{
|
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
|
if (m_pDAC2P==NULL) return;
|
|
m_pDAC2P->DAC2P_ManualAlignProcess();
|
}
|
|
void CDlgAlignCamera::OnBnClickedRadioImageMode()
|
{
|
UpdateData(TRUE);
|
|
SetImageMode(m_nImageMode);
|
}
|
|
void CDlgAlignCamera::SetImageMode(int nMode)
|
{
|
m_nImageMode = nMode;
|
|
UpdateData(FALSE);
|
|
if (m_nImageMode==View_Camera)
|
{
|
SetTimer(1000, 100, NULL);
|
return;
|
}
|
|
KillTimer(1000);
|
|
if (m_pDAC2P)
|
{
|
int nIndex = 0;
|
for (VectorCameraImageViewIt it=m_vecCameraImageView.begin(); it!=m_vecCameraImageView.end(); it++)
|
{
|
CCHImageData imageData;
|
if (m_pDAC2P->DAC2P_GetAlignImage(nMode, nIndex, &imageData))
|
{
|
(*it)->SetOriginImage(&imageData);
|
}
|
nIndex++;
|
}
|
}
|
|
|
|
}
|
|
void CDlgAlignCamera::OnBnClickedButtonGetTempleteImage()
|
{
|
if (m_pDAC2P==NULL) return;
|
|
m_pDAC2P->DAC2P_SaveAlignTempImage();
|
}
|
|
|
BOOL CDlgAlignCamera::OnEraseBkgnd(CDC* pDC)
|
{
|
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
|
CRect rect;
|
GetClientRect(&rect);
|
__super::OnEraseBkgnd(pDC);
|
pDC->FillSolidRect(rect, RGB(38,38,38) );
|
|
return TRUE;
|
}
|
|
|
HBRUSH CDlgAlignCamera::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
{
|
HBRUSH hbr = __super::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
CRect rect;
|
CString strClass = _T("");
|
UINT nID = pWnd->GetDlgCtrlID();
|
|
if(nCtlColor == CTLCOLOR_STATIC)
|
{
|
pDC->SetTextColor(RGB(255,255,255));
|
pDC->SetBkColor(RGB(38,38,38));
|
hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
|
}
|
|
|
// TODO: 기본값이 적당하지 않으면 다른 브러시를 반환합니다.
|
return hbr;
|
}
|