826220679@qq.com
5 小时以前 7881cef5c3dcea8e6037101db2c3eeb2fd3ba5da
src/lujing/MowingPathGenerationPage.java
@@ -736,18 +736,20 @@
            return "";
        }
        StringBuilder sb = new StringBuilder();
        AoxinglujingNoObstacle.Point last = null;
        for (AoxinglujingNoObstacle.PathSegment segment : segments) {
            // 只添加割草工作段,跳过过渡段
            if (segment.isMowing) {
                // 如果起点与上一个终点不同,添加起点
                if (last == null || !equals2D(last, segment.start)) {
                    appendPoint(sb, segment.start);
                }
                // 添加终点
                appendPoint(sb, segment.end);
                last = segment.end;
        AoxinglujingNoObstacle.Point lastEnd = null;
        boolean firstWritten = false;
        for (AoxinglujingNoObstacle.PathSegment s : segments) {
            if (!firstWritten) {
                appendPoint(sb, s.start);
                firstWritten = true;
                lastEnd = s.start;
            } else if (lastEnd == null || !equals2D(lastEnd, s.start)) {
                // 非连续段,开始新的子路径
                appendPoint(sb, s.start);
                lastEnd = s.start;
            }
            appendPointWithType(sb, s.end, s.isMowing);
            lastEnd = s.end;
        }
        return sb.toString();
    }
@@ -760,18 +762,20 @@
            return "";
        }
        StringBuilder sb = new StringBuilder();
        YixinglujingNoObstacle.Point last = null;
        for (YixinglujingNoObstacle.PathSegment segment : segments) {
            // 只添加割草工作段,跳过过渡段
            if (segment.isMowing) {
                // 如果起点与上一个终点不同,添加起点
                if (last == null || !equalsYixingPoint(last, segment.start)) {
                    appendYixingPoint(sb, segment.start);
                }
                // 添加终点
                appendYixingPoint(sb, segment.end);
                last = segment.end;
        YixinglujingNoObstacle.Point lastEnd = null;
        boolean firstWritten = false;
        for (YixinglujingNoObstacle.PathSegment s : segments) {
            if (!firstWritten) {
                appendYixingPoint(sb, s.start);
                firstWritten = true;
                lastEnd = s.start;
            } else if (lastEnd == null || !equalsYixingPoint(lastEnd, s.start)) {
                // 非连续段,开始新的子路径
                appendYixingPoint(sb, s.start);
                lastEnd = s.start;
            }
            appendYixingPointWithType(sb, s.end, s.isMowing);
            lastEnd = s.end;
        }
        return sb.toString();
    }
@@ -808,15 +812,19 @@
            return "";
        }
        StringBuilder sb = new StringBuilder();
        YixinglujingHaveObstacel.Point last = null;
        for (YixinglujingHaveObstacel.PathSegment segment : segments) {
            // 如果是第一段,或者当前段起点与上一段终点不连续,则添加起点
            if (last == null || !equalsYixingHaveObstaclePoint(last, segment.start)) {
                appendYixingHaveObstaclePoint(sb, segment.start);
        YixinglujingHaveObstacel.Point lastEnd = null;
        boolean firstWritten = false;
        for (YixinglujingHaveObstacel.PathSegment s : segments) {
            if (!firstWritten) {
                appendYixingHaveObstaclePoint(sb, s.start);
                firstWritten = true;
                lastEnd = s.start;
            } else if (lastEnd == null || !equalsYixingHaveObstaclePoint(lastEnd, s.start)) {
                appendYixingHaveObstaclePoint(sb, s.start);
                lastEnd = s.start;
            }
            // 添加终点
            appendYixingHaveObstaclePoint(sb, segment.end);
            last = segment.end;
            appendYixingHaveObstaclePointWithType(sb, s.end, s.isMowing);
            lastEnd = s.end;
        }
        return sb.toString();
    }
@@ -834,6 +842,13 @@
        sb.append(String.format(Locale.US, "%.2f,%.2f", point.x, point.y));
    }
    private void appendYixingHaveObstaclePointWithType(StringBuilder sb, YixinglujingHaveObstacel.Point point, boolean isMowing) {
        if (sb.length() > 0) {
            sb.append(";");
        }
        sb.append(String.format(Locale.US, "%.2f,%.2f,%s", point.x, point.y, isMowing ? "M" : "T"));
    }
    /**
     * 比较两个点是否相同(使用小的容差)
     */
@@ -854,6 +869,13 @@
        }
        sb.append(String.format(Locale.US, "%.2f,%.2f", point.x, point.y));
    }
    private void appendPointWithType(StringBuilder sb, AoxinglujingNoObstacle.Point point, boolean isMowing) {
        if (sb.length() > 0) {
            sb.append(";");
        }
        sb.append(String.format(Locale.US, "%.2f,%.2f,%s", point.x, point.y, isMowing ? "M" : "T"));
    }
    
    /**
     * 比较两个 YixinglujingNoObstacle.Point 是否相同(使用小的容差)
@@ -876,6 +898,13 @@
        sb.append(String.format(Locale.US, "%.2f,%.2f", point.x, point.y));
    }
    private void appendYixingPointWithType(StringBuilder sb, YixinglujingNoObstacle.Point point, boolean isMowing) {
        if (sb.length() > 0) {
            sb.append(";");
        }
        sb.append(String.format(Locale.US, "%.2f,%.2f,%s", point.x, point.y, isMowing ? "M" : "T"));
    }
    /**
     * 比较两个 AoxinglujingHaveObstacel.Point 是否相同(使用小的容差)
     */