From 87d7cf316e983b0398b270de03a8092412af8487 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 19 十二月 2025 16:56:30 +0800
Subject: [PATCH] 新增了收到绘制边界模式
---
src/zhuye/MapRenderer.java | 62 +++++++++++++++++++++++++++++++
1 files changed, 62 insertions(+), 0 deletions(-)
diff --git a/src/zhuye/MapRenderer.java b/src/zhuye/MapRenderer.java
index 31b93b8..790f3b9 100644
--- a/src/zhuye/MapRenderer.java
+++ b/src/zhuye/MapRenderer.java
@@ -31,6 +31,7 @@
import zhangaiwu.Obstacledge;
import zhangaiwu.yulanzhangaiwu;
import yaokong.Control03;
+import bianjie.shudongdraw;
/**
* 鍦板浘娓叉煋鍣� - 璐熻矗鍧愭爣绯荤粯鍒躲�佽鍥惧彉鎹㈢瓑鍔熻兘
@@ -102,6 +103,7 @@
private boolean measurementModeActive = false; // 娴嬮噺妯″紡鏄惁婵�娲�
private boolean handheldBoundaryPreviewActive;
private boolean pendingTrackBreak = true;
+ private bianjie.shudongdraw manualBoundaryDrawer = new bianjie.shudongdraw(); // 鎵嬪姩缁樺埗杈圭晫缁樺埗鍣�
private boolean idleTrailSuppressed;
private Path2D.Double realtimeBoundaryPathCache;
private String realtimeBoundaryPathLand;
@@ -207,6 +209,14 @@
lastDragPoint = null;
dragInProgress = false;
}
+
+ public void mouseExited(MouseEvent e) {
+ // 榧犳爣绂诲紑闈㈡澘鏃讹紝娓呴櫎榧犳爣浣嶇疆鏄剧ず
+ if (manualBoundaryDrawer.isManualBoundaryDrawingMode()) {
+ manualBoundaryDrawer.clearMousePosition();
+ visualizationPanel.repaint();
+ }
+ }
public void mouseClicked(MouseEvent e) {
if (dragInProgress) {
@@ -216,6 +226,14 @@
if (!SwingUtilities.isLeftMouseButton(e) || e.getClickCount() != 1) {
return;
}
+ // 浼樺厛澶勭悊鎵嬪姩缁樺埗杈圭晫妯″紡鐐瑰嚮
+ if (manualBoundaryDrawer.isManualBoundaryDrawingMode()) {
+ Point2D.Double worldPoint = screenToWorld(e.getPoint());
+ if (manualBoundaryDrawer.handleClick(worldPoint)) {
+ visualizationPanel.repaint();
+ return;
+ }
+ }
// 浼樺厛澶勭悊娴嬮噺妯″紡鐐瑰嚮
if (measurementModeActive && handleMeasurementClick(e.getPoint())) {
return;
@@ -248,6 +266,17 @@
visualizationPanel.repaint();
}
}
+
+ public void mouseMoved(MouseEvent e) {
+ // 鍦ㄦ墜鍔ㄧ粯鍒惰竟鐣屾ā寮忔椂锛屾洿鏂伴紶鏍囦綅缃�
+ if (manualBoundaryDrawer.isManualBoundaryDrawingMode()) {
+ Point2D.Double worldPoint = screenToWorld(e.getPoint());
+ manualBoundaryDrawer.updateMousePosition(worldPoint);
+ visualizationPanel.repaint();
+ } else {
+ manualBoundaryDrawer.clearMousePosition();
+ }
+ }
});
}
@@ -378,6 +407,12 @@
adddikuaiyulan.drawPreview(g2d, handheldBoundaryPreview, scale, handheldBoundaryPreviewActive, boundaryPreviewMarkerScale);
+ // 缁樺埗鎵嬪姩缁樺埗鐨勮竟鐣�
+ manualBoundaryDrawer.drawBoundary(g2d, scale);
+
+ // 缁樺埗榧犳爣瀹炴椂浣嶇疆锛堟墜鍔ㄧ粯鍒惰竟鐣屾ā寮忔椂锛�
+ manualBoundaryDrawer.drawMousePosition(g2d, scale);
+
// 缁樺埗瀵艰埅璺緞锛堜腑灞傦級
if (hasPlannedPath) {
drawCurrentPlannedPath(g2d);
@@ -1223,6 +1258,33 @@
}
/**
+ * 璁剧疆鎵嬪姩缁樺埗杈圭晫妯″紡
+ */
+ public void setManualBoundaryDrawingMode(boolean active) {
+ manualBoundaryDrawer.setManualBoundaryDrawingMode(active);
+ if (visualizationPanel != null) {
+ visualizationPanel.repaint();
+ }
+ }
+
+ /**
+ * 鑾峰彇鎵嬪姩缁樺埗鐨勮竟鐣岀偣鍒楄〃
+ */
+ public List<Point2D.Double> getManualBoundaryPoints() {
+ return manualBoundaryDrawer.getManualBoundaryPoints();
+ }
+
+ /**
+ * 娓呯┖鎵嬪姩缁樺埗鐨勮竟鐣岀偣
+ */
+ public void clearManualBoundaryPoints() {
+ manualBoundaryDrawer.clearManualBoundaryPoints();
+ if (visualizationPanel != null) {
+ visualizationPanel.repaint();
+ }
+ }
+
+ /**
* 璁剧疆娴嬮噺妯″紡
*/
public void setMeasurementMode(boolean active) {
--
Gitblit v1.10.0