气泡测量:ROI上方显示空隙率和PASS/FAIL判定标签

This commit is contained in:
李伟
2026-04-27 13:47:51 +08:00
parent e8a16f6a3c
commit 5a1a992abd
@@ -375,6 +375,7 @@ namespace XP.ImageProcessing.RoiControl.Controls
private BubbleSubTool _bubbleTool = BubbleSubTool.Roi;
private Rectangle _bubbleRoiRect;
private Ellipse _bubbleRoiHandle; // 右下角调整手柄
private TextBlock _bubbleResultLabel; // ROI 上方结果标签
private Rect? _bubbleRoi;
private Point? _bubbleRoiStart;
private bool _bubbleRoiDragging;
@@ -1137,6 +1138,16 @@ namespace XP.ImageProcessing.RoiControl.Controls
};
_measureOverlay.Children.Add(_bubbleRoiHandle);
}
if (_bubbleResultLabel == null)
{
_bubbleResultLabel = new TextBlock
{
FontSize = 13, FontWeight = FontWeights.Bold,
IsHitTestVisible = false,
Visibility = Visibility.Collapsed
};
_measureOverlay.Children.Add(_bubbleResultLabel);
}
}
private void SyncBubbleRoiVisuals()
@@ -1256,6 +1267,17 @@ namespace XP.ImageProcessing.RoiControl.Controls
}
double voidRate = roiArea > 0 ? voidArea * 100.0 / roiArea : 0;
// 更新 ROI 上方标签
if (_bubbleResultLabel != null)
{
string cls = voidRate <= 25.0 ? "PASS" : "FAIL";
_bubbleResultLabel.Text = $"Void: {voidRate:F1}% | {cls}";
_bubbleResultLabel.Foreground = cls == "PASS" ? Brushes.Lime : Brushes.Red;
Canvas.SetLeft(_bubbleResultLabel, roi.X);
Canvas.SetTop(_bubbleResultLabel, roi.Y - 20);
_bubbleResultLabel.Visibility = Visibility.Visible;
}
RaiseMeasureCompleted(roi.TopLeft, roi.BottomRight, voidRate, 1, "BubbleVoid");
}
@@ -1388,6 +1410,7 @@ namespace XP.ImageProcessing.RoiControl.Controls
{
if (_bubbleRoiRect != null) { _measureOverlay.Children.Remove(_bubbleRoiRect); _bubbleRoiRect = null; }
if (_bubbleRoiHandle != null) { _measureOverlay.Children.Remove(_bubbleRoiHandle); _bubbleRoiHandle = null; }
if (_bubbleResultLabel != null) { _measureOverlay.Children.Remove(_bubbleResultLabel); _bubbleResultLabel = null; }
if (_bubbleMaskImage != null) { _measureOverlay.Children.Remove(_bubbleMaskImage); _bubbleMaskImage = null; }
}
_bubbleRoi = null;