Files
XplorePlane/XplorePlane/Views/ImageProcessing/BgaMeasurePanel.xaml.cs
T

75 lines
2.2 KiB
C#

using System.Windows;
using XP.ImageProcessing.RoiControl.Controls;
namespace XplorePlane.Views.ImageProcessing
{
public partial class BgaMeasurePanel : Window
{
private PolygonRoiCanvas _canvas;
public BgaMeasurePanel()
{
InitializeComponent();
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
try
{
var mainWin = Owner as MainWindow;
if (mainWin != null)
_canvas = FindChild<PolygonRoiCanvas>(mainWin);
}
catch { }
// 模式切换:通知 canvas 切换气泡/焊球
RbVoid.Checked += (s, ev) =>
{
if (_canvas != null) _canvas.SetBgaDrawBall(false);
};
RbBall.Checked += (s, ev) =>
{
if (_canvas != null) _canvas.SetBgaDrawBall(true);
};
// VoidLimit 同步
SliderVoidLimit.ValueChanged += (s, ev) =>
{
TbVoidLimit.Text = SliderVoidLimit.Value.ToString("F1");
_canvas?.SetBgaVoidLimit(SliderVoidLimit.Value);
};
// 监听测量完成事件更新结果
if (_canvas != null)
{
_canvas.MeasureCompleted += (s, ev) =>
{
if (ev is MeasureCompletedEventArgs args && args.MeasureType == "BgaVoid")
{
TbResult.Text = $"空隙率: {args.Distance:F1}%";
}
};
}
}
private void Finish_Click(object sender, RoutedEventArgs e)
{
Close();
}
private static T FindChild<T>(DependencyObject parent) where T : DependencyObject
{
int count = System.Windows.Media.VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < count; i++)
{
var child = System.Windows.Media.VisualTreeHelper.GetChild(parent, i);
if (child is T t) return t;
var result = FindChild<T>(child);
if (result != null) return result;
}
return null;
}
}
}