Mercurial > dive4elements > river
comparison flys-artifacts/src/main/java/de/intevation/flys/exports/InfoGeneratorHelper.java @ 648:d4c4fefb095b
The matrix that is used to transform chart image coordinates into chart coordinates supports inverted x-axis now.
flys-artifacts/trunk@2037 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Wed, 01 Jun 2011 09:18:00 +0000 |
parents | bb484489d3df |
children | ac1399d325e9 |
comparison
equal
deleted
inserted
replaced
647:bb484489d3df | 648:d4c4fefb095b |
---|---|
9 | 9 |
10 import org.apache.log4j.Logger; | 10 import org.apache.log4j.Logger; |
11 | 11 |
12 import org.jfree.chart.ChartRenderingInfo; | 12 import org.jfree.chart.ChartRenderingInfo; |
13 import org.jfree.chart.JFreeChart; | 13 import org.jfree.chart.JFreeChart; |
14 import org.jfree.chart.axis.ValueAxis; | |
14 import org.jfree.chart.plot.XYPlot; | 15 import org.jfree.chart.plot.XYPlot; |
15 import org.jfree.data.Range; | 16 import org.jfree.data.Range; |
16 | 17 |
17 import de.intevation.artifacts.common.ArtifactNamespaceContext; | 18 import de.intevation.artifacts.common.ArtifactNamespaceContext; |
18 import de.intevation.artifacts.common.utils.XMLUtils; | 19 import de.intevation.artifacts.common.utils.XMLUtils; |
84 | 85 |
85 Element tf = cr.create("transformation-matrix"); | 86 Element tf = cr.create("transformation-matrix"); |
86 | 87 |
87 Rectangle2D dataArea = info.getPlotInfo().getDataArea(); | 88 Rectangle2D dataArea = info.getPlotInfo().getDataArea(); |
88 | 89 |
89 XYPlot plot = (XYPlot) chart.getPlot(); | 90 XYPlot plot = (XYPlot) chart.getPlot(); |
90 Range xRange = plot.getDomainAxis().getRange(); | 91 ValueAxis xAxis = plot.getDomainAxis(); |
91 Range yRange = plot.getRangeAxis().getRange(); | 92 ValueAxis yAxis = plot.getRangeAxis(); |
92 | 93 |
93 double[] tm = createTransformationMatrix(dataArea, xRange, yRange); | 94 double[] tm = createTransformationMatrix(dataArea, xAxis, yAxis); |
94 | 95 |
95 cr.addAttr(tf, "sx", String.valueOf(tm[0]), true); | 96 cr.addAttr(tf, "sx", String.valueOf(tm[0]), true); |
96 cr.addAttr(tf, "sy", String.valueOf(tm[1]), true); | 97 cr.addAttr(tf, "sy", String.valueOf(tm[1]), true); |
97 cr.addAttr(tf, "tx", String.valueOf(tm[2]), true); | 98 cr.addAttr(tf, "tx", String.valueOf(tm[2]), true); |
98 cr.addAttr(tf, "ty", String.valueOf(tm[3]), true); | 99 cr.addAttr(tf, "ty", String.valueOf(tm[3]), true); |
111 * | 112 * |
112 * @return a double array as follows: [sx, sy, tx, ty]. | 113 * @return a double array as follows: [sx, sy, tx, ty]. |
113 */ | 114 */ |
114 protected static double[] createTransformationMatrix( | 115 protected static double[] createTransformationMatrix( |
115 Rectangle2D dataArea, | 116 Rectangle2D dataArea, |
116 Range xRange, | 117 ValueAxis xAxis, |
117 Range yRange) | 118 ValueAxis yAxis) |
118 { | 119 { |
120 logger.debug("InfoGeneratorHelper.createTransformationMatrix"); | |
121 | |
119 double offsetX = dataArea.getX(); | 122 double offsetX = dataArea.getX(); |
120 double width = dataArea.getWidth() - 1; | 123 double width = dataArea.getWidth() - 1; |
121 double offsetY = dataArea.getY(); | 124 double offsetY = dataArea.getY(); |
122 double height = dataArea.getHeight(); | 125 double height = dataArea.getHeight(); |
123 | 126 |
127 Range xRange = xAxis.getRange(); | |
128 Range yRange = yAxis.getRange(); | |
129 | |
124 double lowerX = xRange.getLowerBound(); | 130 double lowerX = xRange.getLowerBound(); |
125 double upperX = xRange.getUpperBound(); | 131 double upperX = xRange.getUpperBound(); |
126 double lowerY = yRange.getLowerBound(); | 132 double lowerY = yRange.getLowerBound(); |
127 double upperY = yRange.getUpperBound(); | 133 double upperY = yRange.getUpperBound(); |
134 | |
135 if (xAxis.isInverted()) { | |
136 logger.info("X-Axis is inverted!"); | |
137 | |
138 double tmp = upperX; | |
139 upperX = lowerX; | |
140 lowerX = tmp; | |
141 } | |
128 | 142 |
129 double dMoveX = upperX - lowerX; | 143 double dMoveX = upperX - lowerX; |
130 double fMoveX = width * lowerX; | 144 double fMoveX = width * lowerX; |
131 double dMoveY = lowerY - upperY; | 145 double dMoveY = lowerY - upperY; |
132 double fMoveY = height * upperY; | 146 double fMoveY = height * upperY; |