From dc9dce0555beb85d1262893fd5d56747d6a83855 Mon Sep 17 00:00:00 2001
From: 张世豪 <979909237@qq.com>
Date: 星期五, 19 十二月 2025 11:48:37 +0800
Subject: [PATCH] 新增了导航预览功能
---
src/zhuye/adddikuaiyulan.java | 78 ++++++++++++++++++++++++++++++--------
1 files changed, 61 insertions(+), 17 deletions(-)
diff --git a/src/zhuye/adddikuaiyulan.java b/src/zhuye/adddikuaiyulan.java
index 3307106..4b382d2 100644
--- a/src/zhuye/adddikuaiyulan.java
+++ b/src/zhuye/adddikuaiyulan.java
@@ -38,37 +38,81 @@
return;
}
- Path2D.Double path = new Path2D.Double();
- boolean started = false;
+ // 杩囨护鏈夋晥鐐�
+ List<Point2D.Double> validPoints = new java.util.ArrayList<>();
for (Point2D.Double point : previewPoints) {
- if (point == null || !Double.isFinite(point.x) || !Double.isFinite(point.y)) {
- continue;
- }
- if (!started) {
- path.moveTo(point.x, point.y);
- started = true;
- } else {
- path.lineTo(point.x, point.y);
+ if (point != null && Double.isFinite(point.x) && Double.isFinite(point.y)) {
+ validPoints.add(point);
}
}
- if (!started) {
+ if (validPoints.isEmpty()) {
return;
}
Stroke originalStroke = g2d.getStroke();
Color originalColor = g2d.getColor();
- if (previewPoints.size() >= 3) {
- path.closePath();
+ // 鍒涘缓濉厖璺緞锛堝鏋滅偣鏁�>=3锛岄渶瑕侀棴鍚堜互濉厖锛�
+ Path2D.Double fillPath = new Path2D.Double();
+ if (validPoints.size() >= 3) {
+ fillPath.moveTo(validPoints.get(0).x, validPoints.get(0).y);
+ for (int i = 1; i < validPoints.size(); i++) {
+ fillPath.lineTo(validPoints.get(i).x, validPoints.get(i).y);
+ }
+ fillPath.closePath();
g2d.setColor(HANDHELD_BOUNDARY_FILL);
- g2d.fill(path);
+ g2d.fill(fillPath);
}
float outlineWidth = 0.1f;
- g2d.setStroke(new BasicStroke(outlineWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
- g2d.setColor(HANDHELD_BOUNDARY_BORDER);
- g2d.draw(path);
+
+ if (validPoints.size() >= 3) {
+ // 鐐规暟>=3鏃讹紝闇�瑕佸垎鍒粯鍒跺疄绾垮拰铏氱嚎
+ // 缁樺埗瀹炵嚎閮ㄥ垎锛氫粠璧风偣渚濇杩炴帴鍒板悇涓偣锛堜笉闂悎锛屼笉鍖呮嫭璧风偣鍒扮粓鐐圭殑鐩存帴杩炵嚎锛�
+ Path2D.Double solidPath = new Path2D.Double();
+ solidPath.moveTo(validPoints.get(0).x, validPoints.get(0).y);
+ // 浠庣浜屼釜鐐瑰紑濮嬶紝渚濇杩炴帴鍒版渶鍚庝竴涓偣锛堝舰鎴愪笉闂悎鐨勮矾寰勶級
+ for (int i = 1; i < validPoints.size(); i++) {
+ solidPath.lineTo(validPoints.get(i).x, validPoints.get(i).y);
+ }
+ g2d.setStroke(new BasicStroke(outlineWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+ g2d.setColor(HANDHELD_BOUNDARY_BORDER);
+ g2d.draw(solidPath);
+
+ // 鐢ㄨ櫄绾跨粯鍒惰捣鐐瑰埌缁堢偣鐨勮繛绾匡紙闂悎绾挎锛�
+ Point2D.Double startPoint = validPoints.get(0);
+ Point2D.Double endPoint = validPoints.get(validPoints.size() - 1);
+
+ // 鍒涘缓铏氱嚎鏍峰紡锛堟牴鎹缉鏀捐皟鏁磋櫄绾挎ā寮忥級
+ double effectiveScale = Math.max(0.01d, scale);
+ float dashLength = (float) (0.05 / effectiveScale); // 铏氱嚎闀垮害闅忕缉鏀捐皟鏁�
+ float[] dashPattern = new float[]{dashLength, dashLength}; // 铏氱嚎妯″紡锛氬疄绾裤�佺┖鐧�
+ BasicStroke dashedStroke = new BasicStroke(
+ outlineWidth,
+ BasicStroke.CAP_ROUND,
+ BasicStroke.JOIN_ROUND,
+ 1.0f,
+ dashPattern,
+ 0.0f
+ );
+
+ g2d.setStroke(dashedStroke);
+ g2d.setColor(HANDHELD_BOUNDARY_BORDER);
+ // 浣跨敤Path2D缁樺埗璧风偣鍒扮粓鐐圭殑铏氱嚎锛屼互渚挎敮鎸佹诞鐐瑰潗鏍�
+ Path2D.Double dashedLine = new Path2D.Double();
+ dashedLine.moveTo(startPoint.x, startPoint.y);
+ dashedLine.lineTo(endPoint.x, endPoint.y);
+ g2d.draw(dashedLine);
+ } else if (validPoints.size() == 2) {
+ // 濡傛灉鍙湁2涓偣锛岀洿鎺ョ粯鍒跺疄绾�
+ Path2D.Double simplePath = new Path2D.Double();
+ simplePath.moveTo(validPoints.get(0).x, validPoints.get(0).y);
+ simplePath.lineTo(validPoints.get(1).x, validPoints.get(1).y);
+ g2d.setStroke(new BasicStroke(outlineWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND));
+ g2d.setColor(HANDHELD_BOUNDARY_BORDER);
+ g2d.draw(simplePath);
+ }
if (cachedMarkerPixelDiameter <= 0.0d) {
double previousPixelDiameter = Math.abs(BASE_WORLD_MARKER_SIZE * scale);
--
Gitblit v1.10.0