| /** | 
|  * 圆弧 | 
|  */ | 
|   | 
| import Path, { PathProps } from '../Path'; | 
|   | 
| export class ArcShape { | 
|     cx = 0; | 
|     cy = 0; | 
|     r = 0; | 
|     startAngle = 0; | 
|     endAngle = Math.PI * 2 | 
|     clockwise? = true | 
| } | 
|   | 
| export interface ArcProps extends PathProps { | 
|     shape?: Partial<ArcShape> | 
| } | 
|   | 
| class Arc extends Path<ArcProps> { | 
|   | 
|     shape: ArcShape | 
|   | 
|     constructor(opts?: ArcProps) { | 
|         super(opts); | 
|     } | 
|   | 
|     getDefaultStyle() { | 
|         return { | 
|             stroke: '#000', | 
|             fill: null as string | 
|         }; | 
|     } | 
|   | 
|     getDefaultShape() { | 
|         return new ArcShape(); | 
|     } | 
|   | 
|     buildPath(ctx: CanvasRenderingContext2D, shape: ArcShape) { | 
|   | 
|         const x = shape.cx; | 
|         const y = shape.cy; | 
|         const r = Math.max(shape.r, 0); | 
|         const startAngle = shape.startAngle; | 
|         const endAngle = shape.endAngle; | 
|         const clockwise = shape.clockwise; | 
|   | 
|         const unitX = Math.cos(startAngle); | 
|         const unitY = Math.sin(startAngle); | 
|   | 
|         ctx.moveTo(unitX * r + x, unitY * r + y); | 
|         ctx.arc(x, y, r, startAngle, endAngle, !clockwise); | 
|     } | 
| } | 
|   | 
| Arc.prototype.type = 'arc'; | 
|   | 
| export default Arc; |