// DlgDefectFind.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù.
|
//
|
|
#include "stdafx.h"
|
#include "ReviewRecipeEditor.h"
|
#include "DlgDefectFind.h"
|
#include "ReviewRecipeEditorDlg.h"
|
#include "CHImageControls/CHImageView.h"
|
#include "CHImageControls/CHImageProcess.h"
|
#include "CHReviewDefectFinder/ReviewDefectFinder.h"
|
|
using namespace CHImageControls;
|
|
// CDlgDefectFind ´ëÈ »óÀÚÀÔ´Ï´Ù.
|
|
IMPLEMENT_DYNAMIC(CDlgDefectFind, CDialog)
|
|
CDlgDefectFind::CDlgDefectFind(CWnd* pParent /*=NULL*/)
|
: CDialog(CDlgDefectFind::IDD, pParent)
|
{
|
m_pImageView = new CCHImageView(this);
|
m_pSourceImage = new CCHImageData();
|
m_pResultImage = new CCHImageData();
|
m_pBandImage = new CCHImageData();
|
m_pDefectFindProcess = new CReviewDefectFinder();
|
}
|
|
CDlgDefectFind::~CDlgDefectFind()
|
{
|
if (m_pImageView) delete m_pImageView;
|
if (m_pSourceImage) delete m_pSourceImage;
|
if (m_pResultImage) delete m_pResultImage;
|
if (m_pBandImage) delete m_pBandImage;
|
if (m_pDefectFindProcess) delete m_pDefectFindProcess;
|
}
|
|
void CDlgDefectFind::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialog::DoDataExchange(pDX);
|
DDX_Control(pDX, IDC_GRID_RCP_DEFECT_FIND_INFO, m_ctrlGridDefectFindInfo);
|
DDX_Control(pDX, IDC_GRID_RCP_DEFECT_RESULT, m_ctrlGridDefectResult);
|
DDX_Control(pDX, IDC_CHECK_DEFECT_FIND, m_ctrlCheckDefectFind);
|
DDX_Control(pDX, IDC_RADIO_VIEW_TYPE_0, m_ctrlViewType);
|
DDX_Control(pDX, IDC_CHECK_VIEW_DEFECT, m_ctrlViewDefect);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CDlgDefectFind, CDialog)
|
ON_BN_CLICKED(IDC_BUTTON_RCP_DEFECT_FIND_RESET, &CDlgDefectFind::OnBnClickedButtonRcpDefectFindReset)
|
ON_BN_CLICKED(IDC_BUTTON_RCP_DEFECT_FIND_APPLY, &CDlgDefectFind::OnBnClickedButtonRcpDefectFindApply)
|
ON_BN_CLICKED(IDC_BUTTON_LOAD_IMAGE, &CDlgDefectFind::OnBnClickedButtonLoadImage)
|
ON_BN_CLICKED(IDC_BUTTON_INSPECT_TEST, &CDlgDefectFind::OnBnClickedButtonInspectTest)
|
ON_BN_CLICKED(IDC_BUTTON_SAVE_IMAGE, &CDlgDefectFind::OnBnClickedButtonSaveImage)
|
ON_BN_CLICKED(IDC_RADIO_VIEW_TYPE_0, &CDlgDefectFind::OnBnClickedRadioViewType0)
|
ON_BN_CLICKED(IDC_RADIO_VIEW_TYPE_1, &CDlgDefectFind::OnBnClickedRadioViewType1)
|
ON_BN_CLICKED(IDC_CHECK_VIEW_DEFECT, &CDlgDefectFind::OnBnClickedCheckViewDefect)
|
END_MESSAGE_MAP()
|
|
|
// CDlgDefectFind ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù.
|
|
BOOL CDlgDefectFind::OnInitDialog()
|
{
|
CDialog::OnInitDialog();
|
|
// TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù.
|
InitDefectFindInfoGridControl();
|
|
FillDefectFindInfo();
|
|
InitDefectResultGridControl();
|
|
if (m_pImageView)
|
{
|
CRect rect;
|
rect.left = 10;
|
rect.top = 180;
|
rect.right = rect.left + 552;
|
rect.bottom = rect.top + 414;
|
|
m_pImageView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY , rect, this, 0);
|
m_pImageView->SetDrawType(DrawFit);
|
m_pImageView->ShowWindow(SW_SHOW);
|
}
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
// ¿¹¿Ü: OCX ¼Ó¼º ÆäÀÌÁö´Â FALSE¸¦ ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù.
|
}
|
|
BOOL CDlgDefectFind::PreTranslateMessage(MSG* pMsg)
|
{
|
// TODO: ¿©±â¿¡ Ư¼öÈµÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù.
|
if( pMsg->message == WM_KEYDOWN )
|
{
|
if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE )
|
{
|
::TranslateMessage(pMsg);
|
::DispatchMessage(pMsg);
|
return TRUE;
|
}
|
}
|
|
return CDialog::PreTranslateMessage(pMsg);
|
}
|
|
void CDlgDefectFind::OnBnClickedButtonRcpDefectFindReset()
|
{
|
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
int i, nRowIdx, nColIdx;
|
CString strItemText;
|
|
nRowIdx = 1;
|
strItemText = _T("");
|
|
nColIdx = 0;
|
for(i = 0; i < DEFECT_FIND_INFO_GRID_COL_COUNT; i++)
|
{
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx++, strItemText);
|
}
|
m_ctrlGridDefectFindInfo.Invalidate(FALSE);
|
|
m_ctrlCheckDefectFind.SetCheck(FALSE);
|
}
|
|
void CDlgDefectFind::OnBnClickedButtonRcpDefectFindApply()
|
{
|
// TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù.
|
UpdateData(TRUE);
|
|
int nRowIdx, nColIdx;
|
CString strItemText;
|
CRcp_RsDefectFindManager* pRcpRsDefectFindManager = NULL;
|
CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd();
|
if(pDlg == NULL) return;
|
|
|
pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager();
|
if(pRcpRsDefectFindManager == NULL) return;
|
|
|
nRowIdx = 0;
|
nColIdx = 1;
|
|
//¼öÇà À¯¹«
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_bDefectFind = m_ctrlCheckDefectFind.GetCheck();
|
|
// °Ë»ç¹æÇâ
|
CStringArray strArrayOption;
|
strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx);
|
CGridCellCombo* pCellCombo = (CGridCellCombo*)m_ctrlGridDefectFindInfo.GetCell(nRowIdx, nColIdx);
|
if(pCellCombo)
|
{
|
strArrayOption.RemoveAll();
|
strItemText = pCellCombo->GetText();
|
pCellCombo->GetOptions(strArrayOption);
|
int nArrayCount = (int)strArrayOption.GetCount();
|
CString strTemp = _T("");
|
for(int i = 0; i < nArrayCount; i++)
|
{
|
strTemp = strArrayOption.GetAt(i);
|
if(strTemp.Compare(strItemText) == 0)
|
{
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection = i;
|
break;
|
}
|
}
|
}
|
nRowIdx++;
|
|
|
//X ¹æÇâ ÇÇÄ¡
|
strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx);
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX = _ttoi(strItemText);
|
nRowIdx++;
|
|
//Y ¹æÇâ ÇÇÄ¡
|
strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx);
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY = _ttoi(strItemText);
|
nRowIdx++;
|
|
//ÀÚµ¿ ÇÇÄ¡ Ž»ö ¹üÀ§
|
strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx);
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange = _ttoi(strItemText);
|
nRowIdx++;
|
|
// ¹®Åΰª1
|
strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx);
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold = _ttoi(strItemText);
|
nRowIdx++;
|
|
// ¹®Åΰª2
|
strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx);
|
pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2 = _ttoi(strItemText);
|
nRowIdx++;
|
|
}
|
|
void CDlgDefectFind::InitDefectFindInfoGridControl()
|
{
|
int nRowIdx, nColIdx, nRows, nCols, nFixRows, nDataColumnWidth, nMargin;
|
CString strTemp;
|
CRect rect;
|
|
nRows = DEFECT_FIND_INFO_GRID_ROW_COUNT;
|
nCols = DEFECT_FIND_INFO_GRID_COL_COUNT;
|
nFixRows = 1;
|
nRowIdx = 0;
|
nColIdx = 0;
|
|
m_ctrlGridDefectFindInfo.GetWindowRect(&rect);
|
m_ctrlGridDefectFindInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
|
m_ctrlGridDefectFindInfo.SetRowCount(nRows);
|
m_ctrlGridDefectFindInfo.SetColumnCount(nCols);
|
m_ctrlGridDefectFindInfo.SetFixedColumnCount(nFixRows);
|
|
nMargin = 5;
|
nDataColumnWidth = (rect.Width() - nMargin) / DEFECT_FIND_INFO_GRID_COL_COUNT;
|
m_ctrlGridDefectFindInfo.SetColumnWidth(0, nDataColumnWidth);
|
m_ctrlGridDefectFindInfo.SetColumnWidth(1, nDataColumnWidth);
|
|
GV_ITEM Item;
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Inspect Direction"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectFindInfo.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Horizontal Pitch (um)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectFindInfo.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Vertical Pitch (um)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectFindInfo.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("DPC Range (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectFindInfo.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("1st Threshold (gLevel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectFindInfo.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("2nd Threshold (gLevel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectFindInfo.SetItem(&Item);
|
|
|
}
|
|
void CDlgDefectFind::InitDefectResultGridControl()
|
{
|
int nRowIdx, nColIdx, nRows, nCols, nFixRows, nDataColumnWidth, nMargin;
|
CString strTemp;
|
CRect rect;
|
|
nRows = DEFECT_RESULT_GRID_ROW_COUNT;
|
nCols = DEFECT_RESULT_GRID_COL_COUNT;
|
nFixRows = 1;
|
nRowIdx = 0;
|
nColIdx = 0;
|
|
m_ctrlGridDefectResult.GetWindowRect(&rect);
|
m_ctrlGridDefectResult.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xE0));
|
m_ctrlGridDefectResult.SetRowCount(nRows);
|
m_ctrlGridDefectResult.SetColumnCount(nCols);
|
m_ctrlGridDefectResult.SetFixedColumnCount(nFixRows);
|
|
nMargin = 30;
|
nDataColumnWidth = (rect.Width() - nMargin) / DEFECT_RESULT_GRID_COL_COUNT;
|
m_ctrlGridDefectResult.SetColumnWidth(0, nDataColumnWidth);
|
m_ctrlGridDefectResult.SetColumnWidth(1, nDataColumnWidth);
|
|
GV_ITEM Item;
|
|
Item.mask = GVIF_TEXT;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Center X (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Center Y (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Area (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Peak (gLevel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("R Scale (um)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Real Pich (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Rect Left (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Rect Top (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Rect Right (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Rect Bottom (pixel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Average Gray (gLevel)"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
nRowIdx++;
|
Item.row = nRowIdx;
|
Item.col = nColIdx;
|
strTemp.Format(_T("Defect Result 12"));
|
Item.strText = strTemp;
|
m_ctrlGridDefectResult.SetItem(&Item);
|
|
|
}
|
|
void CDlgDefectFind::FillDefectResult()
|
{
|
int nRowIdx, nColIdx;
|
CString strItemText;
|
CRcp_RsDefectFindManager* pRcpRsDefectFindManager = NULL;
|
CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd();
|
if(pDlg == NULL) return;
|
|
|
//¹æÇâÁ¤º¸
|
CStringArray strArrayOption;
|
strArrayOption.RemoveAll();
|
for(int i = 0; i < 2; i++)
|
{
|
switch(i)
|
{
|
case 0: // horizontal
|
strArrayOption.Add(_T("Horizontal"));
|
break;
|
case 1: // vertical
|
strArrayOption.Add(_T("Vertical"));
|
break;
|
}
|
}
|
|
pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager();
|
if(pRcpRsDefectFindManager == NULL) return;
|
|
|
//¼öÇà À¯¹«
|
m_ctrlCheckDefectFind.SetCheck(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_bDefectFind);
|
|
nRowIdx = 0;
|
nColIdx = 1;
|
|
// °Ë»ç¹æÇâ
|
m_ctrlGridDefectFindInfo.SetCellType(nRowIdx, nColIdx, RUNTIME_CLASS(CGridCellCombo));
|
CGridCellCombo* pCellCombo = (CGridCellCombo*)m_ctrlGridDefectFindInfo.GetCell(nRowIdx, nColIdx);
|
pCellCombo->SetOptions(strArrayOption);
|
pCellCombo->SetStyle(CBS_DROPDOWN);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strArrayOption.GetAt(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection));
|
nRowIdx++;
|
|
// ¹æÇâ ÇÇÄ¡
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
// ¹æÇâ ÇÇÄ¡
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
//ÇÇÄ¡ Ž»ö ¹üÀ§
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
// 1Â÷ ¹®Åΰª
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
// 2Â÷ ¹®Åΰª
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
|
m_ctrlGridDefectFindInfo.Invalidate(FALSE);
|
}
|
|
void CDlgDefectFind::FillDefectFindInfo()
|
{
|
int nRowIdx, nColIdx;
|
CString strItemText;
|
CRcp_RsDefectFindManager* pRcpRsDefectFindManager = NULL;
|
CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd();
|
if(pDlg == NULL) return;
|
|
//¹æÇâÁ¤º¸
|
CStringArray strArrayOption;
|
strArrayOption.RemoveAll();
|
for(int i = 0; i < 2; i++)
|
{
|
switch(i)
|
{
|
case 0: // horizontal
|
strArrayOption.Add(_T("Horizontal"));
|
break;
|
case 1: // vertical
|
strArrayOption.Add(_T("Vertical"));
|
break;
|
}
|
}
|
|
pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager();
|
if(pRcpRsDefectFindManager == NULL) return;
|
|
|
//¼öÇà À¯¹«
|
m_ctrlCheckDefectFind.SetCheck(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_bDefectFind);
|
|
nRowIdx = 0;
|
nColIdx = 1;
|
|
// °Ë»ç¹æÇâ
|
m_ctrlGridDefectFindInfo.SetCellType(nRowIdx, nColIdx, RUNTIME_CLASS(CGridCellCombo));
|
CGridCellCombo* pCellCombo = (CGridCellCombo*)m_ctrlGridDefectFindInfo.GetCell(nRowIdx, nColIdx);
|
pCellCombo->SetOptions(strArrayOption);
|
pCellCombo->SetStyle(CBS_DROPDOWN);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strArrayOption.GetAt(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection));
|
nRowIdx++;
|
|
// ¹æÇâ ÇÇÄ¡
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
// ¹æÇâ ÇÇÄ¡
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
//ÇÇÄ¡ Ž»ö ¹üÀ§
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
// 1Â÷ ¹®Åΰª
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
// 2Â÷ ¹®Åΰª
|
strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2);
|
m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText);
|
nRowIdx++;
|
|
|
m_ctrlGridDefectFindInfo.Invalidate(FALSE);
|
}
|
|
void CDlgDefectFind::UpdateDialogData()
|
{
|
FillDefectFindInfo();
|
|
Invalidate(FALSE);
|
}
|
|
void CDlgDefectFind::OnBnClickedButtonLoadImage()
|
{
|
CString szFilter = _T("All Files(*.*)|*.*||");
|
|
CString strPath;
|
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
|
dlg.m_ofn.lpstrTitle = _T("Load Image");
|
|
if(dlg.DoModal() == IDOK)
|
{
|
if (m_pSourceImage->LoadImage(dlg.GetPathName()))
|
{
|
m_pImageView->CopyImageFrom(m_pSourceImage);
|
m_pSourceImage->GetBandImage(BandTypeGray, m_pBandImage);
|
m_pResultImage->CopyImageFrom(m_pBandImage);
|
m_pResultImage->ClearImage(0);
|
|
m_pImageView->Invalidate(TRUE);
|
}
|
}
|
}
|
|
void CDlgDefectFind::OnBnClickedButtonSaveImage()
|
{
|
CString szFilter = _T("All Files(*.*)|*.*||");
|
|
CString strPath;
|
CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
|
dlg.m_ofn.lpstrTitle = _T("Save Image");
|
|
if(dlg.DoModal() == IDOK)
|
{
|
if (m_pImageView->SaveImage(dlg.GetPathName()))
|
{
|
|
}
|
}
|
}
|
|
void CDlgDefectFind::OnBnClickedRadioViewType0()
|
{
|
m_pImageView->CopyImageFrom(m_pSourceImage);
|
m_pImageView->Invalidate(TRUE);
|
}
|
|
|
void CDlgDefectFind::OnBnClickedRadioViewType1()
|
{
|
m_pImageView->CopyImageFrom(m_pResultImage);
|
m_pImageView->Invalidate(TRUE);
|
}
|
|
|
void CDlgDefectFind::OnBnClickedCheckViewDefect()
|
{
|
|
|
}
|
|
void CDlgDefectFind::OnBnClickedButtonInspectTest()
|
{
|
m_pImageView->DeleteAllDrawObject();
|
|
if (m_pBandImage->GetImageExist()==FALSE)
|
{
|
AfxMessageBox(_T("Image Load Please!"));//_T("À̹ÌÁö¸¦ ¸ÕÀú ·ÎµåÇϼ¼¿ä!"));
|
return;
|
}
|
|
OnBnClickedButtonRcpDefectFindApply();
|
CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd();
|
if(pDlg==NULL)
|
{
|
AfxMessageBox(_T("Refer to NULL Pointer!"));//_T("NULL Æ÷ÀÎÅÍ ÂüÁ¶!"));
|
return;
|
}
|
|
CRcp_RsDefectFindManager* pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager();
|
if(pRcpRsDefectFindManager==NULL)
|
{
|
AfxMessageBox(_T("Refer to NULL Pointer!"));//_T("NULL Æ÷ÀÎÅÍ ÂüÁ¶!"));
|
return;
|
}
|
|
// set param
|
SReviewDefectFindParam param;
|
param.nDirection = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection;
|
param.dPitchX = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX;
|
param.dPitchY = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY;
|
param.nAutoPitchRange = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange;
|
param.nThreshold = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold;
|
param.nThreshold2 = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2;
|
param.dResolutionX = 0.44; //um
|
param.dResolutionY = 0.44; //um
|
|
BYTE *pBuffer = (BYTE*) m_pBandImage->GetImageBuffer();
|
int nWidth = m_pBandImage->GetWidth();
|
int nHeight = m_pBandImage->GetHeight();
|
|
double dLightValue = 0.0;
|
CCHImageProcess::ImageAverage(m_pBandImage, dLightValue);
|
|
// inspect
|
SReviewDefectFindResult result;
|
if (m_pDefectFindProcess->FindDefect(pBuffer, nWidth, nHeight, param, result))
|
{
|
CCHDrawObject object;
|
object.nObjectType = ObjectTextRect;
|
object.nLeft = result.rtDefectRect.left;
|
object.nTop = result.rtDefectRect.top;
|
object.nRight = result.rtDefectRect.right;
|
object.nBottom = result.rtDefectRect.bottom;
|
object.nForeColor = RGB(255,0,0);
|
object.strTextString.Format(_T("%d"),result.nDefectArea);
|
|
m_pImageView->AddDrawObject(object);
|
m_pImageView->Invalidate(TRUE);
|
|
int nColIdx = 1;
|
int nRowIdx = 0;
|
CString strText = _T("");
|
|
strText.Format(_T("%d"), result.nDefectPosX);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.nDefectPosY);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.nDefectArea);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.sDefectPeak);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.nDefectRScale);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%.3lf"), result.dDefectPitch);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.rtDefectRect.left);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.rtDefectRect.top);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.rtDefectRect.right);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%d"), result.rtDefectRect.bottom);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
strText.Format(_T("%.3lf"), dLightValue);
|
m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText);
|
|
m_ctrlGridDefectResult.Invalidate(FALSE);
|
}
|
else
|
{
|
int nColIdx = 1;
|
CString strText = _T("");
|
for (int i=0; i<DEFECT_RESULT_GRID_ROW_COUNT; i++)
|
{
|
m_ctrlGridDefectResult.SetItemText(i, nColIdx, strText);
|
}
|
m_ctrlGridDefectResult.Invalidate(FALSE);
|
}
|
|
}
|