| | |
| | | memDC.SetStretchBltMode(COLORONCOLOR); |
| | | pOldBitmap = (CBitmap*)memDC.SelectObject(&Bitmap); |
| | | |
| | | DimensionDir eDim = (DimensionDir)m_nSideIdx; |
| | | bool bIsRipSide = (DIMENSION_A_RIP == m_nSideIdx) || (DIMENSION_B_RIP == eDim) || (DIMENSION_C_RIP == eDim) || (DIMENSION_D_RIP == eDim); |
| | | |
| | | // 1. Draw Buffer Image |
| | | UpdateView_Image(&memDC); |
| | |
| | | UpdateView_VisionResult(&memDC); |
| | | #endif // HALCON_VISION_KEY |
| | | |
| | | // 18. Side Rip Thickness : MODE_VIEW_MEASURE |
| | | UpdateView_SideRipThickness(&memDC); |
| | | |
| | | pDC->BitBlt(0,0,m_rtWnd.Width(),m_rtWnd.Height(),&memDC,0,0,SRCCOPY); |
| | | memDC.SelectObject(pOldBitmap); |
| | |
| | | memDC->SelectObject(pOldPen); |
| | | } |
| | | |
| | | void CEdgeImageViewer::UpdateView_SideRipThickness(CDC* memDC) |
| | | { |
| | | if (m_pBuffer == NULL || memDC == NULL || m_pGlassData == NULL || m_pRecipe == NULL) { |
| | | return; |
| | | } |
| | | |
| | | DimensionDir eDim = (DimensionDir)m_nSideIdx; |
| | | bool bIsRipSide = (DIMENSION_A_RIP == m_nSideIdx) || (DIMENSION_B_RIP == eDim) || (DIMENSION_C_RIP == eDim) || (DIMENSION_D_RIP == eDim); |
| | | if (!bIsRipSide) { |
| | | return; |
| | | } |
| | | |
| | | CRIP_THICKNESS_PARM& rip = m_pRecipe->m_SideParam[eDim].m_RipThk; |
| | | if (rip.m_bUseInspect != TRUE) { |
| | | return; |
| | | } |
| | | |
| | | CSide_Data* pSideData = m_pGlassData->GetSideData(eDim); |
| | | if (pSideData == NULL) { |
| | | return; |
| | | } |
| | | |
| | | if (m_MenuStatus[MODE_VIEW_MEASURE] == FALSE) { |
| | | return; |
| | | } |
| | | |
| | | CPen penOK(PS_SOLID, 1, RGB(0, 255, 0)); |
| | | CPen penNG(PS_SOLID, 1, RGB(255, 0, 0)); |
| | | CPen penNone(PS_DOT, 1, RGB(180, 180, 180)); |
| | | |
| | | CBrush brNull; brNull.CreateStockObject(NULL_BRUSH); |
| | | CPen* pOldPen = memDC->SelectObject(&penOK); |
| | | CBrush* pOldBrush = memDC->SelectObject(&brNull); |
| | | |
| | | auto DrawOne = [&](const CPoint(&pts)[RIP_POINT_COUNT], int nStatus, LPCTSTR label, double value_um, int index, int nAnchorX, int dy) { |
| | | if (nStatus == 0) { |
| | | return; |
| | | } |
| | | |
| | | if (nStatus == 1) { |
| | | memDC->SelectObject(&penOK); |
| | | memDC->SetTextColor(RGB(0, 255, 0)); |
| | | } |
| | | else { |
| | | memDC->SelectObject(&penNG); |
| | | memDC->SetTextColor(RGB(255, 0, 0)); |
| | | } |
| | | |
| | | CPoint p0 = GetWndPos(pts[0]); |
| | | CPoint p1 = GetWndPos(pts[1]); |
| | | |
| | | memDC->MoveTo(p0); memDC->LineTo(p1); |
| | | auto Cross = [&](const CPoint& p) { |
| | | memDC->MoveTo(p.x - 3, p.y - 3); memDC->LineTo(p.x + 3, p.y + 3); |
| | | memDC->MoveTo(p.x + 3, p.y - 3); memDC->LineTo(p.x - 3, p.y + 3); |
| | | }; |
| | | Cross(p0); Cross(p1); |
| | | |
| | | CPoint mid{ (p0.x + p1.x) / 2, (p0.y + p1.y) / 2 }; |
| | | CString s; s.Format(_T("%s[%02d]: %.1f um"), label, index + 1, value_um); |
| | | |
| | | memDC->TextOut(nAnchorX, mid.y + dy, s); |
| | | }; |
| | | |
| | | const int DY = 16; |
| | | for (int i = 0; i < MAX_RIP_SAMPLE_COUNT; ++i) { |
| | | CPoint L0 = GetWndPos(pSideData->m_ptSideRip_Left_pxl[i][0]); |
| | | CPoint L1 = GetWndPos(pSideData->m_ptSideRip_Left_pxl[i][1]); |
| | | CPoint R0 = GetWndPos(pSideData->m_ptSideRip_Right_pxl[i][0]); |
| | | CPoint R1 = GetWndPos(pSideData->m_ptSideRip_Right_pxl[i][1]); |
| | | CPoint G0 = GetWndPos(pSideData->m_ptSideRip_Glass_pxl[i][0]); |
| | | CPoint G1 = GetWndPos(pSideData->m_ptSideRip_Glass_pxl[i][1]); |
| | | |
| | | int nAnchorX = max(max(max(L0.x, L1.x), max(R0.x, R1.x)), max(G0.x, G1.x)) + 6; |
| | | if (nAnchorX > DISPLAY_FRAME_WIDTH / 2) { |
| | | nAnchorX = DISPLAY_FRAME_WIDTH / 2 - 100; |
| | | } |
| | | |
| | | // Left |
| | | DrawOne(pSideData->m_ptSideRip_Left_pxl[i], pSideData->m_nSideRip_Left_Status[i], _T("Rip-Left"), pSideData->m_dSideRip_Left_um[i], i, nAnchorX , -DY); |
| | | |
| | | // Glass |
| | | DrawOne(pSideData->m_ptSideRip_Glass_pxl[i], pSideData->m_nSideRip_Glass_Status[i], _T("Rip-Glass"), pSideData->m_dSideRip_Glass_um[i], i, nAnchorX, 0); |
| | | |
| | | // Right |
| | | DrawOne(pSideData->m_ptSideRip_Right_pxl[i], pSideData->m_nSideRip_Right_Status[i], _T("Rip-Right"), pSideData->m_dSideRip_Right_um[i], i, nAnchorX, +DY); |
| | | } |
| | | |
| | | memDC->SelectObject(pOldPen); |
| | | memDC->SelectObject(pOldBrush); |
| | | brNull.DeleteObject(); |
| | | } |
| | | |
| | | CRect CEdgeImageViewer::GetManualMeasureRect() |
| | | { |
| | | bool bManualMeasure = m_MenuStatus[MODE_USER_SELECT]; |