From b315a6943e6c0d6bdf0d5f7565c570d719154d6c Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期三, 17 十二月 2025 14:56:58 +0800
Subject: [PATCH] 新增了障碍物管理页面

---
 src/zhuye/MapRenderer.java |   35 +++++++++++++++++++++++++++++++----
 1 files changed, 31 insertions(+), 4 deletions(-)

diff --git a/src/zhuye/MapRenderer.java b/src/zhuye/MapRenderer.java
index 8406d2b..3c79352 100644
--- a/src/zhuye/MapRenderer.java
+++ b/src/zhuye/MapRenderer.java
@@ -52,6 +52,7 @@
     private static final Color GRASS_FILL_COLOR = new Color(144, 238, 144, 120);
     private static final Color GRASS_BORDER_COLOR = new Color(60, 179, 113);
     private static final Color BOUNDARY_POINT_COLOR = new Color(128, 0, 128);
+    private static final Color OBSTACLE_POINT_COLOR = new Color(255, 140, 0); // 姗欒壊锛岀敤浜庡尯鍒嗛殰纰嶇墿鐐�
     private static final Color CIRCLE_SAMPLE_COLOR = new Color(220, 20, 60, 230);
     private static final double CIRCLE_SAMPLE_SIZE = 0.54d;
     private static final double BOUNDARY_POINT_MERGE_THRESHOLD = 0.05;
@@ -71,6 +72,7 @@
     private String currentObstacleLandNumber;
     private String boundaryName;
     private boolean boundaryPointsVisible;
+    private boolean obstaclePointsVisible;
     private double boundaryPointSizeScale = 1.0d;
     private boolean previewSizingEnabled;
     private String currentBoundaryLandNumber;
@@ -346,14 +348,11 @@
         boolean hasPlannedPath = currentPlannedPath != null && currentPlannedPath.size() >= 2;
         boolean hasObstacles = currentObstacles != null && !currentObstacles.isEmpty();
 
+        // 缁樺埗鍦板潡杈圭晫锛堝簳灞傦級
         if (hasBoundary) {
             drawCurrentBoundary(g2d);
         }
 
-        if (hasObstacles) {
-            Obstacledraw.drawObstacles(g2d, currentObstacles, scale, selectedObstacleName);
-        }
-
         yulanzhangaiwu.renderPreview(g2d, scale);
 
         if (!circleSampleMarkers.isEmpty()) {
@@ -366,10 +365,16 @@
 
     adddikuaiyulan.drawPreview(g2d, handheldBoundaryPreview, scale, handheldBoundaryPreviewActive, boundaryPreviewMarkerScale);
 
+        // 缁樺埗瀵艰埅璺緞锛堜腑灞傦級
         if (hasPlannedPath) {
             drawCurrentPlannedPath(g2d);
         }
 
+        // 缁樺埗闅滅鐗╋紙椤跺眰锛屾樉绀哄湪鍦板潡鍜屽鑸矾寰勪笂鏂癸級
+        if (hasObstacles) {
+            Obstacledraw.drawObstacles(g2d, currentObstacles, scale, selectedObstacleName);
+        }
+
         if (boundaryPointsVisible && hasBoundary) {
             double markerScale = boundaryPointSizeScale * (previewSizingEnabled ? PREVIEW_BOUNDARY_MARKER_SCALE : 1.0d);
             pointandnumber.drawBoundaryPoints(
@@ -382,6 +387,22 @@
             );
         }
 
+        // 缁樺埗闅滅鐗╁潗鏍囩偣
+        if (obstaclePointsVisible && hasObstacles) {
+            List<Point2D.Double> obstaclePoints = Obstacledraw.getObstaclePoints(currentObstacles);
+            if (obstaclePoints != null && !obstaclePoints.isEmpty()) {
+                double markerScale = boundaryPointSizeScale * (previewSizingEnabled ? PREVIEW_BOUNDARY_MARKER_SCALE : 1.0d);
+                pointandnumber.drawBoundaryPoints(
+                    g2d,
+                    obstaclePoints,
+                    scale,
+                    BOUNDARY_POINT_MERGE_THRESHOLD,
+                    OBSTACLE_POINT_COLOR,
+                    markerScale
+                );
+            }
+        }
+
         if (shouldRenderIdleTrail()) {
             tuowei.draw(g2d, idleMowerTrail, scale);
         }
@@ -1743,6 +1764,7 @@
         obstacleBounds = null;
         selectedObstacleName = null;
         currentObstacleLandNumber = null;
+        obstaclePointsVisible = false;
     }
 
     private List<Obstacledge.Obstacle> parseObstacles(String obstaclesData, String landNumber) {
@@ -2030,6 +2052,11 @@
         visualizationPanel.repaint();
     }
 
+    public void setObstaclePointsVisible(boolean visible) {
+        this.obstaclePointsVisible = visible;
+        visualizationPanel.repaint();
+    }
+
     public void setBoundaryPointSizeScale(double sizeScale) {
         double normalized = (Double.isFinite(sizeScale) && sizeScale > 0.0d) ? sizeScale : 1.0d;
         if (Math.abs(boundaryPointSizeScale - normalized) < 1e-6) {

--
Gitblit v1.10.0