/**
|
* 圆弧
|
*/
|
|
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;
|