@mylasertools/kerfscript 0.0.0-stage → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/CLA.md +76 -0
- package/COMMERCIAL-LICENSE.md +63 -0
- package/LANGUAGE.md +398 -0
- package/LICENSE +661 -0
- package/README.md +187 -2
- package/THIRD-PARTY-NOTICES.md +124 -0
- package/TRADEMARKS.md +45 -0
- package/dist/ast.d.cts +160 -0
- package/dist/ast.d.ts +160 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +19416 -0
- package/dist/customizer.d.cts +19 -0
- package/dist/customizer.d.ts +19 -0
- package/dist/evaluator.d.cts +129 -0
- package/dist/evaluator.d.ts +129 -0
- package/dist/export/dxf.d.cts +3 -0
- package/dist/export/dxf.d.ts +3 -0
- package/dist/export/svg.d.cts +15 -0
- package/dist/export/svg.d.ts +15 -0
- package/dist/functions.d.cts +4 -0
- package/dist/functions.d.ts +4 -0
- package/dist/geometry.d.cts +44 -0
- package/dist/geometry.d.ts +44 -0
- package/dist/index.cjs +44 -0
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +44 -0
- package/dist/joinery.d.cts +7 -0
- package/dist/joinery.d.ts +7 -0
- package/dist/lexer.d.cts +28 -0
- package/dist/lexer.d.ts +28 -0
- package/dist/parser.d.cts +6 -0
- package/dist/parser.d.ts +6 -0
- package/dist/paths.d.cts +28 -0
- package/dist/paths.d.ts +28 -0
- package/dist/render.d.cts +58 -0
- package/dist/render.d.ts +58 -0
- package/dist/stdlib.d.cts +1 -0
- package/dist/stdlib.d.ts +1 -0
- package/dist/text.d.cts +36 -0
- package/dist/text.d.ts +36 -0
- package/dist/values.d.cts +25 -0
- package/dist/values.d.ts +25 -0
- package/docs/cli.md +76 -0
- package/docs/compatibility.md +64 -0
- package/docs/customizer.md +74 -0
- package/docs/getting-started.md +115 -0
- package/docs/javascript.md +153 -0
- package/docs/kerf.md +67 -0
- package/docs/layers.md +108 -0
- package/docs/openscad.md +71 -0
- package/docs/parts-and-sheets.md +82 -0
- package/docs/versions.md +33 -0
- package/package.json +86 -4
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Value } from './values.cjs';
|
|
2
|
+
export interface Parameter {
|
|
3
|
+
name: string;
|
|
4
|
+
caption: string;
|
|
5
|
+
group: string;
|
|
6
|
+
type: 'number' | 'string' | 'boolean';
|
|
7
|
+
initial: Value;
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
10
|
+
step?: number;
|
|
11
|
+
options?: {
|
|
12
|
+
name: string;
|
|
13
|
+
value: number | string;
|
|
14
|
+
}[];
|
|
15
|
+
span: [number, number];
|
|
16
|
+
}
|
|
17
|
+
export declare function parameters(source: string): {
|
|
18
|
+
parameters: Parameter[];
|
|
19
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { Value } from './values.js';
|
|
2
|
+
export interface Parameter {
|
|
3
|
+
name: string;
|
|
4
|
+
caption: string;
|
|
5
|
+
group: string;
|
|
6
|
+
type: 'number' | 'string' | 'boolean';
|
|
7
|
+
initial: Value;
|
|
8
|
+
min?: number;
|
|
9
|
+
max?: number;
|
|
10
|
+
step?: number;
|
|
11
|
+
options?: {
|
|
12
|
+
name: string;
|
|
13
|
+
value: number | string;
|
|
14
|
+
}[];
|
|
15
|
+
span: [number, number];
|
|
16
|
+
}
|
|
17
|
+
export declare function parameters(source: string): {
|
|
18
|
+
parameters: Parameter[];
|
|
19
|
+
};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { Expr, Param, Program, Stmt } from './ast.cjs';
|
|
2
|
+
import { type Shape } from './geometry.cjs';
|
|
3
|
+
import { type Pos } from './lexer.cjs';
|
|
4
|
+
import { type FontBook } from './text.cjs';
|
|
5
|
+
import { type Closure, type Value } from './values.cjs';
|
|
6
|
+
export interface LayerDef {
|
|
7
|
+
name: string;
|
|
8
|
+
mode: 'cut' | 'line' | 'fill' | 'guide';
|
|
9
|
+
color: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_LAYERS: LayerDef[];
|
|
12
|
+
export interface EvalOptions {
|
|
13
|
+
overrides?: Record<string, Value>;
|
|
14
|
+
resolve?: (path: string) => string | undefined;
|
|
15
|
+
fonts?: FontBook;
|
|
16
|
+
maxSteps?: number;
|
|
17
|
+
limits?: Partial<Limits>;
|
|
18
|
+
}
|
|
19
|
+
export interface Limits {
|
|
20
|
+
maxParts: number;
|
|
21
|
+
maxSegments: number;
|
|
22
|
+
maxListLength: number;
|
|
23
|
+
maxListItems: number;
|
|
24
|
+
maxTextLength: number;
|
|
25
|
+
maxPoints: number;
|
|
26
|
+
maxOutputPoints: number;
|
|
27
|
+
maxSheets: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_LIMITS: Limits;
|
|
30
|
+
interface ModDef {
|
|
31
|
+
params: Param[];
|
|
32
|
+
body: Stmt[];
|
|
33
|
+
env: Env;
|
|
34
|
+
}
|
|
35
|
+
interface FnDef {
|
|
36
|
+
params: Param[];
|
|
37
|
+
body: Expr;
|
|
38
|
+
env: Env;
|
|
39
|
+
}
|
|
40
|
+
interface ChildCtx {
|
|
41
|
+
stmts: Stmt[];
|
|
42
|
+
env: Env;
|
|
43
|
+
}
|
|
44
|
+
declare class Env {
|
|
45
|
+
parent?: Env | undefined;
|
|
46
|
+
caller?: Env | undefined;
|
|
47
|
+
vars: Map<string, Value>;
|
|
48
|
+
fns: Map<string, FnDef>;
|
|
49
|
+
mods: Map<string, ModDef>;
|
|
50
|
+
children?: ChildCtx;
|
|
51
|
+
constructor(parent?: Env | undefined, caller?: Env | undefined);
|
|
52
|
+
get(name: string): {
|
|
53
|
+
found: boolean;
|
|
54
|
+
value?: Value;
|
|
55
|
+
};
|
|
56
|
+
fn(name: string): FnDef | undefined;
|
|
57
|
+
mod(name: string): ModDef | undefined;
|
|
58
|
+
childCtx(): ChildCtx | undefined;
|
|
59
|
+
}
|
|
60
|
+
interface Args {
|
|
61
|
+
pos: Value[];
|
|
62
|
+
named: Map<string, Value>;
|
|
63
|
+
at: Pos;
|
|
64
|
+
}
|
|
65
|
+
export interface EvalResult {
|
|
66
|
+
shape: Shape;
|
|
67
|
+
globals: Env;
|
|
68
|
+
layers: Map<string, LayerDef>;
|
|
69
|
+
echoes: string[];
|
|
70
|
+
warnings: string[];
|
|
71
|
+
}
|
|
72
|
+
export declare const STDLIB: Record<string, string>;
|
|
73
|
+
export declare class Evaluator {
|
|
74
|
+
private opts;
|
|
75
|
+
private steps;
|
|
76
|
+
private depth;
|
|
77
|
+
private maxSteps;
|
|
78
|
+
readonly limits: Limits;
|
|
79
|
+
private pointCount;
|
|
80
|
+
private itemCount;
|
|
81
|
+
private copies;
|
|
82
|
+
readonly echoes: string[];
|
|
83
|
+
readonly warnings: string[];
|
|
84
|
+
readonly layers: Map<string, LayerDef>;
|
|
85
|
+
private loaded;
|
|
86
|
+
private builtins;
|
|
87
|
+
constructor(opts?: EvalOptions);
|
|
88
|
+
run(program: Program): EvalResult;
|
|
89
|
+
private tick;
|
|
90
|
+
private load;
|
|
91
|
+
private hoist;
|
|
92
|
+
private included;
|
|
93
|
+
private assign;
|
|
94
|
+
block(stmts: Stmt[], env: Env, top?: boolean): Shape;
|
|
95
|
+
private stmt;
|
|
96
|
+
private bindSeq;
|
|
97
|
+
private iterable;
|
|
98
|
+
private loop;
|
|
99
|
+
private evalArgs;
|
|
100
|
+
private bindParams;
|
|
101
|
+
private callModule;
|
|
102
|
+
private childStmts;
|
|
103
|
+
callFunction(f: FnDef | Closure, args: Args, caller: Env, name: string): Value;
|
|
104
|
+
expr(x: Expr, env: Env): Value;
|
|
105
|
+
private listItem;
|
|
106
|
+
private grow;
|
|
107
|
+
private charge;
|
|
108
|
+
private call;
|
|
109
|
+
private specialFunction;
|
|
110
|
+
private echo;
|
|
111
|
+
private echoText;
|
|
112
|
+
private arith;
|
|
113
|
+
private arg;
|
|
114
|
+
private num;
|
|
115
|
+
private vec2;
|
|
116
|
+
private points;
|
|
117
|
+
private dyn;
|
|
118
|
+
private spend;
|
|
119
|
+
private checkValue;
|
|
120
|
+
private checkSize;
|
|
121
|
+
private segs;
|
|
122
|
+
private thickness;
|
|
123
|
+
private fingerWidth;
|
|
124
|
+
private measure;
|
|
125
|
+
private textOpts;
|
|
126
|
+
private edges;
|
|
127
|
+
private makeBuiltins;
|
|
128
|
+
}
|
|
129
|
+
export {};
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import type { Expr, Param, Program, Stmt } from './ast.js';
|
|
2
|
+
import { type Shape } from './geometry.js';
|
|
3
|
+
import { type Pos } from './lexer.js';
|
|
4
|
+
import { type FontBook } from './text.js';
|
|
5
|
+
import { type Closure, type Value } from './values.js';
|
|
6
|
+
export interface LayerDef {
|
|
7
|
+
name: string;
|
|
8
|
+
mode: 'cut' | 'line' | 'fill' | 'guide';
|
|
9
|
+
color: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const DEFAULT_LAYERS: LayerDef[];
|
|
12
|
+
export interface EvalOptions {
|
|
13
|
+
overrides?: Record<string, Value>;
|
|
14
|
+
resolve?: (path: string) => string | undefined;
|
|
15
|
+
fonts?: FontBook;
|
|
16
|
+
maxSteps?: number;
|
|
17
|
+
limits?: Partial<Limits>;
|
|
18
|
+
}
|
|
19
|
+
export interface Limits {
|
|
20
|
+
maxParts: number;
|
|
21
|
+
maxSegments: number;
|
|
22
|
+
maxListLength: number;
|
|
23
|
+
maxListItems: number;
|
|
24
|
+
maxTextLength: number;
|
|
25
|
+
maxPoints: number;
|
|
26
|
+
maxOutputPoints: number;
|
|
27
|
+
maxSheets: number;
|
|
28
|
+
}
|
|
29
|
+
export declare const DEFAULT_LIMITS: Limits;
|
|
30
|
+
interface ModDef {
|
|
31
|
+
params: Param[];
|
|
32
|
+
body: Stmt[];
|
|
33
|
+
env: Env;
|
|
34
|
+
}
|
|
35
|
+
interface FnDef {
|
|
36
|
+
params: Param[];
|
|
37
|
+
body: Expr;
|
|
38
|
+
env: Env;
|
|
39
|
+
}
|
|
40
|
+
interface ChildCtx {
|
|
41
|
+
stmts: Stmt[];
|
|
42
|
+
env: Env;
|
|
43
|
+
}
|
|
44
|
+
declare class Env {
|
|
45
|
+
parent?: Env | undefined;
|
|
46
|
+
caller?: Env | undefined;
|
|
47
|
+
vars: Map<string, Value>;
|
|
48
|
+
fns: Map<string, FnDef>;
|
|
49
|
+
mods: Map<string, ModDef>;
|
|
50
|
+
children?: ChildCtx;
|
|
51
|
+
constructor(parent?: Env | undefined, caller?: Env | undefined);
|
|
52
|
+
get(name: string): {
|
|
53
|
+
found: boolean;
|
|
54
|
+
value?: Value;
|
|
55
|
+
};
|
|
56
|
+
fn(name: string): FnDef | undefined;
|
|
57
|
+
mod(name: string): ModDef | undefined;
|
|
58
|
+
childCtx(): ChildCtx | undefined;
|
|
59
|
+
}
|
|
60
|
+
interface Args {
|
|
61
|
+
pos: Value[];
|
|
62
|
+
named: Map<string, Value>;
|
|
63
|
+
at: Pos;
|
|
64
|
+
}
|
|
65
|
+
export interface EvalResult {
|
|
66
|
+
shape: Shape;
|
|
67
|
+
globals: Env;
|
|
68
|
+
layers: Map<string, LayerDef>;
|
|
69
|
+
echoes: string[];
|
|
70
|
+
warnings: string[];
|
|
71
|
+
}
|
|
72
|
+
export declare const STDLIB: Record<string, string>;
|
|
73
|
+
export declare class Evaluator {
|
|
74
|
+
private opts;
|
|
75
|
+
private steps;
|
|
76
|
+
private depth;
|
|
77
|
+
private maxSteps;
|
|
78
|
+
readonly limits: Limits;
|
|
79
|
+
private pointCount;
|
|
80
|
+
private itemCount;
|
|
81
|
+
private copies;
|
|
82
|
+
readonly echoes: string[];
|
|
83
|
+
readonly warnings: string[];
|
|
84
|
+
readonly layers: Map<string, LayerDef>;
|
|
85
|
+
private loaded;
|
|
86
|
+
private builtins;
|
|
87
|
+
constructor(opts?: EvalOptions);
|
|
88
|
+
run(program: Program): EvalResult;
|
|
89
|
+
private tick;
|
|
90
|
+
private load;
|
|
91
|
+
private hoist;
|
|
92
|
+
private included;
|
|
93
|
+
private assign;
|
|
94
|
+
block(stmts: Stmt[], env: Env, top?: boolean): Shape;
|
|
95
|
+
private stmt;
|
|
96
|
+
private bindSeq;
|
|
97
|
+
private iterable;
|
|
98
|
+
private loop;
|
|
99
|
+
private evalArgs;
|
|
100
|
+
private bindParams;
|
|
101
|
+
private callModule;
|
|
102
|
+
private childStmts;
|
|
103
|
+
callFunction(f: FnDef | Closure, args: Args, caller: Env, name: string): Value;
|
|
104
|
+
expr(x: Expr, env: Env): Value;
|
|
105
|
+
private listItem;
|
|
106
|
+
private grow;
|
|
107
|
+
private charge;
|
|
108
|
+
private call;
|
|
109
|
+
private specialFunction;
|
|
110
|
+
private echo;
|
|
111
|
+
private echoText;
|
|
112
|
+
private arith;
|
|
113
|
+
private arg;
|
|
114
|
+
private num;
|
|
115
|
+
private vec2;
|
|
116
|
+
private points;
|
|
117
|
+
private dyn;
|
|
118
|
+
private spend;
|
|
119
|
+
private checkValue;
|
|
120
|
+
private checkSize;
|
|
121
|
+
private segs;
|
|
122
|
+
private thickness;
|
|
123
|
+
private fingerWidth;
|
|
124
|
+
private measure;
|
|
125
|
+
private textOpts;
|
|
126
|
+
private edges;
|
|
127
|
+
private makeBuiltins;
|
|
128
|
+
}
|
|
129
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LayerDef } from '../evaluator.cjs';
|
|
2
|
+
import { type Poly } from '../geometry.cjs';
|
|
3
|
+
import type { Placed } from '../render.cjs';
|
|
4
|
+
export declare const n: (v: number) => string;
|
|
5
|
+
export declare function tidy(p: Poly, closed: boolean): [string, string][];
|
|
6
|
+
export interface LayerPath {
|
|
7
|
+
name: string;
|
|
8
|
+
mode: LayerDef['mode'];
|
|
9
|
+
color: string;
|
|
10
|
+
d: string;
|
|
11
|
+
regions: string;
|
|
12
|
+
lines: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function layerPaths(items: Placed[], layers: LayerDef[]): LayerPath[];
|
|
15
|
+
export declare function toSvg(items: Placed[], width: number, height: number, layers: LayerDef[]): string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { LayerDef } from '../evaluator.js';
|
|
2
|
+
import { type Poly } from '../geometry.js';
|
|
3
|
+
import type { Placed } from '../render.js';
|
|
4
|
+
export declare const n: (v: number) => string;
|
|
5
|
+
export declare function tidy(p: Poly, closed: boolean): [string, string][];
|
|
6
|
+
export interface LayerPath {
|
|
7
|
+
name: string;
|
|
8
|
+
mode: LayerDef['mode'];
|
|
9
|
+
color: string;
|
|
10
|
+
d: string;
|
|
11
|
+
regions: string;
|
|
12
|
+
lines: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function layerPaths(items: Placed[], layers: LayerDef[]): LayerPath[];
|
|
15
|
+
export declare function toSvg(items: Placed[], width: number, height: number, layers: LayerDef[]): string;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type Pt = [number, number];
|
|
2
|
+
export type Poly = Pt[];
|
|
3
|
+
export type Matrix = [number, number, number, number, number, number];
|
|
4
|
+
export interface Layer {
|
|
5
|
+
regions: Poly[];
|
|
6
|
+
lines: Poly[];
|
|
7
|
+
}
|
|
8
|
+
export interface PartShape {
|
|
9
|
+
name: string;
|
|
10
|
+
qty: number;
|
|
11
|
+
layers: Map<string, Layer>;
|
|
12
|
+
thickness: number;
|
|
13
|
+
kerf: number;
|
|
14
|
+
material: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Shape {
|
|
17
|
+
layers: Map<string, Layer>;
|
|
18
|
+
parts: PartShape[];
|
|
19
|
+
}
|
|
20
|
+
export declare const IDENTITY: Matrix;
|
|
21
|
+
export declare function emptyShape(): Shape;
|
|
22
|
+
export declare function regionShape(regions: Poly[], layer?: string): Shape;
|
|
23
|
+
export declare function lineShape(lines: Poly[], layer?: string): Shape;
|
|
24
|
+
export declare function isEmpty(s: Shape): boolean;
|
|
25
|
+
export declare function union(regions: Poly[], fill?: 'nonzero' | 'evenodd'): Poly[];
|
|
26
|
+
export declare const difference: (a: Poly[], b: Poly[]) => Poly[];
|
|
27
|
+
export declare const intersection: (a: Poly[], b: Poly[]) => Poly[];
|
|
28
|
+
export declare const xor: (a: Poly[], b: Poly[]) => Poly[];
|
|
29
|
+
export declare function clipLines(lines: Poly[], region: Poly[], keep: 'inside' | 'outside'): Poly[];
|
|
30
|
+
export declare function offset(regions: Poly[], delta: number, join?: 'round' | 'miter' | 'square', arcTolerance?: number): Poly[];
|
|
31
|
+
export declare function strokeLines(lines: Poly[], width: number): Poly[];
|
|
32
|
+
export declare function pieces(regions: Poly[]): Poly[][];
|
|
33
|
+
export declare function area(p: Poly): number;
|
|
34
|
+
export declare function multiply(m: Matrix, n: Matrix): Matrix;
|
|
35
|
+
export declare function apply(m: Matrix, [x, y]: Pt): Pt;
|
|
36
|
+
export declare function transform(s: Shape, m: Matrix): Shape;
|
|
37
|
+
export declare function merge(shapes: Shape[]): Shape;
|
|
38
|
+
export declare function retag(s: Shape, layer: string): Shape;
|
|
39
|
+
export declare function bounds(polys: Poly[]): [number, number, number, number] | null;
|
|
40
|
+
export declare function layerBounds(layers: Map<string, Layer>, skip?: (name: string) => boolean): [number, number, number, number] | null;
|
|
41
|
+
export declare function hull(points: Pt[]): Poly;
|
|
42
|
+
export declare function fragments(r: number, fn: number, fa: number, fs: number): number;
|
|
43
|
+
export declare function ellipsePoly(rx: number, ry: number, n: number): Poly;
|
|
44
|
+
export declare function roundedRect(w: number, h: number, r: number, segs: (r: number) => number): Poly;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export type Pt = [number, number];
|
|
2
|
+
export type Poly = Pt[];
|
|
3
|
+
export type Matrix = [number, number, number, number, number, number];
|
|
4
|
+
export interface Layer {
|
|
5
|
+
regions: Poly[];
|
|
6
|
+
lines: Poly[];
|
|
7
|
+
}
|
|
8
|
+
export interface PartShape {
|
|
9
|
+
name: string;
|
|
10
|
+
qty: number;
|
|
11
|
+
layers: Map<string, Layer>;
|
|
12
|
+
thickness: number;
|
|
13
|
+
kerf: number;
|
|
14
|
+
material: string;
|
|
15
|
+
}
|
|
16
|
+
export interface Shape {
|
|
17
|
+
layers: Map<string, Layer>;
|
|
18
|
+
parts: PartShape[];
|
|
19
|
+
}
|
|
20
|
+
export declare const IDENTITY: Matrix;
|
|
21
|
+
export declare function emptyShape(): Shape;
|
|
22
|
+
export declare function regionShape(regions: Poly[], layer?: string): Shape;
|
|
23
|
+
export declare function lineShape(lines: Poly[], layer?: string): Shape;
|
|
24
|
+
export declare function isEmpty(s: Shape): boolean;
|
|
25
|
+
export declare function union(regions: Poly[], fill?: 'nonzero' | 'evenodd'): Poly[];
|
|
26
|
+
export declare const difference: (a: Poly[], b: Poly[]) => Poly[];
|
|
27
|
+
export declare const intersection: (a: Poly[], b: Poly[]) => Poly[];
|
|
28
|
+
export declare const xor: (a: Poly[], b: Poly[]) => Poly[];
|
|
29
|
+
export declare function clipLines(lines: Poly[], region: Poly[], keep: 'inside' | 'outside'): Poly[];
|
|
30
|
+
export declare function offset(regions: Poly[], delta: number, join?: 'round' | 'miter' | 'square', arcTolerance?: number): Poly[];
|
|
31
|
+
export declare function strokeLines(lines: Poly[], width: number): Poly[];
|
|
32
|
+
export declare function pieces(regions: Poly[]): Poly[][];
|
|
33
|
+
export declare function area(p: Poly): number;
|
|
34
|
+
export declare function multiply(m: Matrix, n: Matrix): Matrix;
|
|
35
|
+
export declare function apply(m: Matrix, [x, y]: Pt): Pt;
|
|
36
|
+
export declare function transform(s: Shape, m: Matrix): Shape;
|
|
37
|
+
export declare function merge(shapes: Shape[]): Shape;
|
|
38
|
+
export declare function retag(s: Shape, layer: string): Shape;
|
|
39
|
+
export declare function bounds(polys: Poly[]): [number, number, number, number] | null;
|
|
40
|
+
export declare function layerBounds(layers: Map<string, Layer>, skip?: (name: string) => boolean): [number, number, number, number] | null;
|
|
41
|
+
export declare function hull(points: Pt[]): Poly;
|
|
42
|
+
export declare function fragments(r: number, fn: number, fa: number, fs: number): number;
|
|
43
|
+
export declare function ellipsePoly(rx: number, ry: number, n: number): Poly;
|
|
44
|
+
export declare function roundedRect(w: number, h: number, r: number, segs: (r: number) => number): Poly;
|