Ejemplo n.º 1
0
  public void recalculate() {
    Enumeration<Editable> numer = getSegments().elements();
    WorldLocation thisOrigin = getOrigin();
    HiResDate thisDate = getStartDate();
    while (numer.hasMoreElements()) {
      Editable editable = (Editable) numer.nextElement();
      PlanningSegment seg = (PlanningSegment) editable;

      PlanningCalc theCalc = null;
      int model = seg.getCalculation();
      switch (model) {
        case PlanningLegCalcModelPropertyEditor.RANGE_SPEED:
          theCalc = new FromRangeSpeed();
          break;
        case PlanningLegCalcModelPropertyEditor.RANGE_TIME:
          theCalc = new FromRangeTime();
          break;
        case PlanningLegCalcModelPropertyEditor.SPEED_TIME:
          theCalc = new FromSpeedTime();
          break;
      }

      // see if this is the closing segment
      if (seg instanceof ClosingSegment) {
        // what's the range and bearing back to the origin
        WorldVector offset = getOrigin().subtract(thisOrigin);

        // and store it.
        seg.setSpeedSilent(new WorldSpeed(12, WorldSpeed.Kts));
        seg.setDistanceSilent(new WorldDistance(offset.getRange(), WorldDistance.DEGS));
        seg.setCourseSilent(MWC.Algorithms.Conversions.Rads2Degs(offset.getBearing()));
        seg.setDepthSilent(new WorldDistance(offset.getDepth(), WorldDistance.METRES));
      }

      theCalc.construct(seg, thisOrigin, thisDate);

      // did we generate anything?
      if (seg.size() > 0) {
        // ok, now update the date/location
        thisOrigin = seg.last().getBounds().getCentre();
        thisDate = seg.endDTG();
      }
    }

    // ok, sort out the symbol & label freq
    HiResDate symFreq = this.getSymbolFrequency();
    HiResDate labelFreq = this.getLabelFrequency();

    this.setSymbolFrequency(new HiResDate(0));
    this.setLabelFrequency(new HiResDate(0));

    // and restore them
    setSymbolFrequency(symFreq);
    setLabelFrequency(labelFreq);
  }