diff --git a/src/js/charts/DonutChart.js b/src/js/charts/DonutChart.js index 84f5729..e251126 100644 --- a/src/js/charts/DonutChart.js +++ b/src/js/charts/DonutChart.js @@ -47,6 +47,7 @@ export default class DonutChart extends AggregationChart { s.sliceTotals.map((total, i) => { const startAngle = curAngle; const originDiffAngle = (total / s.grandTotal) * FULL_ANGLE; + const largeArc = originDiffAngle > 180 ? 1: 0; const diffAngle = clockWise ? -originDiffAngle : originDiffAngle; const endAngle = curAngle = curAngle + diffAngle; const startPosition = getPositionByAngle(startAngle, radius); @@ -62,7 +63,7 @@ export default class DonutChart extends AggregationChart { curStart = startPosition; curEnd = endPosition; } - const curPath = makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise); + const curPath = makeArcStrokePathStr(curStart, curEnd, this.center, this.radius, this.clockWise, largeArc); s.sliceStrings.push(curPath); s.slicesProperties.push({ diff --git a/src/js/charts/PieChart.js b/src/js/charts/PieChart.js index 7209a36..b4d473b 100644 --- a/src/js/charts/PieChart.js +++ b/src/js/charts/PieChart.js @@ -42,10 +42,7 @@ export default class PieChart extends AggregationChart { s.sliceTotals.map((total, i) => { const startAngle = curAngle; const originDiffAngle = (total / s.grandTotal) * FULL_ANGLE; - let largeArc = 0; - if(originDiffAngle > 180){ - largeArc = 1; - } + const largeArc = originDiffAngle > 180 ? 1: 0; const diffAngle = clockWise ? -originDiffAngle : originDiffAngle; const endAngle = curAngle = curAngle + diffAngle; const startPosition = getPositionByAngle(startAngle, radius); diff --git a/src/js/utils/draw.js b/src/js/utils/draw.js index e5174af..136ce8a 100644 --- a/src/js/utils/draw.js +++ b/src/js/utils/draw.js @@ -120,12 +120,12 @@ export function makeArcPathStr(startPosition, endPosition, center, radius, clock ${arcEndX} ${arcEndY} z`; } -export function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1){ +export function makeArcStrokePathStr(startPosition, endPosition, center, radius, clockWise=1, largeArc=0){ let [arcStartX, arcStartY] = [center.x + startPosition.x, center.y + startPosition.y]; let [arcEndX, arcEndY] = [center.x + endPosition.x, center.y + endPosition.y]; return `M${arcStartX} ${arcStartY} - A ${radius} ${radius} 0 0 ${clockWise ? 1 : 0} + A ${radius} ${radius} 0 ${largeArc} ${clockWise ? 1 : 0} ${arcEndX} ${arcEndY}`; }