From cbfd1df513c473dd5550d78740c92fc1677b6e9b Mon Sep 17 00:00:00 2001
From: 826220679@qq.com <826220679@qq.com>
Date: 星期六, 27 十二月 2025 13:40:42 +0800
Subject: [PATCH] 异形有障碍物路径规划没完成

---
 src/zhuye/Shouye.java |   51 +++++++++++++++++++++++++++++++--------------------
 1 files changed, 31 insertions(+), 20 deletions(-)

diff --git a/src/zhuye/Shouye.java b/src/zhuye/Shouye.java
index dd3dfbf..cd33de7 100644
--- a/src/zhuye/Shouye.java
+++ b/src/zhuye/Shouye.java
@@ -31,7 +31,8 @@
 import java.util.Map;
 import java.util.Locale;
 import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.function.Consumer;
+// import java.util.function.Consumer;
+import chuankou.DataListener;
 import java.awt.geom.Point2D;
 
 import publicway.Gpstoxuzuobiao;
@@ -110,19 +111,25 @@
 	
 	private boolean pathPreviewActive;
 	
-	private final Consumer<String> serialLineListener = line -> {
-		SwingUtilities.invokeLater(() -> {
-			updateDataPacketCountLabel();
-			// 濡傛灉鏀跺埌GGA鏁版嵁锛岀珛鍗虫洿鏂版嫋灏�
-			if (line != null) {
-				String trimmed = line.trim();
-				if (trimmed.startsWith("$GNGGA") || trimmed.startsWith("$GPGGA") || trimmed.startsWith("$GBGGA")) {
-					if (mapRenderer != null && !pathPreviewActive) {
-						mapRenderer.forceUpdateIdleMowerTrail();
+	private final DataListener<String> serialLineListener = new DataListener<String>() {
+		@Override
+		public void accept(final String line) {
+			SwingUtilities.invokeLater(new Runnable() {
+				@Override
+				public void run() {
+					updateDataPacketCountLabel();
+					// 濡傛灉鏀跺埌GGA鏁版嵁锛岀珛鍗虫洿鏂版嫋灏�
+					if (line != null) {
+						String trimmed = line.trim();
+						if (trimmed.startsWith("$GNGGA") || trimmed.startsWith("$GPGGA") || trimmed.startsWith("$GBGGA")) {
+							if (mapRenderer != null && !pathPreviewActive) {
+								mapRenderer.forceUpdateIdleMowerTrail();
+							}
+						}
 					}
 				}
-			}
-		});
+			});
+		}
 	};
 	private static final int FLOAT_ICON_SIZE = 32;
 	private JButton endDrawingButton;
@@ -193,6 +200,10 @@
 		scheduleIdentifierCheck();
 	}
 
+    private static boolean isFinite(double d) {
+        return !Double.isNaN(d) && !Double.isInfinite(d);
+    }
+
 	public static Shouye getInstance() {
 		return instance;
 	}
@@ -2555,7 +2566,7 @@
 
 		double lat = parseDMToDecimal(latest.getLatitude(), latest.getLatDirection());
 		double lon = parseDMToDecimal(latest.getLongitude(), latest.getLonDirection());
-		if (!Double.isFinite(lat) || !Double.isFinite(lon)) {
+		if (!isFinite(lat) || !isFinite(lon)) {
 			discardLatestCoordinate(latest);
 			lastMowerCoordinate = latest;
 			return;
@@ -2563,7 +2574,7 @@
 
 		double[] local = convertLatLonToLocal(lat, lon, base[0], base[1]);
 		Point2D.Double candidate = new Point2D.Double(local[0], local[1]);
-		if (!Double.isFinite(candidate.x) || !Double.isFinite(candidate.y)) {
+		if (!isFinite(candidate.x) || !isFinite(candidate.y)) {
 			discardLatestCoordinate(latest);
 			lastMowerCoordinate = latest;
 			return;
@@ -2661,7 +2672,7 @@
 
 		double x = parseMetersValue(device.getRealtimeX());
 		double y = parseMetersValue(device.getRealtimeY());
-		if (!Double.isFinite(x) || !Double.isFinite(y)) {
+		if (!isFinite(x) || !isFinite(y)) {
 			JOptionPane.showMessageDialog(this, "褰撳墠瀹氫綅鏁版嵁鏃犳晥锛岃绋嶅悗鍐嶈瘯銆�", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
 			return -1;
 		}
@@ -2739,7 +2750,7 @@
 		}
 		double x = parseMetersValue(device.getRealtimeX());
 		double y = parseMetersValue(device.getRealtimeY());
-		if (!Double.isFinite(x) || !Double.isFinite(y)) {
+		if (!isFinite(x) || !isFinite(y)) {
 			return false;
 		}
 		return isDuplicateHandheldPoint(x, y);
@@ -2752,7 +2763,7 @@
 		}
 		double x = parseMetersValue(device.getRealtimeX());
 		double y = parseMetersValue(device.getRealtimeY());
-		return Double.isFinite(x) && Double.isFinite(y);
+		return isFinite(x) && isFinite(y);
 	}
 
 	private boolean isDuplicateHandheldPoint(double x, double y) {
@@ -3560,7 +3571,7 @@
 
 		double lat = parseDMToDecimal(latest.getLatitude(), latest.getLatDirection());
 		double lon = parseDMToDecimal(latest.getLongitude(), latest.getLonDirection());
-		if (!Double.isFinite(lat) || !Double.isFinite(lon)) {
+		if (!isFinite(lat) || !isFinite(lon)) {
 			JOptionPane.showMessageDialog(this, "閲囬泦鐐瑰潗鏍囨棤鏁堬紝璇烽噸鏂伴噰闆嗐��", "鎻愮ず", JOptionPane.WARNING_MESSAGE);
 			return false;
 		}
@@ -3717,7 +3728,7 @@
 		}
 		double baseLat = parseDMToDecimal(parts[0], parts[1]);
 		double baseLon = parseDMToDecimal(parts[2], parts[3]);
-		if (!Double.isFinite(baseLat) || !Double.isFinite(baseLon)) {
+		if (!isFinite(baseLat) || !isFinite(baseLon)) {
 			return null;
 		}
 		return new double[]{baseLat, baseLon};
@@ -3783,7 +3794,7 @@
 		double centerX = (x1Sq * (y2 - y3) + x2Sq * (y3 - y1) + x3Sq * (y1 - y2)) / d;
 		double centerY = (x1Sq * (x3 - x2) + x2Sq * (x1 - x3) + x3Sq * (x2 - x1)) / d;
 		double radius = Math.hypot(centerX - x1, centerY - y1);
-		if (!Double.isFinite(centerX) || !Double.isFinite(centerY) || !Double.isFinite(radius)) {
+		if (!isFinite(centerX) || !isFinite(centerY) || !isFinite(radius)) {
 			return null;
 		}
 		if (radius < 0.05) {

--
Gitblit v1.10.0