826220679@qq.com
9 小时以前 69b40096cb0ae965f2a3e92672b880edfe7d04d2
src/zhuye/WangfanDraw.java
@@ -23,6 +23,7 @@
    // 绘制状态
    private boolean drawingActive = false;
    private boolean paused = false;
    private boolean isHandheldMode = false;  // 是否使用手持设备模式
    
    // 基准坐标
    private double[] baseLatLon;
@@ -63,9 +64,10 @@
    /**
     * 启动往返路径绘制
     * @param finishCallback 完成绘制时的回调
     * @param isHandheld 是否使用手持设备模式
     * @return 是否成功启动
     */
    public boolean start(Runnable finishCallback) {
    public boolean start(Runnable finishCallback, boolean isHandheld) {
        if (mapRenderer == null || helper == null) {
            return false;
        }
@@ -83,6 +85,12 @@
        paused = false;
        this.finishCallback = finishCallback;
        this.baseLatLon = baseLatLonCandidate;
        this.isHandheldMode = isHandheld;
        // 如果是手持设备模式,切换图标
        if (isHandheld && shouye != null) {
            shouye.setHandheldMowerIconActive(true);
        }
        // 清空路径点
        synchronized (returnPathPoints) {
@@ -101,6 +109,12 @@
        if (helper != null) {
            helper.enterDrawingControlMode();
        }
        // 设置状态提示为"正在绘制往返路径"
        if (shouye != null) {
            shouye.setStatusLabelText("正在绘制往返路径");
        }
        startMonitor();
        return true;
    }
@@ -194,13 +208,13 @@
        double lat = helper.parseDMToDecimal(latest.getLatitude(), latest.getLatDirection());
        double lon = helper.parseDMToDecimal(latest.getLongitude(), latest.getLonDirection());
        if (!Double.isFinite(lat) || !Double.isFinite(lon)) {
        if (!isFinite(lat) || !isFinite(lon)) {
            return;
        }
        double[] local = helper.convertLatLonToLocal(lat, lon, baseLatLon[0], baseLatLon[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)) {
            return;
        }
@@ -245,6 +259,12 @@
        if (helper != null) {
            helper.exitDrawingControlMode();
        }
        // 恢复割草机图标
        if (isHandheldMode && shouye != null) {
            shouye.setHandheldMowerIconActive(false);
        }
        isHandheldMode = false;
    }
    
    /**
@@ -407,5 +427,12 @@
        g2d.setStroke(new BasicStroke(dashWidth, BasicStroke.CAP_BUTT, BasicStroke.JOIN_ROUND, 10.0f, dashPattern, 0.0f));
        g2d.draw(path);
    }
    /**
     * 检查double值是否有限(不是NaN或无穷大)
     * 兼容低版本Java
     */
    private static boolean isFinite(double value) {
        return !Double.isNaN(value) && !Double.isInfinite(value);
    }
}