# HG changeset patch # User Felix Wolfsteller # Date 1338303544 0 # Node ID 4b6fb6d911921479fe6de5e31299a5e987b96e3e # Parent 60f13d966ee383b2573c6be8e081eec1597d8dba issue417: duration curve main values as line(s) to curve. flys-artifacts/trunk@4553 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 60f13d966ee3 -r 4b6fb6d91192 flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Tue May 29 08:38:39 2012 +0000 +++ b/flys-artifacts/ChangeLog Tue May 29 14:59:04 2012 +0000 @@ -1,3 +1,11 @@ +2012-05-29 Felix Wolfsteller + + solve issue417: duration curve annotations as line to curve. + + * src/main/java/de/intevation/flys/exports/XYChartGenerator.java + (createStickyLineAnnotation): New. + Resolved todos, use the line style. + 2012-05-29 Felix Wolfsteller * src/main/java/de/intevation/flys/exports/XYChartGenerator.java: diff -r 60f13d966ee3 -r 4b6fb6d91192 flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Tue May 29 08:38:39 2012 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/XYChartGenerator.java Tue May 29 14:59:04 2012 +0000 @@ -787,6 +787,54 @@ /** + * Create a line from a axis to a given point. + * @param axis The "simple" axis. + * @param fromD1 from-location in first dimension. + * @param toD2 to-location in second dimension. + * @param area helper to calculate offsets. + * @param lineStyle optional line style. + */ + protected static XYLineAnnotation createStickyLineAnnotation( + StickyAxisAnnotation.SimpleAxis axis, float fromD1, float toD2, + Area area, ThemeAccess.LineStyle lineStyle + ) { + double anchorX1 = 0d, anchorX2 = 0d, anchorY1 = 0d, anchorY2 = 0d; + switch(axis) { + case X_AXIS: + anchorX1 = fromD1; + anchorX2 = fromD1; + anchorY1 = area.atGround(); + anchorY2 = toD2; + break; + case Y_AXIS: + anchorX1 = area.atLeft(); + anchorX2 = toD2; + anchorY1 = fromD1; + anchorY2 = fromD1; + break; + case Y_AXIS2: + anchorX1 = area.atRight(); + anchorX2 = toD2; + anchorY1 = fromD1; + anchorY2 = fromD1; + break; + } + // Style the line. + if (lineStyle != null) { + return new XYLineAnnotation( + anchorX1, anchorY1, + anchorX2, anchorY2, + new BasicStroke(lineStyle.getWidth()), lineStyle.getColor()); + } + else { + return new XYLineAnnotation( + anchorX1, anchorY1, + anchorX2, anchorY2); + } + } + + + /** * Add a text and a line annotation. * @param area convenience to determine positions in plot. * @param theme (optional) theme document @@ -845,23 +893,23 @@ textAnnotation.setTextAnchor(TextAnchor.CENTER_RIGHT); lineAnnotation = createRightStickAnnotation( area2, annotation.getPos(), lineStyle); - // TODO line to curve if (!Float.isNaN(annotation.getHitPoint()) && theme != null) { // New line annotation to hit curve. - // TODO include more style information if (ThemeUtil.parseShowVerticalLine(theme)) { - // createRightStickAnnotaiton .... - XYLineAnnotation hitLineAnnotation = new XYLineAnnotation( - area2.atRight(), annotation.getPos(), - annotation.getHitPoint(), annotation.getPos()); + XYLineAnnotation hitLineAnnotation = + createStickyLineAnnotation( + StickyAxisAnnotation.SimpleAxis.X_AXIS, + annotation.getPos(), annotation.getHitPoint(), + area, lineStyle); plot.getRenderer(rendererIndex).addAnnotation(hitLineAnnotation, org.jfree.ui.Layer.BACKGROUND); } if (ThemeUtil.parseShowHorizontalLine(theme)) { - // createGroundStickAnnotation - XYLineAnnotation lineBackAnnotation = new XYLineAnnotation( - annotation.getHitPoint(), annotation.getPos(), - annotation.getHitPoint(), area2.atGround()); + XYLineAnnotation lineBackAnnotation = + createStickyLineAnnotation( + StickyAxisAnnotation.SimpleAxis.Y_AXIS2, + annotation.getPos(), annotation.getHitPoint(), + area, lineStyle); plot.getRenderer(rendererIndex).addAnnotation(lineBackAnnotation, org.jfree.ui.Layer.BACKGROUND); } @@ -874,20 +922,22 @@ textAnnotation.setTextAnchor(TextAnchor.CENTER_LEFT); lineAnnotation = createLeftStickAnnotation(area, annotation.getPos(), lineStyle); if (!Float.isNaN(annotation.getHitPoint()) && theme != null) { - // TODO include more style information // New line annotation to hit curve. if (ThemeUtil.parseShowHorizontalLine(theme)) { - // createLeftStickAnnotaiton - XYLineAnnotation hitLineAnnotation = new XYLineAnnotation(area.atLeft(), - annotation.getPos(), annotation.getHitPoint(), annotation.getPos()); + XYLineAnnotation hitLineAnnotation = + createStickyLineAnnotation( + StickyAxisAnnotation.SimpleAxis.Y_AXIS, + annotation.getPos(), annotation.getHitPoint(), + area, lineStyle); plot.getRenderer(rendererIndex).addAnnotation(hitLineAnnotation, org.jfree.ui.Layer.BACKGROUND); } if (ThemeUtil.parseShowVerticalLine(theme)) { - // createGroundStickAnnotation - XYLineAnnotation lineBackAnnotation = new XYLineAnnotation( - annotation.getHitPoint(), annotation.getPos(), - annotation.getHitPoint(), area.atGround()); + XYLineAnnotation lineBackAnnotation = + createStickyLineAnnotation( + StickyAxisAnnotation.SimpleAxis.X_AXIS, + annotation.getHitPoint(), annotation.getPos(), + area, lineStyle); plot.getRenderer(rendererIndex).addAnnotation(lineBackAnnotation, org.jfree.ui.Layer.BACKGROUND); }