annotate flys-artifacts/src/main/java/de/intevation/flys/exports/LongitudinalSectionGenerator.java @ 1037:75cf1b11c97e

Improved CustomAnnotation rendering. flys-artifacts/trunk@2498 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Felix Wolfsteller <felix.wolfsteller@intevation.de>
date Wed, 17 Aug 2011 12:32:26 +0000
parents e6aff80b59ff
children 4dcc635d6ca6
rev   line source
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.exports;
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
2
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
3 import java.util.ArrayList;
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
4 import java.util.Iterator;
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
5 import java.util.List;
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
6
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
7 import org.apache.log4j.Logger;
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
8
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
9 import java.awt.Shape;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
10 import java.awt.geom.Rectangle2D;
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
11 import java.awt.geom.Line2D;
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
12
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
13 import org.jfree.chart.annotations.XYLineAnnotation;
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
14 import org.jfree.chart.annotations.XYTextAnnotation;
375
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
15 import org.jfree.chart.JFreeChart;
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
16 import org.jfree.chart.axis.NumberAxis;
422
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
17 import org.jfree.chart.axis.ValueAxis;
375
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
18 import org.jfree.chart.plot.XYPlot;
414
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
19 import org.jfree.chart.title.TextTitle;
720
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
20 import org.jfree.data.Range;
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
21 import org.jfree.data.xy.XYSeries;
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
22 import org.jfree.ui.TextAnchor;
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
23 import org.jfree.chart.plot.PlotRenderingInfo;
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
24 import org.jfree.text.TextUtilities;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
25 import org.jfree.chart.entity.XYAnnotationEntity;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
26 import org.jfree.chart.plot.PlotOrientation;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
27 import org.jfree.ui.RectangleEdge;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
28 import org.jfree.chart.plot.Plot;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
29 import org.jfree.chart.ChartRenderingInfo;
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
30 import org.jfree.chart.util.LineUtilities;
364
8830eecad69e Added the name of the facet to the parameterlist of OutGenerator.doOut().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 359
diff changeset
31
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
32 import org.w3c.dom.Document;
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
33
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
34 import de.intevation.artifacts.Artifact;
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
35
695
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
36 import de.intevation.artifactdatabase.state.Facet;
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
37
422
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
38 import de.intevation.flys.artifacts.FLYSArtifact;
706
ddd8b37d5cd3 Removed dead code.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 696
diff changeset
39
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
40 import de.intevation.flys.artifacts.model.FacetTypes;
364
8830eecad69e Added the name of the facet to the parameterlist of OutGenerator.doOut().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 359
diff changeset
41 import de.intevation.flys.artifacts.model.WQKms;
8830eecad69e Added the name of the facet to the parameterlist of OutGenerator.doOut().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 359
diff changeset
42
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
43 import de.intevation.flys.model.Annotation;
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
44
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
45 /**
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
46 * Custom Annotations class that is drawn only if no collisions with other
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
47 * already drawn CustomAnnotations in current plot are found.
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
48 * Draws a given text and a line to it from either axis.
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
49 */
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
50 class CustomAnnotation extends XYTextAnnotation {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
51
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
52 /** Logger for this class. */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
53 private static Logger logger =
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
54 Logger.getLogger(CustomAnnotation.class);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
55
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
56 /** Simplified view on axes. */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
57 public static enum SimpleAxis {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
58 X_AXIS, /** Usually "horizontal". */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
59 Y_AXIS /** Usually "vertical". */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
60 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
61
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
62 /** Which axis to stick to. */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
63 protected SimpleAxis stickyAxis = SimpleAxis.X_AXIS;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
64
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
65
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
66 /**
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
67 * Trivial constructor.
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
68 *
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
69 * @param text Text to display.
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
70 * @param x X-position in dataspace (typical horizontal, in km).
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
71 * @param y Y-position in dataspace (typical vertical, in m).
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
72 */
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
73 public CustomAnnotation(String text, float x, float y) {
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
74 super(text, x, y);
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
75 }
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
76
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
77
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
78 /**
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
79 * Sets the "sticky axis" (whether to draw annotations at the
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
80 * X- or the Y-Axis.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
81 *
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
82 * @param stickyAxis axis to stick to.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
83 */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
84 public void setStickyAxis(SimpleAxis stickyAxis) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
85 this.stickyAxis = stickyAxis;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
86 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
87
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
88
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
89 /**
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
90 * Draws a small line at axis where this annotation resides.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
91 *
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
92 * @param g2 the graphics device.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
93 * @param dataArea the data area.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
94 * @param domainAxis the domain axis.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
95 * @param rangeAxis the range axis.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
96 * @param domainEdge the domain edge.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
97 * @param rangeEdge the range edge.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
98 * @param orientation the plot orientation.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
99 */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
100 protected void drawAxisMark(
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
101 java.awt.Graphics2D g2,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
102 java.awt.geom.Rectangle2D dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
103 ValueAxis domainAxis,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
104 ValueAxis rangeAxis,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
105 RectangleEdge domainEdge,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
106 RectangleEdge rangeEdge,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
107 PlotOrientation orientation) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
108 float j2DX1 = 0.0f;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
109 float j2DX2 = 0.0f;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
110 float j2DY1 = 0.0f;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
111 float j2DY2 = 0.0f;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
112 float x = (float) getX();
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
113 float y = (float) getY();
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
114 /* When dependent on X/Y-Axis and orientation, following
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
115 can be used as a base:
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
116 if (orientation == PlotOrientation.VERTICAL) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
117 j2DX1 = (float) domainAxis.valueToJava2D(x, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
118 domainEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
119 j2DY1 = (float) rangeAxis.valueToJava2D(y, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
120 rangeEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
121 j2DX2 = (float) domainAxis.valueToJava2D(x, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
122 domainEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
123 j2DY2 = (float) rangeAxis.valueToJava2D(y, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
124 rangeEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
125 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
126 else if (orientation == PlotOrientation.HORIZONTAL) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
127 j2DY1 = (float) domainAxis.valueToJava2D(x, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
128 domainEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
129 j2DX1 = (float) rangeAxis.valueToJava2D(y, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
130 rangeEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
131 j2DY2 = (float) domainAxis.valueToJava2D(x, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
132 domainEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
133 j2DX2 = (float) rangeAxis.valueToJava2D(y, dataArea,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
134 rangeEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
135 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
136
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
137 g2.setPaint(this.paint);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
138 g2.setStroke(this.stroke);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
139 */
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
140 j2DY1 = (float) RectangleEdge.coordinate(dataArea, domainEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
141 j2DY2 = j2DY1 - 0.10f * (float)
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
142 (rangeAxis.getRange().getUpperBound()
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
143 - rangeAxis.getRange().getLowerBound());
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
144 j2DX1 = (float) domainAxis.valueToJava2D(x, dataArea, domainEdge);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
145 j2DX2 = j2DX1;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
146
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
147 Line2D line = new Line2D.Float(j2DX1, j2DY1, j2DX2, j2DY2);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
148
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
149 // line is clipped to avoid JRE bug 6574155, for more info
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
150 // see JFreeChart bug 2221495
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
151 boolean visible = LineUtilities.clipLine(line, dataArea);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
152 if (visible) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
153 g2.draw(line);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
154 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
155 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
156
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
157
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
158 /**
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
159 * Draw the Annotiation if it does not collide with other already drawn
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
160 * Annotations.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
161 *
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
162 * @param g2 the graphics device.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
163 * @param plot the plot.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
164 * @param dataArea the data area.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
165 * @param domainAxis the domain axis.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
166 * @param rangeAxis the range axis.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
167 * @param rendererIndex the render index.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
168 * @param info state information, escpecially collects info about
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
169 * already drawn shapes (and thus annotations), used
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
170 * for collision detection.
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
171 */
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
172 @Override
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
173 public void draw(
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
174 java.awt.Graphics2D g2,
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
175 XYPlot plot,
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
176 java.awt.geom.Rectangle2D dataArea,
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
177 ValueAxis domainAxis,
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
178 ValueAxis rangeAxis,
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
179 int rendererIndex,
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
180 PlotRenderingInfo info) {
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
181
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
182 if (info == null)
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
183 return;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
184
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
185 // Calculate the bounding box.
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
186 ChartRenderingInfo chartInfo = info.getOwner();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
187
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
188 PlotOrientation orientation = plot.getOrientation();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
189 RectangleEdge domainEdge = Plot.resolveDomainAxisLocation(
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
190 plot.getDomainAxisLocation(), orientation);
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
191 RectangleEdge rangeEdge = Plot.resolveRangeAxisLocation(
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
192 plot.getRangeAxisLocation(), orientation);
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
193 float anchorX = (float) domainAxis.valueToJava2D(
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
194 getX(), dataArea, domainEdge);
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
195 float anchorY = (float) rangeAxis.valueToJava2D(
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
196 getY(), dataArea, rangeEdge);
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
197 if (orientation == PlotOrientation.HORIZONTAL) {
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
198 float tempAnchor = anchorX;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
199 anchorX = anchorY;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
200 anchorY = tempAnchor;
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
201 }
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
202
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
203 // Always draw the small line at axis.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
204 drawAxisMark(g2, dataArea, domainAxis, rangeAxis, domainEdge,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
205 rangeEdge, orientation);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
206
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
207 g2.setFont(getFont());
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
208 Shape hotspot = TextUtilities.calculateRotatedStringBounds(
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
209 getText(), g2, anchorX, anchorY, getTextAnchor(),
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
210 getRotationAngle(), getRotationAnchor());
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
211 Rectangle2D hotspotBox = hotspot.getBounds2D();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
212 // Check for collisions with other XYAnnotations.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
213 for (Iterator i = chartInfo.getEntityCollection().iterator();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
214 i.hasNext(); ) {
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
215 Object next = i.next();
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
216 // Collision with other stuff than XYAnnotations are okay.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
217 if (next instanceof XYAnnotationEntity) {
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
218 XYAnnotationEntity drawnShape = (XYAnnotationEntity) next;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
219 if (drawnShape.getArea().intersects(hotspotBox)) {
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
220 // Found collision, early stop.
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
221 return;
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
222 }
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
223 }
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
224 }
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
225
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
226 // Actuall drawing.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
227 if (getBackgroundPaint() != null) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
228 g2.setPaint(getBackgroundPaint());
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
229 g2.fill(hotspot);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
230 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
231 g2.setPaint(getPaint());
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
232 TextUtilities.drawRotatedString(getText(), g2, anchorX, anchorY,
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
233 getTextAnchor(), getRotationAngle(), getRotationAnchor());
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
234 // Draw outline.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
235 if (false) {
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
236 g2.setStroke(getOutlineStroke());
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
237 g2.setPaint(getOutlinePaint());
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
238 g2.draw(hotspot);
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
239 }
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
240
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
241 // Add info that we have drawn this Annotation.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
242 addEntity(info, hotspot, rendererIndex, getToolTipText(), getURL());
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
243 }
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
244 }
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
245
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
246
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
247 /**
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
248 * An OutGenerator that generates discharge curves.
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
249 *
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
250 * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a>
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
251 */
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
252 public class LongitudinalSectionGenerator
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
253 extends XYChartGenerator
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
254 implements FacetTypes
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
255 {
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
256 /** The logger that is used in this generator. */
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
257 private static Logger logger =
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
258 Logger.getLogger(LongitudinalSectionGenerator.class);
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
259
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
260 public static final String I18N_CHART_TITLE =
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
261 "chart.longitudinal.section.title";
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
262
414
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
263 public static final String I18N_CHART_SUBTITLE =
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
264 "chart.longitudinal.section.subtitle";
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
265
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
266 public static final String I18N_XAXIS_LABEL =
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
267 "chart.longitudinal.section.xaxis.label";
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
268
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
269 public static final String I18N_YAXIS_LABEL =
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
270 "chart.longitudinal.section.yaxis.label";
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
271
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
272 public static final String I18N_2YAXIS_LABEL =
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
273 "chart.longitudinal.section.yaxis.second.label";
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
274
664
e006da5679d2 s@m³/s@m\u00b3/s@
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 448
diff changeset
275 public static final String I18N_CHART_TITLE_DEFAULT = "W-L\u00e4ngsschnitt";
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
276 public static final String I18N_XAXIS_LABEL_DEFAULT = "km";
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
277 public static final String I18N_YAXIS_LABEL_DEFAULT = "W [NN + m]";
664
e006da5679d2 s@m³/s@m\u00b3/s@
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 448
diff changeset
278 public static final String I18N_2YAXIS_LABEL_DEFAULT = "Q [m\u00b3/s]";
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
279
364
8830eecad69e Added the name of the facet to the parameterlist of OutGenerator.doOut().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 359
diff changeset
280
745
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
281 protected boolean inverted;
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
282
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
283 protected List<Annotation> annotations;
364
8830eecad69e Added the name of the facet to the parameterlist of OutGenerator.doOut().
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 359
diff changeset
284
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
285 public LongitudinalSectionGenerator() {
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
286 super();
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
287 annotations = new ArrayList<Annotation>();
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
288 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
289
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
290
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
291 protected String getChartTitle() {
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
292 return msg(I18N_CHART_TITLE, I18N_CHART_TITLE_DEFAULT);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
293 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
294
745
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
295 public boolean isInverted() {
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
296 return inverted;
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
297 }
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
298
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
299 public void setInverted(boolean inverted) {
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
300 this.inverted = inverted;
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
301 }
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
302
414
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
303 @Override
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
304 protected void addSubtitles(JFreeChart chart) {
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
305 double[] dist = getRange();
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
306
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
307 Object[] args = new Object[] {
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
308 getRiverName(),
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
309 dist[0],
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
310 dist[1]
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
311 };
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
312
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
313 String subtitle = msg(I18N_CHART_SUBTITLE, "", args);
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
314 chart.addSubtitle(new TextTitle(subtitle));
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
315 }
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
316
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
317 @Override
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
318 public JFreeChart generateChart() {
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
319 JFreeChart c = super.generateChart();
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
320 XYPlot p = (XYPlot) c.getPlot();
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
321
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
322 redoAnnotations(p, p.getDomainAxis());
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
323
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
324 return c;
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
325 }
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
326
414
0385bcc4229a Added subtitles to the available charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 408
diff changeset
327
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
328 protected String getXAxisLabel() {
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
329 return msg(I18N_XAXIS_LABEL, I18N_XAXIS_LABEL_DEFAULT);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
330 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
331
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
332
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
333 protected String getYAxisLabel() {
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
334 return msg(I18N_YAXIS_LABEL, I18N_YAXIS_LABEL_DEFAULT);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
335 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
336
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
337
375
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
338 protected void adjustAxes(XYPlot plot) {
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
339 super.adjustAxes(plot);
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
340
408
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
341 NumberAxis qAxis = new NumberAxis(
fc3ac59c3c8b Enabled i18n support for charts.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 397
diff changeset
342 msg(I18N_2YAXIS_LABEL, I18N_2YAXIS_LABEL_DEFAULT));
375
60f63539d004 Ws and Qs of a longitudinal section chart are mapped to an own range axis now.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 369
diff changeset
343
666
eb45e05e5c5b Set the second y axis to axis position 1 (starts at 0).
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 664
diff changeset
344 plot.setRangeAxis(1, qAxis);
422
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
345
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
346 invertXAxis(plot.getDomainAxis());
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
347 }
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
348
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
349
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
350 /**
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
351 * Remove all annotations from plot and re-insert them at an approximately
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
352 * okay position. The followed approach is naive but side-effect free.
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
353 *
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
354 * @param plot the plot.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
355 * @param axis the value axis.
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
356 */
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
357 protected void redoAnnotations(XYPlot plot, ValueAxis axis) {
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
358 plot.clearAnnotations();
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
359 // TODO Position calculation could/should be done in
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
360 // the CustomAnnotation-Implementation itself.
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
361 ValueAxis yAxis = plot.getRangeAxis();
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
362 float posY = 140.f;
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
363 if (yAxis != null) {
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
364 posY = (float) yAxis.getRange().getLowerBound();
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
365 posYLess = posY;
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
366 // Add some (2%) space between Text and axis.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
367 posY += 0.02f * (yAxis.getRange().getUpperBound()
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
368 - yAxis.getRange().getLowerBound());
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
369 }
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
370
1036
e6aff80b59ff Added proof-of-concept collision detection for text annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1035
diff changeset
371 // Add all annotations.
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
372 for (Annotation a: annotations) {
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
373 float posX = (float) a.getRange().getA().doubleValue();
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
374 String text = a.getPosition().getValue();
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
375
1035
9f69a5f0af98 Started implementation of CustomAnnotation to plot collision-free annotations.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1034
diff changeset
376 XYTextAnnotation ta = new CustomAnnotation(text, posX, posY);
1034
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
377 double rotation = 270.0f * (Math.PI / 180.0f);
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
378 ta.setRotationAngle(rotation);
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
379 ta.setRotationAnchor(TextAnchor.CENTER_LEFT);
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
380 ta.setTextAnchor(TextAnchor.CENTER_LEFT);
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
381 plot.getRenderer().addAnnotation(ta);
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
382 }
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
383 }
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
384
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
385
bf3b3a8d089b Slightly improved rendering of annotations in LongitudinalSection-plots.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1028
diff changeset
386 /**
720
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
387 * This method overrides the XYChartGenerators zoomY method to include the 0
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
388 * value on the Q axis.
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
389 */
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
390 @Override
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
391 protected boolean zoomY(XYPlot plot, ValueAxis axis, Range range, Range x) {
734
56d70e546800 #174 Longitudinal section charts will now have an upper margin again.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 720
diff changeset
392 if (plot.getRangeAxisIndex(axis) == 1) {
56d70e546800 #174 Longitudinal section charts will now have an upper margin again.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 720
diff changeset
393 // we want the Q axis to start at 0 if no zooming has been done
56d70e546800 #174 Longitudinal section charts will now have an upper margin again.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 720
diff changeset
394 range = new Range(0d, range.getUpperBound());
720
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
395 }
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
396
734
56d70e546800 #174 Longitudinal section charts will now have an upper margin again.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 720
diff changeset
397 return super.zoomY(plot, axis, range, x);
720
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
398 }
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
399
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
400
d60cc6453d45 #161 Include the 0 on the second y axis (the Q axis) in longitudinal section charts intially.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 719
diff changeset
401 /**
422
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
402 * This method inverts the x-axis based on the kilometer information of the
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
403 * selected river. If the head of the river is at kilometer 0, the axis is
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
404 * not inverted, otherwise it is.
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
405 *
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
406 * @param xaxis The domain axis.
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
407 */
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
408 protected void invertXAxis(ValueAxis xaxis) {
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
409
745
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
410 if (inverted) {
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
411 logger.debug("Invert X-Axis.");
422
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
412 xaxis.setInverted(true);
3b83341e0cf4 ISSUE-52 The longitudinal section charts will now always have the head of the river at the left side.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 420
diff changeset
413 }
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
414 }
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
415
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
416
695
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
417 public void doOut(Artifact artifact, Facet facet, Document attr) {
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
418 String name = facet.getName();
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
419
695
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
420 logger.debug("LongitudinalSectionGenerator.doOut: " + name);
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
421
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
422 if (name == null) {
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
423 logger.error("No facet name for doOut(). No output generated!");
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
424 return;
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
425 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
426
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
427 FLYSArtifact flys = (FLYSArtifact) artifact;
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
428 Facet f = flys.getNativeFacet(facet);
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
429
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
430 if (f == null) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
431 return;
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
432 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
433
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
434 if (name.equals(LONGITUDINAL_W)) {
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
435 doWOut((WQKms) f.getData(artifact, context), attr);
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
436 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
437 else if (name.equals(LONGITUDINAL_Q)) {
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
438 doQOut((WQKms) f.getData(artifact, context), attr);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
439 }
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
440 else if (name.equals(LONGITUDINAL_ANNOTATION)) {
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
441 doAnnotationsOut(f.getData(artifact, context), attr);
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
442 }
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
443 else {
695
45cd58a2a2bb OutGenerators doOut() takes a facet object now instead of just its name.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 666
diff changeset
444 logger.warn("Unknown facet name: " + name);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
445 return;
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
446 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
447 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
448
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
449
1037
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
450 /**
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
451 * Register annotations available for the diagram.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
452 *
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
453 * @param o list of annotations (data of facet).
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
454 * @param theme ignored.
75cf1b11c97e Improved CustomAnnotation rendering.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 1036
diff changeset
455 */
1028
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
456 protected void doAnnotationsOut(Object o, Document theme) {
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
457 logger.debug("LongitudinalSectionGenerator.doAnnotationsOut");
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
458 this.annotations = (List<Annotation>) o;
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
459 }
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
460
10bafb4f46cc Made (kind of dummy-) Annotations in LongitudinalSection diagrams visible.
Felix Wolfsteller <felix.wolfsteller@intevation.de>
parents: 925
diff changeset
461
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
462 /**
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
463 * Process the output for W facets in a longitudinal section curve.
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
464 *
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
465 * @param wqkms An array of WQKms values.
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
466 * @param theme The theme that contains styling information.
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
467 */
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
468 protected void doWOut(WQKms wqkms, Document theme) {
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
469 logger.debug("LongitudinalSectionGenerator.doWOut");
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
470
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
471 XYSeries series = new StyledXYSeries(getSeriesName(wqkms, "W"), theme);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
472
719
035c0095b427 Draw correction curve again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 706
diff changeset
473 int size = wqkms.size();
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
474
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
475 if (logger.isDebugEnabled()) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
476 if (wqkms.size() > 0) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
477 logger.debug("Generate series: " + series.getKey());
925
0cb1a70b8b92 Added the math needed to calculate "W-Differenzen" in "Laengsschnitten"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 924
diff changeset
478 logger.debug("Start km: " + wqkms.getKm(0));
0cb1a70b8b92 Added the math needed to calculate "W-Differenzen" in "Laengsschnitten"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 924
diff changeset
479 logger.debug("End km: " + wqkms.getKm(size-1));
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
480 logger.debug("Values : " + size);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
481 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
482 }
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
483
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
484 for (int i = 0; i < size; i++) {
925
0cb1a70b8b92 Added the math needed to calculate "W-Differenzen" in "Laengsschnitten"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 924
diff changeset
485 series.add(wqkms.getKm(i), wqkms.getW(i));
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
486 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
487
923
7ca4a287cd0e #135 Modified the way to store datasets for different chart axes.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 745
diff changeset
488 addFirstAxisSeries(series);
745
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
489
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
490 if (wqkms.guessWaterIncreasing()) {
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
491 setInverted(true);
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
492 }
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
493 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
494
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
495
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
496 /**
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
497 * Process the output for Q facets in a longitudinal section curve.
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
498 *
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
499 * @param wqkms An array of WQKms values.
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
500 * @param theme The theme that contains styling information.
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
501 */
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
502 protected void doQOut(WQKms wqkms, Document theme) {
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
503 logger.debug("LongitudinalSectionGenerator.doQOut");
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
504
924
f7761914f745 An initial implementation to render chart series based on the XML configuration in themes.xml.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 923
diff changeset
505 XYSeries series = new StyledXYSeries(getSeriesName(wqkms, "Q"), theme);
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
506
719
035c0095b427 Draw correction curve again.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 706
diff changeset
507 int size = wqkms.size();
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
508
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
509 if (logger.isDebugEnabled()) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
510 if (wqkms.size() > 0) {
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
511 logger.debug("Generate series: " + series.getKey());
925
0cb1a70b8b92 Added the math needed to calculate "W-Differenzen" in "Laengsschnitten"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 924
diff changeset
512 logger.debug("Start km: " + wqkms.getKm(0));
0cb1a70b8b92 Added the math needed to calculate "W-Differenzen" in "Laengsschnitten"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 924
diff changeset
513 logger.debug("End km: " + wqkms.getKm(size-1));
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
514 logger.debug("Values : " + size);
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
515 }
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
516 }
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
517
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
518 for (int i = 0; i < size; i++) {
925
0cb1a70b8b92 Added the math needed to calculate "W-Differenzen" in "Laengsschnitten"
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 924
diff changeset
519 series.add(wqkms.getKm(i), wqkms.getQ(i));
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
520 }
696
708b270dfd30 OutGenerators use now facets to fetch necessary data.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 695
diff changeset
521
923
7ca4a287cd0e #135 Modified the way to store datasets for different chart axes.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 745
diff changeset
522 addSecondAxisSeries(series);
745
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
523
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
524 if (wqkms.guessWaterIncreasing()) {
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
525 setInverted(true);
f959faaa7c4a Fix for flys/issue150: Invert the x axis if its guessed that water is increasing.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 734
diff changeset
526 }
369
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
527 }
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
528
2ce7b473620e Implemented the chart creation of a longitudinal section chart - W and Q facets.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 364
diff changeset
529
448
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
530 protected String getSeriesName(WQKms wqkms, String mode) {
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
531 String name = wqkms.getName();
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
532 String prefix = name != null && name.indexOf(mode) >= 0 ? null : mode;
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
533
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
534 return prefix != null && prefix.length() > 0
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
535 ? prefix + "(" + name +")"
88d9e1d75d64 W and Q curves in longitudinal section curves will now have names.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents: 422
diff changeset
536 : name;
359
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
537 }
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
538 }
e5ea6a01526c Added an OutGenerator for creating longitudinal section curves.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
diff changeset
539 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org