点线距测量工具实现

This commit is contained in:
李伟
2026-04-24 10:53:13 +08:00
parent eefbd1d1c8
commit ef4e1f9eda
7 changed files with 358 additions and 100 deletions
@@ -26,7 +26,8 @@ namespace XplorePlane.Views
if (e is MeasureCompletedEventArgs args && DataContext is ViewportPanelViewModel vm)
{
vm.MeasurementResult = $"{args.Distance:F2} px";
vm.ImageInfo = $"点点距: {args.Distance:F2} px | ({args.P1.X:F0},{args.P1.Y:F0}) → ({args.P2.X:F0},{args.P2.Y:F0}) | 共 {args.TotalCount} 条测量";
string typeLabel = args.MeasureType == "PointToLine" ? "点线距" : "点点距";
vm.ImageInfo = $"{typeLabel}: {args.Distance:F2} px | ({args.P1.X:F0},{args.P1.Y:F0}) → ({args.P2.X:F0},{args.P2.Y:F0}) | 共 {args.TotalCount} 条测量";
}
};
RoiCanvas.MeasureStatusChanged += (s, e) =>
@@ -47,7 +48,12 @@ namespace XplorePlane.Views
// 测量模式:直接订阅 Prism 事件
ea?.GetEvent<MeasurementToolEvent>().Subscribe(mode =>
{
RoiCanvas.IsMeasuring = mode != MeasurementToolMode.None;
RoiCanvas.CurrentMeasureMode = mode switch
{
MeasurementToolMode.PointDistance => XP.ImageProcessing.RoiControl.Models.MeasureMode.PointDistance,
MeasurementToolMode.PointLineDistance => XP.ImageProcessing.RoiControl.Models.MeasureMode.PointToLine,
_ => XP.ImageProcessing.RoiControl.Models.MeasureMode.None
};
}, Prism.Events.ThreadOption.UIThread);
}
catch { }
@@ -63,12 +69,7 @@ namespace XplorePlane.Views
private void OnVmPropertyChanged(object sender, PropertyChangedEventArgs e)
{
if (sender is not ViewportPanelViewModel vm) return;
if (e.PropertyName == nameof(ViewportPanelViewModel.CurrentMeasurementMode))
{
RoiCanvas.IsMeasuring = vm.CurrentMeasurementMode != MeasurementToolMode.None;
}
// 测量模式和十字线通过 Prism 事件直接驱动,不再依赖 PropertyChanged
}
#region