diff --git a/XplorePlane/Assets/Icons/Clear.png b/XplorePlane/Assets/Icons/Clear.png
new file mode 100644
index 0000000..285eeae
Binary files /dev/null and b/XplorePlane/Assets/Icons/Clear.png differ
diff --git a/XplorePlane/Assets/Icons/Undo.png b/XplorePlane/Assets/Icons/Undo.png
new file mode 100644
index 0000000..a81bd7d
Binary files /dev/null and b/XplorePlane/Assets/Icons/Undo.png differ
diff --git a/XplorePlane/Assets/Icons/brush32.png b/XplorePlane/Assets/Icons/brush32.png
new file mode 100644
index 0000000..39ca1d6
Binary files /dev/null and b/XplorePlane/Assets/Icons/brush32.png differ
diff --git a/XplorePlane/Assets/Icons/eraser32.png b/XplorePlane/Assets/Icons/eraser32.png
new file mode 100644
index 0000000..651e27e
Binary files /dev/null and b/XplorePlane/Assets/Icons/eraser32.png differ
diff --git a/XplorePlane/Assets/Icons/magic32.png b/XplorePlane/Assets/Icons/magic32.png
new file mode 100644
index 0000000..5ebc7c1
Binary files /dev/null and b/XplorePlane/Assets/Icons/magic32.png differ
diff --git a/XplorePlane/Assets/Icons/rectangle32.png b/XplorePlane/Assets/Icons/rectangle32.png
new file mode 100644
index 0000000..6eaed6c
Binary files /dev/null and b/XplorePlane/Assets/Icons/rectangle32.png differ
diff --git a/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml b/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml
index 46f1700..07d443a 100644
--- a/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml
+++ b/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml
@@ -43,14 +43,22 @@
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -58,9 +66,9 @@
-
-
@@ -86,9 +94,13 @@
-
-
-
+
+
+
diff --git a/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml.cs b/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml.cs
index 58ba847..8169eac 100644
--- a/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml.cs
+++ b/XplorePlane/Views/ImageProcessing/BubbleMeasurePanel.xaml.cs
@@ -48,6 +48,19 @@ namespace XplorePlane.Views.ImageProcessing
_canvas?.SetBubbleBrushSize((int)SliderBrushSize.Value);
};
+ // VoidLimit 同步
+ TbVoidLimit.TextChanged += (s, ev) =>
+ {
+ if (double.TryParse(TbVoidLimit.Text, out double val))
+ _canvas?.SetBubbleVoidLimit(System.Math.Clamp(val, 0, 100));
+ };
+
+ // 初始同步:确保面板默认值推送到 canvas
+ _canvas?.SetBubbleThreshold((int)SliderThreshold.Value);
+ _canvas?.SetBubbleBrushSize((int)SliderBrushSize.Value);
+ if (double.TryParse(TbVoidLimit.Text, out double initLimit))
+ _canvas?.SetBubbleVoidLimit(System.Math.Clamp(initLimit, 0, 100));
+
// 监听 canvas 的工具切换事件(ROI 画完后自动切换时同步面板)
if (_canvas != null)
{