/
center.ts
56 lines (50 loc) · 1.33 KB
/
center.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { IObjectOf } from "@thi.ng/api";
import {
DEFAULT,
defmulti,
Implementation1O,
MultiFn1O
} from "@thi.ng/defmulti";
import { IShape, Type } from "@thi.ng/geom-api";
import {
ReadonlyVec,
set2,
set3,
submN,
ZERO2,
ZERO3
} from "@thi.ng/vectors";
import {
Arc,
Circle,
Ellipse,
Sphere
} from "../api";
import { dispatch } from "../internal/dispatch";
import { centroid } from "./centroid";
import { translate } from "./translate";
export const center: MultiFn1O<IShape, ReadonlyVec, IShape> = defmulti(
dispatch
);
center.add(DEFAULT, ($, origin = ZERO3) =>
translate($, submN(null, centroid($), origin, -1))
);
center.addAll(<IObjectOf<Implementation1O<unknown, ReadonlyVec, IShape>>>{
[Type.ARC]: ($: Arc, origin = ZERO2) =>
new Arc(
set2([], origin),
set2([], $.r),
$.axis,
$.start,
$.end,
$.xl,
$.cw,
{ ...$.attribs }
),
[Type.CIRCLE]: ($: Circle, origin = ZERO2) =>
new Circle(set2([], origin), $.r, { ...$.attribs }),
[Type.ELLIPSE]: ($: Ellipse, origin = ZERO2) =>
new Ellipse(set2([], origin), set2([], $.r), { ...$.attribs }),
[Type.SPHERE]: ($: Sphere, origin = ZERO3) =>
new Sphere(set3([], origin), $.r, { ...$.attribs })
});