slice.setEndRho(rhoAcum + deltaRho);
// create shadows
for (int shindex = 0; shindex < shadowGroups.size(); shindex++) {
Sprite shadowAttr = shadowAttributes.get(shindex);
SpriteList<Sprite> shadows = shadowGroups.get(shindex);
final PathSprite shadow;
commands = calculateSegment(slice);
if (i < shadows.size()) {
shadow = (PathSprite) shadows.get(i);
shadow.setHidden(false);
} else {
shadow = (PathSprite) shadowAttr.copy();
shadow.setFill(Color.NONE);
chart.addSprite(shadow);
shadows.add(shadow);
}
if (chart.isAnimated() && oldSlices.get(i) != null) {
createSegmentAnimator(shadow, oldSlices.get(i), slice).run(chart.getAnimationDuration(),
chart.getAnimationEasing());
} else {
shadow.setCommands(commands);
shadow.redraw();
}
if (shadowRenderer != null) {
shadowRenderer.spriteRenderer(shadow, i, chart.getCurrentStore());
}
}
}
}
shadowed = true;
} else {
hideShadows();
}
// do pie slices after
for (int i = 0; i < store.size(); i++) {
if (exclude.contains(i)) {
continue;
}
slice = slices.get(i);
rhoAcum = 0;
for (int j = 0; j < layers; j++) {
double deltaRho = 0;
if (lengthField.size() > 0) {
deltaRho = lengthField.get(j).getValue(store.get(i)).doubleValue() / layerTotals.get(i) * slice.getRho();
} else {
deltaRho = slice.getRho();
}
final PathSprite sprite;
int index = i * layers + j;
if (sprites.get(index) != null) {
sprite = (PathSprite) sprites.get(index);
sprite.setHidden(false);
} else {
// Create a new sprite if needed (no height)
sprite = new PathSprite();
sprite.setFill(getColor(i));
sprite.setZIndex(10);
sprites.add(sprite);
chart.addSprite(sprite);
}
if (stroke != null) {
sprite.setStroke(stroke);
}
if (!Double.isNaN(strokeWidth)) {
sprite.setStrokeWidth(strokeWidth);
}
slice.setMargin(margin);
slice.setStartRho(rhoAcum + (deltaRho * donut / 100));
slice.setEndRho(rhoAcum + deltaRho);
if (labelConfig != null) {
calculateMiddle(slice, i);
}
if (chart.isAnimated() && oldSlices.get(i) != null) {
createSegmentAnimator(sprite, oldSlices.get(i), slice).run(chart.getAnimationDuration(),
chart.getAnimationEasing());
} else {
sprite.setCommands(calculateSegment(slice));
sprite.redraw();
}
if (renderer != null) {
renderer.spriteRenderer(sprite, i, store);
}
rhoAcum += deltaRho;