/** 
 | 
 * 正多边形 
 | 
 */ 
 | 
  
 | 
import Path, { PathProps } from '../Path'; 
 | 
  
 | 
const PI = Math.PI; 
 | 
const sin = Math.sin; 
 | 
const cos = Math.cos; 
 | 
  
 | 
export class IsogonShape { 
 | 
    x = 0 
 | 
    y = 0 
 | 
    r = 0 
 | 
    n = 0 
 | 
} 
 | 
  
 | 
export interface IsogonProps extends PathProps { 
 | 
    shape?: Partial<IsogonShape> 
 | 
} 
 | 
class Isogon extends Path<IsogonProps> { 
 | 
  
 | 
    shape: IsogonShape 
 | 
  
 | 
    constructor(opts?: IsogonProps) { 
 | 
        super(opts); 
 | 
    } 
 | 
  
 | 
    getDefaultShape() { 
 | 
        return new IsogonShape(); 
 | 
    } 
 | 
  
 | 
    buildPath(ctx: CanvasRenderingContext2D, shape: IsogonShape) { 
 | 
        const n = shape.n; 
 | 
        if (!n || n < 2) { 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        const x = shape.x; 
 | 
        const y = shape.y; 
 | 
        const r = shape.r; 
 | 
  
 | 
        const dStep = 2 * PI / n; 
 | 
        let deg = -PI / 2; 
 | 
  
 | 
        ctx.moveTo(x + r * cos(deg), y + r * sin(deg)); 
 | 
        for (let i = 0, end = n - 1; i < end; i++) { 
 | 
            deg += dStep; 
 | 
            ctx.lineTo(x + r * cos(deg), y + r * sin(deg)); 
 | 
        } 
 | 
  
 | 
        ctx.closePath(); 
 | 
  
 | 
        return; 
 | 
    } 
 | 
} 
 | 
  
 | 
Isogon.prototype.type = 'isogon'; 
 | 
  
 | 
export default Isogon; 
 |