
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
import { Percent } from "../../core/util/Percent";
import { PercentChart } from "../percent/PercentChart";
import { p50 } from "../../core/util/Percent";
import * as $utils from "../../core/util/Utils";
import * as $math from "../../core/util/Math";
/**
* Creates a pie chart.
*
* @see {@link https://www.amcharts.com/docs/v5/charts/percent-charts/pie-chart/} for more info
* @important
*/
export class PieChart extends PercentChart {
constructor() {
super(...arguments);
Object.defineProperty(this, "_maxRadius", {
enumerable: true,
configurable: true,
writable: true,
value: 1
});
}
_afterNew() {
super._afterNew();
this.seriesContainer.setAll({ x: p50, y: p50 });
}
_prepareChildren() {
super._prepareChildren();
const chartContainer = this.chartContainer;
const w = chartContainer.innerWidth();
const h = chartContainer.innerHeight();
const startAngle = this.get("startAngle", 0);
const endAngle = this.get("endAngle", 0);
const innerRadius = this.get("innerRadius");
let bounds = $math.getArcBounds(0, 0, startAngle, endAngle, 1);
const wr = w / (bounds.right - bounds.left);
const hr = h / (bounds.bottom - bounds.top);
let innerBounds = { left: 0, right: 0, top: 0, bottom: 0 };
if (innerRadius instanceof Percent) {
let value = innerRadius.value;
let mr = Math.min(wr, hr);
value = Math.max(mr * value, mr - Math.min(h, w)) / mr;
innerBounds = $math.getArcBounds(0, 0, startAngle, endAngle, value);
this.setPrivateRaw("irModifyer", value / innerRadius.value);
}
bounds = $math.mergeBounds([bounds, innerBounds]);
const prevRadius = this._maxRadius;
this._maxRadius = Math.min(wr, hr);
const radius = $utils.relativeToValue(this.get("radius", 0), this._maxRadius);
this.seriesContainer.setAll({
dy: -radius * (bounds.bottom + bounds.top) / 2, dx: -radius * (bounds.right + bounds.left) / 2
});
if (this.isDirty("startAngle") || this.isDirty("endAngle") || prevRadius != this._maxRadius) {
this.series.each((series) => {
series._markDirtyKey("startAngle");
});
}
if (this.isDirty("innerRadius") || this.isDirty("radius")) {
this.series.each((series) => {
series._markDirtyKey("innerRadius");
});
}
}
/**
* Returns outer radius in pixels.
*
* If optional series parameter is passed in, it will return outer radius
* of that particular series.
*
* @param series Series
* @return Radius in pixels
*/
radius(series) {
let radius = $utils.relativeToValue(this.get("radius", 0), this._maxRadius);
let innerRadius = $utils.relativeToValue(this.get("innerRadius", 0), radius);
if (series) {
let index = this.series.indexOf(series);
let length = this.series.length;
let seriesRadius = series.get("radius");
if (seriesRadius != null) {
return innerRadius + $utils.relativeToValue(seriesRadius, radius - innerRadius);
}
else {
return innerRadius + (radius - innerRadius) / length * (index + 1);
}
}
return radius;
}
/**
* Returns inner radius in pixels.
*
* If optional series parameter is passed in, it will return inner radius
* of that particular series.
*
* @param series Series
* @return Radius in pixels
*/
innerRadius(series) {
const radius = this.radius();
let innerRadius = $utils.relativeToValue(this.get("innerRadius", 0), radius);
if (innerRadius < 0) {
innerRadius = radius + innerRadius;
}
if (series) {
let index = this.series.indexOf(series);
let length = this.series.length;
let seriesInnerRadius = series.get("innerRadius");
if (seriesInnerRadius != null) {
return innerRadius + $utils.relativeToValue(seriesInnerRadius, radius - innerRadius);
}
else {
return innerRadius + (radius - innerRadius) / length * index;
}
}
return innerRadius;
}
}
Object.defineProperty(PieChart, "className", {
enumerable: true,
configurable: true,
writable: true,
value: "PieChart"
});
Object.defineProperty(PieChart, "classNames", {
enumerable: true,
configurable: true,
writable: true,
value: PercentChart.classNames.concat([PieChart.className])
});
//# sourceMappingURL=PieChart.js.map