@mulmoclaude/shapescript-plugin 1.4.0 → 2.3.0

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.
Files changed (52) hide show
  1. package/README.md +165 -28
  2. package/dist/core/definition.d.ts.map +1 -1
  3. package/dist/core/index.d.ts +2 -1
  4. package/dist/core/index.d.ts.map +1 -1
  5. package/dist/core/plugin.d.ts.map +1 -1
  6. package/dist/{core-bcFgqR_m.cjs → core-BBgBeYYe.cjs} +1 -1
  7. package/dist/{core-CpVzK-0i.js → core-yB1Eiacr.js} +2 -2
  8. package/dist/core.cjs +1 -1
  9. package/dist/core.js +4 -4
  10. package/dist/index.cjs +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/lang/de.d.ts.map +1 -1
  13. package/dist/lang/en.d.ts.map +1 -1
  14. package/dist/lang/es.d.ts.map +1 -1
  15. package/dist/lang/fr.d.ts.map +1 -1
  16. package/dist/lang/ja.d.ts.map +1 -1
  17. package/dist/lang/ko.d.ts.map +1 -1
  18. package/dist/lang/messages.d.ts +4 -0
  19. package/dist/lang/messages.d.ts.map +1 -1
  20. package/dist/lang/ptBR.d.ts.map +1 -1
  21. package/dist/lang/zh.d.ts.map +1 -1
  22. package/dist/render/page.d.ts.map +1 -1
  23. package/dist/render.cjs +8 -4
  24. package/dist/render.js +14 -10
  25. package/dist/{samples-DPOGWslc.js → samples-CT-c9o1S.js} +281 -276
  26. package/dist/samples-D2_jOmoh.cjs +319 -0
  27. package/dist/shapescript/builders.d.ts +12 -2
  28. package/dist/shapescript/builders.d.ts.map +1 -1
  29. package/dist/shapescript/evaluator.d.ts +103 -6
  30. package/dist/shapescript/evaluator.d.ts.map +1 -1
  31. package/dist/shapescript/meshValues.d.ts +54 -0
  32. package/dist/shapescript/meshValues.d.ts.map +1 -0
  33. package/dist/shapescript/minkowski.d.ts +37 -0
  34. package/dist/shapescript/minkowski.d.ts.map +1 -0
  35. package/dist/shapescript/parser.d.ts +84 -2
  36. package/dist/shapescript/parser.d.ts.map +1 -1
  37. package/dist/shapescript/toThreeJS.d.ts +186 -10
  38. package/dist/shapescript/toThreeJS.d.ts.map +1 -1
  39. package/dist/shapescript/types.d.ts +166 -20
  40. package/dist/shapescript/types.d.ts.map +1 -1
  41. package/dist/style.css +1 -1
  42. package/dist/{toThreeJS-BX_aeGdA.js → toThreeJS-CKjSbEnA.js} +5887 -3872
  43. package/dist/toThreeJS-Cs0UJm82.cjs +10 -0
  44. package/dist/vue/Preview.vue.d.ts.map +1 -1
  45. package/dist/vue/View.vue.d.ts.map +1 -1
  46. package/dist/vue/index.d.ts +1 -1
  47. package/dist/vue/index.d.ts.map +1 -1
  48. package/dist/vue.cjs +57 -28
  49. package/dist/vue.js +1553 -1495
  50. package/package.json +1 -1
  51. package/dist/samples-DZNAeuSZ.cjs +0 -210
  52. package/dist/toThreeJS-XGDoVISb.cjs +0 -10
@@ -0,0 +1,37 @@
1
+ import * as THREE from "three";
2
+ /** The most faces a non-convex operand may contribute pieces for. */
3
+ export declare const MAX_MINKOWSKI_PIECES = 2048;
4
+ /** The most points one hull may be built from. */
5
+ export declare const MAX_HULL_POINTS = 400000;
6
+ /** The distinct vertex positions of a geometry, in world space. */
7
+ export declare function uniquePoints(geometry: THREE.BufferGeometry, matrix: THREE.Matrix4): THREE.Vector3[];
8
+ /** The triangles of a geometry as world-space corner triples. */
9
+ export declare function worldTriangles(geometry: THREE.BufferGeometry, matrix: THREE.Matrix4): THREE.Vector3[][];
10
+ /** +1 when the triangles wind outward, −1 when a mirroring `size` or `scale`
11
+ * turned them inside out — the sign of the enclosed volume. */
12
+ export declare function windingSign(triangles: readonly THREE.Vector3[][]): number;
13
+ /** Whether every vertex lies on or behind every face plane: a convex solid,
14
+ * however its faces wind, whose Minkowski sum with another convex solid is
15
+ * the hull of their pairwise vertex sums. */
16
+ export declare function isConvex(triangles: readonly THREE.Vector3[][], points: readonly THREE.Vector3[]): boolean;
17
+ /** The convex hull of `points`. A whole sum (`smooth`) is the rounded solid
18
+ * itself, so shared vertices average their face normals. A per-face PIECE
19
+ * keeps flat normals: its rounded sides are interior once the pieces overlap,
20
+ * and averaging them into its flat top tilted that face's border — a visible
21
+ * bump along every seam of a flat face. Coplanar points (two parallel faces
22
+ * summed) give a flat sliver rather than a throw from `ConvexGeometry`; that
23
+ * is `undefined` here. */
24
+ export declare function hullGeometry(points: THREE.Vector3[], smooth: boolean): THREE.BufferGeometry | undefined;
25
+ export interface MinkowskiOperand {
26
+ geometry: THREE.BufferGeometry;
27
+ matrix: THREE.Matrix4;
28
+ }
29
+ /** `a ⊕ b`. Two convex solids sum to one hull; when one is not convex, every
30
+ * face of it is summed with the other on its own and the pieces are merged
31
+ * (their union), as upstream decomposes it. */
32
+ export declare function minkowskiSum(a: MinkowskiOperand, b: MinkowskiOperand): THREE.BufferGeometry;
33
+ /** Every face moved inward by `distance` (outward when negative): each vertex
34
+ * slides to where its faces' offset planes meet — exact at any corner where
35
+ * the planes are consistent, least-squares where more than three meet. */
36
+ export declare function insetGeometry(geometry: THREE.BufferGeometry, distance: number): THREE.BufferGeometry;
37
+ //# sourceMappingURL=minkowski.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"minkowski.d.ts","sourceRoot":"","sources":["../../src/shapescript/minkowski.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,qEAAqE;AACrE,eAAO,MAAM,oBAAoB,OAAO,CAAC;AACzC,kDAAkD;AAClD,eAAO,MAAM,eAAe,SAAU,CAAC;AAIvC,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,CAYnG;AAED,iEAAiE;AACjE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,EAAE,EAAE,CASvG;AAED;gEACgE;AAChE,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE,EAAE,GAAG,MAAM,CAIzE;AAED;;8CAE8C;AAC9C,wBAAgB,QAAQ,CAAC,SAAS,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,KAAK,CAAC,OAAO,EAAE,GAAG,OAAO,CAYzG;AAED;;;;;;2BAM2B;AAC3B,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,GAAG,KAAK,CAAC,cAAc,GAAG,SAAS,CAcvG;AAoBD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,KAAK,CAAC,cAAc,CAAC;IAC/B,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC;CACvB;AAED;;gDAEgD;AAChD,wBAAgB,YAAY,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC,cAAc,CA+B3F;AASD;;2EAE2E;AAC3E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,CAAC,cAAc,CA+BpG"}
@@ -3,6 +3,18 @@ export declare class Parser {
3
3
  /** Whether the expression being parsed is one value of a whitespace-separated
4
4
  * list. See `withValueList`. */
5
5
  private valueList;
6
+ /** Names a bare call may use (`max 0 1`, `sqrt 9`): the built-ins plus every
7
+ * `define name(…)` seen so far, minus names a plain `define` shadows. Lexical
8
+ * and unscoped — a shadow inside a block outlives the block, which only
9
+ * matters to a script that reuses a function's name for a number. */
10
+ private callable;
11
+ /** Custom block names, so a user-defined `light` is still invoked rather
12
+ * than skipped as the upstream light source. */
13
+ private blocks;
14
+ /** Names a plain `define` gave a value, so a keyword reused as a symbol
15
+ * (`define hull (0.2 0.2 0.2)` then `color hull`) reads as that symbol
16
+ * rather than as the shape or builder it spells. */
17
+ private values;
6
18
  private tokens;
7
19
  private pos;
8
20
  constructor(tokens: Token[]);
@@ -14,18 +26,32 @@ export declare class Parser {
14
26
  private expectIdentifier;
15
27
  private skipNewlines;
16
28
  private parseExpression;
29
+ /** `a to b [step s]` after a full expression, or `range step s` to re-step a
30
+ * range held in a symbol. Lowest precedence of all, so `1 to n - 1` runs to
31
+ * `n - 1`; only a whole expression (minPrec 0) can become a range. */
32
+ private parseRangeTail;
17
33
  private parsePrimary;
18
34
  /** The body of a `( … )`, with the opening paren already consumed.
19
35
  *
20
36
  * Both a grouped expression and a space- or comma-separated tuple live here,
21
37
  * so its elements are read as a VALUE LIST: `(1 +2 +3)` is three components,
22
38
  * the same as `1 +2 +3` written without the parens. */
39
+ /** Line breaks inside parentheses carry no meaning (literals.md): a tuple of
40
+ * tuples may be laid out one row per line, and an expression may continue
41
+ * on the next line. Dropping the NEWLINE tokens up to the matching `)` lets
42
+ * the one-line rules decide, with the break counted as whitespace. */
43
+ private stripNewlinesInParens;
23
44
  private parseParenthesized;
24
45
  /** `(1, 2, 3)` — a trailing comma before the `)` ends the list. */
25
46
  private parseCommaSeparated;
26
- /** `(1 2 3)` — components held apart by nothing but whitespace. */
47
+ /** `(1 2 3)` — components held apart by whitespace, line breaks included. */
27
48
  private parseSpaceSeparated;
28
49
  private parseAtom;
50
+ /** `for [name in] iterable { expression }` — the tuple of every result. */
51
+ private parseForExpression;
52
+ /** `if condition { expression } else { expression }`. */
53
+ private parseIfExpression;
54
+ private parseBracedExpression;
29
55
  private getPrecedence;
30
56
  private tokenTypeToOperator;
31
57
  private parseVectorOrExpression;
@@ -34,18 +60,53 @@ export declare class Parser {
34
60
  private parseValueList;
35
61
  private parseProperties;
36
62
  private parseBlockContents;
63
+ /** Run `parse` with the callable and block name sets scoped to it, so a
64
+ * `define max 5` inside a block stops shadowing the built-in at the
65
+ * block's closing brace — the parser-side mirror of the runtime scope. */
66
+ private scoped;
37
67
  private parseBlock;
38
68
  private parseShape;
39
69
  private parseCSG;
70
+ /** `for [name in] <range or tuple> { … }`. The range is an ordinary
71
+ * expression (`1 to n step 2`, or a symbol holding one), so `for 1 to 5`
72
+ * and `for i in loops` read the same way. */
40
73
  private parseForLoop;
74
+ /** A keyword that a binding in scope has claimed as a value — a shape,
75
+ * builder or control-flow word used as a parameter or loop variable.
76
+ * Property and transform commands (`size`, `color`, `scale`, …) are not
77
+ * included: `define size 1 2` must not turn a later `size` command into a
78
+ * value, and inside a block they are read as properties anyway. */
79
+ private isBoundKeyword;
80
+ /** A name bound in the current scope — loop variable, parameter, option —
81
+ * is a value there: not a callable, and not the shape it may spell. */
82
+ private bindName;
83
+ private parseLoopHeader;
41
84
  private parseIf;
42
85
  private parseSwitch;
43
86
  private parseDefine;
87
+ /** An upstream command this renderer lacks, named instead of failing on
88
+ * the brace that follows it. */
89
+ private refuseUnsupported;
90
+ /** Whether `token` opens a statement rather than an expression — used where
91
+ * either may appear, such as a function body. */
92
+ private startsStatement;
93
+ /** The body holds statements — `define`s, and shapes the function builds —
94
+ * and may end in the expression it returns. A function with no result
95
+ * expression returns what its statements built. */
96
+ private parseFunctionDefine;
44
97
  private parseDetail;
98
+ private parseSeed;
45
99
  private parseBackground;
46
- private parseTexture;
100
+ /** `opacity` / `metallicity` / `roughness` / `glow` / `texture` / `material`
101
+ * as a scoped command. */
102
+ private parseMaterialCommand;
103
+ /** `camera { … }` / `light { … }`: the block is consumed and dropped. */
104
+ private skipIgnoredBlock;
47
105
  private parseGroup;
48
106
  private parseBuilder;
107
+ private isAlongOption;
108
+ /** `along <path or shape>` inside `extrude { … }`: the path the sections are swept along. */
109
+ private parseAlong;
49
110
  /** Run `parse` with the tuple-value break of `isStartOfNewValue` enabled or
50
111
  * suppressed. Whitespace-separated value lists — property values, path
51
112
  * values, the inside of a `( … )` — read ` -1` as the NEXT value; call
@@ -61,7 +122,28 @@ export declare class Parser {
61
122
  private isStartOfNewValue;
62
123
  private parsePathValue;
63
124
  private parsePath;
125
+ /** `{ … }` of a path or of a `for` inside one. Both accept the same
126
+ * commands, so one reader serves both instead of two drifting copies.
127
+ * Only the path itself (not a loop inside it) may carry the transform
128
+ * options, which land in `properties`. */
129
+ private parsePathBody;
130
+ /** `position` / `orientation` (alias `rotation`) / `size` inside a path
131
+ * block, as upstream allows on any shape. Returns false for anything else. */
132
+ private parsePathProperty;
133
+ private parsePathCommand;
134
+ /** `point x [y]` / `curve x [y]` — absolute coordinates in the path's local
135
+ * frame, as upstream. Y defaults to 0. */
136
+ private parsePathPoint;
137
+ /** `arc` or `arc { angle … position … orientation … size … }` inside a path. */
138
+ private parseArc;
139
+ /** `translate x [y]` / `scale x [y]` inside a path. A lone `translate x`
140
+ * moves along X only; a lone `scale s` is uniform, recorded by leaving `y`
141
+ * out rather than by copying the expression (which would evaluate it twice). */
142
+ private parsePathVector;
143
+ private parsePathFor;
64
144
  private parseNode;
145
+ /** `name { option value … }` after the name has been consumed. */
146
+ private parseCustomShapeCall;
65
147
  private refuseStalledToken;
66
148
  parse(): SceneNode[];
67
149
  }
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/shapescript/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAEL,SAAS,EAsBV,MAAM,SAAS,CAAC;AA0djB,qBAAa,MAAM;IACjB;qCACiC;IACjC,OAAO,CAAC,SAAS,CAAS;IAE1B,OAAO,CAAC,MAAM,CAAU;IACxB,OAAO,CAAC,GAAG,CAAK;gBAEJ,MAAM,EAAE,KAAK,EAAE;IAO3B,OAAO,CAAC,EAAE;IAMV,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,IAAI;IAIZ,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,MAAM;IASd,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,YAAY;IAqBpB;;;;4DAIwD;IACxD,OAAO,CAAC,kBAAkB;IAiB1B,mEAAmE;IACnE,OAAO,CAAC,mBAAmB;IAQ3B,mEAAmE;IACnE,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,SAAS;IA0FjB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,mBAAmB;IAmC3B,OAAO,CAAC,uBAAuB;IAI/B;+EAC2E;IAC3E,OAAO,CAAC,cAAc;IAWtB,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,QAAQ;IAYhB,OAAO,CAAC,YAAY;IA2EpB,OAAO,CAAC,OAAO;IA8Bf,OAAO,CAAC,WAAW;IA8EnB,OAAO,CAAC,WAAW;IA8DnB,OAAO,CAAC,WAAW;IAWnB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,YAAY;IA8BpB;;;iFAG6E;IAC7E,OAAO,CAAC,aAAa;IAUrB;;gEAE4D;IAC5D,OAAO,CAAC,WAAW;IAKnB;iDAC6C;IAC7C,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,SAAS;IAiMjB,OAAO,CAAC,SAAS;IAkKjB,OAAO,CAAC,kBAAkB;IAM1B,KAAK,IAAI,SAAS,EAAE;CAerB;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAmB5D"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/shapescript/parser.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,17 @@
1
1
  import * as THREE from "three";
2
2
  import { SceneNode } from "./types";
3
+ import { RGBA } from "./evaluator";
4
+ /** What a conversion reports besides geometry. Stored on the root group's
5
+ * `userData` so both viewers and the tool result can read it. */
6
+ export interface ShapeScriptSceneInfo {
7
+ /** `background r g b a` from the script's root, when set. */
8
+ background?: RGBA;
9
+ /** Commands that were accepted but not rendered (`texture`, `camera`, …). */
10
+ warnings: string[];
11
+ /** Every `print`, one line each. */
12
+ logs: string[];
13
+ }
14
+ export declare function sceneInfoOf(group: THREE.Object3D): ShapeScriptSceneInfo;
3
15
  export interface ConversionOptions {
4
16
  wireframe?: boolean;
5
17
  /** Hard ceiling on the objects one script may produce. See
@@ -14,8 +26,9 @@ export interface ConversionOptions {
14
26
  /** Hard ceiling on the wall-clock time one conversion may spend. See
15
27
  * `DEFAULT_MAX_DURATION_MS`. */
16
28
  maxDurationMs?: number;
17
- /** Seed for `rnd` / `rand()`. Defaults to `DEFAULT_RANDOM_SEED`, which is
18
- * what keeps server validation and browser rendering on the same branch. */
29
+ /** Starting seed for `rnd` / `rand()`, which a `seed` command in the script
30
+ * overrides. Defaults to `DEFAULT_RANDOM_SEED`, which is what keeps server
31
+ * validation and browser rendering on the same branch. */
19
32
  randomSeed?: number;
20
33
  }
21
34
  export declare const DEFAULT_MAX_NODES = 100000;
@@ -42,6 +55,22 @@ export declare class Converter {
42
55
  /** When this conversion began, checked against `maxDurationMs` on every node. */
43
56
  private readonly startedAt;
44
57
  private transformStack;
58
+ /** > 0 while building a builder's operands, where a bare `path` must be a
59
+ * flat mesh for `profileOf`; at the scene level it draws as a line. */
60
+ private operandDepth;
61
+ private readonly warnings;
62
+ private readonly warningSet;
63
+ private readonly logs;
64
+ private background;
65
+ private sceneDepth;
66
+ /** While set, polygons and shape values produced by statements are
67
+ * collected here instead of entering the scene: the body of `mesh { }`,
68
+ * and a function body whose result is what it built. */
69
+ private valueSink;
70
+ /** Geometries that live on as values (defined shapes, function results,
71
+ * `inset` results). Never in the scene themselves — placing one clones it —
72
+ * so they are released together once the conversion is over. */
73
+ private retained;
45
74
  constructor(options?: ConversionOptions);
46
75
  convert(nodes: SceneNode[]): THREE.Group;
47
76
  private get maxNodes();
@@ -69,11 +98,23 @@ export declare class Converter {
69
98
  * one primitive is bounded by `MAX_DETAIL²`, so the allocation that trips the
70
99
  * limit is small, and it is freed before the refusal propagates. */
71
100
  private makeMesh;
72
- /** Expand a `for … from to to step` range without materialising it first.
73
- * The array used to be built up front, so an absurd bound exhausted memory
74
- * before a single node existed and the budget below never got a turn. */
75
- private rangeIterations;
76
101
  private convertNode;
102
+ /** A `path` handed to a builder: the flat face it encloses, which `profileOf`
103
+ * reads the perimeter back from. */
104
+ private convertPathProfile;
105
+ /** A `detail` inside a path applies to that path alone, as inside any
106
+ * block: restore the enclosing level once its points are read. */
107
+ private withPathDetail;
108
+ /** A `path` in the scene draws as a stroke, as upstream: `fill` makes a
109
+ * face of it, and a builder consumes it. Open paths are allowed here. */
110
+ private convertPathLine;
111
+ private lineFromPath;
112
+ /** Deduplicated and capped: a `texture` inside a 100k-iteration loop must
113
+ * not turn the warning list into a transcript, nor the check into a scan. */
114
+ private warn;
115
+ /** `background` at the root: a colour is kept for the viewer, a texture
116
+ * file cannot be loaded here. */
117
+ private handleBackground;
77
118
  /** Build `group` inside a fresh symbol + transform scope.
78
119
  *
79
120
  * The `catch` is not tidiness: nothing downstream can reach a group that was
@@ -94,8 +135,56 @@ export declare class Converter {
94
135
  * the loop is five too many. */
95
136
  private addChildren;
96
137
  private convertBlock;
138
+ /** A control-flow body: `for`, `if` and `switch` scope SYMBOLS only. Their
139
+ * `translate` / `rotate` / `color` carry on past the closing brace, as
140
+ * upstream (scope.md, "Conditional Scope") — a loop that rotates each
141
+ * iteration leaves the frame where the last one ended. */
142
+ private inSymbolScope;
143
+ /** Wrap a finished geometry in a mesh with the node's material and
144
+ * placement. `scaleBySize` is for builders and groups, whose `size` scales
145
+ * the result; a primitive's `size` is already in its geometry. */
97
146
  private finishMesh;
147
+ /** Run `build` with the shape's own `detail` / `smoothing` in force, then
148
+ * restore the enclosing values. */
149
+ private withShapeOptions;
98
150
  private convertShape;
151
+ /** Run `build` with produced values going to `sink` rather than the scene. */
152
+ private captureValues;
153
+ /** A value a statement produced: collected when a sink is open, otherwise
154
+ * a shape is placed in the scene and anything else is an error, as
155
+ * upstream's "unused value" is. */
156
+ private placeValue;
157
+ private transformedForCapture;
158
+ private convertExpressionStatement;
159
+ /** Place a mesh value in the scene with the current material and frame.
160
+ * Its own vertex colours win over the material colour, as upstream. */
161
+ private placeMesh;
162
+ private placePolygons;
163
+ /** A geometry that stays alive as a value (a `define`d shape, a function's
164
+ * result) counts against the vertex budget for good, since a script can
165
+ * keep making them: refuse when it would overflow, then count it. */
166
+ private chargeRetained;
167
+ /** Build `nodes` at the origin in a throwaway group, collecting the values
168
+ * their statements produced and the geometry of every mesh they built (in
169
+ * the group's frame). The group is disposed and its vertex charge refunded;
170
+ * what is returned is the caller's to charge. */
171
+ private buildScratch;
172
+ /** `mesh { … }`: every polygon its body produces, and every mesh it builds,
173
+ * merged into one mesh in the current frame. */
174
+ private convertMesh;
175
+ /** `polygon { point … }`: one face from explicit 3D vertices, with `color`
176
+ * per vertex, loops and defines, as in a path block. */
177
+ private polygonValue;
178
+ /** `point 1 2 3`, or `point v` where `v` is a tuple. */
179
+ private pointCoordinates;
180
+ private meshesIn;
181
+ /** A shape as a value: built at the origin in a scratch group, its meshes
182
+ * merged into one geometry the script can read members of and place. A
183
+ * polygon block or a function that returned one is that value itself. */
184
+ private shapeValue;
185
+ /** A function whose body builds shapes: run it at the origin with its
186
+ * parameters bound, and return what it built — one value, or a tuple. */
187
+ private callShapeFunction;
99
188
  /** A solid whose extent is zero in any dimension draws nothing.
100
189
  *
101
190
  * `sphere { size 0 }` built a mesh with an empty bounding box, and
@@ -105,21 +194,52 @@ export declare class Converter {
105
194
  * definition and fall back to a unit size of their own. */
106
195
  private requireExtent;
107
196
  private createGeometry;
108
- private materialColor;
197
+ /** `roundrect { size w h radius r }`: the corner radius is `r` times the
198
+ * smaller side (default 0.25), as upstream. */
199
+ private createRoundrect;
200
+ /** A plugin extension (upstream has no torus). `size` is the OVERALL
201
+ * diameter, tube included, so it follows the same rule as the other curved
202
+ * primitives: the ring radius is what is left once the tube is subtracted.
203
+ * `outerRadius` (ring) and `innerRadius` (tube) override the derivation. */
204
+ private createTorus;
205
+ /** The material state a shape's own properties produce on top of `base`:
206
+ * a `material` bundle first, then the individual properties, the way the
207
+ * same commands would apply in order inside its block. */
208
+ private materialFor;
209
+ private applyColor;
210
+ /** `glow` takes a colour or a brightness; the alpha is ignored upstream. */
211
+ private glowColor;
212
+ private warnTexture;
213
+ private applyMaterialValue;
109
214
  private createMaterial;
110
215
  private convertCSG;
111
216
  private convertForLoop;
217
+ /** Expand a loop's iterable without materialising an absurd range first:
218
+ * the walk stops at the budget rather than after allocating past it. */
219
+ private iterations;
112
220
  private convertIf;
113
221
  private convertSwitch;
114
222
  private handleDefine;
115
223
  private convertCustomShape;
224
+ /** Post-multiply a shape's `position` / `orientation` / `size` into a frame. */
225
+ private applyPlacement;
116
226
  private pushTransform;
117
227
  private popTransform;
118
228
  private currentTransform;
119
229
  private applyCurrentTransform;
120
230
  private applyExplicitTransforms;
231
+ /** An upstream rotation value as a quaternion.
232
+ *
233
+ * `roll yaw pitch` are HALF-TURNS (0.5 = 90°) about Z, Y and X, applied in
234
+ * that order, and positive is clockwise looking down each axis toward the
235
+ * origin — Euclid stores the negated angle, so the sign is flipped here to
236
+ * match. A lone number is a roll (`orientation 0.25` = 45° about Z, not a
237
+ * uniform tuple like `size`), and four numbers are `angle x y z`. */
238
+ private rotationOf;
239
+ private rotationComponents;
121
240
  private handleDetail;
122
241
  private handleColorCommand;
242
+ private handleMaterialCommand;
123
243
  private handleRotateCommand;
124
244
  private handleOrientationCommand;
125
245
  private handleTranslateCommand;
@@ -133,8 +253,56 @@ export declare class Converter {
133
253
  * path. Sampled at the same resolution the geometry will use, so a curve
134
254
  * that only looks flat at low detail is not rejected. */
135
255
  private requireEnclosedArea;
256
+ /** `size` on an extrude: X and Y scale the profile, Z is the depth. The
257
+ * depth goes into the geometry (centred on the profile plane, as
258
+ * upstream), so the mesh keeps a unit Z scale. */
259
+ private extrudeProperties;
136
260
  private convertExtrude;
261
+ /** Path samples as 3D points, refused when they would not survive the trip
262
+ * into a Float32 position attribute. */
263
+ private finitePoints;
264
+ /** `extrude { section … along path }`: every planar child is a section swept
265
+ * along the path — its +Z turned to the path's tangent — and the sections
266
+ * are joined into one solid, capped at the ends of an open path. `size`
267
+ * scales the result as a whole, as on any shape. */
268
+ private convertExtrudeAlong;
269
+ /** A planar child's perimeter as a section in the XY plane, wound
270
+ * counter-clockwise so the swept walls face outward. */
271
+ private sectionOf;
272
+ /** The points of the `along` path — a stroke for an open path, a planar
273
+ * shape's perimeter for a closed one — built in a scratch group. */
274
+ private sweepPathOf;
137
275
  private buildPath;
276
+ /** Bake the path's own `position` / `orientation` / `size` into geometry
277
+ * built from it. Baked rather than set on the mesh so the consuming
278
+ * builder's own options (an `extrude { position … }`) still apply on top,
279
+ * the way they do upstream where the path is a placed shape. */
280
+ private placePath;
281
+ /** Run the path's commands and return its points in path space.
282
+ *
283
+ * Coordinates are ABSOLUTE, as upstream: `point 1 0` is at x=1 however many
284
+ * points came before it. What `translate`, `rotate` and `scale` move is the
285
+ * path's local frame, which every later point is placed through — so
286
+ * `for 0 to 8 { curve 0 1 rotate 1 / 8 }` walks a semicircle. The frame is
287
+ * post-multiplied like the shape transform, and checked after every command
288
+ * because individually finite operands can still overflow it. */
289
+ private collectPathPoints;
290
+ private placePathPoint;
291
+ /** `arc { angle a }`: `a` half-turns clockwise from +Y at radius `size / 2`,
292
+ * placed by its own position/orientation, sampled as corners at the current
293
+ * detail (upstream's own segment count for the span). */
294
+ private placeArc;
295
+ private runPathLoop;
296
+ /** Join path points into an outline, treating `curve` points as upstream does.
297
+ *
298
+ * A `curve` is the CONTROL point of a quadratic Bézier; the outline passes
299
+ * through the `point`s on either side of it, not through the control point
300
+ * itself. Two `curve`s in a row get an implicit on-curve point halfway
301
+ * between them, which is how eight controls in an octagon draw a circle.
302
+ * A closed path (first and last point equal) may start on a control point.
303
+ * An OPEN path's first and last points are taken as corners even when they
304
+ * are `curve`s — upstream extrapolates a tangent there; this does not. */
305
+ private shapeFromPathPoints;
138
306
  private convertLathe;
139
307
  /** A lathe profile is only a solid once it is SAMPLED.
140
308
  *
@@ -150,20 +318,28 @@ export declare class Converter {
150
318
  private buildOperands;
151
319
  private buildFromChildren;
152
320
  private convertLoft;
321
+ private buildLoft;
153
322
  private planarShape;
154
323
  private convertFill;
324
+ /** `minkowski { a b … }`: the children summed left to right, each solid
325
+ * swept over every point of the next. The result keeps the first child's
326
+ * colour, as upstream keeps its material. */
327
+ private convertMinkowski;
155
328
  private convertHull;
156
329
  private evaluateNumber;
330
+ /** A `position`: one value is X alone (`position 1` is `1 0 0`, as
331
+ * upstream and as `translate` here), the rest are padded with zeros. */
157
332
  private evaluateVector3;
333
+ /** A `size`: one value is uniform, two are `x y x` (a cylinder's diameter
334
+ * and height), three are as given — Euclid's `Vector(size:)`. */
335
+ private evaluateSize;
336
+ private evaluateRGBA;
158
337
  private evaluateTranslateVector;
159
- private evaluateColor;
160
338
  /** Colour channels get the same treatment as sizes and translations.
161
339
  * `new THREE.Color(Infinity, …)` throws nothing — it serialises as
162
340
  * `[null, null, null]`, so validation reported success and the browser was
163
341
  * handed a material it cannot draw. */
164
342
  private requireFiniteColor;
165
- private evaluateVector3OrColor;
166
- private valuesEqual;
167
343
  }
168
344
  export declare function astToThreeJS(nodes: SceneNode[], options?: ConversionOptions): THREE.Group;
169
345
  //# sourceMappingURL=toThreeJS.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"toThreeJS.d.ts","sourceRoot":"","sources":["../../src/shapescript/toThreeJS.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"toThreeJS.d.ts","sourceRoot":"","sources":["../../src/shapescript/toThreeJS.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EACL,SAAS,EAkCV,MAAM,SAAS,CAAC;AACjB,OAAO,EAAiC,IAAI,EAAqF,MAAM,aAAa,CAAC;AAKrJ;kEACkE;AAClE,MAAM,WAAW,oBAAoB;IACnC,6DAA6D;IAC7D,UAAU,CAAC,EAAE,IAAI,CAAC;IAClB,6EAA6E;IAC7E,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oCAAoC;IACpC,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,GAAG,oBAAoB,CAGvE;AAyCD,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;+BAC2B;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;yCACqC;IACrC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;kCAC8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;qCACiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;+DAE2D;IAC3D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAaD,eAAO,MAAM,iBAAiB,SAAU,CAAC;AACzC,eAAO,MAAM,2BAA2B,SAAU,CAAC;AASnD,eAAO,MAAM,UAAU,IAAI,CAAC;AAC5B,eAAO,MAAM,UAAU,MAAM,CAAC;AAU9B,eAAO,MAAM,oBAAoB,UAAY,CAAC;AAe9C,eAAO,MAAM,uBAAuB,QAAS,CAAC;AAkB9C;sCACsC;AACtC,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAiFD,qBAAa,SAAS;IACpB,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,WAAW,CAAc;IACjC,yEAAyE;IACzE,OAAO,CAAC,SAAS,CAAK;IACtB,8EAA8E;IAC9E,OAAO,CAAC,WAAW,CAAK;IACxB,iFAAiF;IACjF,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAc;IAGxC,OAAO,CAAC,cAAc,CAAwB;IAC9C;4EACwE;IACxE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAqB;IAChD,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAgB;IACrC,OAAO,CAAC,UAAU,CAAmB;IACrC,OAAO,CAAC,UAAU,CAAK;IACvB;;6DAEyD;IACzD,OAAO,CAAC,SAAS,CAAwB;IACzC;;qEAEiE;IACjE,OAAO,CAAC,QAAQ,CAA8B;gBAElC,OAAO,GAAE,iBAAsB;IAiB3C,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,KAAK;IAuBxC,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,iBAAiB,GAE5B;IAED,OAAO,KAAK,WAAW,GAEtB;IAED,OAAO,KAAK,aAAa,GAExB;IAED;;;;;;iEAM6D;IAC7D;;;;;;uEAMmE;IACnE,OAAO,CAAC,kBAAkB;IAK1B,OAAO,CAAC,cAAc;IAMtB;;;yEAGqE;IACrE,OAAO,CAAC,QAAQ;IAUhB,OAAO,CAAC,WAAW;IA4FnB;yCACqC;IACrC,OAAO,CAAC,kBAAkB;IAe1B;uEACmE;IACnE,OAAO,CAAC,cAAc;IAItB;8EAC0E;IAC1E,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,YAAY;IAgBpB;kFAC8E;IAC9E,OAAO,CAAC,IAAI;IAMZ;sCACkC;IAClC,OAAO,CAAC,gBAAgB;IAUxB;;;;;;;;sDAQkD;IAClD,OAAO,CAAC,OAAO;IAYf;;;qEAGiE;IACjE,OAAO,CAAC,OAAO;IAaf;;qCAEiC;IACjC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,YAAY;IAKpB;;;+DAG2D;IAC3D,OAAO,CAAC,aAAa;IAarB;;uEAEmE;IACnE,OAAO,CAAC,UAAU;IAclB;wCACoC;IACpC,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAKpB,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAUrB;;wCAEoC;IACpC,OAAO,CAAC,UAAU;IA6BlB,OAAO,CAAC,qBAAqB;IAsB7B,OAAO,CAAC,0BAA0B;IAIlC;4EACwE;IACxE,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,aAAa;IASrB;;0EAEsE;IACtE,OAAO,CAAC,cAAc;IAOtB;;;sDAGkD;IAClD,OAAO,CAAC,YAAY;IAsCpB;qDACiD;IACjD,OAAO,CAAC,WAAW;IAoBnB;6DACyD;IACzD,OAAO,CAAC,YAAY;IA+CpB,wDAAwD;IACxD,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,QAAQ;IAShB;;8EAE0E;IAC1E,OAAO,CAAC,UAAU;IAalB;8EAC0E;IAC1E,OAAO,CAAC,iBAAiB;IAiBzB;;;;;;gEAM4D;IAC5D,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;IA+DtB;oDACgD;IAChD,OAAO,CAAC,eAAe;IAuBvB;;;iFAG6E;IAC7E,OAAO,CAAC,WAAW;IAYnB;;+DAE2D;IAC3D,OAAO,CAAC,WAAW;IAYnB,OAAO,CAAC,UAAU;IAKlB,4EAA4E;IAC5E,OAAO,CAAC,SAAS;IAKjB,OAAO,CAAC,WAAW;IAKnB,OAAO,CAAC,kBAAkB;IAW1B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,UAAU;IA0LlB,OAAO,CAAC,cAAc;IAgBtB;6EACyE;IACzE,OAAO,CAAC,UAAU;IAQlB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,kBAAkB;IAuD1B,gFAAgF;IAChF,OAAO,CAAC,cAAc;IAQtB,OAAO,CAAC,aAAa;IAQrB,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,qBAAqB;IAK7B,OAAO,CAAC,uBAAuB;IAe/B;;;;;;0EAMsE;IACtE,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,kBAAkB;IAI1B,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,sBAAsB;IAQ9B,OAAO,CAAC,kBAAkB;IAO1B;;;;;;;8DAO0D;IAC1D,OAAO,CAAC,mBAAmB;IAY3B;;uDAEmD;IACnD,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,cAAc;IAmCtB;6CACyC;IACzC,OAAO,CAAC,YAAY;IAMpB;;;yDAGqD;IACrD,OAAO,CAAC,mBAAmB;IAa3B;6DACyD;IACzD,OAAO,CAAC,SAAS;IAMjB;yEACqE;IACrE,OAAO,CAAC,WAAW;IAgBnB,OAAO,CAAC,SAAS;IAIjB;;;qEAGiE;IACjE,OAAO,CAAC,SAAS;IAQjB;;;;;;;sEAOkE;IAClE,OAAO,CAAC,iBAAiB;IAoEzB,OAAO,CAAC,cAAc;IAMtB;;8DAE0D;IAC1D,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,WAAW;IAgBnB;;;;;;;;+EAQ2E;IAC3E,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,YAAY;IAMpB;;;;;4EAKwE;IACxE,OAAO,CAAC,mBAAmB;IAW3B,OAAO,CAAC,UAAU;IAqDlB;;kDAE8C;IAC9C,OAAO,CAAC,aAAa;IA4BrB,OAAO,CAAC,iBAAiB;IAwBzB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,WAAW;IAuBnB;;kDAE8C;IAC9C,OAAO,CAAC,gBAAgB;IA+BxB,OAAO,CAAC,WAAW;IAsBnB,OAAO,CAAC,cAAc;IAQtB;6EACyE;IACzE,OAAO,CAAC,eAAe;IAUvB;sEACkE;IAClE,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,uBAAuB;IAiB/B;;;4CAGwC;IACxC,OAAO,CAAC,kBAAkB;CAI3B;AAwGD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,OAAO,GAAE,iBAAsB,GAAG,KAAK,CAAC,KAAK,CAG7F"}