From c2da3f2d26079c9efba3961ef091a325d21d1c86 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 06 八月 2025 11:45:07 +0800
Subject: [PATCH] 1. 添加侧面检相机 2. 优化硬件配置中相机相关的功能

---
 EdgeInspector_App/Recipe/HardwareSettings.h   |   14 +-
 EdgeInspector_App/View/ViewMain_HWSetting.cpp |   27 +++-
 EdgeInspector_App/Define/Global_Define.h      |   48 +++++----
 EdgeInspector_App/Recipe/HardwareSettings.cpp |  181 +++++++++++++++++-------------------
 4 files changed, 138 insertions(+), 132 deletions(-)

diff --git a/EdgeInspector_App/Define/Global_Define.h b/EdgeInspector_App/Define/Global_Define.h
index 20d9aac..11f2cbe 100644
--- a/EdgeInspector_App/Define/Global_Define.h
+++ b/EdgeInspector_App/Define/Global_Define.h
@@ -16,7 +16,7 @@
 
 #define	MAX_CAMERA_COUNT			4
 #define MAX_SCAN_COUNT				2
-#define MAX_DIMENSION_COUNT			8
+#define MAX_DIMENSION_COUNT			12
 #define MAX_STAGE_HAND_COUNT		2
 #define MAX_FRAM_COUNT				200
 
@@ -44,7 +44,7 @@
 
 #define MAX_PANEL_SIDE							4			// 鎼� 鑽� 
 #define	UPDN_TYPE								2			// 鎯戠獚 闉嶆崬 涔愮话鐗堝揩 2 绐嶅敱鐖� 涔愮话鐗堝揩 1
-#define MAX_SIDE_COUNT							8
+#define MAX_SIDE_COUNT							12
 #define MAX_CORNER_DIMENSION_MEASURE_COUNT		5
 #define MAX_SIDE_DIMENSION_MEASURE_COUNT		16			// 寮ユ帾 Frame 鑽� 鐖舵��
 
@@ -88,7 +88,23 @@
 	enum	EmSplashCmd					{emShow=0, emHide, emText};
 
 	enum	ScanDirectionIns			{ SD_Forward = 0, SD_Backward, SD_Unknown };	// Glass 鎵侀湒 Scan 瑙勬阿.
-	enum	DimensionDir				{ DIMENSION_A=0, DIMENSION_B, DIMENSION_C, DIMENSION_D,DIMENSION_A_DN, DIMENSION_B_DN, DIMENSION_C_DN, DIMENSION_D_DN, DIMENSION_NONE};
+
+	enum	DimensionDir				{ 
+		DIMENSION_A=0,
+		DIMENSION_B,
+		DIMENSION_C,
+		DIMENSION_D,
+		DIMENSION_A_DN,
+		DIMENSION_B_DN,
+		DIMENSION_C_DN,
+		DIMENSION_D_DN,
+		DIMENSION_A_RIP,
+		DIMENSION_B_RIP,
+		DIMENSION_C_RIP,
+		DIMENSION_D_RIP,
+		DIMENSION_NONE
+	};
+
 	enum	EM_CORNER_JUDGE				{A_ZONE_CRACK=0,B_ZONE_CRACK,B_ZONE_BURR,C_ZONE_CRACK,C_ZONE_BURR, D_ZONE_CRACK, EDGE_THINCRACK, CHIP_WHITE};
 
 	enum	UPDATE_SETTING_RCP			{EM_GLASSINFO_RCP=0,EM_CUTAREA_RCP,EM_DIMEN_RCP,EM_SPLINE_RCP,EM_CORNER_RCP,EM_NOTCH_RCP,EM_VCR_RCP};
@@ -101,29 +117,19 @@
 	enum	Init_View_Command			{VIEW_RECIPE=0,VIEW_SCANIMAGE};
 };
 
-static CString g_SideName[] = 
+static CString g_SideName[] =
 {
-	_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 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"),
 	_T("Unknown")
 };
 
-static char g_cSideName[9][256] = 
+static char g_cSideName[][256] =
 {
-	"A Top",
-	"B Top",
-	"C Top",
-	"D Top",
-	"A Bot",
-	"B Bot",
-	"C Bot",
-	"D Bot",
+	"A Top", "B Top", "C Top", "D Top",
+	"A Bot", "B Bot", "C Bot", "D Bot",
+	"A RIP", "B RIP", "C RIP", "D RIP",
 	"Unknown"
 };
 
diff --git a/EdgeInspector_App/Recipe/HardwareSettings.cpp b/EdgeInspector_App/Recipe/HardwareSettings.cpp
index e7f9f00..4cfde21 100644
--- a/EdgeInspector_App/Recipe/HardwareSettings.cpp
+++ b/EdgeInspector_App/Recipe/HardwareSettings.cpp
@@ -1138,84 +1138,97 @@
 
 BOOL CHardwareSettings::SetCameraCount(int nCameraCount,int nScanCount)
 {
-	CCameraSettings *ptmpSet = NULL;
-	int				nBackCamCnt = 0,nBackScanCnt = 0;
-	int				iLoop;
-
-	if(m_pCameraSettings != NULL)
-	{
-		if((m_nCameraCount*m_nScanCount) > 0)
-		{
-			ptmpSet = new CCameraSettings[m_nCameraCount*m_nScanCount];
-
-			for(iLoop=0;iLoop<m_nCameraCount*m_nScanCount;iLoop++)
-			{
-				ptmpSet[iLoop] = m_pCameraSettings[iLoop];
-			}
-			nBackCamCnt = m_nCameraCount;
-			nBackScanCnt = m_nScanCount;
-		}
-		delete[] m_pCameraSettings, m_pCameraSettings=NULL;		
-	}
-
-	m_nCameraCount = nCameraCount;
-	m_nScanCount = nScanCount;			
-
-	if(m_nCameraCount <= 0 || m_nScanCount <= 0)
+	if (nCameraCount <= 0 || nScanCount <= 0) {
 		return FALSE;
+	}
 
-	m_pCameraSettings = new CCameraSettings[m_nCameraCount*m_nScanCount];
+	// 鍏堜繚瀛樻棫鐨勭浉鏈哄拰鎵弿鏁�
+	static int nOldCameraCount = m_nCameraCount;
+	static int nOldScanCount = m_nScanCount;
 
-	int			iCam,iScan;
-
-	iLoop=0;
-	for(iCam=0;iCam<m_nCameraCount;iCam++)
-	{		
-		for(iScan=0;iScan<m_nScanCount;iScan++)
-		{
-			m_pCameraSettings[iLoop].m_iCamera = iCam;
-			m_pCameraSettings[iLoop].m_iScan = iScan;			
-			iLoop++;
+	// 淇濆瓨鏃ц缃暟鎹�
+	CCameraSettings* pOldSettings = nullptr;
+	if (m_pCameraSettings != nullptr && nOldCameraCount > 0 && nOldScanCount > 0)
+	{
+		pOldSettings = new CCameraSettings[nOldCameraCount * nOldScanCount];
+		for (int i = 0; i < nOldCameraCount * nOldScanCount; ++i) {
+			pOldSettings[i] = m_pCameraSettings[i];
 		}
 	}
 
-	if(ptmpSet != NULL)
-	{
-		for(iLoop=0;iLoop<nBackCamCnt*nBackScanCnt;iLoop++)
-		{
-			SetCameraSettings(&ptmpSet[iLoop]);			
-		}	
-		delete[] ptmpSet, ptmpSet=NULL;
+	// 鏇存柊鎴愬憳鍙橀噺
+	m_nCameraCount = nCameraCount;
+	m_nScanCount = nScanCount;
+
+	// 閲嶆柊鍒嗛厤鏂扮粨鏋�
+	int nNewCount = m_nCameraCount * m_nScanCount;
+	int nOldCount = nOldCameraCount * nOldScanCount;
+	if (m_pCameraSettings != nullptr) {
+		delete[] m_pCameraSettings;
+		m_pCameraSettings = nullptr;
 	}
+	m_pCameraSettings = new CCameraSettings[m_nCameraCount * m_nScanCount];
+
+	// 鍒濆鍖栨柊缁撴瀯
+	int iIndex = 0;
+	for (int iCam = 0; iCam < m_nCameraCount; ++iCam) {
+		for (int iScan = 0; iScan < m_nScanCount; ++iScan, ++iIndex) {
+			m_pCameraSettings[iIndex].m_iCamera = iCam;
+			m_pCameraSettings[iIndex].m_iScan = iScan;
+		}
+	}
+
+	// 鎷疯礉鍥炴棫璁剧疆
+	if (pOldSettings != nullptr) {
+		for (int iCam = 0; iCam < nOldCameraCount; ++iCam) {
+			for (int iScan = 0; iScan < nOldScanCount; ++iScan) {
+				if (iCam < m_nCameraCount && iScan < m_nScanCount) {
+					int nNewIndex = iCam * m_nScanCount + iScan;
+					int nOldIndex = iCam * nOldScanCount + iScan;
+
+					if (nNewIndex < nNewCount && nOldIndex < nOldCount)
+					{
+						SetCameraSettings(&pOldSettings[nOldIndex]);
+					}
+				}
+			}
+		}
+		delete[] pOldSettings;
+	}
+
+	// 鏇存柊鏃х殑鐩告満鍜屾壂鎻忔暟
+	nOldCameraCount = m_nCameraCount;
+	nOldScanCount = m_nScanCount;
 
 	return TRUE;
 }
 
-CCameraSettings	*CHardwareSettings::GetCameraSettings(int iCamera,int iScan)
+CCameraSettings* CHardwareSettings::GetCameraSettings(int iCamera,int iScan)
 {
-	if(iCamera >= m_nCameraCount || iScan >= m_nScanCount 
-		|| m_nCameraCount <= 0 || m_nScanCount <= 0)
-		return NULL;
-
-	for(int iLoop=0;iLoop<m_nCameraCount*m_nScanCount;iLoop++)
-	{
-		if(m_pCameraSettings[iLoop].m_iCamera == iCamera && m_pCameraSettings[iLoop].m_iScan == iScan)
-			return &m_pCameraSettings[iLoop];
+	if (nullptr == m_pCameraSettings || iCamera < 0 || iScan < 0) {
+		return nullptr;
 	}
 
-	return NULL;
+	if (iCamera >= m_nCameraCount || iScan >= m_nScanCount) {
+		return nullptr;
+	}
+
+	int nIndex = iCamera * m_nScanCount + iScan;
+	return &m_pCameraSettings[nIndex];
 }
 
 BOOL CHardwareSettings::SetCameraSettings(CCameraSettings *pCamera)
 {
-	if(pCamera == NULL || m_nCameraCount <= 0 || m_nScanCount <= 0)
+	if (pCamera == nullptr || m_pCameraSettings == nullptr) {
 		return FALSE;
+	}
 
-	CCameraSettings	*pOrgCam = GetCameraSettings(pCamera->m_iCamera,pCamera->m_iScan);
-	if(pOrgCam == NULL)
+	CCameraSettings* pTarget = GetCameraSettings(pCamera->m_iCamera, pCamera->m_iScan);
+	if (pTarget == nullptr) {
 		return FALSE;
+	}
 
-	*pOrgCam = *pCamera;
+	*pTarget = *pCamera;
 
 	return TRUE;
 }
@@ -1985,61 +1998,39 @@
 	return TRUE;
 }
 
-
 int CHardwareSettings::GetScanToDimension(DimensionDir eDir)
 {
-	int			iScan,iFindScan;
-	int			iCam;
-	CCameraSettings *pCamera;
-
-	iFindScan = -1;
-	for(iCam=0;iCam<GetCameraCount();iCam++)
-	{
-		for(iScan=0;iScan<GetScanCount();iScan++)
-		{
-			pCamera = GetCameraSettings(iCam,iScan);
-			if(pCamera == NULL)
-				continue;
-
-			if(pCamera->m_eDimension == eDir)
-			{
-				iFindScan = iScan;
-				break;
+	for (int iCam = 0; iCam < GetCameraCount(); ++iCam) {
+		for (int iScan = 0; iScan < GetScanCount(); ++iScan) {
+			CCameraSettings* pCamera = GetCameraSettings(iCam, iScan);
+			if (pCamera != nullptr && pCamera->m_eDimension == eDir) {
+				return iScan;
 			}
 		}
-
-		if(iFindScan != -1)
-			break;
 	}
-	return iFindScan;
+	return -1;
 }
 
-CAMERA_SCANDIR CHardwareSettings::GetScanToScanDir(int iCam,int iScan)
+CAMERA_SCANDIR CHardwareSettings::GetScanToScanDir(int iCam, int iScan)
 {
-	CCameraSettings *pCamera;
-
-	pCamera = GetCameraSettings(iCam,iScan);
-	if(pCamera == NULL)
+	CCameraSettings *pCamera = GetCameraSettings(iCam, iScan);
+	if (pCamera == nullptr) {
 		return SCANGLASS_NONE;
+	}
 
 	return pCamera->m_eScanDir;
 }
 
 int	CHardwareSettings::GetCameraIndexToDimension(DimensionDir eDir)
 {
-	CCameraSettings *pCamera;
-	int			iCam,iScan;
+	if (m_pCameraSettings == nullptr) {
+		return -1;
+	}
 
-	for(iCam=0;iCam<GetCameraCount();iCam++)
-	{
-		for(iScan=0;iScan<GetScanCount();iScan++)
-		{
-			pCamera = GetCameraSettings(iCam,iScan);
-			if(pCamera == NULL)
-				continue;
-
-			if(pCamera->m_eDimension == eDir)
-			{
+	for (int iCam = 0; iCam < GetCameraCount(); ++iCam) {
+		for (int iScan = 0; iScan < GetScanCount(); ++iScan) {
+			CCameraSettings* pCamera = GetCameraSettings(iCam, iScan);
+			if (pCamera && pCamera->m_eDimension == eDir) {
 				return iCam;
 			}
 		}
diff --git a/EdgeInspector_App/Recipe/HardwareSettings.h b/EdgeInspector_App/Recipe/HardwareSettings.h
index afb57c3..051ad0f 100644
--- a/EdgeInspector_App/Recipe/HardwareSettings.h
+++ b/EdgeInspector_App/Recipe/HardwareSettings.h
@@ -156,15 +156,15 @@
 
 	// Camera
 public:
-	int							GetCameraCount(){return m_nCameraCount;}
-	int							GetScanCount(){return m_nScanCount;}
-	BOOL						SetCameraCount(int nCameraCount,int nScanCount);
-	CCameraSettings				*GetCameraSettings(){return m_pCameraSettings;}
-	CCameraSettings				*GetCameraSettings(int iCamera,int iScan);
-	BOOL						SetCameraSettings(CCameraSettings *pCamera);
+	int							GetCameraCount() { return m_nCameraCount; }
+	int							GetScanCount() { return m_nScanCount; }
+	BOOL						SetCameraCount(int nCameraCount, int nScanCount);
+	CCameraSettings*			GetCameraSettings() { return m_pCameraSettings; }
+	CCameraSettings*			GetCameraSettings(int iCamera, int iScan);
+	BOOL						SetCameraSettings(CCameraSettings* pCamera);
 
 	int							GetScanToDimension(DimensionDir eDir);
-	CAMERA_SCANDIR				GetScanToScanDir(int iCam,int iScan);
+	CAMERA_SCANDIR				GetScanToScanDir(int iCam, int iScan);
 	int							GetCameraIndexToDimension(DimensionDir eDir);
 
 	// PLC
diff --git a/EdgeInspector_App/View/ViewMain_HWSetting.cpp b/EdgeInspector_App/View/ViewMain_HWSetting.cpp
index 888f978..f289452 100644
--- a/EdgeInspector_App/View/ViewMain_HWSetting.cpp
+++ b/EdgeInspector_App/View/ViewMain_HWSetting.cpp
@@ -375,7 +375,12 @@
 	CString		str;		
 	const   TCHAR* SET_CAMERA_DIR[] = {_T("Top"),_T("Bottom")};
 	const   TCHAR* SET_INS_DIR[] = {_T("Long"),_T("Short")};	
-	const   TCHAR* SET_INS_DIMENSION[] = {_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* SET_INS_DIMENSION[] = {
+		_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")
+	};
+
 	CStringArray	arrDir,arrInsDir,arrDimension;
 	CGridCellCombo *pCell;		
 	
@@ -384,7 +389,7 @@
 		arrDir.Add(SET_CAMERA_DIR[i]);		
 		arrInsDir.Add(SET_INS_DIR[i]);		
 	}	
-	for(i=0;i<8;i++)
+	for(i=0;i<12;i++)
 	{
 		arrDimension.Add(SET_INS_DIMENSION[i]);				
 	}	
@@ -447,13 +452,17 @@
 				switch(pCamera->m_eDimension)
 				{
 				case DIMENSION_A: str.Format(_T("%s"),SET_INS_DIMENSION[0]); break;
-				case DIMENSION_B: str.Format(_T("%s"),SET_INS_DIMENSION[1]); break;				
-				case DIMENSION_C: str.Format(_T("%s"),SET_INS_DIMENSION[2]); break;				
-				case DIMENSION_D: str.Format(_T("%s"),SET_INS_DIMENSION[3]); break;				
-				case DIMENSION_A_DN: str.Format(_T("%s"),SET_INS_DIMENSION[4]); break;				
-				case DIMENSION_B_DN: str.Format(_T("%s"),SET_INS_DIMENSION[5]); break;				
-				case DIMENSION_C_DN: str.Format(_T("%s"),SET_INS_DIMENSION[6]); break;				
-				case DIMENSION_D_DN: str.Format(_T("%s"),SET_INS_DIMENSION[7]); break;				
+				case DIMENSION_B: str.Format(_T("%s"),SET_INS_DIMENSION[1]); break;
+				case DIMENSION_C: str.Format(_T("%s"),SET_INS_DIMENSION[2]); break;
+				case DIMENSION_D: str.Format(_T("%s"),SET_INS_DIMENSION[3]); break;
+				case DIMENSION_A_DN: str.Format(_T("%s"),SET_INS_DIMENSION[4]); break;
+				case DIMENSION_B_DN: str.Format(_T("%s"),SET_INS_DIMENSION[5]); break;
+				case DIMENSION_C_DN: str.Format(_T("%s"),SET_INS_DIMENSION[6]); break;
+				case DIMENSION_D_DN: str.Format(_T("%s"),SET_INS_DIMENSION[7]); break;
+				case DIMENSION_A_RIP: str.Format(_T("%s"), SET_INS_DIMENSION[8]); break;
+				case DIMENSION_B_RIP: str.Format(_T("%s"), SET_INS_DIMENSION[9]); break;
+				case DIMENSION_C_RIP: str.Format(_T("%s"), SET_INS_DIMENSION[10]); break;
+				case DIMENSION_D_RIP: str.Format(_T("%s"), SET_INS_DIMENSION[11]); break;
 				default: str.Format(_T("%s"),_T("No")); break;
 				}			
 				m_CameraGrid.SetItemText(iRow,iCol,str);	

--
Gitblit v1.9.3