fluidcad 0.0.34 → 0.0.35
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/README.md +69 -0
- package/bin/commands/login.js +120 -0
- package/bin/commands/pack.js +49 -0
- package/bin/commands/publish.js +136 -0
- package/bin/fluidcad.js +6 -0
- package/bin/lib/api-client.js +40 -0
- package/bin/lib/browser.js +16 -0
- package/bin/lib/config.js +39 -0
- package/bin/lib/model-config.js +38 -0
- package/bin/lib/workspace.js +57 -0
- package/lib/dist/common/shape-factory.d.ts +2 -1
- package/lib/dist/common/shape-factory.js +4 -0
- package/lib/dist/common/transformable-primitive.d.ts +6 -5
- package/lib/dist/common/transformable-primitive.js +8 -7
- package/lib/dist/common/vertex.js +0 -1
- package/lib/dist/core/2d/aline.d.ts +4 -3
- package/lib/dist/core/2d/aline.js +3 -2
- package/lib/dist/core/2d/arc.d.ts +3 -2
- package/lib/dist/core/2d/arc.js +4 -3
- package/lib/dist/core/2d/bezier.d.ts +8 -6
- package/lib/dist/core/2d/circle.d.ts +4 -3
- package/lib/dist/core/2d/circle.js +3 -2
- package/lib/dist/core/2d/ellipse.d.ts +5 -4
- package/lib/dist/core/2d/ellipse.js +5 -4
- package/lib/dist/core/2d/hline.d.ts +4 -3
- package/lib/dist/core/2d/hline.js +5 -3
- package/lib/dist/core/2d/line.js +1 -0
- package/lib/dist/core/2d/offset.d.ts +3 -2
- package/lib/dist/core/2d/offset.js +6 -5
- package/lib/dist/core/2d/polygon.d.ts +5 -4
- package/lib/dist/core/2d/polygon.js +10 -9
- package/lib/dist/core/2d/rect.d.ts +4 -3
- package/lib/dist/core/2d/rect.js +10 -9
- package/lib/dist/core/2d/slot.d.ts +14 -6
- package/lib/dist/core/2d/slot.js +19 -8
- package/lib/dist/core/2d/vline.d.ts +4 -3
- package/lib/dist/core/2d/vline.js +5 -3
- package/lib/dist/core/chamfer.d.ts +5 -4
- package/lib/dist/core/chamfer.js +7 -6
- package/lib/dist/core/color.d.ts +3 -2
- package/lib/dist/core/color.js +2 -1
- package/lib/dist/core/cut.d.ts +4 -3
- package/lib/dist/core/cut.js +5 -4
- package/lib/dist/core/cylinder.d.ts +2 -1
- package/lib/dist/core/cylinder.js +2 -1
- package/lib/dist/core/draft.d.ts +3 -2
- package/lib/dist/core/draft.js +3 -2
- package/lib/dist/core/extrude.d.ts +4 -3
- package/lib/dist/core/extrude.js +5 -4
- package/lib/dist/core/fillet.d.ts +5 -4
- package/lib/dist/core/fillet.js +6 -5
- package/lib/dist/core/index.d.ts +1 -0
- package/lib/dist/core/index.js +1 -0
- package/lib/dist/core/interfaces.d.ts +25 -24
- package/lib/dist/core/param.d.ts +74 -0
- package/lib/dist/core/param.js +147 -0
- package/lib/dist/core/repeat.d.ts +2 -1
- package/lib/dist/core/repeat.js +10 -8
- package/lib/dist/core/revolve.d.ts +2 -1
- package/lib/dist/core/revolve.js +3 -2
- package/lib/dist/core/rib.d.ts +3 -2
- package/lib/dist/core/rib.js +6 -2
- package/lib/dist/core/rotate.d.ts +5 -4
- package/lib/dist/core/rotate.js +4 -3
- package/lib/dist/core/shell.d.ts +3 -2
- package/lib/dist/core/shell.js +3 -2
- package/lib/dist/core/sphere.d.ts +3 -2
- package/lib/dist/core/sphere.js +2 -1
- package/lib/dist/core/translate.d.ts +7 -6
- package/lib/dist/core/translate.js +6 -5
- package/lib/dist/features/2d/arc.js +5 -5
- package/lib/dist/features/2d/bezier.js +16 -16
- package/lib/dist/features/2d/circle.js +4 -0
- package/lib/dist/features/2d/ellipse.js +4 -0
- package/lib/dist/features/2d/hline.d.ts +3 -0
- package/lib/dist/features/2d/hline.js +9 -2
- package/lib/dist/features/2d/line.d.ts +3 -0
- package/lib/dist/features/2d/line.js +11 -3
- package/lib/dist/features/2d/sketch.js +5 -1
- package/lib/dist/features/2d/slot.d.ts +5 -0
- package/lib/dist/features/2d/slot.js +52 -7
- package/lib/dist/features/2d/tarc-to-point-tangent.js +3 -0
- package/lib/dist/features/2d/tarc-to-point.js +3 -0
- package/lib/dist/features/2d/tarc-with-tangent.js +3 -0
- package/lib/dist/features/2d/tarc.js +3 -0
- package/lib/dist/features/2d/vline.d.ts +3 -0
- package/lib/dist/features/2d/vline.js +9 -2
- package/lib/dist/features/copy-circular.d.ts +4 -3
- package/lib/dist/features/copy-circular.js +16 -9
- package/lib/dist/features/copy-circular2d.js +16 -9
- package/lib/dist/features/copy-linear.d.ts +4 -3
- package/lib/dist/features/copy-linear.js +18 -12
- package/lib/dist/features/copy-linear2d.js +18 -12
- package/lib/dist/features/extrude-base.d.ts +4 -3
- package/lib/dist/features/extrude-base.js +10 -3
- package/lib/dist/features/mirror-shape2d.js +2 -2
- package/lib/dist/features/repeat-base.d.ts +13 -0
- package/lib/dist/features/repeat-base.js +21 -0
- package/lib/dist/features/repeat-circular.d.ts +6 -5
- package/lib/dist/features/repeat-circular.js +3 -6
- package/lib/dist/features/repeat-linear.d.ts +7 -7
- package/lib/dist/features/repeat-linear.js +3 -6
- package/lib/dist/index.d.ts +5 -0
- package/lib/dist/index.js +8 -1
- package/lib/dist/io/file-import.d.ts +7 -0
- package/lib/dist/io/file-import.js +30 -10
- package/lib/dist/math/lazy-matrix.d.ts +5 -0
- package/lib/dist/math/lazy-matrix.js +78 -10
- package/lib/dist/oc/boolean-ops.d.ts +2 -2
- package/lib/dist/param-registry.d.ts +34 -0
- package/lib/dist/param-registry.js +60 -0
- package/lib/dist/rendering/mesh-builder.js +2 -1
- package/lib/dist/tests/features/copy-circular.test.js +1 -1
- package/lib/dist/tests/features/copy-linear.test.js +10 -10
- package/lib/dist/tests/features/repeat-user-repro-cache.test.d.ts +1 -0
- package/lib/dist/tests/features/repeat-user-repro-cache.test.js +97 -0
- package/lib/dist/tsconfig.tsbuildinfo +1 -1
- package/llm-docs/api/bezier.md +10 -11
- package/llm-docs/api/index.json +1 -1
- package/llm-docs/api/types/arc-points.md +2 -2
- package/llm-docs/api/types/cut.md +10 -10
- package/llm-docs/api/types/extrude.md +10 -10
- package/llm-docs/api/types/loft.md +6 -6
- package/llm-docs/api/types/revolve.md +6 -6
- package/llm-docs/api/types/rib.md +2 -2
- package/llm-docs/api/types/slot.md +2 -2
- package/llm-docs/api/types/sweep.md +10 -10
- package/llm-docs/api/types/transformable.md +14 -14
- package/llm-docs/index.json +12 -12
- package/mcp/dist/client.d.ts +1 -0
- package/mcp/dist/client.js +8 -1
- package/mcp/dist/server.js +14 -1
- package/mcp/dist/tools/engine.d.ts +16 -0
- package/mcp/dist/tools/engine.js +45 -0
- package/package.json +9 -3
- package/server/dist/api.d.ts +37 -0
- package/server/dist/api.js +44 -0
- package/server/dist/code-editor.d.ts +64 -0
- package/server/dist/code-editor.js +520 -2
- package/server/dist/fluidcad-server.d.ts +68 -1
- package/server/dist/fluidcad-server.js +224 -88
- package/server/dist/host/blocked-imports.d.ts +8 -0
- package/server/dist/host/blocked-imports.js +30 -0
- package/server/dist/{vite-manager.d.ts → host/local-scene-host.d.ts} +3 -1
- package/server/dist/{vite-manager.js → host/local-scene-host.js} +6 -26
- package/server/dist/host/scene-host.d.ts +19 -0
- package/server/dist/host/scene-host.js +1 -0
- package/server/dist/index.js +24 -117
- package/server/dist/model-package/capture-params.d.ts +19 -0
- package/server/dist/model-package/capture-params.js +42 -0
- package/server/dist/model-package/pack.d.ts +23 -0
- package/server/dist/model-package/pack.js +229 -0
- package/server/dist/model-package/types.d.ts +78 -0
- package/server/dist/model-package/types.js +17 -0
- package/server/dist/routes/hit-test.d.ts +3 -0
- package/server/dist/routes/hit-test.js +17 -0
- package/server/dist/routes/pack.d.ts +10 -0
- package/server/dist/routes/pack.js +47 -0
- package/server/dist/routes/params.d.ts +3 -0
- package/server/dist/routes/params.js +75 -0
- package/server/dist/routes/sketch-edits.d.ts +3 -0
- package/server/dist/routes/sketch-edits.js +542 -0
- package/server/dist/routes/timeline.d.ts +3 -0
- package/server/dist/routes/timeline.js +49 -0
- package/server/dist/server-core.d.ts +53 -0
- package/server/dist/server-core.js +147 -0
- package/server/dist/ws-protocol.d.ts +101 -2
- package/ui/dist/assets/index-CDJmUpFI.css +2 -0
- package/ui/dist/assets/index-MRqwG9Vh.js +5417 -0
- package/ui/dist/index.html +2 -2
- package/server/dist/routes/actions.d.ts +0 -3
- package/server/dist/routes/actions.js +0 -309
- package/ui/dist/assets/index-BdqrMDRu.js +0 -4946
- package/ui/dist/assets/index-DR7c2Qk9.css +0 -2
|
@@ -1,41 +1,49 @@
|
|
|
1
1
|
import { Point2DLike } from "../../math/point.js";
|
|
2
2
|
import { PlaneLike } from "../../math/plane.js";
|
|
3
3
|
import { ISlot, ISceneObject } from "../interfaces.js";
|
|
4
|
+
import { type NumberParam, type BooleanParam } from "../param.js";
|
|
4
5
|
interface SlotFunction {
|
|
5
6
|
/**
|
|
6
7
|
* Draws a slot with the given length and end radius.
|
|
7
8
|
* @param distance - The slot length
|
|
8
9
|
* @param radius - The end cap radius
|
|
9
10
|
*/
|
|
10
|
-
(distance:
|
|
11
|
+
(distance: NumberParam, radius: NumberParam): ISlot;
|
|
11
12
|
/**
|
|
12
13
|
* Draws a slot on a specific plane.
|
|
13
14
|
* @param targetPlane - The plane to draw on
|
|
14
15
|
* @param distance - The slot length
|
|
15
16
|
* @param radius - The end cap radius
|
|
16
17
|
*/
|
|
17
|
-
(targetPlane: PlaneLike | ISceneObject, distance:
|
|
18
|
+
(targetPlane: PlaneLike | ISceneObject, distance: NumberParam, radius: NumberParam): ISlot;
|
|
18
19
|
/**
|
|
19
20
|
* Draws a slot from a start point with the given length and end radius.
|
|
20
21
|
* @param start - The start point
|
|
21
22
|
* @param distance - The slot length
|
|
22
23
|
* @param radius - The end cap radius
|
|
23
24
|
*/
|
|
24
|
-
(start: Point2DLike, distance:
|
|
25
|
+
(start: Point2DLike, distance: NumberParam, radius: NumberParam): ISlot;
|
|
26
|
+
/**
|
|
27
|
+
* Draws a slot between two cap-center points with the given radius.
|
|
28
|
+
* @param start - Center of the first cap
|
|
29
|
+
* @param end - Center of the second cap
|
|
30
|
+
* @param radius - The end cap radius
|
|
31
|
+
*/
|
|
32
|
+
(start: Point2DLike, end: Point2DLike, radius: number): ISlot;
|
|
25
33
|
/**
|
|
26
34
|
* Creates a slot from a geometry edge with the given radius.
|
|
27
35
|
* @param geometry - The source geometry edge
|
|
28
36
|
* @param radius - The end cap radius
|
|
29
37
|
* @param deleteSource - Whether to delete the source geometry (defaults to true)
|
|
30
38
|
*/
|
|
31
|
-
(geometry: ISceneObject, radius:
|
|
39
|
+
(geometry: ISceneObject, radius: NumberParam, deleteSource?: BooleanParam): ISlot;
|
|
32
40
|
/**
|
|
33
41
|
* Creates a slot from a geometry edge on a specific plane.
|
|
34
42
|
* @param targetPlane - The plane to draw on
|
|
35
43
|
* @param geometry - The source geometry edge
|
|
36
44
|
* @param radius - The end cap radius
|
|
37
45
|
*/
|
|
38
|
-
(targetPlane: PlaneLike | ISceneObject, geometry: ISceneObject, radius:
|
|
46
|
+
(targetPlane: PlaneLike | ISceneObject, geometry: ISceneObject, radius: NumberParam): ISlot;
|
|
39
47
|
/**
|
|
40
48
|
* Creates a slot from a geometry edge, optionally keeping the source, on a specific plane.
|
|
41
49
|
* @param targetPlane - The plane to draw on
|
|
@@ -43,7 +51,7 @@ interface SlotFunction {
|
|
|
43
51
|
* @param radius - The end cap radius
|
|
44
52
|
* @param deleteSource - Whether to delete the source geometry
|
|
45
53
|
*/
|
|
46
|
-
(targetPlane: PlaneLike | ISceneObject, geometry: ISceneObject, radius:
|
|
54
|
+
(targetPlane: PlaneLike | ISceneObject, geometry: ISceneObject, radius: NumberParam, deleteSource: BooleanParam): ISlot;
|
|
47
55
|
}
|
|
48
56
|
declare const _default: SlotFunction;
|
|
49
57
|
export default _default;
|
package/lib/dist/core/2d/slot.js
CHANGED
|
@@ -7,6 +7,7 @@ import { registerBuilder } from "../../index.js";
|
|
|
7
7
|
import { SceneObject } from "../../common/scene-object.js";
|
|
8
8
|
import { isPlaneLike } from "../../math/plane.js";
|
|
9
9
|
import { resolvePlane } from "../../helpers/resolve.js";
|
|
10
|
+
import { isNumberParam, isBooleanParam, resolveParam } from "../param.js";
|
|
10
11
|
function build(context) {
|
|
11
12
|
return function slot() {
|
|
12
13
|
const inSketch = context.getActiveSketch() !== null;
|
|
@@ -29,10 +30,10 @@ function build(context) {
|
|
|
29
30
|
// SlotFromEdge path: first non-plane arg is a SceneObject (geometry)
|
|
30
31
|
if (arguments[argOffset] instanceof SceneObject && !isPoint2DLike(arguments[argOffset])) {
|
|
31
32
|
const geometry = arguments[argOffset];
|
|
32
|
-
const radius = arguments[argOffset + 1];
|
|
33
|
+
const radius = resolveParam(arguments[argOffset + 1]);
|
|
33
34
|
let deleteSource = true;
|
|
34
|
-
if (arguments.length > argOffset + 2 &&
|
|
35
|
-
deleteSource = arguments[argOffset + 2];
|
|
35
|
+
if (arguments.length > argOffset + 2 && isBooleanParam(arguments[argOffset + 2])) {
|
|
36
|
+
deleteSource = resolveParam(arguments[argOffset + 2]);
|
|
36
37
|
}
|
|
37
38
|
const slotFromEdge = new SlotFromEdge(geometry, radius, deleteSource, planeObj);
|
|
38
39
|
context.addSceneObject(slotFromEdge);
|
|
@@ -40,18 +41,28 @@ function build(context) {
|
|
|
40
41
|
}
|
|
41
42
|
const argCount = arguments.length - argOffset;
|
|
42
43
|
// slot(distance, radius)
|
|
43
|
-
if (argCount === 2 &&
|
|
44
|
-
const distance = arguments[argOffset];
|
|
45
|
-
const radius = arguments[argOffset + 1];
|
|
44
|
+
if (argCount === 2 && isNumberParam(arguments[argOffset])) {
|
|
45
|
+
const distance = resolveParam(arguments[argOffset]);
|
|
46
|
+
const radius = resolveParam(arguments[argOffset + 1]);
|
|
46
47
|
const s = new Slot(distance, radius, planeObj);
|
|
47
48
|
context.addSceneObject(s);
|
|
48
49
|
return s;
|
|
49
50
|
}
|
|
51
|
+
// slot(start, end, radius) — in-sketch only
|
|
52
|
+
if (argCount === 3 && argOffset === 0
|
|
53
|
+
&& isPoint2DLike(arguments[0]) && isPoint2DLike(arguments[1])) {
|
|
54
|
+
const start = normalizePoint2D(arguments[0]);
|
|
55
|
+
const end = normalizePoint2D(arguments[1]);
|
|
56
|
+
const radius = arguments[2];
|
|
57
|
+
const s = Slot.fromTwoPoints(start, end, radius, planeObj);
|
|
58
|
+
context.addSceneObjects([new Move(start), s]);
|
|
59
|
+
return s;
|
|
60
|
+
}
|
|
50
61
|
// slot(start, distance, radius) — in-sketch only
|
|
51
62
|
if (argCount === 3 && argOffset === 0) {
|
|
52
63
|
const start = normalizePoint2D(arguments[0]);
|
|
53
|
-
const distance = arguments[1];
|
|
54
|
-
const radius = arguments[2];
|
|
64
|
+
const distance = resolveParam(arguments[1]);
|
|
65
|
+
const radius = resolveParam(arguments[2]);
|
|
55
66
|
const s = new Slot(distance, radius, planeObj);
|
|
56
67
|
context.addSceneObjects([new Move(start), s]);
|
|
57
68
|
return s;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { Point2DLike } from "../../math/point.js";
|
|
2
2
|
import { PlaneLike } from "../../math/plane.js";
|
|
3
3
|
import { IVLine, ISceneObject } from "../interfaces.js";
|
|
4
|
+
import { type NumberParam } from "../param.js";
|
|
4
5
|
interface VLineFunction {
|
|
5
6
|
/**
|
|
6
7
|
* Draws a vertical line of the given distance.
|
|
7
8
|
* Chain `.centered()` to center the line on the current position.
|
|
8
9
|
* @param distance - The line length
|
|
9
10
|
*/
|
|
10
|
-
(distance:
|
|
11
|
+
(distance: NumberParam): IVLine;
|
|
11
12
|
/**
|
|
12
13
|
* Draws a vertical line that ends where it intersects the target geometry.
|
|
13
14
|
* The nearest intersection (in either direction along the Y axis) is used.
|
|
@@ -20,7 +21,7 @@ interface VLineFunction {
|
|
|
20
21
|
* @param start - The start point
|
|
21
22
|
* @param distance - The line length
|
|
22
23
|
*/
|
|
23
|
-
(start: Point2DLike, distance:
|
|
24
|
+
(start: Point2DLike, distance: NumberParam): IVLine;
|
|
24
25
|
/**
|
|
25
26
|
* Draws a vertical line from a start point that ends where it intersects
|
|
26
27
|
* the target geometry. The nearest intersection (in either direction along
|
|
@@ -34,7 +35,7 @@ interface VLineFunction {
|
|
|
34
35
|
* @param targetPlane - The plane to draw on
|
|
35
36
|
* @param distance - The line length
|
|
36
37
|
*/
|
|
37
|
-
(targetPlane: PlaneLike | ISceneObject, distance:
|
|
38
|
+
(targetPlane: PlaneLike | ISceneObject, distance: NumberParam): IVLine;
|
|
38
39
|
}
|
|
39
40
|
declare const _default: VLineFunction;
|
|
40
41
|
export default _default;
|
|
@@ -6,6 +6,7 @@ import { registerBuilder } from "../../index.js";
|
|
|
6
6
|
import { isPlaneLike } from "../../math/plane.js";
|
|
7
7
|
import { SceneObject } from "../../common/scene-object.js";
|
|
8
8
|
import { resolvePlane } from "../../helpers/resolve.js";
|
|
9
|
+
import { isNumberParam, resolveParam } from "../param.js";
|
|
9
10
|
function build(context) {
|
|
10
11
|
return function line() {
|
|
11
12
|
let planeObj = null;
|
|
@@ -31,18 +32,19 @@ function build(context) {
|
|
|
31
32
|
context.addSceneObject(vline);
|
|
32
33
|
return vline;
|
|
33
34
|
}
|
|
34
|
-
if (argOffset === 0 &&
|
|
35
|
+
if (argOffset === 0 && !isNumberParam(arguments[0])) {
|
|
35
36
|
// vLine(start, distance) or vLine(start, target)
|
|
36
37
|
const start = normalizePoint2D(arguments[0]);
|
|
37
38
|
const second = arguments[1];
|
|
38
39
|
const distanceOrTarget = second instanceof SceneObject
|
|
39
40
|
? second
|
|
40
|
-
: second;
|
|
41
|
+
: resolveParam(second);
|
|
41
42
|
const vline = new VerticalLine(distanceOrTarget, planeObj);
|
|
43
|
+
vline.setHasExplicitStart();
|
|
42
44
|
context.addSceneObjects([new Move(start), vline]);
|
|
43
45
|
return vline;
|
|
44
46
|
}
|
|
45
|
-
const distance = arguments[argOffset];
|
|
47
|
+
const distance = resolveParam(arguments[argOffset]);
|
|
46
48
|
const vline = new VerticalLine(distance, planeObj);
|
|
47
49
|
context.addSceneObject(vline);
|
|
48
50
|
return vline;
|
|
@@ -1,23 +1,24 @@
|
|
|
1
1
|
import { ISceneObject } from "./interfaces.js";
|
|
2
|
+
import { type NumberParam, type BooleanParam } from "./param.js";
|
|
2
3
|
interface ChamferFunction {
|
|
3
4
|
/**
|
|
4
5
|
* Chamfers selected edges with the given distance.
|
|
5
6
|
* @param distance - The chamfer distance (defaults to 1)
|
|
6
7
|
*/
|
|
7
|
-
(distance?:
|
|
8
|
+
(distance?: NumberParam): ISceneObject;
|
|
8
9
|
/**
|
|
9
10
|
* Chamfers the given edge selections with the given distance.
|
|
10
11
|
* @param distance - The chamfer distance
|
|
11
12
|
* @param sceneObjects - The edge selections to chamfer
|
|
12
13
|
*/
|
|
13
|
-
(distance:
|
|
14
|
+
(distance: NumberParam, ...sceneObjects: ISceneObject[]): ISceneObject;
|
|
14
15
|
/**
|
|
15
16
|
* Chamfers selected edges with two distances or a distance and angle.
|
|
16
17
|
* @param distance - The first chamfer distance
|
|
17
18
|
* @param distance2 - The second distance, or angle if `isAngle` is true
|
|
18
19
|
* @param isAngle - Whether `distance2` is an angle
|
|
19
20
|
*/
|
|
20
|
-
(distance:
|
|
21
|
+
(distance: NumberParam, distance2: NumberParam, isAngle?: BooleanParam): ISceneObject;
|
|
21
22
|
/**
|
|
22
23
|
* Chamfers the given edge selections with two distances or a distance and angle.
|
|
23
24
|
* @param distance - The first chamfer distance
|
|
@@ -25,7 +26,7 @@ interface ChamferFunction {
|
|
|
25
26
|
* @param isAngle - Whether `distance2` is an angle
|
|
26
27
|
* @param sceneObjects - The edge selections to chamfer
|
|
27
28
|
*/
|
|
28
|
-
(distance:
|
|
29
|
+
(distance: NumberParam, distance2: NumberParam, isAngle: BooleanParam, ...sceneObjects: ISceneObject[]): ISceneObject;
|
|
29
30
|
}
|
|
30
31
|
declare const _default: ChamferFunction;
|
|
31
32
|
export default _default;
|
package/lib/dist/core/chamfer.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
import { Chamfer } from "../features/chamfer.js";
|
|
2
2
|
import { SceneObject } from "../common/scene-object.js";
|
|
3
3
|
import { registerBuilder } from "../index.js";
|
|
4
|
+
import { isNumberParam, isBooleanParam, resolveParam } from "./param.js";
|
|
4
5
|
function build(context) {
|
|
5
6
|
return function chamfer() {
|
|
6
7
|
const args = Array.from(arguments);
|
|
7
8
|
let distance = 1;
|
|
8
9
|
let distance2 = undefined;
|
|
9
10
|
let isAngle = false;
|
|
10
|
-
if (args.length >= 1 &&
|
|
11
|
-
distance = args[0];
|
|
11
|
+
if (args.length >= 1 && isNumberParam(args[0])) {
|
|
12
|
+
distance = resolveParam(args[0]);
|
|
12
13
|
}
|
|
13
|
-
if (args.length >= 2 &&
|
|
14
|
-
distance2 = args[1];
|
|
14
|
+
if (args.length >= 2 && isNumberParam(args[1])) {
|
|
15
|
+
distance2 = resolveParam(args[1]);
|
|
15
16
|
}
|
|
16
|
-
if (args.length >= 3 &&
|
|
17
|
-
isAngle = args[2];
|
|
17
|
+
if (args.length >= 3 && isBooleanParam(args[2])) {
|
|
18
|
+
isAngle = resolveParam(args[2]);
|
|
18
19
|
}
|
|
19
20
|
const selections = args
|
|
20
21
|
.filter(a => a instanceof SceneObject);
|
package/lib/dist/core/color.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { ISceneObject } from "./interfaces.js";
|
|
2
|
+
import { type StringParam } from "./param.js";
|
|
2
3
|
interface ColorFunction {
|
|
3
4
|
/**
|
|
4
5
|
* Applies a color to the last selection.
|
|
5
6
|
* @param color - The color value (CSS color string)
|
|
6
7
|
*/
|
|
7
|
-
(color:
|
|
8
|
+
(color: StringParam): ISceneObject;
|
|
8
9
|
/**
|
|
9
10
|
* Applies a color to the given selection.
|
|
10
11
|
* @param color - The color value (CSS color string)
|
|
11
12
|
* @param selection - The face or edge selection to color
|
|
12
13
|
*/
|
|
13
|
-
(color:
|
|
14
|
+
(color: StringParam, selection: ISceneObject): ISceneObject;
|
|
14
15
|
}
|
|
15
16
|
declare const _default: ColorFunction;
|
|
16
17
|
export default _default;
|
package/lib/dist/core/color.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { registerBuilder } from "../index.js";
|
|
2
2
|
import { SceneObject } from "../common/scene-object.js";
|
|
3
3
|
import { Color } from "../features/color.js";
|
|
4
|
+
import { resolveParam } from "./param.js";
|
|
4
5
|
function build(context) {
|
|
5
6
|
return function color() {
|
|
6
7
|
let selection;
|
|
@@ -11,7 +12,7 @@ function build(context) {
|
|
|
11
12
|
selection = context.getLastSelection() || undefined;
|
|
12
13
|
}
|
|
13
14
|
context.addSceneObject(selection);
|
|
14
|
-
const obj = new Color(arguments[0], selection);
|
|
15
|
+
const obj = new Color(resolveParam(arguments[0]), selection);
|
|
15
16
|
context.addSceneObject(obj);
|
|
16
17
|
return obj;
|
|
17
18
|
};
|
package/lib/dist/core/cut.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ICut, ISceneObject } from "./interfaces.js";
|
|
2
|
+
import { type NumberParam } from "./param.js";
|
|
2
3
|
interface CutFunction {
|
|
3
4
|
/**
|
|
4
5
|
* Cuts through all using the last sketch
|
|
@@ -15,20 +16,20 @@ interface CutFunction {
|
|
|
15
16
|
* @param distance - The cut depth
|
|
16
17
|
* @param target - The sketch to cut with
|
|
17
18
|
*/
|
|
18
|
-
(distance:
|
|
19
|
+
(distance: NumberParam, target?: ISceneObject): ICut;
|
|
19
20
|
/**
|
|
20
21
|
* Cuts by two distances using the last sketch.
|
|
21
22
|
* @param distance1 - The first cut distance
|
|
22
23
|
* @param distance2 - The second cut distance
|
|
23
24
|
*/
|
|
24
|
-
(distance1:
|
|
25
|
+
(distance1: NumberParam, distance2: NumberParam): ICut;
|
|
25
26
|
/**
|
|
26
27
|
* Cuts by two distances using the given sketch.
|
|
27
28
|
* @param distance1 - The first cut distance
|
|
28
29
|
* @param distance2 - The second cut distance
|
|
29
30
|
* @param target - The sketch to cut with
|
|
30
31
|
*/
|
|
31
|
-
(distance1:
|
|
32
|
+
(distance1: NumberParam, distance2: NumberParam, target: ISceneObject): ICut;
|
|
32
33
|
/**
|
|
33
34
|
* Cuts up to a specific face using the last sketch.
|
|
34
35
|
* @param face - A face selection to cut up to
|
package/lib/dist/core/cut.js
CHANGED
|
@@ -3,6 +3,7 @@ import { registerBuilder } from "../index.js";
|
|
|
3
3
|
import { Extrude } from "../features/extrude.js";
|
|
4
4
|
import { ExtrudeToFace } from "../features/extrude-to-face.js";
|
|
5
5
|
import { ExtrudeTwoDistances } from "../features/extrude-two-distances.js";
|
|
6
|
+
import { isNumberParam, resolveParam } from "./param.js";
|
|
6
7
|
function isExtrudable(obj) {
|
|
7
8
|
return obj instanceof SceneObject && obj.isExtrudable();
|
|
8
9
|
}
|
|
@@ -12,8 +13,8 @@ function build(context) {
|
|
|
12
13
|
return new Extrude(0, extrudable).remove();
|
|
13
14
|
}
|
|
14
15
|
else if (params.length === 1) {
|
|
15
|
-
if (
|
|
16
|
-
return new Extrude(params[0], extrudable).remove();
|
|
16
|
+
if (isNumberParam(params[0])) {
|
|
17
|
+
return new Extrude(resolveParam(params[0]), extrudable).remove();
|
|
17
18
|
}
|
|
18
19
|
else if (params[0] === 'first-face') {
|
|
19
20
|
return new ExtrudeToFace('first-face', extrudable).remove();
|
|
@@ -30,8 +31,8 @@ function build(context) {
|
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
else if (params.length === 2) {
|
|
33
|
-
if (
|
|
34
|
-
return new ExtrudeTwoDistances(params[0], params[1], extrudable).remove();
|
|
34
|
+
if (isNumberParam(params[0]) && isNumberParam(params[1])) {
|
|
35
|
+
return new ExtrudeTwoDistances(resolveParam(params[0]), resolveParam(params[1]), extrudable).remove();
|
|
35
36
|
}
|
|
36
37
|
}
|
|
37
38
|
throw new Error("Invalid parameters for cut function.");
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { ITransformable } from "./interfaces.js";
|
|
2
|
+
import { type NumberParam } from "./param.js";
|
|
2
3
|
interface CylinderFunction {
|
|
3
4
|
/**
|
|
4
5
|
* Creates a cylinder with the given radius and height.
|
|
5
6
|
* @param radius - The cylinder radius
|
|
6
7
|
* @param height - The cylinder height
|
|
7
8
|
*/
|
|
8
|
-
(radius:
|
|
9
|
+
(radius: NumberParam, height: NumberParam): ITransformable;
|
|
9
10
|
}
|
|
10
11
|
declare const _default: CylinderFunction;
|
|
11
12
|
export default _default;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Cylinder } from "../features/cylinder.js";
|
|
2
2
|
import { registerBuilder } from "../index.js";
|
|
3
|
+
import { resolveParam } from "./param.js";
|
|
3
4
|
function build(context) {
|
|
4
5
|
return function cylinder(radius, height) {
|
|
5
|
-
const cylinder = new Cylinder(radius, height);
|
|
6
|
+
const cylinder = new Cylinder(resolveParam(radius), resolveParam(height));
|
|
6
7
|
context.addSceneObject(cylinder);
|
|
7
8
|
return cylinder;
|
|
8
9
|
};
|
package/lib/dist/core/draft.d.ts
CHANGED
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { ISceneObject, IDraft } from "./interfaces.js";
|
|
2
|
+
import { type NumberParam } from "./param.js";
|
|
2
3
|
interface DraftFunction {
|
|
3
4
|
/**
|
|
4
5
|
* Applies a draft angle to the last selected faces.
|
|
5
6
|
* @param angle - The draft angle in degrees
|
|
6
7
|
*/
|
|
7
|
-
(angle:
|
|
8
|
+
(angle: NumberParam): IDraft;
|
|
8
9
|
/**
|
|
9
10
|
* Applies a draft angle to the given face selections.
|
|
10
11
|
* @param angle - The draft angle in degrees
|
|
11
12
|
* @param selections - The face selections to draft
|
|
12
13
|
*/
|
|
13
|
-
(angle:
|
|
14
|
+
(angle: NumberParam, ...selections: ISceneObject[]): IDraft;
|
|
14
15
|
}
|
|
15
16
|
declare const _default: DraftFunction;
|
|
16
17
|
export default _default;
|
package/lib/dist/core/draft.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Draft } from "../features/draft.js";
|
|
|
2
2
|
import { SceneObject } from "../common/scene-object.js";
|
|
3
3
|
import { registerBuilder } from "../index.js";
|
|
4
4
|
import { rad } from "../helpers/math-helpers.js";
|
|
5
|
+
import { isNumberParam, resolveParam } from "./param.js";
|
|
5
6
|
function build(context) {
|
|
6
7
|
return function draft() {
|
|
7
8
|
const args = Array.from(arguments);
|
|
@@ -15,8 +16,8 @@ function build(context) {
|
|
|
15
16
|
selections.push(implicit);
|
|
16
17
|
}
|
|
17
18
|
}
|
|
18
|
-
const angleDeg = (args.length >= 1 &&
|
|
19
|
-
? args[0]
|
|
19
|
+
const angleDeg = (args.length >= 1 && isNumberParam(args[0]))
|
|
20
|
+
? resolveParam(args[0])
|
|
20
21
|
: 5;
|
|
21
22
|
for (const sel of selections) {
|
|
22
23
|
context.addSceneObject(sel);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { IExtrude, ISceneObject } from "./interfaces.js";
|
|
2
2
|
import { FaceFilterBuilder } from "../filters/face/face-filter.js";
|
|
3
|
+
import { type NumberParam } from "./param.js";
|
|
3
4
|
interface ExtrudeFunction {
|
|
4
5
|
/**
|
|
5
6
|
* Extrudes the last sketch with a default distance.
|
|
@@ -11,20 +12,20 @@ interface ExtrudeFunction {
|
|
|
11
12
|
* @param distance - The extrusion distance
|
|
12
13
|
* @param target - The sketch or face-bearing scene object to extrude
|
|
13
14
|
*/
|
|
14
|
-
(distance:
|
|
15
|
+
(distance: NumberParam, target?: ISceneObject): IExtrude;
|
|
15
16
|
/**
|
|
16
17
|
* Extrudes between two distances.
|
|
17
18
|
* @param distance1 - The first extrusion distance
|
|
18
19
|
* @param distance2 - The second extrusion distance
|
|
19
20
|
*/
|
|
20
|
-
(distance1:
|
|
21
|
+
(distance1: NumberParam, distance2: NumberParam): IExtrude;
|
|
21
22
|
/**
|
|
22
23
|
* Extrudes between two distances.
|
|
23
24
|
* @param distance1 - The first extrusion distance
|
|
24
25
|
* @param distance2 - The second extrusion distance
|
|
25
26
|
* @param target - The sketch or face-bearing scene object to extrude
|
|
26
27
|
*/
|
|
27
|
-
(distance1:
|
|
28
|
+
(distance1: NumberParam, distance2: NumberParam, target: ISceneObject): IExtrude;
|
|
28
29
|
/**
|
|
29
30
|
* Extrudes up to a specific face.
|
|
30
31
|
* @param face - A face selection to extrude up to
|
package/lib/dist/core/extrude.js
CHANGED
|
@@ -5,6 +5,7 @@ import { ExtrudeTwoDistances } from "../features/extrude-two-distances.js";
|
|
|
5
5
|
import { ExtrudeToFace } from "../features/extrude-to-face.js";
|
|
6
6
|
import { SelectSceneObject } from "../features/select.js";
|
|
7
7
|
import { FaceFilterBuilder } from "../filters/face/face-filter.js";
|
|
8
|
+
import { isNumberParam, resolveParam } from "./param.js";
|
|
8
9
|
function isExtrudable(obj) {
|
|
9
10
|
return obj instanceof SceneObject && obj.isExtrudable();
|
|
10
11
|
}
|
|
@@ -34,8 +35,8 @@ function build(context) {
|
|
|
34
35
|
return new ExtrudeToFace(params[0], extrudable, rest);
|
|
35
36
|
}
|
|
36
37
|
if (params.length === 1) {
|
|
37
|
-
if (
|
|
38
|
-
return new Extrude(params[0], extrudable);
|
|
38
|
+
if (isNumberParam(params[0])) {
|
|
39
|
+
return new Extrude(resolveParam(params[0]), extrudable);
|
|
39
40
|
}
|
|
40
41
|
else if (params[0] instanceof SceneObject) {
|
|
41
42
|
context.addSceneObject(params[0]);
|
|
@@ -46,8 +47,8 @@ function build(context) {
|
|
|
46
47
|
}
|
|
47
48
|
}
|
|
48
49
|
else if (params.length === 2) {
|
|
49
|
-
if (
|
|
50
|
-
return new ExtrudeTwoDistances(params[0], params[1], extrudable);
|
|
50
|
+
if (isNumberParam(params[0]) && isNumberParam(params[1])) {
|
|
51
|
+
return new ExtrudeTwoDistances(resolveParam(params[0]), resolveParam(params[1]), extrudable);
|
|
51
52
|
}
|
|
52
53
|
}
|
|
53
54
|
throw new Error("Invalid parameters for extrude function.");
|
|
@@ -1,16 +1,17 @@
|
|
|
1
1
|
import { IGeometry, ISceneObject } from "./interfaces.js";
|
|
2
|
+
import { type NumberParam } from "./param.js";
|
|
2
3
|
interface FilletFunction {
|
|
3
4
|
/**
|
|
4
5
|
* Fillets selected edges with the given radius.
|
|
5
6
|
* @param radius - The fillet radius (defaults to 1)
|
|
6
7
|
*/
|
|
7
|
-
(radius?:
|
|
8
|
+
(radius?: NumberParam): ISceneObject;
|
|
8
9
|
/**
|
|
9
10
|
* Fillets the given edge selections with the given radius.
|
|
10
11
|
* @param radius - The fillet radius
|
|
11
12
|
* @param sceneObjects - The edge selections to fillet
|
|
12
13
|
*/
|
|
13
|
-
(radius:
|
|
14
|
+
(radius: NumberParam, ...sceneObjects: ISceneObject[]): ISceneObject;
|
|
14
15
|
/**
|
|
15
16
|
* [2D] Fillets corners between the given geometries.
|
|
16
17
|
* @param objects - The geometries whose corners to fillet
|
|
@@ -21,13 +22,13 @@ interface FilletFunction {
|
|
|
21
22
|
* @param objects - The geometries whose corners to fillet
|
|
22
23
|
* @param radius - The fillet radius
|
|
23
24
|
*/
|
|
24
|
-
(objects: IGeometry[], radius:
|
|
25
|
+
(objects: IGeometry[], radius: NumberParam): ISceneObject;
|
|
25
26
|
/**
|
|
26
27
|
* [2D] Fillets corners at the given radius and geometries.
|
|
27
28
|
* @param radius - The fillet radius
|
|
28
29
|
* @param objects - The geometries whose corners to fillet
|
|
29
30
|
*/
|
|
30
|
-
(radius:
|
|
31
|
+
(radius: NumberParam, ...objects: IGeometry[]): ISceneObject;
|
|
31
32
|
}
|
|
32
33
|
declare const _default: FilletFunction;
|
|
33
34
|
export default _default;
|
package/lib/dist/core/fillet.js
CHANGED
|
@@ -2,6 +2,7 @@ import { Fillet } from "../features/fillet.js";
|
|
|
2
2
|
import { Fillet2D } from "../features/fillet2d.js";
|
|
3
3
|
import { SceneObject } from "../common/scene-object.js";
|
|
4
4
|
import { registerBuilder } from "../index.js";
|
|
5
|
+
import { isNumberParam, resolveParam } from "./param.js";
|
|
5
6
|
function build(context) {
|
|
6
7
|
return function fillet() {
|
|
7
8
|
const activeSketch = context.getActiveSketch();
|
|
@@ -12,8 +13,8 @@ function build(context) {
|
|
|
12
13
|
return fillet;
|
|
13
14
|
}
|
|
14
15
|
if (arguments.length === 1) {
|
|
15
|
-
if (
|
|
16
|
-
const radius = arguments[0];
|
|
16
|
+
if (isNumberParam(arguments[0])) {
|
|
17
|
+
const radius = resolveParam(arguments[0]);
|
|
17
18
|
const fillet = new Fillet2D(radius);
|
|
18
19
|
context.addSceneObject(fillet);
|
|
19
20
|
return fillet;
|
|
@@ -27,7 +28,7 @@ function build(context) {
|
|
|
27
28
|
}
|
|
28
29
|
if (arguments.length === 2 && Array.isArray(arguments[0])) {
|
|
29
30
|
const objects = arguments[0];
|
|
30
|
-
const radius = arguments[1] || 1;
|
|
31
|
+
const radius = resolveParam(arguments[1]) || 1;
|
|
31
32
|
const fillet = new Fillet2D(radius, ...objects);
|
|
32
33
|
context.addSceneObject(fillet);
|
|
33
34
|
return fillet;
|
|
@@ -35,8 +36,8 @@ function build(context) {
|
|
|
35
36
|
}
|
|
36
37
|
else {
|
|
37
38
|
const args = Array.from(arguments);
|
|
38
|
-
const radius = (args.length >= 1 &&
|
|
39
|
-
? args[0]
|
|
39
|
+
const radius = (args.length >= 1 && isNumberParam(args[0]))
|
|
40
|
+
? resolveParam(args[0])
|
|
40
41
|
: 1;
|
|
41
42
|
const selections = args
|
|
42
43
|
.filter(a => a instanceof SceneObject);
|
package/lib/dist/core/index.d.ts
CHANGED
|
@@ -32,3 +32,4 @@ export { default as trim } from "./trim.js";
|
|
|
32
32
|
export { default as part } from "./part.js";
|
|
33
33
|
export * from "./2d/index.js";
|
|
34
34
|
export { breakpoint } from "./breakpoint.js";
|
|
35
|
+
export { default as param, type ParamType, type ParamOptionsMap, type NumberParamOptions, type SliderParamOptions, type SelectParamOptions, type CheckboxParamOptions, type TextParamOptions, type NumberParam, type StringParam, type BooleanParam, type ParamValue, resolveParam, isNumberParam, isBooleanParam } from "./param.js";
|
package/lib/dist/core/index.js
CHANGED