package com.isti.traceview.transformations.ppm;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Point;
import java.awt.geom.GeneralPath;
import java.awt.geom.Rectangle2D;
import org.jfree.chart.plot.PlotRenderingInfo;
import org.jfree.chart.plot.PolarPlot;
import org.jfree.chart.renderer.DefaultPolarItemRenderer;
import org.jfree.data.xy.XYDataset;
class PPMPolarItemRenderer extends DefaultPolarItemRenderer {
private static final long serialVersionUID = 1L;
private double rulerTheta = 0.0;
public void setRulerAngle(double theta) {
this.rulerTheta = theta;
}
public double getRulerAngle() {
return rulerTheta;
}
/**
* Plots the data for a given series. Changes default closed polygon
* realisation to chain of sections First series is angle mark(2 values),
* other is data Add begin mark to data series
*
* @param g2
* the drawing surface.
* @param dataArea
* the data area.
* @param info
* collects plot rendering info.
* @param plot
* the plot.
* @param dataset
* the dataset.
* @param seriesIndex
* the series index.
*/
@Override
public void drawSeries(Graphics2D g2, Rectangle2D dataArea, PlotRenderingInfo info, PolarPlot plot,
XYDataset dataset, int seriesIndex) {
GeneralPath gp = new GeneralPath();
int numPoints = dataset.getItemCount(seriesIndex);
Point begin = null;
double maxRadius = 0;
for (int i = 0; i < numPoints; i++) {
double theta = dataset.getXValue(seriesIndex, i);
double radius = dataset.getYValue(seriesIndex, i);
if (radius > maxRadius) {
maxRadius = radius;
}
@SuppressWarnings("deprecation")
Point p = plot.translateValueThetaRadiusToJava2D(theta, radius, dataArea);
if (i == 0) {
gp.moveTo(new Float(p.getX()), new Float(p.getY()));
begin = p;
} else {
gp.lineTo(new Float(p.getX()), new Float(p.getY()));
}
}
g2.setPaint(lookupSeriesPaint(seriesIndex));
g2.setStroke(lookupSeriesStroke(seriesIndex));
g2.draw(gp);
// Drawing starting mark
g2.setColor(Color.BLACK);
g2.drawOval(begin.x - 2, begin.y - 2, 4, 4);
// Drawing ruler
g2.setColor(Color.BLUE);
g2.setStroke(new BasicStroke(2));
@SuppressWarnings("deprecation")
Point ruler1 = plot.translateValueThetaRadiusToJava2D(rulerTheta, maxRadius, dataArea);
@SuppressWarnings("deprecation")
Point ruler2 = plot.translateValueThetaRadiusToJava2D(rulerTheta + 180, maxRadius, dataArea);
g2.drawLine(ruler1.x, ruler1.y, ruler2.x, ruler2.y);
}
}