mrDarker
2025-08-06 c2da3f2d26079c9efba3961ef091a325d21d1c86
1. 添加侧面检相机
2. 优化硬件配置中相机相关的功能
已修改4个文件
270 ■■■■ 文件已修改
EdgeInspector_App/Define/Global_Define.h 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/HardwareSettings.cpp 181 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/Recipe/HardwareSettings.h 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
EdgeInspector_App/View/ViewMain_HWSetting.cpp 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"
};
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;
            }
        }
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
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);