From 32524195d474b74e48916867b2a6c2f022a40d98 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期二, 09 十二月 2025 19:36:32 +0800
Subject: [PATCH] 20251209

---
 src/lujing/Lunjingguihua.java |   37 +++++++++++++++++++++++++++++++++++--
 1 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/src/lujing/Lunjingguihua.java b/src/lujing/Lunjingguihua.java
index 3b1c99b..907a4f7 100644
--- a/src/lujing/Lunjingguihua.java
+++ b/src/lujing/Lunjingguihua.java
@@ -266,8 +266,8 @@
         }
 
         List<PathSegment> generate() {
-            if (!"spiral".equals(mode)) {
-                return generateParallelPath();
+            if ("spiral".equals(mode)) {
+                return generateSpiralPath();
             }
             return generateParallelPath();
         }
@@ -361,6 +361,39 @@
             return path;
         }
 
+        private List<PathSegment> generateSpiralPath() {
+            Geometry safeArea = buildSafeArea();
+            if (safeArea == null || safeArea.isEmpty()) {
+                System.err.println("瀹夊叏鍖哄煙涓虹┖锛屾棤娉曠敓鎴愯灪鏃嬭矾寰�");
+                return new ArrayList<>();
+            }
+
+            List<PathSegment> spiral = luoxuan.generateSpiralPath(safeArea, width);
+            if (spiral.isEmpty()) {
+                return spiral;
+            }
+
+            postProcess(spiral);
+            PathSegment firstMowing = null;
+            PathSegment endCandidate = null;
+            for (int i = 0; i < spiral.size(); i++) {
+                PathSegment seg = spiral.get(i);
+                if (seg != null && seg.isMowing) {
+                    if (firstMowing == null) {
+                        firstMowing = seg;
+                    }
+                    endCandidate = seg;
+                }
+            }
+            if (firstMowing != null) {
+                firstMowing.setAsStartPoint();
+            }
+            if (endCandidate != null && endCandidate != firstMowing) {
+                endCandidate.setAsEndPoint();
+            }
+            return spiral;
+        }
+
         private Geometry buildSafeArea() {
             try {
                 Coordinate[] coords = polygon.toArray(new Coordinate[0]);

--
Gitblit v1.10.0