点线距测量工具实现
This commit is contained in:
@@ -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 右键菜单
|
||||
|
||||
Reference in New Issue
Block a user