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 | 406 ++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 256 insertions(+), 150 deletions(-)
diff --git a/src/dikuai/Dikuaiguanli.java b/src/dikuai/Dikuaiguanli.java
index 740ccf8..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,17 +19,16 @@
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;
+import publicway.buttonset;
import zhangaiwu.AddDikuai;
import zhangaiwu.Obstacledge;
import zhuye.MapRenderer;
import zhuye.Shouye;
import zhuye.Coordinate;
-import zhuye.buttonset;
-import zhuye.Fuzhibutton;
-import zhuye.Lookbutton;
import gecaoji.Device;
/**
@@ -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 = "鏈缃�";
}
@@ -316,8 +325,7 @@
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
// 寰�杩旂偣璺緞锛堝甫鏌ョ湅鍥炬爣鎸夐挳锛�
- JPanel returnPathPanel = createCardInfoItemWithButton("寰�杩旂偣璺緞:",
- getDisplayValue(dikuai.getReturnPathCoordinates(), "鏈缃�"),
+ JPanel returnPathPanel = createCardInfoItemWithIconButton("寰�杩旂偣璺緞:",
createViewButton(e -> editReturnPath(dikuai)));
configureInteractiveLabel(getInfoItemTitleLabel(returnPathPanel),
() -> editReturnPath(dikuai),
@@ -338,8 +346,9 @@
contentPanel.add(obstaclePanel);
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
- // 鍦板潡杈圭晫鍧愭爣锛堝甫鏄剧ず椤剁偣鎸夐挳锛�
- JPanel boundaryPanel = createBoundaryInfoItem(dikuai);
+ // 鍦板潡杈圭晫鍧愭爣锛堝甫鏌ョ湅鎸夐挳锛�
+ JPanel boundaryPanel = createCardInfoItemWithIconButton("鍦板潡杈圭晫:",
+ createViewButton(e -> editBoundaryCoordinates(dikuai)));
configureInteractiveLabel(getInfoItemTitleLabel(boundaryPanel),
() -> editBoundaryCoordinates(dikuai),
"鐐瑰嚮鏌ョ湅/缂栬緫鍦板潡杈圭晫鍧愭爣");
@@ -363,14 +372,6 @@
contentPanel.add(baseStationPanel);
contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
- JPanel boundaryOriginalPanel = createCardInfoItemWithIconButton("杈圭晫鍘熷鍧愭爣:",
- createViewButton(e -> editBoundaryOriginalCoordinates(dikuai)));
- configureInteractiveLabel(getInfoItemTitleLabel(boundaryOriginalPanel),
- () -> editBoundaryOriginalCoordinates(dikuai),
- "鐐瑰嚮鏌ョ湅/缂栬緫杈圭晫鍘熷鍧愭爣");
- contentPanel.add(boundaryOriginalPanel);
- contentPanel.add(Box.createRigidArea(new Dimension(0, 10)));
-
JPanel completedTrackPanel = createCardInfoItemWithButton("宸插畬鎴愬壊鑽夎矾寰�:",
getTruncatedValue(dikuai.getMowingTrack(), 12, "鏈褰�"),
createViewButton(e -> showCompletedMowingTrackDialog(dikuai)));
@@ -755,6 +756,20 @@
}
private String promptCoordinateEditing(String title, String initialValue) {
+ return promptCoordinateEditing(title, initialValue, null);
+ }
+
+ private String promptCoordinateEditing(String title, String initialValue, Dikuai dikuai) {
+ // 鍒ゆ柇鏄惁鏄線杩旂偣璺緞瀵硅瘽妗�
+ boolean isReturnPathDialog = title != null && title.contains("寰�杩旂偣璺緞");
+
+ if (isReturnPathDialog) {
+ Window owner = SwingUtilities.getWindowAncestor(this);
+ Wangfanpathpage page = new Wangfanpathpage(owner, title, initialValue, dikuai);
+ page.setVisible(true);
+ return page.getResult();
+ }
+
JTextArea textArea = new JTextArea(prepareCoordinateForEditor(initialValue));
textArea.setLineWrap(true);
textArea.setWrapStyleWord(true);
@@ -763,7 +778,8 @@
textArea.setBorder(BorderFactory.createEmptyBorder(8, 8, 8, 8));
JScrollPane scrollPane = new JScrollPane(textArea);
- scrollPane.setPreferredSize(new Dimension(360, 240));
+ // 濡傛灉鏄線杩旂偣璺緞瀵硅瘽妗嗭紝楂樺害璋冩暣涓洪�傚簲涓や釜鏂囨湰鍩�
+ scrollPane.setPreferredSize(new Dimension(360, isReturnPathDialog ? 100 : 240));
Window owner = SwingUtilities.getWindowAncestor(this);
JDialog dialog;
@@ -776,17 +792,115 @@
}
dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
- JPanel contentPanel = new JPanel(new BorderLayout());
+ JPanel contentPanel = new JPanel();
contentPanel.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
- contentPanel.add(scrollPane, BorderLayout.CENTER);
+
+ if (isReturnPathDialog) {
+ contentPanel.setLayout(new BoxLayout(contentPanel, BoxLayout.Y_AXIS));
+ // 鍑忓皬杈硅窛浠ュ鍔犳枃鏈煙瀹藉害 (98%宸﹀彸)
+ contentPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ // 1. 鍘熷寰�杩旇矾寰勫潗鏍囧尯鍩�
+ String rawCoords = dikuai != null ? prepareCoordinateForEditor(dikuai.getReturnPathRawCoordinates()) : "";
+ int rawCount = 0;
+ if (rawCoords != null && !rawCoords.isEmpty() && !"-1".equals(rawCoords)) {
+ rawCount = rawCoords.split(";").length;
+ }
+
+ JPanel rawHeaderPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ rawHeaderPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+ rawHeaderPanel.setBackground(BACKGROUND_COLOR);
+ rawHeaderPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 30));
+
+ JLabel rawTitleLabel = new JLabel("鍘熷寰�杩旇矾寰勫潗鏍� (" + rawCount + "鐐�) ");
+ rawTitleLabel.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+ rawHeaderPanel.add(rawTitleLabel);
+
+ // 鍘熷鍧愭爣澶嶅埗鎸夐挳
+ final String finalRawCoords = rawCoords;
+ JButton rawCopyBtn = Fuzhibutton.createCopyButton(
+ () -> {
+ if (finalRawCoords == null || finalRawCoords.isEmpty() || "-1".equals(finalRawCoords)) return null;
+ return finalRawCoords;
+ },
+ "澶嶅埗",
+ new Color(230, 250, 240)
+ );
+ rawCopyBtn.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 12));
+ rawCopyBtn.setPreferredSize(new Dimension(50, 24));
+ rawCopyBtn.setMargin(new Insets(0,0,0,0));
+ rawHeaderPanel.add(rawCopyBtn);
+
+ contentPanel.add(rawHeaderPanel);
+ contentPanel.add(Box.createVerticalStrut(5));
+
+ JTextArea rawTextArea = new JTextArea(rawCoords);
+ rawTextArea.setLineWrap(true);
+ rawTextArea.setWrapStyleWord(true);
+ rawTextArea.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 13));
+ rawTextArea.setEditable(false); // 鍘熷鍧愭爣閫氬父涓嶅彲缂栬緫
+ rawTextArea.setRows(4);
+ rawTextArea.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
+
+ JScrollPane rawScroll = new JScrollPane(rawTextArea);
+ rawScroll.setAlignmentX(Component.LEFT_ALIGNMENT);
+ // 璁剧疆鏈�澶у搴﹀厑璁告墿灞曪紝棣栭�夊搴﹂�備腑
+ rawScroll.setPreferredSize(new Dimension(300, 100));
+ rawScroll.setMaximumSize(new Dimension(Integer.MAX_VALUE, 100));
+ contentPanel.add(rawScroll);
+
+ contentPanel.add(Box.createVerticalStrut(15));
+
+ // 2. 浼樺寲鍚庡線杩旇矾寰勫潗鏍囧尯鍩�
+ String optCoords = prepareCoordinateForEditor(initialValue);
+ int optCount = 0;
+ if (optCoords != null && !optCoords.isEmpty() && !"-1".equals(optCoords)) {
+ optCount = optCoords.split(";").length;
+ }
+
+ JPanel optHeaderPanel = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
+ optHeaderPanel.setAlignmentX(Component.LEFT_ALIGNMENT);
+ optHeaderPanel.setMaximumSize(new Dimension(Integer.MAX_VALUE, 30));
+
+ JLabel optTitleLabel = new JLabel("浼樺寲鍚庡線杩旇矾寰勫潗鏍� (" + optCount + "鐐�) ");
+ optTitleLabel.setFont(new Font("寰蒋闆呴粦", Font.BOLD, 14));
+ optHeaderPanel.add(optTitleLabel);
+
+ // 浼樺寲鍧愭爣澶嶅埗鎸夐挳 - 鍔ㄦ�佽幏鍙栨枃鏈煙鍐呭
+ JButton optCopyBtn = Fuzhibutton.createCopyButton(
+ () -> {
+ String text = textArea.getText();
+ if (text == null || text.trim().isEmpty() || "-1".equals(text.trim())) return null;
+ return text;
+ },
+ "澶嶅埗",
+ new Color(230, 250, 240)
+ );
+ optCopyBtn.setFont(new Font("寰蒋闆呴粦", Font.PLAIN, 12));
+ optCopyBtn.setPreferredSize(new Dimension(50, 24));
+ optCopyBtn.setMargin(new Insets(0,0,0,0));
+ optHeaderPanel.add(optCopyBtn);
+
+ contentPanel.add(optHeaderPanel);
+ contentPanel.add(Box.createVerticalStrut(5));
+
+ // 浣跨敤浼犲叆鐨� textArea (宸插垵濮嬪寲涓� initialValue)
+ textArea.setRows(4);
+ scrollPane.setAlignmentX(Component.LEFT_ALIGNMENT);
+ scrollPane.setPreferredSize(new Dimension(300, 100));
+ scrollPane.setMaximumSize(new Dimension(Integer.MAX_VALUE, 100));
+ contentPanel.add(scrollPane);
+
+ } else {
+ contentPanel.setLayout(new BorderLayout());
+ contentPanel.add(scrollPane, BorderLayout.CENTER);
+ }
JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.RIGHT));
- // 鍒ゆ柇鏄惁鏄線杩旂偣璺緞瀵硅瘽妗�
- boolean isReturnPathDialog = title != null && title.contains("寰�杩旂偣璺緞");
JButton okButton;
JButton cancelButton;
- JButton copyButton;
+ JButton copyButton = null; // 鍒濆鍖栦负null
if (isReturnPathDialog) {
// 寰�杩旂偣璺緞瀵硅瘽妗嗭細浣跨敤 buttonset 椋庢牸鐨勭‘瀹氭寜閽紝鍥炬爣鎸夐挳
@@ -811,22 +925,8 @@
public void mouseExited(MouseEvent e) { cancelButton.setOpaque(false); }
});
- // 浣跨敤 Fuzhibutton 鍒涘缓澶嶅埗鎸夐挳
- copyButton = Fuzhibutton.createCopyButton(
- (java.util.function.Supplier<String>) () -> {
- String text = textArea.getText();
- if (text == null) {
- text = "";
- }
- String trimmed = text.trim();
- if (trimmed.isEmpty() || "-1".equals(trimmed)) {
- return null; // 杩斿洖null浼氳Е鍙�"鏈缃澶嶅埗鐨勫唴瀹�"鎻愮ず
- }
- return text;
- },
- "澶嶅埗" + title,
- new Color(230, 250, 240)
- );
+ // 浣跨敤 Fuzhibutton 鍒涘缓澶嶅埗鎸夐挳 (杩欓噷涓嶅啀闇�瑕佸簳閮ㄧ殑澶嶅埗鎸夐挳锛屽洜涓轰笂闈㈠凡缁忔湁浜�)
+ // copyButton = ...
} else {
// 鍏朵粬瀵硅瘽妗嗕繚鎸佸師鏈夋牱寮�
@@ -860,18 +960,41 @@
final String[] resultHolder = new String[1];
okButton.addActionListener(e -> {
- resultHolder[0] = textArea.getText();
- confirmed[0] = true;
- dialog.dispose();
+ if (isReturnPathDialog) {
+ // 寰�杩旂偣璺緞瀵硅瘽妗嗭細鏍囪涓烘墦寮�缁樺埗椤甸潰
+ // 濡傛灉鏂囨湰鍩熶腑宸茬粡鏈夊潗鏍囷紝琛ㄧず瑕侀噸鏂扮粯鍒�
+ String currentText = textArea.getText();
+ if (currentText != null && !currentText.trim().isEmpty() && !"-1".equals(currentText.trim())) {
+ // 鏈夊潗鏍囷紝琛ㄧず閲嶆柊缁樺埗
+ resultHolder[0] = "__OPEN_DRAW_PAGE_REFRESH__";
+ } else {
+ // 娌℃湁鍧愭爣锛屾甯哥粯鍒�
+ resultHolder[0] = "__OPEN_DRAW_PAGE__";
+ }
+ confirmed[0] = true;
+ dialog.dispose();
+ } else {
+ resultHolder[0] = textArea.getText();
+ confirmed[0] = true;
+ dialog.dispose();
+ }
});
cancelButton.addActionListener(e -> dialog.dispose());
buttonPanel.add(okButton);
buttonPanel.add(cancelButton);
- buttonPanel.add(copyButton);
+ if (copyButton != null) {
+ buttonPanel.add(copyButton);
+ }
- contentPanel.add(buttonPanel, BorderLayout.SOUTH);
+ contentPanel.add(buttonPanel, isReturnPathDialog ? null : BorderLayout.SOUTH);
+ if (isReturnPathDialog) {
+ // 瀵逛簬 BoxLayout锛岀洿鎺ユ坊鍔犲埌搴曢儴
+ JPanel bottomWrapper = new JPanel(new BorderLayout());
+ bottomWrapper.add(buttonPanel, BorderLayout.EAST);
+ contentPanel.add(bottomWrapper);
+ }
dialog.setContentPane(contentPanel);
dialog.getRootPane().setDefaultButton(okButton);
dialog.pack();
@@ -914,17 +1037,35 @@
if (dikuai == null) {
return;
}
- String edited = promptCoordinateEditing("鏌ョ湅 / 缂栬緫鍦板潡杈圭晫鍧愭爣", dikuai.getBoundaryCoordinates());
+ Window owner = SwingUtilities.getWindowAncestor(this);
+
+ // 鑾峰彇鍦板潡绠$悊瀵硅瘽妗嗭紝鍑嗗鍦ㄦ墦寮�杈圭晫缂栬緫椤甸潰鏃跺叧闂�
+ Window managementWindow = null;
+ if (owner instanceof JDialog) {
+ managementWindow = owner;
+ }
+
+ // 鎵撳紑杈圭晫缂栬緫椤甸潰
+ Dikuanbianjipage page = new Dikuanbianjipage(owner, "杈圭晫绠$悊椤甸潰", dikuai.getBoundaryCoordinates(), dikuai);
+ page.setVisible(true);
+
+ // 鍏抽棴鍦板潡绠$悊椤甸潰
+ if (managementWindow != null) {
+ managementWindow.dispose();
+ }
+
+ // 鑾峰彇缂栬緫缁撴灉骞朵繚瀛�
+ String edited = page.getResult();
if (edited == null) {
return;
}
String normalized = normalizeCoordinateInput(edited);
if (!saveFieldAndRefresh(dikuai, "boundaryCoordinates", normalized)) {
- JOptionPane.showMessageDialog(this, "鏃犳硶鏇存柊鍦板潡杈圭晫鍧愭爣", "閿欒", JOptionPane.ERROR_MESSAGE);
+ JOptionPane.showMessageDialog(null, "鏃犳硶鏇存柊鍦板潡杈圭晫鍧愭爣", "閿欒", JOptionPane.ERROR_MESSAGE);
return;
}
String message = "-1".equals(normalized) ? "鍦板潡杈圭晫鍧愭爣宸叉竻绌�" : "鍦板潡杈圭晫鍧愭爣宸叉洿鏂�";
- JOptionPane.showMessageDialog(this, message, "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
+ JOptionPane.showMessageDialog(null, message, "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
}
private void editPlannedPath(Dikuai dikuai) {
@@ -961,22 +1102,6 @@
JOptionPane.showMessageDialog(this, message, "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
}
- private void editBoundaryOriginalCoordinates(Dikuai dikuai) {
- if (dikuai == null) {
- return;
- }
- String edited = promptCoordinateEditing("鏌ョ湅 / 缂栬緫杈圭晫鍘熷鍧愭爣", dikuai.getBoundaryOriginalCoordinates());
- if (edited == null) {
- return;
- }
- String normalized = normalizeCoordinateInput(edited);
- if (!saveFieldAndRefresh(dikuai, "boundaryOriginalCoordinates", normalized)) {
- JOptionPane.showMessageDialog(this, "鏃犳硶鏇存柊杈圭晫鍘熷鍧愭爣", "閿欒", JOptionPane.ERROR_MESSAGE);
- return;
- }
- String message = "-1".equals(normalized) ? "杈圭晫鍘熷鍧愭爣宸叉竻绌�" : "杈圭晫鍘熷鍧愭爣宸叉洿鏂�";
- JOptionPane.showMessageDialog(this, message, "鎴愬姛", JOptionPane.INFORMATION_MESSAGE);
- }
private void editMowingPattern(Dikuai dikuai) {
if (dikuai == null) {
@@ -1149,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);
+ }
};
// 鏄剧ず璺緞瑙勫垝椤甸潰
@@ -1191,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);
}
@@ -1238,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);
+ }
};
// 浣跨敤鏂扮殑鐙珛椤甸潰绫�
@@ -1256,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);
@@ -1520,6 +1590,9 @@
return false;
}
+ // 鍚屾椂淇濆瓨鍒� dikuai.properties
+ saveFieldAndRefresh(dikuai, "obstacleCoordinates", obstaclePayload);
+
obstacleSummaryCache = loadObstacleSummaries();
boolean isCurrent = landNumber.equals(currentWorkLandNumber);
loadDikuaiData();
@@ -1914,10 +1987,41 @@
if (dikuai == null) {
return;
}
- String edited = promptCoordinateEditing("鏌ョ湅 / 缂栬緫寰�杩旂偣璺緞", dikuai.getReturnPathCoordinates());
+ String edited = promptCoordinateEditing("鏌ョ湅 / 缂栬緫寰�杩旂偣璺緞", dikuai.getReturnPathCoordinates(), dikuai);
if (edited == null) {
return;
}
+ // 妫�鏌ユ槸鍚︽槸鐗规畩鏍囪锛岃〃绀虹偣鍑讳簡"鍘荤粯鍒�"鎸夐挳
+ if ("__OPEN_DRAW_PAGE__".equals(edited) || "__OPEN_DRAW_PAGE_REFRESH__".equals(edited)) {
+ // 鑾峰彇鍦板潡绠$悊瀵硅瘽妗�
+ Window owner = SwingUtilities.getWindowAncestor(this);
+ Window managementWindow = null;
+ if (owner instanceof JDialog) {
+ managementWindow = owner;
+ }
+
+ // 鑾峰彇鍦板潡绠$悊瀵硅瘽妗嗙殑鐖剁獥鍙o紙涓荤獥鍙o級锛屼綔涓虹粯鍒堕〉闈㈢殑鐖剁獥鍙�
+ Window drawPageOwner = null;
+ if (managementWindow != null) {
+ drawPageOwner = managementWindow.getOwner();
+ }
+ if (drawPageOwner == null && owner != null) {
+ drawPageOwner = owner.getOwner();
+ }
+ if (drawPageOwner == null) {
+ drawPageOwner = owner;
+ }
+
+ // 鍏堝叧闂湴鍧楃鐞嗛〉闈�
+ if (managementWindow != null) {
+ managementWindow.dispose();
+ }
+
+ // 鐒跺悗鎵撳紑缁樺埗椤甸潰锛屽鏋滄槸閲嶆柊缁樺埗锛屼紶閫掓爣璁�
+ boolean isRefresh = "__OPEN_DRAW_PAGE_REFRESH__".equals(edited);
+ Huizhiwanfanpath.showDrawReturnPathDialog(drawPageOwner, dikuai, isRefresh);
+ return;
+ }
String normalized = normalizeCoordinateInput(edited);
if (!saveFieldAndRefresh(dikuai, "returnPathCoordinates", normalized)) {
JOptionPane.showMessageDialog(this, "鏃犳硶鏇存柊寰�杩旂偣璺緞", "閿欒", JOptionPane.ERROR_MESSAGE);
@@ -2322,4 +2426,6 @@
return new ArrayList<>(names);
}
}
+
+
}
\ No newline at end of file
--
Gitblit v1.10.0