From 3ca5f28be0a266e57a3ddece80d28072a1811de7 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期四, 25 十二月 2025 16:04:04 +0800
Subject: [PATCH] 解决了点击保存路径的bug

---
 src/lujing/MowingPathGenerationPage.java |   50 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/src/lujing/MowingPathGenerationPage.java b/src/lujing/MowingPathGenerationPage.java
index bbbe001..554c30c 100644
--- a/src/lujing/MowingPathGenerationPage.java
+++ b/src/lujing/MowingPathGenerationPage.java
@@ -475,7 +475,7 @@
         }
         
         JOptionPane.showMessageDialog(this, "鍓茶崏璺緞宸蹭繚瀛�", "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
-        dispose();
+        // dispose(); // 鐢ㄦ埛瑕佹眰淇濆瓨鍚庝笉鍏抽棴椤甸潰
     }
     
     /**
@@ -606,7 +606,8 @@
                     // 鍑稿舰鍦板潡锛屾湁闅滅鐗� -> 璋冪敤 AoxinglujingHaveObstacel
                     try {
                         // 鍋囪 AoxinglujingHaveObstacel 鏈夌被浼肩殑鏂规硶绛惧悕
-                        generated = AoxinglujingHaveObstacel.planPath(boundary, obstacles, plannerWidth, safetyMarginStr);
+                        List<AoxinglujingHaveObstacel.PathSegment> segments = AoxinglujingHaveObstacel.planPath(boundary, obstacles, plannerWidth, safetyMarginStr);
+                        generated = formatAoxingHaveObstaclePathSegments(segments);
                     } catch (Exception e) {
                         // 濡傛灉绫昏繕娌℃湁瀹炵幇锛屼娇鐢ㄥ師鏉ョ殑鏂规硶浣滀负鍚庡
                         if (showMessages) {
@@ -788,6 +789,30 @@
     }
     
     /**
+     * 鏍煎紡鍖� AoxinglujingHaveObstacel.PathSegment 鍒楄〃涓哄潗鏍囧瓧绗︿覆
+     */
+    private String formatAoxingHaveObstaclePathSegments(List<AoxinglujingHaveObstacel.PathSegment> segments) {
+        if (segments == null || segments.isEmpty()) {
+            return "";
+        }
+        StringBuilder sb = new StringBuilder();
+        AoxinglujingHaveObstacel.Point last = null;
+        for (AoxinglujingHaveObstacel.PathSegment segment : segments) {
+            // 鍙坊鍔犲壊鑽夊伐浣滄锛岃烦杩囪繃娓℃
+            if (segment.isMowing) {
+                // 濡傛灉璧风偣涓庝笂涓�涓粓鐐逛笉鍚岋紝娣诲姞璧风偣
+                if (last == null || !equals2D(last, segment.start)) {
+                    appendPoint(sb, segment.start);
+                }
+                // 娣诲姞缁堢偣
+                appendPoint(sb, segment.end);
+                last = segment.end;
+            }
+        }
+        return sb.toString();
+    }
+
+    /**
      * 姣旇緝涓や釜鐐规槸鍚︾浉鍚岋紙浣跨敤灏忕殑瀹瑰樊锛�
      */
     private boolean equals2D(AoxinglujingNoObstacle.Point p1, AoxinglujingNoObstacle.Point p2) {
@@ -828,6 +853,27 @@
         }
         sb.append(String.format(Locale.US, "%.6f,%.6f", point.x, point.y));
     }
+
+    /**
+     * 姣旇緝涓や釜 AoxinglujingHaveObstacel.Point 鏄惁鐩稿悓锛堜娇鐢ㄥ皬鐨勫宸級
+     */
+    private boolean equals2D(AoxinglujingHaveObstacel.Point p1, AoxinglujingHaveObstacel.Point p2) {
+        if (p1 == null || p2 == null) {
+            return p1 == p2;
+        }
+        double tolerance = 1e-6;
+        return Math.abs(p1.x - p2.x) < tolerance && Math.abs(p1.y - p2.y) < tolerance;
+    }
+
+    /**
+     * 娣诲姞 AoxinglujingHaveObstacel.Point 鍒板瓧绗︿覆鏋勫缓鍣�
+     */
+    private void appendPoint(StringBuilder sb, AoxinglujingHaveObstacel.Point point) {
+        if (sb.length() > 0) {
+            sb.append(";");
+        }
+        sb.append(String.format(Locale.US, "%.6f,%.6f", point.x, point.y));
+    }
     
     // ========== UI杈呭姪鏂规硶 ==========
     

--
Gitblit v1.10.0