1. 添加侧面检相机
2. 优化硬件配置中相机相关的功能
| | |
| | | |
| | | #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 |
| | | |
| | |
| | | |
| | | #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 荐 父怒 |
| | | |
| | |
| | | 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}; |
| | |
| | | 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" |
| | | }; |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | |
| | | 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; |
| | | } |
| | | } |
| | |
| | | |
| | | // 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 |
| | |
| | | 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; |
| | | |
| | |
| | | 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]); |
| | | } |
| | |
| | | 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); |