简体   繁体   English

未解决在TypeScript项目中使用Path2D

[英]Using Path2D in a TypeScript project is not resolved

I want to use the new Path2D api in a TypeScript project but I don't see it in lib.es6.d.ts What is my best course of action to use this? 我想在TypeScript项目中使用新的Path2D api,但我没有在lib.es6.d.ts中看到它。使用它的最佳方法是什么? Does anyone have a d.ts file for Path2D? 有没有人有Path.D的d.ts文件?

I took me some time, and I made the Declaration for you: 我带了一些时间,我为你做了宣言:

I've done this following the same standard TypeScript defines its interfaces internally in lib.d.ts . 我已经按照相同的标准TypeScript在lib.d.ts内部定义了它的接口。
Note that you can extend this code easily for future features, and if you do I would love to see it updated here. 请注意,您可以轻松扩展此代码以用于将来的功能,如果您这样做,我很乐意在此处更新它。

Path2D.d.ts ( View in TypeScript-Playground ) Path2D.d.ts在TypeScript-Playground中查看

// Class
interface Path2D {
    addPath(path: Path2D, transform?: SVGMatrix);
    closePath(): void;
    moveTo(x: number, y: number): void;
    lineTo(x: number, y: number): void;
    bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void;
    quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void;
    arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;
    arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void;
    /*ellipse(x: number, y: number, radiusX: number, radiusY: number, rotation: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void;*/
    rect(x: number, y: number, w: number, h: number): void;
}

// Constructor
interface Path2DConstructor {
    new (): Path2D;
    new (d: string): Path2D;
    new (path: Path2D, fillRule?: string): Path2D;
    prototype: Path2D;
}
declare var Path2D: Path2DConstructor;

// Extend Window 
interface Window { Path2D: Path2DConstructor; }

// Extend CanvasRenderingContext2D
interface CanvasRenderingContext2D {
    fill(path: Path2D): void;
    stroke(path: Path2D): void;
    clip(path: Path2D, fillRule?: string): void;
}

Examples: 例子:

var canvas: HTMLCanvasElement = <HTMLCanvasElement>document.getElementById("canvas");
var ctx = canvas.getContext("2d");

var path1 = new Path2D();
path1.rect(10, 10, 100, 100);

var path2 = new Path2D(path1);
path2.moveTo(220, 60);
path2.arc(170, 60, 50, 0, 2 * Math.PI);

var m = (<SVGSVGElement>document.createElementNS("http://www.w3.org/2000/svg", "svg")).createSVGMatrix();
m.a = 1; m.b = 0;
m.c = 0; m.d = 1;
m.e = 300; m.f = 0;
path2.addPath(path1, m);

ctx.stroke(path1);
ctx.fill(path2);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM