forgecad 0.6.3 → 0.8.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 (234) hide show
  1. package/README.md +3 -12
  2. package/dist/assets/{AdminPage-CeqCUUgu.js → AdminPage-D4bocK4E.js} +250 -151
  3. package/dist/assets/{BlogPage-P_AJP0v9.js → BlogPage-CJEXL_zJ.js} +94 -70
  4. package/dist/assets/{DocsPage-CKRV2iq2.js → DocsPage-D3A_g8V3.js} +329 -163
  5. package/dist/assets/{EditorApp-CnC2k4cW.css → EditorApp-BWYUSpUN.css} +590 -136
  6. package/dist/assets/EditorApp-Cihhqcsq.js +11692 -0
  7. package/dist/assets/{EmbedViewer-DBlzmQ5i.js → EmbedViewer-kWjKaC_t.js} +2 -4
  8. package/dist/assets/LandingPageProofDriven-Bg2IUc3l.css +856 -0
  9. package/dist/assets/LandingPageProofDriven-DXkKlyhI.js +601 -0
  10. package/dist/assets/PricingPage-BsU5vzEx.js +232 -0
  11. package/dist/assets/{SettingsPage-BqCh9JcC.js → SettingsPage-PqvpAKIs.js} +129 -5
  12. package/dist/assets/{evalWorker-Ql-aKwLA.js → evalWorker-C-hzNUMy.js} +8949 -3161
  13. package/dist/assets/{Viewport-CoB46f5R.js → index-Pz321YAt.js} +38382 -7501
  14. package/dist/assets/{index-2hfs_ub0.css → index-ay13WNfa.css} +726 -53
  15. package/dist/assets/{javascript-DCxGoE5Y.js → javascript-DAl8Gmyo.js} +1 -1
  16. package/dist/assets/{manifold-CqNMHHKO.js → manifold-BcbjWLIo.js} +4 -3
  17. package/dist/assets/{manifold-Cce9wRFz.js → manifold-DBckbFgx.js} +1 -1
  18. package/dist/assets/{manifold-D6BeHIOo.js → manifold-O2AAGXyj.js} +1 -1
  19. package/dist/assets/{reportWorker-sFEFonXf.js → reportWorker-Dxr-5A7w.js} +8760 -3559
  20. package/dist/assets/{vendor-react-Dt7-aaJH.js → vendor-react-CG3i_wp0.js} +65 -8
  21. package/dist/docs/index.html +2 -2
  22. package/dist/docs-raw/CLI.md +341 -718
  23. package/dist/docs-raw/generated/assembly.md +699 -112
  24. package/dist/docs-raw/generated/concepts.md +1834 -1346
  25. package/dist/docs-raw/generated/core.md +1012 -1059
  26. package/dist/docs-raw/generated/curves.md +759 -116
  27. package/dist/docs-raw/generated/lib.md +43 -748
  28. package/dist/docs-raw/generated/output.md +139 -245
  29. package/dist/docs-raw/generated/sdf.md +208 -0
  30. package/dist/docs-raw/generated/sheet-metal.md +473 -21
  31. package/dist/docs-raw/generated/sketch.md +1518 -362
  32. package/dist/docs-raw/generated/viewport.md +368 -299
  33. package/dist/docs-raw/generated/wood.md +104 -0
  34. package/dist/index.html +2 -2
  35. package/dist/landing/proof-ams-adapter.png +0 -0
  36. package/dist/landing/proof-bolt-and-nut.png +0 -0
  37. package/dist/landing/proof-fillet-enclosure.png +0 -0
  38. package/dist/landing/proof-glasses.png +0 -0
  39. package/dist/landing/proof-gyroid.png +0 -0
  40. package/dist/sitemap.xml +6 -6
  41. package/dist-cli/forgecad.js +12321 -5700
  42. package/dist-cli/forgecad.js.map +1 -0
  43. package/dist-cli/solver-46FFSK2U.js +363 -0
  44. package/dist-cli/solver-46FFSK2U.js.map +1 -0
  45. package/dist-skill/CONTEXT.md +4890 -6302
  46. package/dist-skill/SKILL-dev.md +22 -66
  47. package/dist-skill/SKILL.md +20 -59
  48. package/dist-skill/docs/API/core/concepts.md +37 -92
  49. package/dist-skill/docs/CLI.md +341 -718
  50. package/dist-skill/docs/generated/assembly.md +699 -112
  51. package/dist-skill/docs/generated/core.md +1012 -1059
  52. package/dist-skill/docs/generated/curves.md +759 -116
  53. package/dist-skill/docs/generated/lib.md +43 -748
  54. package/dist-skill/docs/generated/output.md +139 -245
  55. package/dist-skill/docs/generated/sdf.md +208 -0
  56. package/dist-skill/docs/generated/sheet-metal.md +473 -21
  57. package/dist-skill/docs/generated/sketch.md +1518 -362
  58. package/dist-skill/docs/generated/viewport.md +368 -299
  59. package/dist-skill/docs/generated/wood.md +104 -0
  60. package/dist-skill/docs/guides/coordinate-system.md +11 -17
  61. package/dist-skill/docs/guides/geometry-conventions.md +13 -70
  62. package/dist-skill/docs/guides/joint-design.md +78 -0
  63. package/dist-skill/docs/guides/modeling-recipes.md +22 -195
  64. package/dist-skill/docs/guides/positioning.md +88 -147
  65. package/dist-skill/docs-dev/API/core/concepts.md +78 -0
  66. package/dist-skill/docs-dev/CLI.md +488 -0
  67. package/dist-skill/{docs → docs-dev}/blueprint-first.md +5 -0
  68. package/dist-skill/{docs → docs-dev}/coding-best-practices.md +6 -8
  69. package/dist-skill/{docs → docs-dev}/coding.md +2 -4
  70. package/dist-skill/docs-dev/component-model.md +164 -0
  71. package/dist-skill/docs-dev/generated/assembly.md +779 -0
  72. package/dist-skill/docs-dev/generated/core.md +1676 -0
  73. package/dist-skill/docs-dev/generated/curves.md +855 -0
  74. package/dist-skill/docs-dev/generated/lib.md +55 -0
  75. package/dist-skill/docs-dev/generated/output.md +234 -0
  76. package/dist-skill/docs-dev/generated/sdf.md +208 -0
  77. package/dist-skill/docs-dev/generated/sheet-metal.md +506 -0
  78. package/dist-skill/docs-dev/generated/sketch.md +1753 -0
  79. package/dist-skill/docs-dev/generated/viewport.md +513 -0
  80. package/dist-skill/docs-dev/generated/wood.md +104 -0
  81. package/dist-skill/docs-dev/guides/coordinate-system.md +46 -0
  82. package/dist-skill/docs-dev/guides/geometry-conventions.md +52 -0
  83. package/dist-skill/docs-dev/guides/joint-design.md +78 -0
  84. package/dist-skill/docs-dev/guides/modeling-recipes.md +77 -0
  85. package/dist-skill/docs-dev/guides/positioning.md +151 -0
  86. package/dist-skill/{docs → docs-dev}/guides/skill-maintenance.md +21 -10
  87. package/dist-skill/{docs → docs-dev}/internals/compiler.md +5 -6
  88. package/dist-skill/{docs → docs-dev}/internals/constraint-solver-quality.md +0 -1
  89. package/dist-skill/{docs → docs-dev}/internals/constraint-solver.md +0 -1
  90. package/dist-skill/{docs → docs-dev}/internals/sketch-2d-pipeline.md +2 -3
  91. package/examples/api/attachTo-basics.forge.js +8 -8
  92. package/examples/api/bill-of-materials.forge.js +9 -9
  93. package/examples/api/bolt-pattern.forge.js +5 -5
  94. package/examples/api/boolean-operations.forge.js +5 -5
  95. package/examples/api/bounding-box-visualizer.forge.js +3 -3
  96. package/examples/api/clone-duplicate.forge.js +2 -2
  97. package/examples/api/colors-union-vs-array.forge.js +6 -6
  98. package/examples/api/connector-assembly.forge.js +8 -6
  99. package/examples/api/connector-basics.forge.js +7 -7
  100. package/examples/api/constrained-sketch-mechanical.forge.js +4 -4
  101. package/examples/api/elbow-test.forge.js +3 -3
  102. package/examples/api/extrude-options.forge.js +8 -14
  103. package/examples/api/feature-created-faces.forge.js +6 -10
  104. package/examples/api/fillet-showcase.forge.js +2 -2
  105. package/examples/api/folded-service-panel-cover.forge.js +2 -2
  106. package/examples/api/gears-tier1.forge.js +5 -5
  107. package/examples/api/group-test.forge.js +3 -3
  108. package/examples/api/group-vs-union.forge.js +1 -1
  109. package/examples/api/highlight-debug.forge.js +4 -0
  110. package/examples/api/js-module-pillars.js +1 -1
  111. package/examples/api/js-module-scene.js +2 -2
  112. package/examples/api/mesh-import-slats.forge.js +4 -4
  113. package/examples/api/patterns.forge.js +3 -3
  114. package/examples/api/pointAlong-orientation.forge.js +3 -3
  115. package/examples/api/profile-2020-b-slot6.forge.js +4 -5
  116. package/examples/api/route-perimeter-flange.forge.js +1 -1
  117. package/examples/api/sdf-rover-demo.forge.js +10 -10
  118. package/examples/api/sketch-on-face-demo.forge.js +2 -2
  119. package/examples/api/sketch-regions.forge.js +4 -4
  120. package/examples/api/sketch-rounding-strategies.forge.js +1 -1
  121. package/examples/api/smooth-curve-connections.forge.js +1 -1
  122. package/examples/api/transition-curves.forge.js +4 -4
  123. package/examples/api/variable-sweep-pure-sdf-test.forge.js +162 -0
  124. package/examples/api/variable-sweep-test.forge.js +2 -2
  125. package/examples/api/wood-joinery.forge.js +60 -0
  126. package/examples/compiler-corpus/enclosure-shell-cuts.forge.js +3 -3
  127. package/examples/compiler-corpus/fastener-plate-variants.forge.js +2 -2
  128. package/examples/constraints/01-fully-constrained-rect.forge.js +2 -2
  129. package/examples/constraints/02-underconstrained-triangle.forge.js +1 -1
  130. package/examples/constraints/03-redundant-constraints.forge.js +2 -2
  131. package/examples/constraints/05-parallel-with-linedistance.forge.js +2 -2
  132. package/examples/constraints/06-complex-spectrogram.forge.js +1 -1
  133. package/examples/constraints/07-perpendicular-chain.forge.js +4 -4
  134. package/examples/constraints/08-symmetric-bracket.forge.js +4 -4
  135. package/examples/constraints/09-stress-spiral.forge.js +1 -1
  136. package/examples/constraints/10-stress-honeycomb.forge.js +1 -1
  137. package/examples/constraints/11-surface-grid.forge.js +2 -2
  138. package/examples/constraints/12-surface-nested.forge.js +4 -4
  139. package/examples/constraints/13-surface-complex.forge.js +1 -1
  140. package/examples/exact-arc-housing.forge.js +12 -0
  141. package/examples/experiments/drone-arm.forge.js +53 -0
  142. package/examples/furniture/adjustable-table.forge.js +15 -15
  143. package/examples/furniture/bathroom.forge.js +26 -26
  144. package/examples/furniture/chair.forge.js +13 -13
  145. package/examples/furniture/picture-frame.forge.js +6 -6
  146. package/examples/furniture/shoe-rack-doors.forge.js +8 -8
  147. package/examples/furniture/shoe-rack.forge.js +7 -7
  148. package/examples/furniture/table-lamp.forge.js +8 -8
  149. package/examples/gcode/lissajous-vase.forge.js +4 -4
  150. package/examples/gcode/math-surface.forge.js +3 -3
  151. package/examples/gcode/parametric-vase.forge.js +4 -4
  152. package/examples/gcode/spiral-tower.forge.js +4 -4
  153. package/examples/generative/crystal-growth.forge.js +9 -9
  154. package/examples/generative/frost-spires.forge.js +9 -9
  155. package/examples/generative/golden-spiral-tower.forge.js +11 -11
  156. package/examples/generative/molten-forge.forge.js +6 -6
  157. package/examples/generative/neon-coral.forge.js +7 -7
  158. package/examples/mechanical/3d-printer.forge.js +37 -37
  159. package/examples/mechanical/5-finger-robot-hand.forge.js +19 -19
  160. package/examples/mechanical/airplane-propeller.forge.js +9 -9
  161. package/examples/mechanical/bolt-and-nut.forge.js +10 -10
  162. package/examples/mechanical/door-with-hinges.forge.js +7 -7
  163. package/examples/mechanical/fillet-enclosure.forge.js +15 -11
  164. package/examples/mechanical/headphone-hanger-v2.forge.js +11 -11
  165. package/examples/mechanical/robot_hand.forge.js +24 -24
  166. package/examples/mechanical/robot_hand_2.forge.js +26 -26
  167. package/examples/nurbs-surface.forge.js +8 -0
  168. package/examples/nurbs-tube.forge.js +7 -0
  169. package/examples/products/bottle.forge.js +8 -8
  170. package/examples/products/chess-set.forge.js +25 -25
  171. package/examples/products/classical-piano.forge.js +20 -20
  172. package/examples/products/clock.forge.js +33 -33
  173. package/examples/products/cup.forge.js +5 -5
  174. package/examples/products/iphone.forge.js +20 -20
  175. package/examples/products/laptop.forge.js +24 -24
  176. package/examples/products/laser-cut-box.forge.js +6 -6
  177. package/examples/products/laser-cut-tray.forge.js +6 -6
  178. package/examples/products/liquid-soap-dispenser.forge.js +23 -23
  179. package/examples/products/origami-fish.forge.js +14 -12
  180. package/examples/products/spiderman-cake.forge.js +6 -6
  181. package/examples/shelf/container.forge.js +5 -5
  182. package/examples/shelf/shelf-unit.forge.js +6 -6
  183. package/examples/toolbox/bolted-joint.forge.js +7 -7
  184. package/package.json +9 -4
  185. package/dist/assets/EditorApp-B-vQvgam.js +0 -9888
  186. package/dist/assets/LandingPage-C5n9hDXI.js +0 -322
  187. package/dist/assets/PublishedModelPage-Dt7PCVBj.js +0 -146
  188. package/dist/assets/__vite-browser-external-CURh0WXD.js +0 -8
  189. package/dist/assets/deserializeRunResult-BLAFoiE0.js +0 -19365
  190. package/dist/assets/index-1CYp3zUp.js +0 -1455
  191. package/dist-skill/docs/API/API.md +0 -1666
  192. package/dist-skill/docs/API/README.md +0 -37
  193. package/dist-skill/docs/API/assembly/assembly.md +0 -617
  194. package/dist-skill/docs/API/core/edge-queries.md +0 -130
  195. package/dist-skill/docs/API/core/parameters.md +0 -122
  196. package/dist-skill/docs/API/core/reserved-terms.md +0 -137
  197. package/dist-skill/docs/API/core/sdf.md +0 -326
  198. package/dist-skill/docs/API/core/skill-cli.md +0 -194
  199. package/dist-skill/docs/API/core/skill-guide.md +0 -205
  200. package/dist-skill/docs/API/core/specs.md +0 -186
  201. package/dist-skill/docs/API/core/topology.md +0 -372
  202. package/dist-skill/docs/API/entities.md +0 -268
  203. package/dist-skill/docs/API/output/bom.md +0 -58
  204. package/dist-skill/docs/API/output/brep-export.md +0 -87
  205. package/dist-skill/docs/API/output/dimensions.md +0 -67
  206. package/dist-skill/docs/API/output/export.md +0 -110
  207. package/dist-skill/docs/API/output/gcode.md +0 -195
  208. package/dist-skill/docs/API/runtime/viewport.md +0 -420
  209. package/dist-skill/docs/API/sheet-metal/sheet-metal.md +0 -185
  210. package/dist-skill/docs/API/sketch/anchor.md +0 -37
  211. package/dist-skill/docs/API/sketch/booleans.md +0 -91
  212. package/dist-skill/docs/API/sketch/core.md +0 -73
  213. package/dist-skill/docs/API/sketch/extrude.md +0 -62
  214. package/dist-skill/docs/API/sketch/on-face.md +0 -104
  215. package/dist-skill/docs/API/sketch/operations.md +0 -78
  216. package/dist-skill/docs/API/sketch/path.md +0 -75
  217. package/dist-skill/docs/API/sketch/primitives.md +0 -146
  218. package/dist-skill/docs/API/sketch/regions.md +0 -80
  219. package/dist-skill/docs/API/sketch/text.md +0 -108
  220. package/dist-skill/docs/API/sketch/transforms.md +0 -65
  221. package/dist-skill/docs/API/toolbox/fasteners.md +0 -129
  222. package/dist-skill/docs/INDEX.md +0 -94
  223. package/dist-skill/docs/RELEASING.md +0 -55
  224. package/dist-skill/docs/cli-monetization.md +0 -111
  225. package/dist-skill/docs/deployment.md +0 -281
  226. package/dist-skill/docs/generated/concepts.md +0 -2112
  227. package/dist-skill/docs/internals/shape-from-slices.md +0 -152
  228. package/dist-skill/docs/platform/admin.md +0 -45
  229. package/dist-skill/docs/platform/architecture.md +0 -79
  230. package/dist-skill/docs/platform/auth.md +0 -110
  231. package/dist-skill/docs/platform/email.md +0 -67
  232. package/dist-skill/docs/platform/projects.md +0 -111
  233. package/dist-skill/docs/platform/sharing.md +0 -90
  234. package/dist-skill/docs/runbook.md +0 -345
@@ -1,11 +1,11 @@
1
1
  // Full Bathroom — parametric room with fixtures
2
2
  // Bathtub, sink, toilet, mirror, shower glass panel, towel rack
3
3
 
4
- const roomW = param("Room Width", 2400, { min: 1800, max: 3500, unit: "mm" });
5
- const roomD = param("Room Depth", 2000, { min: 1500, max: 3000, unit: "mm" });
6
- const roomH = param("Room Height", 2500, { min: 2200, max: 3000, unit: "mm" });
7
- const wallT = param("Wall Thickness", 80, { min: 50, max: 150, unit: "mm" });
8
- const tileH = param("Tile Height", 1200, { min: 800, max: 1800, unit: "mm" });
4
+ const roomW = Param.number("Room Width", 2400, { min: 1800, max: 3500, unit: "mm" });
5
+ const roomD = Param.number("Room Depth", 2000, { min: 1500, max: 3000, unit: "mm" });
6
+ const roomH = Param.number("Room Height", 2500, { min: 2200, max: 3000, unit: "mm" });
7
+ const wallT = Param.number("Wall Thickness", 80, { min: 50, max: 150, unit: "mm" });
8
+ const tileH = Param.number("Tile Height", 1200, { min: 800, max: 1800, unit: "mm" });
9
9
 
10
10
  // ─── Room shell (floor + 3 walls, front open) ───
11
11
 
@@ -21,10 +21,10 @@ const tileStrip = box(roomW - 2 * wallT, 2, tileH)
21
21
 
22
22
  // ─── Bathtub (left-back corner) ───
23
23
 
24
- const tubL = param("Tub Length", 1500, { min: 1200, max: 1800, unit: "mm" });
25
- const tubW = param("Tub Width", 700, { min: 550, max: 800, unit: "mm" });
26
- const tubH = param("Tub Height", 500, { min: 400, max: 600, unit: "mm" });
27
- const tubWall = param("Tub Wall", 40, { min: 25, max: 60, unit: "mm" });
24
+ const tubL = Param.number("Tub Length", 1500, { min: 1200, max: 1800, unit: "mm" });
25
+ const tubW = Param.number("Tub Width", 700, { min: 550, max: 800, unit: "mm" });
26
+ const tubH = Param.number("Tub Height", 500, { min: 400, max: 600, unit: "mm" });
27
+ const tubWall = Param.number("Tub Wall", 40, { min: 25, max: 60, unit: "mm" });
28
28
 
29
29
  const tubX = wallT + 20;
30
30
  const tubY = roomD - wallT - tubW - 20;
@@ -39,7 +39,7 @@ const bathtub = tubOuter.subtract(tubInner).subtract(tubDrain)
39
39
 
40
40
  // ─── Shower (above tub) ───
41
41
 
42
- const glassH = param("Glass Height", 1800, { min: 1500, max: 2200, unit: "mm" });
42
+ const glassH = Param.number("Glass Height", 1800, { min: 1500, max: 2200, unit: "mm" });
43
43
  const glassT = 8;
44
44
 
45
45
  // Glass panel at tub edge
@@ -51,7 +51,7 @@ const armLen = 250;
51
51
  const showerArmX = tubX + tubL * 0.6;
52
52
  const showerArmZ = wallT + glassH - 150;
53
53
  const showerArm = cylinder(armLen, 12)
54
- .rotateAround([0, 0, 0], 90, 0, 0)
54
+ .rotateX(90)
55
55
  .translate(showerArmX, roomD - wallT, showerArmZ);
56
56
 
57
57
  // Shower head — disc at end of arm
@@ -62,8 +62,8 @@ const shower = union(showerArm, showerHead);
62
62
 
63
63
  // ─── Toilet (right side, against back wall) ───
64
64
 
65
- const toiletW = param("Toilet Width", 380, { min: 340, max: 420, unit: "mm" });
66
- const toiletD = param("Toilet Depth", 650, { min: 550, max: 750, unit: "mm" });
65
+ const toiletW = Param.number("Toilet Width", 380, { min: 340, max: 420, unit: "mm" });
66
+ const toiletD = Param.number("Toilet Depth", 650, { min: 550, max: 750, unit: "mm" });
67
67
  const toiletH = 400;
68
68
 
69
69
  const toiletX = roomW - wallT - toiletW - 150;
@@ -83,11 +83,11 @@ const bowl = bowlOuter.subtract(bowlInner)
83
83
  const tankW = toiletW * 0.85;
84
84
  const tankD = 150;
85
85
  const tankH = 320;
86
- const tank = box(tankW, tankD, tankH, true)
86
+ const tank = box(tankW, tankD, tankH)
87
87
  .translate(toiletCX, toiletY + toiletD - tankD / 2 - 10, wallT + toiletH / 2 + tankH / 2 - 80);
88
88
 
89
89
  // Lid — flat slab on top of tank
90
- const lid = box(tankW + 10, tankD + 10, 15, true)
90
+ const lid = box(tankW + 10, tankD + 10, 15)
91
91
  .translate(toiletCX, toiletY + toiletD - tankD / 2 - 10, wallT + toiletH / 2 + tankH - 80 + 7);
92
92
 
93
93
  // Seat — flat ring on top of bowl
@@ -100,7 +100,7 @@ const toilet = union(bowl, tank, lid, seat);
100
100
 
101
101
  // ─── Sink (right wall, facing into room) ───
102
102
 
103
- const sinkW = param("Sink Width", 550, { min: 400, max: 700, unit: "mm" });
103
+ const sinkW = Param.number("Sink Width", 550, { min: 400, max: 700, unit: "mm" });
104
104
  const sinkD = 420;
105
105
  const sinkH = 160;
106
106
  const sinkZ = 850;
@@ -109,14 +109,14 @@ const sinkZ = 850;
109
109
  const sinkCX = roomW - wallT - sinkD / 2 - 30;
110
110
  const sinkCY = roomD * 0.35;
111
111
 
112
- const basinOuter = box(sinkD, sinkW, sinkH, true);
113
- const basinInner = box(sinkD - 50, sinkW - 50, sinkH - 25, true).translate(0, 0, 12);
112
+ const basinOuter = box(sinkD, sinkW, sinkH);
113
+ const basinInner = box(sinkD - 50, sinkW - 50, sinkH - 25).translate(0, 0, 12);
114
114
  const drain = cylinder(27, 18).translate(0, 0, -sinkH / 2);
115
115
  const basin = basinOuter.subtract(basinInner).subtract(drain)
116
116
  .translate(sinkCX, sinkCY, wallT + sinkZ + sinkH / 2);
117
117
 
118
118
  // Pedestal
119
- const pedestal = box(80, 80, sinkZ, true)
119
+ const pedestal = box(80, 80, sinkZ)
120
120
  .translate(sinkCX, sinkCY, wallT + sinkZ / 2);
121
121
 
122
122
  // Faucet — vertical stem + curved spout
@@ -124,20 +124,20 @@ const faucetX = sinkCX + sinkD / 2 - 40;
124
124
  const faucetZ = wallT + sinkZ + sinkH;
125
125
  const faucetStem = cylinder(100, 10)
126
126
  .translate(faucetX, sinkCY, faucetZ);
127
- const faucetSpout = box(80, 16, 16, true)
127
+ const faucetSpout = box(80, 16, 16)
128
128
  .translate(faucetX - 40, sinkCY, faucetZ + 100);
129
129
  // Handles
130
- const handleL = box(30, 8, 8, true)
130
+ const handleL = box(30, 8, 8)
131
131
  .translate(faucetX, sinkCY - 30, faucetZ + 50);
132
- const handleR = box(30, 8, 8, true)
132
+ const handleR = box(30, 8, 8)
133
133
  .translate(faucetX, sinkCY + 30, faucetZ + 50);
134
134
 
135
135
  const sink = union(basin, pedestal, faucetStem, faucetSpout, handleL, handleR);
136
136
 
137
137
  // ─── Mirror (on right wall, above sink) ───
138
138
 
139
- const mirrorW = param("Mirror Width", 600, { min: 400, max: 900, unit: "mm" });
140
- const mirrorH = param("Mirror Height", 800, { min: 500, max: 1200, unit: "mm" });
139
+ const mirrorW = Param.number("Mirror Width", 600, { min: 400, max: 900, unit: "mm" });
140
+ const mirrorH = Param.number("Mirror Height", 800, { min: 500, max: 1200, unit: "mm" });
141
141
  const mirrorT = 5;
142
142
  const frameW = 15;
143
143
 
@@ -167,7 +167,7 @@ const bracketL = box(70, bracketSize, bracketSize)
167
167
  const bracketR = box(70, bracketSize, bracketSize)
168
168
  .translate(wallT, rackY + rackLen / 2 - bracketSize, wallT + rackZ);
169
169
  const towelBar = cylinder(rackLen - bracketSize * 2, barR)
170
- .rotateAround([0, 0, 0], -90, 0, 0)
170
+ .rotateX(-90)
171
171
  .translate(wallT + 50, rackY - rackLen / 2 + bracketSize, wallT + rackZ + bracketSize / 2);
172
172
 
173
173
  const towelRack = union(bracketL, bracketR, towelBar);
@@ -177,7 +177,7 @@ const towelRack = union(bracketL, bracketR, towelBar);
177
177
  const matW = 700;
178
178
  const matD = 450;
179
179
  const matH = 8;
180
- const bathMat = box(matW, matD, matH, true)
180
+ const bathMat = box(matW, matD, matH)
181
181
  .translate(tubX + tubL / 2, tubY - matD / 2 - 30, wallT + matH / 2);
182
182
 
183
183
  // ─── Assemble ───
@@ -1,20 +1,20 @@
1
1
  // Four-Legged Chair — parametric dining chair
2
2
 
3
- const seatW = param("Seat Width", 45, { min: 30, max: 60, unit: "mm" });
4
- const seatD = param("Seat Depth", 42, { min: 30, max: 55, unit: "mm" });
5
- const seatT = param("Seat Thickness", 3, { min: 2, max: 6, unit: "mm" });
6
- const seatH = param("Seat Height", 45, { min: 35, max: 55, unit: "mm" });
3
+ const seatW = Param.number("Seat Width", 45, { min: 30, max: 60, unit: "mm" });
4
+ const seatD = Param.number("Seat Depth", 42, { min: 30, max: 55, unit: "mm" });
5
+ const seatT = Param.number("Seat Thickness", 3, { min: 2, max: 6, unit: "mm" });
6
+ const seatH = Param.number("Seat Height", 45, { min: 35, max: 55, unit: "mm" });
7
7
 
8
- const legW = param("Leg Width", 4, { min: 2, max: 8, unit: "mm" });
9
- const legInset = param("Leg Inset", 3, { min: 0, max: 10, unit: "mm" });
8
+ const legW = Param.number("Leg Width", 4, { min: 2, max: 8, unit: "mm" });
9
+ const legInset = Param.number("Leg Inset", 3, { min: 0, max: 10, unit: "mm" });
10
10
 
11
- const backH = param("Back Height", 40, { min: 25, max: 60, unit: "mm" });
12
- const backT = param("Back Thickness", 3, { min: 2, max: 6, unit: "mm" });
13
- const backTilt = param("Back Tilt", 5, { min: 0, max: 15, unit: "°" });
11
+ const backH = Param.number("Back Height", 40, { min: 25, max: 60, unit: "mm" });
12
+ const backT = Param.number("Back Thickness", 3, { min: 2, max: 6, unit: "mm" });
13
+ const backTilt = Param.number("Back Tilt", 5, { min: 0, max: 15, unit: "°" });
14
14
 
15
- const stretcher = param("Stretchers", 1, { min: 0, max: 1, step: 1 });
16
- const stretcherH = param("Stretcher Height", 12, { min: 5, max: 30, unit: "mm" });
17
- const stretcherW = param("Stretcher Width", 2, { min: 1, max: 4, unit: "mm" });
15
+ const stretcher = Param.number("Stretchers", 1, { min: 0, max: 1, step: 1 });
16
+ const stretcherH = Param.number("Stretcher Height", 12, { min: 5, max: 30, unit: "mm" });
17
+ const stretcherW = Param.number("Stretcher Width", 2, { min: 1, max: 4, unit: "mm" });
18
18
 
19
19
  // --- Seat ---
20
20
  const seat = box(seatW, seatD, seatT).translate(0, 0, seatH);
@@ -37,7 +37,7 @@ const legs = union(
37
37
  // Tilted slightly backward — rotate around X then position at back edge
38
38
  const backPanel = box(seatW, backT, backH)
39
39
  .translate(-seatW / 2, -backT / 2, 0) // center for rotation
40
- .rotateAround([0, 0, 0], -backTilt, 0, 0)
40
+ .rotateX(-backTilt)
41
41
  .translate(seatW / 2, seatD - legInset - legW / 2, seatH + seatT);
42
42
 
43
43
  // --- Stretchers (side rails between legs) ---
@@ -1,11 +1,11 @@
1
1
  // Picture Frame — parametric wall frame with optional mat border
2
2
 
3
- const frameW = param("Frame Width", 120, { min: 60, max: 250, unit: "mm" });
4
- const frameH = param("Frame Height", 160, { min: 80, max: 300, unit: "mm" });
5
- const border = param("Border Width", 12, { min: 5, max: 30, unit: "mm" });
6
- const depth = param("Frame Depth", 8, { min: 3, max: 20, unit: "mm" });
7
- const mat = param("Mat Width", 8, { min: 0, max: 20, unit: "mm" });
8
- const matDepth = param("Mat Depth", 2, { min: 1, max: 5, unit: "mm" });
3
+ const frameW = Param.number("Frame Width", 120, { min: 60, max: 250, unit: "mm" });
4
+ const frameH = Param.number("Frame Height", 160, { min: 80, max: 300, unit: "mm" });
5
+ const border = Param.number("Border Width", 12, { min: 5, max: 30, unit: "mm" });
6
+ const depth = Param.number("Frame Depth", 8, { min: 3, max: 20, unit: "mm" });
7
+ const mat = Param.number("Mat Width", 8, { min: 0, max: 20, unit: "mm" });
8
+ const matDepth = Param.number("Mat Depth", 2, { min: 1, max: 5, unit: "mm" });
9
9
 
10
10
  // Outer frame
11
11
  const outer = box(frameW, frameH, depth);
@@ -3,17 +3,17 @@
3
3
  // 4 doors (2 per shelf level), hinged at the outer edges.
4
4
  // Each pair shares one angle slider for synchronized open/close.
5
5
 
6
- const width = param("Width", 800, { min: 500, max: 1200, unit: "mm" });
7
- const depth = param("Depth", 350, { min: 250, max: 500, unit: "mm" });
8
- const totalH = param("Total Height", 500, { min: 350, max: 650, unit: "mm" });
6
+ const width = Param.number("Width", 800, { min: 500, max: 1200, unit: "mm" });
7
+ const depth = Param.number("Depth", 350, { min: 250, max: 500, unit: "mm" });
8
+ const totalH = Param.number("Total Height", 500, { min: 350, max: 650, unit: "mm" });
9
9
 
10
- const boardT = param("Board Thickness", 18, { min: 12, max: 25, unit: "mm" });
10
+ const boardT = Param.number("Board Thickness", 18, { min: 12, max: 25, unit: "mm" });
11
11
 
12
- const seatPad = param("Seat Padding", 30, { min: 15, max: 60, unit: "mm" });
13
- const seatOverhang = param("Seat Overhang", 10, { min: 0, max: 30, unit: "mm" });
12
+ const seatPad = Param.number("Seat Padding", 30, { min: 15, max: 60, unit: "mm" });
13
+ const seatOverhang = Param.number("Seat Overhang", 10, { min: 0, max: 30, unit: "mm" });
14
14
 
15
- const doorT = param("Door Thickness", 8, { min: 4, max: 15, unit: "mm" });
16
- const doorGap = param("Door Gap", 2, { min: 1, max: 5, unit: "mm" });
15
+ const doorT = Param.number("Door Thickness", 8, { min: 4, max: 15, unit: "mm" });
16
+ const doorGap = Param.number("Door Gap", 2, { min: 1, max: 5, unit: "mm" });
17
17
 
18
18
  // Derived
19
19
  const innerW = width - 2 * boardT;
@@ -3,16 +3,16 @@
3
3
  // Structure: two side panels, bottom board, 2 shelves, top board,
4
4
  // back panel for rigidity, and a cushion on top for sitting.
5
5
 
6
- const width = param("Width", 800, { min: 500, max: 1200, unit: "mm" });
7
- const depth = param("Depth", 350, { min: 250, max: 500, unit: "mm" });
8
- const totalH = param("Total Height", 500, { min: 350, max: 650, unit: "mm" });
6
+ const width = Param.number("Width", 800, { min: 500, max: 1200, unit: "mm" });
7
+ const depth = Param.number("Depth", 350, { min: 250, max: 500, unit: "mm" });
8
+ const totalH = Param.number("Total Height", 500, { min: 350, max: 650, unit: "mm" });
9
9
 
10
- const boardT = param("Board Thickness", 18, { min: 12, max: 25, unit: "mm" });
10
+ const boardT = Param.number("Board Thickness", 18, { min: 12, max: 25, unit: "mm" });
11
11
 
12
- const seatPad = param("Seat Padding", 30, { min: 15, max: 60, unit: "mm" });
13
- const seatOverhang = param("Seat Overhang", 10, { min: 0, max: 30, unit: "mm" });
12
+ const seatPad = Param.number("Seat Padding", 30, { min: 15, max: 60, unit: "mm" });
13
+ const seatOverhang = Param.number("Seat Overhang", 10, { min: 0, max: 30, unit: "mm" });
14
14
 
15
- const divider = param("Center Divider", 1, { min: 0, max: 1, step: 1 });
15
+ const divider = Param.number("Center Divider", 1, { min: 0, max: 1, step: 1 });
16
16
 
17
17
  // Derived
18
18
  const innerW = width - 2 * boardT;
@@ -1,13 +1,13 @@
1
1
  // Table Lamp — base + stem + shade (multi-file: imports shade profile)
2
2
 
3
- const baseR = param("Base Radius", 25, { min: 15, max: 40, unit: "mm" });
4
- const baseH = param("Base Height", 6, { min: 3, max: 12, unit: "mm" });
5
- const stemR = param("Stem Radius", 4, { min: 2, max: 8, unit: "mm" });
6
- const stemH = param("Stem Height", 60, { min: 30, max: 100, unit: "mm" });
7
- const shadeTopR = param("Shade Top Radius", 15, { min: 8, max: 30, unit: "mm" });
8
- const shadeBottomR = param("Shade Bottom Radius", 30, { min: 15, max: 50, unit: "mm" });
9
- const shadeH = param("Shade Height", 35, { min: 20, max: 60, unit: "mm" });
10
- const shadeWall = param("Shade Wall", 1.5, { min: 0.5, max: 4, unit: "mm" });
3
+ const baseR = Param.number("Base Radius", 25, { min: 15, max: 40, unit: "mm" });
4
+ const baseH = Param.number("Base Height", 6, { min: 3, max: 12, unit: "mm" });
5
+ const stemR = Param.number("Stem Radius", 4, { min: 2, max: 8, unit: "mm" });
6
+ const stemH = Param.number("Stem Height", 60, { min: 30, max: 100, unit: "mm" });
7
+ const shadeTopR = Param.number("Shade Top Radius", 15, { min: 8, max: 30, unit: "mm" });
8
+ const shadeBottomR = Param.number("Shade Bottom Radius", 30, { min: 15, max: 50, unit: "mm" });
9
+ const shadeH = Param.number("Shade Height", 35, { min: 20, max: 60, unit: "mm" });
10
+ const shadeWall = Param.number("Shade Wall", 1.5, { min: 0.5, max: 4, unit: "mm" });
11
11
 
12
12
  // --- Base: flat cylinder ---
13
13
  const base = cylinder(baseH, baseR);
@@ -5,10 +5,10 @@
5
5
  * Creates beautiful organic-looking walls with a continuously changing profile.
6
6
  */
7
7
 
8
- const a = param('a', 3, 1, 7); // X frequency
9
- const b = param('b', 2, 1, 7); // Y frequency
10
- const baseRadius = param('radius', 25, 10, 50);
11
- const height = param('height', 100, 30, 200);
8
+ const a = Param.number('a', 3, 1, 7); // X frequency
9
+ const b = Param.number('b', 2, 1, 7); // Y frequency
10
+ const baseRadius = Param.number('radius', 25, 10, 50);
11
+ const height = Param.number('height', 100, 30, 200);
12
12
  const layerHeight = 0.2;
13
13
 
14
14
  const g = gcode({ nozzle: 0.4, layerHeight, printSpeed: 1800 });
@@ -7,9 +7,9 @@
7
7
  * The surface function creates an undulating bowl shape.
8
8
  */
9
9
 
10
- const outerRadius = param('radius', 40, 15, 60);
11
- const amplitude = param('amplitude', 8, 1, 20);
12
- const waves = param('waves', 4, 1, 8);
10
+ const outerRadius = Param.number('radius', 40, 15, 60);
11
+ const amplitude = Param.number('amplitude', 8, 1, 20);
12
+ const waves = Param.number('waves', 4, 1, 8);
13
13
  const layerHeight = 0.3;
14
14
  const lineSpacing = 0.6; // spacing between concentric passes
15
15
 
@@ -7,10 +7,10 @@
7
7
  * Try tweaking: amplitude, frequency, baseRadius, height, layerHeight.
8
8
  */
9
9
 
10
- const amplitude = param('amplitude', 8, 1, 20);
11
- const frequency = param('frequency', 6, 1, 20);
12
- const baseRadius = param('radius', 25, 10, 60);
13
- const height = param('height', 80, 20, 200);
10
+ const amplitude = Param.number('amplitude', 8, 1, 20);
11
+ const frequency = Param.number('frequency', 6, 1, 20);
12
+ const baseRadius = Param.number('radius', 25, 10, 60);
13
+ const height = Param.number('height', 80, 20, 200);
14
14
  const layerHeight = 0.2;
15
15
  const nozzle = 0.4;
16
16
 
@@ -5,10 +5,10 @@
5
5
  * Each layer is a hexagon that twists slightly more than the last.
6
6
  */
7
7
 
8
- const sides = param('sides', 6, 3, 12);
9
- const radius = param('radius', 20, 10, 40);
10
- const height = param('height', 60, 20, 120);
11
- const twistDeg = param('twist', 90, 0, 360);
8
+ const sides = Param.number('sides', 6, 3, 12);
9
+ const radius = Param.number('radius', 20, 10, 40);
10
+ const height = Param.number('height', 60, 20, 120);
11
+ const twistDeg = Param.number('twist', 90, 0, 360);
12
12
  const layerHeight = 0.2;
13
13
 
14
14
  const g = gcode({ nozzle: 0.4, layerHeight, printSpeed: 1800 });
@@ -36,9 +36,9 @@ scene({
36
36
  fog: { color: '#0a0612', near: 350, far: 900 },
37
37
 
38
38
  postProcessing: {
39
- bloom: { intensity: param('bloom', 1.2, 0, 3), threshold: 0.6, radius: 0.5 },
39
+ bloom: { intensity: Param.number('bloom', 1.2, 0, 3), threshold: 0.6, radius: 0.5 },
40
40
  vignette: { darkness: 0.7, offset: 0.3 },
41
- toneMappingExposure: param('exposure', 1.3, 0.5, 3),
41
+ toneMappingExposure: Param.number('exposure', 1.3, 0.5, 3),
42
42
  },
43
43
 
44
44
  capture: {
@@ -50,11 +50,11 @@ scene({
50
50
  // ---------------------------------------------------------------------------
51
51
  // Parameters
52
52
  // ---------------------------------------------------------------------------
53
- const seed = param('seed', 42, 0, 100);
54
- const crystalCount = param('crystals', 12, 3, 24);
55
- const maxHeight = param('maxHeight', 120, 40, 200);
56
- const baseRadius = param('baseRadius', 80, 30, 150);
57
- const taperFactor = param('taper', 0.3, 0.1, 0.8);
53
+ const seed = Param.number('seed', 42, 0, 100);
54
+ const crystalCount = Param.number('crystals', 12, 3, 24);
55
+ const maxHeight = Param.number('maxHeight', 120, 40, 200);
56
+ const baseRadius = Param.number('baseRadius', 80, 30, 150);
57
+ const taperFactor = Param.number('taper', 0.3, 0.1, 0.8);
58
58
 
59
59
  // ---------------------------------------------------------------------------
60
60
  // PRNG
@@ -103,7 +103,7 @@ const mainW = rand(14, 20);
103
103
  crystals.push({
104
104
  name: 'Main Crystal',
105
105
  shape: crystal(mainH, mainW)
106
- .rotate(0, 0, rand(0, 360))
106
+ .rotateZ(rand(0, 360))
107
107
  .translate(rand(-5, 5), rand(-5, 5), 0),
108
108
  color: '#a855f7',
109
109
  });
@@ -118,7 +118,7 @@ for (let i = 0; i < crystalCount - 1; i++) {
118
118
  crystals.push({
119
119
  name: `Crystal ${i + 2}`,
120
120
  shape: crystal(h, w)
121
- .rotate(rand(-8, 8), rand(-12, 12), rand(0, 360))
121
+ .rotateX(rand(-8, 8)).rotateY(rand(-12, 12)).rotateZ(rand(0, 360))
122
122
  .translate(Math.cos(angle) * dist, Math.sin(angle) * dist, 0),
123
123
  color: pickColor(),
124
124
  });
@@ -32,10 +32,10 @@ scene({
32
32
  fog: { color: '#0a1628', near: 200, far: 550 },
33
33
 
34
34
  postProcessing: {
35
- bloom: { intensity: param('bloom', 1.2, 0, 4), threshold: 0.5, radius: 0.6 },
35
+ bloom: { intensity: Param.number('bloom', 1.2, 0, 4), threshold: 0.5, radius: 0.6 },
36
36
  vignette: { darkness: 0.7, offset: 0.3 },
37
37
  grain: { intensity: 0.04 },
38
- toneMappingExposure: param('exposure', 1.4, 0.5, 3),
38
+ toneMappingExposure: Param.number('exposure', 1.4, 0.5, 3),
39
39
  },
40
40
 
41
41
  capture: {
@@ -47,10 +47,10 @@ scene({
47
47
  // ---------------------------------------------------------------------------
48
48
  // Parameters
49
49
  // ---------------------------------------------------------------------------
50
- const seed = param('seed', 23, 0, 100);
51
- const spireCount = param('spires', 14, 4, 30);
52
- const maxHeight = param('maxHeight', 100, 40, 160);
53
- const spread = param('spread', 55, 20, 100);
50
+ const seed = Param.number('seed', 23, 0, 100);
51
+ const spireCount = Param.number('spires', 14, 4, 30);
52
+ const maxHeight = Param.number('maxHeight', 100, 40, 160);
53
+ const spread = Param.number('spread', 55, 20, 100);
54
54
 
55
55
  // ---------------------------------------------------------------------------
56
56
  // PRNG
@@ -127,7 +127,7 @@ for (let i = 0; i < spireCount; i++) {
127
127
  shape: ngon(6, r)
128
128
  .extrude(h)
129
129
  .translate(px, py, 0)
130
- .rotate(0, 0, rand(0, 60))
130
+ .rotateZ(rand(0, 60))
131
131
  .material({
132
132
  opacity: rand(0.4, 0.75),
133
133
  metalness: 0.0,
@@ -145,7 +145,7 @@ for (let i = 0; i < spireCount; i++) {
145
145
  shape: ngon(6, r * 0.4)
146
146
  .extrude(h * 0.7)
147
147
  .translate(px, py, h * 0.1)
148
- .rotate(0, 0, rand(0, 60))
148
+ .rotateZ(rand(0, 60))
149
149
  .material({
150
150
  emissive: pick(glowColors),
151
151
  emissiveIntensity: rand(1, 3),
@@ -183,7 +183,7 @@ for (let i = 0; i < 10; i++) {
183
183
  shape: ngon(6, size)
184
184
  .extrude(size * rand(0.3, 0.8))
185
185
  .translate(Math.cos(angle) * dist, Math.sin(angle) * dist, 0)
186
- .rotate(rand(-15, 15), rand(-15, 15), rand(0, 60))
186
+ .rotateX(rand(-15, 15)).rotateY(rand(-15, 15)).rotateZ(rand(0, 60))
187
187
  .material({
188
188
  opacity: rand(0.4, 0.7),
189
189
  metalness: 0.0,
@@ -4,7 +4,7 @@
4
4
  * A spiraling tower of boxes arranged in a golden-ratio pattern,
5
5
  * like a computational sunflower reaching for the sky.
6
6
  *
7
- * Demonstrates: scene(), param() integration, dramatic lighting,
7
+ * Demonstrates: scene(), Param.number() integration, dramatic lighting,
8
8
  * bloom post-processing, and fog depth.
9
9
  */
10
10
 
@@ -31,9 +31,9 @@ scene({
31
31
  fog: { color: '#050510', near: 300, far: 800 },
32
32
 
33
33
  postProcessing: {
34
- bloom: { intensity: param('bloom', 0.8, 0, 3), threshold: 0.7, radius: 0.6 },
34
+ bloom: { intensity: Param.number('bloom', 0.8, 0, 3), threshold: 0.7, radius: 0.6 },
35
35
  vignette: { darkness: 0.6, offset: 0.4 },
36
- toneMappingExposure: param('exposure', 1.4, 0.5, 3),
36
+ toneMappingExposure: Param.number('exposure', 1.4, 0.5, 3),
37
37
  },
38
38
 
39
39
  capture: {
@@ -45,11 +45,11 @@ scene({
45
45
  // ---------------------------------------------------------------------------
46
46
  // Parameters
47
47
  // ---------------------------------------------------------------------------
48
- const count = param('elements', 120, 20, 300);
49
- const towerHeight = param('height', 200, 50, 400);
50
- const spiralTightness = param('tightness', 2.5, 0.5, 6);
51
- const maxRadius = param('radius', 60, 20, 120);
52
- const elementScale = param('scale', 1.0, 0.3, 2.0);
48
+ const count = Param.number('elements', 120, 20, 300);
49
+ const towerHeight = Param.number('height', 200, 50, 400);
50
+ const spiralTightness = Param.number('tightness', 2.5, 0.5, 6);
51
+ const maxRadius = Param.number('radius', 60, 20, 120);
52
+ const elementScale = Param.number('scale', 1.0, 0.3, 2.0);
53
53
 
54
54
  // ---------------------------------------------------------------------------
55
55
  // Golden Ratio Spiral
@@ -91,15 +91,15 @@ for (let i = 0; i < count; i++) {
91
91
  const lum = 45 + t * 15; // slightly brighter at top
92
92
  const r255 = hslToHex(hue, sat, lum);
93
93
 
94
- const element = box(s, s * 0.6, s * 1.2, true)
95
- .rotate(0, 0, facingDeg)
94
+ const element = box(s, s * 0.6, s * 1.2)
95
+ .rotateZ(facingDeg)
96
96
  .translate(Math.cos(angle) * r, Math.sin(angle) * r, z);
97
97
 
98
98
  shapes.push({ name: `Petal ${i + 1}`, shape: element, color: r255 });
99
99
  }
100
100
 
101
101
  // Central spine
102
- const spine = box(6, 6, towerHeight * 0.9, true)
102
+ const spine = box(6, 6, towerHeight * 0.9)
103
103
  .translate(0, 0, towerHeight * 0.45);
104
104
  shapes.push({ name: 'Spine', shape: spine, color: '#1a1a2e' });
105
105
 
@@ -32,10 +32,10 @@ scene({
32
32
  fog: { color: '#0a0000', near: 200, far: 500 },
33
33
 
34
34
  postProcessing: {
35
- bloom: { intensity: param('bloom', 2.0, 0, 5), threshold: 0.3, radius: 0.8 },
35
+ bloom: { intensity: Param.number('bloom', 2.0, 0, 5), threshold: 0.3, radius: 0.8 },
36
36
  vignette: { darkness: 0.9, offset: 0.2 },
37
37
  grain: { intensity: 0.06 },
38
- toneMappingExposure: param('exposure', 1.8, 0.5, 4),
38
+ toneMappingExposure: Param.number('exposure', 1.8, 0.5, 4),
39
39
  },
40
40
 
41
41
  capture: {
@@ -48,10 +48,10 @@ scene({
48
48
  // ---------------------------------------------------------------------------
49
49
  // Parameters
50
50
  // ---------------------------------------------------------------------------
51
- const seed = param('seed', 42, 0, 100);
52
- const pillarCount = param('pillars', 18, 5, 40);
53
- const maxHeight = param('maxHeight', 90, 30, 150);
54
- const baseRadius = param('baseRadius', 50, 20, 100);
51
+ const seed = Param.number('seed', 42, 0, 100);
52
+ const pillarCount = Param.number('pillars', 18, 5, 40);
53
+ const maxHeight = Param.number('maxHeight', 90, 30, 150);
54
+ const baseRadius = Param.number('baseRadius', 50, 20, 100);
55
55
 
56
56
  // ---------------------------------------------------------------------------
57
57
  // PRNG
@@ -32,10 +32,10 @@ scene({
32
32
  fog: { color: '#000814', near: 250, far: 600 },
33
33
 
34
34
  postProcessing: {
35
- bloom: { intensity: param('bloom', 1.5, 0, 4), threshold: 0.5, radius: 0.7 },
35
+ bloom: { intensity: Param.number('bloom', 1.5, 0, 4), threshold: 0.5, radius: 0.7 },
36
36
  vignette: { darkness: 0.8, offset: 0.25 },
37
37
  grain: { intensity: 0.08 },
38
- toneMappingExposure: param('exposure', 1.5, 0.5, 4),
38
+ toneMappingExposure: Param.number('exposure', 1.5, 0.5, 4),
39
39
  },
40
40
 
41
41
  capture: {
@@ -48,11 +48,11 @@ scene({
48
48
  // ---------------------------------------------------------------------------
49
49
  // Parameters
50
50
  // ---------------------------------------------------------------------------
51
- const seed = param('seed', 7, 0, 100);
52
- const stalkCount = param('stalks', 25, 5, 60);
53
- const maxStalkH = param('maxHeight', 80, 30, 150);
54
- const clusterSpread = param('spread', 60, 20, 120);
55
- const tipScale = param('tipSize', 1.5, 0.5, 3);
51
+ const seed = Param.number('seed', 7, 0, 100);
52
+ const stalkCount = Param.number('stalks', 25, 5, 60);
53
+ const maxStalkH = Param.number('maxHeight', 80, 30, 150);
54
+ const clusterSpread = Param.number('spread', 60, 20, 120);
55
+ const tipScale = Param.number('tipSize', 1.5, 0.5, 3);
56
56
 
57
57
  // ---------------------------------------------------------------------------
58
58
  // PRNG