From 87d7cf316e983b0398b270de03a8092412af8487 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 19 十二月 2025 16:56:30 +0800
Subject: [PATCH] 新增了收到绘制边界模式

---
 src/zhuye/MapRenderer.java |   62 +++++++++++++++++++++++++++++++
 1 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/src/zhuye/MapRenderer.java b/src/zhuye/MapRenderer.java
index 31b93b8..790f3b9 100644
--- a/src/zhuye/MapRenderer.java
+++ b/src/zhuye/MapRenderer.java
@@ -31,6 +31,7 @@
 import zhangaiwu.Obstacledge;
 import zhangaiwu.yulanzhangaiwu;
 import yaokong.Control03;
+import bianjie.shudongdraw;
 
 /**
  * 鍦板浘娓叉煋鍣� - 璐熻矗鍧愭爣绯荤粯鍒躲�佽鍥惧彉鎹㈢瓑鍔熻兘
@@ -102,6 +103,7 @@
     private boolean measurementModeActive = false;  // 娴嬮噺妯″紡鏄惁婵�娲�
     private boolean handheldBoundaryPreviewActive;
     private boolean pendingTrackBreak = true;
+    private bianjie.shudongdraw manualBoundaryDrawer = new bianjie.shudongdraw();  // 鎵嬪姩缁樺埗杈圭晫缁樺埗鍣�
     private boolean idleTrailSuppressed;
     private Path2D.Double realtimeBoundaryPathCache;
     private String realtimeBoundaryPathLand;
@@ -207,6 +209,14 @@
                 lastDragPoint = null;
                 dragInProgress = false;
             }
+            
+            public void mouseExited(MouseEvent e) {
+                // 榧犳爣绂诲紑闈㈡澘鏃讹紝娓呴櫎榧犳爣浣嶇疆鏄剧ず
+                if (manualBoundaryDrawer.isManualBoundaryDrawingMode()) {
+                    manualBoundaryDrawer.clearMousePosition();
+                    visualizationPanel.repaint();
+                }
+            }
 
             public void mouseClicked(MouseEvent e) {
                 if (dragInProgress) {
@@ -216,6 +226,14 @@
                 if (!SwingUtilities.isLeftMouseButton(e) || e.getClickCount() != 1) {
                     return;
                 }
+                // 浼樺厛澶勭悊鎵嬪姩缁樺埗杈圭晫妯″紡鐐瑰嚮
+                if (manualBoundaryDrawer.isManualBoundaryDrawingMode()) {
+                    Point2D.Double worldPoint = screenToWorld(e.getPoint());
+                    if (manualBoundaryDrawer.handleClick(worldPoint)) {
+                        visualizationPanel.repaint();
+                        return;
+                    }
+                }
                 // 浼樺厛澶勭悊娴嬮噺妯″紡鐐瑰嚮
                 if (measurementModeActive && handleMeasurementClick(e.getPoint())) {
                     return;
@@ -248,6 +266,17 @@
                     visualizationPanel.repaint();
                 }
             }
+            
+            public void mouseMoved(MouseEvent e) {
+                // 鍦ㄦ墜鍔ㄧ粯鍒惰竟鐣屾ā寮忔椂锛屾洿鏂伴紶鏍囦綅缃�
+                if (manualBoundaryDrawer.isManualBoundaryDrawingMode()) {
+                    Point2D.Double worldPoint = screenToWorld(e.getPoint());
+                    manualBoundaryDrawer.updateMousePosition(worldPoint);
+                    visualizationPanel.repaint();
+                } else {
+                    manualBoundaryDrawer.clearMousePosition();
+                }
+            }
         });
     }
 
@@ -378,6 +407,12 @@
 
     adddikuaiyulan.drawPreview(g2d, handheldBoundaryPreview, scale, handheldBoundaryPreviewActive, boundaryPreviewMarkerScale);
 
+        // 缁樺埗鎵嬪姩缁樺埗鐨勮竟鐣�
+        manualBoundaryDrawer.drawBoundary(g2d, scale);
+        
+        // 缁樺埗榧犳爣瀹炴椂浣嶇疆锛堟墜鍔ㄧ粯鍒惰竟鐣屾ā寮忔椂锛�
+        manualBoundaryDrawer.drawMousePosition(g2d, scale);
+
         // 缁樺埗瀵艰埅璺緞锛堜腑灞傦級
         if (hasPlannedPath) {
             drawCurrentPlannedPath(g2d);
@@ -1223,6 +1258,33 @@
     }
     
     /**
+     * 璁剧疆鎵嬪姩缁樺埗杈圭晫妯″紡
+     */
+    public void setManualBoundaryDrawingMode(boolean active) {
+        manualBoundaryDrawer.setManualBoundaryDrawingMode(active);
+        if (visualizationPanel != null) {
+            visualizationPanel.repaint();
+        }
+    }
+    
+    /**
+     * 鑾峰彇鎵嬪姩缁樺埗鐨勮竟鐣岀偣鍒楄〃
+     */
+    public List<Point2D.Double> getManualBoundaryPoints() {
+        return manualBoundaryDrawer.getManualBoundaryPoints();
+    }
+    
+    /**
+     * 娓呯┖鎵嬪姩缁樺埗鐨勮竟鐣岀偣
+     */
+    public void clearManualBoundaryPoints() {
+        manualBoundaryDrawer.clearManualBoundaryPoints();
+        if (visualizationPanel != null) {
+            visualizationPanel.repaint();
+        }
+    }
+    
+    /**
      * 璁剧疆娴嬮噺妯″紡
      */
     public void setMeasurementMode(boolean active) {

--
Gitblit v1.10.0