| | |
| | | obstacleList = new ArrayList<>(); |
| | | } |
| | | |
| | | // 判断是否有障碍物:只要原始输入有障碍物内容,就使用ObstaclePathPlanner |
| | | // 即使解析后列表为空,也尝试使用ObstaclePathPlanner(它会处理空障碍物列表的情况) |
| | | boolean hasObstacles = hasObstacleInput && !obstacleList.isEmpty(); |
| | | |
| | | // 如果原始输入有障碍物但解析失败,给出提示 |
| | | if (hasObstacleInput && obstacleList.isEmpty()) { |
| | | if (showMessages) { |
| | | JOptionPane.showMessageDialog(parentComponent, |
| | | "障碍物坐标格式可能不正确,将尝试生成路径。如果路径不正确,请检查障碍物坐标格式。", |
| | | "提示", JOptionPane.WARNING_MESSAGE); |
| | | } |
| | | // 仍然尝试使用ObstaclePathPlanner,即使障碍物列表为空 |
| | | // 这样至少可以确保使用正确的路径规划器 |
| | | } |
| | | // 判断是否有有效的障碍物:只有当解析成功且列表不为空时,才认为有障碍物 |
| | | boolean hasValidObstacles = !obstacleList.isEmpty(); |
| | | |
| | | String generated; |
| | | |
| | | if (!hasObstacles && !hasObstacleInput) { |
| | | // 完全没有障碍物输入时,使用Lunjingguihua类的方法生成路径 |
| | | if (!hasValidObstacles) { |
| | | // 障碍物坐标不存在或为空时,使用Lunjingguihua类的方法生成路径 |
| | | generated = Lunjingguihua.generatePathFromStrings( |
| | | boundary, |
| | | obstacles != null ? obstacles : "", |
| | | plannerWidth, |
| | | null, // safetyDistStr,使用默认值 |
| | | mode |
| | | ); |
| | | } else { |
| | | // 有障碍物输入时(即使解析失败),使用ObstaclePathPlanner处理路径生成 |
| | | // 有有效障碍物时,使用ObstaclePathPlanner处理路径生成 |
| | | List<Coordinate> polygon = Lunjingguihua.parseCoordinates(boundary); |
| | | if (polygon.size() < 4) { |
| | | if (showMessages) { |
| | |
| | | return null; |
| | | } |
| | | |
| | | // 根据是否有障碍物设置不同的安全距离 |
| | | double safetyDistance; |
| | | if (!obstacleList.isEmpty()) { |
| | | // 有障碍物时使用割草宽度的一半 + 0.05米额外安全距离 |
| | | safetyDistance = widthMeters / 2.0 + 0.05; |
| | | } else { |
| | | // 障碍物解析失败但输入存在,使用较小的安全距离 |
| | | safetyDistance = 0.01; |
| | | } |
| | | // 有障碍物时使用割草宽度的一半 + 0.05米额外安全距离 |
| | | double safetyDistance = widthMeters / 2.0 + 0.05; |
| | | |
| | | ObstaclePathPlanner pathPlanner = new ObstaclePathPlanner( |
| | | polygon, widthMeters, mode, obstacleList, safetyDistance); |