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;

http://dive4elements.wald.intevation.org