From 47372488fddbcab4ab7b261d84a6b0f772a9bc34 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期四, 07 八月 2025 18:03:29 +0800
Subject: [PATCH] 1. 侧面检添加配方功能 2. 侧面检本地加载 3. 侧面检运行界面添加

---
 EdgeInspector_App/View/EdgeImageViewer.h      |    1 
 EdgeInspector_App/Define/InspectionBase.cpp   |    6 
 EdgeInspector_App/EdgeInspector_App.rc        |    0 
 EdgeInspector_App/Define/Global_Define.h      |   44 ++
 EdgeInspector_App/ViewMain_Recipe.cpp         |   48 +++
 EdgeInspector_App/MainFrm.cpp                 |    4 
 EdgeInspector_App/resource.h                  |   36 ++
 EdgeInspector_App/View/ViewMain_ScanImage.cpp |  650 ++++++++++++++++++++--------------------------
 EdgeInspector_App/View/ViewMain_ScanImage.h   |   46 ++-
 9 files changed, 437 insertions(+), 398 deletions(-)

diff --git a/EdgeInspector_App/Define/Global_Define.h b/EdgeInspector_App/Define/Global_Define.h
index ff34171..3d70b00 100644
--- a/EdgeInspector_App/Define/Global_Define.h
+++ b/EdgeInspector_App/Define/Global_Define.h
@@ -43,7 +43,7 @@
 #define CHKMIN(a,b)    (((a) < (b)) ? (a) : (b))
 
 #define MAX_PANEL_SIDE							4			// 鎼� 鑽� 
-#define	UPDN_TYPE								2			// 鎯戠獚 闉嶆崬 涔愮话鐗堝揩 2 绐嶅敱鐖� 涔愮话鐗堝揩 1
+#define	UPDN_TYPE								3			// 鎯戠獚 闉嶆崬 涔愮话鐗堝揩 2 绐嶅敱鐖� 涔愮话鐗堝揩 1
 #define MAX_SIDE_COUNT							12
 #define MAX_CORNER_DIMENSION_MEASURE_COUNT		5
 #define MAX_SIDE_DIMENSION_MEASURE_COUNT		16			// 寮ユ帾 Frame 鑽� 鐖舵��
@@ -56,14 +56,14 @@
 
 /*
 #define MAX_PROFILE_SETTING_COUNT		79
-#define PROFILE_INSPECT_SIZE_A_C	13
-#define PROFILE_INSPECT_SIZE_B_D	10
-#define PROFILE_RCUT_SIZE			5
-#define PROFILE_INSPECT_INDEX_A		33
-#define PROFILE_INSPECT_INDEX_B		0
-#define PROFILE_INSPECT_INDEX_C		10
-#define PROFILE_INSPECT_INDEX_D		23
-#define PROFILE_INSPECT_INDEX_CF	46
+#define PROFILE_INSPECT_SIZE_A_C		13
+#define PROFILE_INSPECT_SIZE_B_D		10
+#define PROFILE_RCUT_SIZE				5
+#define PROFILE_INSPECT_INDEX_A			33
+#define PROFILE_INSPECT_INDEX_B			0
+#define PROFILE_INSPECT_INDEX_C			10
+#define PROFILE_INSPECT_INDEX_D			23
+#define PROFILE_INSPECT_INDEX_CF		46
 #define PROFILE_RCUT_INSPECT_INDEX_A	59
 #define PROFILE_RCUT_INSPECT_INDEX_B	64
 #define PROFILE_RCUT_INSPECT_INDEX_C	69
@@ -90,7 +90,7 @@
 	enum	ScanDirectionIns			{ SD_Forward = 0, SD_Backward, SD_Unknown };	// Glass 鎵侀湒 Scan 瑙勬阿.
 
 	enum	DimensionDir				{ 
-		DIMENSION_A=0,
+		DIMENSION_A = 0,
 		DIMENSION_B,
 		DIMENSION_C,
 		DIMENSION_D,
@@ -112,7 +112,13 @@
 	enum	GlassDirection				{ GD_LeftTop = 0, GD_RightTop = 1, GD_LeftBottom = 10, GD_RightBottom = 11 };
 	enum	ExpRegionType				{ ER_ALL=0, ER_AREA, ER_NONE};//130115
 
-	enum	Procee_Mode					{PROC_MODE_AUTO=0,PROC_MODE_SIMULATION_ONESIDE,PROC_MODE_SIMULATION_SIDESHORT,PROC_MODE_SIMULATION_SIDELONG,PROC_MODE_SIMULATION_ALL};
+	enum	Procee_Mode					{
+		PROC_MODE_AUTO = 0,
+		PROC_MODE_SIMULATION_ONESIDE,
+		PROC_MODE_SIMULATION_SIDESHORT,
+		PROC_MODE_SIMULATION_SIDELONG,
+		PROC_MODE_SIMULATION_ALL
+	};
 
 	enum	Init_View_Command			{VIEW_RECIPE=0,VIEW_SCANIMAGE};
 };
@@ -291,7 +297,21 @@
 #define ZOOM_RANGE		20
 #define ZOOM_RATIO		(1.0/(((double)ZOOM_RANGE+2.0)/2.0))
 
-enum eViewCmdSide		{eRcp_SideRD_A=0, eRcp_SideRD_B, eRcp_SideRD_C, eRcp_SideRD_D,eRcp_SideRD_A_DN,eRcp_SideRD_B_DN,eRcp_SideRD_C_DN,eRcp_SideRD_D_DN,eRcp_SideRD_End};
+enum eViewCmdSide		{
+	eRcp_SideRD_A = 0,
+	eRcp_SideRD_B,
+	eRcp_SideRD_C,
+	eRcp_SideRD_D,
+	eRcp_SideRD_A_DN,
+	eRcp_SideRD_B_DN,
+	eRcp_SideRD_C_DN,
+	eRcp_SideRD_D_DN,
+	eRcp_SideRD_A_RIP,
+	eRcp_SideRD_B_RIP,
+	eRcp_SideRD_C_RIP,
+	eRcp_SideRD_D_RIP,
+	eRcp_SideRD_End
+};
 
 enum eViewCmdInsType	
 {
diff --git a/EdgeInspector_App/Define/InspectionBase.cpp b/EdgeInspector_App/Define/InspectionBase.cpp
index c14d529..50bf25d 100644
--- a/EdgeInspector_App/Define/InspectionBase.cpp
+++ b/EdgeInspector_App/Define/InspectionBase.cpp
@@ -1,7 +1,11 @@
 锘�#include "stdafx.h"
 #include "config.h"
 
-const TCHAR *PANEL_SIDE[]		= {_T("A_TOP"), _T("B_TOP"), _T("C_TOP"), _T("D_TOP"),_T("A_BOT"), _T("B_BOT"), _T("C_BOT"), _T("D_BOT")};
+const TCHAR *PANEL_SIDE[] = {
+	_T("A_TOP"), _T("B_TOP"), _T("C_TOP"), _T("D_TOP"),
+	_T("A_BOT"), _T("B_BOT"), _T("C_BOT"), _T("D_BOT"),
+	_T("A_RIP"), _T("B_RIP"), _T("C_RIP"), _T("D_RIP")
+};
 
 CInspectionBase::CInspectionBase()
 {
diff --git a/EdgeInspector_App/EdgeInspector_App.rc b/EdgeInspector_App/EdgeInspector_App.rc
index c061963..ee26496 100644
--- a/EdgeInspector_App/EdgeInspector_App.rc
+++ b/EdgeInspector_App/EdgeInspector_App.rc
Binary files differ
diff --git a/EdgeInspector_App/MainFrm.cpp b/EdgeInspector_App/MainFrm.cpp
index c80f5fc..74539d1 100644
--- a/EdgeInspector_App/MainFrm.cpp
+++ b/EdgeInspector_App/MainFrm.cpp
@@ -436,7 +436,7 @@
 			for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
 			{					
 				pMain->ScanStartGrabManual(iCam,0);
-				pMain->ScanStartManual(iCam,0);						
+				pMain->ScanStartManual(iCam,0);		
 			}
 		}
 		break;
@@ -490,7 +490,7 @@
 
 			for(iCam=0;iCam<MAX_CAMERA_COUNT;iCam++)
 			{
-				pMain->ScanStartManual(iCam,1);						
+				pMain->ScanStartManual(iCam,1);
 			}	
 		}
 		break;
diff --git a/EdgeInspector_App/View/EdgeImageViewer.h b/EdgeInspector_App/View/EdgeImageViewer.h
index c29a073..36e96c2 100644
--- a/EdgeInspector_App/View/EdgeImageViewer.h
+++ b/EdgeInspector_App/View/EdgeImageViewer.h
@@ -168,6 +168,7 @@
 	void	SetHardwareSetting(CHardwareSettings* pHWSetting)	 {m_pHardware = pHWSetting;}
 	void	SetRecipe(CGlassRecipe* pRecipe)					 {m_pRecipe = pRecipe;}
 	void	SetPixelSize(double dPixelSizeX, double dPixelSizeY) {m_dPixelSizeX = dPixelSizeX, m_dPixelSizeY = dPixelSizeY;}
+	void	SetImageSize(int nWidth, int nHeight, int nFrameCount) {m_nFrameWidth = nWidth; m_nFrameHeight = nHeight; m_nFrameCount = nFrameCount;}
 
 private:
 	CRect						m_rtWnd;
diff --git a/EdgeInspector_App/View/ViewMain_ScanImage.cpp b/EdgeInspector_App/View/ViewMain_ScanImage.cpp
index f597c00..7587647 100644
--- a/EdgeInspector_App/View/ViewMain_ScanImage.cpp
+++ b/EdgeInspector_App/View/ViewMain_ScanImage.cpp
@@ -10,14 +10,13 @@
 
 enum TYPE_MANUAL_CMD
 {
-	M_CMD_PROC_SHORT_START,
+	M_CMD_PROC_SHORT_START = 0,
 	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 鎺嫵 鎯戠娑濊仾淇�.
@@ -43,69 +42,97 @@
 
 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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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);
 
@@ -116,7 +143,10 @@
 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)
@@ -125,34 +155,38 @@
 	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_WM_MOUSEWHEEL()
-	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_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_CHECK_AUTO_DEFECT_VIEW, &CViewMain_ScanImage::OnBnClickedCheckAutoDefectView)
-	ON_WM_SHOWWINDOW()
-	ON_WM_TIMER()
-	ON_WM_PAINT()
- 	ON_MESSAGE(WM_POCESS_STATUS, OnProcessStatus) 	
+ 	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)
@@ -172,8 +206,7 @@
 	m_sliderZoom.SetPos(0);
 
 	int i;
-	for( i = 0; i < MAX_PANEL_SIDE  * UPDN_TYPE;i++)
-	{
+	for (i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
 		m_btnLoad[i].m_bTransparent = TRUE;
 		m_btnSave[i].m_bTransparent = TRUE;
 
@@ -186,15 +219,17 @@
 	}
 
 	int nSide;
-	CRect rc2(0,0,10,10);
-	for(i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
-	{
+	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);
-		m_frameImg[i].SetImageBuffer(NULL, IMAGE_WIDTH, IMAGE_HEIGHT, MAX_FRAM_COUNT);
-		m_frameImg[i].SetSideIdx(0);
+		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));
@@ -203,11 +238,10 @@
 
 	m_bInitDlg = TRUE;
 
-	ChangeCtrPos(3);
+	m_nShowSelect = 0;
+	ChangeCtrPos(m_nShowSelect);
 
 	SetZoom(0.2);
-
-	m_nShowSelect = 0;
 
 	((CButton*)GetDlgItem(IDC_CHECK_AUTO_DEFECT_VIEW))->SetCheck(TRUE);
 
@@ -216,14 +250,11 @@
 
 BOOL CViewMain_ScanImage::PreTranslateMessage(MSG* pMsg)
 {
-	if( pMsg->message == WM_KEYDOWN )
-	{
-		if(pMsg->wParam == VK_RETURN
-			|| pMsg->wParam == VK_ESCAPE )
-		{
+	if(pMsg->message == WM_KEYDOWN) {
+		if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE ) {
 			::TranslateMessage(pMsg);
 			::DispatchMessage(pMsg);
-			return TRUE;                    // DO NOT process further
+			return TRUE;
 		}
 	}
 
@@ -235,7 +266,7 @@
 	if(bShow == TRUE)
 	{
 		int nSide;		
-		CString		strTitle;
+		CString	strTitle;
 		for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
 		{
 			nSide = GetSideIdx(i);
@@ -246,20 +277,9 @@
 			m_frameImg[i].SetImageBuffer(GetBufferPoint(i,ptDisplayPos.y));
 			m_frameImg[i].Invalidate();
 
-			if(m_pHardware != NULL)
-			{
-				CCameraSettings *pCamera = NULL;
-				if(i < MAX_PANEL_SIDE)	// Long side
-				{
-					pCamera = m_pHardware->GetCameraSettings(i,0);
-				}
-				else
-				{
-					pCamera = m_pHardware->GetCameraSettings(i%MAX_PANEL_SIDE,1);
-				}
-
-				if(pCamera != NULL)
-				{
+			if(m_pHardware != NULL) {
+				CCameraSettings *pCamera = LiveGetSideIdx(i);
+				if(pCamera != NULL) {
 					double dPixelSizeX = pCamera->m_dConvResolution[0];
 					double dPixelSizeY = pCamera->m_dScanResolution[0];
 					m_frameImg[i].SetPixelSize(dPixelSizeX, dPixelSizeY);
@@ -281,11 +301,9 @@
 void CViewMain_ScanImage::OnPaint()
 {
 	CPaintDC dc(this); // device context for painting
-
-	
 }
 
-void    CViewMain_ScanImage::SetZoom(double dZoom)
+void CViewMain_ScanImage::SetZoom(double dZoom)
 {
 	m_dZoom = dZoom;
 	UpdateZoom();
@@ -378,7 +396,7 @@
 
 void CViewMain_ScanImage::ResetView()
 {
-	for(int i = 0; i <8 ; i++)
+	for(int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++)
 	{
 		m_ctrlScrollV[i].EnableWindow(FALSE);
 	}	
@@ -403,6 +421,10 @@
 	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;
@@ -413,21 +435,18 @@
 
 void CViewMain_ScanImage::ChangeCtrPos(int nMode)
 {
+	// 0: Long & Short, 1: Long only, 2: Short only, 3: Rip
 	m_nShowSelect = nMode;
 
-	int nInfo			= 20;
-	int nHScroll		= 20;
-	int nImgWidth		= 450;
-	int nImgHeight		= 350;
+	const int nInfo = 20;
+	const int nHScroll = 20;
+	const int nImgWidth = 450;
+	int nImgHeight = 350;
 
-	int i = 0;
-	CPoint OrgPt(10,5),pt;
-	pt = OrgPt;
-
+	CPoint OrgPt(10, 5), pt = OrgPt;
 
 	SetRedraw(FALSE);
-	for(i = 0; i < 8 ; i ++)
-	{
+	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);
@@ -437,219 +456,42 @@
 		m_frameImg[i].SetRedraw(FALSE);
 	}
 
-	switch(nMode)
+	switch (nMode)
 	{
-	case 0:
+	case 0: // Long & Short
+		pt = OrgPt;
+		LayoutCameraGroup(0, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll); // Long
 
-		// Long 
 		pt.x = OrgPt.x;
-		pt.y = OrgPt.y; 
-
-
-		for(i = 0; i < 4; i++)
-		{
-			m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
-			m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
-			m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
-			m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);	
-			CRect rtWnd;
-			m_frameImg[i].GetClientRect(rtWnd);
-			m_frameImg[i].SetWndRect(rtWnd);
-			// m_frameImg[i].ChangeRect();
-
-			m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
-			m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
-			m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
-			pt.x += nImgWidth + nHScroll;
-		}
-
-		// Short
-		pt.x = OrgPt.x;
-		pt.y = OrgPt.y + nImgHeight + nInfo + nHScroll + 10; 
-		for(i = 4; i < 8; i++)
-		{
-			m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
-			m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
-			m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
-			m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);
-			CRect rtWnd;
-			m_frameImg[i].GetClientRect(rtWnd);
-			m_frameImg[i].SetWndRect(rtWnd);
-			//m_frameImg[i].ChangeRect();
-
-			m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
-			m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
-			m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
-			pt.x += nImgWidth + nHScroll;
-		}
+		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
-		pt.x = OrgPt.x;
-		pt.y = OrgPt.y;
-
+	case 1: // Long only, large
 		nImgHeight = 750;
-		for(i = 0; i < 4; i++)
-		{
-			m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
-			m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
-			m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
-			m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight);	
-			CRect rtWnd;
-			m_frameImg[i].GetClientRect(rtWnd);
-			m_frameImg[i].SetWndRect(rtWnd);
-			//m_frameImg[i].ChangeRect();
-			m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
-			m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
-			m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
-			pt.x += nImgWidth + nHScroll;
-		}
+		pt = OrgPt;
+		LayoutCameraGroup(0, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll);
+		ShowCameraGroup(0, 4, TRUE);
+		ShowCameraGroup(4, 4, FALSE);
 		break;
 
-
-	case 2:// Short
-		pt.x = OrgPt.x;
-		pt.y = OrgPt.y;
+	case 2: // Short only, large
 		nImgHeight = 750;
-		for(i = 4; i < 8; i++)
-		{
-			m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
-			m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
-			m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
-			m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);	
-			CRect rtWnd;
-			m_frameImg[i].GetClientRect(rtWnd);
-			m_frameImg[i].SetWndRect(rtWnd);
-			// m_frameImg[i].ChangeRect();
-			m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
-			m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
-			m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
-			pt.x += nImgWidth + nHScroll;
-		}
+		pt = OrgPt;
+		LayoutCameraGroup(4, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll);
+		ShowCameraGroup(0, 4, FALSE);
+		ShowCameraGroup(4, 4, TRUE);
 		break;
-	case 3:
 
-		// Long 
-		pt.x = OrgPt.x;
-		pt.y = OrgPt.y; 
-
-
-		for(i = 0; i < 4; i++)
-		{
-			m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
-			m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
-			m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
-			m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);	
-			CRect rtWnd;
-			m_frameImg[i].GetClientRect(rtWnd);
-			m_frameImg[i].SetWndRect(rtWnd);
-			//m_frameImg[i].ChangeRect();
-
-			m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
-			m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
-			m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
-			pt.x += nImgWidth + nHScroll;
-		}
-
-
-		// Short
-		pt.x = OrgPt.x;
-		pt.y = OrgPt.y + nImgHeight + nInfo + nHScroll + 10; 
-		for(i = 4; i < 8; i++)
-		{
-			m_btnLoad[i].MoveWindow(pt.x,pt.y,nInfo,nInfo,FALSE);
-			m_btnSave[i].MoveWindow(pt.x + nImgWidth - nInfo ,pt.y,nInfo,nInfo,FALSE);
-			m_staticCamInfo[i].MoveWindow(pt.x + nInfo ,pt.y,nImgWidth - nInfo *2 ,nInfo,FALSE);
-			m_frameImg[i].MoveWindow(pt.x,pt.y + nInfo,nImgWidth,nImgHeight,FALSE);	
-			CRect rtWnd;
-			m_frameImg[i].GetClientRect(rtWnd);
-			m_frameImg[i].SetWndRect(rtWnd);
-			//m_frameImg[i].ChangeRect();
-
-			m_chkWithScorll[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo + nImgHeight,nHScroll,nInfo,FALSE);
-			m_ctrlScrollV[i].MoveWindow(pt.x + nImgWidth,pt.y + nInfo,nHScroll,nImgHeight,FALSE);
-			m_ctrlScrollH[i].MoveWindow(pt.x,pt.y + nInfo + nImgHeight,nImgWidth,nInfo,FALSE);
-			pt.x += nImgWidth + nHScroll;
-		}
+	case 3: // Rip (cam 8~11)
+		nImgHeight = 750;
+		pt = OrgPt;
+		LayoutCameraGroup(8, 4, pt, nImgWidth, nImgHeight, nInfo, nHScroll);
+		ShowCameraGroup(8, 4, TRUE);
 		break;
 	}
 
-	switch(nMode)
-	{
-	case 0:
-		for(i = 0; i < 8; i++)
-		{
-			m_btnLoad[i].ShowWindow(SW_SHOW);
-			m_btnSave[i].ShowWindow(SW_SHOW);
-			m_staticCamInfo[i].ShowWindow(SW_SHOW);
-			m_ctrlScrollV[i].ShowWindow(SW_SHOW);
-			m_ctrlScrollH[i].ShowWindow(SW_SHOW);
-			m_chkWithScorll[i].ShowWindow(SW_SHOW);
-			m_frameImg[i].ShowWindow(SW_SHOW);	
-		}
-		break;
-
-	case 1:
-		for(i = 4; i < 8; i++)
-		{
-			m_btnLoad[i].ShowWindow(SW_HIDE);
-			m_btnSave[i].ShowWindow(SW_HIDE);
-			m_staticCamInfo[i].ShowWindow(SW_HIDE);
-			m_ctrlScrollV[i].ShowWindow(SW_HIDE);
-			m_ctrlScrollH[i].ShowWindow(SW_HIDE);
-			m_chkWithScorll[i].ShowWindow(SW_HIDE);
-			m_frameImg[i].ShowWindow(SW_HIDE);	
-		}
-
-		for(i = 0; i < 4; i++)
-		{
-			m_btnLoad[i].ShowWindow(SW_SHOW);
-			m_btnSave[i].ShowWindow(SW_SHOW);
-			m_staticCamInfo[i].ShowWindow(SW_SHOW);
-			m_ctrlScrollV[i].ShowWindow(SW_SHOW);
-			m_ctrlScrollH[i].ShowWindow(SW_SHOW);
-			m_chkWithScorll[i].ShowWindow(SW_SHOW);
-			m_frameImg[i].ShowWindow(SW_SHOW);	
-		}
-		break;
-
-	case 2:
-		for(i = 0; i < 4; i++)
-		{
-			m_btnLoad[i].ShowWindow(SW_HIDE);
-			m_btnSave[i].ShowWindow(SW_HIDE);
-			m_staticCamInfo[i].ShowWindow(SW_HIDE);
-			m_ctrlScrollV[i].ShowWindow(SW_HIDE);
-			m_ctrlScrollH[i].ShowWindow(SW_HIDE);
-			m_chkWithScorll[i].ShowWindow(SW_HIDE);
-			m_frameImg[i].ShowWindow(SW_HIDE);	
-		}
-
-		for(i = 4; i < 8; i++)
-		{
-			m_btnLoad[i].ShowWindow(SW_SHOW);
-			m_btnSave[i].ShowWindow(SW_SHOW);
-			m_staticCamInfo[i].ShowWindow(SW_SHOW);
-			m_ctrlScrollV[i].ShowWindow(SW_SHOW);
-			m_ctrlScrollH[i].ShowWindow(SW_SHOW);
-			m_chkWithScorll[i].ShowWindow(SW_SHOW);
-			m_frameImg[i].ShowWindow(SW_SHOW);	
-		}
-		break;
-	case 3:
-		for(i = 0; i < 8; i++)
-		{
-			m_btnLoad[i].ShowWindow(SW_HIDE);
-			m_btnSave[i].ShowWindow(SW_HIDE);
-			m_staticCamInfo[i].ShowWindow(SW_HIDE);
-			m_ctrlScrollV[i].ShowWindow(SW_HIDE);
-			m_ctrlScrollH[i].ShowWindow(SW_HIDE);
-			m_chkWithScorll[i].ShowWindow(SW_HIDE);
-			m_frameImg[i].ShowWindow(SW_HIDE);	
-		}
-		break;
-	}
-	//InitScrollInfo(-1,1);
 	SetRedraw(TRUE);
 	Invalidate(TRUE);
 }
@@ -678,7 +520,6 @@
 	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);	
@@ -1050,7 +891,10 @@
 	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;
@@ -1069,39 +913,49 @@
 	}	
 }
 
-void CViewMain_ScanImage::OnBnClickedBtnImgBoth()	{ChangeCtrPos(0);}
-void CViewMain_ScanImage::OnBnClickedBtnImgShort()	{ChangeCtrPos(2);}
-void CViewMain_ScanImage::OnBnClickedBtnImgLong()	{ChangeCtrPos(1);}
+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::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::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::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::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);}
@@ -1334,7 +1188,7 @@
 {
 	CViewMain_ScanImage *pDlg = (CViewMain_ScanImage*)pParam;
 	int i =0;
-	if(pDlg->m_nThreadCmd == M_CMD_PROC_ALL_START 
+	if(pDlg->m_nThreadCmd == M_CMD_PROC_ALL_START
 		|| pDlg->m_nThreadCmd == M_CMD_PROC_SHORT_START
 		|| pDlg->m_nThreadCmd == M_CMD_PROC_LONG_START)
 	{
@@ -1347,7 +1201,7 @@
 
 		pDlg->m_IV2M->IV2M_LoadImageFullFile(-1,pDlg->m_pGlassData, [&] (BYTE iSide)
 		{
-			int			iView = pDlg->GetViewIndex(iSide);		
+			int	iView = pDlg->GetViewIndex(iSide);		
 
 			pDlg->InitScrollInfo(iSide,0);
 			pDlg->m_frameImg[iView].Invalidate(FALSE);
@@ -1362,7 +1216,7 @@
 	{
 		pDlg->m_IV2M->IV2M_LoadImageFullFile(pDlg->GetSideIdx(pDlg->m_nIndex),pDlg->m_pGlassData, [&] (BYTE iSide)
 		{
-			int			iView = pDlg->GetViewIndex(iSide);		
+			int	iView = pDlg->GetViewIndex(iSide);		
 
 			pDlg->InitScrollInfo(iSide,0);
 			pDlg->m_frameImg[iView].Invalidate(FALSE);
@@ -1397,10 +1251,8 @@
 	CString strTmp;
 	int nPos = m_sliderZoom.GetPos();
 
-
 	if(nPos > 4)
 		m_dZoom = 1 +  (nPos - 4)  * 0.25;
-	//	m_dZoom = 1 +  (nPos - 4)  * 0.2;
 	else if(nPos < 4)
 		m_dZoom = 1 /double(5-nPos);
 	else
@@ -1420,19 +1272,17 @@
 
 void CViewMain_ScanImage::OnBnClickedBtnInitDisplay()
 {
-	for(int i = 0; i <8 ; i++)
-	{
+	for(int i = 0; i < MAX_PANEL_SIDE * UPDN_TYPE; i++) {
 		InitScrollInfo(i,0);		
 
-		int nSide	 = GetSideIdx(i);
+		int nSide = GetSideIdx(i);
 
 		m_frameImg[i].SetSideIdx(nSide);
 		m_frameImg[i].SetImageBuffer(GetBufferPoint(i,0));
 		m_frameImg[i].Invalidate();
 	}	
 
-	if(m_IV2M != NULL)
-	{
+	if(m_IV2M != NULL) {
 		m_IV2M->IV2M_InitView(VIEW_SCANIMAGE);
 	}
 }
@@ -1442,16 +1292,20 @@
 	switch(m_nShowSelect)
 	{
 	case 0: 
-		ManualThreadStart(M_CMD_PROC_ALL_START	);
+		ManualThreadStart(M_CMD_PROC_ALL_START);
 		break;
 
 	case 1: 
-		ManualThreadStart(M_CMD_PROC_LONG_START	); 	
+		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;
 	}
 }
 
@@ -1464,7 +1318,7 @@
 	/*
 	BOOL bCheck = ((CButton*)GetDlgItem(IDC_CHECK_AUTO_SIZE))->GetCheck();
 
-	for(int i = 0 ; i < 8 ; i++)
+	for(int i = 0 ; i < MAX_PANEL_SIDE * UPDN_TYPE ; i++)
 	{
 		if(bCheck)
 			m_frameImg[i].SetMode(MODE_AUTO_MEASURE); 
@@ -1472,4 +1326,70 @@
 			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::LiveGetSideIdx(int nViewIndex)
+{
+	CCameraSettings* pCamera = NULL;
+	if (m_pHardware != nullptr) {
+		int nSide = GetSideIdx(nViewIndex);
+		int nCamera = m_pHardware->GetCameraIndexToDimension((DimensionDir)nSide);
+		if (nViewIndex < MAX_PANEL_SIDE) {
+			// Long side
+			pCamera = m_pHardware->GetCameraSettings(nCamera, 0);
+		}
+		else if (nViewIndex < 2 * MAX_PANEL_SIDE) {
+			// Short side
+			pCamera = m_pHardware->GetCameraSettings(nCamera, 1);
+		}
+		else {
+			// Rip side
+			int nRipIndex = nViewIndex - 2 * MAX_PANEL_SIDE;
+			int nRipCamera = nRipIndex / 2 + MAX_PANEL_SIDE;
+			if (nRipIndex % 2 != 0) {
+				pCamera = m_pHardware->GetCameraSettings(nCamera, 0);
+			}
+			else {
+				pCamera = m_pHardware->GetCameraSettings(nCamera, 1);
+			}
+		}
+	}
+
+	return pCamera;
 }
\ No newline at end of file
diff --git a/EdgeInspector_App/View/ViewMain_ScanImage.h b/EdgeInspector_App/View/ViewMain_ScanImage.h
index 0baa9b0..8ee7098 100644
--- a/EdgeInspector_App/View/ViewMain_ScanImage.h
+++ b/EdgeInspector_App/View/ViewMain_ScanImage.h
@@ -26,6 +26,18 @@
 	afx_msg void OnShowWindow(BOOL bShow, UINT nStatus);
 	afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
 	afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);
+	afx_msg void OnBnClickedUpdnWidth1();
+	afx_msg void OnBnClickedUpdnWidth2();
+	afx_msg void OnBnClickedUpdnWidth3();
+	afx_msg void OnBnClickedUpdnWidth4();
+	afx_msg void OnBnClickedUpdnWidth6();
+	afx_msg void OnBnClickedUpdnWidth5();
+	afx_msg void OnBnClickedUpdnWidth7();
+	afx_msg void OnBnClickedUpdnWidth8();
+	afx_msg void OnBnClickedUpdnWidth9();
+	afx_msg void OnBnClickedUpdnWidth10();
+	afx_msg void OnBnClickedUpdnWidth11();
+	afx_msg void OnBnClickedUpdnWidth12();
 	afx_msg void OnBnClickedBtnLoad1();
 	afx_msg void OnBnClickedBtnSave1();
 	afx_msg void OnBnClickedBtnLoad2();
@@ -34,17 +46,6 @@
 	afx_msg void OnBnClickedBtnSave3();
 	afx_msg void OnBnClickedBtnLoad4();
 	afx_msg void OnBnClickedBtnSave4();
-	afx_msg void OnNMCustomdrawSliderZoom(NMHDR *pNMHDR, LRESULT *pResult);
-	afx_msg void OnNMReleasedcaptureSliderZoom(NMHDR *pNMHDR, LRESULT *pResult);
-	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
-	afx_msg void OnBnClickedUpdnWidth1();	
-	afx_msg void OnBnClickedUpdnWidth2();
-	afx_msg void OnBnClickedUpdnWidth3();
-	afx_msg void OnBnClickedUpdnWidth4();
-	afx_msg void OnBnClickedUpdnWidth6();
-	afx_msg void OnBnClickedUpdnWidth5();
-	afx_msg void OnBnClickedUpdnWidth7();
-	afx_msg void OnBnClickedUpdnWidth8();		
 	afx_msg void OnBnClickedBtnLoad5();
 	afx_msg void OnBnClickedBtnSave5();
 	afx_msg void OnBnClickedBtnLoad6();
@@ -53,8 +54,17 @@
 	afx_msg void OnBnClickedBtnSave7();
 	afx_msg void OnBnClickedBtnLoad8();
 	afx_msg void OnBnClickedBtnSave8();
-	afx_msg void OnBnClickedButton1();
-	afx_msg void OnBnClickedButton2();	
+	afx_msg void OnBnClickedBtnLoad9();
+	afx_msg void OnBnClickedBtnSave9();
+	afx_msg void OnBnClickedBtnLoad10();
+	afx_msg void OnBnClickedBtnSave10();
+	afx_msg void OnBnClickedBtnLoad11();
+	afx_msg void OnBnClickedBtnSave11();
+	afx_msg void OnBnClickedBtnLoad12();
+	afx_msg void OnBnClickedBtnSave12();
+	afx_msg void OnNMCustomdrawSliderZoom(NMHDR *pNMHDR, LRESULT *pResult);
+	afx_msg void OnNMReleasedcaptureSliderZoom(NMHDR *pNMHDR, LRESULT *pResult);
+	afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
 	afx_msg void OnBnClickedCheckAutoDefectView();
 	afx_msg void OnBnClickedBtnCommunication();
 	afx_msg void OnBnClickedCheckAutoView();
@@ -74,6 +84,7 @@
 	void			ViewRefresh(PROG_MSG ProcMsg);	
 
 protected:
+	void			OnBnClickedBtnImgRip();
 	void			OnBnClickedBtnImgShort();
 	void			OnBnClickedBtnImgLong();
 	void			OnBnClickedBtnImgBoth();
@@ -93,7 +104,10 @@
 	BOOL			ManualThreadStart(int nCmd,int nIndex = -1);			
 	static UINT		ManualProcessAll(LPVOID pParam);
 	void			SaveFullImage(int nViewIndex);
-	void			SaveFullImageAll();	
+	void			SaveFullImageAll();
+	void			LayoutCameraGroup(int nStartIdx, int nCount, CPoint& pt, int nImgWidth, int nImgHeight, int nInfo, int nHScroll);
+	void			ShowCameraGroup(int nStartIdx, int nCount, BOOL bShow);
+	CCameraSettings* LiveGetSideIdx(int nViewIndex);
 
 protected:
 	CMFCButton		m_btnLoad[MAX_PANEL_SIDE * UPDN_TYPE];
@@ -107,9 +121,9 @@
 	CSliderCtrl		m_sliderZoom;
 	double			m_dZoom;
 
-	CScrollBar		m_ctrlScrollV[MAX_PANEL_SIDE * UPDN_TYPE],m_ctrlScrollH[MAX_PANEL_SIDE * UPDN_TYPE];
+	CScrollBar		m_ctrlScrollV[MAX_PANEL_SIDE * UPDN_TYPE];
+	CScrollBar		m_ctrlScrollH[MAX_PANEL_SIDE * UPDN_TYPE];
 	BOOL			m_bWithScroll[MAX_PANEL_SIDE * UPDN_TYPE];
-	//CFrameImg		m_frameImg[MAX_PANEL_SIDE * UPDN_TYPE];
 	CEdgeImageViewer m_frameImg[MAX_PANEL_SIDE * UPDN_TYPE];
 	int				m_nShowSelect;
 	BOOL			m_bInitDlg;
diff --git a/EdgeInspector_App/ViewMain_Recipe.cpp b/EdgeInspector_App/ViewMain_Recipe.cpp
index fae101f..36a26f5 100644
--- a/EdgeInspector_App/ViewMain_Recipe.cpp
+++ b/EdgeInspector_App/ViewMain_Recipe.cpp
@@ -167,6 +167,10 @@
 	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_B_BOT, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
 	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_C_BOT, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
 	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_D_BOT, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
+	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_A_RIP, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
+	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_B_RIP, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
+	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_C_RIP, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
+	ON_EVENT(CViewMain_Recipe, IDC_RDO_SIDE_D_RIP, DISPID_CLICK, CViewMain_Recipe::ClickSideSelButton, VTS_NONE)
 
 	ON_EVENT(CViewMain_Recipe, IDC_RDO_INSTYPE_CHIP, DISPID_CLICK, CViewMain_Recipe::ClickRdoInsType, VTS_NONE)
 	ON_EVENT(CViewMain_Recipe, IDC_RDO_INSTYPE_CRACK, DISPID_CLICK, CViewMain_Recipe::ClickRdoInsType, VTS_NONE)
@@ -1118,6 +1122,18 @@
 	case IDC_RDO_SIDE_D_BOT:
 		eSelView = eRcp_SideRD_D_DN;		
 		break;
+	case IDC_RDO_SIDE_A_RIP:
+		eSelView = eRcp_SideRD_A_RIP;
+		break;
+	case IDC_RDO_SIDE_B_RIP:
+		eSelView = eRcp_SideRD_B_RIP;
+		break;
+	case IDC_RDO_SIDE_C_RIP:
+		eSelView = eRcp_SideRD_C_RIP;
+		break;
+	case IDC_RDO_SIDE_D_RIP:
+		eSelView = eRcp_SideRD_D_RIP;
+		break;
 	default:
 		return;
 	}
@@ -1133,11 +1149,17 @@
 
 	double dPixelSizeX = 1.0;
 	double dPixelSizeY = 1.0;
-	int nFrameWidth = IMAGE_WIDTH;
+
+	int nFrameWidth = IMAGE_WIDTH / 2;
+	if (eSelView < eRcp_SideRD_A_RIP){
+		nFrameWidth = IMAGE_WIDTH;
+	}
+
 	int nFrameHeight = IMAGE_HEIGHT;
 	int nFrameCount = MAX_FRAM_COUNT;
 	GetResolution(dPixelSizeX, dPixelSizeY, nFrameWidth, nFrameHeight, nFrameCount);
 	m_frameImg.SetPixelSize(dPixelSizeX, dPixelSizeY);
+	m_frameImg.SetImageSize(nFrameWidth, nFrameHeight, nFrameCount);
 
 #if HALCON_VISION_KEY
 	if (NULL != m_pVisionSetDlg) {
@@ -1541,6 +1563,14 @@
 	m_PanelInfo.SetItemText(nRowIdx, nColIdx++, _T("C Bot"));
 	m_PanelInfo.SetColumnWidth(nColIdx, 80);
 	m_PanelInfo.SetItemText(nRowIdx, nColIdx++, _T("D Bot"));
+	m_PanelInfo.SetColumnWidth(nColIdx, 80);
+	m_PanelInfo.SetItemText(nRowIdx, nColIdx++, _T("A RIP"));
+	m_PanelInfo.SetColumnWidth(nColIdx, 80);
+	m_PanelInfo.SetItemText(nRowIdx, nColIdx++, _T("B RIP"));
+	m_PanelInfo.SetColumnWidth(nColIdx, 80);
+	m_PanelInfo.SetItemText(nRowIdx, nColIdx++, _T("C RIP"));
+	m_PanelInfo.SetColumnWidth(nColIdx, 80);
+	m_PanelInfo.SetItemText(nRowIdx, nColIdx++, _T("D RIP"));
 
 	nColIdx = 0;
 	nRowIdx = 1;
@@ -1674,6 +1704,14 @@
 	m_SideInspectInfo.SetItemText(nRowIdx, nColIdx++, _T("C Bot"));
 	m_SideInspectInfo.SetColumnWidth(nColIdx, 80);
 	m_SideInspectInfo.SetItemText(nRowIdx, nColIdx++, _T("D Bot"));
+	m_SideInspectInfo.SetColumnWidth(nColIdx, 80);
+	m_SideInspectInfo.SetItemText(nRowIdx, nColIdx++, _T("A RIP"));
+	m_SideInspectInfo.SetColumnWidth(nColIdx, 80);
+	m_SideInspectInfo.SetItemText(nRowIdx, nColIdx++, _T("B RIP"));
+	m_SideInspectInfo.SetColumnWidth(nColIdx, 80);
+	m_SideInspectInfo.SetItemText(nRowIdx, nColIdx++, _T("C RIP"));
+	m_SideInspectInfo.SetColumnWidth(nColIdx, 80);
+	m_SideInspectInfo.SetItemText(nRowIdx, nColIdx++, _T("D RIP"));
 
 	nColIdx = 0;
 	nRowIdx = 1;
@@ -1876,6 +1914,14 @@
 	m_JudgementInfo.SetItemText(nRowIdx, nColIdx++, _T("C Bot"));
 	m_JudgementInfo.SetColumnWidth(nColIdx, 80);
 	m_JudgementInfo.SetItemText(nRowIdx, nColIdx++, _T("D Bot"));
+	m_JudgementInfo.SetColumnWidth(nColIdx, 80);
+	m_JudgementInfo.SetItemText(nRowIdx, nColIdx++, _T("A RIP"));
+	m_JudgementInfo.SetColumnWidth(nColIdx, 80);
+	m_JudgementInfo.SetItemText(nRowIdx, nColIdx++, _T("B RIP"));
+	m_JudgementInfo.SetColumnWidth(nColIdx, 80);
+	m_JudgementInfo.SetItemText(nRowIdx, nColIdx++, _T("C RIP"));
+	m_JudgementInfo.SetColumnWidth(nColIdx, 80);
+	m_JudgementInfo.SetItemText(nRowIdx, nColIdx++, _T("D RIP"));
 
 	nColIdx = 0;
 	nRowIdx = 1;
diff --git a/EdgeInspector_App/resource.h b/EdgeInspector_App/resource.h
index 8f0eff7..9d5857a 100644
--- a/EdgeInspector_App/resource.h
+++ b/EdgeInspector_App/resource.h
@@ -216,6 +216,7 @@
 #define IDC_NEWRECIPE_NAME_TITLE2       1023
 #define IDC_BUT_LIST_NEWRECIPE          1023
 #define IDC_BUT_BROWSE_DELETE_TOOL_EXE  1023
+#define IDC_BTN_SAVE9                   1023
 #define IDC_STATIC_IMG_2                1024
 #define IDC_EDIT_RECIPENEW_NAME         1024
 #define IDC_BUT_LIST_DELRECIPE          1024
@@ -239,16 +240,22 @@
 #define IDC_STATIC_IMG_8                1029
 #define IDC_BTN_BOT_MARK_DEL_1          1029
 #define IDC_BTN_BOT_MARK_DEL_2          1030
+#define IDC_STATIC_IMG_10               1030
 #define IDC_SLIDER_1                    1031
 #define IDC_STATIC_MARK_INFO_TITLE      1031
+#define IDC_STATIC_IMG_11               1031
 #define IDC_CHK_INS_REVERSE             1032
 #define IDC_STATIC_VER_INFO             1032
 #define IDC_STATIC_MARK_INFO_TITLE2     1032
+#define IDC_STATIC_IMG_12               1032
 #define IDC_SLIDER_3                    1033
 #define IDC_STATIC_CURRENT_TIME         1033
+#define IDC_BTN_SAVE10                  1033
 #define IDC_SLIDER_2                    1034
 #define IDC_STATIC_JUDGE                1034
+#define IDC_BTN_SAVE11                  1034
 #define IDC_STATIC_GLASS_ID             1035
+#define IDC_BTN_SAVE12                  1035
 #define IDC_SLIDER_4                    1036
 #define IDC_SIDE_DIMENSION_SETTING_LIST 1036
 #define IDC_SLIDER_5                    1037
@@ -355,6 +362,7 @@
 #define IDC_STATIC_CAM_INFO4            1071
 #define IDC_CHK_USECOLORVISUAL          1072
 #define IDC_STATIC_SUBJECT              1072
+#define IDC_SCROLLBAR_V_9               1072
 #define IDC_UPDN_WIDTH1                 1074
 #define IDC_BTN_PROC                    1075
 #define IDC_SLIDER_ZOOM                 1076
@@ -390,8 +398,28 @@
 #define IDC_UPDN_WIDTH6                 1100
 #define IDC_UPDN_WIDTH7                 1101
 #define IDC_UPDN_WIDTH8                 1102
+#define IDC_UPDN_WIDTH9                 1103
+#define IDC_UPDN_WIDTH11                1104
+#define IDC_UPDN_WIDTH12                1105
+#define IDC_STATIC_CAM_INFO9            1106
+#define IDC_STATIC_CAM_INFO10           1107
+#define IDC_STATIC_CAM_INFO11           1108
+#define IDC_STATIC_CAM_INFO12           1109
+#define IDC_STATIC_IMG_9                1110
+#define IDC_SCROLLBAR_V_10              1111
+#define IDC_SCROLLBAR_V_11              1112
+#define IDC_SCROLLBAR_V_12              1113
+#define IDC_SCROLLBAR_H_9               1114
+#define IDC_SCROLLBAR_H_10              1115
+#define IDC_SCROLLBAR_H_11              1116
+#define IDC_SCROLLBAR_H_12              1117
+#define IDC_BTN_LOAD9                   1118
+#define IDC_BTN_LOAD10                  1119
 #define IDC_EDIT_SCAN_SPEED             1120
+#define IDC_BTN_LOAD11                  1120
 #define IDC_EDIT_SCAN_SPEED_RATE        1121
+#define IDC_BTN_LOAD12                  1121
+#define IDC_BTN_IMG_RIP                 1122
 #define IDC_EDIT_EXPOSURE               1123
 #define IDC_EDIT_FRM_RATE_1             1124
 #define IDC_EDIT_FRM_RATE_2             1125
@@ -474,6 +502,7 @@
 #define IDC_CHK_DETECT_LIMITED_AREA     1228
 #define IDC_UPDN_WIDTH2                 1230
 #define IDC_UPDN_WIDTH5                 1231
+#define IDC_UPDN_WIDTH10                1232
 #define IDC_STATIC_C2                   1239
 #define IDC_STATIC_RECIPE_BASE_BAR      1240
 #define IDC_STATIC_RECIPE_NAME          1241
@@ -560,6 +589,8 @@
 #define IDC_RDO_INSTYPE_TOP_CORNER      1820
 #define IDC_RDO_INSTYPE_BOT_CORNER      1821
 #define IDC_RDO_INSTYPE_CRACK           1822
+#define IDC_RDO_SIDE_A_RIP              1823
+#define IDC_RDO_SIDE_B_RIP              1824
 #define IDC_RDO_INSTYPE_CF_CHIPCRACK    1825
 #define IDC_RDO_INSTYPE_IN_CHIP         1825
 #define IDC_RDO_INSTYPE_CF_BURR         1826
@@ -567,6 +598,9 @@
 #define IDC_RDO_INSTYPE_IN_CRACK        1827
 #define IDC_RDO_INSTYPE_IN_BURR2        1828
 #define IDC_RDO_INSTYPE_IN_CHAMFER      1828
+#define IDC_RDO_SIDE_C_RIP              1829
+#define IDC_RDO_SIDE_D_BOT2             1830
+#define IDC_RDO_SIDE_D_RIP              1830
 #define ID_PROFILE_CHECKALL             32782
 #define ID_PROFILE_CLEARALL             32783
 #define ID_PROFILE_CURRENTX             32784
@@ -593,7 +627,7 @@
 // 
 #ifdef APSTUDIO_INVOKED
 #ifndef APSTUDIO_READONLY_SYMBOLS
-#define _APS_NEXT_RESOURCE_VALUE        329
+#define _APS_NEXT_RESOURCE_VALUE        330
 #define _APS_NEXT_COMMAND_VALUE         32771
 #define _APS_NEXT_CONTROL_VALUE         1071
 #define _APS_NEXT_SYMED_VALUE           310

--
Gitblit v1.9.3