@ifc-lite/renderer 2.0.1 → 3.0.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 (180) hide show
  1. package/README.md +11 -1
  2. package/dist/appearance-batch-cohorts.d.ts +33 -0
  3. package/dist/appearance-batch-cohorts.d.ts.map +1 -0
  4. package/dist/appearance-batch-cohorts.js +126 -0
  5. package/dist/appearance-batch-cohorts.js.map +1 -0
  6. package/dist/appearance-companions.d.ts +30 -0
  7. package/dist/appearance-companions.d.ts.map +1 -0
  8. package/dist/appearance-companions.js +138 -0
  9. package/dist/appearance-companions.js.map +1 -0
  10. package/dist/appearance-partition.d.ts +32 -0
  11. package/dist/appearance-partition.d.ts.map +1 -0
  12. package/dist/appearance-partition.js +122 -0
  13. package/dist/appearance-partition.js.map +1 -0
  14. package/dist/appearance-preview.d.ts +97 -0
  15. package/dist/appearance-preview.d.ts.map +1 -0
  16. package/dist/appearance-preview.js +276 -0
  17. package/dist/appearance-preview.js.map +1 -0
  18. package/dist/appearance-uvs.d.ts +13 -0
  19. package/dist/appearance-uvs.d.ts.map +1 -0
  20. package/dist/appearance-uvs.js +136 -0
  21. package/dist/appearance-uvs.js.map +1 -0
  22. package/dist/bvh.d.ts.map +1 -1
  23. package/dist/bvh.js +3 -0
  24. package/dist/bvh.js.map +1 -1
  25. package/dist/deviation/deviation-computer.js +1 -1
  26. package/dist/deviation/deviation-computer.js.map +1 -1
  27. package/dist/index.d.ts +60 -18
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +186 -233
  30. package/dist/index.js.map +1 -1
  31. package/dist/merged-mesh-extract.d.ts +18 -0
  32. package/dist/merged-mesh-extract.d.ts.map +1 -0
  33. package/dist/merged-mesh-extract.js +73 -0
  34. package/dist/merged-mesh-extract.js.map +1 -0
  35. package/dist/model-bounds-tracker.d.ts +1 -1
  36. package/dist/model-bounds-tracker.d.ts.map +1 -1
  37. package/dist/model-bounds-tracker.js +3 -2
  38. package/dist/model-bounds-tracker.js.map +1 -1
  39. package/dist/model-placement-bounds.d.ts +29 -0
  40. package/dist/model-placement-bounds.d.ts.map +1 -0
  41. package/dist/model-placement-bounds.js +55 -0
  42. package/dist/model-placement-bounds.js.map +1 -0
  43. package/dist/model-translation.d.ts +57 -0
  44. package/dist/model-translation.d.ts.map +1 -0
  45. package/dist/model-translation.js +223 -0
  46. package/dist/model-translation.js.map +1 -0
  47. package/dist/partial-batch-cache.d.ts +65 -0
  48. package/dist/partial-batch-cache.d.ts.map +1 -0
  49. package/dist/partial-batch-cache.js +88 -0
  50. package/dist/partial-batch-cache.js.map +1 -0
  51. package/dist/partial-batch-requests.d.ts +77 -0
  52. package/dist/partial-batch-requests.d.ts.map +1 -0
  53. package/dist/partial-batch-requests.js +97 -0
  54. package/dist/partial-batch-requests.js.map +1 -0
  55. package/dist/picking-manager.js +2 -2
  56. package/dist/picking-manager.js.map +1 -1
  57. package/dist/point-picker.d.ts +2 -2
  58. package/dist/point-picker.d.ts.map +1 -1
  59. package/dist/point-picker.js +27 -21
  60. package/dist/point-picker.js.map +1 -1
  61. package/dist/pointcloud/point-cloud-node.d.ts +2 -0
  62. package/dist/pointcloud/point-cloud-node.d.ts.map +1 -1
  63. package/dist/pointcloud/point-cloud-node.js +12 -0
  64. package/dist/pointcloud/point-cloud-node.js.map +1 -1
  65. package/dist/pointcloud/point-cloud-placement.d.ts +20 -0
  66. package/dist/pointcloud/point-cloud-placement.d.ts.map +1 -0
  67. package/dist/pointcloud/point-cloud-placement.js +69 -0
  68. package/dist/pointcloud/point-cloud-placement.js.map +1 -0
  69. package/dist/pointcloud/point-cloud-renderer.d.ts +14 -14
  70. package/dist/pointcloud/point-cloud-renderer.d.ts.map +1 -1
  71. package/dist/pointcloud/point-cloud-renderer.js +47 -63
  72. package/dist/pointcloud/point-cloud-renderer.js.map +1 -1
  73. package/dist/raycast-engine.d.ts +11 -13
  74. package/dist/raycast-engine.d.ts.map +1 -1
  75. package/dist/raycast-engine.js +28 -56
  76. package/dist/raycast-engine.js.map +1 -1
  77. package/dist/raycaster.d.ts +7 -1
  78. package/dist/raycaster.d.ts.map +1 -1
  79. package/dist/raycaster.js +20 -5
  80. package/dist/raycaster.js.map +1 -1
  81. package/dist/reference-image-hit.d.ts +5 -0
  82. package/dist/reference-image-hit.d.ts.map +1 -0
  83. package/dist/reference-image-hit.js +28 -0
  84. package/dist/reference-image-hit.js.map +1 -0
  85. package/dist/reference-image-host.d.ts +5 -0
  86. package/dist/reference-image-host.d.ts.map +1 -0
  87. package/dist/reference-image-host.js +26 -0
  88. package/dist/reference-image-host.js.map +1 -0
  89. package/dist/reference-image-pipeline.d.ts +15 -0
  90. package/dist/reference-image-pipeline.d.ts.map +1 -0
  91. package/dist/reference-image-pipeline.js +104 -0
  92. package/dist/reference-image-pipeline.js.map +1 -0
  93. package/dist/reference-image-types.d.ts +27 -0
  94. package/dist/reference-image-types.d.ts.map +1 -0
  95. package/dist/reference-image-types.js +5 -0
  96. package/dist/reference-image-types.js.map +1 -0
  97. package/dist/reference-images.d.ts +27 -0
  98. package/dist/reference-images.d.ts.map +1 -0
  99. package/dist/reference-images.js +134 -0
  100. package/dist/reference-images.js.map +1 -0
  101. package/dist/renderer-viewport.d.ts +3 -0
  102. package/dist/renderer-viewport.d.ts.map +1 -0
  103. package/dist/renderer-viewport.js +20 -0
  104. package/dist/renderer-viewport.js.map +1 -0
  105. package/dist/rgba-texture-pool.d.ts +12 -0
  106. package/dist/rgba-texture-pool.d.ts.map +1 -0
  107. package/dist/rgba-texture-pool.js +51 -0
  108. package/dist/rgba-texture-pool.js.map +1 -0
  109. package/dist/scene-appearance-buckets.d.ts +41 -0
  110. package/dist/scene-appearance-buckets.d.ts.map +1 -0
  111. package/dist/scene-appearance-buckets.js +164 -0
  112. package/dist/scene-appearance-buckets.js.map +1 -0
  113. package/dist/scene-appearance-instances.d.ts +42 -0
  114. package/dist/scene-appearance-instances.d.ts.map +1 -0
  115. package/dist/scene-appearance-instances.js +143 -0
  116. package/dist/scene-appearance-instances.js.map +1 -0
  117. package/dist/scene-appearance-preview.d.ts +30 -0
  118. package/dist/scene-appearance-preview.d.ts.map +1 -0
  119. package/dist/scene-appearance-preview.js +149 -0
  120. package/dist/scene-appearance-preview.js.map +1 -0
  121. package/dist/scene-appearance-resources.d.ts +16 -0
  122. package/dist/scene-appearance-resources.d.ts.map +1 -0
  123. package/dist/scene-appearance-resources.js +41 -0
  124. package/dist/scene-appearance-resources.js.map +1 -0
  125. package/dist/scene-authored-owner.d.ts +9 -0
  126. package/dist/scene-authored-owner.d.ts.map +1 -0
  127. package/dist/scene-authored-owner.js +73 -0
  128. package/dist/scene-authored-owner.js.map +1 -0
  129. package/dist/scene-batch-upload.d.ts +12 -0
  130. package/dist/scene-batch-upload.d.ts.map +1 -0
  131. package/dist/scene-batch-upload.js +147 -0
  132. package/dist/scene-batch-upload.js.map +1 -0
  133. package/dist/scene-contents.d.ts +41 -0
  134. package/dist/scene-contents.d.ts.map +1 -1
  135. package/dist/scene-geometry.d.ts +16 -0
  136. package/dist/scene-geometry.d.ts.map +1 -1
  137. package/dist/scene-geometry.js +26 -0
  138. package/dist/scene-geometry.js.map +1 -1
  139. package/dist/scene-instance-materialization.d.ts +18 -0
  140. package/dist/scene-instance-materialization.d.ts.map +1 -0
  141. package/dist/scene-instance-materialization.js +57 -0
  142. package/dist/scene-instance-materialization.js.map +1 -0
  143. package/dist/scene-instance-suppression.d.ts +22 -0
  144. package/dist/scene-instance-suppression.d.ts.map +1 -0
  145. package/dist/scene-instance-suppression.js +100 -0
  146. package/dist/scene-instance-suppression.js.map +1 -0
  147. package/dist/scene-instance-types.d.ts +57 -0
  148. package/dist/scene-instance-types.d.ts.map +1 -0
  149. package/dist/scene-instance-types.js +2 -0
  150. package/dist/scene-instance-types.js.map +1 -0
  151. package/dist/scene-model-translation.d.ts +49 -0
  152. package/dist/scene-model-translation.d.ts.map +1 -0
  153. package/dist/scene-model-translation.js +100 -0
  154. package/dist/scene-model-translation.js.map +1 -0
  155. package/dist/scene-stream-split.d.ts +4 -0
  156. package/dist/scene-stream-split.d.ts.map +1 -0
  157. package/dist/scene-stream-split.js +54 -0
  158. package/dist/scene-stream-split.js.map +1 -0
  159. package/dist/scene.d.ts +105 -85
  160. package/dist/scene.d.ts.map +1 -1
  161. package/dist/scene.js +447 -583
  162. package/dist/scene.js.map +1 -1
  163. package/dist/shadow-occluders.d.ts.map +1 -1
  164. package/dist/shadow-occluders.js +13 -9
  165. package/dist/shadow-occluders.js.map +1 -1
  166. package/dist/snap-detector.d.ts +1 -1
  167. package/dist/snap-detector.d.ts.map +1 -1
  168. package/dist/snap-detector.js +5 -2
  169. package/dist/snap-detector.js.map +1 -1
  170. package/dist/textured-vertices.d.ts +9 -0
  171. package/dist/textured-vertices.d.ts.map +1 -0
  172. package/dist/textured-vertices.js +40 -0
  173. package/dist/textured-vertices.js.map +1 -0
  174. package/dist/types.d.ts +11 -9
  175. package/dist/types.d.ts.map +1 -1
  176. package/dist/xray-alpha.d.ts +131 -0
  177. package/dist/xray-alpha.d.ts.map +1 -0
  178. package/dist/xray-alpha.js +266 -0
  179. package/dist/xray-alpha.js.map +1 -0
  180. package/package.json +3 -3
package/dist/raycaster.js CHANGED
@@ -1,14 +1,19 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { appearanceSourceTriangle } from './appearance-uvs.js';
5
+ import { reportableItemId } from './pick-resolve.js';
1
6
  export class Raycaster {
2
7
  epsilon = 0.0000001;
3
8
  /**
4
9
  * Cast a ray through all meshes and return the closest intersection
5
10
  */
6
- raycast(ray, meshes) {
11
+ raycast(ray, meshes, accept) {
7
12
  let closestIntersection = null;
8
13
  let closestDistance = Infinity;
9
14
  for (let meshIndex = 0; meshIndex < meshes.length; meshIndex++) {
10
15
  const mesh = meshes[meshIndex];
11
- const intersection = this.raycastMesh(ray, mesh, meshIndex);
16
+ const intersection = this.raycastMesh(ray, mesh, meshIndex, accept);
12
17
  if (intersection && intersection.distance < closestDistance) {
13
18
  closestDistance = intersection.distance;
14
19
  closestIntersection = intersection;
@@ -19,7 +24,7 @@ export class Raycaster {
19
24
  /**
20
25
  * Cast ray through a single mesh
21
26
  */
22
- raycastMesh(ray, mesh, meshIndex) {
27
+ raycastMesh(ray, mesh, meshIndex, accept) {
23
28
  const positions = mesh.positions;
24
29
  const indices = mesh.indices;
25
30
  // Validate input
@@ -81,7 +86,6 @@ export class Raycaster {
81
86
  }
82
87
  const intersection = this.intersectTriangle(localRay, v0, v1, v2);
83
88
  if (intersection && intersection.distance < closestDistance) {
84
- closestDistance = intersection.distance;
85
89
  // Calculate normal from triangle
86
90
  const normal = this.calculateTriangleNormal(v0, v1, v2);
87
91
  // intersection.point is in the local frame (computed from localRay);
@@ -89,15 +93,26 @@ export class Raycaster {
89
93
  const worldPoint = o
90
94
  ? { x: intersection.point.x + o[0], y: intersection.point.y + o[1], z: intersection.point.z + o[2] }
91
95
  : intersection.point;
92
- closestIntersection = {
96
+ const geometryItemId = reportableItemId(mesh, mesh.expressId);
97
+ // A canonical ordinal is only actionable together with the exact IFC
98
+ // representation item whose evaluated surface owns it.
99
+ const sourceTriangleIndex = geometryItemId === undefined ? undefined : appearanceSourceTriangle(mesh, i / 3);
100
+ const exact = {
93
101
  point: worldPoint,
94
102
  normal,
95
103
  distance: intersection.distance,
96
104
  meshIndex,
97
105
  triangleIndex: i / 3,
98
106
  expressId: mesh.expressId,
107
+ modelIndex: mesh.modelIndex ?? 0,
108
+ ...(geometryItemId === undefined ? {} : { geometryItemId }),
109
+ ...(sourceTriangleIndex === undefined ? {} : { sourceTriangleIndex }),
99
110
  barycentricCoord: intersection.barycentricCoord,
100
111
  };
112
+ if (!accept || accept(exact, mesh)) {
113
+ closestDistance = intersection.distance;
114
+ closestIntersection = exact;
115
+ }
101
116
  }
102
117
  }
103
118
  return closestIntersection;
@@ -1 +1 @@
1
- {"version":3,"file":"raycaster.js","sourceRoot":"","sources":["../src/raycaster.ts"],"names":[],"mappings":"AAuBA,MAAM,OAAO,SAAS;IACZ,OAAO,GAAG,SAAS,CAAC;IAE5B;;OAEG;IACH,OAAO,CAAC,GAAQ,EAAE,MAAkB;QAClC,IAAI,mBAAmB,GAAwB,IAAI,CAAC;QACpD,IAAI,eAAe,GAAG,QAAQ,CAAC;QAE/B,KAAK,IAAI,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC;YAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;YAE5D,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,GAAG,eAAe,EAAE,CAAC;gBAC5D,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC;gBACxC,mBAAmB,GAAG,YAAY,CAAC;YACrC,CAAC;QACH,CAAC;QAED,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,WAAW,CAAC,GAAQ,EAAE,IAAc,EAAE,SAAiB;QAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAE7B,iBAAiB;QACjB,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7E,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0EAA0E;QAC1E,uEAAuE;QACvE,6EAA6E;QAC7E,6EAA6E;QAC7E,qEAAqE;QACrE,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;QACtB,MAAM,QAAQ,GAAQ,CAAC;YACrB,CAAC,CAAC;gBACE,MAAM,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gBAClF,SAAS,EAAE,GAAG,CAAC,SAAS;aACzB;YACH,CAAC,CAAC,GAAG,CAAC;QAER,iCAAiC;QACjC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAClF,OAAO,IAAI,CAAC;QACd,CAAC;QAED,IAAI,mBAAmB,GAAwB,IAAI,CAAC;QACpD,IAAI,eAAe,GAAG,QAAQ,CAAC;QAE/B,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACxB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5B,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAE5B,qCAAqC;YACrC,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC;YAC1C,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAG,QAAQ,IAAI,IAAI,GAAG,QAAQ,EAAE,CAAC;gBAC1D,SAAS,CAAC,yBAAyB;YACrC,CAAC;YAED,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;YACpB,MAAM,EAAE,GAAG,IAAI,GAAG,CAAC,CAAC;YAEpB,MAAM,EAAE,GAAS;gBACf,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;gBAChB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;gBACpB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;aACrB,CAAC;YACF,MAAM,EAAE,GAAS;gBACf,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;gBAChB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;gBACpB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;aACrB,CAAC;YACF,MAAM,EAAE,GAAS;gBACf,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC;gBAChB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;gBACpB,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;aACrB,CAAC;YAEF,wDAAwD;YACxD,IACE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;gBACrD,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EACrD,CAAC;gBACD,SAAS;YACX,CAAC;YAED,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAElE,IAAI,YAAY,IAAI,YAAY,CAAC,QAAQ,GAAG,eAAe,EAAE,CAAC;gBAC5D,eAAe,GAAG,YAAY,CAAC,QAAQ,CAAC;gBAExC,iCAAiC;gBACjC,MAAM,MAAM,GAAG,IAAI,CAAC,uBAAuB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBAExD,qEAAqE;gBACrE,8CAA8C;gBAC9C,MAAM,UAAU,GAAS,CAAC;oBACxB,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;oBACpG,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC;gBAEvB,mBAAmB,GAAG;oBACpB,KAAK,EAAE,UAAU;oBACjB,MAAM;oBACN,QAAQ,EAAE,YAAY,CAAC,QAAQ;oBAC/B,SAAS;oBACT,aAAa,EAAE,CAAC,GAAG,CAAC;oBACpB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,gBAAgB,EAAE,YAAY,CAAC,gBAAgB;iBAChD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,mBAAmB,CAAC;IAC7B,CAAC;IAED;;OAEG;IACK,iBAAiB,CACvB,GAAQ,EACR,EAAQ,EACR,EAAQ,EACR,EAAQ;QAER,eAAe;QACf,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAEpC,wBAAwB;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAE/B,2BAA2B;QAC3B,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC;QAEzB,wBAAwB;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAElC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,wBAAwB;QACxB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,mCAAmC;QACnC,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAEtC,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACrB,OAAO,IAAI,CAAC,CAAC,iCAAiC;QAChD,CAAC;QAED,+BAA+B;QAC/B,MAAM,KAAK,GAAS;YAClB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;YACrC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;YACrC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;SACtC,CAAC;QAEF,0BAA0B;QAC1B,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QAEtB,OAAO;YACL,KAAK;YACL,QAAQ,EAAE,CAAC;YACX,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;SAC9B,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,uBAAuB,CAAC,EAAQ,EAAE,EAAQ,EAAE,EAAQ;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,QAAQ,CAAC,CAAO,EAAE,CAAO;QAC/B,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACtD,CAAC;IAEO,KAAK,CAAC,CAAO,EAAE,CAAO;QAC5B,OAAO;YACL,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACxB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;SACzB,CAAC;IACJ,CAAC;IAEO,GAAG,CAAC,CAAO,EAAE,CAAO;QAC1B,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAEO,SAAS,CAAC,CAAO;QACvB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,IAAI,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QAC9C,OAAO;YACL,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM;YACf,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM;YACf,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM;SAChB,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,CAAO;QACpB,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,qBAAqB,CAAC,CAAO,EAAE,CAAO,EAAE,CAAO;QAC7C,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAExE,OAAO;YACL,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;YACjB,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC;SAClB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,CAAO,EAAE,CAAO;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC;CACF"}
1
+ {"version":3,"file":"raycaster.js","sourceRoot":"","sources":["../src/raycaster.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Ray } from './raycaster.js';
2
+ import type { ReferenceCorners, ReferenceImageHit } from './reference-image-types.js';
3
+ /** Quad interaction only; does not generate, transform or classify IFC geometry. */
4
+ export declare function referenceImageHit(id: string, corners: ReferenceCorners, ray: Ray, maxDistance: number): ReferenceImageHit | null;
5
+ //# sourceMappingURL=reference-image-hit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-hit.d.ts","sourceRoot":"","sources":["../src/reference-image-hit.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAkB,MAAM,4BAA4B,CAAC;AAMtG,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,EAAE,GAAG,EAAE,WAAW,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI,CAkBhI"}
@@ -0,0 +1,28 @@
1
+ const subtract = (a, b) => [a[0] - b[0], a[1] - b[1], a[2] - b[2]];
2
+ const cross = (a, b) => [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
3
+ const dot = (a, b) => a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
4
+ /** Quad interaction only; does not generate, transform or classify IFC geometry. */
5
+ export function referenceImageHit(id, corners, ray, maxDistance) {
6
+ const origin = [ray.origin.x, ray.origin.y, ray.origin.z];
7
+ const direction = [ray.direction.x, ray.direction.y, ray.direction.z];
8
+ let closest = null;
9
+ for (const indices of [[0, 1, 2], [0, 2, 3]]) {
10
+ const a = corners[indices[0]], edge1 = subtract(corners[indices[1]], a), edge2 = subtract(corners[indices[2]], a);
11
+ const p = cross(direction, edge2), determinant = dot(edge1, p);
12
+ if (!Number.isFinite(determinant) || Math.abs(determinant) <= Number.EPSILON * Math.hypot(...edge1) * Math.hypot(...edge2))
13
+ continue;
14
+ const t = subtract(origin, a), u = dot(t, p) / determinant;
15
+ if (u < 0 || u > 1)
16
+ continue;
17
+ const q = cross(t, edge1), v = dot(direction, q) / determinant;
18
+ if (v < 0 || u + v > 1)
19
+ continue;
20
+ const distance = dot(edge2, q) / determinant;
21
+ if (!Number.isFinite(distance) || distance < 0 || distance >= maxDistance)
22
+ continue;
23
+ maxDistance = distance;
24
+ closest = { referenceId: id, distance, point: [origin[0] + direction[0] * distance, origin[1] + direction[1] * distance, origin[2] + direction[2] * distance] };
25
+ }
26
+ return closest;
27
+ }
28
+ //# sourceMappingURL=reference-image-hit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-hit.js","sourceRoot":"","sources":["../src/reference-image-hit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { Renderer } from './index.js';
2
+ import { ReferenceImageManager } from './reference-images.js';
3
+ /** Reuse the renderer camera and scene raycast, including occurrence placement. */
4
+ export declare function createReferenceImageManager(renderer: Renderer): ReferenceImageManager;
5
+ //# sourceMappingURL=reference-image-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-host.d.ts","sourceRoot":"","sources":["../src/reference-image-host.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,QAAQ,GAAG,qBAAqB,CAkBrF"}
@@ -0,0 +1,26 @@
1
+ import { ReferenceImageManager } from './reference-images.js';
2
+ /** Reuse the renderer camera and scene raycast, including occurrence placement. */
3
+ export function createReferenceImageManager(renderer) {
4
+ return new ReferenceImageManager({
5
+ requestRender: () => renderer.requestRender(),
6
+ ray: (x, y) => {
7
+ if (renderer.isDeviceLost())
8
+ return null;
9
+ const canvas = renderer.getCanvas(), rect = canvas.getBoundingClientRect();
10
+ if (rect.width <= 0 || rect.height <= 0 || x < 0 || y < 0 || x > rect.width || y > rect.height)
11
+ return null;
12
+ return renderer.getCamera().unprojectToRay(x * canvas.width / rect.width, y * canvas.height / rect.height, canvas.width, canvas.height);
13
+ },
14
+ sceneDistance: async (x, y, ray, options) => {
15
+ const picked = await renderer.pick(x, y, options);
16
+ if (!picked)
17
+ return Infinity;
18
+ if (picked.worldXYZ)
19
+ return Math.hypot(picked.worldXYZ.x - ray.origin.x, picked.worldXYZ.y - ray.origin.y, picked.worldXYZ.z - ray.origin.z);
20
+ // Existing large-model CPU fallback can omit depth. Restrict its precise
21
+ // raycast to the canonical selected owner, never hidden unrelated geometry.
22
+ return renderer.raycastScene(x, y, { ...options, isolatedIds: new Set([picked.expressId]) })?.intersection.distance ?? 0;
23
+ },
24
+ });
25
+ }
26
+ //# sourceMappingURL=reference-image-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-host.js","sourceRoot":"","sources":["../src/reference-image-host.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,mFAAmF;AACnF,MAAM,UAAU,2BAA2B,CAAC,QAAkB;IAC5D,OAAO,IAAI,qBAAqB,CAAC;QAC/B,aAAa,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE;QAC7C,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACZ,IAAI,QAAQ,CAAC,YAAY,EAAE;gBAAE,OAAO,IAAI,CAAC;YACzC,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,EAAE,IAAI,GAAG,MAAM,CAAC,qBAAqB,EAAE,CAAC;YAC3E,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM;gBAAE,OAAO,IAAI,CAAC;YAC5G,OAAO,QAAQ,CAAC,SAAS,EAAE,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1I,CAAC;QACD,aAAa,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;YAC1C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM;gBAAE,OAAO,QAAQ,CAAC;YAC7B,IAAI,MAAM,CAAC,QAAQ;gBAAE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAC,GAAG,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACvI,yEAAyE;YACzE,4EAA4E;YAC5E,OAAO,QAAQ,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,OAAO,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,YAAY,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC3H,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ReferenceImageInput } from './reference-image-types.js';
2
+ export interface ReferenceGpuImage {
3
+ input: ReferenceImageInput;
4
+ draw(pass: GPURenderPassEncoder, viewProj: Float32Array): void;
5
+ destroy(): void;
6
+ }
7
+ /** Owns only uploaded pixels and quad buffers; source bitmaps belong to the inventory. */
8
+ export declare class ReferenceImagePipeline {
9
+ private device;
10
+ private pipeline;
11
+ private sampler;
12
+ constructor(device: GPUDevice, format: GPUTextureFormat, sampleCount: number);
13
+ upload(input: ReferenceImageInput): ReferenceGpuImage;
14
+ }
15
+ //# sourceMappingURL=reference-image-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-pipeline.d.ts","sourceRoot":"","sources":["../src/reference-image-pipeline.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAoBtE,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,mBAAmB,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAC;IAC/D,OAAO,IAAI,IAAI,CAAC;CACjB;AAED,0FAA0F;AAC1F,qBAAa,sBAAsB;IAGrB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,OAAO,CAAa;gBACR,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM;IAiBpF,MAAM,CAAC,KAAK,EAAE,mBAAmB,GAAG,iBAAiB;CA+CtD"}
@@ -0,0 +1,104 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { PIPELINE_CONSTANTS } from './constants.js';
5
+ const SHADER = `
6
+ struct Uniforms { viewProj: mat4x4<f32>, clipOrigin: vec4<f32>, settings: vec4<f32> }
7
+ @group(0) @binding(0) var<uniform> u: Uniforms;
8
+ @group(0) @binding(1) var raster: texture_2d<f32>;
9
+ @group(0) @binding(2) var rasterSampler: sampler;
10
+ struct Vertex { @builtin(position) position: vec4<f32>, @location(0) uv: vec2<f32> }
11
+ @vertex fn vs(@location(0) position: vec3<f32>, @location(1) uv: vec2<f32>) -> Vertex {
12
+ var out: Vertex;
13
+ out.position = u.viewProj * vec4<f32>(position, 0.0) + u.clipOrigin;
14
+ out.uv = uv; return out;
15
+ }
16
+ @fragment fn fs(v: Vertex) -> @location(0) vec4<f32> {
17
+ let pixel = textureSample(raster, rasterSampler, v.uv);
18
+ let alpha = pixel.a * u.settings.x;
19
+ if (alpha < 0.001) { discard; }
20
+ return vec4<f32>(pixel.rgb * alpha, alpha);
21
+ }`;
22
+ /** Owns only uploaded pixels and quad buffers; source bitmaps belong to the inventory. */
23
+ export class ReferenceImagePipeline {
24
+ device;
25
+ pipeline;
26
+ sampler;
27
+ constructor(device, format, sampleCount) {
28
+ this.device = device;
29
+ const module = device.createShaderModule({ label: 'reference-image', code: SHADER });
30
+ this.pipeline = device.createRenderPipeline({ label: 'reference-image', layout: 'auto',
31
+ vertex: { module, entryPoint: 'vs', buffers: [{ arrayStride: 20, attributes: [
32
+ { shaderLocation: 0, offset: 0, format: 'float32x3' }, { shaderLocation: 1, offset: 12, format: 'float32x2' },
33
+ ] }] },
34
+ fragment: { module, entryPoint: 'fs', targets: [{ format, blend: {
35
+ color: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
36
+ alpha: { srcFactor: 'one', dstFactor: 'one-minus-src-alpha', operation: 'add' },
37
+ } }, { format: 'rgba8unorm', writeMask: 0 }] },
38
+ primitive: { topology: 'triangle-list', cullMode: 'none' },
39
+ depthStencil: { format: PIPELINE_CONSTANTS.DEPTH_FORMAT, depthWriteEnabled: false, depthCompare: 'greater-equal' },
40
+ multisample: { count: sampleCount },
41
+ });
42
+ this.sampler = device.createSampler({ minFilter: 'linear', magFilter: 'linear', addressModeU: 'clamp-to-edge', addressModeV: 'clamp-to-edge' });
43
+ }
44
+ upload(input) {
45
+ const { device } = this;
46
+ if (!input.id || !Number.isFinite(input.opacity) || input.opacity < 0 || input.opacity > 1 ||
47
+ input.corners.length !== 4 || input.corners.some(p => p.length !== 3 || p.some(n => !Number.isFinite(n)))) {
48
+ throw new Error('Reference image requires a stable ID, four finite corners and opacity between zero and one.');
49
+ }
50
+ if (input.bitmap.width < 1 || input.bitmap.height < 1 || Math.max(input.bitmap.width, input.bitmap.height) > device.limits.maxTextureDimension2D) {
51
+ throw new Error('Reference image exceeds this GPU’s image dimensions. Choose a lower raster resolution.');
52
+ }
53
+ const origin = input.corners[0];
54
+ const uv = [[0, 0], [1, 0], [1, 1], [0, 1]];
55
+ const vertices = new Float32Array([0, 1, 2, 0, 2, 3].flatMap(i => [
56
+ input.corners[i][0] - origin[0], input.corners[i][1] - origin[1], input.corners[i][2] - origin[2], ...uv[i],
57
+ ]));
58
+ if (vertices.some(n => !Number.isFinite(n)))
59
+ throw new Error('Reference dimensions exceed the renderable coordinate range.');
60
+ const resources = [];
61
+ try {
62
+ const texture = device.createTexture({ label: 'reference-image', size: [input.bitmap.width, input.bitmap.height], format: 'rgba8unorm',
63
+ usage: GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT });
64
+ resources.push(texture);
65
+ device.queue.copyExternalImageToTexture({ source: input.bitmap }, { texture }, [input.bitmap.width, input.bitmap.height]);
66
+ const buffer = device.createBuffer({ size: vertices.byteLength, usage: GPUBufferUsage.VERTEX | GPUBufferUsage.COPY_DST });
67
+ resources.push(buffer);
68
+ device.queue.writeBuffer(buffer, 0, vertices);
69
+ const uniform = device.createBuffer({ size: 96, usage: GPUBufferUsage.UNIFORM | GPUBufferUsage.COPY_DST });
70
+ resources.push(uniform);
71
+ const bind = device.createBindGroup({ layout: this.pipeline.getBindGroupLayout(0), entries: [
72
+ { binding: 0, resource: { buffer: uniform } }, { binding: 1, resource: texture.createView() }, { binding: 2, resource: this.sampler },
73
+ ] });
74
+ const data = new Float32Array(24);
75
+ let destroyed = false;
76
+ return { input,
77
+ draw: (pass, viewProj) => {
78
+ if (destroyed || !input.visible || input.opacity === 0)
79
+ return;
80
+ data.set(viewProj, 0);
81
+ for (let row = 0; row < 4; row++)
82
+ data[16 + row] = viewProj[row] * origin[0] + viewProj[4 + row] * origin[1] + viewProj[8 + row] * origin[2] + viewProj[12 + row];
83
+ data[20] = input.opacity;
84
+ device.queue.writeBuffer(uniform, 0, data);
85
+ pass.setPipeline(this.pipeline);
86
+ pass.setBindGroup(0, bind);
87
+ pass.setVertexBuffer(0, buffer);
88
+ pass.draw(6);
89
+ },
90
+ destroy: () => { if (!destroyed) {
91
+ destroyed = true;
92
+ for (const resource of resources)
93
+ resource.destroy();
94
+ } },
95
+ };
96
+ }
97
+ catch (error) {
98
+ for (const resource of resources)
99
+ resource.destroy();
100
+ throw error;
101
+ }
102
+ }
103
+ }
104
+ //# sourceMappingURL=reference-image-pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-pipeline.js","sourceRoot":"","sources":["../src/reference-image-pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { PickOptions } from './types.js';
2
+ export type ReferencePoint = readonly [number, number, number];
3
+ /** Renderer Y-up coordinates, ordered top-left, top-right, bottom-right, bottom-left. */
4
+ export type ReferenceCorners = readonly [ReferencePoint, ReferencePoint, ReferencePoint, ReferencePoint];
5
+ export interface ReferenceImageInput {
6
+ /** Separate namespace: never an IFC Express ID or federation global ID. */
7
+ id: string;
8
+ bitmap: ImageBitmap;
9
+ corners: ReferenceCorners;
10
+ visible: boolean;
11
+ locked: boolean;
12
+ opacity: number;
13
+ }
14
+ export interface ReferenceImageHit {
15
+ referenceId: string;
16
+ point: ReferencePoint;
17
+ distance: number;
18
+ }
19
+ export interface ReferenceImages {
20
+ /** Borrows the bitmap for upload; the caller retains ownership of the source. */
21
+ set(input: ReferenceImageInput, signal?: AbortSignal): Promise<void>;
22
+ remove(id: string): void;
23
+ clear(): void;
24
+ /** CSS canvas coordinates; hidden, locked and scene-occluded references do not hit. */
25
+ pick(x: number, y: number, options?: PickOptions): Promise<ReferenceImageHit | null>;
26
+ }
27
+ //# sourceMappingURL=reference-image-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-types.d.ts","sourceRoot":"","sources":["../src/reference-image-types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC/D,yFAAyF;AACzF,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC;AACzG,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AACD,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,cAAc,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,eAAe;IAC9B,iFAAiF;IACjF,GAAG,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrE,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,IAAI,IAAI,CAAC;IACd,uFAAuF;IACvF,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACtF"}
@@ -0,0 +1,5 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ export {};
5
+ //# sourceMappingURL=reference-image-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-image-types.js","sourceRoot":"","sources":["../src/reference-image-types.ts"],"names":[],"mappings":"AAAA;;+DAE+D"}
@@ -0,0 +1,27 @@
1
+ import type { Ray } from './raycaster.js';
2
+ import type { PickOptions } from './types.js';
3
+ import type { ReferenceImages, ReferenceImageInput, ReferenceImageHit } from './reference-image-types.js';
4
+ export interface ReferenceImageHost {
5
+ requestRender(): void;
6
+ ray(x: number, y: number): Ray | null;
7
+ sceneDistance(x: number, y: number, ray: Ray, options?: PickOptions): Promise<number>;
8
+ }
9
+ /** String-identity resources separate from all IFC geometry and selection buckets. */
10
+ export declare class ReferenceImageManager implements ReferenceImages {
11
+ private host;
12
+ private images;
13
+ private jobs;
14
+ private pipeline;
15
+ private device;
16
+ private format;
17
+ private sampleCount;
18
+ constructor(host: ReferenceImageHost);
19
+ init(device: GPUDevice, format: GPUTextureFormat, sampleCount: number): void;
20
+ set(input: ReferenceImageInput, signal?: AbortSignal): Promise<void>;
21
+ remove(id: string): void;
22
+ clear(): void;
23
+ destroy(): void;
24
+ draw(pass: GPURenderPassEncoder, viewProj: Float32Array): void;
25
+ pick(x: number, y: number, options?: PickOptions): Promise<ReferenceImageHit | null>;
26
+ }
27
+ //# sourceMappingURL=reference-images.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-images.d.ts","sourceRoot":"","sources":["../src/reference-images.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAI1G,MAAM,WAAW,kBAAkB;IACjC,aAAa,IAAI,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC;IACtC,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;CACvF;AAED,sFAAsF;AACtF,qBAAa,qBAAsB,YAAW,eAAe;IAO/C,OAAO,CAAC,IAAI;IANxB,OAAO,CAAC,MAAM,CAAwC;IACtD,OAAO,CAAC,IAAI,CAA6B;IACzC,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,WAAW,CAAK;gBACJ,IAAI,EAAE,kBAAkB;IAE5C,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAMtE,GAAG,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IA+C1E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxB,KAAK,IAAI,IAAI;IAMb,OAAO,IAAI,IAAI;IACf,IAAI,CAAC,IAAI,EAAE,oBAAoB,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAYxD,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAiB3F"}
@@ -0,0 +1,134 @@
1
+ import { ReferenceImagePipeline } from './reference-image-pipeline.js';
2
+ import { referenceImageHit } from './reference-image-hit.js';
3
+ /** String-identity resources separate from all IFC geometry and selection buckets. */
4
+ export class ReferenceImageManager {
5
+ host;
6
+ images = new Map();
7
+ jobs = new Map();
8
+ pipeline = null;
9
+ device = null;
10
+ format = 'bgra8unorm';
11
+ sampleCount = 1;
12
+ constructor(host) {
13
+ this.host = host;
14
+ }
15
+ init(device, format, sampleCount) {
16
+ this.destroy();
17
+ this.device = device;
18
+ this.format = format;
19
+ this.sampleCount = sampleCount;
20
+ }
21
+ async set(input, signal) {
22
+ const device = this.device;
23
+ if (!device)
24
+ throw new Error('The renderer is not ready for reference images.');
25
+ if (signal?.aborted)
26
+ return;
27
+ const current = this.images.get(input.id)?.input;
28
+ if (current?.bitmap === input.bitmap && current.visible === input.visible && current.locked === input.locked && current.opacity === input.opacity &&
29
+ current.corners.every((point, i) => point.every((n, axis) => n === input.corners[i][axis]))) {
30
+ // Also invalidate an older in-flight replacement of this unchanged image.
31
+ this.jobs.delete(input.id);
32
+ return;
33
+ }
34
+ // Snapshot caller geometry: changing a draft must never mutate an in-flight upload.
35
+ const captured = { ...input, corners: [
36
+ [...input.corners[0]], [...input.corners[1]], [...input.corners[2]], [...input.corners[3]],
37
+ ] };
38
+ const job = Symbol(input.id);
39
+ this.jobs.set(input.id, job);
40
+ device.pushErrorScope('out-of-memory');
41
+ device.pushErrorScope('validation');
42
+ let candidate;
43
+ let failure;
44
+ try {
45
+ // Ordinary IFC viewing creates no reference shader/pipeline or texture.
46
+ this.pipeline ??= new ReferenceImagePipeline(device, this.format, this.sampleCount);
47
+ candidate = this.pipeline.upload(captured);
48
+ }
49
+ catch (error) {
50
+ failure = error;
51
+ }
52
+ // Pop both scopes before awaiting: concurrent set calls must never consume
53
+ // one another's device-global scope stack.
54
+ const validationResult = device.popErrorScope(), memoryResult = device.popErrorScope();
55
+ try {
56
+ const [validation, memory] = await Promise.all([validationResult, memoryResult]);
57
+ if (validation || memory)
58
+ failure ??= new Error(`Reference image upload failed: ${(validation ?? memory).message}`);
59
+ }
60
+ catch (error) {
61
+ failure ??= error;
62
+ }
63
+ if (failure || signal?.aborted || this.jobs.get(input.id) !== job || this.device !== device) {
64
+ candidate?.destroy();
65
+ if (failure && this.device === device)
66
+ this.pipeline = null;
67
+ if (this.jobs.get(input.id) === job)
68
+ this.jobs.delete(input.id);
69
+ if (failure)
70
+ throw failure;
71
+ return;
72
+ }
73
+ this.jobs.delete(input.id);
74
+ if (!candidate)
75
+ throw new Error('Reference image upload produced no resource.');
76
+ this.images.get(input.id)?.destroy();
77
+ this.images.set(input.id, candidate);
78
+ this.host.requestRender();
79
+ }
80
+ remove(id) {
81
+ this.jobs.delete(id);
82
+ this.images.get(id)?.destroy();
83
+ this.images.delete(id);
84
+ this.host.requestRender();
85
+ }
86
+ clear() {
87
+ this.jobs.clear();
88
+ for (const image of this.images.values())
89
+ image.destroy();
90
+ this.images.clear();
91
+ this.host.requestRender();
92
+ }
93
+ destroy() { this.clear(); this.pipeline = null; this.device = null; }
94
+ draw(pass, viewProj) {
95
+ if (!this.images.size)
96
+ return;
97
+ const depth = (image) => {
98
+ const c = image.input.corners;
99
+ const x = (c[0][0] + c[2][0]) / 2, y = (c[0][1] + c[2][1]) / 2, z = (c[0][2] + c[2][2]) / 2;
100
+ return (viewProj[2] * x + viewProj[6] * y + viewProj[10] * z + viewProj[14]) /
101
+ (viewProj[3] * x + viewProj[7] * y + viewProj[11] * z + viewProj[15]);
102
+ };
103
+ // Reverse-Z, far to near for translucent references; BIM depth still tests
104
+ // each fragment. Intersecting transparent planes have ordinary alpha-sort limits.
105
+ for (const image of [...this.images.values()].sort((a, b) => depth(a) - depth(b)))
106
+ image.draw(pass, viewProj);
107
+ }
108
+ async pick(x, y, options) {
109
+ if (!this.images.size)
110
+ return null;
111
+ const ray = this.host.ray(x, y);
112
+ if (!ray)
113
+ return null;
114
+ const snapshot = new Map([...this.images].filter(([, image]) => image.input.visible && !image.input.locked && image.input.opacity > 0 &&
115
+ referenceImageHit(image.input.id, image.input.corners, ray, Infinity) !== null));
116
+ if (!snapshot.size)
117
+ return null;
118
+ let distance = await this.host.sceneDistance(x, y, ray, options), nearest = null;
119
+ for (const image of snapshot.values()) {
120
+ const { input } = image;
121
+ if (this.images.get(input.id) !== image)
122
+ continue;
123
+ if (!input.visible || input.locked || input.opacity === 0)
124
+ continue;
125
+ const hit = referenceImageHit(input.id, input.corners, ray, distance);
126
+ if (hit) {
127
+ nearest = hit;
128
+ distance = hit.distance;
129
+ }
130
+ }
131
+ return nearest;
132
+ }
133
+ }
134
+ //# sourceMappingURL=reference-images.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-images.js","sourceRoot":"","sources":["../src/reference-images.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,sBAAsB,EAA0B,MAAM,+BAA+B,CAAC;AAC/F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQ7D,sFAAsF;AACtF,MAAM,OAAO,qBAAqB;IAOZ;IANZ,MAAM,GAAG,IAAI,GAAG,EAA6B,CAAC;IAC9C,IAAI,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjC,QAAQ,GAAkC,IAAI,CAAC;IAC/C,MAAM,GAAqB,IAAI,CAAC;IAChC,MAAM,GAAqB,YAAY,CAAC;IACxC,WAAW,GAAG,CAAC,CAAC;IACxB,YAAoB,IAAwB;QAAxB,SAAI,GAAJ,IAAI,CAAoB;IAAG,CAAC;IAEhD,IAAI,CAAC,MAAiB,EAAE,MAAwB,EAAE,WAAmB;QACnE,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IACD,KAAK,CAAC,GAAG,CAAC,KAA0B,EAAE,MAAoB;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;QAChF,IAAI,MAAM,EAAE,OAAO;YAAE,OAAO;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC;QACjD,IAAI,OAAO,EAAE,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;YAC/I,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9F,0EAA0E;YAC1E,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,oFAAoF;QACpF,MAAM,QAAQ,GAAwB,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE;gBACzD,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aAC3F,EAAE,CAAC;QACJ,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC;QACpC,IAAI,SAAwC,CAAC;QAC7C,IAAI,OAAgB,CAAC;QACrB,IAAI,CAAC;YACH,wEAAwE;YACxE,IAAI,CAAC,QAAQ,KAAK,IAAI,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACpF,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,GAAG,KAAK,CAAC;QAAC,CAAC;QAClC,2EAA2E;QAC3E,2CAA2C;QAC3C,MAAM,gBAAgB,GAAG,MAAM,CAAC,aAAa,EAAE,EAAE,YAAY,GAAG,MAAM,CAAC,aAAa,EAAE,CAAC;QACvF,IAAI,CAAC;YACH,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,CAAC;YACjF,IAAI,UAAU,IAAI,MAAM;gBAAE,OAAO,KAAK,IAAI,KAAK,CAAC,kCAAkC,CAAC,UAAU,IAAI,MAAM,CAAE,CAAC,OAAO,EAAE,CAAC,CAAC;QACvH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,OAAO,KAAK,KAAK,CAAC;QAAC,CAAC;QACtC,IAAI,OAAO,IAAI,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC5F,SAAS,EAAE,OAAO,EAAE,CAAC;YACrB,IAAI,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;gBAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YAC5D,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,GAAG;gBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAChE,IAAI,OAAO;gBAAE,MAAM,OAAO,CAAC;YAC3B,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAChF,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QACrC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACrC,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,CAAC,EAAU;QACf,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IACD,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,KAAW,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,IAA0B,EAAE,QAAsB;QACrD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO;QAC9B,MAAM,KAAK,GAAG,CAAC,KAAwB,EAAU,EAAE;YACjD,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAC,CAAC,CAAC;YAChF,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,QAAQ,CAAC,EAAE,CAAC,GAAC,CAAC,GAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC9D,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,QAAQ,CAAC,CAAC,CAAC,GAAC,CAAC,GAAC,QAAQ,CAAC,EAAE,CAAC,GAAC,CAAC,GAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC;QACF,2EAA2E;QAC3E,kFAAkF;QAClF,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC9G,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAS,EAAE,CAAS,EAAE,OAAqB;QACpD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QACtB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC;YACnI,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QACnF,IAAI,CAAC,QAAQ,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,OAAO,GAA6B,IAAI,CAAC;QAC3G,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACtC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;YACxB,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,KAAK;gBAAE,SAAS;YAClD,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,KAAK,CAAC;gBAAE,SAAS;YACpE,MAAM,GAAG,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACtE,IAAI,GAAG,EAAE,CAAC;gBAAC,OAAO,GAAG,GAAG,CAAC;gBAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;YAAC,CAAC;QACtD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ import type { Camera } from './camera.js';
2
+ export declare function resizeRendererViewport(canvas: HTMLCanvasElement, camera: Camera, width: number, height: number): void;
3
+ //# sourceMappingURL=renderer-viewport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-viewport.d.ts","sourceRoot":"","sources":["../src/renderer-viewport.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,iBAAiB,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,IAAI,CAoBN"}
@@ -0,0 +1,20 @@
1
+ export function resizeRendererViewport(canvas, camera, width, height) {
2
+ // `canvas.width` is an IDL `unsigned long`, so it silently coerces a
3
+ // non-finite or negative argument to **0** — a zero drawing buffer
4
+ // that every pick guard in this package misses, because they all
5
+ // check the bounding rect rather than the buffer. `unprojectToRay`
6
+ // then divides by it. This is documented public API of a published
7
+ // package (`docs/api/typescript.md`), so an external caller wiring a
8
+ // ResizeObserver to it is the reachable route; both in-repo callers
9
+ // already floor their own values. Keep the last usable size, the same
10
+ // policy `setAspect` uses for the ratio it derives (#2473).
11
+ if (!Number.isFinite(width) ||
12
+ !Number.isFinite(height) ||
13
+ width <= 0 ||
14
+ height <= 0)
15
+ return;
16
+ canvas.width = width;
17
+ canvas.height = height;
18
+ camera.setAspect(width / height);
19
+ }
20
+ //# sourceMappingURL=renderer-viewport.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer-viewport.js","sourceRoot":"","sources":["../src/renderer-viewport.ts"],"names":[],"mappings":"AAKA,MAAM,UAAU,sBAAsB,CACpC,MAAyB,EACzB,MAAc,EACd,KAAa,EACb,MAAc;IAEd,qEAAqE;IACrE,mEAAmE;IACnE,iEAAiE;IACjE,mEAAmE;IACnE,mEAAmE;IACnE,qEAAqE;IACrE,oEAAoE;IACpE,sEAAsE;IACtE,4DAA4D;IAC5D,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;QACxB,KAAK,IAAI,CAAC;QACV,MAAM,IAAI,CAAC;QAEX,OAAO;IACT,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC;AACnC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { MeshTexture } from '@ifc-lite/geometry';
2
+ /** Room recipients share decoded pixel arrays across surfaces (#4228, #4232).
3
+ * Keep that sharing on the GPU too; sampler settings belong to each draw. */
4
+ export declare class RgbaTexturePool {
5
+ private entries;
6
+ private owners;
7
+ acquire(source: MeshTexture, device: GPUDevice): GPUTexture;
8
+ /** Return false only for textures owned by another allocation path. */
9
+ release(texture: GPUTexture): boolean;
10
+ clear(): void;
11
+ }
12
+ //# sourceMappingURL=rgba-texture-pool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rgba-texture-pool.d.ts","sourceRoot":"","sources":["../src/rgba-texture-pool.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD;6EAC6E;AAC7E,qBAAa,eAAe;IAE1B,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,MAAM,CAA8D;IAE5E,OAAO,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,SAAS,GAAG,UAAU;IAyB3D,uEAAuE;IACvE,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO;IAYrC,KAAK,IAAI,IAAI;CAKd"}