diff flys-artifacts/src/main/java/de/intevation/flys/jfree/StableXYDifferenceRenderer.java @ 1824:982956bde69e

Added a dataset to zero mapper to circumvent shortcommings in XYDifferenceRenderer. flys-artifacts/trunk@3153 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Thu, 03 Nov 2011 12:28:38 +0000
parents 7a11b37d8594
children 0e9c0b49b4ef
line wrap: on
line diff
--- a/flys-artifacts/src/main/java/de/intevation/flys/jfree/StableXYDifferenceRenderer.java	Thu Nov 03 10:32:17 2011 +0000
+++ b/flys-artifacts/src/main/java/de/intevation/flys/jfree/StableXYDifferenceRenderer.java	Thu Nov 03 12:28:38 2011 +0000
@@ -73,8 +73,7 @@
  * 17-Jun-2008 : Apply legend shape, font and paint attributes (DG);
  *
  */
-
-package org.jfree.chart.renderer.xy;
+package de.intevation.flys.jfree;
 
 import java.awt.Color;
 import java.awt.Graphics2D;
@@ -89,6 +88,7 @@
 import java.io.ObjectOutputStream;
 import java.util.Collections;
 import java.util.LinkedList;
+import java.util.Iterator;
 
 import org.jfree.chart.LegendItem;
 import org.jfree.chart.axis.ValueAxis;
@@ -108,6 +108,10 @@
 import org.jfree.util.PublicCloneable;
 import org.jfree.util.ShapeUtilities;
 
+import org.jfree.chart.renderer.xy.AbstractXYItemRenderer;
+import org.jfree.chart.renderer.xy.XYItemRenderer;
+import org.jfree.chart.renderer.xy.XYItemRendererState;
+
 /**
  * A renderer for an {@link XYPlot} that highlights the differences between two
  * series.  The example shown here is generated by the
@@ -135,6 +139,8 @@
     /** The shape to display in the legend item. */
     private transient Shape legendLine;
 
+    private XYDatasetToZeroMapper mapper;
+
     /**
      * This flag controls whether or not the x-coordinates (in Java2D space)
      * are rounded to integers.  When set to true, this can avoid the vertical
@@ -150,7 +156,7 @@
      * Creates a new renderer with default attributes.
      */
     public StableXYDifferenceRenderer() {
-        this(Color.green, Color.red, false);
+        this(Color.green, Color.red, false, null);
     }
 
     /**
@@ -163,7 +169,8 @@
      * @param shapes  draw shapes?
      */
     public StableXYDifferenceRenderer(Paint positivePaint, Paint negativePaint,
-                                boolean shapes) {
+                                boolean shapes,
+                                XYDatasetToZeroMapper mapper) {
         if (positivePaint == null) {
             throw new IllegalArgumentException(
                     "Null 'positivePaint' argument.");
@@ -177,6 +184,7 @@
         this.shapesVisible = shapes;
         this.legendLine = new Line2D.Double(-7.0, 0.0, 7.0, 0.0);
         this.roundXCoordinates = false;
+        this.mapper = mapper;
     }
 
     /**
@@ -385,13 +393,35 @@
                          CrosshairState crosshairState,
                          int pass) {
 
-        if (pass == 0) {
-            drawItemPass0(g2, dataArea, info, plot, domainAxis, rangeAxis,
-                    dataset, series, item, crosshairState);
+        if (mapper == null) {
+            switch (pass) {
+                case 0:
+                    drawItemPass0(g2, dataArea, info, 
+                        plot, domainAxis, rangeAxis,
+                        dataset, series, item, crosshairState);
+                    break;
+                case 1:
+                    drawItemPass1(g2, dataArea, info,
+                        plot, domainAxis, rangeAxis,
+                        dataset, series, item, crosshairState);
+            }
         }
-        else if (pass == 1) {
-            drawItemPass1(g2, dataArea, info, plot, domainAxis, rangeAxis,
-                    dataset, series, item, crosshairState);
+        else {
+            for (Iterator<XYDataset> iter = mapper.iterator(dataset);
+                iter.hasNext();
+            ) {
+                switch (pass) {
+                    case 0:
+                        drawItemPass0(g2, dataArea, info, 
+                            plot, domainAxis, rangeAxis,
+                            dataset, series, item, crosshairState);
+                        break;
+                    case 1:
+                        drawItemPass1(g2, dataArea, info,
+                            plot, domainAxis, rangeAxis,
+                            dataset, series, item, crosshairState);
+                }
+            } // for all segments
         }
 
     }
@@ -1239,4 +1269,3 @@
         this.legendLine = SerialUtilities.readShape(stream);
     }
 }
-

http://dive4elements.wald.intevation.org