// ViewScanImage.cpp : 备泅 颇老涝聪促.
|
//
|
|
#include "stdafx.h"
|
#include "EdgeInspector_App.h"
|
#include "ViewMain_ScanImage.h"
|
#include "afxdialogex.h"
|
#include "Global_Define.h"
|
#include "Glass_Data.h"
|
|
enum TYPE_MANUAL_CMD
|
{
|
M_CMD_PROC_RIP_START = 0,
|
M_CMD_PROC_SHORT_START,
|
M_CMD_PROC_LONG_START,
|
M_CMD_PROC_ALL_START,
|
M_CMD_IMG_LOAD_ALL,
|
M_CMD_IMG_SAVE_ALL,
|
M_CMD_IMG_LOAD_SIDE,
|
M_CMD_IMG_SAVE_SIDE,
|
};
|
|
// CViewScanImage 措拳 惑磊涝聪促.
|
|
IMPLEMENT_DYNAMIC(CViewMain_ScanImage, CDialogEx)
|
|
CViewMain_ScanImage::CViewMain_ScanImage(CWnd* pParent /*=NULL*/)
|
: CDialogEx(CViewMain_ScanImage::IDD, pParent)
|
{
|
m_nShowSelect =0;
|
m_dZoom = 1;
|
m_pManualProcess = NULL;
|
m_nIndex = 0;
|
m_nThreadCmd = 0;
|
m_IV2M = NULL;
|
m_pHardware = NULL;
|
m_pGlassData = NULL;
|
}
|
|
CViewMain_ScanImage::~CViewMain_ScanImage()
|
{
|
}
|
|
void CViewMain_ScanImage::DoDataExchange(CDataExchange* pDX)
|
{
|
DDX_Control(pDX, IDC_SCROLLBAR_V_1, m_ctrlScrollV[0]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_2, m_ctrlScrollV[1]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_3, m_ctrlScrollV[2]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_4, m_ctrlScrollV[3]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_5, m_ctrlScrollV[4]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_6, m_ctrlScrollV[5]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_7, m_ctrlScrollV[6]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_8, m_ctrlScrollV[7]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_9, m_ctrlScrollV[8]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_10, m_ctrlScrollV[9]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_11, m_ctrlScrollV[10]);
|
DDX_Control(pDX, IDC_SCROLLBAR_V_12, m_ctrlScrollV[11]);
|
|
|
DDX_Control(pDX, IDC_SCROLLBAR_H_1, m_ctrlScrollH[0]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_2, m_ctrlScrollH[1]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_3, m_ctrlScrollH[2]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_4, m_ctrlScrollH[3]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_5, m_ctrlScrollH[4]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_6, m_ctrlScrollH[5]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_7, m_ctrlScrollH[6]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_8, m_ctrlScrollH[7]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_9, m_ctrlScrollH[8]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_10, m_ctrlScrollH[9]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_11, m_ctrlScrollH[10]);
|
DDX_Control(pDX, IDC_SCROLLBAR_H_12, m_ctrlScrollH[11]);
|
|
|
DDX_Control(pDX, IDC_BTN_LOAD1, m_btnLoad[0]);
|
DDX_Control(pDX, IDC_BTN_LOAD2, m_btnLoad[1]);
|
DDX_Control(pDX, IDC_BTN_LOAD3, m_btnLoad[2]);
|
DDX_Control(pDX, IDC_BTN_LOAD4, m_btnLoad[3]);
|
|
DDX_Control(pDX, IDC_BTN_LOAD5, m_btnLoad[4]);
|
DDX_Control(pDX, IDC_BTN_LOAD6, m_btnLoad[5]);
|
DDX_Control(pDX, IDC_BTN_LOAD7, m_btnLoad[6]);
|
DDX_Control(pDX, IDC_BTN_LOAD8, m_btnLoad[7]);
|
|
DDX_Control(pDX, IDC_BTN_LOAD9, m_btnLoad[8]);
|
DDX_Control(pDX, IDC_BTN_LOAD10, m_btnLoad[9]);
|
DDX_Control(pDX, IDC_BTN_LOAD11, m_btnLoad[10]);
|
DDX_Control(pDX, IDC_BTN_LOAD12, m_btnLoad[11]);
|
|
|
DDX_Control(pDX, IDC_BTN_SAVE1, m_btnSave[0]);
|
DDX_Control(pDX, IDC_BTN_SAVE2, m_btnSave[1]);
|
DDX_Control(pDX, IDC_BTN_SAVE3, m_btnSave[2]);
|
DDX_Control(pDX, IDC_BTN_SAVE4, m_btnSave[3]);
|
|
DDX_Control(pDX, IDC_BTN_SAVE5, m_btnSave[4]);
|
DDX_Control(pDX, IDC_BTN_SAVE6, m_btnSave[5]);
|
DDX_Control(pDX, IDC_BTN_SAVE7, m_btnSave[6]);
|
DDX_Control(pDX, IDC_BTN_SAVE8, m_btnSave[7]);
|
|
DDX_Control(pDX, IDC_BTN_SAVE9, m_btnSave[8]);
|
DDX_Control(pDX, IDC_BTN_SAVE10, m_btnSave[9]);
|
DDX_Control(pDX, IDC_BTN_SAVE11, m_btnSave[10]);
|
DDX_Control(pDX, IDC_BTN_SAVE12, m_btnSave[11]);
|
|
|
DDX_Control(pDX, IDC_UPDN_WIDTH1, m_chkWithScorll[0]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH2, m_chkWithScorll[1]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH3, m_chkWithScorll[2]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH4, m_chkWithScorll[3]);
|
|
DDX_Control(pDX, IDC_UPDN_WIDTH5, m_chkWithScorll[4]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH6, m_chkWithScorll[5]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH7, m_chkWithScorll[6]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH8, m_chkWithScorll[7]);
|
|
DDX_Control(pDX, IDC_UPDN_WIDTH9, m_chkWithScorll[8]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH10, m_chkWithScorll[9]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH11, m_chkWithScorll[10]);
|
DDX_Control(pDX, IDC_UPDN_WIDTH12, m_chkWithScorll[11]);
|
|
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO1, m_staticCamInfo[0]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO2, m_staticCamInfo[1]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO3, m_staticCamInfo[2]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO4, m_staticCamInfo[3]);
|
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO5, m_staticCamInfo[4]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO6, m_staticCamInfo[5]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO7, m_staticCamInfo[6]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO8, m_staticCamInfo[7]);
|
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO9, m_staticCamInfo[8]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO10, m_staticCamInfo[9]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO11, m_staticCamInfo[10]);
|
DDX_Control(pDX, IDC_STATIC_CAM_INFO12, m_staticCamInfo[11]);
|
|
|
DDX_Control(pDX, IDC_SLIDER_ZOOM, m_sliderZoom);
|
|
CDialogEx::DoDataExchange(pDX);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CViewMain_ScanImage, CDialogEx)
|
ON_WM_VSCROLL()
|
ON_WM_HSCROLL()
|
ON_WM_MOUSEWHEEL()
|
ON_WM_SHOWWINDOW()
|
ON_WM_TIMER()
|
ON_WM_PAINT()
|
ON_BN_CLICKED(IDC_BTN_LOAD1, &CViewMain_ScanImage::OnBnClickedBtnLoad1)
|
ON_BN_CLICKED(IDC_BTN_SAVE1, &CViewMain_ScanImage::OnBnClickedBtnSave1)
|
ON_BN_CLICKED(IDC_BTN_LOAD2, &CViewMain_ScanImage::OnBnClickedBtnLoad2)
|
ON_BN_CLICKED(IDC_BTN_SAVE2, &CViewMain_ScanImage::OnBnClickedBtnSave2)
|
ON_BN_CLICKED(IDC_BTN_LOAD3, &CViewMain_ScanImage::OnBnClickedBtnLoad3)
|
ON_BN_CLICKED(IDC_BTN_SAVE3, &CViewMain_ScanImage::OnBnClickedBtnSave3)
|
ON_BN_CLICKED(IDC_BTN_LOAD4, &CViewMain_ScanImage::OnBnClickedBtnLoad4)
|
ON_BN_CLICKED(IDC_BTN_SAVE4, &CViewMain_ScanImage::OnBnClickedBtnSave4)
|
ON_BN_CLICKED(IDC_BTN_LOAD5, &CViewMain_ScanImage::OnBnClickedBtnLoad5)
|
ON_BN_CLICKED(IDC_BTN_SAVE5, &CViewMain_ScanImage::OnBnClickedBtnSave5)
|
ON_BN_CLICKED(IDC_BTN_LOAD6, &CViewMain_ScanImage::OnBnClickedBtnLoad6)
|
ON_BN_CLICKED(IDC_BTN_SAVE6, &CViewMain_ScanImage::OnBnClickedBtnSave6)
|
ON_BN_CLICKED(IDC_BTN_LOAD7, &CViewMain_ScanImage::OnBnClickedBtnLoad7)
|
ON_BN_CLICKED(IDC_BTN_SAVE7, &CViewMain_ScanImage::OnBnClickedBtnSave7)
|
ON_BN_CLICKED(IDC_BTN_LOAD8, &CViewMain_ScanImage::OnBnClickedBtnLoad8)
|
ON_BN_CLICKED(IDC_BTN_SAVE8, &CViewMain_ScanImage::OnBnClickedBtnSave8)
|
ON_BN_CLICKED(IDC_BTN_LOAD9, &CViewMain_ScanImage::OnBnClickedBtnLoad9)
|
ON_BN_CLICKED(IDC_BTN_SAVE9, &CViewMain_ScanImage::OnBnClickedBtnSave9)
|
ON_BN_CLICKED(IDC_BTN_LOAD10, &CViewMain_ScanImage::OnBnClickedBtnLoad10)
|
ON_BN_CLICKED(IDC_BTN_SAVE10, &CViewMain_ScanImage::OnBnClickedBtnSave10)
|
ON_BN_CLICKED(IDC_BTN_LOAD11, &CViewMain_ScanImage::OnBnClickedBtnLoad11)
|
ON_BN_CLICKED(IDC_BTN_SAVE11, &CViewMain_ScanImage::OnBnClickedBtnSave11)
|
ON_BN_CLICKED(IDC_BTN_LOAD12, &CViewMain_ScanImage::OnBnClickedBtnLoad12)
|
ON_BN_CLICKED(IDC_BTN_SAVE12, &CViewMain_ScanImage::OnBnClickedBtnSave12)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH1, &CViewMain_ScanImage::OnBnClickedUpdnWidth1)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH2, &CViewMain_ScanImage::OnBnClickedUpdnWidth2)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH3, &CViewMain_ScanImage::OnBnClickedUpdnWidth3)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH4, &CViewMain_ScanImage::OnBnClickedUpdnWidth4)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH6, &CViewMain_ScanImage::OnBnClickedUpdnWidth6)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH5, &CViewMain_ScanImage::OnBnClickedUpdnWidth5)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH7, &CViewMain_ScanImage::OnBnClickedUpdnWidth7)
|
ON_BN_CLICKED(IDC_UPDN_WIDTH8, &CViewMain_ScanImage::OnBnClickedUpdnWidth8)
|
ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_ZOOM, &CViewMain_ScanImage::OnNMCustomdrawSliderZoom)
|
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_ZOOM, &CViewMain_ScanImage::OnNMReleasedcaptureSliderZoom)
|
ON_BN_CLICKED(IDC_CHECK_AUTO_DEFECT_VIEW, &CViewMain_ScanImage::OnBnClickedCheckAutoDefectView)
|
ON_MESSAGE(WM_POCESS_STATUS, &CViewMain_ScanImage::OnProcessStatus)
|
END_MESSAGE_MAP()
|
|
BEGIN_EVENTSINK_MAP(CViewMain_ScanImage, CDialogEx)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_RIP, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgRip, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_SHORT, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgShort, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_LONG, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgLong, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_IMG_BOTH, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnImgBoth, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_INIT_DISPLAY, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnInitDisplay, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_PROC, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedBtnProc, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_BTN_LOAD_ALL, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedLoadAll, VTS_NONE)
|
ON_EVENT(CViewMain_ScanImage, IDC_SAVE_ALL, DISPID_CLICK, CViewMain_ScanImage::OnBnClickedSaveAll, VTS_NONE)
|
END_EVENTSINK_MAP()
|
|
|
// CViewScanImage 皋矫瘤 贸府扁涝聪促.
|
BOOL CViewMain_ScanImage::OnInitDialog()
|
{
|
UpdateData(FALSE);
|
|
m_sliderZoom.SetRange(0,8);
|
m_sliderZoom.SetPos(0);
|
|
int i;
|
for (i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
|
m_btnLoad[i].m_bTransparent = TRUE;
|
m_btnSave[i].m_bTransparent = TRUE;
|
|
|
m_btnLoad[i].SetImage(IDB_BTN_LOAD, IDB_BTN_LOAD_PUSH);
|
m_btnSave[i].SetImage(IDB_BTN_SAVE, IDB_BTN_SAVE_PUSH);
|
m_chkWithScorll[i].SetImage(IDB_LED_OFF);
|
m_chkWithScorll[i].SetCheckedImage(IDB_LED_ON);
|
m_bWithScroll[i] = 1;
|
}
|
|
int nSide;
|
CRect rc2(0, 0, 10, 10);
|
for(i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
|
nSide = GetSideIdx(i);
|
//C,CB A, AB, D,DB , B,BB
|
m_frameImg[i].SetSideIdx(nSide);
|
if (i < 2 * MAX_PANEL_SIDE) {
|
m_frameImg[i].SetImageBuffer(NULL, IMAGE_WIDTH, IMAGE_HEIGHT, MAX_FRAM_COUNT);
|
}
|
else {
|
m_frameImg[i].SetImageBuffer(NULL, IMAGE_WIDTH / 2, IMAGE_HEIGHT, MAX_FRAM_COUNT);
|
}
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Create(NULL,NULL,WS_VISIBLE | WS_CHILD,rc2,this,0);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i,0));
|
m_frameImg[i].ResetViewOption(MODE_VIEW_DEFECT);
|
}
|
|
m_bInitDlg = TRUE;
|
|
m_nShowSelect = 0;
|
ChangeCtrPos(m_nShowSelect);
|
|
SetZoom(0.2);
|
|
((CButton*)GetDlgItem(IDC_CHECK_AUTO_DEFECT_VIEW))->SetCheck(TRUE);
|
|
return TRUE;
|
}
|
|
BOOL CViewMain_ScanImage::PreTranslateMessage(MSG* pMsg)
|
{
|
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 CViewMain_ScanImage::OnShowWindow(BOOL bShow, UINT nStatus)
|
{
|
if(bShow == TRUE) {
|
int nSide;
|
CString strTitle;
|
for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
|
nSide = GetSideIdx(i);
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
|
CPoint ptDisplayPos = m_frameImg[i].GetDisplayPos();
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i,ptDisplayPos.y));
|
m_frameImg[i].Invalidate();
|
|
if(m_pHardware != NULL) {
|
CCameraSettings *pCamera = GetCameraSettingsByViewIndex(i);
|
if(pCamera != NULL) {
|
double dPixelSizeX = pCamera->m_dConvResolution[0];
|
double dPixelSizeY = pCamera->m_dScanResolution[0];
|
m_frameImg[i].SetPixelSize(dPixelSizeX, dPixelSizeY);
|
|
strTitle.Format(_T("BORD[%d] CHANNEL[%d]"), pCamera->m_iCamera, 0);
|
m_staticCamInfo[i].SetWindowText(strTitle);
|
}
|
}
|
|
if (m_pGlassData != nullptr) {
|
m_frameImg[i].SetRecipe(m_pGlassData->GetGlassRecipe());
|
}
|
}
|
|
m_bInitDlg = TRUE;
|
|
ChangeCtrPos(m_nShowSelect);
|
|
SetZoom(0.2);
|
}
|
}
|
|
void CViewMain_ScanImage::OnPaint()
|
{
|
CPaintDC dc(this); // device context for painting
|
}
|
|
void CViewMain_ScanImage::SetZoom(double dZoom)
|
{
|
m_dZoom = dZoom;
|
UpdateZoom();
|
}
|
|
void CViewMain_ScanImage::SetGlassData(CGlass_Data *pGlass)
|
{
|
m_pGlassData = pGlass;
|
}
|
|
BYTE* CViewMain_ScanImage::GetBufferPoint(int nViewIndex,int nPos /*= 0*/)
|
{
|
BYTE *add = NULL;
|
int nIdx_Side = GetSideIdx(nViewIndex);
|
|
LPBYTE plpBuf = NULL;
|
if (m_IV2M != NULL) {
|
plpBuf = m_IV2M->IV2M_GetGrabBufferByDimension((DimensionDir)nIdx_Side, nPos);
|
}
|
|
return plpBuf;
|
}
|
|
LRESULT CViewMain_ScanImage::OnProcessStatus(WPARAM wParam, LPARAM lParam)
|
{
|
PROG_MSG MsgJob = *((PROG_MSG*)wParam);
|
|
int nIndex = GetViewIndex(MsgJob.nSide);
|
if(MsgJob.nState == 2) {
|
InitScrollInfo(MsgJob.nSide,1);
|
|
m_ctrlScrollV[nIndex].EnableWindow(TRUE);
|
|
double dZoom = m_frameImg[nIndex].GetZoom();
|
|
CPoint ptOrg = m_frameImg[nIndex].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[nIndex].GetWndRect();
|
|
ptOrg.y = MsgJob.nDispLine;
|
|
if(m_pGlassData != NULL)
|
{
|
CSide_Data *pSideData = m_pGlassData->GetSideData((DimensionDir)MsgJob.nSide);
|
if(pSideData != NULL)
|
ptOrg.y = CHKMAX(0,pSideData->m_nGlassStartLine - (int)((rtWndRect.Height()/2)/ dZoom));
|
}
|
|
m_frameImg[nIndex].SetDisplayPos(ptOrg);
|
m_frameImg[nIndex].SetImageBuffer(GetBufferPoint(nIndex, ptOrg.y));
|
m_frameImg[nIndex].SetGlassData(m_pGlassData);
|
m_frameImg[nIndex].Invalidate();
|
}
|
else {
|
CPoint ptOrg = m_frameImg[nIndex].GetDisplayPos();
|
ptOrg.y = MsgJob.nDispLine;
|
|
m_frameImg[nIndex].SetDisplayPos(ptOrg);
|
m_frameImg[nIndex].SetImageBuffer(GetBufferPoint(nIndex,ptOrg.y));
|
m_frameImg[nIndex].SetGlassData(m_pGlassData);
|
m_frameImg[nIndex].Invalidate();
|
}
|
return 1;
|
}
|
|
void CViewMain_ScanImage::SetupImageSave()
|
{
|
ManualThreadStart(M_CMD_IMG_SAVE_ALL, -1);
|
}
|
|
void CViewMain_ScanImage::SetRecipe(CHardwareSettings *pHW)
|
{
|
m_pHardware = pHW;
|
}
|
|
void CViewMain_ScanImage::ResetView()
|
{
|
for(int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
|
m_ctrlScrollV[i].EnableWindow(FALSE);
|
}
|
}
|
|
void CViewMain_ScanImage::ViewRefresh(PROG_MSG ProcMsg)
|
{
|
SendMessage(WM_POCESS_STATUS,(WPARAM)&ProcMsg, ProcMsg.nSide);
|
}
|
|
int CViewMain_ScanImage::GetSideIdx(int nViewIndex)
|
{
|
int nID = 0;
|
|
switch(nViewIndex)
|
{
|
case 0: nID = DIMENSION_C; break;
|
case 1: nID = DIMENSION_C + MAX_PANEL_SIDE; break;
|
case 2: nID = DIMENSION_A; break;
|
case 3: nID = DIMENSION_A + MAX_PANEL_SIDE; break;
|
case 4: nID = DIMENSION_D; break;
|
case 5: nID = DIMENSION_D + MAX_PANEL_SIDE; break;
|
case 6: nID = DIMENSION_B; break;
|
case 7: nID = DIMENSION_B + MAX_PANEL_SIDE; break;
|
case 8: nID = DIMENSION_A_RIP; break;
|
case 9: nID = DIMENSION_B_RIP; break;
|
case 10: nID = DIMENSION_C_RIP; break;
|
case 11: nID = DIMENSION_D_RIP; break;
|
default:
|
AfxMessageBox(_T("CViewImage::GetPanelID(int nViewIndex) call Error"));
|
break;
|
}
|
|
return nID;
|
}
|
|
void CViewMain_ScanImage::ChangeCtrPos(int nMode)
|
{
|
// 0: Long & Short, 1: Long only, 2: Short only, 3: Rip
|
m_nShowSelect = nMode;
|
|
const int nInfo = 20;
|
const int nHScroll = 20;
|
const int nImgWidth = 450;
|
int nImgHeight = 350;
|
|
CPoint OrgPt(10, 5), pt = OrgPt;
|
|
SetRedraw(FALSE);
|
for (int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
|
m_btnLoad[i].SetRedraw(FALSE);
|
m_btnSave[i].SetRedraw(FALSE);
|
m_staticCamInfo[i].SetRedraw(FALSE);
|
m_ctrlScrollV[i].SetRedraw(FALSE);
|
m_ctrlScrollH[i].SetRedraw(FALSE);
|
m_chkWithScorll[i].SetRedraw(FALSE);
|
m_frameImg[i].SetRedraw(FALSE);
|
}
|
|
switch (nMode)
|
{
|
case 0: // Long & Short
|
pt = OrgPt;
|
LayoutCameraGroup(0, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll); // Long
|
|
pt.x = OrgPt.x;
|
pt.y = OrgPt.y + nImgHeight + nInfo + nHScroll + 10;
|
LayoutCameraGroup(4, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll); // Short
|
ShowCameraGroup(0, 8, TRUE);
|
break;
|
|
case 1: // Long only, large
|
nImgHeight = 750;
|
pt = OrgPt;
|
LayoutCameraGroup(0, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll);
|
ShowCameraGroup(0, 4, TRUE);
|
ShowCameraGroup(4, 4, FALSE);
|
break;
|
|
case 2: // Short only, large
|
nImgHeight = 750;
|
pt = OrgPt;
|
LayoutCameraGroup(4, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll);
|
ShowCameraGroup(0, 4, FALSE);
|
ShowCameraGroup(4, 4, TRUE);
|
break;
|
|
case 3: // Rip (cam 8~11)
|
nImgHeight = 750;
|
pt = OrgPt;
|
LayoutCameraGroup(8, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll);
|
ShowCameraGroup(8, 4, TRUE);
|
break;
|
}
|
|
SetRedraw(TRUE);
|
Invalidate(TRUE);
|
}
|
|
void CViewMain_ScanImage::InitScrollInfo(int nSide /*= -1*/,int nScrollPos /*= 0*/)
|
{
|
int i =0;
|
SCROLLINFO scrollInfoV;
|
SCROLLINFO scrollInfoH;
|
|
int nPos_V;
|
int nPos_H;
|
|
scrollInfoV.cbSize = sizeof(SCROLLINFO);
|
scrollInfoV.fMask = SIF_ALL;
|
scrollInfoV.nMin = 1;
|
scrollInfoV.nPos = 1;
|
scrollInfoV.nTrackPos = 400;
|
scrollInfoV.nMax = INT_MAX;
|
|
|
scrollInfoH.cbSize = sizeof(SCROLLINFO);
|
scrollInfoH.fMask = SIF_ALL;
|
scrollInfoH.nMin = 1;
|
scrollInfoH.nPos = 1;
|
scrollInfoH.nTrackPos = 64;
|
|
double dZoom = m_frameImg[0].GetZoom();
|
|
scrollInfoV.nPage = m_frameImg[0].GetWndRect().Height();
|
scrollInfoH.nPage = (int)(m_frameImg[0].GetWndRect().Width() / dZoom);
|
scrollInfoH.nMax = IMAGE_WIDTH;
|
|
CSide_Data* pSideData = NULL;
|
if(nSide == -1)
|
{
|
for(i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
|
{
|
nSide = GetSideIdx(i);
|
|
nPos_V = m_ctrlScrollV[i].GetScrollPos();
|
nPos_H = m_ctrlScrollH[i].GetScrollPos();
|
|
if(nScrollPos == 0)
|
{
|
nPos_V = 0;
|
nPos_H = 0;
|
}
|
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
if(pSideData != NULL)
|
{
|
int nEndLIne = pSideData->m_nGlassEndLine;
|
if(nEndLIne <= 0)
|
nEndLIne = pSideData->m_nPreGlassEndLine;
|
scrollInfoV.nMax = nEndLIne - pSideData->m_nGlassStartLine + (int)(m_frameImg[i].GetWndRect().Height() * dZoom);
|
}
|
else
|
{
|
if(i%2)
|
scrollInfoV.nMax = MAX_IMAGE_LINE_LONG - (int)(m_frameImg[i].GetWndRect().Height() / dZoom);
|
else
|
scrollInfoV.nMax = MAX_IMAGE_LINE_SHORT - (int)(m_frameImg[i].GetWndRect().Height() / dZoom);
|
}
|
|
if(m_pHardware == NULL)
|
{
|
if(i%2)
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_LONG - (int)(m_frameImg[i].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
else
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_SHORT - (int)(m_frameImg[i].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
}
|
else
|
{
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)nSide);
|
int nMaxLine = g_pBase->m_pMemFrameNo[iCam]*g_pBase->m_pFrameHeight[iCam];
|
|
scrollInfoV.nMax = CHKMIN(nMaxLine - int(m_frameImg[i].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
}
|
|
m_ctrlScrollV[i].SetScrollInfo(&scrollInfoV);
|
m_ctrlScrollV[i].SetScrollPos(nPos_V);
|
|
m_ctrlScrollH[i].SetScrollInfo(&scrollInfoH);
|
m_ctrlScrollH[i].SetScrollPos(nPos_H);
|
}
|
}
|
else
|
{
|
int iView = GetViewIndex(nSide);
|
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
nPos_V = m_ctrlScrollV[iView].GetScrollPos();
|
nPos_H = m_ctrlScrollH[iView].GetScrollPos();
|
|
if(pSideData != NULL)
|
{
|
int nEndLIne = pSideData->m_nGlassEndLine;
|
if(nEndLIne <= 0)
|
nEndLIne = pSideData->m_nPreGlassEndLine;
|
|
scrollInfoV.nMax = nEndLIne - pSideData->m_nGlassStartLine + m_frameImg[iView].GetWndRect().Height();
|
}
|
|
if(m_pHardware == NULL)
|
{
|
if(i%2)
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_LONG - (int)(m_frameImg[iView].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
else
|
scrollInfoV.nMax = CHKMIN(MAX_IMAGE_LINE_SHORT - (int)(m_frameImg[iView].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
|
}
|
else
|
{
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)nSide);
|
int nMaxLine = g_pBase->m_pMemFrameNo[iCam]*g_pBase->m_pFrameHeight[iCam];
|
|
scrollInfoV.nMax = CHKMIN(nMaxLine - int(m_frameImg[iView].GetWndRect().Height() / dZoom),scrollInfoV.nMax);
|
}
|
|
|
if(nScrollPos == 0)
|
{
|
nPos_V = 0;
|
nPos_H = 0;
|
}
|
|
scrollInfoV.nPos = nPos_V;
|
m_ctrlScrollV[iView].SetScrollInfo(&scrollInfoV);
|
m_ctrlScrollV[iView].SetScrollPos(nPos_V);
|
|
scrollInfoH.nPos = nPos_H;
|
m_ctrlScrollH[iView].SetScrollInfo(&scrollInfoH);
|
m_ctrlScrollH[iView].SetScrollPos(nPos_H);
|
}
|
|
}
|
|
void CViewMain_ScanImage::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
{
|
int pos;
|
int nScrolIndex = -1;
|
int i,nSide =-1;
|
|
for(i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE ; i++)
|
{
|
if(pScrollBar->m_hWnd==m_ctrlScrollV[i].m_hWnd)
|
{
|
nScrolIndex = i;
|
break;
|
}
|
}
|
|
if(nScrolIndex != -1)
|
{
|
|
nSide = GetSideIdx(nScrolIndex);
|
|
SCROLLINFO si;
|
|
si.fMask=SIF_ALL;
|
m_ctrlScrollV[nScrolIndex].GetScrollInfo(&si,SIF_ALL);
|
|
switch(nSBCode)
|
{
|
|
case SB_LINEUP:
|
si.nPos = si.nPos -1;
|
break;
|
case SB_LINEDOWN:
|
si.nPos = si.nPos +1;
|
break;
|
case SB_PAGEUP:
|
si.nPos-=si.nPage;
|
break;
|
case SB_PAGEDOWN:
|
si.nPos+=si.nPage;
|
break;
|
case SB_THUMBTRACK:
|
si.nPos = si.nTrackPos;
|
break;
|
|
}
|
|
if(si.nPos>(int)(si.nMax-si.nMin -si.nPage+1))
|
si.nPos=si.nMax-si.nMin-si.nPage+1;
|
|
if(si.nPos<si.nMin)
|
si.nPos=si.nMin;
|
|
si.fMask=SIF_POS;
|
pos = si.nPos - 1;
|
|
|
int nOffset = 0;
|
CSide_Data* pSideData = NULL;
|
|
if(m_bWithScroll[nScrolIndex] == TRUE)
|
{
|
if(nScrolIndex%2 == 0)
|
{
|
for(i = nScrolIndex ; i < nScrolIndex +2; i++)
|
{
|
nSide = GetSideIdx(i);
|
m_ctrlScrollV[i].SetScrollInfo(&si);
|
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
else if(nScrolIndex == 1 || nScrolIndex == 5)
|
{
|
for(i = nScrolIndex -1; i < nScrolIndex +3; i++)
|
{
|
nSide = GetSideIdx(i);
|
m_ctrlScrollV[i].SetScrollInfo(&si);
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
else
|
{
|
m_ctrlScrollV[nScrolIndex].SetScrollInfo(&si);
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
else
|
{
|
m_ctrlScrollV[nScrolIndex].SetScrollInfo(&si);
|
if(m_pGlassData != NULL)
|
{
|
pSideData = m_pGlassData->GetSideData((DimensionDir)nSide);
|
}
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
CRect rtWndRect = m_frameImg[i].GetWndRect();
|
|
if(pSideData != NULL)
|
{
|
ptOrg.y = max(0,pos + pSideData->m_nGlassStartLine - rtWndRect.Height()/2);
|
}
|
else
|
ptOrg.y = max(0,pos - rtWndRect.Height()/2);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i, ptOrg.y));
|
m_frameImg[i].SetGlassData(m_pGlassData);
|
m_frameImg[i].Invalidate();
|
}
|
}
|
CDialogEx::OnVScroll(nSBCode, nPos, pScrollBar);
|
}
|
|
void CViewMain_ScanImage::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
|
{
|
// TODO: 咯扁俊 皋矫瘤 贸府扁 内靛甫 眠啊 棺/肚绰 扁夯蔼阑 龋免钦聪促.
|
if(!pScrollBar)
|
{
|
return CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
|
}
|
|
|
int nScrolIndex = -1;
|
int nSide = -1;
|
|
//CString strTemp;
|
//strTemp.Format("%d", (int)nPos);
|
//theApp.SetStatusBarText(strTemp);
|
|
|
int i =0;
|
for(i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE ; i++)
|
{
|
if(pScrollBar->m_hWnd==m_ctrlScrollH[i].m_hWnd)
|
{
|
nScrolIndex = i;
|
break;
|
}
|
}
|
|
if(nScrolIndex != -1)
|
{
|
nSide = GetSideIdx(nScrolIndex);
|
|
SCROLLINFO si;
|
si.fMask=SIF_ALL;
|
m_ctrlScrollH[nScrolIndex].GetScrollInfo(&si,SIF_ALL);
|
|
switch(nSBCode)
|
{
|
case SB_LINEUP:
|
si.nPos--;
|
break;
|
case SB_LINEDOWN:
|
si.nPos++;
|
break;
|
case SB_PAGEUP:
|
si.nPos-=si.nPage;
|
break;
|
case SB_PAGEDOWN:
|
si.nPos+=si.nPage;
|
break;
|
case SB_THUMBTRACK:
|
si.nPos=nPos;
|
break;
|
}
|
|
if(si.nPos>(int)(si.nMax-si.nMin-si.nPage+1)) si.nPos=si.nMax-si.nMin-si.nPage+1;
|
if(si.nPos<si.nMin) si.nPos=si.nMin;
|
si.fMask=SIF_POS;
|
m_ctrlScrollH[nScrolIndex].SetScrollInfo(&si);
|
|
CPoint ptOrg = m_frameImg[i].GetDisplayPos();
|
ptOrg.x = si.nPos;
|
m_frameImg[i].SetDisplayPos(ptOrg);
|
m_frameImg[nScrolIndex].Invalidate();
|
}
|
|
CDialogEx::OnHScroll(nSBCode, nPos, pScrollBar);
|
}
|
|
int CViewMain_ScanImage::GetViewIndex(int nSide)
|
{
|
int nID = 0;
|
|
switch(nSide)
|
{
|
case 0: nID = DIMENSION_C; break;
|
case 1: nID = DIMENSION_C + MAX_PANEL_SIDE; break;
|
case 2: nID = DIMENSION_A; break;
|
case 3: nID = DIMENSION_A + MAX_PANEL_SIDE; break;
|
case 4: nID = DIMENSION_D; break;
|
case 5: nID = DIMENSION_D + MAX_PANEL_SIDE; break;
|
case 6: nID = DIMENSION_B; break;
|
case 7: nID = DIMENSION_B + MAX_PANEL_SIDE; break;
|
case 8: nID = DIMENSION_A_RIP; break;
|
case 9: nID = DIMENSION_B_RIP; break;
|
case 10: nID = DIMENSION_C_RIP; break;
|
case 11: nID = DIMENSION_D_RIP; break;
|
default:
|
AfxMessageBox(_T("CViewImage::GetViewIndex(int nSide) call Error"));
|
break;
|
}
|
|
return nID;
|
}
|
|
void CViewMain_ScanImage::UpdateZoom()
|
{
|
for(int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE;i++)
|
{
|
m_frameImg[i].SetZoom(m_dZoom);
|
InitScrollInfo(-1,1);
|
m_frameImg[i].Invalidate(FALSE);
|
}
|
}
|
|
void CViewMain_ScanImage::OnBnClickedBtnImgRip() { ChangeCtrPos(3); }
|
void CViewMain_ScanImage::OnBnClickedBtnImgShort() { ChangeCtrPos(2); }
|
void CViewMain_ScanImage::OnBnClickedBtnImgLong() { ChangeCtrPos(1); }
|
void CViewMain_ScanImage::OnBnClickedBtnImgBoth() { ChangeCtrPos(0); }
|
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth1() { (m_bWithScroll[0] == FALSE) ? m_bWithScroll[0] = TRUE : m_bWithScroll[0] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth2() { (m_bWithScroll[1] == FALSE) ? m_bWithScroll[1] = TRUE : m_bWithScroll[1] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth3() { (m_bWithScroll[2] == FALSE) ? m_bWithScroll[2] = TRUE : m_bWithScroll[2] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth4() { (m_bWithScroll[3] == FALSE) ? m_bWithScroll[3] = TRUE : m_bWithScroll[3] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth6() { (m_bWithScroll[4] == FALSE) ? m_bWithScroll[4] = TRUE : m_bWithScroll[4] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth5() { (m_bWithScroll[5] == FALSE) ? m_bWithScroll[5] = TRUE : m_bWithScroll[5] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth7() { (m_bWithScroll[6] == FALSE) ? m_bWithScroll[6] = TRUE : m_bWithScroll[6] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth8() { (m_bWithScroll[7] == FALSE) ? m_bWithScroll[7] = TRUE : m_bWithScroll[7] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth9() { (m_bWithScroll[8] == FALSE) ? m_bWithScroll[8] = TRUE : m_bWithScroll[8] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth10() { (m_bWithScroll[9] == FALSE) ? m_bWithScroll[9] = TRUE : m_bWithScroll[9] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth11() { (m_bWithScroll[10] == FALSE) ? m_bWithScroll[10] = TRUE : m_bWithScroll[10] = FALSE; }
|
void CViewMain_ScanImage::OnBnClickedUpdnWidth12() { (m_bWithScroll[11] == FALSE) ? m_bWithScroll[11] = TRUE : m_bWithScroll[11] = FALSE; }
|
|
void CViewMain_ScanImage::OnBnClickedBtnLoad1() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 0); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad2() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 1); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad3() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 2); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad4() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 3); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad5() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 4); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad6() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 5); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad7() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 6); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad8() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 7); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad9() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 8); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad10() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 9); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad11() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 10); }
|
void CViewMain_ScanImage::OnBnClickedBtnLoad12() { ManualThreadStart(M_CMD_IMG_LOAD_SIDE, 11); }
|
|
void CViewMain_ScanImage::OnBnClickedBtnSave1() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 0); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave2() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 1); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave3() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 2); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave4() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 3); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave5() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 4); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave6() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 5); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave7() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 6); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave8() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 7); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave9() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 8); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave10() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 9); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave11() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 10); }
|
void CViewMain_ScanImage::OnBnClickedBtnSave12() { ManualThreadStart(M_CMD_IMG_SAVE_SIDE, 11); }
|
|
void CViewMain_ScanImage::OnBnClickedLoadAll() {ManualThreadStart(M_CMD_IMG_LOAD_ALL,-1);}
|
void CViewMain_ScanImage::OnBnClickedSaveAll() {ManualThreadStart(M_CMD_IMG_SAVE_ALL,-1);}
|
|
BOOL CViewMain_ScanImage::ManualThreadStart(int nCmd,int nIndex /*= -1*/)
|
{
|
if(m_pManualProcess) {
|
DWORD dwWait = ::WaitForSingleObject(m_pManualProcess->m_hThread, 1000);
|
if (dwWait == WAIT_TIMEOUT) {
|
DWORD dwExitCode;
|
if ((::GetExitCodeThread(m_pManualProcess->m_hThread, &dwExitCode)) && (dwExitCode == STILL_ACTIVE)) {
|
::TerminateThread(m_pManualProcess->m_hThread, dwExitCode);
|
m_pManualProcess = NULL;
|
g_pLog->DisplayMessage(_T("Previous manual process was terminated due to timeout."));
|
}
|
}
|
else {
|
m_pManualProcess = NULL;
|
if (dwWait == WAIT_OBJECT_0) {
|
g_pLog->DisplayMessage(_T("Previous manual process completed successfully."));
|
}
|
else {
|
g_pLog->DisplayMessage(_T("Previous manual process was terminated or failed."));
|
}
|
}
|
}
|
|
if (m_pManualProcess != NULL) {
|
g_pLog->DisplayMessage(_T("Manual Process is already running. Please wait until it finishes."));
|
return FALSE;
|
}
|
|
m_nIndex = nIndex;
|
m_nThreadCmd = nCmd;
|
m_pManualProcess = AfxBeginThread(ManualProcessAll,this);
|
if (!m_pManualProcess) {
|
g_pLog->DisplayMessage(_T("Failed to start manual process thread."));
|
return FALSE;
|
}
|
|
return TRUE;
|
}
|
|
BOOL CViewMain_ScanImage::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
|
{
|
int nPos = m_sliderZoom.GetPos();
|
if(zDelta > 0)
|
m_sliderZoom.SetPos(nPos+1);
|
else
|
m_sliderZoom.SetPos(nPos-1);
|
|
UpdateZoom();
|
return CDialogEx::OnMouseWheel(nFlags, zDelta, pt);
|
}
|
|
void CViewMain_ScanImage::SaveFullImageAll()
|
{
|
if (m_pGlassData == NULL || m_IV2M == NULL) {
|
return;
|
}
|
|
int iView;
|
CPoint ptStart;
|
int nLength;
|
const int nOneFrameSize = 50000;
|
CString strPath,strLog;
|
int iSide;
|
int nTotalLength = 0;
|
int nFrame = 0;
|
CGlassRecipe *pGlassRcp = m_pGlassData->GetGlassRecipe();
|
|
#if OFFLINE_KEY == 1
|
if (NULL == pGlassRcp) return;
|
#endif
|
|
CString strRcpName = pGlassRcp->GetRecipeName();
|
CString strGlassID = g_pBase->m_strHPanelID;
|
|
if(strGlassID.IsEmpty() == TRUE) {
|
strGlassID = _T("Manual_ID");
|
}
|
if(strRcpName.IsEmpty() == TRUE) {
|
strRcpName = _T("TestRcp");
|
}
|
|
strGlassID.Trim(_T(' '));
|
|
CTime time = CTime::GetCurrentTime();
|
CString strDate, strTime;
|
|
strDate.Format(_T("%04d%02d%02d"),time.GetYear(),time.GetMonth(),time.GetDay());
|
strTime.Format(_T("%02d%02d%02d"),time.GetHour(),time.GetMinute(),time.GetSecond());
|
|
for(iView=0;iView<MAX_DIMENSION_COUNT;iView++) {
|
iSide = GetSideIdx(iView);
|
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)iSide);
|
int iScan = m_pHardware->GetScanToDimension((DimensionDir)iSide);
|
|
CCameraSettings *pCamera = m_pHardware->GetCameraSettings(iCam,iScan);
|
if (pCamera == NULL) {
|
return;
|
}
|
|
nTotalLength = (pCamera->m_nGrabFrameCount-1)*pCamera->m_FrameSize.cy;
|
|
ptStart.x = 0;
|
ptStart.y = max(0,0);
|
|
int nMaxSize = (pCamera->m_nGrabFrameCount-1)*pCamera->m_FrameSize.cy;
|
|
CSide_Data* pSideData = m_pGlassData->GetSideData((DimensionDir)iSide);
|
if(pSideData != NULL) {
|
ptStart.y = max(0,pSideData->m_nGlassStartLine-1000);
|
nTotalLength = min((int)((pSideData->m_nPreGlassEndLine + 1000) - ptStart.y),nMaxSize);
|
}
|
|
if (nTotalLength < 10000) {
|
nTotalLength = nMaxSize;
|
}
|
|
nFrame = nTotalLength / nOneFrameSize;
|
if (ptStart.y < 0) {
|
ptStart.y = 0;
|
}
|
|
for(int i = 0; i < nFrame ; i++) {
|
nLength = nOneFrameSize;
|
|
if (ptStart.y + nLength >= nMaxSize) {
|
continue;
|
}
|
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],i);
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],i,strPath);
|
|
ptStart.y += nLength;
|
}
|
|
nLength = nTotalLength%nOneFrameSize;
|
if(nLength > 10) {
|
if(ptStart.y+nLength < nMaxSize) {
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],nFrame);
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"), PANEL_SIDE[iSide], nFrame, strPath);
|
}
|
}
|
}
|
}
|
|
void CViewMain_ScanImage::SaveFullImage(int nViewIndex)
|
{
|
CPoint ptStart;
|
int nLength;
|
const int nOneFrameSize = 50000;
|
CString strPath,strLog;
|
int iSide = GetSideIdx(nViewIndex);
|
int nTotalLength = 0;
|
int nFrame = 0;
|
|
if (m_pGlassData == NULL || m_IV2M == NULL) {
|
return;
|
}
|
|
CGlassRecipe *pGlassRcp = m_pGlassData->GetGlassRecipe();
|
CString strRcpName = pGlassRcp->GetRecipeName();
|
|
int iCam = m_pHardware->GetCameraIndexToDimension((DimensionDir)iSide);
|
int iScan = m_pHardware->GetScanToDimension((DimensionDir)iSide);
|
|
CCameraSettings *pCamera = m_pHardware->GetCameraSettings(iCam,iScan);
|
if (pCamera == NULL) {
|
return;
|
}
|
|
nTotalLength = pCamera->m_nGrabFrameCount*pCamera->m_FrameSize.cy;
|
nFrame = nTotalLength/nOneFrameSize;
|
|
ptStart.x = 0;
|
ptStart.y = max(0,0);
|
|
CSide_Data *pSideData = m_pGlassData->GetSideData((DimensionDir)iSide);
|
if(pSideData != NULL) {
|
ptStart.y = max(0,pSideData->m_nGlassStartLine-1000);
|
|
nTotalLength = min((pSideData->m_nGlassEndLine + 1000) - ptStart.y,pCamera->m_nGrabFrameCount*pCamera->m_FrameSize.cy);
|
}
|
|
CString strGlassID = g_pBase->m_strHPanelID;
|
if(strGlassID.IsEmpty() == TRUE) {
|
strGlassID = _T("Manual_ID");
|
}
|
|
if(strRcpName.IsEmpty() == TRUE) {
|
strRcpName = _T("TestRcp");
|
}
|
|
strGlassID.Trim(_T(' '));
|
|
CTime time = CTime::GetCurrentTime();
|
CString strDate,strTime;
|
|
strDate.Format(_T("%04d%02d%02d"),time.GetYear(),time.GetMonth(),time.GetDay());
|
strTime.Format(_T("%02d%02d%02d"),time.GetHour(),time.GetMinute(),time.GetSecond());
|
|
for(int i = 0; i < nFrame ; i++) {
|
nLength = nOneFrameSize;
|
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],i);
|
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
ptStart.y += nLength;
|
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],i,strPath);
|
}
|
|
nLength = nTotalLength % nOneFrameSize;
|
if(nLength) {
|
strPath.Format(_T("%s\\DebugFullImage\\%s\\%s\\%s\\%s\\%s__%s_%d"),PATH_INSPECTION_DATA,strDate,strRcpName,strGlassID,strTime,strGlassID,PANEL_SIDE[iSide],nFrame);
|
|
m_IV2M->IV2M_SaveFullImage(strPath,iSide,ptStart,nLength);
|
|
g_pLog->DisplayMessage(_T("%s %d Save Completed : %s"),PANEL_SIDE[iSide],nFrame,strPath);
|
}
|
}
|
|
UINT CViewMain_ScanImage::ManualProcessAll(LPVOID pParam)
|
{
|
CViewMain_ScanImage *pDlg = (CViewMain_ScanImage*)pParam;
|
int i =0;
|
if(pDlg->m_nThreadCmd == M_CMD_PROC_ALL_START
|
|| pDlg->m_nThreadCmd == M_CMD_PROC_LONG_START
|
|| pDlg->m_nThreadCmd == M_CMD_PROC_SHORT_START
|
|| pDlg->m_nThreadCmd == M_CMD_PROC_RIP_START)
|
{
|
pDlg->m_IV2M->IV2M_InspectionProcessAll(pDlg->m_nThreadCmd);
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_LOAD_ALL)
|
{
|
if(pDlg->m_IV2M == NULL)
|
return 0;
|
|
pDlg->m_IV2M->IV2M_LoadImageFullFile(-1,pDlg->m_pGlassData, [&] (BYTE iSide)
|
{
|
int iView = pDlg->GetViewIndex(iSide);
|
|
pDlg->InitScrollInfo(iSide,0);
|
pDlg->m_frameImg[iView].Invalidate(FALSE);
|
pDlg->m_frameImg[iView].Invalidate();
|
});
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_SAVE_ALL)
|
{
|
pDlg->SaveFullImageAll();
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_LOAD_SIDE)
|
{
|
pDlg->m_IV2M->IV2M_LoadImageFullFile(pDlg->GetSideIdx(pDlg->m_nIndex),pDlg->m_pGlassData, [&] (BYTE iSide)
|
{
|
int iView = pDlg->GetViewIndex(iSide);
|
|
pDlg->InitScrollInfo(iSide,0);
|
pDlg->m_frameImg[iView].Invalidate(FALSE);
|
pDlg->m_frameImg[iView].Invalidate();
|
});
|
}
|
else if(pDlg->m_nThreadCmd == M_CMD_IMG_SAVE_SIDE)
|
{
|
pDlg->SaveFullImage(pDlg->m_nIndex);
|
}
|
else;
|
|
return 0;
|
}
|
|
void CViewMain_ScanImage::OnTimer(UINT_PTR nIDEvent)
|
{
|
#if FALSE
|
if(nIDEvent == 1)
|
{
|
|
}
|
#endif
|
CDialogEx::OnTimer(nIDEvent);
|
}
|
|
void CViewMain_ScanImage::OnNMCustomdrawSliderZoom(NMHDR *pNMHDR, LRESULT *pResult)
|
{
|
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
|
// TODO: Add your control notification handler code here
|
|
CString strTmp;
|
int nPos = m_sliderZoom.GetPos();
|
|
if(nPos > 4)
|
m_dZoom = 1 + (nPos - 4) * 0.25;
|
else if(nPos < 4)
|
m_dZoom = 1 /double(5-nPos);
|
else
|
m_dZoom = 1;
|
|
|
strTmp.Format(_T("X %.2f"),m_dZoom);
|
GetDlgItem(IDC_ST_ZOOM)->SetWindowText(strTmp);
|
*pResult = 0;
|
}
|
|
void CViewMain_ScanImage::OnNMReleasedcaptureSliderZoom(NMHDR *pNMHDR, LRESULT *pResult)
|
{
|
UpdateZoom();
|
*pResult = 0;
|
}
|
|
void CViewMain_ScanImage::OnBnClickedBtnInitDisplay()
|
{
|
for(int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
|
InitScrollInfo(i,0);
|
|
int nSide = GetSideIdx(i);
|
|
m_frameImg[i].SetSideIdx(nSide);
|
m_frameImg[i].SetImageBuffer(GetBufferPoint(i,0));
|
m_frameImg[i].Invalidate();
|
}
|
|
if(m_IV2M != NULL) {
|
m_IV2M->IV2M_InitView(VIEW_SCANIMAGE);
|
}
|
}
|
|
void CViewMain_ScanImage::OnBnClickedBtnProc()
|
{
|
switch(m_nShowSelect)
|
{
|
case 0:
|
ManualThreadStart(M_CMD_PROC_ALL_START);
|
break;
|
|
case 1:
|
ManualThreadStart(M_CMD_PROC_LONG_START);
|
break;
|
|
case 2:
|
ManualThreadStart(M_CMD_PROC_SHORT_START);
|
break;
|
|
case 3:
|
ManualThreadStart(M_CMD_PROC_RIP_START);
|
break;
|
}
|
}
|
|
void CViewMain_ScanImage::OnBnClickedCheckAutoDefectView()
|
{
|
BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_DEFECT_VIEW))->GetCheck();
|
|
g_pBase->m_bAutoDefectView = bCheck;
|
|
/*
|
BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_SIZE))->GetCheck();
|
|
for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE ; i++)
|
{
|
if(bCheck)
|
m_frameImg[i].SetMode(MODE_AUTO_MEASURE);
|
else
|
m_frameImg[i].ResetMode(MODE_AUTO_MEASURE);
|
}
|
*/
|
}
|
|
void CViewMain_ScanImage::LayoutCameraGroup(int nStartIdx, int nCount, CPoint& pt, int nImgWidth, int nImgHeight, int nInfo, int nHScroll)
|
{
|
for (int i = 0; i < nCount; ++i) {
|
int idx = nStartIdx + i;
|
|
m_btnLoad[idx].MoveWindow(pt.x, pt.y, nInfo, nInfo, FALSE);
|
m_btnSave[idx].MoveWindow(pt.x + nImgWidth - nInfo, pt.y, nInfo, nInfo, FALSE);
|
m_staticCamInfo[idx].MoveWindow(pt.x + nInfo, pt.y, nImgWidth - nInfo * 2, nInfo, FALSE);
|
m_frameImg[idx].MoveWindow(pt.x, pt.y + nInfo, nImgWidth, nImgHeight, FALSE);
|
|
CRect rtWnd;
|
m_frameImg[idx].GetClientRect(rtWnd);
|
m_frameImg[idx].SetWndRect(rtWnd);
|
|
m_chkWithScorll[idx].MoveWindow(pt.x + nImgWidth, pt.y + nInfo + nImgHeight, nHScroll, nInfo, FALSE);
|
m_ctrlScrollV[idx].MoveWindow(pt.x + nImgWidth, pt.y + nInfo, nHScroll, nImgHeight, FALSE);
|
m_ctrlScrollH[idx].MoveWindow(pt.x, pt.y + nInfo + nImgHeight, nImgWidth, nInfo, FALSE);
|
|
pt.x += nImgWidth + nHScroll;
|
}
|
}
|
|
void CViewMain_ScanImage::ShowCameraGroup(int nStartIdx, int nCount, BOOL bShow)
|
{
|
int nCmd = bShow ? SW_SHOW : SW_HIDE;
|
for (int i = nStartIdx; i < nStartIdx + nCount; ++i) {
|
m_btnLoad[i].ShowWindow(nCmd);
|
m_btnSave[i].ShowWindow(nCmd);
|
m_staticCamInfo[i].ShowWindow(nCmd);
|
m_ctrlScrollV[i].ShowWindow(nCmd);
|
m_ctrlScrollH[i].ShowWindow(nCmd);
|
m_chkWithScorll[i].ShowWindow(nCmd);
|
m_frameImg[i].ShowWindow(nCmd);
|
}
|
}
|
|
CCameraSettings* CViewMain_ScanImage::GetCameraSettingsByViewIndex(int nViewIndex)
|
{
|
CCameraSettings* pCamera = NULL;
|
if (nullptr == m_pHardware) {
|
return pCamera;
|
}
|
|
// ViewIndex -> DimensionDir
|
static const DimensionDir SIDE_MAP[] = {
|
DIMENSION_C, DIMENSION_C_DN,
|
DIMENSION_A, DIMENSION_A_DN,
|
DIMENSION_D, DIMENSION_D_DN,
|
DIMENSION_B, DIMENSION_B_DN,
|
DIMENSION_A_RIP, DIMENSION_B_RIP,
|
DIMENSION_C_RIP, DIMENSION_D_RIP
|
};
|
|
if (nViewIndex < 0 || nViewIndex >= _countof(SIDE_MAP)) {
|
AfxMessageBox(_T("GetCameraSettingsByViewIndex: Invalid view index"));
|
return nullptr;
|
}
|
|
DimensionDir eSide = SIDE_MAP[nViewIndex];
|
int nScan = m_pHardware->GetScanToDimension(eSide);
|
int nCamera = m_pHardware->GetCameraIndexToDimension(eSide);
|
return pCamera = m_pHardware->GetCameraSettings(nCamera, nScan);
|
}
|