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); }