// Composite originalComposite = g2.getComposite();
// g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER,
// 1.0f));
// classify the keys according to which side the label will appear...
final DefaultKeyedValues leftKeys = new DefaultKeyedValues();
final DefaultKeyedValues rightKeys = new DefaultKeyedValues();
double runningTotal = 0.0;
final Iterator iterator = keys.iterator();
while (iterator.hasNext()) {
final Comparable key = (Comparable) iterator.next();
boolean include = true;
double v = 0.0;
final Number n = this.dataset.getValue(key);
if (n == null) {
include = !this.ignoreNullValues;
} else {
v = n.doubleValue();
include = this.ignoreZeroValues ? v > 0.0 : v >= 0.0;
}
if (include) {
runningTotal = runningTotal + v;
// work out the mid angle (0 - 90 and 270 - 360) = right,
// otherwise left
final double mid = this.startAngle
+ (this.direction.getFactor()
* ((runningTotal - v / 2.0) * 360) / totalValue);
if (Math.cos(Math.toRadians(mid)) < 0.0) {
leftKeys.addValue(key, new Double(mid));
} else {
rightKeys.addValue(key, new Double(mid));
}
}
}
g2.setFont(this.getLabelFont());