| | |
| | | private JButton prevButton; |
| | | private JButton nextButton; |
| | | private JButton createButton; |
| | | private JButton previewButton; |
| | | private JButton previewButton; // æ¥éª¤3çé¢è§æé®ï¼é¢è§å²èè·¯å¾ï¼ |
| | | private JButton boundaryPreviewButton; // æ¥éª¤2çé¢è§æé®ï¼é¢è§è¾¹çï¼ |
| | | private Component previewButtonSpacer; |
| | | private JLabel boundaryCountLabel; |
| | | private JTextArea boundaryXYTextArea; // æ¾ç¤ºè¾¹çXYåæ çææ¬å |
| | |
| | | )); |
| | | areaNameField.setAlignmentX(Component.LEFT_ALIGNMENT); |
| | | |
| | | // æ·»å è¾å
¥æ¡ç¦ç¹ææ |
| | | // æ·»å è¾å
¥æ¡ç¦ç¹ææåææ¬ååçå¬ |
| | | areaNameField.addFocusListener(new FocusAdapter() { |
| | | @Override |
| | | public void focusGained(FocusEvent e) { |
| | |
| | | BorderFactory.createLineBorder(BORDER_COLOR, 2), |
| | | BorderFactory.createEmptyBorder(12, 15, 12, 15) |
| | | )); |
| | | // æ´æ°ä¸ä¸æ¥æé®ç¶æ |
| | | updateStep1ButtonState(); |
| | | } |
| | | }); |
| | | |
| | | // æ·»å ææ¬ååçå¬ï¼å®æ¶æ´æ°æé®ç¶æ |
| | | areaNameField.addKeyListener(new KeyAdapter() { |
| | | @Override |
| | | public void keyReleased(KeyEvent e) { |
| | | updateStep1ButtonState(); |
| | | } |
| | | }); |
| | | |
| | |
| | | startEndDrawingBtn.setAlignmentX(Component.LEFT_ALIGNMENT); |
| | | startEndDrawingBtn.setMaximumSize(new Dimension(400, 55)); |
| | | startEndDrawingBtn.setEnabled(false); // åå§ä¸å¯ç¨ |
| | | startEndDrawingBtn.setBackground(MEDIUM_GRAY); // åå§ç°è²èæ¯ |
| | | |
| | | startEndDrawingBtn.addActionListener(e -> toggleDrawing()); |
| | | |
| | |
| | | return; |
| | | } |
| | | if (selectDrawingOption(optionPanel, type, true)) { |
| | | startEndDrawingBtn.setEnabled(true); // éæ©åå¯ç¨æé® |
| | | updateStartDrawingButtonState(); // éæ©åæ´æ°æé®ç¶æ |
| | | } |
| | | } |
| | | |
| | |
| | | JOptionPane.showMessageDialog(this, "è¾¹çç»å¶å·²å®æ", "æç¤º", JOptionPane.INFORMATION_MESSAGE); |
| | | showBoundaryPointSummary(); |
| | | updateBoundaryXYDisplay(); |
| | | // æ´æ°é¢è§åä¸ä¸æ¥æé®ç¶æï¼èæ¯é¢è²å绿è²ï¼å¯ç¹å»ï¼ |
| | | updateStep2ButtonsAfterDrawing(); |
| | | } |
| | | } |
| | | |
| | |
| | | JOptionPane.showMessageDialog(this, "æ æ³å¯å¨é¢è§ï¼è¯·ç¨ååè¯", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // 卿¥éª¤3é¢è§æ¶ï¼ä¸æ¾ç¤ºè¾¹çç¹åå |
| | | if (shouye.getMapRenderer() != null) { |
| | | shouye.getMapRenderer().setBoundaryPointsVisible(false); |
| | | } |
| | | |
| | | closePreviewAndDispose(); |
| | | } |
| | |
| | | @Override |
| | | public void mouseEntered(MouseEvent e) { |
| | | if (button.isEnabled()) { |
| | | button.setBackground(PRIMARY_DARK); |
| | | // 妿æé®å¯ç¨ï¼é¼ æ æ¬åæ¶æ¾ç¤ºæ·±ç»¿è² |
| | | if (button.getBackground().equals(PRIMARY_COLOR)) { |
| | | button.setBackground(PRIMARY_DARK); |
| | | } |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void mouseExited(MouseEvent e) { |
| | | if (button.isEnabled()) { |
| | | button.setBackground(PRIMARY_COLOR); |
| | | // 妿æé®å¯ç¨ï¼é¼ æ ç¦»å¼æ¶æ¢å¤ç»¿è² |
| | | if (!button.getBackground().equals(MEDIUM_GRAY)) { |
| | | button.setBackground(PRIMARY_COLOR); |
| | | } |
| | | } else { |
| | | // 妿æé®ä¸å¯ç¨ï¼ä¿æç°è² |
| | | button.setBackground(MEDIUM_GRAY); |
| | | } |
| | | } |
| | | }); |
| | |
| | | )); |
| | | prevButton.setCursor(new Cursor(Cursor.HAND_CURSOR)); |
| | | |
| | | boundaryPreviewButton = createPrimaryButton("é¢è§", 16); |
| | | boundaryPreviewButton.setVisible(false); |
| | | boundaryPreviewButton.setEnabled(false); |
| | | boundaryPreviewButton.addActionListener(e -> previewBoundary()); |
| | | |
| | | nextButton = createPrimaryButton("ä¸ä¸æ¥", 16); |
| | | nextButton.setBackground(MEDIUM_GRAY); // åå§ç°è²èæ¯ |
| | | nextButton.setEnabled(false); // åå§ä¸å¯ç¨ |
| | | |
| | | createButton = createPrimaryButton("ä¿å", 16); |
| | | createButton.setVisible(false); |
| | | createButton.setEnabled(false); |
| | |
| | | |
| | | buttonPanel.add(prevButton); |
| | | buttonPanel.add(Box.createHorizontalGlue()); |
| | | buttonPanel.add(boundaryPreviewButton); |
| | | buttonPanel.add(Box.createHorizontalStrut(15)); |
| | | buttonPanel.add(nextButton); |
| | | buttonPanel.add(previewButtonSpacer); |
| | | buttonPanel.add(previewButton); |
| | |
| | | dikuai.setLandArea(snapshot.areaSqMeters); |
| | | dikuai.setBaseStationCoordinates(snapshot.baseStationCoordinates); |
| | | dikuai.setUpdateTime(getCurrentTime()); |
| | | // 计ç®å¹¶è®¾ç½®åå§è¾¹çXYåæ |
| | | String originalBoundaryXY = convertOriginalBoundaryToXY(snapshot.originalBoundary, snapshot.baseStationCoordinates); |
| | | if (originalBoundaryXY != null && !originalBoundaryXY.isEmpty()) { |
| | | dikuai.setBoundaryOriginalXY(originalBoundaryXY); |
| | | } |
| | | Dikuai.putDikuai(landNumber, dikuai); |
| | | } |
| | | |
| | |
| | | } |
| | | return dikuai; |
| | | } |
| | | |
| | | /** |
| | | * å°åå§è¾¹çåæ ï¼ç»çº¬åº¦æ ¼å¼ï¼è½¬æ¢ä¸ºXYåæ |
| | | * @param originalBoundary åå§è¾¹çåæ åç¬¦ä¸²ï¼æ ¼å¼ï¼"lat1,lon1,alt1;lat2,lon2,alt2;..." |
| | | * @param baseStationCoordinates åºåç«åæ ï¼æ ¼å¼ï¼"lat,N/S,lon,E/W" |
| | | * @return XYåæ åç¬¦ä¸²ï¼æ ¼å¼ï¼"X0,Y0;X1,Y1;X2,Y2;..." å¦æè½¬æ¢å¤±è´¥è¿ånull |
| | | */ |
| | | private static String convertOriginalBoundaryToXY(String originalBoundary, String baseStationCoordinates) { |
| | | if (originalBoundary == null || originalBoundary.trim().isEmpty() || "-1".equals(originalBoundary.trim())) { |
| | | return null; |
| | | } |
| | | if (baseStationCoordinates == null || baseStationCoordinates.trim().isEmpty()) { |
| | | return null; |
| | | } |
| | | |
| | | try { |
| | | // è§£æåºåç«åæ |
| | | String[] baseParts = baseStationCoordinates.trim().split(","); |
| | | if (baseParts.length != 4) { |
| | | return null; |
| | | } |
| | | double baseLat = convertToDecimalDegree(baseParts[0], baseParts[1]); |
| | | double baseLon = convertToDecimalDegree(baseParts[2], baseParts[3]); |
| | | |
| | | // è§£æåå§è¾¹çåæ |
| | | String[] points = originalBoundary.split(";"); |
| | | StringBuilder xyStr = new StringBuilder(); |
| | | |
| | | for (int i = 0; i < points.length; i++) { |
| | | String point = points[i].trim(); |
| | | if (point.isEmpty()) { |
| | | continue; |
| | | } |
| | | |
| | | String[] coords = point.split(","); |
| | | if (coords.length >= 2) { |
| | | try { |
| | | double lat = Double.parseDouble(coords[0].trim()); |
| | | double lon = Double.parseDouble(coords[1].trim()); |
| | | |
| | | // 转æ¢ä¸ºXYåæ |
| | | double[] xy = publicway.Gpstoxuzuobiao.convertLatLonToLocal(lat, lon, baseLat, baseLon); |
| | | if (xy != null && xy.length >= 2) { |
| | | if (xyStr.length() > 0) { |
| | | xyStr.append(";"); |
| | | } |
| | | xyStr.append(String.format(Locale.US, "%.3f,%.3f", xy[0], xy[1])); |
| | | } |
| | | } catch (NumberFormatException e) { |
| | | // è·³è¿æ æçåæ ç¹ |
| | | continue; |
| | | } |
| | | } |
| | | } |
| | | |
| | | return xyStr.length() > 0 ? xyStr.toString() : null; |
| | | } catch (Exception e) { |
| | | System.err.println("转æ¢åå§è¾¹çåæ å°XY失败: " + e.getMessage()); |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * é¢è§è¾¹ç |
| | | */ |
| | | private void previewBoundary() { |
| | | if (!dikuaiData.containsKey("boundaryDrawn")) { |
| | | JOptionPane.showMessageDialog(this, "请å
å®æè¾¹çç»å¶ååé¢è§", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // è·åæå建å°å对象 |
| | | String landNumber = getPendingLandNumber(); |
| | | Dikuai dikuai = getOrCreatePendingDikuai(); |
| | | if (dikuai == null) { |
| | | JOptionPane.showMessageDialog(this, "æ æ³è·åå°åä¿¡æ¯", "é误", JOptionPane.ERROR_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // ç¡®ä¿å°åæ°æ®æ¯ææ°ç |
| | | String optimizedBoundaryXY = dikuaiData.get("optimizedBoundaryXY"); |
| | | if (optimizedBoundaryXY == null || optimizedBoundaryXY.isEmpty() || optimizedBoundaryXY.startsWith("ERROR")) { |
| | | // å¦ææ²¡æä¼ååçè¾¹çï¼å°è¯ä»boundaryCoordinatesè·å |
| | | String boundaryCoords = dikuaiData.get("boundaryCoordinates"); |
| | | if (boundaryCoords != null && !boundaryCoords.isEmpty() && !"-1".equals(boundaryCoords)) { |
| | | optimizedBoundaryXY = boundaryCoords; |
| | | } else { |
| | | // å°è¯ä»å°å对象è·å |
| | | optimizedBoundaryXY = dikuai.getBoundaryCoordinates(); |
| | | } |
| | | } |
| | | |
| | | if (optimizedBoundaryXY == null || optimizedBoundaryXY.isEmpty() || "-1".equals(optimizedBoundaryXY)) { |
| | | JOptionPane.showMessageDialog(this, "æªæ¾å°ææçè¾¹çåæ ï¼æ æ³é¢è§", "æç¤º", JOptionPane.WARNING_MESSAGE); |
| | | return; |
| | | } |
| | | |
| | | // ç¡®ä¿åå§è¾¹çXYåæ å·²è®¡ç® |
| | | String originalBoundaryXY = dikuai.getBoundaryOriginalXY(); |
| | | if (originalBoundaryXY == null || originalBoundaryXY.isEmpty() || "-1".equals(originalBoundaryXY)) { |
| | | // 计ç®åå§è¾¹çXYåæ |
| | | String originalBoundary = dikuaiData.get("boundaryOriginalCoordinates"); |
| | | String baseStationCoordinates = dikuaiData.get("baseStationCoordinates"); |
| | | if (originalBoundary != null && baseStationCoordinates != null) { |
| | | originalBoundaryXY = convertOriginalBoundaryToXY(originalBoundary, baseStationCoordinates); |
| | | if (originalBoundaryXY != null && !originalBoundaryXY.isEmpty()) { |
| | | dikuai.setBoundaryOriginalXY(originalBoundaryXY); |
| | | Dikuai.putDikuai(landNumber, dikuai); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // ä¿åä¼è¯å¿«ç
§ |
| | | captureSessionSnapshot(); |
| | | |
| | | // å建finalåéä¾lambdaä½¿ç¨ |
| | | final String finalOptimizedBoundaryXY = optimizedBoundaryXY; |
| | | final Dikuai finalDikuai = dikuai; |
| | | |
| | | // å
³éå¯¹è¯æ¡ |
| | | setVisible(false); |
| | | dispose(); |
| | | |
| | | // è°ç¨é¦é¡µæ¾ç¤ºé¢è§ï¼ä¸è¾¹ç管ç页é¢é»è¾ä¸è´ï¼ |
| | | SwingUtilities.invokeLater(() -> { |
| | | Shouye.showBoundaryPreview(finalDikuai, finalOptimizedBoundaryXY, () -> { |
| | | // è¿ååè°ï¼éæ°æå¼æ°å¢å°åå¯¹è¯æ¡ï¼å¹¶æ¾ç¤ºæ¥éª¤2 |
| | | Component parent = Shouye.getInstance(); |
| | | if (parent != null) { |
| | | // ç¡®ä¿ä¼è¯ç¶ææ£ç¡®ï¼ä»¥ä¾¿è¿åæ¶æ¾ç¤ºæ¥éª¤2 |
| | | if (activeSession != null && activeSession.drawingCompleted) { |
| | | resumeRequested = true; |
| | | } |
| | | showAddDikuaiDialog(parent); |
| | | } |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | private void hideBoundaryPointSummary() { |
| | | if (boundaryCountLabel != null) { |
| | |
| | | |
| | | if (step == 1) { |
| | | updateObstacleSummary(); |
| | | // æ¥éª¤1æ¾ç¤ºæ¶ï¼ç«å³æ´æ°æé®ç¶æ |
| | | SwingUtilities.invokeLater(() -> updateStep1ButtonState()); |
| | | } |
| | | |
| | | // æ´æ°æé®ç¶æ |
| | |
| | | if (previewButtonSpacer != null) { |
| | | previewButtonSpacer.setVisible(false); |
| | | } |
| | | // æ¥éª¤1ï¼æ ¹æ®éªè¯ç»ææ´æ°ä¸ä¸æ¥æé®ç¶æ |
| | | if (step == 1) { |
| | | updateStep1ButtonState(); |
| | | } |
| | | // æ¥éª¤2æ¾ç¤ºè¾¹çé¢è§æé® |
| | | if (step == 2) { |
| | | if (boundaryPreviewButton != null) { |
| | | boundaryPreviewButton.setVisible(true); |
| | | // æ ¹æ®æ¯å¦å®æè¾¹çç»å¶æ¥è®¾ç½®æé®ç¶æåèæ¯é¢è² |
| | | boolean boundaryDrawn = dikuaiData.containsKey("boundaryDrawn"); |
| | | boundaryPreviewButton.setEnabled(boundaryDrawn); |
| | | if (boundaryDrawn) { |
| | | boundaryPreviewButton.setBackground(PRIMARY_COLOR); // 绿è²èæ¯ |
| | | } else { |
| | | boundaryPreviewButton.setBackground(MEDIUM_GRAY); // ç°è²èæ¯ |
| | | } |
| | | } |
| | | // æ´æ°ä¸ä¸æ¥æé®ç¶æï¼æ ¹æ®æ¯å¦å®æè¾¹çç»å¶ï¼ |
| | | boolean boundaryDrawn = dikuaiData.containsKey("boundaryDrawn"); |
| | | nextButton.setEnabled(boundaryDrawn); |
| | | if (boundaryDrawn) { |
| | | nextButton.setBackground(PRIMARY_COLOR); // 绿è²èæ¯ |
| | | } else { |
| | | nextButton.setBackground(MEDIUM_GRAY); // ç°è²èæ¯ |
| | | } |
| | | // æ´æ°å¼å§ç»å¶æé®ç¶æ |
| | | updateStartDrawingButtonState(); |
| | | } else { |
| | | if (boundaryPreviewButton != null) { |
| | | boundaryPreviewButton.setVisible(false); |
| | | boundaryPreviewButton.setEnabled(false); |
| | | } |
| | | } |
| | | } else { |
| | | nextButton.setVisible(false); |
| | | createButton.setVisible(true); |
| | |
| | | if (previewButtonSpacer != null) { |
| | | previewButtonSpacer.setVisible(true); |
| | | } |
| | | if (boundaryPreviewButton != null) { |
| | | boundaryPreviewButton.setVisible(false); |
| | | boundaryPreviewButton.setEnabled(false); |
| | | } |
| | | setPathAvailability(hasGeneratedPath()); |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æ¥éª¤1çä¸ä¸æ¥æé®ç¶æ |
| | | * æ ¹æ®å°ååç§°æ¯å¦å¡«åæ¥è®¾ç½®æé®çå¯ç¨ç¶æåèæ¯é¢è² |
| | | */ |
| | | private void updateStep1ButtonState() { |
| | | if (nextButton == null || currentStep != 1) { |
| | | return; |
| | | } |
| | | |
| | | String name = areaNameField.getText().trim(); |
| | | boolean canProceed = !name.isEmpty(); |
| | | |
| | | nextButton.setEnabled(canProceed); |
| | | if (canProceed) { |
| | | // å¯ç¹å»æ¶ï¼ç»¿è²èæ¯ |
| | | nextButton.setBackground(PRIMARY_COLOR); |
| | | } else { |
| | | // ä¸å¯ç¹å»æ¶ï¼ç°è²èæ¯ |
| | | nextButton.setBackground(MEDIUM_GRAY); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æ¥éª¤2çå¼å§ç»å¶æé®ç¶æ |
| | | * æ ¹æ®æ¯å¦éæ©äºç»å¶æ¹å¼æ¥è®¾ç½®æé®çå¯ç¨ç¶æåèæ¯é¢è² |
| | | */ |
| | | private void updateStartDrawingButtonState() { |
| | | if (startEndDrawingBtn == null || currentStep != 2) { |
| | | return; |
| | | } |
| | | |
| | | boolean hasSelectedMethod = dikuaiData.containsKey("drawingMethod"); |
| | | boolean isDrawingActive = isDrawing; |
| | | |
| | | // 妿æ£å¨ç»å¶ï¼æé®ç¶æç±toggleDrawingæ¹æ³æ§å¶ |
| | | if (isDrawingActive) { |
| | | return; |
| | | } |
| | | |
| | | // 妿已ç»å®æç»å¶ï¼æé®æ¾ç¤º"已宿"ä¸ä¸å¯ç¨ |
| | | boolean boundaryDrawn = dikuaiData.containsKey("boundaryDrawn"); |
| | | if (boundaryDrawn) { |
| | | startEndDrawingBtn.setEnabled(false); |
| | | startEndDrawingBtn.setBackground(MEDIUM_GRAY); |
| | | return; |
| | | } |
| | | |
| | | startEndDrawingBtn.setEnabled(hasSelectedMethod); |
| | | if (hasSelectedMethod) { |
| | | // 已鿩ç»å¶æ¹å¼ï¼ç»¿è²èæ¯ï¼å¯ç¹å» |
| | | startEndDrawingBtn.setBackground(PRIMARY_COLOR); |
| | | } else { |
| | | // æªéæ©ç»å¶æ¹å¼ï¼ç°è²èæ¯ï¼ä¸å¯ç¹å» |
| | | startEndDrawingBtn.setBackground(MEDIUM_GRAY); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * æ´æ°æ¥éª¤2çé¢è§åä¸ä¸æ¥æé®ç¶æï¼å¨å®æè¾¹çç»å¶åè°ç¨ï¼ |
| | | * å°æé®èæ¯é¢è²è®¾ç½®ä¸ºç»¿è²ï¼è¡¨ç¤ºå¯ä»¥ç¹å»æä½ |
| | | */ |
| | | private void updateStep2ButtonsAfterDrawing() { |
| | | if (currentStep != 2) { |
| | | return; |
| | | } |
| | | |
| | | // æ´æ°é¢è§æé® |
| | | if (boundaryPreviewButton != null) { |
| | | boundaryPreviewButton.setEnabled(true); |
| | | boundaryPreviewButton.setBackground(PRIMARY_COLOR); // 绿è²èæ¯ |
| | | } |
| | | |
| | | // æ´æ°ä¸ä¸æ¥æé® |
| | | if (nextButton != null) { |
| | | nextButton.setEnabled(true); |
| | | nextButton.setBackground(PRIMARY_COLOR); // 绿è²èæ¯ |
| | | } |
| | | } |
| | | |
| | | private boolean validateCurrentStep() { |
| | | switch (currentStep) { |
| | | case 1: |
| | |
| | | showStep(2); |
| | | showBoundaryPointSummary(); |
| | | updateBoundaryXYDisplay(); |
| | | // æ´æ°é¢è§åä¸ä¸æ¥æé®ç¶æï¼èæ¯é¢è²å绿è²ï¼å¯ç¹å»ï¼ |
| | | updateStep2ButtonsAfterDrawing(); |
| | | } else { |
| | | if (startEndDrawingBtn != null) { |
| | | startEndDrawingBtn.setText("å¼å§ç»å¶"); |
| | |
| | | if (dikuaiData.containsKey("mowingPattern")) { |
| | | dikuai.setMowingPattern(dikuaiData.get("mowingPattern")); |
| | | } |
| | | if (dikuaiData.containsKey("mowingWidth")) { |
| | | |
| | | // ä¿åå²è宽度ï¼ä»ææ¬æ¡è·åï¼åä½ï¼ç±³ï¼è½¬æ¢ä¸ºåç±³ä¿åï¼ |
| | | if (mowingWidthField != null) { |
| | | String mowingWidthStr = mowingWidthField.getText().trim(); |
| | | if (mowingWidthStr != null && !mowingWidthStr.isEmpty()) { |
| | | try { |
| | | double mowingWidthMeters = Double.parseDouble(mowingWidthStr); |
| | | // 转æ¢ä¸ºåç±³ä¿å |
| | | double mowingWidthCm = mowingWidthMeters * 100.0; |
| | | dikuai.setMowingWidth(String.format(Locale.US, "%.2f", mowingWidthCm)); |
| | | } catch (NumberFormatException e) { |
| | | // å¦æè§£æå¤±è´¥ï¼å°è¯ä½¿ç¨dikuaiDataä¸çå¼ |
| | | if (dikuaiData.containsKey("mowingWidth")) { |
| | | dikuai.setMowingWidth(dikuaiData.get("mowingWidth")); |
| | | } |
| | | } |
| | | } else if (dikuaiData.containsKey("mowingWidth")) { |
| | | dikuai.setMowingWidth(dikuaiData.get("mowingWidth")); |
| | | } |
| | | } else if (dikuaiData.containsKey("mowingWidth")) { |
| | | dikuai.setMowingWidth(dikuaiData.get("mowingWidth")); |
| | | } |
| | | |
| | | // ä¿åå²èæºå²å宽度ï¼ä»ææ¬æ¡è·åï¼åä½ï¼ç±³ï¼ |
| | | if (bladeWidthField != null) { |
| | | String bladeWidthStr = bladeWidthField.getText().trim(); |
| | | if (bladeWidthStr != null && !bladeWidthStr.isEmpty()) { |
| | | try { |
| | | double bladeWidthMeters = Double.parseDouble(bladeWidthStr); |
| | | // ä¿å为米ï¼ä¿ç2ä½å°æ° |
| | | dikuai.setMowingBladeWidth(String.format(Locale.US, "%.2f", bladeWidthMeters)); |
| | | } catch (NumberFormatException e) { |
| | | // è§£æå¤±è´¥æ¶ï¼ä¿ååå§å符串 |
| | | dikuai.setMowingBladeWidth(bladeWidthStr); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // ä¿åå²èå®å
¨è·ç¦»ï¼ä»ææ¬æ¡è·åï¼åä½ï¼ç±³ï¼ |
| | | if (safetyDistanceField != null) { |
| | | String safetyDistanceStr = safetyDistanceField.getText().trim(); |
| | | if (safetyDistanceStr != null && !safetyDistanceStr.isEmpty()) { |
| | | try { |
| | | double safetyDistanceMeters = Double.parseDouble(safetyDistanceStr); |
| | | // ä¿å为米ï¼ä¿ç2ä½å°æ° |
| | | String formattedValue = String.format(Locale.US, "%.2f", safetyDistanceMeters); |
| | | dikuai.setMowingSafetyDistance(formattedValue); |
| | | // åæ¶ä¿åå°dikuaiDataä¸ï¼ä»¥ä¾¿åç»ä½¿ç¨ |
| | | dikuaiData.put("mowingSafetyDistance", formattedValue); |
| | | } catch (NumberFormatException e) { |
| | | // è§£æå¤±è´¥æ¶ï¼ä¿ååå§å符串 |
| | | dikuai.setMowingSafetyDistance(safetyDistanceStr); |
| | | dikuaiData.put("mowingSafetyDistance", safetyDistanceStr); |
| | | } |
| | | } else if (dikuaiData.containsKey("mowingSafetyDistance")) { |
| | | // å¦æææ¬æ¡ä¸ºç©ºï¼å°è¯ä»dikuaiDataè·å |
| | | dikuai.setMowingSafetyDistance(dikuaiData.get("mowingSafetyDistance")); |
| | | } |
| | | } else if (dikuaiData.containsKey("mowingSafetyDistance")) { |
| | | // 妿safetyDistanceField为nullï¼ä»dikuaiDataè·å |
| | | dikuai.setMowingSafetyDistance(dikuaiData.get("mowingSafetyDistance")); |
| | | } |
| | | |
| | | // ä¿åå²èè·¯å¾åæ |
| | | String plannedPath = dikuaiData.get("plannedPath"); |
| | | if (isMeaningfulValue(plannedPath)) { |
| | | dikuai.setPlannedPath(plannedPath); |
| | |
| | | if (resumeRequested && activeSession != null) { |
| | | dialog.applySessionData(activeSession); |
| | | resumeRequested = false; |
| | | // 妿ä¼è¯å·²çæè·¯å¾ï¼ä¼å
æ¾ç¤ºæ¥éª¤3 |
| | | if (activeSession.data != null && isMeaningfulValue(activeSession.data.get("plannedPath"))) { |
| | | dialog.showStep(3); |
| | | } else if (activeSession.drawingCompleted) { |
| | | // 妿ä¼è¯å·²å®æç»å¶ï¼æ¾ç¤ºæ¥éª¤2 |
| | | dialog.showStep(2); |
| | | } |
| | | } |
| | | |
| | | dialog.setVisible(true); |