From c6e24163c3c852b4ac3e45d100b9253b3db0e182 Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 15 八月 2025 16:59:00 +0800
Subject: [PATCH] 1. 保存数据优化,提取公共区域,方便后期修改和扩展
---
EdgeInspector_App/View/EdgeImageViewer.cpp | 99 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 98 insertions(+), 1 deletions(-)
diff --git a/EdgeInspector_App/View/EdgeImageViewer.cpp b/EdgeInspector_App/View/EdgeImageViewer.cpp
index 418d499..c0bacd7 100644
--- a/EdgeInspector_App/View/EdgeImageViewer.cpp
+++ b/EdgeInspector_App/View/EdgeImageViewer.cpp
@@ -667,6 +667,8 @@
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);
@@ -688,7 +690,7 @@
// 7. Draw Exception : MODE_VIEW_EXCEPTION_AREA
UpdateView_ExceptionArea(&memDC);
-
+
// 8. Draw Inspect : MODE_VIEW_INSPECT_AREA
UpdateView_InspectArea(&memDC);
@@ -722,6 +724,8 @@
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);
@@ -2160,6 +2164,99 @@
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 == eDim) || (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];
--
Gitblit v1.9.3