annotate artifacts/src/main/java/org/dive4elements/river/jfree/AnnotationHelper.java @ 7088:41567bf1e131 generator-refactoring

Removed obsolete imports.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 22 Sep 2013 21:29:35 +0200
parents 35aabc86566d
children 432addd00687
rev   line source
7043
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 *
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8 package org.dive4elements.river.jfree;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10 import org.dive4elements.river.themes.ThemeDocument;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
11
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
12 import java.util.List;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
13 import java.util.Map;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
14
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
15 import java.awt.BasicStroke;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
16 import java.awt.Color;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
17 import java.awt.Font;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
18
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
19 import org.jfree.ui.TextAnchor;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20 import org.jfree.chart.plot.XYPlot;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
21 import org.jfree.chart.LegendItem;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22 import org.jfree.chart.LegendItemCollection;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23 import org.jfree.chart.annotations.XYTextAnnotation;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 import org.jfree.chart.annotations.XYLineAnnotation;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
26 import org.dive4elements.river.themes.LineStyle;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
27 import org.dive4elements.river.themes.TextStyle;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
28 import org.dive4elements.river.exports.ChartSettings;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
29 import org.dive4elements.river.exports.LegendSection;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
30 import org.dive4elements.river.exports.ChartArea;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
31
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
32 import org.apache.log4j.Logger;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
33
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
34 /** Annotation helper class, handles plotting of annotations. */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 public class AnnotationHelper {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
36 private static final Logger logger = Logger.getLogger(AnnotationHelper.class);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
37
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
38 protected static float ANNOTATIONS_AXIS_OFFSET = 0.02f;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
39
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
40 /* arr this would be better in chartsettings */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
41 public static final int DEFAULT_FONT_SIZE = 12;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
42 public static final String DEFAULT_FONT_NAME = "Tahoma";
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
43
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44 /**
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
45 * Add annotations (Sticky, Text and hyk zones) to a plot.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
46 * @param annotations Annotations to add
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
47 * @param plot Plot to add annotations to.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
48 * @param settings ChartSettings object for settings.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
49 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
50 public static void addAnnotationsToRenderer(List<RiverAnnotation> annotations,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
51 XYPlot plot, ChartSettings settings, Map<Integer, AxisDataset> datasets) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
52 logger.debug("addAnnotationsToRenderer");
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
53
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
54 if (annotations == null || annotations.isEmpty()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
55 logger.debug("addAnnotationsToRenderer: no annotations.");
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
56 return;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
57 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
58
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
59 // OPTMIMIZE: Pre-calculate positions
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
60 ChartArea area = new ChartArea(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
61 plot.getDomainAxis(0).getRange(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
62 plot.getRangeAxis().getRange());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
63
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
64 // Walk over all Annotation sets.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
65 for (RiverAnnotation fa: annotations) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
66
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
67 // Access text styling, if any.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
68 ThemeDocument theme = fa.getTheme();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
69 TextStyle textStyle = null;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
70 LineStyle lineStyle = null;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
71
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
72 // Get Themeing information and add legend item.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
73 if (theme != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
74 textStyle = theme.parseComplexTextStyle();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
75 lineStyle = theme.parseComplexLineStyle();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
76 if (fa.getLabel() != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
77 // Legend handling, maybe misplaced?
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
78 LegendItemCollection lic = new LegendItemCollection();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
79 LegendItemCollection old = plot.getFixedLegendItems();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
80
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
81 Color color = theme.parseLineColorField();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
82 if (color == null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
83 color = Color.BLACK;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
84 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
85
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
86 LegendItem newItem = new LegendItem(fa.getLabel(), color);
7070
35aabc86566d Add NPE guard
Andre Heinecke <aheinecke@intevation.de>
parents: 7043
diff changeset
87 LegendSection ls = (settings != null ?
35aabc86566d Add NPE guard
Andre Heinecke <aheinecke@intevation.de>
parents: 7043
diff changeset
88 settings.getLegendSection() : null);
7043
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
89 newItem.setLabelFont (new Font(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
90 DEFAULT_FONT_NAME,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
91 Font.PLAIN,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
92 ls != null ? ls.getFontSize() : null)
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
93 );
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
94
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
95 lic.add(newItem);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
96 // (Re-)Add prior legend entries.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
97 if (old != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
98 old.addAll(lic);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
99 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
100 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
101 old = lic;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
102 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
103 plot.setFixedLegendItems(old);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
104 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
105 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
106
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
107 // The 'Sticky' Annotations (at axis, with line and text).
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
108 for (StickyAxisAnnotation sta: fa.getAxisTextAnnotations()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
109 addStickyAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
110 sta, plot, area, lineStyle, textStyle, theme,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
111 datasets.get(new Integer(sta.getAxisSymbol())));
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
112 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
113
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
114 // Other Text Annotations (e.g. labels of (manual) points).
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
115 for (XYTextAnnotation ta: fa.getTextAnnotations()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
116 // Style the text.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
117 if (textStyle != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
118 textStyle.apply(ta);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
119 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
120 ta.setY(area.above(0.05d, ta.getY()));
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
121 plot.getRenderer().addAnnotation(ta, org.jfree.ui.Layer.FOREGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
122 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
123 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
124 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
125
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
126 /**
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
127 * Add a text and a line annotation.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
128 * @param area convenience to determine positions in plot.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
129 * @param theme (optional) theme document
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
130 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
131 public static void addStickyAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
132 StickyAxisAnnotation annotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
133 XYPlot plot,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
134 ChartArea area,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
135 LineStyle lineStyle,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
136 TextStyle textStyle,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
137 ThemeDocument theme,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
138 AxisDataset dataset
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
139 ) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
140 // OPTIMIZE pre-calculate area-related values
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
141 final float TEXT_OFF = 0.03f;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
142
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
143 XYLineAnnotation lineAnnotation = null;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
144 XYTextAnnotation textAnnotation = null;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
145
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
146 int rendererIndex = 0;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
147
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
148 if (annotation.atX()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
149 textAnnotation = new CollisionFreeXYTextAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
150 annotation.getText(), annotation.getPos(), area.ofGround(TEXT_OFF));
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
151 // OPTIMIZE externalize the calculation involving PI.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
152 //textAnnotation.setRotationAngle(270f*Math.PI/180f);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
153 lineAnnotation = createGroundStickAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
154 area, annotation.getPos(), lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
155 textAnnotation.setRotationAnchor(TextAnchor.CENTER_LEFT);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
156 textAnnotation.setTextAnchor(TextAnchor.CENTER_LEFT);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
157 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
158 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
159 // Do the more complicated case where we stick to the Y-Axis.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
160 // There is one nasty case (duration curves, where annotations
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
161 // might stick to the second y-axis).
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
162 if (dataset == null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
163 logger.warn("Annotation should stick to unfindable y-axis: "
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
164 + annotation.getAxisSymbol());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
165 rendererIndex = 0;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
166 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
167 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
168 rendererIndex = dataset.getPlotAxisIndex();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
169 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
170
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
171 // Stick to the "right" (opposed to left) Y-Axis.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
172 if (rendererIndex != 0) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
173 // OPTIMIZE: Pass a different area to this function,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
174 // do the adding to renderer outside (let this
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
175 // function return the annotations).
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
176 // Note that this path is travelled rarely.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
177 ChartArea area2 = new ChartArea(plot.getDomainAxis(), plot.getRangeAxis(rendererIndex));
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
178 textAnnotation = new CollisionFreeXYTextAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
179 annotation.getText(), area2.ofRight(TEXT_OFF), annotation.getPos());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
180 textAnnotation.setRotationAnchor(TextAnchor.CENTER_RIGHT);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
181 textAnnotation.setTextAnchor(TextAnchor.CENTER_RIGHT);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
182 lineAnnotation = createRightStickAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
183 area2, annotation.getPos(), lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
184 if (!Float.isNaN(annotation.getHitPoint()) && theme != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
185 // New line annotation to hit curve.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
186 if (theme.parseShowVerticalLine()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
187 XYLineAnnotation hitLineAnnotation =
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
188 createStickyLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
189 StickyAxisAnnotation.SimpleAxis.X_AXIS,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
190 annotation.getHitPoint(), annotation.getPos(),// annotation.getHitPoint(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
191 area2, lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
192 plot.getRenderer(rendererIndex).addAnnotation(hitLineAnnotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
193 org.jfree.ui.Layer.BACKGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
194 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
195 if (theme.parseShowHorizontalLine()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
196 XYLineAnnotation lineBackAnnotation =
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
197 createStickyLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
198 StickyAxisAnnotation.SimpleAxis.Y_AXIS2,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
199 annotation.getPos(), annotation.getHitPoint(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
200 area2, lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
201 plot.getRenderer(rendererIndex).addAnnotation(lineBackAnnotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
202 org.jfree.ui.Layer.BACKGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
203 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
204 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
205 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
206 else { // Stick to the left y-axis.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
207 textAnnotation = new CollisionFreeXYTextAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
208 annotation.getText(), area.ofLeft(TEXT_OFF), annotation.getPos());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
209 textAnnotation.setRotationAnchor(TextAnchor.CENTER_LEFT);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
210 textAnnotation.setTextAnchor(TextAnchor.CENTER_LEFT);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
211 lineAnnotation = createLeftStickAnnotation(area, annotation.getPos(), lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
212 if (!Float.isNaN(annotation.getHitPoint()) && theme != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
213 // New line annotation to hit curve.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
214 if (theme.parseShowHorizontalLine()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
215 XYLineAnnotation hitLineAnnotation =
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
216 createStickyLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
217 StickyAxisAnnotation.SimpleAxis.Y_AXIS,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
218 annotation.getPos(), annotation.getHitPoint(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
219 area, lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
220 plot.getRenderer(rendererIndex).addAnnotation(hitLineAnnotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
221 org.jfree.ui.Layer.BACKGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
222 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
223 if (theme.parseShowVerticalLine()) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
224 XYLineAnnotation lineBackAnnotation =
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
225 createStickyLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
226 StickyAxisAnnotation.SimpleAxis.X_AXIS,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
227 annotation.getHitPoint(), annotation.getPos(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
228 area, lineStyle);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
229 plot.getRenderer(rendererIndex).addAnnotation(lineBackAnnotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
230 org.jfree.ui.Layer.BACKGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
231 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
232 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
233 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
234 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
235
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
236 // Style the text.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
237 if (textStyle != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
238 textStyle.apply(textAnnotation);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
239 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
240
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
241 // Add the Annotations to renderer.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
242 plot.getRenderer(rendererIndex).addAnnotation(textAnnotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
243 org.jfree.ui.Layer.FOREGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
244 plot.getRenderer(rendererIndex).addAnnotation(lineAnnotation,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
245 org.jfree.ui.Layer.FOREGROUND);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
246 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
247
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
248 /**
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
249 * Create annotation that sticks to "ground" (X) axis.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
250 * @param area helper to calculate coordinates
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
251 * @param pos one-dimensional position (distance from axis)
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
252 * @param lineStyle the line style to use for the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
253 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
254 public static XYLineAnnotation createGroundStickAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
255 ChartArea area, float pos, LineStyle lineStyle
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
256 ) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
257 // Style the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
258 if (lineStyle != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
259 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
260 pos, area.atGround(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
261 pos, area.ofGround(ANNOTATIONS_AXIS_OFFSET),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
262 new BasicStroke(lineStyle.getWidth()),lineStyle.getColor());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
263 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
264 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
265 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
266 pos, area.atGround(),
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
267 pos, area.ofGround(ANNOTATIONS_AXIS_OFFSET));
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
268 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
269 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
270
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
271
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
272 /**
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
273 * Create annotation that sticks to the second Y axis ("right").
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
274 * @param area helper to calculate coordinates
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
275 * @param pos one-dimensional position (distance from axis)
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
276 * @param lineStyle the line style to use for the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
277 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
278 public static XYLineAnnotation createRightStickAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
279 ChartArea area, float pos, LineStyle lineStyle
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
280 ) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
281 // Style the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
282 if (lineStyle != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
283 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
284 area.ofRight(ANNOTATIONS_AXIS_OFFSET), pos,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
285 area.atRight(), pos,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
286 new BasicStroke(lineStyle.getWidth()), lineStyle.getColor());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
287 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
288 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
289 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
290 area.atRight(), pos,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
291 area.ofRight(ANNOTATIONS_AXIS_OFFSET), pos);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
292 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
293 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
294 /**
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
295 * Create annotation that sticks to the first Y axis ("left").
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
296 * @param area helper to calculate coordinates
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
297 * @param pos one-dimensional position (distance from axis)
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
298 * @param lineStyle the line style to use for the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
299 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
300 public static XYLineAnnotation createLeftStickAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
301 ChartArea area, float pos, LineStyle lineStyle
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
302 ) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
303 // Style the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
304 if (lineStyle != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
305 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
306 area.atLeft(), pos,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
307 area.ofLeft(ANNOTATIONS_AXIS_OFFSET), pos,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
308 new BasicStroke(lineStyle.getWidth()), lineStyle.getColor());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
309 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
310 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
311 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
312 area.atLeft(), pos,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
313 area.ofLeft(ANNOTATIONS_AXIS_OFFSET), pos);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
314 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
315 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
316
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
317
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
318 /**
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
319 * Create a line from a axis to a given point.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
320 * @param axis The "simple" axis.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
321 * @param fromD1 from-location in first dimension.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
322 * @param toD2 to-location in second dimension.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
323 * @param area helper to calculate offsets.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
324 * @param lineStyle optional line style.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
325 */
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
326 public static XYLineAnnotation createStickyLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
327 StickyAxisAnnotation.SimpleAxis axis, float fromD1, float toD2,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
328 ChartArea area, LineStyle lineStyle
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
329 ) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
330 double anchorX1 = 0d, anchorX2 = 0d, anchorY1 = 0d, anchorY2 = 0d;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
331 switch(axis) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
332 case X_AXIS:
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
333 anchorX1 = fromD1;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
334 anchorX2 = fromD1;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
335 anchorY1 = area.atGround();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
336 anchorY2 = toD2;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
337 break;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
338 case Y_AXIS:
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
339 anchorX1 = area.atLeft();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
340 anchorX2 = toD2;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
341 anchorY1 = fromD1;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
342 anchorY2 = fromD1;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
343 break;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
344 case Y_AXIS2:
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
345 anchorX1 = area.atRight();
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
346 anchorX2 = toD2;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
347 anchorY1 = fromD1;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
348 anchorY2 = fromD1;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
349 break;
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
350 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
351 // Style the line.
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
352 if (lineStyle != null) {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
353 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
354 anchorX1, anchorY1,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
355 anchorX2, anchorY2,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
356 new BasicStroke(lineStyle.getWidth()), lineStyle.getColor());
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
357 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
358 else {
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
359 return new XYLineAnnotation(
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
360 anchorX1, anchorY1,
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
361 anchorX2, anchorY2);
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
362 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
363 }
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
364
06a9a241faac Factor out annotation handling code
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
365 };

http://dive4elements.wald.intevation.org