annotate artifacts/src/main/java/org/dive4elements/river/exports/LongitudinalSectionGenerator2.java @ 8722:a83d519155ab

(issue1754) Do not base smoothing radius on calculation range Using the calculation parameters for startkm and endkm in the case that the domain axis had the default extend caused weird behavior when zooming and led to too large radius values for most data that only had valid values on a subset of the caluclation range.
author Andre Heinecke <andre.heinecke@intevation.de>
date Tue, 28 Apr 2015 14:22:47 +0200
parents cfb3a4d0c637
children 686d8876edf9
rev   line source
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
2 * Software engineering by Intevation GmbH
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
3 *
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
6 * documentation coming with Dive4Elements River for details.
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
7 */
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
8
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
9 package org.dive4elements.river.exports;
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
10
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
11 import org.dive4elements.river.artifacts.D4EArtifact;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
12 import org.dive4elements.artifactdatabase.state.ArtifactAndFacet;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
13 import org.dive4elements.river.artifacts.access.RangeAccess;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
14 import org.dive4elements.river.jfree.Bounds;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
15 import org.dive4elements.river.jfree.DoubleBounds;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
16 import org.dive4elements.river.themes.ThemeDocument;
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
17
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
18 public class LongitudinalSectionGenerator2 extends DiagramGenerator
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
19 {
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
20 public static final String I18N_CHART_SHORT_SUBTITLE =
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
21 "chart.longitudinal.section.shortsubtitle";
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
22
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
23 public static final String I18N_CHART_LOCATION_SUBTITLE =
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
24 "chart.longitudinal.section.locsubtitle";
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
25
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
26 @Override
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
27 public String getDefaultChartSubtitle() {
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
28 double[] dist = getRange();
7807
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
29 String parts = "";
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
30 if (subTitleParts != null && !subTitleParts.isEmpty()) {
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
31 for (String p : subTitleParts) {
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
32 parts += ", " + p;
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
33 }
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
34 }
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
35 if (dist == null || dist.length != 2 ||
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
36 Double.isNaN(dist[0]) || Double.isNaN(dist[1])) {
7118
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
37 Object [] args = new Object[] {getRiverName()};
7807
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
38 return msg(I18N_CHART_SHORT_SUBTITLE, "", args) + parts;
7118
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
39 }
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
40
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
41 if (Math.abs(dist[0] - dist[1]) < 1E-5) {
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
42 Object [] args = new Object[] {getRiverName(), dist[1]};
7807
ad4a3980092f Concatenate the subtitle parts and add them to the default subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7168
diff changeset
43 return msg(I18N_CHART_LOCATION_SUBTITLE, "", args) + parts;
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
44 }
7118
4605d6ca4ee9 Removed obsolete imports. Minor code cosmetics.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7107
diff changeset
45
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
46 return super.getDefaultChartSubtitle();
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
47 }
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
48
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
49 /* We override doOut here to save the startkm and endkm in the
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
50 * context. Some facets will deliver different data because of
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
51 * that setting. It is mainly used in MINFO where it causes
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
52 * adaptive smoothing on the data if you are zoomed out do
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
53 * reduce the static in the curve. */
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
54 @Override
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
55 public void doOut(
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
56 ArtifactAndFacet bundle,
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
57 ThemeDocument theme,
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
58 boolean visible
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
59 ) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
60 /* Aheinecke (25.09.2013): I do not understand why this has to be
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
61 * done so difficult and if it really must be done for every
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
62 * facet. At least it has to be done _before_ the super class
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
63 * actually does the output and accesses the facet data.
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
64 */
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
65 D4EArtifact artifact = (D4EArtifact)bundle.getArtifact();
8165
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7877
diff changeset
66 Object ctxV = context.getContextValue("bounds_defined");
cfb3a4d0c637 Added new diagramm generator for Q symmetry.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 7877
diff changeset
67 if (ctxV != null && (Boolean)ctxV) {
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7807
diff changeset
68 super.doOut(bundle, theme, visible);
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7807
diff changeset
69 return;
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7807
diff changeset
70 }
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
71 if (getXBounds(0) != null && getDomainAxisRange() != null) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
72 Bounds bounds =
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
73 calculateZoom(getXBounds(0), getDomainAxisRange());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
74 context.putContextValue("startkm", bounds.getLower());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
75 context.putContextValue("endkm", bounds.getUpper());
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7807
diff changeset
76 context.putContextValue("bounds_defined", true);
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
77 }
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
78 else if (getXBounds(0) != null && getDomainAxisRange() == null) {
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
79 context.putContextValue("startkm", getXBounds(0).getLower());
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
80 context.putContextValue("endkm", getXBounds(0).getUpper());
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7807
diff changeset
81 context.putContextValue("bounds_defined", true);
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
82 }
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
83 else if (getXBounds(0) == null && getDomainAxisRange() != null){
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
84 RangeAccess access = new RangeAccess(artifact);
7168
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
85 if (access.hasFrom() && access.hasTo()) {
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
86 Bounds b = new DoubleBounds(access.getFrom(), access.getTo());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
87 Bounds bounds =
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
88 calculateZoom(b, getDomainAxisRange());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
89 context.putContextValue("startkm", bounds.getLower());
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
90 context.putContextValue("endkm", bounds.getUpper());
7877
43f18dc56c5a Fixed subtitle handling and added flowvelocity subtitle.
Raimund Renkert <rrenkert@intevation.de>
parents: 7807
diff changeset
91 context.putContextValue("bounds_defined", true);
7168
81416a62fa57 Saveguard range access in case an artifact has no range
Andre Heinecke <aheinecke@intevation.de>
parents: 7157
diff changeset
92 }
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
93 }
8722
a83d519155ab (issue1754) Do not base smoothing radius on calculation range
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8165
diff changeset
94 /*
a83d519155ab (issue1754) Do not base smoothing radius on calculation range
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8165
diff changeset
95 else if (getXBounds(0) == null && getDomainAxisRange() == null) {
a83d519155ab (issue1754) Do not base smoothing radius on calculation range
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8165
diff changeset
96 .. In this case the automatic zoom of the diagram will provide
a83d519155ab (issue1754) Do not base smoothing radius on calculation range
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8165
diff changeset
97 decent values for the zooom calculation.
a83d519155ab (issue1754) Do not base smoothing radius on calculation range
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8165
diff changeset
98 }
a83d519155ab (issue1754) Do not base smoothing radius on calculation range
Andre Heinecke <andre.heinecke@intevation.de>
parents: 8165
diff changeset
99 */
7157
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
100 super.doOut(bundle, theme, visible);
ab109ae2acc6 Add startkm and endkm setting to longitudinal section generator 2
Andre Heinecke <aheinecke@intevation.de>
parents: 7118
diff changeset
101 }
7105
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
102 }
ab57b6eee71c Add refactored LongitudinalSectionGenerator2 that inherits DiagramGenerator
Andre Heinecke <aheinecke@intevation.de>
parents:
diff changeset
103 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org