12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- /**
- * 玫瑰线
- * @module zrender/graphic/shape/Rose
- */
- import Path, { PathProps } from '../Path';
- const sin = Math.sin;
- const cos = Math.cos;
- const radian = Math.PI / 180;
- export class RoseShape {
- cx = 0
- cy = 0
- r: number[] = []
- k = 0
- n = 1
- }
- export interface RoseProps extends PathProps {
- shape?: Partial<RoseShape>
- }
- class Rose extends Path<RoseProps> {
- shape: RoseShape
- constructor(opts?: RoseProps) {
- super(opts);
- }
- getDefaultStyle() {
- return {
- stroke: '#000',
- fill: null as string
- };
- }
- getDefaultShape() {
- return new RoseShape();
- }
- buildPath(ctx: CanvasRenderingContext2D, shape: RoseShape) {
- const R = shape.r;
- const k = shape.k;
- const n = shape.n;
- const x0 = shape.cx;
- const y0 = shape.cy;
- let x;
- let y;
- let r;
- ctx.moveTo(x0, y0);
- for (let i = 0, len = R.length; i < len; i++) {
- r = R[i];
- for (let j = 0; j <= 360 * n; j++) {
- x = r
- * sin(k / n * j % 360 * radian)
- * cos(j * radian)
- + x0;
- y = r
- * sin(k / n * j % 360 * radian)
- * sin(j * radian)
- + y0;
- ctx.lineTo(x, y);
- }
- }
- }
- }
- Rose.prototype.type = 'rose';
- export default Rose;
|