package zhuye; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Shape; import java.awt.Stroke; import java.awt.geom.Ellipse2D; import java.awt.geom.Path2D; import java.awt.geom.Point2D; import java.util.List; /** * Utility renderer for handheld boundary previews. */ public final class adddikuaiyulan { private static final Color HANDHELD_BOUNDARY_FILL = new Color(51, 153, 255, 60); private static final Color HANDHELD_BOUNDARY_BORDER = new Color(0, 100, 0, 220); private static final Color HANDHELD_BOUNDARY_POINT = new Color(0, 100, 0); private adddikuaiyulan() { } public static void drawPreview(Graphics2D g2d, List previewPoints, double scale, boolean previewActive) { if (g2d == null || !previewActive || previewPoints == null || previewPoints.isEmpty()) { return; } Path2D.Double path = new Path2D.Double(); boolean started = false; 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 (!started) { return; } Stroke originalStroke = g2d.getStroke(); Color originalColor = g2d.getColor(); if (previewPoints.size() >= 3) { path.closePath(); g2d.setColor(HANDHELD_BOUNDARY_FILL); g2d.fill(path); } float outlineWidth =0.1f; g2d.setStroke(new BasicStroke(outlineWidth, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); g2d.setColor(HANDHELD_BOUNDARY_BORDER); g2d.draw(path); double markerSize = 0.2d; double markerRadius = markerSize / 2.0d; for (Point2D.Double point : previewPoints) { if (point == null || !Double.isFinite(point.x) || !Double.isFinite(point.y)) { continue; } Shape marker = new Ellipse2D.Double(point.x - markerRadius, point.y - markerRadius, markerSize, markerSize); g2d.setColor(HANDHELD_BOUNDARY_POINT); g2d.fill(marker); } g2d.setStroke(originalStroke); g2d.setColor(originalColor); } }