@@ -24,6 +24,7 @@ import GlobalModel from '../../model/Global';
2424import ExtensionAPI from '../../core/ExtensionAPI' ;
2525import PieSeriesModel from './PieSeries' ;
2626import { SectorShape } from 'zrender/src/graphic/shape/Sector' ;
27+ import { normalizeArcAngles } from 'zrender/src/core/PathProxy' ;
2728
2829const PI2 = Math . PI * 2 ;
2930const RADIAN = Math . PI / 180 ;
@@ -91,7 +92,9 @@ export default function pieLayout(
9192
9293 const { cx, cy, r, r0 } = getBasicPieLayout ( seriesModel , api ) ;
9394
94- const startAngle = - seriesModel . get ( 'startAngle' ) * RADIAN ;
95+ let startAngle = - seriesModel . get ( 'startAngle' ) * RADIAN ;
96+ let endAngle = seriesModel . get ( 'endAngle' ) ;
97+ endAngle = endAngle === 'auto' ? startAngle - PI2 : - endAngle * RADIAN ;
9598
9699 const minAngle = seriesModel . get ( 'minAngle' ) * RADIAN ;
97100
@@ -113,12 +116,19 @@ export default function pieLayout(
113116 const extent = data . getDataExtent ( valueDim ) ;
114117 extent [ 0 ] = 0 ;
115118
119+ const dir = clockwise ? 1 : - 1 ;
120+ const angles = [ startAngle , endAngle ] ;
121+ normalizeArcAngles ( angles , ! clockwise ) ;
122+
123+ [ startAngle , endAngle ] = angles ;
124+
125+ const angleRange = Math . abs ( endAngle - startAngle ) ;
126+
116127 // In the case some sector angle is smaller than minAngle
117- let restAngle = PI2 ;
128+ let restAngle = angleRange ;
118129 let valueSumLargerThanMinAngle = 0 ;
119130
120131 let currentAngle = startAngle ;
121- const dir = clockwise ? 1 : - 1 ;
122132
123133 data . setLayout ( { viewRect, r } ) ;
124134
@@ -146,7 +156,7 @@ export default function pieLayout(
146156 ? unitRadian : ( value * unitRadian ) ;
147157 }
148158 else {
149- angle = PI2 / validDataCount ;
159+ angle = angleRange / validDataCount ;
150160 }
151161
152162 if ( angle < minAngle ) {
@@ -180,7 +190,7 @@ export default function pieLayout(
180190 // Average the angle if rest angle is not enough after all angles is
181191 // Constrained by minAngle
182192 if ( restAngle <= 1e-3 ) {
183- const angle = PI2 / validDataCount ;
193+ const angle = angleRange / validDataCount ;
184194 data . each ( valueDim , function ( value : number , idx : number ) {
185195 if ( ! isNaN ( value ) ) {
186196 const layout = data . getItemLayout ( idx ) ;
0 commit comments