# HG changeset patch
# User gernotbelger
# Date 1530037156 -7200
# Node ID 77eb4553245b681ad47b70b34bd8c2b41f6ae226
# Parent 5dacb6ea75a1efddcab52b03aae6be7e3ad0d6dc
Fixed: waterlevels could not show a band any more
Correctly implemented 'showarea' on area themes now
diff -r 5dacb6ea75a1 -r 77eb4553245b artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java Tue Jun 26 20:18:18 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StableXYDifferenceRenderer.java Tue Jun 26 20:19:16 2018 +0200
@@ -87,23 +87,26 @@
import java.awt.BasicStroke;
import java.awt.Color;
-import java.awt.Graphics2D;
import java.awt.Font;
+import java.awt.Graphics2D;
import java.awt.Paint;
-import java.awt.geom.Point2D;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.GeneralPath;
import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
+import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
+import org.apache.log4j.Logger;
+import org.dive4elements.river.artifacts.math.Linear;
import org.jfree.chart.LegendItem;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.EntityCollection;
@@ -114,50 +117,42 @@
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.PlotRenderingInfo;
import org.jfree.chart.plot.XYPlot;
+import org.jfree.chart.renderer.xy.AbstractXYItemRenderer;
+import org.jfree.chart.renderer.xy.XYItemRendererState;
import org.jfree.chart.urls.XYURLGenerator;
+import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;
-import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.io.SerialUtilities;
import org.jfree.ui.RectangleEdge;
import org.jfree.util.PaintUtilities;
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;
-
import gnu.trove.TDoubleArrayList;
-import org.dive4elements.river.artifacts.math.Linear;
-
-import java.text.NumberFormat;
-
-import org.apache.log4j.Logger;
-
/**
* A renderer for an {@link XYPlot} that highlights the differences between two
- * series. The example shown here is generated by the
+ * series. The example shown here is generated by the
* DifferenceChartDemo1.java
program included in the JFreeChart
* demo collection:
- *
+ *
+ *
*
*/
-public class StableXYDifferenceRenderer extends AbstractXYItemRenderer
- implements XYItemRenderer, PublicCloneable {
+public class StableXYDifferenceRenderer extends AbstractXYItemRenderer implements PublicCloneable {
- private static Logger log = Logger.getLogger(
- StableXYDifferenceRenderer.class);
+ private static Logger log = Logger.getLogger(StableXYDifferenceRenderer.class);
public static final int CALCULATE_POSITIVE_AREA = 1;
public static final int CALCULATE_NEGATIVE_AREA = 2;
- public static final int CALCULATE_ALL_AREA =
- CALCULATE_POSITIVE_AREA | CALCULATE_NEGATIVE_AREA;
+ public static final int CALCULATE_ALL_AREA = CALCULATE_POSITIVE_AREA | CALCULATE_NEGATIVE_AREA;
/** For serialization. */
private static final long serialVersionUID = -8447915602375584857L;
+ private boolean drawArea = true;
+
/** The paint used to highlight positive differences (y(0) > y(1)). */
private transient Paint positivePaint;
@@ -168,225 +163,160 @@
private boolean shapesVisible;
/** Display shapes at each point? */
- protected boolean drawOutline;
+ private boolean drawOutline;
/** Which stroke to draw outline with? */
- protected Stroke outlineStroke;
+ private Stroke outlineStroke;
/** Which paint to draw outline with? */
- protected Paint outlinePaint;
+ private Paint outlinePaint;
/** The shape to display in the legend item. */
private transient Shape legendShape;
- protected boolean drawOriginalSeries;
+ private final boolean drawOriginalSeries;
/** The color of the label showing the calculated area. */
- protected Color labelColor;
+ private Color labelColor;
/** The background color of the label showing the calculated area. */
- protected Color labelBGColor;
+ private Color labelBGColor;
/** Font to draw label of calculated area with. */
- protected Font labelFont;
+ private Font labelFont;
/** Template to create i18ned label for area. */
- protected String areaLabelTamplate;
+ private String areaLabelTamplate;
/** NumberFormat to use for area. */
- protected NumberFormat areaLabelNumberFormat;
+ private NumberFormat areaLabelNumberFormat;
- protected int areaCalculationMode;
+ private int areaCalculationMode;
- protected double positiveArea;
- protected double negativeArea;
+ private double positiveArea;
+
+ private double negativeArea;
/** Whether or not to draw a label in the area. */
- protected boolean labelArea = true;
-
+ private boolean labelArea = true;
/** Arithmetic centroid of drawn polygons. */
- protected Point2D.Double centroid;
-
+ private Point2D.Double centroid;
/** Number of points that contributed to the centroid. */
- protected int centroidNPoints = 0;
-
+ private int centroidNPoints = 0;
/**
* 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
- * striping that anti-aliasing can generate. However, the rounding may not
+ * are rounded to integers. When set to true, this can avoid the vertical
+ * striping that anti-aliasing can generate. However, the rounding may not
* be appropriate for output in high resolution formats (for example,
* vector graphics formats such as SVG and PDF).
*
* @since 1.0.4
*/
- private boolean roundXCoordinates;
+ private final boolean roundXCoordinates;
/**
* Creates a new renderer with default attributes.
*/
public StableXYDifferenceRenderer() {
- this(Color.green, Color.red, false /*, null */);
- }
-
- public StableXYDifferenceRenderer(Paint positivePaint, Paint negativePaint,
- boolean shapes) {
- this(positivePaint, negativePaint, shapes, CALCULATE_ALL_AREA);
+ this(Color.green, Color.red, false, CALCULATE_ALL_AREA);
}
/**
* Creates a new renderer.
*
- * @param positivePaint the highlight color for positive differences
- * (null
not permitted).
- * @param negativePaint the highlight color for negative differences
- * (null
not permitted).
- * @param shapes draw shapes?
+ * @param positivePaint
+ * the highlight color for positive differences
+ * (null
not permitted).
+ * @param negativePaint
+ * the highlight color for negative differences
+ * (null
not permitted).
+ * @param shapes
+ * draw shapes?
*/
- public StableXYDifferenceRenderer(Paint positivePaint, Paint negativePaint,
- boolean shapes, int areaCalculationMode) {
+ private StableXYDifferenceRenderer(final Paint positivePaint, final Paint negativePaint, final boolean shapes, final int areaCalculationMode) {
if (positivePaint == null) {
- throw new IllegalArgumentException(
- "Null 'positivePaint' argument.");
+ throw new IllegalArgumentException("Null 'positivePaint' argument.");
}
if (negativePaint == null) {
- throw new IllegalArgumentException(
- "Null 'negativePaint' argument.");
+ throw new IllegalArgumentException("Null 'negativePaint' argument.");
}
this.positivePaint = positivePaint;
this.negativePaint = negativePaint;
this.shapesVisible = shapes;
- this.legendShape = new Rectangle2D.Double(-3.0, -3.0, 10.0, 10.0);
+ this.legendShape = new Rectangle2D.Double(-3.0, -3.0, 10.0, 10.0);
this.roundXCoordinates = false;
- this.drawOutline = true;
+ this.drawOutline = true;
this.outlineStroke = new BasicStroke(1);
- this.outlinePaint = Color.black;
+ this.outlinePaint = Color.black;
this.drawOriginalSeries = false;
this.areaCalculationMode = areaCalculationMode;
- this.labelBGColor = null;
- this.centroid = new Point2D.Double(0,0);
+ this.labelBGColor = null;
+ this.centroid = new Point2D.Double(0, 0);
}
- public int getAreaCalculationMode() {
- return areaCalculationMode;
- }
-
- public void setAreaCalculationMode(int areaCalculationMode) {
+ public void setAreaCalculationMode(final int areaCalculationMode) {
this.areaCalculationMode = areaCalculationMode;
}
-
/** Set template to use to create area label (e.g. 'Area=%dm2'). */
- public void setAreaLabelTemplate(String areaTemplate) {
+ public void setAreaLabelTemplate(final String areaTemplate) {
this.areaLabelTamplate = areaTemplate;
}
-
- public void setAreaLabelNumberFormat(NumberFormat nf) {
+ public void setAreaLabelNumberFormat(final NumberFormat nf) {
this.areaLabelNumberFormat = nf;
}
-
- public boolean isLabelArea() {
- return this.labelArea;
- }
-
- public void setLabelArea(boolean label) {
+ public void setLabelArea(final boolean label) {
this.labelArea = label;
}
-
/** Set font to paint label with. */
- public void setLabelFont(Font font) {
+ public void setLabelFont(final Font font) {
this.labelFont = font;
}
-
- /** Get font with which label is painted. */
- public Font getLabelFont() {
- return this.labelFont;
- }
-
-
/** Set color with which to paint label. */
- public void setLabelColor(Color color) {
+ public void setLabelColor(final Color color) {
this.labelColor = color;
}
-
- /** Get color with which label is painted. */
- public Color getLabelColor() {
- return this.labelColor;
- }
-
-
/** Set color with which to paint label bg. */
- public void setLabelBGColor(Color color) {
+ public void setLabelBGColor(final Color color) {
this.labelBGColor = color;
}
-
- /** Get color with which label is painted. */
- public Color getLabelBGColor() {
- return this.labelBGColor;
- }
-
-
- public double getCalculatedArea() {
- return positiveArea + negativeArea;
- }
-
/**
* Sets color that is used if drawOutline is true.
*/
- public void setOutlinePaint(Paint outlinePaint) {
+ @Override
+ public void setOutlinePaint(final Paint outlinePaint) {
this.outlinePaint = outlinePaint;
}
-
- /**
- * Gets color which is used if drawOutline is true.
- */
- public Paint getOutlinePaint() {
- return this.outlinePaint;
- }
-
-
/**
* Sets Stroke that is used if drawOutline is true.
*/
- public void setOutlineStroke(Stroke stroke) {
+ @Override
+ public void setOutlineStroke(final Stroke stroke) {
this.outlineStroke = stroke;
}
-
- /**
- * Returns Stroke that is used if drawOutline is true.
- */
- public Stroke getOutlineStroke() {
- return this.outlineStroke;
- }
-
-
/**
* Whether or not to draw the 'Shape' of the area (in contrast to
* shapes at data items).
*/
- public void setDrawOutline(boolean doDrawOutline) {
+ public void setDrawOutline(final boolean doDrawOutline) {
this.drawOutline = doDrawOutline;
}
-
- /**
- * Returns whether or not to draw the shape of the outline.
- */
- public boolean getDrawOutline() {
- return this.drawOutline;
+ public void setDrawArea(final boolean doDrawArea) {
+ this.drawArea = doDrawArea;
}
-
/**
* Returns the paint used to highlight positive differences.
*
@@ -394,7 +324,7 @@
*
* @see #setPositivePaint(Paint)
*/
- public Paint getPositivePaint() {
+ private Paint getPositivePaint() {
return this.positivePaint;
}
@@ -402,11 +332,12 @@
* Sets the paint used to highlight positive differences and sends a
* {@link RendererChangeEvent} to all registered listeners.
*
- * @param paint the paint (null
not permitted).
+ * @param paint
+ * the paint (null
not permitted).
*
* @see #getPositivePaint()
*/
- public void setPositivePaint(Paint paint) {
+ public void setPositivePaint(final Paint paint) {
this.positivePaint = paint;
fireChangeEvent();
}
@@ -418,18 +349,19 @@
*
* @see #setNegativePaint(Paint)
*/
- public Paint getNegativePaint() {
+ private Paint getNegativePaint() {
return this.negativePaint;
}
/**
* Sets the paint used to highlight negative differences.
*
- * @param paint the paint (null
not permitted).
+ * @param paint
+ * the paint (null
not permitted).
*
* @see #getNegativePaint()
*/
- public void setNegativePaint(Paint paint) {
+ public void setNegativePaint(final Paint paint) {
this.negativePaint = paint;
notifyListeners(new RendererChangeEvent(this));
}
@@ -442,7 +374,7 @@
*
* @see #setShapesVisible(boolean)
*/
- public boolean getShapesVisible() {
+ private boolean getShapesVisible() {
return this.shapesVisible;
}
@@ -451,11 +383,12 @@
* data value, and sends a {@link RendererChangeEvent} to all registered
* listeners.
*
- * @param flag the flag.
+ * @param flag
+ * the flag.
*
* @see #getShapesVisible()
*/
- public void setShapesVisible(boolean flag) {
+ public void setShapesVisible(final boolean flag) {
this.shapesVisible = flag;
fireChangeEvent();
}
@@ -467,80 +400,36 @@
*
* @see #setLegendLine(Shape)
*/
- public Shape getLegendLine() {
+ private Shape getLegendLine() {
return this.legendShape;
}
/**
- * Sets the shape used as a line in each legend item and sends a
- * {@link RendererChangeEvent} to all registered listeners.
- *
- * @param line the line (null
not permitted).
- *
- * @see #getLegendLine()
- */
- public void setLegendLine(Shape line) {
- if (line == null) {
- throw new IllegalArgumentException("Null 'line' argument.");
- }
- this.legendShape = line;
- fireChangeEvent();
- }
-
- /**
- * Returns the flag that controls whether or not the x-coordinates (in
- * Java2D space) are rounded to integer values.
- *
- * @return The flag.
- *
- * @since 1.0.4
- *
- * @see #setRoundXCoordinates(boolean)
- */
- public boolean getRoundXCoordinates() {
- return this.roundXCoordinates;
- }
-
- /**
- * Sets the flag that controls whether or not the x-coordinates (in
- * Java2D space) are rounded to integer values, and sends a
- * {@link RendererChangeEvent} to all registered listeners.
- *
- * @param round the new flag value.
- *
- * @since 1.0.4
- *
- * @see #getRoundXCoordinates()
- */
- public void setRoundXCoordinates(boolean round) {
- this.roundXCoordinates = round;
- fireChangeEvent();
- }
-
- /**
- * Initialises the renderer and returns a state object that should be
- * passed to subsequent calls to the drawItem() method. This method will
+ * Initializes the renderer and returns a state object that should be
+ * passed to subsequent calls to the drawItem() method. This method will
* be called before the first item is rendered, giving the renderer an
- * opportunity to initialise any state information it wants to maintain.
+ * opportunity to initialize any state information it wants to maintain.
* The renderer can do nothing if it chooses.
*
- * @param g2 the graphics device.
- * @param dataArea the (visible) area inside the axes.
- * @param plot the plot.
- * @param data the data.
- * @param info an optional info collection object to return data back to
- * the caller.
+ * @param g2
+ * the graphics device.
+ * @param dataArea
+ * the (visible) area inside the axes.
+ * @param plot
+ * the plot.
+ * @param data
+ * the data.
+ * @param info
+ * an optional info collection object to return data back to
+ * the caller.
*
* @return A state object.
*/
- public XYItemRendererState initialise(Graphics2D g2,
- Rectangle2D dataArea,
- XYPlot plot,
- XYDataset data,
- PlotRenderingInfo info) {
+ @Override
+ public XYItemRendererState initialise(final Graphics2D g2, final Rectangle2D dataArea, final XYPlot plot, final XYDataset data,
+ final PlotRenderingInfo info) {
- XYItemRendererState state = super.initialise(g2, dataArea, plot, data,
- info);
+ final XYItemRendererState state = super.initialise(g2, dataArea, plot, data, info);
state.setProcessVisibleItemsOnly(false);
return state;
}
@@ -551,55 +440,42 @@
*
* @return The number of passes required by the renderer.
*/
+ @Override
public int getPassCount() {
return 2;
}
-
/**
* Adds x/y data to series.
*/
- private static final void addSeries(
- DefaultXYDataset ds,
- Comparable key,
- TDoubleArrayList xs,
- TDoubleArrayList ys
- ) {
- ds.addSeries(
- key,
- new double [][] {
- xs.toNativeArray(),
- ys.toNativeArray()
- });
+ private static final void addSeries(final DefaultXYDataset ds, final Comparable key, final TDoubleArrayList xs, final TDoubleArrayList ys) {
+ ds.addSeries(key, new double[][] { xs.toNativeArray(), ys.toNativeArray() });
}
- protected static List splitByNaNsOneSeries(
- XYDataset dataset
- ) {
- List datasets = new ArrayList();
+ private static List splitByNaNsOneSeries(final XYDataset dataset) {
+ final List datasets = new ArrayList<>();
- int N = dataset.getItemCount(0);
- TDoubleArrayList xs = new TDoubleArrayList(N);
- TDoubleArrayList ys = new TDoubleArrayList(N);
+ final int N = dataset.getItemCount(0);
+ final TDoubleArrayList xs = new TDoubleArrayList(N);
+ final TDoubleArrayList ys = new TDoubleArrayList(N);
for (int i = 0; i < N; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getYValue(0, i);
+ final double x = dataset.getXValue(0, i);
+ final double y = dataset.getYValue(0, i);
if (Double.isNaN(x) || Double.isNaN(y)) {
if (!xs.isEmpty()) {
- DefaultXYDataset ds = new DefaultXYDataset();
+ final DefaultXYDataset ds = new DefaultXYDataset();
addSeries(ds, dataset.getSeriesKey(0), xs, ys);
datasets.add(ds);
xs.resetQuick();
ys.resetQuick();
}
- }
- else {
+ } else {
xs.add(x);
ys.add(y);
}
}
if (!xs.isEmpty()) {
- DefaultXYDataset ds = new DefaultXYDataset();
+ final DefaultXYDataset ds = new DefaultXYDataset();
addSeries(ds, dataset.getSeriesKey(0), xs, ys);
datasets.add(ds);
}
@@ -607,30 +483,30 @@
return datasets;
}
- private static final boolean add(TDoubleArrayList xs, double x) {
- int N = xs.size();
- if (N == 0 || xs.getQuick(N-1) < x) {
+ private static final boolean add(final TDoubleArrayList xs, final double x) {
+ final int N = xs.size();
+ if (N == 0 || xs.getQuick(N - 1) < x) {
xs.add(x);
return true;
}
return false;
}
- protected static boolean hasNaN(XYDataset dataset) {
- int N = dataset.getItemCount(0);
- int M = dataset.getItemCount(1);
+ private static boolean hasNaN(final XYDataset dataset) {
+ final int N = dataset.getItemCount(0);
+ final int M = dataset.getItemCount(1);
for (int i = 0; i < N; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getYValue(0, i);
+ final double x = dataset.getXValue(0, i);
+ final double y = dataset.getYValue(0, i);
if (Double.isNaN(x) || Double.isNaN(y)) {
return true;
}
}
for (int j = 0; j < M; ++j) {
- double x = dataset.getXValue(1, j);
- double y = dataset.getYValue(1, j);
+ final double x = dataset.getXValue(1, j);
+ final double y = dataset.getYValue(1, j);
if (Double.isNaN(x) || Double.isNaN(y)) {
return true;
}
@@ -638,76 +514,73 @@
return false;
}
+ private static List splitByNaNsTwoSeries(final XYDataset dataset) {
+ final boolean debug = log.isDebugEnabled();
- protected static List splitByNaNsTwoSeries(
- XYDataset dataset
- ) {
- boolean debug = log.isDebugEnabled();
-
- List datasets = new ArrayList();
+ final List datasets = new ArrayList<>();
if (!hasNaN(dataset)) {
datasets.add(dataset);
return datasets;
}
- int N = dataset.getItemCount(0);
- int M = dataset.getItemCount(1);
+ final int N = dataset.getItemCount(0);
+ final int M = dataset.getItemCount(1);
int i = 0, j = 0;
// ignore leading NaNs
for (; i < N; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getYValue(0, i);
+ final double x = dataset.getXValue(0, i);
+ final double y = dataset.getYValue(0, i);
if (!Double.isNaN(x) && !Double.isNaN(y)) {
break;
}
}
for (; j < M; ++j) {
- double x = dataset.getXValue(1, j);
- double y = dataset.getYValue(1, j);
+ final double x = dataset.getXValue(1, j);
+ final double y = dataset.getYValue(1, j);
if (!Double.isNaN(x) && !Double.isNaN(y)) {
break;
}
}
- TDoubleArrayList six = new TDoubleArrayList();
- TDoubleArrayList siy = new TDoubleArrayList();
- TDoubleArrayList sjx = new TDoubleArrayList();
- TDoubleArrayList sjy = new TDoubleArrayList();
+ final TDoubleArrayList six = new TDoubleArrayList();
+ final TDoubleArrayList siy = new TDoubleArrayList();
+ final TDoubleArrayList sjx = new TDoubleArrayList();
+ final TDoubleArrayList sjy = new TDoubleArrayList();
while (i < N && j < M) {
- int ni = i+1;
- for (; ni < N && !Double.isNaN(dataset.getXValue(0, ni)); ++ni);
- for (; ni < N && Double.isNaN(dataset.getXValue(0, ni)); ++ni);
+ int ni = i + 1;
+ for (; ni < N && !Double.isNaN(dataset.getXValue(0, ni)); ++ni)
+ ;
+ for (; ni < N && Double.isNaN(dataset.getXValue(0, ni)); ++ni)
+ ;
- int nj = j+1;
- for (; nj < M && !Double.isNaN(dataset.getXValue(1, nj)); ++nj);
- for (; nj < M && Double.isNaN(dataset.getXValue(1, nj)); ++nj);
+ int nj = j + 1;
+ for (; nj < M && !Double.isNaN(dataset.getXValue(1, nj)); ++nj)
+ ;
+ for (; nj < M && Double.isNaN(dataset.getXValue(1, nj)); ++nj)
+ ;
if (ni == N && nj == M) { // no more splits
log.debug("no more splits ....");
for (; i < ni; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getYValue(0, i);
- if (!Double.isNaN(x)
- && !Double.isNaN(y)
- && add(six, x)) {
+ final double x = dataset.getXValue(0, i);
+ final double y = dataset.getYValue(0, i);
+ if (!Double.isNaN(x) && !Double.isNaN(y) && add(six, x)) {
siy.add(y);
}
}
for (; j < nj; ++j) {
- double x = dataset.getXValue(1, j);
- double y = dataset.getYValue(1, j);
- if (!Double.isNaN(x)
- && !Double.isNaN(y)
- && add(sjx, x)) {
+ final double x = dataset.getXValue(1, j);
+ final double y = dataset.getYValue(1, j);
+ if (!Double.isNaN(x) && !Double.isNaN(y) && add(sjx, x)) {
sjy.add(y);
}
}
if (!six.isEmpty() && !sjx.isEmpty()) {
- DefaultXYDataset ds = new DefaultXYDataset();
+ final DefaultXYDataset ds = new DefaultXYDataset();
addSeries(ds, dataset.getSeriesKey(0), six, siy);
addSeries(ds, dataset.getSeriesKey(1), sjx, sjy);
datasets.add(ds);
@@ -720,15 +593,11 @@
log.debug("nj: " + nj + " " + M);
}
- double xni = ni < N
- ? dataset.getXValue(0, ni)
- : Double.MAX_VALUE;
+ final double xni = ni < N ? dataset.getXValue(0, ni) : Double.MAX_VALUE;
- double xnj = nj < M
- ? dataset.getXValue(1, nj)
- : Double.MAX_VALUE;
+ final double xnj = nj < M ? dataset.getXValue(1, nj) : Double.MAX_VALUE;
- double xns = Math.min(xni, xnj);
+ final double xns = Math.min(xni, xnj);
double pushxi = Double.NaN;
double pushyi = Double.NaN;
@@ -736,8 +605,8 @@
double pushyj = Double.NaN;
for (; i < ni; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getYValue(0, i);
+ final double x = dataset.getXValue(0, i);
+ final double y = dataset.getYValue(0, i);
if (Double.isNaN(x) || Double.isNaN(y)) {
continue;
}
@@ -751,19 +620,16 @@
if (add(six, x)) {
siy.add(y);
}
- pushxi = x; pushyi = y;
- }
- else { // x > xns: intersection
+ pushxi = x;
+ pushyi = y;
+ } else { // x > xns: intersection
if (debug) {
log.debug("xns: " + xns);
log.debug("x/y: " + x + " / " + y);
}
- int SIX = six.size();
+ final int SIX = six.size();
if (SIX > 0) { // should always be true
- double yns = Linear.linear(
- xns,
- six.getQuick(SIX-1), x,
- siy.getQuick(SIX-1), y);
+ final double yns = Linear.linear(xns, six.getQuick(SIX - 1), x, siy.getQuick(SIX - 1), y);
if (debug) {
log.debug("intersection at: " + yns);
}
@@ -778,8 +644,8 @@
}
for (; j < nj; ++j) {
- double x = dataset.getXValue(1, j);
- double y = dataset.getYValue(1, j);
+ final double x = dataset.getXValue(1, j);
+ final double y = dataset.getYValue(1, j);
if (Double.isNaN(x) || Double.isNaN(y)) {
continue;
}
@@ -793,36 +659,36 @@
if (add(sjx, x)) {
sjy.add(y);
}
- pushxj = x; pushyj = y;
- }
- else { // x > xns: intersection
- int SJX = sjx.size();
+ pushxj = x;
+ pushyj = y;
+ } else { // x > xns: intersection
+ final int SJX = sjx.size();
if (SJX > 0) { // should always be true
- double yns = Linear.linear(
- xns,
- sjx.getQuick(SJX-1), x,
- sjy.getQuick(SJX-1), y);
+ final double yns = Linear.linear(xns, sjx.getQuick(SJX - 1), x, sjy.getQuick(SJX - 1), y);
if (debug) {
log.debug("intersection at: " + yns);
}
if (add(sjx, xns)) {
sjy.add(yns);
}
- pushxj = xns; pushyj = yns;
+ pushxj = xns;
+ pushyj = yns;
}
}
break; // Split point reached.
}
if (!six.isEmpty() && !sjx.isEmpty()) {
- DefaultXYDataset ds = new DefaultXYDataset();
+ final DefaultXYDataset ds = new DefaultXYDataset();
addSeries(ds, dataset.getSeriesKey(0), six, siy);
addSeries(ds, dataset.getSeriesKey(1), sjx, sjy);
datasets.add(ds);
}
- six.resetQuick(); siy.resetQuick();
- sjx.resetQuick(); sjy.resetQuick();
+ six.resetQuick();
+ siy.resetQuick();
+ sjx.resetQuick();
+ sjy.resetQuick();
// Push split points.
if (!Double.isNaN(pushxi)) {
@@ -838,28 +704,24 @@
// Copy the rest.
for (; i < N; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getXValue(0, i);
- if (!Double.isNaN(x)
- && !Double.isNaN(y)
- && add(six, x)) {
+ final double x = dataset.getXValue(0, i);
+ final double y = dataset.getXValue(0, i);
+ if (!Double.isNaN(x) && !Double.isNaN(y) && add(six, x)) {
siy.add(y);
}
}
for (; j < M; ++j) {
- double x = dataset.getXValue(1, j);
- double y = dataset.getXValue(1, j);
- if (!Double.isNaN(x)
- && !Double.isNaN(y)
- && add(sjx, x)) {
+ final double x = dataset.getXValue(1, j);
+ final double y = dataset.getXValue(1, j);
+ if (!Double.isNaN(x) && !Double.isNaN(y) && add(sjx, x)) {
sjy.add(y);
}
}
// Build final dataset.
if (!six.isEmpty() && !sjx.isEmpty()) {
- DefaultXYDataset ds = new DefaultXYDataset();
+ final DefaultXYDataset ds = new DefaultXYDataset();
addSeries(ds, dataset.getSeriesKey(0), six, siy);
addSeries(ds, dataset.getSeriesKey(1), sjx, sjy);
datasets.add(ds);
@@ -870,137 +732,122 @@
}
/*
- log.debug("Begin dump datasets: ");
- log.debug("Original");
- i=0;
- dumpDataset(dataset, "Original" );
- for (XYDataset set: datasets) {
- dumpDataset(dataset, "New: " + i++);
- }
- log.debug("End dump datasets: ");
- */
+ * log.debug("Begin dump datasets: ");
+ * log.debug("Original");
+ * i=0;
+ * dumpDataset(dataset, "Original" );
+ * for (XYDataset set: datasets) {
+ * dumpDataset(dataset, "New: " + i++);
+ * }
+ * log.debug("End dump datasets: ");
+ */
return datasets;
}
/*
- public static void dumpDataset(XYDataset dataset, String msg) {
- log.debug("Begin dump Dataset: " + msg);
-
- int N = dataset.getItemCount(0);
- int M = dataset.getItemCount(1);
+ * public static void dumpDataset(XYDataset dataset, String msg) {
+ * log.debug("Begin dump Dataset: " + msg);
+ * int N = dataset.getItemCount(0);
+ * int M = dataset.getItemCount(1);
+ * int i = 0, j = 0;
+ * for (; i < N; ++i) {
+ * double x = dataset.getXValue(0, i);
+ * double y = dataset.getYValue(0, i);
+ * log.debug("0 " + i + " X: "+ x + "Y: "+ y);
+ * }
+ * for (; j < M; ++j) {
+ * double x = dataset.getXValue(1, j);
+ * double y = dataset.getYValue(1, j);
+ * log.debug("1 " + i + " X: "+ x + "Y: "+ y);
+ * }
+ * log.debug("End dump Dataset: " + msg);
+ * }
+ */
- int i = 0, j = 0;
- for (; i < N; ++i) {
- double x = dataset.getXValue(0, i);
- double y = dataset.getYValue(0, i);
- log.debug("0 " + i + " X: "+ x + "Y: "+ y);
- }
-
- for (; j < M; ++j) {
- double x = dataset.getXValue(1, j);
- double y = dataset.getYValue(1, j);
- log.debug("1 " + i + " X: "+ x + "Y: "+ y);
- }
- log.debug("End dump Dataset: " + msg);
- }
- */
-
-
- public static List splitByNaNs(XYDataset dataset) {
+ private static List splitByNaNs(final XYDataset dataset) {
switch (dataset.getSeriesCount()) {
- case 0:
- return Collections.emptyList();
- case 1:
- return splitByNaNsOneSeries(dataset);
- default: // two or more
- return splitByNaNsTwoSeries(dataset);
+ case 0:
+ return Collections.emptyList();
+ case 1:
+ return splitByNaNsOneSeries(dataset);
+ default: // two or more
+ return splitByNaNsTwoSeries(dataset);
}
}
-
/**
* Draws the visual representation of a single data item.
*
- * @param g2 the graphics device.
- * @param state the renderer state.
- * @param dataArea the area within which the data is being drawn.
- * @param info collects information about the drawing.
- * @param plot the plot (can be used to obtain standard color
- * information etc).
- * @param domainAxis the domain (horizontal) axis.
- * @param rangeAxis the range (vertical) axis.
- * @param dataset the dataset.
- * @param series the series index (zero-based).
- * @param item the item index (zero-based).
- * @param crosshairState crosshair information for the plot
- * (null
permitted).
- * @param pass the pass index.
+ * @param g2
+ * the graphics device.
+ * @param state
+ * the renderer state.
+ * @param dataArea
+ * the area within which the data is being drawn.
+ * @param info
+ * collects information about the drawing.
+ * @param plot
+ * the plot (can be used to obtain standard color
+ * information etc).
+ * @param domainAxis
+ * the domain (horizontal) axis.
+ * @param rangeAxis
+ * the range (vertical) axis.
+ * @param dataset
+ * the dataset.
+ * @param series
+ * the series index (zero-based).
+ * @param item
+ * the item index (zero-based).
+ * @param crosshairState
+ * crosshair information for the plot
+ * (null
permitted).
+ * @param pass
+ * the pass index.
*/
- public void drawItem(Graphics2D g2,
- XYItemRendererState state,
- Rectangle2D dataArea,
- PlotRenderingInfo info,
- XYPlot plot,
- ValueAxis domainAxis,
- ValueAxis rangeAxis,
- XYDataset dataset,
- int series,
- int item,
- CrosshairState crosshairState,
- int pass) {
+ @Override
+ public void drawItem(final Graphics2D g2, final XYItemRendererState state, final Rectangle2D dataArea, final PlotRenderingInfo info, final XYPlot plot,
+ final ValueAxis domainAxis, final ValueAxis rangeAxis, final XYDataset dataset, final int series, final int item,
+ final CrosshairState crosshairState, final int pass) {
switch (pass) {
- case 0:
- for (XYDataset ds: splitByNaNs(dataset)) {
- drawItemPass0(g2, dataArea, info,
- plot, domainAxis, rangeAxis,
- ds, series, item, crosshairState);
- }
- break;
- case 1:
- drawItemPass1(g2, dataArea, info,
- plot, domainAxis, rangeAxis,
- dataset, series, item, crosshairState);
+ case 0:
+ for (final XYDataset ds : splitByNaNs(dataset)) {
+ drawItemPass0(g2, dataArea, info, plot, domainAxis, rangeAxis, ds, series, item, crosshairState);
+ }
+ break;
+ case 1:
+ drawItemPass1(g2, dataArea, info, plot, domainAxis, rangeAxis, dataset, series, item, crosshairState);
}
// Find geometric middle, calculate area and paint
// a string with it here.
- if (pass == 1
- && this.labelArea
- && areaLabelNumberFormat != null
- && areaLabelTamplate != null
- ) {
- double center_x = centroid.getX();
- double center_y = centroid.getY();
- center_x = domainAxis.valueToJava2D(center_x, dataArea,
- plot.getDomainAxisEdge());
- center_y = rangeAxis.valueToJava2D(center_y, dataArea,
- plot.getRangeAxisEdge());
+ if (pass == 1 && this.labelArea && this.areaLabelNumberFormat != null && this.areaLabelTamplate != null) {
+ double center_x = this.centroid.getX();
+ double center_y = this.centroid.getY();
+ center_x = domainAxis.valueToJava2D(center_x, dataArea, plot.getDomainAxisEdge());
+ center_y = rangeAxis.valueToJava2D(center_y, dataArea, plot.getRangeAxisEdge());
// Respect text-extend if text should appear really centered.
float area = 0f;
- if (areaCalculationMode == CALCULATE_POSITIVE_AREA
- || areaCalculationMode == CALCULATE_ALL_AREA) {
- area += Math.abs(positiveArea);
+ if (this.areaCalculationMode == CALCULATE_POSITIVE_AREA || this.areaCalculationMode == CALCULATE_ALL_AREA) {
+ area += Math.abs(this.positiveArea);
}
- if (areaCalculationMode == CALCULATE_NEGATIVE_AREA
- || areaCalculationMode == CALCULATE_ALL_AREA) {
- area += Math.abs(negativeArea);
+ if (this.areaCalculationMode == CALCULATE_NEGATIVE_AREA || this.areaCalculationMode == CALCULATE_ALL_AREA) {
+ area += Math.abs(this.negativeArea);
}
if (area != 0f) {
- Color oldColor = g2.getColor();
- Font oldFont = g2.getFont();
- g2.setFont(labelFont);
- String labelText = String.format(this.areaLabelTamplate,
- areaLabelNumberFormat.format(area));
- if (labelBGColor != null) {
- EnhancedLineAndShapeRenderer.drawTextBox(g2, labelText,
- (float)center_x, (float)center_y, labelBGColor);
+ final Color oldColor = g2.getColor();
+ final Font oldFont = g2.getFont();
+ g2.setFont(this.labelFont);
+ final String labelText = String.format(this.areaLabelTamplate, this.areaLabelNumberFormat.format(area));
+ if (this.labelBGColor != null) {
+ EnhancedLineAndShapeRenderer.drawTextBox(g2, labelText, (float) center_x, (float) center_y, this.labelBGColor);
}
- g2.setColor(labelColor);
- g2.drawString(labelText, (float)center_x, (float)center_y);
+ g2.setColor(this.labelColor);
+ g2.drawString(labelText, (float) center_x, (float) center_y);
g2.setFont(oldFont);
g2.setColor(oldColor);
}
@@ -1010,35 +857,38 @@
/**
* Draws the visual representation of a single data item, first pass.
*
- * @param x_graphics the graphics device.
- * @param x_dataArea the area within which the data is being drawn.
- * @param x_info collects information about the drawing.
- * @param x_plot the plot (can be used to obtain standard color
- * information etc).
- * @param x_domainAxis the domain (horizontal) axis.
- * @param x_rangeAxis the range (vertical) axis.
- * @param x_dataset the dataset.
- * @param x_series the series index (zero-based).
- * @param x_item the item index (zero-based).
- * @param x_crosshairState crosshair information for the plot
- * (null
permitted).
+ * @param x_graphics
+ * the graphics device.
+ * @param x_dataArea
+ * the area within which the data is being drawn.
+ * @param x_info
+ * collects information about the drawing.
+ * @param x_plot
+ * the plot (can be used to obtain standard color
+ * information etc).
+ * @param x_domainAxis
+ * the domain (horizontal) axis.
+ * @param x_rangeAxis
+ * the range (vertical) axis.
+ * @param x_dataset
+ * the dataset.
+ * @param x_series
+ * the series index (zero-based).
+ * @param x_item
+ * the item index (zero-based).
+ * @param x_crosshairState
+ * crosshair information for the plot
+ * (null
permitted).
*/
- protected void drawItemPass0(Graphics2D x_graphics,
- Rectangle2D x_dataArea,
- PlotRenderingInfo x_info,
- XYPlot x_plot,
- ValueAxis x_domainAxis,
- ValueAxis x_rangeAxis,
- XYDataset x_dataset,
- int x_series,
- int x_item,
- CrosshairState x_crosshairState) {
+ private void drawItemPass0(final Graphics2D x_graphics, final Rectangle2D x_dataArea, final PlotRenderingInfo x_info, final XYPlot x_plot,
+ final ValueAxis x_domainAxis, final ValueAxis x_rangeAxis, final XYDataset x_dataset, final int x_series, final int x_item,
+ final CrosshairState x_crosshairState) {
if (!((0 == x_series) && (0 == x_item))) {
return;
}
- boolean b_impliedZeroSubtrahend = (1 == x_dataset.getSeriesCount());
+ final boolean b_impliedZeroSubtrahend = (1 == x_dataset.getSeriesCount());
// check if either series is a degenerate case (i.e. less than 2 points)
if (isEitherSeriesDegenerate(x_dataset, b_impliedZeroSubtrahend)) {
@@ -1051,60 +901,58 @@
}
// polygon definitions
- LinkedList l_minuendXs = new LinkedList();
- LinkedList l_minuendYs = new LinkedList();
- LinkedList l_subtrahendXs = new LinkedList();
- LinkedList l_subtrahendYs = new LinkedList();
- LinkedList l_polygonXs = new LinkedList();
- LinkedList l_polygonYs = new LinkedList();
+ final List l_minuendXs = new LinkedList<>();
+ final List l_minuendYs = new LinkedList<>();
+ final List l_subtrahendXs = new LinkedList<>();
+ final List l_subtrahendYs = new LinkedList<>();
+ final List l_polygonXs = new LinkedList<>();
+ final List l_polygonYs = new LinkedList<>();
// state
- int l_minuendItem = 0;
- int l_minuendItemCount = x_dataset.getItemCount(0);
- Double l_minuendCurX = null;
- Double l_minuendNextX = null;
- Double l_minuendCurY = null;
- Double l_minuendNextY = null;
- double l_minuendMaxY = Double.NEGATIVE_INFINITY;
- double l_minuendMinY = Double.POSITIVE_INFINITY;
+ int l_minuendItem = 0;
+ final int l_minuendItemCount = x_dataset.getItemCount(0);
+ Double l_minuendCurX = null;
+ Double l_minuendNextX = null;
+ Double l_minuendCurY = null;
+ Double l_minuendNextY = null;
+ double l_minuendMaxY = Double.NEGATIVE_INFINITY;
+ double l_minuendMinY = Double.POSITIVE_INFINITY;
- int l_subtrahendItem = 0;
+ int l_subtrahendItem = 0;
int l_subtrahendItemCount = 0; // actual value set below
- Double l_subtrahendCurX = null;
- Double l_subtrahendNextX = null;
- Double l_subtrahendCurY = null;
- Double l_subtrahendNextY = null;
- double l_subtrahendMaxY = Double.NEGATIVE_INFINITY;
- double l_subtrahendMinY = Double.POSITIVE_INFINITY;
+ Double l_subtrahendCurX = null;
+ Double l_subtrahendNextX = null;
+ Double l_subtrahendCurY = null;
+ Double l_subtrahendNextY = null;
+ double l_subtrahendMaxY = Double.NEGATIVE_INFINITY;
+ double l_subtrahendMinY = Double.POSITIVE_INFINITY;
// if a subtrahend is not specified, assume it is zero
if (b_impliedZeroSubtrahend) {
- l_subtrahendItem = 0;
+ l_subtrahendItem = 0;
l_subtrahendItemCount = 2;
- l_subtrahendCurX = new Double(x_dataset.getXValue(0, 0));
- l_subtrahendNextX = new Double(x_dataset.getXValue(0,
- (l_minuendItemCount - 1)));
- l_subtrahendCurY = new Double(0.0);
- l_subtrahendNextY = new Double(0.0);
- l_subtrahendMaxY = 0.0;
- l_subtrahendMinY = 0.0;
+ l_subtrahendCurX = new Double(x_dataset.getXValue(0, 0));
+ l_subtrahendNextX = new Double(x_dataset.getXValue(0, (l_minuendItemCount - 1)));
+ l_subtrahendCurY = new Double(0.0);
+ l_subtrahendNextY = new Double(0.0);
+ l_subtrahendMaxY = 0.0;
+ l_subtrahendMinY = 0.0;
l_subtrahendXs.add(l_subtrahendCurX);
l_subtrahendYs.add(l_subtrahendCurY);
- }
- else {
+ } else {
l_subtrahendItemCount = x_dataset.getItemCount(1);
}
- boolean b_minuendDone = false;
- boolean b_minuendAdvanced = true;
- boolean b_minuendAtIntersect = false;
- boolean b_minuendFastForward = false;
- boolean b_subtrahendDone = false;
- boolean b_subtrahendAdvanced = true;
+ boolean b_minuendDone = false;
+ boolean b_minuendAdvanced = true;
+ boolean b_minuendAtIntersect = false;
+ boolean b_minuendFastForward = false;
+ boolean b_subtrahendDone = false;
+ boolean b_subtrahendAdvanced = true;
boolean b_subtrahendAtIntersect = false;
boolean b_subtrahendFastForward = false;
- boolean b_colinear = false;
+ boolean b_colinear = false;
boolean b_positive;
@@ -1123,8 +971,8 @@
l_x2 = x_dataset.getXValue(0, l_minuendItem + 1);
l_y2 = x_dataset.getYValue(0, l_minuendItem + 1);
- l_minuendCurX = new Double(l_x1);
- l_minuendCurY = new Double(l_y1);
+ l_minuendCurX = new Double(l_x1);
+ l_minuendCurY = new Double(l_y1);
l_minuendNextX = new Double(l_x2);
l_minuendNextY = new Double(l_y2);
@@ -1133,15 +981,14 @@
l_y3 = l_subtrahendCurY.doubleValue();
l_x4 = l_subtrahendNextX.doubleValue();
l_y4 = l_subtrahendNextY.doubleValue();
- }
- else {
+ } else {
l_x3 = x_dataset.getXValue(1, l_subtrahendItem);
l_y3 = x_dataset.getYValue(1, l_subtrahendItem);
l_x4 = x_dataset.getXValue(1, l_subtrahendItem + 1);
l_y4 = x_dataset.getYValue(1, l_subtrahendItem + 1);
- l_subtrahendCurX = new Double(l_x3);
- l_subtrahendCurY = new Double(l_y3);
+ l_subtrahendCurX = new Double(l_x3);
+ l_subtrahendCurY = new Double(l_y3);
l_subtrahendNextX = new Double(l_x4);
l_subtrahendNextY = new Double(l_y4);
}
@@ -1163,10 +1010,9 @@
// check if initial polygon needs to be clipped
if ((l_x3 < l_x1) && (l_x1 < l_x4)) {
// project onto subtrahend
- double l_slope = (l_y4 - l_y3) / (l_x4 - l_x3);
+ final double l_slope = (l_y4 - l_y3) / (l_x4 - l_x3);
l_subtrahendCurX = l_minuendCurX;
- l_subtrahendCurY = new Double((l_slope * l_x1)
- + (l_y3 - (l_slope * l_x3)));
+ l_subtrahendCurY = new Double((l_slope * l_x1) + (l_y3 - (l_slope * l_x3)));
l_subtrahendXs.add(l_subtrahendCurX);
l_subtrahendYs.add(l_subtrahendCurY);
@@ -1174,17 +1020,16 @@
if ((l_x1 < l_x3) && (l_x3 < l_x2)) {
// project onto minuend
- double l_slope = (l_y2 - l_y1) / (l_x2 - l_x1);
- l_minuendCurX = l_subtrahendCurX;
- l_minuendCurY = new Double((l_slope * l_x3)
- + (l_y1 - (l_slope * l_x1)));
+ final double l_slope = (l_y2 - l_y1) / (l_x2 - l_x1);
+ l_minuendCurX = l_subtrahendCurX;
+ l_minuendCurY = new Double((l_slope * l_x3) + (l_y1 - (l_slope * l_x1)));
l_minuendXs.add(l_minuendCurX);
l_minuendYs.add(l_minuendCurY);
}
- l_minuendMaxY = l_minuendCurY.doubleValue();
- l_minuendMinY = l_minuendCurY.doubleValue();
+ l_minuendMaxY = l_minuendCurY.doubleValue();
+ l_minuendMinY = l_minuendCurY.doubleValue();
l_subtrahendMaxY = l_subtrahendCurY.doubleValue();
l_subtrahendMinY = l_subtrahendCurY.doubleValue();
@@ -1214,8 +1059,7 @@
}
// never updated the subtrahend if it is implied to be zero
- if (!b_impliedZeroSubtrahend && !b_subtrahendDone
- && !b_subtrahendFastForward && b_subtrahendAdvanced) {
+ if (!b_impliedZeroSubtrahend && !b_subtrahendDone && !b_subtrahendFastForward && b_subtrahendAdvanced) {
l_x3 = x_dataset.getXValue(1, l_subtrahendItem);
l_y3 = x_dataset.getYValue(1, l_subtrahendItem);
l_subtrahendCurX = new Double(l_x3);
@@ -1236,14 +1080,14 @@
}
// deassert b_*FastForward (only matters for 1st time through loop)
- b_minuendFastForward = false;
+ b_minuendFastForward = false;
b_subtrahendFastForward = false;
Double l_intersectX = null;
Double l_intersectY = null;
boolean b_intersect = false;
- b_minuendAtIntersect = false;
+ b_minuendAtIntersect = false;
b_subtrahendAtIntersect = false;
// check for intersect
@@ -1251,39 +1095,32 @@
// check if line segments are colinear
if ((l_x1 == l_x3) && (l_y1 == l_y3)) {
b_colinear = true;
- }
- else {
+ } else {
// the intersect is at the next point for both the minuend
// and subtrahend
l_intersectX = new Double(l_x2);
l_intersectY = new Double(l_y2);
- b_intersect = true;
- b_minuendAtIntersect = true;
+ b_intersect = true;
+ b_minuendAtIntersect = true;
b_subtrahendAtIntersect = true;
- }
- }
- else {
+ }
+ } else {
// compute common denominator
- double l_denominator = ((l_y4 - l_y3) * (l_x2 - l_x1))
- - ((l_x4 - l_x3) * (l_y2 - l_y1));
+ final double l_denominator = ((l_y4 - l_y3) * (l_x2 - l_x1)) - ((l_x4 - l_x3) * (l_y2 - l_y1));
// compute common deltas
- double l_deltaY = l_y1 - l_y3;
- double l_deltaX = l_x1 - l_x3;
+ final double l_deltaY = l_y1 - l_y3;
+ final double l_deltaX = l_x1 - l_x3;
// compute numerators
- double l_numeratorA = ((l_x4 - l_x3) * l_deltaY)
- - ((l_y4 - l_y3) * l_deltaX);
- double l_numeratorB = ((l_x2 - l_x1) * l_deltaY)
- - ((l_y2 - l_y1) * l_deltaX);
+ final double l_numeratorA = ((l_x4 - l_x3) * l_deltaY) - ((l_y4 - l_y3) * l_deltaX);
+ final double l_numeratorB = ((l_x2 - l_x1) * l_deltaY) - ((l_y2 - l_y1) * l_deltaX);
// check if line segments are colinear
- if ((0 == l_numeratorA) && (0 == l_numeratorB)
- && (0 == l_denominator)) {
+ if ((0 == l_numeratorA) && (0 == l_numeratorB) && (0 == l_denominator)) {
b_colinear = true;
- }
- else {
+ } else {
// check if previously colinear
if (b_colinear) {
// clear colinear points and flag
@@ -1297,36 +1134,30 @@
b_colinear = false;
// set new starting point for the polygon
- boolean b_useMinuend = ((l_x3 <= l_x1)
- && (l_x1 <= l_x4));
- l_polygonXs.add(b_useMinuend ? l_minuendCurX
- : l_subtrahendCurX);
- l_polygonYs.add(b_useMinuend ? l_minuendCurY
- : l_subtrahendCurY);
+ final boolean b_useMinuend = ((l_x3 <= l_x1) && (l_x1 <= l_x4));
+ l_polygonXs.add(b_useMinuend ? l_minuendCurX : l_subtrahendCurX);
+ l_polygonYs.add(b_useMinuend ? l_minuendCurY : l_subtrahendCurY);
}
// compute slope components
- double l_slopeA = l_numeratorA / l_denominator;
- double l_slopeB = l_numeratorB / l_denominator;
+ final double l_slopeA = l_numeratorA / l_denominator;
+ final double l_slopeB = l_numeratorB / l_denominator;
// check if the line segments intersect
- if ((0 < l_slopeA) && (l_slopeA <= 1) && (0 < l_slopeB)
- && (l_slopeB <= 1)) {
+ if ((0 < l_slopeA) && (l_slopeA <= 1) && (0 < l_slopeB) && (l_slopeB <= 1)) {
// compute the point of intersection
- double l_xi = l_x1 + (l_slopeA * (l_x2 - l_x1));
- double l_yi = l_y1 + (l_slopeA * (l_y2 - l_y1));
+ final double l_xi = l_x1 + (l_slopeA * (l_x2 - l_x1));
+ final double l_yi = l_y1 + (l_slopeA * (l_y2 - l_y1));
- l_intersectX = new Double(l_xi);
- l_intersectY = new Double(l_yi);
- b_intersect = true;
- b_minuendAtIntersect = ((l_xi == l_x2)
- && (l_yi == l_y2));
- b_subtrahendAtIntersect = ((l_xi == l_x4)
- && (l_yi == l_y4));
+ l_intersectX = new Double(l_xi);
+ l_intersectY = new Double(l_yi);
+ b_intersect = true;
+ b_minuendAtIntersect = ((l_xi == l_x2) && (l_yi == l_y2));
+ b_subtrahendAtIntersect = ((l_xi == l_x4) && (l_yi == l_y4));
// advance minuend and subtrahend to intesect
- l_minuendCurX = l_intersectX;
- l_minuendCurY = l_intersectY;
+ l_minuendCurX = l_intersectX;
+ l_minuendCurY = l_intersectY;
l_subtrahendCurX = l_intersectX;
l_subtrahendCurY = l_intersectY;
}
@@ -1350,10 +1181,8 @@
l_polygonYs.addAll(l_subtrahendYs);
// create an actual polygon
- b_positive = (l_subtrahendMaxY <= l_minuendMaxY)
- && (l_subtrahendMinY <= l_minuendMinY);
- createPolygon(x_graphics, x_dataArea, x_plot, x_domainAxis,
- x_rangeAxis, b_positive, l_polygonXs, l_polygonYs);
+ b_positive = (l_subtrahendMaxY <= l_minuendMaxY) && (l_subtrahendMinY <= l_minuendMinY);
+ createPolygon(x_graphics, x_dataArea, x_plot, x_domainAxis, x_rangeAxis, b_positive, l_polygonXs, l_polygonYs);
// clear the point vectors
l_minuendXs.clear();
@@ -1364,10 +1193,10 @@
l_polygonYs.clear();
// set the maxY and minY values to intersect y-value
- double l_y = l_intersectY.doubleValue();
- l_minuendMaxY = l_y;
+ final double l_y = l_intersectY.doubleValue();
+ l_minuendMaxY = l_y;
l_subtrahendMaxY = l_y;
- l_minuendMinY = l_y;
+ l_minuendMinY = l_y;
l_subtrahendMinY = l_y;
// add interection point to new polygon
@@ -1379,8 +1208,7 @@
if (l_x2 <= l_x4) {
l_minuendItem++;
b_minuendAdvanced = true;
- }
- else {
+ } else {
b_minuendAdvanced = false;
}
@@ -1388,43 +1216,35 @@
if (l_x4 <= l_x2) {
l_subtrahendItem++;
b_subtrahendAdvanced = true;
- }
- else {
+ } else {
b_subtrahendAdvanced = false;
}
- b_minuendDone = (l_minuendItem == (l_minuendItemCount - 1));
- b_subtrahendDone = (l_subtrahendItem == (l_subtrahendItemCount
- - 1));
+ b_minuendDone = (l_minuendItem == (l_minuendItemCount - 1));
+ b_subtrahendDone = (l_subtrahendItem == (l_subtrahendItemCount - 1));
}
// check if the final polygon needs to be clipped
if (b_minuendDone && (l_x3 < l_x2) && (l_x2 < l_x4)) {
// project onto subtrahend
- double l_slope = (l_y4 - l_y3) / (l_x4 - l_x3);
+ final double l_slope = (l_y4 - l_y3) / (l_x4 - l_x3);
l_subtrahendNextX = l_minuendNextX;
- l_subtrahendNextY = new Double((l_slope * l_x2)
- + (l_y3 - (l_slope * l_x3)));
+ l_subtrahendNextY = new Double((l_slope * l_x2) + (l_y3 - (l_slope * l_x3)));
}
if (b_subtrahendDone && (l_x1 < l_x4) && (l_x4 < l_x2)) {
// project onto minuend
- double l_slope = (l_y2 - l_y1) / (l_x2 - l_x1);
+ final double l_slope = (l_y2 - l_y1) / (l_x2 - l_x1);
l_minuendNextX = l_subtrahendNextX;
- l_minuendNextY = new Double((l_slope * l_x4)
- + (l_y1 - (l_slope * l_x1)));
+ l_minuendNextY = new Double((l_slope * l_x4) + (l_y1 - (l_slope * l_x1)));
}
// consider last point of minuend and subtrahend for determining
// positivity
- l_minuendMaxY = Math.max(l_minuendMaxY,
- l_minuendNextY.doubleValue());
- l_subtrahendMaxY = Math.max(l_subtrahendMaxY,
- l_subtrahendNextY.doubleValue());
- l_minuendMinY = Math.min(l_minuendMinY,
- l_minuendNextY.doubleValue());
- l_subtrahendMinY = Math.min(l_subtrahendMinY,
- l_subtrahendNextY.doubleValue());
+ l_minuendMaxY = Math.max(l_minuendMaxY, l_minuendNextY.doubleValue());
+ l_subtrahendMaxY = Math.max(l_subtrahendMaxY, l_subtrahendNextY.doubleValue());
+ l_minuendMinY = Math.min(l_minuendMinY, l_minuendNextY.doubleValue());
+ l_subtrahendMinY = Math.min(l_subtrahendMinY, l_subtrahendNextY.doubleValue());
// add the last point of the minuned and subtrahend
l_minuendXs.add(l_minuendNextX);
@@ -1444,40 +1264,41 @@
l_polygonYs.addAll(l_subtrahendYs);
// create an actual polygon
- b_positive = (l_subtrahendMaxY <= l_minuendMaxY)
- && (l_subtrahendMinY <= l_minuendMinY);
- createPolygon(x_graphics, x_dataArea, x_plot, x_domainAxis,
- x_rangeAxis, b_positive, l_polygonXs, l_polygonYs);
+ b_positive = (l_subtrahendMaxY <= l_minuendMaxY) && (l_subtrahendMinY <= l_minuendMinY);
+ createPolygon(x_graphics, x_dataArea, x_plot, x_domainAxis, x_rangeAxis, b_positive, l_polygonXs, l_polygonYs);
}
/**
- * Draws the visual representation of a single data item, second pass. In
+ * Draws the visual representation of a single data item, second pass. In
* the second pass, the renderer draws the lines and shapes for the
* individual points in the two series.
*
- * @param x_graphics the graphics device.
- * @param x_dataArea the area within which the data is being drawn.
- * @param x_info collects information about the drawing.
- * @param x_plot the plot (can be used to obtain standard color
- * information etc).
- * @param x_domainAxis the domain (horizontal) axis.
- * @param x_rangeAxis the range (vertical) axis.
- * @param x_dataset the dataset.
- * @param x_series the series index (zero-based).
- * @param x_item the item index (zero-based).
- * @param x_crosshairState crosshair information for the plot
- * (null
permitted).
+ * @param x_graphics
+ * the graphics device.
+ * @param x_dataArea
+ * the area within which the data is being drawn.
+ * @param x_info
+ * collects information about the drawing.
+ * @param x_plot
+ * the plot (can be used to obtain standard color
+ * information etc).
+ * @param x_domainAxis
+ * the domain (horizontal) axis.
+ * @param x_rangeAxis
+ * the range (vertical) axis.
+ * @param x_dataset
+ * the dataset.
+ * @param x_series
+ * the series index (zero-based).
+ * @param x_item
+ * the item index (zero-based).
+ * @param x_crosshairState
+ * crosshair information for the plot
+ * (null
permitted).
*/
- protected void drawItemPass1(Graphics2D x_graphics,
- Rectangle2D x_dataArea,
- PlotRenderingInfo x_info,
- XYPlot x_plot,
- ValueAxis x_domainAxis,
- ValueAxis x_rangeAxis,
- XYDataset x_dataset,
- int x_series,
- int x_item,
- CrosshairState x_crosshairState) {
+ private void drawItemPass1(final Graphics2D x_graphics, final Rectangle2D x_dataArea, final PlotRenderingInfo x_info, final XYPlot x_plot,
+ final ValueAxis x_domainAxis, final ValueAxis x_rangeAxis, final XYDataset x_dataset, final int x_series, final int x_item,
+ final CrosshairState x_crosshairState) {
Shape l_entityArea = null;
EntityCollection l_entities = null;
@@ -1485,43 +1306,39 @@
l_entities = x_info.getOwner().getEntityCollection();
}
- Paint l_seriesPaint = getItemPaint(x_series, x_item);
- Stroke l_seriesStroke = getItemStroke(x_series, x_item);
+ final Paint l_seriesPaint = getItemPaint(x_series, x_item);
+ final Stroke l_seriesStroke = getItemStroke(x_series, x_item);
x_graphics.setPaint(l_seriesPaint);
x_graphics.setStroke(l_seriesStroke);
- PlotOrientation l_orientation = x_plot.getOrientation();
- RectangleEdge l_domainAxisLocation = x_plot.getDomainAxisEdge();
- RectangleEdge l_rangeAxisLocation = x_plot.getRangeAxisEdge();
+ final PlotOrientation l_orientation = x_plot.getOrientation();
+ final RectangleEdge l_domainAxisLocation = x_plot.getDomainAxisEdge();
+ final RectangleEdge l_rangeAxisLocation = x_plot.getRangeAxisEdge();
- double l_x0 = x_dataset.getXValue(x_series, x_item);
- double l_y0 = x_dataset.getYValue(x_series, x_item);
- double l_x1 = x_domainAxis.valueToJava2D(l_x0, x_dataArea,
- l_domainAxisLocation);
- double l_y1 = x_rangeAxis.valueToJava2D(l_y0, x_dataArea,
- l_rangeAxisLocation);
+ final double l_x0 = x_dataset.getXValue(x_series, x_item);
+ final double l_y0 = x_dataset.getYValue(x_series, x_item);
+ final double l_x1 = x_domainAxis.valueToJava2D(l_x0, x_dataArea, l_domainAxisLocation);
+ final double l_y1 = x_rangeAxis.valueToJava2D(l_y0, x_dataArea, l_rangeAxisLocation);
// These are the shapes of the series items.
if (getShapesVisible()) {
Shape l_shape = getItemShape(x_series, x_item);
if (l_orientation == PlotOrientation.HORIZONTAL) {
- l_shape = ShapeUtilities.createTranslatedShape(l_shape,
- l_y1, l_x1);
- }
- else {
- l_shape = ShapeUtilities.createTranslatedShape(l_shape,
- l_x1, l_y1);
+ l_shape = ShapeUtilities.createTranslatedShape(l_shape, l_y1, l_x1);
+ } else {
+ l_shape = ShapeUtilities.createTranslatedShape(l_shape, l_x1, l_y1);
}
if (l_shape.intersects(x_dataArea)) {
x_graphics.setPaint(getItemPaint(x_series, x_item));
x_graphics.fill(l_shape);
- /* TODO We could draw the shapes of single items here.
- if (drawOutline) {
- x_graphics.setPaint(this.outlinePaint);
- x_graphics.setStroke(this.outlineStroke);
- x_graphics.draw(l_shape);
- }
- */
+ /*
+ * TODO We could draw the shapes of single items here.
+ * if (drawOutline) {
+ * x_graphics.setPaint(this.outlinePaint);
+ * x_graphics.setStroke(this.outlineStroke);
+ * x_graphics.draw(l_shape);
+ * }
+ */
}
l_entityArea = l_shape;
} // if (getShapesVisible())
@@ -1529,59 +1346,49 @@
// add an entity for the item...
if (null != l_entities) {
if (null == l_entityArea) {
- l_entityArea = new Rectangle2D.Double((l_x1 - 2), (l_y1 - 2),
- 4, 4);
+ l_entityArea = new Rectangle2D.Double((l_x1 - 2), (l_y1 - 2), 4, 4);
}
String l_tip = null;
- XYToolTipGenerator l_tipGenerator = getToolTipGenerator(x_series,
- x_item);
+ final XYToolTipGenerator l_tipGenerator = getToolTipGenerator(x_series, x_item);
if (null != l_tipGenerator) {
- l_tip = l_tipGenerator.generateToolTip(x_dataset, x_series,
- x_item);
+ l_tip = l_tipGenerator.generateToolTip(x_dataset, x_series, x_item);
}
String l_url = null;
- XYURLGenerator l_urlGenerator = getURLGenerator();
+ final XYURLGenerator l_urlGenerator = getURLGenerator();
if (null != l_urlGenerator) {
- l_url = l_urlGenerator.generateURL(x_dataset, x_series,
- x_item);
+ l_url = l_urlGenerator.generateURL(x_dataset, x_series, x_item);
}
- XYItemEntity l_entity = new XYItemEntity(l_entityArea, x_dataset,
- x_series, x_item, l_tip, l_url);
+ final XYItemEntity l_entity = new XYItemEntity(l_entityArea, x_dataset, x_series, x_item, l_tip, l_url);
l_entities.add(l_entity);
}
// draw the item label if there is one...
if (isItemLabelVisible(x_series, x_item)) {
- drawItemLabel(x_graphics, l_orientation, x_dataset, x_series,
- x_item, l_x1, l_y1, (l_y1 < 0.0));
+ drawItemLabel(x_graphics, l_orientation, x_dataset, x_series, x_item, l_x1, l_y1, (l_y1 < 0.0));
}
- int l_domainAxisIndex = x_plot.getDomainAxisIndex(x_domainAxis);
- int l_rangeAxisIndex = x_plot.getRangeAxisIndex(x_rangeAxis);
- updateCrosshairValues(x_crosshairState, l_x0, l_y0, l_domainAxisIndex,
- l_rangeAxisIndex, l_x1, l_y1, l_orientation);
+ final int l_domainAxisIndex = x_plot.getDomainAxisIndex(x_domainAxis);
+ final int l_rangeAxisIndex = x_plot.getRangeAxisIndex(x_rangeAxis);
+ updateCrosshairValues(x_crosshairState, l_x0, l_y0, l_domainAxisIndex, l_rangeAxisIndex, l_x1, l_y1, l_orientation);
if (0 == x_item) {
return;
}
- double l_x2 = x_domainAxis.valueToJava2D(x_dataset.getXValue(x_series,
- (x_item - 1)), x_dataArea, l_domainAxisLocation);
- double l_y2 = x_rangeAxis.valueToJava2D(x_dataset.getYValue(x_series,
- (x_item - 1)), x_dataArea, l_rangeAxisLocation);
+ final double l_x2 = x_domainAxis.valueToJava2D(x_dataset.getXValue(x_series, (x_item - 1)), x_dataArea, l_domainAxisLocation);
+ final double l_y2 = x_rangeAxis.valueToJava2D(x_dataset.getYValue(x_series, (x_item - 1)), x_dataArea, l_rangeAxisLocation);
Line2D l_line = null;
if (PlotOrientation.HORIZONTAL == l_orientation) {
l_line = new Line2D.Double(l_y1, l_x1, l_y2, l_x2);
- }
- else if (PlotOrientation.VERTICAL == l_orientation) {
+ } else if (PlotOrientation.VERTICAL == l_orientation) {
l_line = new Line2D.Double(l_x1, l_y1, l_x2, l_y2);
}
if ((null != l_line) && l_line.intersects(x_dataArea)) {
x_graphics.setPaint(getItemPaint(x_series, x_item));
x_graphics.setStroke(getItemStroke(x_series, x_item));
- if (drawOriginalSeries) {
+ if (this.drawOriginalSeries) {
x_graphics.setPaint(this.outlinePaint);
x_graphics.setStroke(this.outlineStroke);
x_graphics.draw(l_line);
@@ -1590,192 +1397,175 @@
}
/**
- * Determines if a dataset is degenerate. A degenerate dataset is a
+ * Determines if a dataset is degenerate. A degenerate dataset is a
* dataset where either series has less than two (2) points.
*
- * @param x_dataset the dataset.
- * @param x_impliedZeroSubtrahend if false, do not check the subtrahend
+ * @param x_dataset
+ * the dataset.
+ * @param x_impliedZeroSubtrahend
+ * if false, do not check the subtrahend
*
* @return true if the dataset is degenerate.
*/
- private boolean isEitherSeriesDegenerate(XYDataset x_dataset,
- boolean x_impliedZeroSubtrahend) {
+ private boolean isEitherSeriesDegenerate(final XYDataset x_dataset, final boolean x_impliedZeroSubtrahend) {
if (x_impliedZeroSubtrahend) {
return (x_dataset.getItemCount(0) < 2);
}
- return ((x_dataset.getItemCount(0) < 2)
- || (x_dataset.getItemCount(1) < 2));
+ return ((x_dataset.getItemCount(0) < 2) || (x_dataset.getItemCount(1) < 2));
}
/**
* Determines if the two (2) series are disjoint.
* Disjoint series do not overlap in the domain space.
*
- * @param x_dataset the dataset.
+ * @param x_dataset
+ * the dataset.
*
* @return true if the dataset is degenerate.
*/
- private boolean areSeriesDisjoint(XYDataset x_dataset) {
-
- int l_minuendItemCount = x_dataset.getItemCount(0);
- double l_minuendFirst = x_dataset.getXValue(0, 0);
- double l_minuendLast = x_dataset.getXValue(0, l_minuendItemCount - 1);
+ private boolean areSeriesDisjoint(final XYDataset x_dataset) {
- int l_subtrahendItemCount = x_dataset.getItemCount(1);
- double l_subtrahendFirst = x_dataset.getXValue(1, 0);
- double l_subtrahendLast = x_dataset.getXValue(1,
- l_subtrahendItemCount - 1);
+ final int l_minuendItemCount = x_dataset.getItemCount(0);
+ final double l_minuendFirst = x_dataset.getXValue(0, 0);
+ final double l_minuendLast = x_dataset.getXValue(0, l_minuendItemCount - 1);
- return ((l_minuendLast < l_subtrahendFirst)
- || (l_subtrahendLast < l_minuendFirst));
+ final int l_subtrahendItemCount = x_dataset.getItemCount(1);
+ final double l_subtrahendFirst = x_dataset.getXValue(1, 0);
+ final double l_subtrahendLast = x_dataset.getXValue(1, l_subtrahendItemCount - 1);
+
+ return ((l_minuendLast < l_subtrahendFirst) || (l_subtrahendLast < l_minuendFirst));
}
-
- public void updateCentroid(Object [] xValues, Object [] yValues) {
+ private void updateCentroid(final Object[] xValues, final Object[] yValues) {
double x = 0d, y = 0d;
for (int i = 0, N = xValues.length; i < N; ++i) {
- x += ((Double)xValues[i]).doubleValue();
- y += ((Double)yValues[i]).doubleValue();
+ x += ((Double) xValues[i]).doubleValue();
+ y += ((Double) yValues[i]).doubleValue();
}
x /= xValues.length;
y /= yValues.length;
- centroidNPoints++;
- double factorNew = 1d / centroidNPoints;
- double factorOld = 1d - factorNew;
+ this.centroidNPoints++;
+ final double factorNew = 1d / this.centroidNPoints;
+ final double factorOld = 1d - factorNew;
- centroid = new Point2D.Double((factorNew * x + factorOld * centroid.x),
- (factorNew * y + factorOld * centroid.y));
+ this.centroid = new Point2D.Double((factorNew * x + factorOld * this.centroid.x), (factorNew * y + factorOld * this.centroid.y));
}
-
- public static double calculateArea(Object [] xValues, Object [] yValues) {
+ private static double calculateArea(final Object[] xValues, final Object[] yValues) {
double area = 0d;
for (int i = 0, N = xValues.length; i < N; ++i) {
- int k = (i + 1) % N;
- double xi = ((Double)xValues[i]).doubleValue();
- double yi = ((Double)yValues[i]).doubleValue();
- double xk = ((Double)xValues[k]).doubleValue();
- double yk = ((Double)yValues[k]).doubleValue();
+ final int k = (i + 1) % N;
+ final double xi = ((Double) xValues[i]).doubleValue();
+ final double yi = ((Double) yValues[i]).doubleValue();
+ final double xk = ((Double) xValues[k]).doubleValue();
+ final double yk = ((Double) yValues[k]).doubleValue();
- area += xi*yk;
- area -= xk*yi;
+ area += xi * yk;
+ area -= xk * yi;
// TODO centroid calculation here?
}
- return 0.5d*area;
+ return 0.5d * area;
}
/**
* Draws the visual representation of a polygon
*
- * @param x_graphics the graphics device.
- * @param x_dataArea the area within which the data is being drawn.
- * @param x_plot the plot (can be used to obtain standard color
- * information etc).
- * @param x_domainAxis the domain (horizontal) axis.
- * @param x_rangeAxis the range (vertical) axis.
- * @param x_positive indicates if the polygon is positive (true) or
- * negative (false).
- * @param x_xValues a linked list of the x values (expects values to be
- * of type Double).
- * @param x_yValues a linked list of the y values (expects values to be
- * of type Double).
+ * @param x_graphics
+ * the graphics device.
+ * @param x_dataArea
+ * the area within which the data is being drawn.
+ * @param x_plot
+ * the plot (can be used to obtain standard color
+ * information etc).
+ * @param x_domainAxis
+ * the domain (horizontal) axis.
+ * @param x_rangeAxis
+ * the range (vertical) axis.
+ * @param x_positive
+ * indicates if the polygon is positive (true) or
+ * negative (false).
+ * @param x_xValues
+ * a linked list of the x values (expects values to be
+ * of type Double).
+ * @param x_yValues
+ * a linked list of the y values (expects values to be
+ * of type Double).
*/
- private void createPolygon (Graphics2D x_graphics,
- Rectangle2D x_dataArea,
- XYPlot x_plot,
- ValueAxis x_domainAxis,
- ValueAxis x_rangeAxis,
- boolean x_positive,
- LinkedList x_xValues,
- LinkedList x_yValues) {
+ private void createPolygon(final Graphics2D x_graphics, final Rectangle2D x_dataArea, final XYPlot x_plot, final ValueAxis x_domainAxis,
+ final ValueAxis x_rangeAxis, final boolean x_positive, final List x_xValues, final List x_yValues) {
- PlotOrientation l_orientation = x_plot.getOrientation();
- RectangleEdge l_domainAxisLocation = x_plot.getDomainAxisEdge();
- RectangleEdge l_rangeAxisLocation = x_plot.getRangeAxisEdge();
+ final PlotOrientation l_orientation = x_plot.getOrientation();
+ final RectangleEdge l_domainAxisLocation = x_plot.getDomainAxisEdge();
+ final RectangleEdge l_rangeAxisLocation = x_plot.getRangeAxisEdge();
- Object[] l_xValues = x_xValues.toArray();
- Object[] l_yValues = x_yValues.toArray();
+ final Object[] l_xValues = x_xValues.toArray();
+ final Object[] l_yValues = x_yValues.toArray();
- double area = calculateArea(l_xValues, l_yValues);
- if (x_positive) positiveArea += area;
- else negativeArea += area;
+ final double area = calculateArea(l_xValues, l_yValues);
+ if (x_positive)
+ this.positiveArea += area;
+ else
+ this.negativeArea += area;
updateCentroid(l_xValues, l_yValues);
- GeneralPath l_path = new GeneralPath();
+ final GeneralPath l_path = new GeneralPath();
if (PlotOrientation.VERTICAL == l_orientation) {
- double l_x = x_domainAxis.valueToJava2D((
- (Double) l_xValues[0]).doubleValue(), x_dataArea,
- l_domainAxisLocation);
+ double l_x = x_domainAxis.valueToJava2D(((Double) l_xValues[0]).doubleValue(), x_dataArea, l_domainAxisLocation);
if (this.roundXCoordinates) {
l_x = Math.rint(l_x);
}
- double l_y = x_rangeAxis.valueToJava2D((
- (Double) l_yValues[0]).doubleValue(), x_dataArea,
- l_rangeAxisLocation);
+ double l_y = x_rangeAxis.valueToJava2D(((Double) l_yValues[0]).doubleValue(), x_dataArea, l_rangeAxisLocation);
l_path.moveTo((float) l_x, (float) l_y);
for (int i = 1; i < l_xValues.length; i++) {
- l_x = x_domainAxis.valueToJava2D((
- (Double) l_xValues[i]).doubleValue(), x_dataArea,
- l_domainAxisLocation);
+ l_x = x_domainAxis.valueToJava2D(((Double) l_xValues[i]).doubleValue(), x_dataArea, l_domainAxisLocation);
if (this.roundXCoordinates) {
l_x = Math.rint(l_x);
}
- l_y = x_rangeAxis.valueToJava2D((
- (Double) l_yValues[i]).doubleValue(), x_dataArea,
- l_rangeAxisLocation);
+ l_y = x_rangeAxis.valueToJava2D(((Double) l_yValues[i]).doubleValue(), x_dataArea, l_rangeAxisLocation);
l_path.lineTo((float) l_x, (float) l_y);
}
l_path.closePath();
- }
- else {
- double l_x = x_domainAxis.valueToJava2D((
- (Double) l_xValues[0]).doubleValue(), x_dataArea,
- l_domainAxisLocation);
+ } else {
+ double l_x = x_domainAxis.valueToJava2D(((Double) l_xValues[0]).doubleValue(), x_dataArea, l_domainAxisLocation);
if (this.roundXCoordinates) {
l_x = Math.rint(l_x);
}
- double l_y = x_rangeAxis.valueToJava2D((
- (Double) l_yValues[0]).doubleValue(), x_dataArea,
- l_rangeAxisLocation);
+ double l_y = x_rangeAxis.valueToJava2D(((Double) l_yValues[0]).doubleValue(), x_dataArea, l_rangeAxisLocation);
l_path.moveTo((float) l_y, (float) l_x);
for (int i = 1; i < l_xValues.length; i++) {
- l_x = x_domainAxis.valueToJava2D((
- (Double) l_xValues[i]).doubleValue(), x_dataArea,
- l_domainAxisLocation);
+ l_x = x_domainAxis.valueToJava2D(((Double) l_xValues[i]).doubleValue(), x_dataArea, l_domainAxisLocation);
if (this.roundXCoordinates) {
l_x = Math.rint(l_x);
}
- l_y = x_rangeAxis.valueToJava2D((
- (Double) l_yValues[i]).doubleValue(), x_dataArea,
- l_rangeAxisLocation);
+ l_y = x_rangeAxis.valueToJava2D(((Double) l_yValues[i]).doubleValue(), x_dataArea, l_rangeAxisLocation);
l_path.lineTo((float) l_y, (float) l_x);
}
l_path.closePath();
}
if (l_path.intersects(x_dataArea)) {
-
- final Paint paint = x_positive ? getPositivePaint(): getNegativePaint();
- if( paint != null ) {
- x_graphics.setPaint(paint);
- x_graphics.fill(l_path);
+
+ final Paint paint = x_positive ? getPositivePaint() : getNegativePaint();
+ if (this.drawArea && paint != null) {
+ x_graphics.setPaint(paint);
+ x_graphics.fill(l_path);
}
-
- if (drawOutline) {
+
+ if (this.drawOutline) {
x_graphics.setStroke(this.outlineStroke);
x_graphics.setPaint(this.outlinePaint);
x_graphics.draw(l_path);
@@ -1784,67 +1574,62 @@
}
/**
- * Returns a default legend item for the specified series. Subclasses
+ * Returns a default legend item for the specified series. Subclasses
* should override this method to generate customised items.
*
- * @param datasetIndex the dataset index (zero-based).
- * @param series the series index (zero-based).
+ * @param datasetIndex
+ * the dataset index (zero-based).
+ * @param series
+ * the series index (zero-based).
*
* @return A legend item for the series.
*/
- public LegendItem getLegendItem(int datasetIndex, int series) {
- LegendItem result = null;
- XYPlot p = getPlot();
- if (p != null) {
- XYDataset dataset = p.getDataset(datasetIndex);
- if (dataset != null) {
- if (getItemVisible(series, 0)) {
- String label = getLegendItemLabelGenerator().generateLabel(
- dataset, series);
- String description = label;
- String toolTipText = null;
- if (getLegendItemToolTipGenerator() != null) {
- toolTipText
- = getLegendItemToolTipGenerator().generateLabel(
- dataset, series);
- }
- String urlText = null;
- if (getLegendItemURLGenerator() != null) {
- urlText = getLegendItemURLGenerator().generateLabel(
- dataset, series);
- }
- // Individualized Paints:
- //Paint paint = lookupSeriesPaint(series);
+ @Override
+ public LegendItem getLegendItem(final int datasetIndex, final int series) {
+ final XYPlot p = getPlot();
+ if (p == null)
+ return null;
- // "Area-Style"- Paint.
- Paint paint = getPositivePaint();
- Stroke stroke = lookupSeriesStroke(series);
- Shape line = getLegendLine();
- // Not-filled Shape:
- //result = new LegendItem(label, description,
- // toolTipText, urlText, line, stroke, paint);
-
- if (drawOutline) {
- // TODO Include outline style in legenditem
- // (there is a constructor for that)
- }
+ final XYDataset dataset = p.getDataset(datasetIndex);
+ if (dataset == null)
+ return null;
- // Filled Shape ("Area-Style").
- result = new LegendItem(label, description,
- toolTipText, urlText, line, paint);
- result.setLabelFont(lookupLegendTextFont(series));
- Paint labelPaint = lookupLegendTextPaint(series);
- if (labelPaint != null) {
- result.setLabelPaint(labelPaint);
- }
- result.setDataset(dataset);
- result.setDatasetIndex(datasetIndex);
- result.setSeriesKey(dataset.getSeriesKey(series));
- result.setSeriesIndex(series);
- }
- }
+ if (!getItemVisible(series, 0))
+ return null;
+ final String label = getLegendItemLabelGenerator().generateLabel(dataset, series);
+ final String description = label;
+ String toolTipText = null;
+ if (getLegendItemToolTipGenerator() != null) {
+ toolTipText = getLegendItemToolTipGenerator().generateLabel(dataset, series);
}
+ String urlText = null;
+ if (getLegendItemURLGenerator() != null) {
+ urlText = getLegendItemURLGenerator().generateLabel(dataset, series);
+ }
+
+ // "Area-Style"- Paint.
+ final Paint paint = getPositivePaint();
+ final Shape line = getLegendLine();
+
+ // Filled Shape ("Area-Style").
+ final BasicStroke NULL_STROKE = new BasicStroke(0.0f);
+ final Shape NULL_SHAPE = new Line2D.Float();
+
+ final Paint outlPaint = this.drawOutline ? this.outlinePaint : Color.black;
+ final Stroke outlStroke = this.drawOutline ? this.outlineStroke : NULL_STROKE;
+
+ final LegendItem result = new LegendItem(label, description, toolTipText, urlText, true, line, this.drawArea, paint, this.drawOutline, outlPaint,
+ outlStroke, false, NULL_SHAPE, NULL_STROKE, Color.black);
+
+ result.setLabelFont(lookupLegendTextFont(series));
+ final Paint labelPaint = lookupLegendTextPaint(series);
+ if (labelPaint != null)
+ result.setLabelPaint(labelPaint);
+ result.setDataset(dataset);
+ result.setDatasetIndex(datasetIndex);
+ result.setSeriesKey(dataset.getSeriesKey(series));
+ result.setSeriesIndex(series);
return result;
}
@@ -1852,11 +1637,13 @@
/**
* Tests this renderer for equality with an arbitrary object.
*
- * @param obj the object (null
permitted).
+ * @param obj
+ * the object (null
permitted).
*
* @return A boolean.
*/
- public boolean equals(Object obj) {
+ @Override
+ public boolean equals(final Object obj) {
if (obj == this) {
return true;
}
@@ -1866,7 +1653,7 @@
if (!super.equals(obj)) {
return false;
}
- StableXYDifferenceRenderer that = (StableXYDifferenceRenderer) obj;
+ final StableXYDifferenceRenderer that = (StableXYDifferenceRenderer) obj;
if (!PaintUtilities.equal(this.positivePaint, that.positivePaint)) {
return false;
}
@@ -1890,11 +1677,12 @@
*
* @return A clone.
*
- * @throws CloneNotSupportedException if the renderer cannot be cloned.
+ * @throws CloneNotSupportedException
+ * if the renderer cannot be cloned.
*/
+ @Override
public Object clone() throws CloneNotSupportedException {
- StableXYDifferenceRenderer clone =
- (StableXYDifferenceRenderer) super.clone();
+ final StableXYDifferenceRenderer clone = (StableXYDifferenceRenderer) super.clone();
clone.legendShape = ShapeUtilities.clone(this.legendShape);
return clone;
}
@@ -1902,11 +1690,13 @@
/**
* Provides serialization support.
*
- * @param stream the output stream.
+ * @param stream
+ * the output stream.
*
- * @throws IOException if there is an I/O error.
+ * @throws IOException
+ * if there is an I/O error.
*/
- private void writeObject(ObjectOutputStream stream) throws IOException {
+ private void writeObject(final ObjectOutputStream stream) throws IOException {
stream.defaultWriteObject();
SerialUtilities.writePaint(this.positivePaint, stream);
SerialUtilities.writePaint(this.negativePaint, stream);
@@ -1916,17 +1706,18 @@
/**
* Provides serialization support.
*
- * @param stream the input stream.
+ * @param stream
+ * the input stream.
*
- * @throws IOException if there is an I/O error.
- * @throws ClassNotFoundException if there is a classpath problem.
+ * @throws IOException
+ * if there is an I/O error.
+ * @throws ClassNotFoundException
+ * if there is a classpath problem.
*/
- private void readObject(ObjectInputStream stream)
- throws IOException, ClassNotFoundException {
+ private void readObject(final ObjectInputStream stream) throws IOException, ClassNotFoundException {
stream.defaultReadObject();
this.positivePaint = SerialUtilities.readPaint(stream);
this.negativePaint = SerialUtilities.readPaint(stream);
this.legendShape = SerialUtilities.readShape(stream);
}
-}
-// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :
+}
\ No newline at end of file
diff -r 5dacb6ea75a1 -r 77eb4553245b artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java
--- a/artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java Tue Jun 26 20:18:18 2018 +0200
+++ b/artifacts/src/main/java/org/dive4elements/river/jfree/StyledAreaSeriesCollection.java Tue Jun 26 20:19:16 2018 +0200
@@ -17,10 +17,9 @@
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
+import org.dive4elements.river.themes.ThemeDocument;
import org.jfree.data.xy.XYSeriesCollection;
-import org.dive4elements.river.themes.ThemeDocument;
-
/**
* One or more dataseries to draw a polygon (either "open up/downwards", or
* the area between two curves), a theme-document and further display options.
@@ -39,15 +38,15 @@
private FILL_MODE mode;
/** Theme-document with attributes about actual visual representation. */
- private ThemeDocument theme;
+ private final ThemeDocument theme;
/**
* @param theme the theme-document.
*/
- public StyledAreaSeriesCollection(ThemeDocument theme) {
+ public StyledAreaSeriesCollection(final ThemeDocument theme) {
this.theme = theme;
this.mode = FILL_MODE.BETWEEN;
- }
+ }
/** Gets the Fill mode. */
@@ -57,7 +56,7 @@
/** Sets the Fill mode. */
- public void setMode(FILL_MODE fMode) {
+ public void setMode(final FILL_MODE fMode) {
this.mode = fMode;
}
@@ -69,44 +68,38 @@
* @return \param renderer
*/
public StableXYDifferenceRenderer applyTheme(
- StableXYDifferenceRenderer renderer
- ) {
+ final StableXYDifferenceRenderer renderer
+ ) {
applyFillColor(renderer);
- applyShowShape(renderer);
+ applyShowBorder(renderer);
+ applyShowArea(renderer);
applyOutlineColor(renderer);
applyOutlineStyle(renderer);
applyShowLine(renderer);
applyShowAreaLabel(renderer);
applyPointStyle(renderer);
- if (mode == FILL_MODE.UNDER) {
+ if (this.mode == FILL_MODE.UNDER) {
renderer.setAreaCalculationMode(
- StableXYDifferenceRenderer.CALCULATE_NEGATIVE_AREA);
+ StableXYDifferenceRenderer.CALCULATE_NEGATIVE_AREA);
}
- else if (mode == FILL_MODE.ABOVE) {
+ else if (this.mode == FILL_MODE.ABOVE) {
renderer.setAreaCalculationMode(
- StableXYDifferenceRenderer.CALCULATE_POSITIVE_AREA);
+ StableXYDifferenceRenderer.CALCULATE_POSITIVE_AREA);
}
else {
renderer.setAreaCalculationMode(
- StableXYDifferenceRenderer.CALCULATE_ALL_AREA);
+ StableXYDifferenceRenderer.CALCULATE_ALL_AREA);
}
// Apply text style.
- theme.parseComplexTextStyle().apply(renderer);
+ this.theme.parseComplexTextStyle().apply(renderer);
return renderer;
}
private void applyFillColor(final StableXYDifferenceRenderer renderer) {
-
- final boolean showArea = theme.parseShowArea();
- if( !showArea ) {
- renderer.setPositivePaint(null);
- renderer.setNegativePaint(null);
- return;
- }
Paint paint = parseFillPaint();
-
+
if (paint != null && this.getMode() == FILL_MODE.ABOVE) {
renderer.setPositivePaint(paint);
renderer.setNegativePaint(new Color(0,0,0,0));
@@ -118,7 +111,7 @@
else {
if (paint == null)
paint = new Color(177, 117, 102);
-
+
renderer.setPositivePaint(paint);
renderer.setNegativePaint(paint);
}
@@ -126,17 +119,17 @@
private Paint parseFillPaint() {
final Color paint = this.theme.parseAreaBackgroundColor();
- final int transparency = theme.parseAreaTransparency();
-
+ final int transparency = this.theme.parseAreaTransparency();
+
final Color alphaPaint = withAlpha(paint, transparency);
-
+
final AreaFillPattern pattern = this.theme.parseAreaBackgroundPattern();
if( pattern == null || pattern == AreaFillPattern.patternFill )
return alphaPaint;
-
+
final BufferedImage image = pattern.getImage(alphaPaint);
-
+
final Rectangle2D anchor = new Rectangle2D.Double(0,0, image.getWidth(), image.getHeight());
return new TexturePaint(image, anchor);
}
@@ -145,7 +138,7 @@
if (transparency <= 0 || color == null)
return color;
-
+
return new Color(
color.getRed(),
color.getGreen(),
@@ -153,32 +146,37 @@
(int)((100 - transparency) * 2.55f));
}
- private void applyShowShape(StableXYDifferenceRenderer renderer) {
- boolean show = theme.parseAreaShowBorder();
+ private void applyShowBorder(final StableXYDifferenceRenderer renderer) {
+ final boolean show = this.theme.parseAreaShowBorder();
renderer.setDrawOutline(show);
}
+ private void applyShowArea(final StableXYDifferenceRenderer renderer) {
- private void applyShowLine(StableXYDifferenceRenderer renderer) {
+ final boolean showArea = this.theme.parseShowArea();
+ renderer.setDrawArea(showArea);
+ }
+
+ private void applyShowLine(final StableXYDifferenceRenderer renderer) {
/* FIXME: strange: this will enable/disable showing the 'point' shapes at each vertex. */
/* FIXME: this will also now be overridden by the option 'showpoints' */
- final boolean show = theme.parseShowLine();
+ final boolean show = this.theme.parseShowLine();
renderer.setShapesVisible(show);
}
- private void applyOutlineColor(StableXYDifferenceRenderer renderer) {
- Color c = theme.parseLineColorField();
+ private void applyOutlineColor(final StableXYDifferenceRenderer renderer) {
+ final Color c = this.theme.parseLineColorField();
renderer.setOutlinePaint(c);
}
/** Inform renderer whether it should draw a label. */
- private void applyShowAreaLabel(StableXYDifferenceRenderer renderer) {
- renderer.setLabelArea(theme.parseShowAreaLabel());
+ private void applyShowAreaLabel(final StableXYDifferenceRenderer renderer) {
+ renderer.setLabelArea(this.theme.parseShowAreaLabel());
}
- private void applyOutlineStyle(StableXYDifferenceRenderer renderer) {
- float[] dashes = theme.parseLineStyle();
- int size = theme.parseLineWidth();
+ private void applyOutlineStyle(final StableXYDifferenceRenderer renderer) {
+ final float[] dashes = this.theme.parseLineStyle();
+ final int size = this.theme.parseLineWidth();
Stroke stroke = null;
@@ -187,11 +185,11 @@
}
else {
stroke = new BasicStroke(Integer.valueOf(size),
- BasicStroke.CAP_BUTT,
- BasicStroke.JOIN_ROUND,
- 1.0f,
- dashes,
- 0.0f);
+ BasicStroke.CAP_BUTT,
+ BasicStroke.JOIN_ROUND,
+ 1.0f,
+ dashes,
+ 0.0f);
}
renderer.setOutlineStroke(stroke);
@@ -203,12 +201,12 @@
renderer.setShapesVisible(showPoints);
if( showPoints )
- {
- final int size = theme.parsePointWidth();
+ {
+ final int size = this.theme.parsePointWidth();
final int dim = 2 * size;
final Ellipse2D pointShape = new Ellipse2D.Double(-size, -size, dim, dim);
- final Color pointColor = theme.parsePointColor();
+ final Color pointColor = this.theme.parsePointColor();
renderer.setSeriesPaint(0, pointColor);
renderer.setSeriesPaint(1, pointColor);
@@ -219,7 +217,7 @@
}
public boolean shouldCalculateRange() {
- return theme.parseCalculateRange();
+ return this.theme.parseCalculateRange();
}
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :