package tim.prune.gui.profile; import tim.prune.I18nManager; import tim.prune.data.DataPoint; import tim.prune.data.Track; import tim.prune.data.UnitSet; /** * Class to provide a source of altitude data for the profile chart */ public class AltitudeData extends ProfileData { /** * Constructor * @param inTrack track object */ public AltitudeData(Track inTrack) { super(inTrack); } /** * Get the data and populate the instance arrays */ public void init(UnitSet inUnitSet) { setUnitSet(inUnitSet); initArrays(); _hasData = false; // multiplication factor for unit conversion final double multFactor = _unitSet.getAltitudeUnit().getMultFactorFromStd(); if (_track != null) { try { for (int i=0; i<_track.getNumPoints(); i++) { DataPoint point = _track.getPoint(i); if (point != null && point.hasAltitude()) { // Point has an altitude - store value and maintain max and min values double value = point.getAltitude().getMetricValue() * multFactor; _pointValues[i] = value; if (value < _minValue || !_hasData) {_minValue = value;} if (value > _maxValue || !_hasData) {_maxValue = value;} // if all values are zero then that's no data _hasData = _hasData || (point.getAltitude().getValue() != 0); _pointHasData[i] = true; } else _pointHasData[i] = false; } } catch (ArrayIndexOutOfBoundsException obe) {} // must be due to the track size changing during calculation // assume that a redraw will be triggered } } /** * @return text description including units */ public String getLabel() { return I18nManager.getText("fieldname.altitude") + " (" + I18nManager.getText(_unitSet.getAltitudeUnit().getShortnameKey()) + ")"; } /** * @return key for message when no altitudes present */ public String getNoDataKey() { return "display.noaltitudes"; } }