From 1175f5fbe8fd832943880bfc37c0e2a451a0688a Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期四, 25 十二月 2025 19:34:38 +0800
Subject: [PATCH] 删除了几个类优化了路径生成的逻辑

---
 src/dikuai/Dikuaiguanli.java |  135 +++++++++++++++-----------------------------
 1 files changed, 46 insertions(+), 89 deletions(-)

diff --git a/src/dikuai/Dikuaiguanli.java b/src/dikuai/Dikuaiguanli.java
index ce8aafb..b61db27 100644
--- a/src/dikuai/Dikuaiguanli.java
+++ b/src/dikuai/Dikuaiguanli.java
@@ -1,5 +1,4 @@
 package dikuai;
-
 import javax.swing.*;
 import java.awt.*;
 import java.awt.event.*;
@@ -20,8 +19,7 @@
 import java.util.Collections;
 import java.util.Objects;
 import java.util.Properties;
-
-import lujing.Lunjingguihua;
+import java.util.Locale;
 import lujing.MowingPathGenerationPage;
 import publicway.Fuzhibutton;
 import publicway.Lookbutton;
@@ -271,14 +269,17 @@
 		contentPanel.add(mowingPatternPanel);
 		contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
 
-		// 鍓茶崏鏈哄壊鍒�瀹藉害
+		// 鍓茶崏鏈哄壊鍒�瀹藉害锛堝崟浣嶏細绫筹紝淇濈暀2浣嶅皬鏁帮級
 		String mowingBladeWidthValue = dikuai.getMowingBladeWidth();
 		String displayBladeWidth = "鏈缃�";
 		if (mowingBladeWidthValue != null && !"-1".equals(mowingBladeWidthValue) && !mowingBladeWidthValue.trim().isEmpty()) {
 			try {
 				double bladeWidthMeters = Double.parseDouble(mowingBladeWidthValue.trim());
-				double bladeWidthCm = bladeWidthMeters * 100.0;
-				displayBladeWidth = String.format("%.2f鍘樼背", bladeWidthCm);
+				// 濡傛灉鍊煎ぇ浜�100锛岃涓烘槸鍘樼背锛岄渶瑕佽浆鎹负绫�
+				if (bladeWidthMeters > 100) {
+					bladeWidthMeters = bladeWidthMeters / 100.0;
+				}
+				displayBladeWidth = String.format(Locale.US, "%.2fm", bladeWidthMeters);
 			} catch (NumberFormatException e) {
 				displayBladeWidth = "鏈缃�";
 			}
@@ -287,10 +288,18 @@
 		contentPanel.add(mowingBladeWidthPanel);
 		contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
 
+		// 鍓茶崏瀹藉害锛堝崟浣嶏細绫筹紝淇濈暀2浣嶅皬鏁帮級
 		String mowingWidthValue = dikuai.getMowingWidth();
 		String displayWidth = "鏈缃�";
 		if (mowingWidthValue != null && !"-1".equals(mowingWidthValue) && !mowingWidthValue.trim().isEmpty()) {
-			displayWidth = mowingWidthValue + "鍘樼背";
+			try {
+				double widthCm = Double.parseDouble(mowingWidthValue.trim());
+				// 灏嗗帢绫宠浆鎹负绫筹紝淇濈暀2浣嶅皬鏁�
+				double widthMeters = widthCm / 100.0;
+				displayWidth = String.format(Locale.US, "%.2fm", widthMeters);
+			} catch (NumberFormatException e) {
+				displayWidth = "鏈缃�";
+			}
 		}
 		JPanel mowingWidthPanel = createCardInfoItem("鍓茶崏瀹藉害:", displayWidth);
 		contentPanel.add(mowingWidthPanel);
@@ -306,7 +315,7 @@
 				if (distanceMeters > 100) {
 					distanceMeters = distanceMeters / 100.0;
 				}
-				displaySafetyDistance = String.format("%.2f绫�", distanceMeters);
+				displaySafetyDistance = String.format(Locale.US, "%.2fm", distanceMeters);
 			} catch (NumberFormatException e) {
 				displaySafetyDistance = "鏈缃�";
 			}
@@ -1037,7 +1046,7 @@
 		}
 		
 		// 鎵撳紑杈圭晫缂栬緫椤甸潰
-		Dikuanbianjipage page = new Dikuanbianjipage(owner, "鍦板潡杈圭晫绠$悊椤甸潰", dikuai.getBoundaryCoordinates(), dikuai);
+		Dikuanbianjipage page = new Dikuanbianjipage(owner, "杈圭晫绠$悊椤甸潰", dikuai.getBoundaryCoordinates(), dikuai);
 		page.setVisible(true);
 		
 		// 鍏抽棴鍦板潡绠$悊椤甸潰
@@ -1265,6 +1274,11 @@
 			public boolean savePlannedPath(Dikuai dikuai, String value) {
 				return saveFieldAndRefresh(dikuai, "plannedPath", value);
 			}
+
+			@Override
+			public boolean saveMowingSafetyDistance(Dikuai dikuai, String value) {
+				return saveFieldAndRefresh(dikuai, "mowingSafetyDistance", value);
+			}
 		};
 
 		// 鏄剧ず璺緞瑙勫垝椤甸潰
@@ -1307,14 +1321,8 @@
 			}
 		}
 		String modeValue = sanitizeValueOrNull(dikuai.getMowingPattern());
-		String initialGenerated = attemptMowingPathPreview(
-			boundaryValue,
-			obstacleValue,
-			widthValue,
-			modeValue,
-			this,
-			false
-		);
+		// 涓嶅啀棰勫厛鐢熸垚璺緞锛岀敱璺緞瑙勫垝椤甸潰澶勭悊
+		String initialGenerated = null;
 		showMowingPathDialog(dikuai, baseStationValue, boundaryValue, obstacleValue, widthValue, modeValue, initialGenerated);
 	}
 
@@ -1354,6 +1362,11 @@
 			public boolean savePlannedPath(Dikuai dikuai, String value) {
 				return saveFieldAndRefresh(dikuai, "plannedPath", value);
 			}
+
+			@Override
+			public boolean saveMowingSafetyDistance(Dikuai dikuai, String value) {
+				return saveFieldAndRefresh(dikuai, "mowingSafetyDistance", value);
+			}
 		};
 		
 		// 浣跨敤鏂扮殑鐙珛椤甸潰绫�
@@ -1372,78 +1385,19 @@
 		dialog.setVisible(true);
 	}
 
-	private String attemptMowingPathPreview(
-		String boundaryInput,
-		String obstacleInput,
-		String widthCmInput,
-		String modeInput,
-		Component parentComponent,
-		boolean showMessages) {
-		String boundary = sanitizeValueOrNull(boundaryInput);
-		if (boundary == null) {
-			if (showMessages) {
-				JOptionPane.showMessageDialog(parentComponent, "褰撳墠鍦板潡鏈缃竟鐣屽潗鏍囷紝鏃犳硶鐢熸垚璺緞", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
-			}
-			return null;
-		}
-		String rawWidth = widthCmInput != null ? widthCmInput.trim() : "";
-		String widthStr = sanitizeWidthString(widthCmInput);
-		if (widthStr == null) {
-			if (showMessages) {
-				String message = rawWidth.isEmpty() ? "璇峰厛璁剧疆鍓茶崏瀹藉害(鍘樼背)" : "鍓茶崏瀹藉害鏍煎紡涓嶆纭�";
-				JOptionPane.showMessageDialog(parentComponent, message, "鎻愮ず", JOptionPane.WARNING_MESSAGE);
-			}
-			return null;
-		}
-		double widthCm;
-		try {
-			widthCm = Double.parseDouble(widthStr);
-		} catch (NumberFormatException ex) {
-			if (showMessages) {
-				JOptionPane.showMessageDialog(parentComponent, "鍓茶崏瀹藉害鏍煎紡涓嶆纭�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
-			}
-			return null;
-		}
-		if (widthCm <= 0) {
-			if (showMessages) {
-				JOptionPane.showMessageDialog(parentComponent, "鍓茶崏瀹藉害蹇呴』澶т簬0", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
-			}
-			return null;
-		}
-		double widthMeters = widthCm / 100.0d;
-		String plannerWidth = BigDecimal.valueOf(widthMeters)
-			.setScale(3, RoundingMode.HALF_UP)
-			.stripTrailingZeros()
-			.toPlainString();
-		String obstacles = sanitizeValueOrNull(obstacleInput);
-		if (obstacles != null) {
-			obstacles = obstacles.replace("\r\n", " ").replace('\r', ' ').replace('\n', ' ');
-		}
-		String mode = normalizeExistingMowingPattern(modeInput);
-		try {
-			String generated = Lunjingguihua.generatePathFromStrings(boundary, obstacles, plannerWidth, mode);
-			String trimmed = generated != null ? generated.trim() : "";
-			if (trimmed.isEmpty()) {
-				if (showMessages) {
-					JOptionPane.showMessageDialog(parentComponent, "鏈敓鎴愭湁鏁堢殑鍓茶崏璺緞锛岃妫�鏌ュ湴鍧楁暟鎹�", "鎻愮ず", JOptionPane.INFORMATION_MESSAGE);
-				}
-				return null;
-			}
-			if (showMessages) {
-				JOptionPane.showMessageDialog(parentComponent, "鍓茶崏璺緞宸茬敓鎴�", "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
-			}
-			return trimmed;
-		} catch (IllegalArgumentException ex) {
-			if (showMessages) {
-				JOptionPane.showMessageDialog(parentComponent, "鐢熸垚鍓茶崏璺緞澶辫触: " + ex.getMessage(), "閿欒", JOptionPane.ERROR_MESSAGE);
-			}
-		} catch (Exception ex) {
-			if (showMessages) {
-				JOptionPane.showMessageDialog(parentComponent, "鐢熸垚鍓茶崏璺緞鏃跺彂鐢熷紓甯�: " + ex.getMessage(), "閿欒", JOptionPane.ERROR_MESSAGE);
-			}
-		}
-		return null;
-	}
+	/**
+	 * 灏濊瘯鐢熸垚鍓茶崏璺緞棰勮
+	 * 鐢ㄤ簬鍦ㄥ璇濇涓疄鏃堕瑙堟垨鐢熸垚璺緞锛屽寘鍚弬鏁版牎楠屽拰閿欒鎻愮ず閫昏緫
+	 * 
+	 * @param boundaryInput 鍦板潡杈圭晫鍧愭爣瀛楃涓�
+	 * @param obstacleInput 闅滅鐗╁潗鏍囧瓧绗︿覆
+	 * @param widthCmInput 鍓茶崏瀹藉害锛堝帢绫筹級
+	 * @param modeInput 鍓茶崏妯″紡锛堝钩琛�/铻烘棆锛�
+	 * @param parentComponent 鐢ㄤ簬鏄剧ず鎻愮ず妗嗙殑鐖剁粍浠�
+	 * @param showMessages 鏄惁鏄剧ず鎴愬姛/澶辫触鐨勬彁绀烘
+	 * @return 鐢熸垚鐨勮矾寰勫瓧绗︿覆锛屽鏋滅敓鎴愬け璐ユ垨鏍¢獙鏈�氳繃鍒欒繑鍥� null
+	 */
+
 
 	private JTextArea createInfoTextArea(String text, boolean editable, int rows) {
 		JTextArea area = new JTextArea(text);
@@ -1636,6 +1590,9 @@
 				return false;
 			}
 
+			// 鍚屾椂淇濆瓨鍒� dikuai.properties
+			saveFieldAndRefresh(dikuai, "obstacleCoordinates", obstaclePayload);
+
 			obstacleSummaryCache = loadObstacleSummaries();
 			boolean isCurrent = landNumber.equals(currentWorkLandNumber);
 			loadDikuaiData();

--
Gitblit v1.10.0