# HG changeset patch # User Felix Wolfsteller # Date 1337952700 0 # Node ID 26f2e7e500ddcd5072b752b970dd9101d100876a # Parent 5543492f2da445558e49736c0ee7f3fc4223952a Also draw lines from q mainvalues to duration curve. flys-artifacts/trunk@4517 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 5543492f2da4 -r 26f2e7e500dd flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri May 25 09:27:01 2012 +0000 +++ b/flys-artifacts/ChangeLog Fri May 25 13:31:40 2012 +0000 @@ -1,3 +1,11 @@ +2012-05-25 Felix Wolfsteller + + Also draw lines to curve from q-mainvalues in dur. curve + + * src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java: + In analogy to the W-case, calculate where line from main value hits + a wqday-curve from DurationCurve. + 2012-05-25 Felix Wolfsteller Draw line of w-mainvalue to duration curve hit point to ground. diff -r 5543492f2da4 -r 26f2e7e500dd flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java --- a/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java Fri May 25 09:27:01 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/artifacts/model/MainValuesQFacet.java Fri May 25 13:31:40 2012 +0000 @@ -3,18 +3,24 @@ import java.util.ArrayList; import java.util.List; +import org.apache.log4j.Logger; + import de.intevation.artifacts.Artifact; import de.intevation.artifacts.CallContext; +import de.intevation.artifacts.DataProvider; import de.intevation.artifactdatabase.state.DefaultFacet; import de.intevation.flys.artifacts.MainValuesArtifact; +import de.intevation.flys.artifacts.math.Linear; import de.intevation.flys.artifacts.model.FacetTypes; +import de.intevation.flys.artifacts.model.WQDay; import de.intevation.flys.jfree.FLYSAnnotation; import de.intevation.flys.jfree.StickyAxisAnnotation; import de.intevation.flys.exports.DurationCurveGenerator; + /** * Facet to show Main Q Values. * TODO Join with W implementation. @@ -23,6 +29,9 @@ extends DefaultFacet implements FacetTypes { + /** Own logger. */ + private static Logger logger = Logger.getLogger(RelativePointFacet.class); + /** Do we want MainValues at Gauge (not interpolated)? */ protected boolean isAtGauge; @@ -34,6 +43,39 @@ this.isAtGauge = atGauge; } + /** + * Set the hit-point in Q where a line drawn from the axis would hit the + * curve in WQDay (if hit). + * Employ linear interpolation. + */ + protected static void setHitPoint(WQDay wqday, StickyAxisAnnotation annotation) { + int idx = 0; + float q = annotation.getPos(); + boolean qIncreases = wqday.getQ(0) < wqday.getQ(wqday.size()-1); + if (qIncreases) { + while (idx < wqday.size() && wqday.getQ(idx) < q) { + idx++; + } + } + else { + idx = wqday.size() -1; + while (idx > 0 && wqday.getQ(idx) > q) { + idx--; + } + } + + double day = 0d; + int mod = (qIncreases) ? -1 : +1; + if (idx != 0 && idx <= wqday.size()-1) { + day = Linear.linear(q, wqday.getQ(idx +mod), wqday.getQ(idx), + wqday.getDay(idx+mod), wqday.getDay(idx)); + annotation.setHitPoint((float)day); + } + else { + logger.debug("StickyAnnotation does not hit wqday curve"); + } + } + /** * Returns the data this facet requires. @@ -50,22 +92,46 @@ List qs = mvArtifact.getMainValuesQ(isAtGauge); List xy = new ArrayList(); + WQDay wqdays = null; + List providers = context. + getDataProvider(DurationCurveFacet.BB_DURATIONCURVE); + if (providers.size() < 1) { + logger.warn("Could not find durationcurve data provider."); + } + else { + wqdays = (WQDay) providers.get(0).provideData( + DurationCurveFacet.BB_DURATIONCURVE, + null, + context); + } + // Rather specific case, Q-Annotations at a maybe second yaxis. + StickyAxisAnnotation annotation = null; if (this.name.equals(DURATION_MAINVALUES_Q)) { for (NamedDouble q: qs) { - xy.add(new StickyAxisAnnotation( - q.getName(), - (float) q.getValue(), - StickyAxisAnnotation.SimpleAxis.Y_AXIS, - DurationCurveGenerator.YAXIS.Q.idx)); + annotation = + new StickyAxisAnnotation( + q.getName(), + (float) q.getValue(), + StickyAxisAnnotation.SimpleAxis.Y_AXIS, + DurationCurveGenerator.YAXIS.Q.idx); + xy.add(annotation); + if (wqdays != null) { + setHitPoint(wqdays, annotation); + } } } else { for (NamedDouble q: qs) { - xy.add(new StickyAxisAnnotation( - q.getName(), - (float) q.getValue(), - StickyAxisAnnotation.SimpleAxis.X_AXIS)); + annotation = + new StickyAxisAnnotation( + q.getName(), + (float) q.getValue(), + StickyAxisAnnotation.SimpleAxis.X_AXIS); + xy.add(annotation); + if (wqdays != null) { + setHitPoint(wqdays, annotation); + } } }