@pascal-app/viewer 1.0.3 → 1.0.5

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 (276) hide show
  1. package/dist/capture/capture-runtime.js +1 -1
  2. package/dist/components/error-boundary.d.ts.map +1 -1
  3. package/dist/components/renderers/node-renderer.d.ts +1 -1
  4. package/dist/components/renderers/node-renderer.d.ts.map +1 -1
  5. package/dist/components/renderers/node-renderer.js +12 -4
  6. package/dist/components/renderers/parametric-node-renderer.d.ts.map +1 -1
  7. package/dist/components/viewer/bvh-ecctrl.d.ts.map +1 -1
  8. package/dist/components/viewer/frame-limiter.d.ts +1 -0
  9. package/dist/components/viewer/frame-limiter.d.ts.map +1 -1
  10. package/dist/components/viewer/frame-limiter.js +22 -3
  11. package/dist/components/viewer/glb-interactive.d.ts +25 -1
  12. package/dist/components/viewer/glb-interactive.d.ts.map +1 -1
  13. package/dist/components/viewer/glb-interactive.js +253 -86
  14. package/dist/components/viewer/glb-mechanisms.d.ts +10 -0
  15. package/dist/components/viewer/glb-mechanisms.d.ts.map +1 -0
  16. package/dist/components/viewer/glb-mechanisms.js +19 -0
  17. package/dist/components/viewer/glb-reference-nodes.js +1 -1
  18. package/dist/components/viewer/glb-replace-instances.js +1 -1
  19. package/dist/components/viewer/glb-scene.d.ts +45 -27
  20. package/dist/components/viewer/glb-scene.d.ts.map +1 -1
  21. package/dist/components/viewer/glb-scene.js +421 -508
  22. package/dist/components/viewer/glb-walkthrough-controller.d.ts +1 -1
  23. package/dist/components/viewer/glb-walkthrough-controller.d.ts.map +1 -1
  24. package/dist/components/viewer/glb-walkthrough-controller.js +13 -2
  25. package/dist/components/viewer/index.d.ts +24 -1
  26. package/dist/components/viewer/index.d.ts.map +1 -1
  27. package/dist/components/viewer/index.js +111 -37
  28. package/dist/components/viewer/lights.d.ts.map +1 -1
  29. package/dist/components/viewer/lights.js +113 -22
  30. package/dist/components/viewer/perf-monitor.d.ts.map +1 -1
  31. package/dist/components/viewer/perf-monitor.js +6 -0
  32. package/dist/components/viewer/perf-panel.d.ts.map +1 -1
  33. package/dist/components/viewer/perf-panel.js +1 -1
  34. package/dist/components/viewer/post-processing.d.ts.map +1 -1
  35. package/dist/components/viewer/post-processing.js +104 -36
  36. package/dist/components/viewer/registered-systems.d.ts.map +1 -1
  37. package/dist/components/viewer/registered-systems.js +17 -3
  38. package/dist/components/viewer/render-error.d.ts +18 -0
  39. package/dist/components/viewer/render-error.d.ts.map +1 -0
  40. package/dist/components/viewer/render-error.js +29 -0
  41. package/dist/components/viewer/scene-bvh.d.ts.map +1 -1
  42. package/dist/components/viewer/scene-bvh.js +1 -1
  43. package/dist/components/viewer/scene-environment.d.ts.map +1 -1
  44. package/dist/components/viewer/scene-environment.js +31 -11
  45. package/dist/components/viewer/scene-ground-replacement.d.ts +6 -0
  46. package/dist/components/viewer/scene-ground-replacement.d.ts.map +1 -1
  47. package/dist/components/viewer/scene-ground-replacement.js +15 -0
  48. package/dist/components/viewer/selection-manager.d.ts.map +1 -1
  49. package/dist/components/viewer/selection-manager.js +25 -7
  50. package/dist/components/viewer/underground-ambiance.d.ts +9 -0
  51. package/dist/components/viewer/underground-ambiance.d.ts.map +1 -0
  52. package/dist/components/viewer/underground-ambiance.js +105 -0
  53. package/dist/components/viewer/viewer-camera.d.ts +4 -0
  54. package/dist/components/viewer/viewer-camera.d.ts.map +1 -1
  55. package/dist/components/viewer/viewer-camera.js +12 -2
  56. package/dist/components/viewer/viewer-presentations.d.ts.map +1 -1
  57. package/dist/hooks/use-gltf-ktx2.d.ts.map +1 -1
  58. package/dist/hooks/use-gltf-ktx2.js +2 -0
  59. package/dist/hooks/use-node-events.d.ts.map +1 -1
  60. package/dist/index.d.ts +36 -16
  61. package/dist/index.d.ts.map +1 -1
  62. package/dist/index.js +34 -19
  63. package/dist/lib/asset-url.d.ts.map +1 -1
  64. package/dist/lib/asset-url.js +7 -1
  65. package/dist/lib/backdrop.d.ts +17 -0
  66. package/dist/lib/backdrop.d.ts.map +1 -1
  67. package/dist/lib/backdrop.js +18 -1
  68. package/dist/lib/construction-dust.d.ts +57 -0
  69. package/dist/lib/construction-dust.d.ts.map +1 -0
  70. package/dist/lib/construction-dust.js +187 -0
  71. package/dist/lib/csg-utils.js +1 -1
  72. package/dist/lib/display-state.d.ts +25 -0
  73. package/dist/lib/display-state.d.ts.map +1 -0
  74. package/dist/lib/display-state.js +1 -0
  75. package/dist/lib/foundation-materials.d.ts +26 -0
  76. package/dist/lib/foundation-materials.d.ts.map +1 -0
  77. package/dist/lib/foundation-materials.js +65 -0
  78. package/dist/lib/gltf-unlit.d.ts +10 -0
  79. package/dist/lib/gltf-unlit.d.ts.map +1 -0
  80. package/dist/lib/gltf-unlit.js +23 -0
  81. package/dist/lib/ground-window.d.ts +33 -0
  82. package/dist/lib/ground-window.d.ts.map +1 -0
  83. package/dist/lib/ground-window.js +114 -0
  84. package/dist/lib/hero-pose.d.ts +13 -3
  85. package/dist/lib/hero-pose.d.ts.map +1 -1
  86. package/dist/lib/hero-pose.js +72 -5
  87. package/dist/lib/ink-edges.d.ts +6 -3
  88. package/dist/lib/ink-edges.d.ts.map +1 -1
  89. package/dist/lib/ink-edges.js +17 -7
  90. package/dist/lib/key-light-override.d.ts +11 -0
  91. package/dist/lib/key-light-override.d.ts.map +1 -0
  92. package/dist/lib/key-light-override.js +14 -0
  93. package/dist/lib/ktx2-loader.d.ts +7 -0
  94. package/dist/lib/ktx2-loader.d.ts.map +1 -1
  95. package/dist/lib/ktx2-loader.js +35 -0
  96. package/dist/lib/layer-pass.d.ts.map +1 -1
  97. package/dist/lib/layers.d.ts +11 -7
  98. package/dist/lib/layers.d.ts.map +1 -1
  99. package/dist/lib/layers.js +16 -6
  100. package/dist/lib/live-frame-hold.d.ts +14 -0
  101. package/dist/lib/live-frame-hold.d.ts.map +1 -0
  102. package/dist/lib/live-frame-hold.js +28 -0
  103. package/dist/lib/materials.d.ts +19 -7
  104. package/dist/lib/materials.d.ts.map +1 -1
  105. package/dist/lib/materials.js +65 -9
  106. package/dist/lib/merged-outline-node.d.ts +5 -0
  107. package/dist/lib/merged-outline-node.d.ts.map +1 -1
  108. package/dist/lib/merged-outline-node.js +80 -2
  109. package/dist/lib/node-top-surface-height.d.ts +6 -0
  110. package/dist/lib/node-top-surface-height.d.ts.map +1 -0
  111. package/dist/lib/node-top-surface-height.js +74 -0
  112. package/dist/lib/perf-probe-state.d.ts +39 -0
  113. package/dist/lib/perf-probe-state.d.ts.map +1 -0
  114. package/dist/lib/perf-probe-state.js +17 -0
  115. package/dist/lib/pointer-events.d.ts +26 -2
  116. package/dist/lib/pointer-events.d.ts.map +1 -1
  117. package/dist/lib/pointer-events.js +99 -12
  118. package/dist/lib/post-processing-resources.d.ts.map +1 -1
  119. package/dist/lib/procedural-emission.d.ts +7 -0
  120. package/dist/lib/procedural-emission.d.ts.map +1 -0
  121. package/dist/lib/procedural-emission.js +54 -0
  122. package/dist/lib/reveal-candidates.d.ts +80 -0
  123. package/dist/lib/reveal-candidates.d.ts.map +1 -0
  124. package/dist/lib/reveal-candidates.js +524 -0
  125. package/dist/lib/reveal-ghost.d.ts +9 -0
  126. package/dist/lib/reveal-ghost.d.ts.map +1 -0
  127. package/dist/lib/reveal-ghost.js +62 -0
  128. package/dist/lib/reveal-pending.d.ts +12 -0
  129. package/dist/lib/reveal-pending.d.ts.map +1 -0
  130. package/dist/lib/reveal-pending.js +12 -0
  131. package/dist/lib/reveal-pose.d.ts +70 -0
  132. package/dist/lib/reveal-pose.d.ts.map +1 -0
  133. package/dist/lib/reveal-pose.js +248 -0
  134. package/dist/lib/reveal-schedule.d.ts +208 -0
  135. package/dist/lib/reveal-schedule.d.ts.map +1 -0
  136. package/dist/lib/reveal-schedule.js +410 -0
  137. package/dist/lib/reveal-texture-scale.d.ts +5 -0
  138. package/dist/lib/reveal-texture-scale.d.ts.map +1 -0
  139. package/dist/lib/reveal-texture-scale.js +113 -0
  140. package/dist/lib/reveal-windows.d.ts +23 -0
  141. package/dist/lib/reveal-windows.d.ts.map +1 -0
  142. package/dist/lib/reveal-windows.js +31 -0
  143. package/dist/lib/reveal-wipe.d.ts +71 -0
  144. package/dist/lib/reveal-wipe.d.ts.map +1 -0
  145. package/dist/lib/reveal-wipe.js +105 -0
  146. package/dist/lib/scene-pass-mrt.d.ts +12 -0
  147. package/dist/lib/scene-pass-mrt.d.ts.map +1 -0
  148. package/dist/lib/scene-pass-mrt.js +23 -0
  149. package/dist/lib/scene-support-height.d.ts +4 -0
  150. package/dist/lib/scene-support-height.d.ts.map +1 -0
  151. package/dist/lib/scene-support-height.js +34 -0
  152. package/dist/lib/scene-themes.d.ts +30 -8
  153. package/dist/lib/scene-themes.d.ts.map +1 -1
  154. package/dist/lib/scene-themes.js +36 -0
  155. package/dist/lib/scene-visibility.d.ts +17 -1
  156. package/dist/lib/scene-visibility.d.ts.map +1 -1
  157. package/dist/lib/scene-visibility.js +53 -3
  158. package/dist/lib/scripted-opening.d.ts +11 -0
  159. package/dist/lib/scripted-opening.d.ts.map +1 -0
  160. package/dist/lib/scripted-opening.js +20 -0
  161. package/dist/lib/site-surfaces.d.ts +32 -0
  162. package/dist/lib/site-surfaces.d.ts.map +1 -0
  163. package/dist/lib/site-surfaces.js +70 -0
  164. package/dist/lib/snapshot-pipeline.d.ts +34 -3
  165. package/dist/lib/snapshot-pipeline.d.ts.map +1 -1
  166. package/dist/lib/snapshot-pipeline.js +247 -117
  167. package/dist/lib/terrain-perimeter-fill.d.ts.map +1 -1
  168. package/dist/lib/terrain-perimeter-fill.js +22 -14
  169. package/dist/lib/tsl-compat.d.ts +2 -2
  170. package/dist/lib/tsl-compat.d.ts.map +1 -1
  171. package/dist/lib/underground-ambiance.d.ts +168 -0
  172. package/dist/lib/underground-ambiance.d.ts.map +1 -0
  173. package/dist/lib/underground-ambiance.js +334 -0
  174. package/dist/lib/zone-geometry.d.ts +11 -0
  175. package/dist/lib/zone-geometry.d.ts.map +1 -0
  176. package/dist/lib/zone-geometry.js +46 -0
  177. package/dist/store/use-item-light-pool.d.ts +14 -10
  178. package/dist/store/use-item-light-pool.d.ts.map +1 -1
  179. package/dist/store/use-item-light-pool.js +52 -26
  180. package/dist/store/use-viewer.d.ts +194 -26
  181. package/dist/store/use-viewer.d.ts.map +1 -1
  182. package/dist/store/use-viewer.js +164 -21
  183. package/dist/systems/ceiling/ceiling-system.d.ts +15 -1
  184. package/dist/systems/ceiling/ceiling-system.d.ts.map +1 -1
  185. package/dist/systems/ceiling/ceiling-system.js +88 -6
  186. package/dist/systems/construction-reveal/construction-dust.d.ts +16 -0
  187. package/dist/systems/construction-reveal/construction-dust.d.ts.map +1 -0
  188. package/dist/systems/construction-reveal/construction-dust.js +92 -0
  189. package/dist/systems/construction-reveal/construction-reveal.d.ts +276 -0
  190. package/dist/systems/construction-reveal/construction-reveal.d.ts.map +1 -0
  191. package/dist/systems/construction-reveal/construction-reveal.js +2383 -0
  192. package/dist/systems/construction-reveal/dust-material.d.ts +10 -0
  193. package/dist/systems/construction-reveal/dust-material.d.ts.map +1 -0
  194. package/dist/systems/construction-reveal/dust-material.js +17 -0
  195. package/dist/systems/construction-reveal/ghost-dress.d.ts +10 -0
  196. package/dist/systems/construction-reveal/ghost-dress.d.ts.map +1 -0
  197. package/dist/systems/construction-reveal/ghost-dress.js +24 -0
  198. package/dist/systems/door/door-system.d.ts.map +1 -1
  199. package/dist/systems/door/door-system.js +55 -17
  200. package/dist/systems/elevator/elevator-interaction-system.d.ts +7 -0
  201. package/dist/systems/elevator/elevator-interaction-system.d.ts.map +1 -1
  202. package/dist/systems/elevator/elevator-interaction-system.js +18 -1
  203. package/dist/systems/floor-elevation/floor-elevation-system.d.ts +3 -1
  204. package/dist/systems/floor-elevation/floor-elevation-system.d.ts.map +1 -1
  205. package/dist/systems/floor-elevation/floor-elevation-system.js +33 -5
  206. package/dist/systems/geometry/geometry-system.d.ts.map +1 -1
  207. package/dist/systems/geometry/geometry-system.js +71 -11
  208. package/dist/systems/interactive/control-widget.d.ts.map +1 -1
  209. package/dist/systems/interactive/interactive-system.d.ts.map +1 -1
  210. package/dist/systems/interactive/interactive-system.js +52 -17
  211. package/dist/systems/interactive/procedural-controls.d.ts +13 -0
  212. package/dist/systems/interactive/procedural-controls.d.ts.map +1 -0
  213. package/dist/systems/interactive/procedural-controls.js +17 -0
  214. package/dist/systems/interactive/scripted-clips.d.ts +19 -0
  215. package/dist/systems/interactive/scripted-clips.d.ts.map +1 -0
  216. package/dist/systems/interactive/scripted-clips.js +134 -0
  217. package/dist/systems/item/item-system.d.ts.map +1 -1
  218. package/dist/systems/item/item-system.js +9 -3
  219. package/dist/systems/item/object-cut-invalidation.d.ts +3 -0
  220. package/dist/systems/item/object-cut-invalidation.d.ts.map +1 -0
  221. package/dist/systems/item/object-cut-invalidation.js +68 -0
  222. package/dist/systems/item-light/item-light-system.d.ts +1 -1
  223. package/dist/systems/item-light/item-light-system.d.ts.map +1 -1
  224. package/dist/systems/item-light/item-light-system.js +48 -53
  225. package/dist/systems/level/level-hold.d.ts +4 -0
  226. package/dist/systems/level/level-hold.d.ts.map +1 -0
  227. package/dist/systems/level/level-hold.js +14 -0
  228. package/dist/systems/level/level-system.d.ts.map +1 -1
  229. package/dist/systems/level/level-system.js +19 -6
  230. package/dist/systems/level/level-utils.d.ts +19 -6
  231. package/dist/systems/level/level-utils.d.ts.map +1 -1
  232. package/dist/systems/level/level-utils.js +68 -9
  233. package/dist/systems/level/shadow-only-levels.d.ts +9 -0
  234. package/dist/systems/level/shadow-only-levels.d.ts.map +1 -0
  235. package/dist/systems/level/shadow-only-levels.js +7 -0
  236. package/dist/systems/roof/__fixtures__/roof-plane-cases.d.ts +103 -0
  237. package/dist/systems/roof/__fixtures__/roof-plane-cases.d.ts.map +1 -0
  238. package/dist/systems/roof/__fixtures__/roof-plane-cases.js +317 -0
  239. package/dist/systems/roof/roof-materials.d.ts +16 -2
  240. package/dist/systems/roof/roof-materials.d.ts.map +1 -1
  241. package/dist/systems/roof/roof-materials.js +64 -31
  242. package/dist/systems/roof/roof-system.d.ts +21 -4
  243. package/dist/systems/roof/roof-system.d.ts.map +1 -1
  244. package/dist/systems/roof/roof-system.js +374 -49
  245. package/dist/systems/slab/slab-system.d.ts +1 -1
  246. package/dist/systems/slab/slab-system.d.ts.map +1 -1
  247. package/dist/systems/slab/slab-system.js +49 -19
  248. package/dist/systems/stair/stair-system.d.ts.map +1 -1
  249. package/dist/systems/stair/stair-system.js +133 -354
  250. package/dist/systems/wall/wall-cutout-cache.d.ts +39 -3
  251. package/dist/systems/wall/wall-cutout-cache.d.ts.map +1 -1
  252. package/dist/systems/wall/wall-cutout-cache.js +141 -19
  253. package/dist/systems/wall/wall-cutout.d.ts +6 -0
  254. package/dist/systems/wall/wall-cutout.d.ts.map +1 -1
  255. package/dist/systems/wall/wall-cutout.js +42 -28
  256. package/dist/systems/wall/wall-finish-data.d.ts +22 -0
  257. package/dist/systems/wall/wall-finish-data.d.ts.map +1 -0
  258. package/dist/systems/wall/wall-finish-data.js +17 -0
  259. package/dist/systems/wall/wall-material-variant.d.ts.map +1 -1
  260. package/dist/systems/wall/wall-materials.d.ts +9 -4
  261. package/dist/systems/wall/wall-materials.d.ts.map +1 -1
  262. package/dist/systems/wall/wall-materials.js +135 -153
  263. package/dist/systems/wall/wall-placeholder-sweep.d.ts.map +1 -1
  264. package/dist/systems/wall/wall-system.d.ts +33 -2
  265. package/dist/systems/wall/wall-system.d.ts.map +1 -1
  266. package/dist/systems/wall/wall-system.js +621 -159
  267. package/dist/systems/window/corner-frame.d.ts +10 -0
  268. package/dist/systems/window/corner-frame.d.ts.map +1 -0
  269. package/dist/systems/window/corner-frame.js +17 -0
  270. package/dist/systems/window/window-system.d.ts +1 -1
  271. package/dist/systems/window/window-system.d.ts.map +1 -1
  272. package/dist/systems/window/window-system.js +71 -27
  273. package/package.json +10 -10
  274. package/dist/systems/fence/fence-system.d.ts +0 -22
  275. package/dist/systems/fence/fence-system.d.ts.map +0 -1
  276. package/dist/systems/fence/fence-system.js +0 -357
@@ -1,8 +1,9 @@
1
- import { getEffectiveWallSurfaceMaterial, getMaterialPresetByRef, getWallSurfaceMaterialSignature, getWallSurfaceSideFromBandSlot, parseMaterialRef, resolveMaterial, WALL_SLOT_DEFAULT, WALL_SURFACE_SLOT_DEFAULTS, } from '@pascal-app/core';
1
+ import { getEffectiveWallFaceMaterial, getMaterialPresetByRef, getWallSurfaceMaterialSignature, parseMaterialColor, parseMaterialRef, resolveMaterial, resolveWallExteriorSide, resolveWallFaceChain, WALL_SLOT_DEFAULT, wallAssemblyExposedStructure, wallAssemblyFinishRef, } from '@pascal-app/core';
2
2
  import { Color } from 'three';
3
- import { Fn, float, fract, length, mix, positionLocal, smoothstep, step, vec2 } from 'three/tsl';
3
+ import { Fn, float, fract, length, mix, positionLocal, smoothstep, step, uv, vec2 } from 'three/tsl';
4
4
  import { MeshLambertNodeMaterial, MeshStandardNodeMaterial } from 'three/webgpu';
5
- import { baseMaterial, createDefaultMaterial, createMaterial, createMaterialFromPresetRef, createSurfaceRoleMaterial, materialPresetRefSignature, resolveMaterialRef, resolveSurfaceColor, } from '../../lib/materials';
5
+ import { BLOCK_MASONRY, concreteMaterial, masonryMaterial, STRUCTURE_COLORS, } from '../../lib/foundation-materials';
6
+ import { baseMaterial, createDefaultMaterial, createMaterial, createMaterialFromPresetRef, createSurfaceRoleMaterial, materialPresetRefSignature, resolveMaterialRef, resolveSlotDefaultRef, resolveSurfaceColor, } from '../../lib/materials';
6
7
  const DEFAULT_WALL_COLOR = '#e9e7e3';
7
8
  const WALL_HIGHLIGHT_PROFILES = {
8
9
  delete: {
@@ -33,112 +34,129 @@ function getSurfaceVisibleMaterial(spec, shading) {
33
34
  }
34
35
  return baseMaterial(shading);
35
36
  }
36
- function hasExplicitMaterial(spec) {
37
- return Boolean(spec.materialPreset || spec.material);
38
- }
39
37
  // Resolve a wall face's declared default — a catalog `library:` finish or a
40
38
  // flat colour — to a renderable material.
41
- function resolveWallSlotDefault(slotDefault, shading) {
39
+ function resolveWallSlotDefault(declaredDefault, shading) {
40
+ const slotDefault = resolveSlotDefaultRef(declaredDefault);
42
41
  if (parseMaterialRef(slotDefault)?.kind === 'library') {
43
42
  return createMaterialFromPresetRef(slotDefault, shading) ?? baseMaterial(shading);
44
43
  }
45
44
  return createDefaultMaterial(slotDefault, 0.9, shading);
46
45
  }
46
+ // The assembly cladding's ref when `face` is the wall's exterior face (a is the
47
+ // +normal face; an unresolved side keeps the cladding on b, as legacy did).
48
+ function wallAssemblyFaceFinishRef(wallNode, face) {
49
+ const exteriorFace = resolveWallExteriorSide(wallNode) === 1 ? 'a' : 'b';
50
+ return face === exteriorFace ? wallAssemblyFinishRef(wallNode) : null;
51
+ }
52
+ // What `face` shows when it is the exterior face of a wall with no cladding over a bare masonry or
53
+ // concrete core: the structure itself (null otherwise, and for any face with a cladding).
54
+ function wallFaceExposedStructure(wallNode, face) {
55
+ if (wallAssemblyFaceFinishRef(wallNode, face))
56
+ return null;
57
+ const exteriorFace = resolveWallExteriorSide(wallNode) === 1 ? 'a' : 'b';
58
+ return face === exteriorFace ? wallAssemblyExposedStructure(wallNode) : null;
59
+ }
60
+ // The structure as the generic foundation draws it (same courses, joints and colours), made once:
61
+ // the block's bond runs along the face's world-planar U, the wall's own metres. Solid shading
62
+ // keeps to a flat colour, like every other wall finish.
63
+ const structureMaterials = new Map();
64
+ function exposedStructureMaterial(structure, shading) {
65
+ if (shading !== 'rendered')
66
+ return createDefaultMaterial(STRUCTURE_COLORS[structure], 0.9, shading);
67
+ let material = structureMaterials.get(structure);
68
+ if (!material) {
69
+ material = structure === 'cmu' ? masonryMaterial(BLOCK_MASONRY, uv().x) : concreteMaterial();
70
+ material.userData.__pascalCachedMaterial = true;
71
+ structureMaterials.set(structure, material);
72
+ }
73
+ return material;
74
+ }
47
75
  // Slot-first resolution for one wall face, matching every other paintable kind:
48
- // node.slots[side] ref → legacy inline fields → declared slot default.
76
+ // node.slots[face] ref → legacy inline finish → declared slot default.
49
77
  // A dangling `scene:` ref (material deleted / copied across scenes) falls back
50
78
  // to the declared default — it never blocks rendering (the dangling-ref rule).
51
- function resolveWallFaceMaterial(wallNode, side, shading, sceneMaterials) {
52
- const ref = wallNode.slots?.[side];
53
- if (ref) {
54
- return (resolveMaterialRef(ref, sceneMaterials, shading) ??
55
- resolveWallSlotDefault(WALL_SLOT_DEFAULT[side], shading));
56
- }
57
- const spec = getEffectiveWallSurfaceMaterial(wallNode, side);
58
- if (hasExplicitMaterial(spec)) {
59
- return getSurfaceVisibleMaterial(spec, shading);
79
+ function resolveWallFaceMaterial(wallNode, face, shading, sceneMaterials) {
80
+ const finish = resolveWallFaceChain(wallNode, face);
81
+ if (finish.kind === 'ref') {
82
+ return (resolveMaterialRef(finish.ref, sceneMaterials, shading) ??
83
+ resolveWallSlotDefault(WALL_SLOT_DEFAULT[face], shading));
60
84
  }
61
- return resolveWallSlotDefault(WALL_SLOT_DEFAULT[side], shading);
85
+ if (finish.kind === 'legacy')
86
+ return getSurfaceVisibleMaterial(finish.spec, shading);
87
+ // No paint on this face: the wall ASSEMBLY's cladding (WS5) skins the
88
+ // exterior — a "2x6 lap siding" wall reads as lap siding without the user
89
+ // painting it. Painting the face still wins.
90
+ const assemblyRef = wallAssemblyFaceFinishRef(wallNode, face);
91
+ const exposed = assemblyRef ? null : wallFaceExposedStructure(wallNode, face);
92
+ if (exposed)
93
+ return exposedStructureMaterial(exposed, shading);
94
+ return resolveWallSlotDefault(assemblyRef ?? finish.ref, shading);
62
95
  }
63
- function resolveWallSlotMaterial(wallNode, slotId, shading, sceneMaterials) {
64
- const ref = wallNode.slots?.[slotId];
65
- if (ref) {
66
- return (resolveMaterialRef(ref, sceneMaterials, shading) ??
67
- resolveWallSlotDefault(WALL_SURFACE_SLOT_DEFAULTS[slotId], shading));
68
- }
69
- const side = getWallSurfaceSideFromBandSlot(slotId);
70
- if (side) {
71
- return resolveWallFaceMaterial(wallNode, side, shading, sceneMaterials);
72
- }
73
- return resolveWallSlotDefault(WALL_SURFACE_SLOT_DEFAULTS[slotId], shading);
96
+ // A region or room finish: its ref, else the face default (same dangling rule).
97
+ function resolveWallFinishMaterial(ref, shading, sceneMaterials) {
98
+ return (resolveMaterialRef(ref, sceneMaterials, shading) ??
99
+ resolveWallSlotDefault(WALL_SLOT_DEFAULT.a, shading));
74
100
  }
75
- // Cache-key fragment for one face: the slot ref plus, for a `scene:` ref, the
76
- // referenced material's *content* — so editing a scene material assigned to a
77
- // wall invalidates the cache. A `library:` ref carries its resolution state
78
- // instead: AI-generated materials register asynchronously, and a dangling ref
79
- // resolved to the slot default must not stay cached once the library lands.
80
- // Falls back to the legacy signature when unmigrated.
81
- function wallFaceMaterialSignature(wallNode, side, sceneMaterials) {
82
- const ref = wallNode.slots?.[side];
83
- if (ref) {
84
- const parsed = parseMaterialRef(ref);
85
- if (parsed?.kind === 'scene') {
86
- return JSON.stringify({
87
- ref,
88
- material: sceneMaterials?.[parsed.id]?.material ?? null,
89
- });
90
- }
91
- return JSON.stringify({ ref: materialPresetRefSignature(ref) });
101
+ // Cache-key fragment for a ref: for a `scene:` ref, the referenced material's
102
+ // *content* — so editing a scene material assigned to a wall invalidates the
103
+ // cache. A `library:` ref carries its resolution state instead: AI-generated
104
+ // materials register asynchronously, and a dangling ref resolved to the slot
105
+ // default must not stay cached once the library lands.
106
+ function refMaterialSignature(ref, sceneMaterials) {
107
+ const parsed = parseMaterialRef(ref);
108
+ if (parsed?.kind === 'scene') {
109
+ return JSON.stringify({
110
+ ref,
111
+ material: sceneMaterials?.[parsed.id]?.material ?? null,
112
+ });
92
113
  }
93
- return getWallSurfaceMaterialSignature(getEffectiveWallSurfaceMaterial(wallNode, side));
114
+ return JSON.stringify({ ref: materialPresetRefSignature(ref) });
94
115
  }
95
- function wallSlotMaterialSignature(wallNode, slotId, sceneMaterials) {
96
- const ref = wallNode.slots?.[slotId];
97
- if (ref) {
98
- const parsed = parseMaterialRef(ref);
99
- if (parsed?.kind === 'scene') {
100
- return JSON.stringify({
101
- ref,
102
- material: sceneMaterials?.[parsed.id]?.material ?? null,
103
- });
104
- }
105
- return JSON.stringify({ ref: materialPresetRefSignature(ref) });
106
- }
107
- const side = getWallSurfaceSideFromBandSlot(slotId);
108
- if (side)
109
- return wallFaceMaterialSignature(wallNode, side, sceneMaterials);
110
- return JSON.stringify({ default: WALL_SURFACE_SLOT_DEFAULTS[slotId] });
116
+ // Falls back to the legacy signature when the face has no slot ref.
117
+ function wallFaceMaterialSignature(wallNode, face, sceneMaterials) {
118
+ const ref = wallNode.slots?.[face];
119
+ if (ref)
120
+ return refMaterialSignature(ref, sceneMaterials);
121
+ const spec = getEffectiveWallFaceMaterial(wallNode, face);
122
+ const assemblyRef = wallAssemblyFaceFinishRef(wallNode, face);
123
+ return JSON.stringify({
124
+ legacy: getWallSurfaceMaterialSignature(spec),
125
+ preset: spec.materialPreset ? materialPresetRefSignature(spec.materialPreset) : null,
126
+ // Changing the assembly's cladding must re-skin the face.
127
+ assemblyFinish: assemblyRef ? materialPresetRefSignature(assemblyRef) : null,
128
+ // So must baring or covering its structure.
129
+ structure: assemblyRef ? null : wallFaceExposedStructure(wallNode, face),
130
+ });
111
131
  }
112
- // Slot-first tint for the cutaway/invisible wall variant.
113
- function resolveWallFaceColor(wallNode, side, sceneMaterials, fallback) {
114
- const ref = wallNode.slots?.[side];
115
- if (ref) {
116
- const parsed = parseMaterialRef(ref);
117
- if (parsed?.kind === 'library') {
118
- return getMaterialPresetByRef(ref)?.mapProperties?.color ?? fallback;
119
- }
120
- if (parsed?.kind === 'scene') {
121
- const sceneMaterial = sceneMaterials?.[parsed.id];
122
- return sceneMaterial ? resolveMaterial(sceneMaterial.material).color : fallback;
123
- }
124
- return fallback;
132
+ function resolveRefColor(ref, sceneMaterials, fallback) {
133
+ const color = parseMaterialColor(ref);
134
+ if (color)
135
+ return color;
136
+ const parsed = parseMaterialRef(ref);
137
+ if (parsed?.kind === 'library') {
138
+ return getMaterialPresetByRef(ref)?.mapProperties?.color ?? fallback;
139
+ }
140
+ if (parsed?.kind === 'scene') {
141
+ const sceneMaterial = sceneMaterials?.[parsed.id];
142
+ return sceneMaterial ? resolveMaterial(sceneMaterial.material).color : fallback;
125
143
  }
126
- return getSurfaceColor(getEffectiveWallSurfaceMaterial(wallNode, side), fallback);
144
+ return fallback;
127
145
  }
128
- function resolveWallSlotColor(wallNode, slotId, sceneMaterials, fallback) {
129
- const ref = wallNode.slots?.[slotId];
130
- if (ref) {
131
- const parsed = parseMaterialRef(ref);
132
- if (parsed?.kind === 'library') {
133
- return getMaterialPresetByRef(ref)?.mapProperties?.color ?? fallback;
134
- }
135
- if (parsed?.kind === 'scene') {
136
- const sceneMaterial = sceneMaterials?.[parsed.id];
137
- return sceneMaterial ? resolveMaterial(sceneMaterial.material).color : fallback;
138
- }
146
+ // Slot-first tint for the cutaway/invisible wall variant.
147
+ function resolveWallFaceColor(wallNode, face, sceneMaterials, fallback) {
148
+ const ref = wallNode.slots?.[face];
149
+ if (ref)
150
+ return resolveRefColor(ref, sceneMaterials, fallback);
151
+ const spec = getEffectiveWallFaceMaterial(wallNode, face);
152
+ const assemblyRef = wallAssemblyFaceFinishRef(wallNode, face);
153
+ if (assemblyRef && !(spec.materialPreset || spec.material)) {
154
+ return getMaterialPresetByRef(assemblyRef)?.mapProperties?.color ?? fallback;
139
155
  }
140
- const side = getWallSurfaceSideFromBandSlot(slotId);
141
- return side ? resolveWallFaceColor(wallNode, side, sceneMaterials, fallback) : fallback;
156
+ const exposed = assemblyRef ? null : wallFaceExposedStructure(wallNode, face);
157
+ if (exposed && !(spec.materialPreset || spec.material))
158
+ return STRUCTURE_COLORS[exposed];
159
+ return getSurfaceColor(spec, fallback);
142
160
  }
143
161
  function getSurfaceColor(spec, fallback = DEFAULT_WALL_COLOR) {
144
162
  const preset = getMaterialPresetByRef(spec.materialPreset);
@@ -286,27 +304,25 @@ function disposeOwnedMaterials(materials) {
286
304
  material.dispose();
287
305
  });
288
306
  }
289
- export function getWallMaterialHash(wallNode, shading, sceneMaterials, overrideHash) {
307
+ export function getWallMaterialHash(wallNode, shading, sceneMaterials, finishRefs = [], overrideHash) {
290
308
  return JSON.stringify({
291
309
  shading,
292
310
  overrideHash,
293
- interior: wallFaceMaterialSignature(wallNode, 'interior', sceneMaterials),
294
- exterior: wallFaceMaterialSignature(wallNode, 'exterior', sceneMaterials),
295
- lowerInterior: wallSlotMaterialSignature(wallNode, 'lowerInterior', sceneMaterials),
296
- middleInterior: wallSlotMaterialSignature(wallNode, 'middleInterior', sceneMaterials),
297
- upperInterior: wallSlotMaterialSignature(wallNode, 'upperInterior', sceneMaterials),
298
- topInterior: wallSlotMaterialSignature(wallNode, 'topInterior', sceneMaterials),
299
- lowerExterior: wallSlotMaterialSignature(wallNode, 'lowerExterior', sceneMaterials),
300
- middleExterior: wallSlotMaterialSignature(wallNode, 'middleExterior', sceneMaterials),
301
- upperExterior: wallSlotMaterialSignature(wallNode, 'upperExterior', sceneMaterials),
302
- topExterior: wallSlotMaterialSignature(wallNode, 'topExterior', sceneMaterials),
311
+ a: wallFaceMaterialSignature(wallNode, 'a', sceneMaterials),
312
+ b: wallFaceMaterialSignature(wallNode, 'b', sceneMaterials),
313
+ finishes: finishRefs.map((ref) => refMaterialSignature(ref, sceneMaterials)),
303
314
  });
304
315
  }
305
- export function getMaterialsForWall(wallNode, shading = 'rendered', textures = true, colorPreset = 'clay', sceneTheme, sceneMaterials, override) {
316
+ /**
317
+ * A wall's material palette: 0 caps/edges (themed role), 1 face a, 2 face b,
318
+ * then one entry per `finishRefs` — the region and room finishes the built
319
+ * geometry's groups point at (`getWallFinishRefs(mesh.geometry)`).
320
+ */
321
+ export function getMaterialsForWall(wallNode, shading = 'rendered', textures = true, colorPreset = 'clay', sceneTheme, sceneMaterials, finishRefs = [], override) {
306
322
  const cacheKey = `${wallNode.id}-${shading}-${textures}-${colorPreset}-${sceneTheme ?? 'base'}`;
307
323
  const materialHash = textures
308
- ? getWallMaterialHash(wallNode, shading, sceneMaterials, override?.hash)
309
- : JSON.stringify({ textures, colorPreset, sceneTheme });
324
+ ? getWallMaterialHash(wallNode, shading, sceneMaterials, finishRefs, override?.hash)
325
+ : JSON.stringify({ textures, colorPreset, sceneTheme, finishes: finishRefs.length });
310
326
  const existing = wallMaterialCache.get(cacheKey);
311
327
  if (existing && existing.materialHash === materialHash) {
312
328
  return existing;
@@ -332,55 +348,22 @@ export function getMaterialsForWall(wallNode, shading = 'rendered', textures = t
332
348
  : textures
333
349
  ? [
334
350
  wallRoleMaterial,
335
- resolveWallFaceMaterial(wallNode, 'interior', shading, sceneMaterials),
336
- resolveWallFaceMaterial(wallNode, 'exterior', shading, sceneMaterials),
337
- resolveWallSlotMaterial(wallNode, 'lowerInterior', shading, sceneMaterials),
338
- resolveWallSlotMaterial(wallNode, 'middleInterior', shading, sceneMaterials),
339
- resolveWallSlotMaterial(wallNode, 'upperInterior', shading, sceneMaterials),
340
- resolveWallSlotMaterial(wallNode, 'topInterior', shading, sceneMaterials),
341
- resolveWallSlotMaterial(wallNode, 'lowerExterior', shading, sceneMaterials),
342
- resolveWallSlotMaterial(wallNode, 'middleExterior', shading, sceneMaterials),
343
- resolveWallSlotMaterial(wallNode, 'upperExterior', shading, sceneMaterials),
344
- resolveWallSlotMaterial(wallNode, 'topExterior', shading, sceneMaterials),
351
+ resolveWallFaceMaterial(wallNode, 'a', shading, sceneMaterials),
352
+ resolveWallFaceMaterial(wallNode, 'b', shading, sceneMaterials),
353
+ ...finishRefs.map((ref) => resolveWallFinishMaterial(ref, shading, sceneMaterials)),
345
354
  ]
346
- : Array.from({ length: 11 }, () => wallRoleMaterial);
355
+ : Array.from({ length: 3 + finishRefs.length }, () => wallRoleMaterial);
347
356
  const wallRoleColor = resolveSurfaceColor('wall', colorPreset, sceneTheme);
348
- const invisible = [
349
- createInvisibleWallMaterial(wallRoleColor, textures ? shading : 'solid'),
350
- ...['interior', 'exterior'].map((side) => createInvisibleWallMaterial(textures
351
- ? resolveWallFaceColor(wallNode, side, sceneMaterials, wallRoleColor)
352
- : wallRoleColor, textures ? shading : 'solid')),
353
- ...[
354
- 'lowerInterior',
355
- 'middleInterior',
356
- 'upperInterior',
357
- 'topInterior',
358
- 'lowerExterior',
359
- 'middleExterior',
360
- 'upperExterior',
361
- 'topExterior',
362
- ].map((slotId) => createInvisibleWallMaterial(textures
363
- ? resolveWallSlotColor(wallNode, slotId, sceneMaterials, wallRoleColor)
364
- : wallRoleColor, textures ? shading : 'solid')),
365
- ];
366
- const translucent = [
367
- createTranslucentWallMaterial(wallRoleColor, textures ? shading : 'solid'),
368
- ...['interior', 'exterior'].map((side) => createTranslucentWallMaterial(textures
369
- ? resolveWallFaceColor(wallNode, side, sceneMaterials, wallRoleColor)
370
- : wallRoleColor, textures ? shading : 'solid')),
371
- ...[
372
- 'lowerInterior',
373
- 'middleInterior',
374
- 'upperInterior',
375
- 'topInterior',
376
- 'lowerExterior',
377
- 'middleExterior',
378
- 'upperExterior',
379
- 'topExterior',
380
- ].map((slotId) => createTranslucentWallMaterial(textures
381
- ? resolveWallSlotColor(wallNode, slotId, sceneMaterials, wallRoleColor)
382
- : wallRoleColor, textures ? shading : 'solid')),
357
+ const variantShading = textures ? shading : 'solid';
358
+ const paletteColors = [
359
+ wallRoleColor,
360
+ ...['a', 'b'].map((face) => textures
361
+ ? resolveWallFaceColor(wallNode, face, sceneMaterials, wallRoleColor)
362
+ : wallRoleColor),
363
+ ...finishRefs.map((ref) => textures ? resolveRefColor(ref, sceneMaterials, wallRoleColor) : wallRoleColor),
383
364
  ];
365
+ const invisible = paletteColors.map((color) => createInvisibleWallMaterial(color, variantShading));
366
+ const translucent = paletteColors.map((color) => createTranslucentWallMaterial(color, variantShading));
384
367
  const deleteVisible = mapWallMaterialArray(visible, (material) => createHighlightedWallMaterial(material, 'delete'));
385
368
  const deleteInvisible = mapWallMaterialArray(invisible, (material) => createHighlightedWallMaterial(material, 'delete'));
386
369
  const deleteTranslucent = mapWallMaterialArray(translucent, (material) => createHighlightedWallMaterial(material, 'delete'));
@@ -397,7 +380,6 @@ export function getMaterialsForWall(wallNode, shading = 'rendered', textures = t
397
380
  wallMaterialCache.set(cacheKey, result);
398
381
  return result;
399
382
  }
400
- export function getVisibleWallMaterials(wallNode, shading = 'rendered', textures = true, colorPreset = 'clay', sceneTheme, sceneMaterials) {
401
- return getMaterialsForWall(wallNode, shading, textures, colorPreset, sceneTheme, sceneMaterials)
402
- .visible;
383
+ export function getVisibleWallMaterials(wallNode, shading = 'rendered', textures = true, colorPreset = 'clay', sceneTheme, sceneMaterials, finishRefs = []) {
384
+ return getMaterialsForWall(wallNode, shading, textures, colorPreset, sceneTheme, sceneMaterials, finishRefs).visible;
403
385
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wall-placeholder-sweep.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-placeholder-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,+BAA+B,KAAK,CAAA;AAEjD,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACrD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAC/D,GAAG,IAAI,CAAA;AAER,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,GAAI,UAAU,YAAY,KAAG,OAMlE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAI,8CAK/B;IACD,4DAA4D;IAC5D,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACzB,qEAAqE;IACrE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,CAAA;IAC5C,iEAAiE;IACjE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IACpC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,KAAG,MAAM,EAST,CAAA"}
1
+ {"version":3,"file":"wall-placeholder-sweep.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-placeholder-sweep.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,+BAA+B,KAAK,CAAA;AAEjD,KAAK,YAAY,GAAG;IAClB,QAAQ,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,CAAA;IACrD,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAA;CAC/D,GAAG,IAAI,CAAA;AAER,4EAA4E;AAC5E,eAAO,MAAM,yBAAyB,aAAc,YAAY,KAAG,OAMlE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,iDAK3B;IACD,4DAA4D;IAC5D,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IACzB,qEAAqE;IACrE,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,YAAY,CAAA;IAC5C,iEAAiE;IACjE,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAA;IACpC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,KAAG,MAAM,EAST,CAAA"}
@@ -1,6 +1,7 @@
1
- import { type AnyNode, type AnyNodeId, type WallMiterData, type WallNode, type WallSlabSupportSegment } from '@pascal-app/core';
1
+ import { type AnyNode, type AnyNodeId, type WallFinishLayout, type WallMiterData, type WallNode, type WallSlabSupportSegment } from '@pascal-app/core';
2
2
  import * as THREE from 'three';
3
3
  import { Brush } from 'three-bvh-csg';
4
+ import { type WallFaceBaseRun } from './wall-finish-data';
4
5
  export { isWallInitialBuildActive } from './wall-build-lifecycle';
5
6
  export { drainRebuiltWalls } from './wall-rebuild-notifications';
6
7
  export declare function mergeWallCutoutBrushes(brushes: readonly Brush[]): {
@@ -8,6 +9,22 @@ export declare function mergeWallCutoutBrushes(brushes: readonly Brush[]): {
8
9
  fallbackBrushes: Brush[];
9
10
  droppedCount: number;
10
11
  };
12
+ /**
13
+ * What decides a face triangle's material: the wall's finish layout (regions and
14
+ * room spans) and, where the faces stand on different floors, each face's base —
15
+ * region heights are measured from the face's own base.
16
+ */
17
+ export type WallFinishContext = {
18
+ layout: WallFinishLayout;
19
+ faceBase: Record<'a' | 'b', WallFaceBaseRun[]> | null;
20
+ /** The palette's finish refs (material indices 3..): the layout's, then the foundation's. */
21
+ refs: readonly string[];
22
+ /** The underpinning's stemwall: triangles below local y `top` take material `index`. */
23
+ foundation: {
24
+ index: number;
25
+ top: number;
26
+ } | null;
27
+ };
11
28
  export declare function shouldDeferWallRebuild(wallId: string, nodes: Record<AnyNodeId, AnyNode>, rebuiltThisFrame: number, elapsedMs: number): boolean;
12
29
  /** Rebuilds this system still owes — neighbours deferred during a drag. */
13
30
  export declare function getPendingWallRebuildCount(): number;
@@ -26,6 +43,20 @@ export declare const WallSystem: ({ geometryAdapter }?: {
26
43
  geometryAdapter?: WallGeometryAdapter;
27
44
  }) => null;
28
45
  export declare function runWallBuildFrame(geometryAdapter?: WallGeometryAdapter): void;
46
+ /**
47
+ * A room's wall finish lives on its zone, so a zone edit must rebuild the walls
48
+ * bounding it — the old boundary and the new one. Zones without a wall finish
49
+ * never touch their walls, so ordinary room edits cost nothing here.
50
+ */
51
+ export declare function markWallsForZoneFinishChanges(): void;
52
+ /**
53
+ * The children a wall builds around, as they stand live: an opening still waiting for its
54
+ * construction reveal is left out, so the wall rises whole and is cut at the opening's turn.
55
+ */
56
+ export declare function wallGeometryChildren(node: WallNode, nodes: Readonly<Record<string, AnyNode>>): AnyNode[];
29
57
  type WallTerrainBottomSampler = (x: number, z: number) => number | null;
30
- export declare function generateExtrudedWall(wallNode: WallNode, childrenNodes: AnyNode[], miterData: WallMiterData, slabElevation?: number, baseElevation?: number, baseSegments?: readonly WallSlabSupportSegment[], storeyHeight?: number, terrainBottomAt?: WallTerrainBottomSampler): THREE.BufferGeometry;
58
+ export declare function generateExtrudedWall(wallNode: WallNode, childrenNodes: AnyNode[], miterData: WallMiterData, slabElevation?: number, baseElevation?: number, baseSegments?: readonly WallSlabSupportSegment[], storeyHeight?: number, terrainBottomAt?: WallTerrainBottomSampler, faceBase?: {
59
+ a: readonly WallSlabSupportSegment[];
60
+ b: readonly WallSlabSupportSegment[];
61
+ }, finishLayout?: WallFinishLayout, sceneNodes?: Readonly<Record<string, AnyNode>>): THREE.BufferGeometry;
31
62
  //# sourceMappingURL=wall-system.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wall-system.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-system.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EACZ,KAAK,SAAS,EAyBd,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,sBAAsB,EAI5B,MAAM,kBAAkB,CAAA;AAGzB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAY,KAAK,EAA0B,MAAM,eAAe,CAAA;AAsBvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AA2DhE,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,SAAS,KAAK,EAAE,GAAG;IACjE,MAAM,EAAE,KAAK,GAAG,IAAI,CAAA;IACpB,eAAe,EAAE,KAAK,EAAE,CAAA;IACxB,YAAY,EAAE,MAAM,CAAA;CACrB,CA4FA;AAmbD,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,EACjC,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,GAChB,OAAO,CAET;AAED,2EAA2E;AAC3E,wBAAgB,0BAA0B,IAAI,MAAM,CAEnD;AAID,MAAM,MAAM,0BAA0B,GAAG;IACvC,MAAM,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,OAAO,CAAA;CACnC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,eAAe,CAAC,EAAE,CAChB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,SAAS,OAAO,EAAE,EAC5B,OAAO,EAAE,0BAA0B,KAChC;QAAE,gBAAgB,EAAE,OAAO,EAAE,CAAC;QAAC,cAAc,EAAE,OAAO,EAAE,CAAA;KAAE,CAAA;IAC/D,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,KAAK,CAAC,cAAc,EAC9B,QAAQ,EAAE,SAAS,OAAO,EAAE,KACzB,KAAK,CAAC,cAAc,CAAA;IACzB,qBAAqB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,cAAc,KAAK,IAAI,CAAA;CACnG,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,sBAAqB;IAAE,eAAe,CAAC,EAAE,mBAAmB,CAAA;CAAO,SAM7F,CAAA;AAED,wBAAgB,iBAAiB,CAAC,eAAe,CAAC,EAAE,mBAAmB,QAatE;AAmcD,KAAK,wBAAwB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;AAgEvE,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,OAAO,EAAE,EACxB,SAAS,EAAE,aAAa,EACxB,aAAa,SAAI,EACjB,aAAa,SAAgB,EAC7B,YAAY,GAAE,SAAS,sBAAsB,EAE5C,EACD,YAAY,SAAuB,EACnC,eAAe,CAAC,EAAE,wBAAwB,GACzC,KAAK,CAAC,cAAc,CAwPtB"}
1
+ {"version":3,"file":"wall-system.d.ts","sourceRoot":"","sources":["../../../src/systems/wall/wall-system.tsx"],"names":[],"mappings":"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"}