diff --git a/AlgorithmModule/src/ImgCheckAnalysisy.cpp b/AlgorithmModule/src/ImgCheckAnalysisy.cpp index 750a65f..864ffcb 100644 --- a/AlgorithmModule/src/ImgCheckAnalysisy.cpp +++ b/AlgorithmModule/src/ImgCheckAnalysisy.cpp @@ -482,8 +482,39 @@ int ImgCheckAnalysisy::CheckRun() diff_align = 180.0f - diff_align; } - // 如果diff_align大于10,则添加到缺陷列表 - if (diff_align > 10.0f) + // 1. 使用 ALign_Config.angle_diff 卡控内外边缘夹角(未配置时默认 10 度) + float angleTh = 10.0f; + if (m_pbaseCheckFunction != NULL && m_pbaseCheckFunction->ALign_Config.angle_diff > 0.0f) + { + angleTh = m_pbaseCheckFunction->ALign_Config.angle_diff; + } + + // 2. 使用 ALign_Config.x_offset / y_offset (mm) 卡控内外边缘中心偏移(mm 转像素) + float offX_px = 0.0f; + float offY_px = 0.0f; + if (m_pbaseCheckFunction != NULL) + { + if (m_fImgage_Scale_X > 0.0f) + { + offX_px = m_pbaseCheckFunction->ALign_Config.x_offset / m_fImgage_Scale_X; + } + if (m_fImgage_Scale_Y > 0.0f) + { + offY_px = m_pbaseCheckFunction->ALign_Config.y_offset / m_fImgage_Scale_Y; + } + } + + // 3. 内外边缘中心坐标偏移(像素) + float dx_px = std::fabs(m_outer_rroi.center.x - m_inner_rroi.center.x); + float dy_px = std::fabs(m_outer_rroi.center.y - m_inner_rroi.center.y); + + bool bAngleErr = diff_align > angleTh; + bool bOffsetXErr = (offX_px > 0.0f) && (dx_px > offX_px); + bool bOffsetYErr = (offY_px > 0.0f) && (dy_px > offY_px); + bool bOffsetErr = bOffsetXErr || bOffsetYErr; + + // 角度超差或中心偏移超差 -> 添加到缺陷列表 + if (bAngleErr || bOffsetErr) { QX_ERROR_INFO_ alignErr; alignErr.Idx = static_cast(m_pDetResult->pQx_ErrorList->size()); @@ -505,7 +536,20 @@ int ImgCheckAnalysisy::CheckRun() "outer-inner angle diff %.2f deg", diff_align); m_pDetResult->pQx_ErrorList->push_back(alignErr); - m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "angle diff %.2f deg > 10", diff_align); + if (bAngleErr) + { + m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "angle diff %.2f deg > %.2f", diff_align, angleTh); + } + if (bOffsetXErr) + { + m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "center offset dx %.1f px > %.1f px", + dx_px, offX_px); + } + if (bOffsetYErr) + { + m_pdetlog->AddCheckstr(PrintLevel_0, "Align Check", "center offset dy %.1f px > %.1f px", + dy_px, offY_px); + } } /*投影对齐模板*/