@visactor/vrender-core
Version:
## Description
106 lines (105 loc) • 3.92 kB
TypeScript
import type { IAABBBounds, IPoint, IPointLike } from '@visactor/vutils';
import type { Releaseable, IDirection } from './common';
import type { CurveTypeEnum } from '../common/enums';
export declare const strCommandMap: string[];
export type CommandType = [
number,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?
];
export type CommandStrType = [
string,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?,
(number | boolean)?
];
export interface ICurve<T> {
type: number;
defined: boolean;
originP1?: IPointLike;
originP2?: IPointLike;
readonly p0: T;
readonly p1?: T;
readonly p2?: T;
readonly p3?: T;
getPointAt: (t: number) => IPointLike;
getAngleAt: (t: number) => number;
getLength: (direction?: IDirection) => number;
draw: (path: IPath2D, x: number, y: number, sx: number, sy: number, percent: number) => void;
getYAt: (x: number) => number;
includeX: (x: number) => boolean;
}
export interface ICubicBezierCurve extends ICurve<IPoint> {
type: CurveTypeEnum.CubicBezierCurve;
readonly p1: IPoint;
readonly p2: IPoint;
readonly p3: IPoint;
}
export interface IQuadraticBezierCurve extends ICurve<IPoint> {
type: CurveTypeEnum.QuadraticBezierCurve;
readonly p1: IPoint;
readonly p2: IPoint;
}
export interface IArcCurve extends ICurve<IPoint> {
type: CurveTypeEnum.ArcCurve;
readonly p1: IPoint;
radius: number;
}
export interface ILineCurve extends ICurve<IPoint> {
type: CurveTypeEnum.LineCurve;
readonly p1: IPoint;
}
export interface IEllipseCurve extends ICurve<IPoint> {
type: CurveTypeEnum.EllipseCurve;
radiusX: number;
radiusY: number;
rotation: number;
startAngle: number;
endAngle: number;
anticlockwise?: boolean;
}
export interface IMoveCurve extends ICurve<IPoint> {
type: CurveTypeEnum.MoveCurve;
readonly p1: IPoint;
}
export interface ICurvePath<T> {
curves: ICurve<T>[];
bounds?: IAABBBounds;
getPointAt: (t: number) => IPointLike;
getCurveLengths: () => number[];
getLength: (direction?: IDirection) => number;
getBounds?: () => IAABBBounds;
}
export interface IPath2D {
moveTo: (x: number, y: number, z?: number) => void;
lineTo: (x: number, y: number, z?: number) => void;
quadraticCurveTo: (aCPx: number, aCPy: number, aX: number, aY: number, z?: number) => void;
bezierCurveTo: (aCP1x: number, aCP1y: number, aCP2x: number, aCP2y: number, aX: number, aY: number, z?: number) => void;
arcTo: (aX1: number, aY1: number, aX2: number, aY2: number, aRadius: number, z?: number) => void;
ellipse: (aX: number, aY: number, xRadius: number, yRadius: number, aRotation: number, aStartAngle: number, aEndAngle: number, aClockwise: boolean) => void;
rect: (x: number, y: number, w: number, h: number, z?: number) => void;
arc: (x: number, y: number, radius: number, startAngle: number, endAngle: number, counterclockwise?: boolean, z?: number) => void;
closePath: () => void;
}
export interface ICustomPath2D extends ICurvePath<IPoint>, IPath2D, Releaseable {
commandList: CommandType[];
toString: () => string;
transform: (x: number, y: number, sx: number, sy: number) => void;
fromString: (pathStr: string, x?: number, y?: number, sX?: number, sY?: number) => ICustomPath2D;
fromCustomPath2D: (path: ICustomPath2D, x?: number, y?: number, sX?: number, sY?: number) => ICustomPath2D;
addCurve: (curve: ICurve<IPoint>) => void;
getYAt: (x: number) => number;
clear: () => void;
drawWithClipRange: (ctx: IPath2D, size: number, x: number, y: number, clipRange: number) => void;
}