@ifc-lite/renderer 1.29.2 → 1.30.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/camera-fit-policy.d.ts +6 -0
- package/dist/camera-fit-policy.d.ts.map +1 -1
- package/dist/camera-fit-policy.js +21 -1
- package/dist/camera-fit-policy.js.map +1 -1
- package/dist/clip-box.d.ts +19 -0
- package/dist/clip-box.d.ts.map +1 -0
- package/dist/clip-box.js +35 -0
- package/dist/clip-box.js.map +1 -0
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +4 -2
- package/dist/constants.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +53 -11
- package/dist/index.js.map +1 -1
- package/dist/pick-uniforms.d.ts +9 -0
- package/dist/pick-uniforms.d.ts.map +1 -0
- package/dist/pick-uniforms.js +49 -0
- package/dist/pick-uniforms.js.map +1 -0
- package/dist/picker.d.ts +11 -4
- package/dist/picker.d.ts.map +1 -1
- package/dist/picker.js +78 -14
- package/dist/picker.js.map +1 -1
- package/dist/picking-manager.d.ts +3 -3
- package/dist/picking-manager.d.ts.map +1 -1
- package/dist/picking-manager.js +6 -6
- package/dist/picking-manager.js.map +1 -1
- package/dist/pipeline.d.ts +6 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +17 -11
- package/dist/pipeline.js.map +1 -1
- package/dist/point-picker.d.ts +5 -1
- package/dist/point-picker.d.ts.map +1 -1
- package/dist/point-picker.js +27 -10
- package/dist/point-picker.js.map +1 -1
- package/dist/scene-raycaster.d.ts +27 -3
- package/dist/scene-raycaster.d.ts.map +1 -1
- package/dist/scene-raycaster.js +146 -3
- package/dist/scene-raycaster.js.map +1 -1
- package/dist/scene.d.ts +2 -2
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +4 -4
- package/dist/scene.js.map +1 -1
- package/dist/shaders/main.wgsl.d.ts +1 -1
- package/dist/shaders/main.wgsl.d.ts.map +1 -1
- package/dist/shaders/main.wgsl.js +11 -1
- package/dist/shaders/main.wgsl.js.map +1 -1
- package/dist/types.d.ts +32 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/point-picker.d.ts
CHANGED
|
@@ -62,7 +62,11 @@ export declare class PointPicker {
|
|
|
62
62
|
worldRadius: number;
|
|
63
63
|
pointSizePx: number;
|
|
64
64
|
clickTolerancePx: number;
|
|
65
|
-
}
|
|
65
|
+
}, section?: {
|
|
66
|
+
normal: [number, number, number];
|
|
67
|
+
distance: number;
|
|
68
|
+
flipped: boolean;
|
|
69
|
+
} | null): void;
|
|
66
70
|
private writeUniforms;
|
|
67
71
|
destroy(): void;
|
|
68
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-picker.d.ts","sourceRoot":"","sources":["../src/point-picker.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;QAAE,YAAY,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAID;;;kEAGkE;AAClE,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;CAC/C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAqBjE;AAKD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"point-picker.d.ts","sourceRoot":"","sources":["../src/point-picker.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,aAAa,CAAC;QAAE,YAAY,EAAE,SAAS,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxE;AAID;;;kEAGkE;AAClE,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAChD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAE9C,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IAChC,4EAA4E;IAC5E,gBAAgB,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,cAAc,EAAE,MAAM,CAAC;IACvB,6EAA6E;IAC7E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sDAAsD;IACtD,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,CAAC;CAC/C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,iBAAiB,CAqBjE;AAKD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,QAAQ,CAAoB;IACpC,OAAO,CAAC,eAAe,CAAqB;IAC5C,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,SAAS,CAAe;IAChC,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,UAAU,CAA+C;IACjE,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,YAAY;IA8JhC;;;;OAIG;IACH,YAAY,CACV,IAAI,EAAE,oBAAoB,EAC1B,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,EACnC,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAC3C,MAAM,EAAE;QAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,gBAAgB,EAAE,MAAM,CAAA;KAAE,EACnG,OAAO,CAAC,EAAE;QAAE,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAE,GAAG,IAAI,GACxF,IAAI;IAmBP,OAAO,CAAC,aAAa;IAgCrB,OAAO,IAAI,IAAI;CAKhB"}
|
package/dist/point-picker.js
CHANGED
|
@@ -32,8 +32,8 @@ export function decodePickSample(value) {
|
|
|
32
32
|
}
|
|
33
33
|
return { meshIndexPlusOne: value, pointExpressId: 0, instanceExpressId: 0, kind: 'mesh' };
|
|
34
34
|
}
|
|
35
|
-
// mat4x4 (64) + vec4 viewport (16) + vec4 sizing (16) + vec4 entityIdOverride (16)
|
|
36
|
-
const UNIFORM_BYTES =
|
|
35
|
+
// mat4x4 (64) + vec4 viewport (16) + vec4 sizing (16) + vec4 entityIdOverride (16) + vec4 section (16)
|
|
36
|
+
const UNIFORM_BYTES = 128;
|
|
37
37
|
export class PointPicker {
|
|
38
38
|
device;
|
|
39
39
|
pipeline;
|
|
@@ -71,7 +71,9 @@ struct U {
|
|
|
71
71
|
// z = pointSizePx, w = clickToleranceExtraPx
|
|
72
72
|
// x = assetExpressId override (federation-aware globalId);
|
|
73
73
|
// 0 means "use the per-vertex entityId attribute".
|
|
74
|
+
// y = sectionEnabled (0/1), z = sectionFlipped (0/1).
|
|
74
75
|
entityIdOverride: vec4<u32>,
|
|
76
|
+
section: vec4<f32>, // xyz = plane normal, w = plane distance
|
|
75
77
|
}
|
|
76
78
|
@binding(0) @group(0) var<uniform> u: U;
|
|
77
79
|
|
|
@@ -84,6 +86,7 @@ struct VOut {
|
|
|
84
86
|
@builtin(position) pos: vec4<f32>,
|
|
85
87
|
@location(0) @interpolate(flat) entityId: u32,
|
|
86
88
|
@location(1) quadUv: vec2<f32>,
|
|
89
|
+
@location(2) worldPos: vec3<f32>,
|
|
87
90
|
}
|
|
88
91
|
|
|
89
92
|
@vertex
|
|
@@ -132,6 +135,7 @@ fn vs_main(input: VIn, @builtin(vertex_index) vId: u32) -> VOut {
|
|
|
132
135
|
o.pos = clip;
|
|
133
136
|
o.entityId = input.entityId;
|
|
134
137
|
o.quadUv = corner;
|
|
138
|
+
o.worldPos = input.position;
|
|
135
139
|
return o;
|
|
136
140
|
}
|
|
137
141
|
|
|
@@ -143,6 +147,15 @@ fn fs_main(input: VOut) -> @location(0) u32 {
|
|
|
143
147
|
if (dot(input.quadUv, input.quadUv) > 1.0) {
|
|
144
148
|
discard;
|
|
145
149
|
}
|
|
150
|
+
// Section plane: a point the section tool cut away is unpickable (mirrors the
|
|
151
|
+
// point RENDER discard so selection matches what's visible).
|
|
152
|
+
if (u.entityIdOverride.y != 0u) {
|
|
153
|
+
let side = select(1.0, -1.0, u.entityIdOverride.z != 0u);
|
|
154
|
+
let d = (dot(u.section.xyz, input.worldPos) - u.section.w) * side;
|
|
155
|
+
if (d > 0.0) {
|
|
156
|
+
discard;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
146
159
|
// Prefer the asset-level expressId override when set (federation
|
|
147
160
|
// relabels apply post-stream so the per-vertex attribute can go
|
|
148
161
|
// stale). Fallback to the per-vertex value when no override is set.
|
|
@@ -187,7 +200,7 @@ fn fs_main(input: VOut) -> @location(0) u32 {
|
|
|
187
200
|
* caller is responsible for clearing the color + depth attachments
|
|
188
201
|
* and ending the pass.
|
|
189
202
|
*/
|
|
190
|
-
drawIntoPass(pass, nodes, viewProj, viewport, sizing) {
|
|
203
|
+
drawIntoPass(pass, nodes, viewProj, viewport, sizing, section) {
|
|
191
204
|
if (this.destroyed || nodes.length === 0)
|
|
192
205
|
return;
|
|
193
206
|
pass.setPipeline(this.pipeline);
|
|
@@ -198,7 +211,7 @@ fn fs_main(input: VOut) -> @location(0) u32 {
|
|
|
198
211
|
// an idOffset to the model — the override forces the picker to
|
|
199
212
|
// emit the asset's CURRENT expressId regardless.
|
|
200
213
|
for (const node of nodes) {
|
|
201
|
-
this.writeUniforms(viewProj, viewport, sizing, node.expressId >>> 0);
|
|
214
|
+
this.writeUniforms(viewProj, viewport, sizing, node.expressId >>> 0, section);
|
|
202
215
|
for (const chunk of node.chunks) {
|
|
203
216
|
if (chunk.pointCount === 0)
|
|
204
217
|
continue;
|
|
@@ -207,7 +220,7 @@ fn fs_main(input: VOut) -> @location(0) u32 {
|
|
|
207
220
|
}
|
|
208
221
|
}
|
|
209
222
|
}
|
|
210
|
-
writeUniforms(viewProj, viewport, sizing, entityIdOverride) {
|
|
223
|
+
writeUniforms(viewProj, viewport, sizing, entityIdOverride, section) {
|
|
211
224
|
const u = this.uniformScratch;
|
|
212
225
|
const u32 = this.uniformU32;
|
|
213
226
|
u.set(viewProj.subarray(0, 16), 0);
|
|
@@ -219,13 +232,17 @@ fn fs_main(input: VOut) -> @location(0) u32 {
|
|
|
219
232
|
u[21] = sizing.worldRadius;
|
|
220
233
|
u[22] = sizing.pointSizePx;
|
|
221
234
|
u[23] = sizing.clickTolerancePx;
|
|
222
|
-
// entityIdOverride at u32
|
|
223
|
-
//
|
|
224
|
-
// value); any non-zero value wins.
|
|
235
|
+
// entityIdOverride.x at u32 24 (0 = use per-vertex attribute); .y/.z carry the
|
|
236
|
+
// section-enabled / flipped flags the fragment shader reads.
|
|
225
237
|
u32[24] = entityIdOverride >>> 0;
|
|
226
|
-
u32[25] = 0;
|
|
227
|
-
u32[26] = 0;
|
|
238
|
+
u32[25] = section ? 1 : 0;
|
|
239
|
+
u32[26] = section?.flipped ? 1 : 0;
|
|
228
240
|
u32[27] = 0;
|
|
241
|
+
// section plane (vec4<f32>) at float offset 28..31.
|
|
242
|
+
u[28] = section ? section.normal[0] : 0;
|
|
243
|
+
u[29] = section ? section.normal[1] : 0;
|
|
244
|
+
u[30] = section ? section.normal[2] : 0;
|
|
245
|
+
u[31] = section ? section.distance : 0;
|
|
229
246
|
this.device.queue.writeBuffer(this.uniformBuffer, 0, u.buffer, u.byteOffset, UNIFORM_BYTES);
|
|
230
247
|
}
|
|
231
248
|
destroy() {
|
package/dist/point-picker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-picker.js","sourceRoot":"","sources":["../src/point-picker.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAQtF,MAAM,iBAAiB,GAAG,UAAU,CAAC;AACrC,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC;;;kEAGkE;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAc9C,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,KAAK,GAAG,eAAe;YACvC,iBAAiB,EAAE,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,KAAK,GAAG,mBAAmB;YAC9C,IAAI,EAAE,WAAW;SAClB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5F,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"point-picker.js","sourceRoot":"","sources":["../src/point-picker.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AAQtF,MAAM,iBAAiB,GAAG,UAAU,CAAC;AACrC,MAAM,eAAe,GAAG,UAAU,CAAC;AACnC;;;kEAGkE;AAClE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAChD,MAAM,CAAC,MAAM,mBAAmB,GAAG,UAAU,CAAC;AAc9C,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO,EAAE,gBAAgB,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACxF,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,KAAK,GAAG,eAAe;YACvC,iBAAiB,EAAE,CAAC;YACpB,IAAI,EAAE,OAAO;SACd,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1C,OAAO;YACL,gBAAgB,EAAE,CAAC;YACnB,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,KAAK,GAAG,mBAAmB;YAC9C,IAAI,EAAE,WAAW;SAClB,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,gBAAgB,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5F,CAAC;AAED,uGAAuG;AACvG,MAAM,aAAa,GAAG,GAAG,CAAC;AAE1B,MAAM,OAAO,WAAW;IACd,MAAM,CAAY;IAClB,QAAQ,CAAoB;IAC5B,eAAe,CAAqB;IACpC,aAAa,CAAY;IACzB,SAAS,CAAe;IACxB,cAAc,GAAG,IAAI,YAAY,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;IACrD,UAAU,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACzD,SAAS,GAAG,KAAK,CAAC;IAE1B,YAAY,MAAoB;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;QAEjC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC;YACvD,OAAO,EAAE;gBACP;oBACE,OAAO,EAAE,CAAC;oBACV,UAAU,EAAE,cAAc,CAAC,MAAM,GAAG,cAAc,CAAC,QAAQ;oBAC3D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;iBAC5B;aACF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,cAAc,CAAC,OAAO,GAAG,cAAc,CAAC,QAAQ;SACxD,CAAC,CAAC;QAEH,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;YAC3C,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;SACpE,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC;YAC5C,IAAI,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmGX;SACI,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;YAC/C,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,EAAE,gBAAgB,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACtF,MAAM,EAAE;gBACN,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE;oBACP;wBACE,WAAW,EAAE,kBAAkB;wBAC/B,QAAQ,EAAE,UAAU;wBACpB,UAAU,EAAE;4BACV,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE;4BACrD,4DAA4D;4BAC5D,kDAAkD;4BAClD,EAAE,cAAc,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE;yBACpD;qBACF;iBACF;aACF;YACD,QAAQ,EAAE;gBACR,MAAM,EAAE,MAAM;gBACd,UAAU,EAAE,SAAS;gBACrB,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;aACjC;YACD,SAAS,EAAE,EAAE,QAAQ,EAAE,eAAe,EAAE;YACxC,YAAY,EAAE;gBACZ,MAAM,EAAE,cAAc;gBACtB,iBAAiB,EAAE,IAAI;gBACvB,YAAY,EAAE,SAAS;aACxB;SACF,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,YAAY,CACV,IAA0B,EAC1B,KAAmC,EACnC,QAAsB,EACtB,QAA2C,EAC3C,MAAmG,EACnG,OAAyF;QAEzF,IAAI,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACjD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACrC,iEAAiE;QACjE,kEAAkE;QAClE,iEAAiE;QACjE,+DAA+D;QAC/D,iDAAiD;QACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;YAC9E,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC;oBAAE,SAAS;gBACrC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;gBAC5C,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;IACH,CAAC;IAEO,aAAa,CACnB,QAAsB,EACtB,QAA2C,EAC3C,MAAgG,EAChG,gBAAwB,EACxB,OAAyF;QAEzF,MAAM,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC;QAC5B,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACV,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC;QACxB,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,CAAC;QAC3B,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC;QAChC,+EAA+E;QAC/E,6DAA6D;QAC7D,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,KAAK,CAAC,CAAC;QACjC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QACZ,oDAAoD;QACpD,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;IAC9F,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;CACF"}
|
|
@@ -4,11 +4,27 @@
|
|
|
4
4
|
* Pure math — takes positions/indices/rays and returns intersection results.
|
|
5
5
|
* No dependency on Scene internal state.
|
|
6
6
|
*/
|
|
7
|
-
import type { Vec3 } from './types.js';
|
|
7
|
+
import type { Vec3, PickClipState } from './types.js';
|
|
8
8
|
export interface BoundingBox {
|
|
9
9
|
min: Vec3;
|
|
10
10
|
max: Vec3;
|
|
11
11
|
}
|
|
12
|
+
/** True when `clip` actually clips anything (a section plane or an enabled box). */
|
|
13
|
+
export declare function clipIsActive(clip?: PickClipState | null): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Is world point (x,y,z) clipped away (invisible) by the section plane or crop
|
|
16
|
+
* box? Mirrors the renderer's fragment discard EXACTLY so a CPU pick can't select
|
|
17
|
+
* geometry the GPU cropped/sectioned off. Section: discard where
|
|
18
|
+
* (dot(p,n) - distance) * side > 0; box: discard outside the AABB.
|
|
19
|
+
*/
|
|
20
|
+
export declare function pointClipped(clip: PickClipState | null | undefined, x: number, y: number, z: number): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Is the whole AABB clipped away: every corner cut by the section plane, or no
|
|
23
|
+
* overlap with the crop box? Used to skip fully-hidden entities/boxes before the
|
|
24
|
+
* triangle test (perf) and to clip the bounding-box-only raycast (released geom).
|
|
25
|
+
* Conservative: only skips when NOTHING of the box could be visible.
|
|
26
|
+
*/
|
|
27
|
+
export declare function boxFullyClipped(clip: PickClipState | null | undefined, box: BoundingBox): boolean;
|
|
12
28
|
/**
|
|
13
29
|
* Ray-box intersection test (slab method).
|
|
14
30
|
* Handles zero ray direction components (axis-aligned rays) safely.
|
|
@@ -22,6 +38,14 @@ rayDirSign: [number, number, number], box: BoundingBox): boolean;
|
|
|
22
38
|
* Handles zero ray direction components (axis-aligned rays) safely.
|
|
23
39
|
*/
|
|
24
40
|
export declare function rayBoxDistance(rayOrigin: Vec3, rayDirInv: Vec3, rayDirSign: [number, number, number], box: BoundingBox): number | null;
|
|
41
|
+
/**
|
|
42
|
+
* Entry distance into the VISIBLE part of `box` under the section plane / crop
|
|
43
|
+
* box, or null if the box is wholly clipped along the ray. Unlike a plain box
|
|
44
|
+
* entry, this clips the crop box exactly (AABB intersection) and the section
|
|
45
|
+
* plane as a half-space, so the released-geometry bbox raycast can't return a box
|
|
46
|
+
* whose only ray overlap is in the cropped/sectioned-away region.
|
|
47
|
+
*/
|
|
48
|
+
export declare function clippedBoxEntryDistance(rayOrigin: Vec3, rayDir: Vec3, rayDirInv: Vec3, rayDirSign: [number, number, number], box: BoundingBox, clip: PickClipState | null | undefined): number | null;
|
|
25
49
|
/**
|
|
26
50
|
* Möller–Trumbore ray-triangle intersection.
|
|
27
51
|
* Returns distance to intersection or null if no hit.
|
|
@@ -45,7 +69,7 @@ export declare function prepareRayDirInv(rayDir: Vec3): {
|
|
|
45
69
|
* CPU raycast against bounding-box-only data (post geometry release).
|
|
46
70
|
* Returns the closest hit by bounding-box entry distance.
|
|
47
71
|
*/
|
|
48
|
-
export declare function raycastBoundingBoxes(rayOrigin: Vec3, rayDirInv: Vec3, rayDirSign: [number, number, number], boundingBoxes: Map<number, BoundingBox>, hiddenIds?: Set<number>, isolatedIds?: Set<number> | null): RaycastHit | null;
|
|
72
|
+
export declare function raycastBoundingBoxes(rayOrigin: Vec3, rayDir: Vec3, rayDirInv: Vec3, rayDirSign: [number, number, number], boundingBoxes: Map<number, BoundingBox>, hiddenIds?: Set<number>, isolatedIds?: Set<number> | null, clip?: PickClipState | null): RaycastHit | null;
|
|
49
73
|
/**
|
|
50
74
|
* CPU raycast against triangle mesh data with a bounding-box pre-filter.
|
|
51
75
|
*
|
|
@@ -62,5 +86,5 @@ export declare function raycastTriangles(rayOrigin: Vec3, rayDir: Vec3, rayDirIn
|
|
|
62
86
|
entityIds?: Uint32Array;
|
|
63
87
|
modelIndex?: number;
|
|
64
88
|
origin?: [number, number, number];
|
|
65
|
-
}[]>, getEntityBoundingBox: (expressId: number) => BoundingBox | null, hiddenIds?: Set<number>, isolatedIds?: Set<number> | null): RaycastHit | null;
|
|
89
|
+
}[]>, getEntityBoundingBox: (expressId: number) => BoundingBox | null, hiddenIds?: Set<number>, isolatedIds?: Set<number> | null, clip?: PickClipState | null): RaycastHit | null;
|
|
66
90
|
//# sourceMappingURL=scene-raycaster.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-raycaster.d.ts","sourceRoot":"","sources":["../src/scene-raycaster.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"scene-raycaster.d.ts","sourceRoot":"","sources":["../src/scene-raycaster.ts"],"names":[],"mappings":"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"}
|
package/dist/scene-raycaster.js
CHANGED
|
@@ -2,6 +2,57 @@
|
|
|
2
2
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
3
3
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
|
4
4
|
import { MathUtils } from './math.js';
|
|
5
|
+
/** True when `clip` actually clips anything (a section plane or an enabled box). */
|
|
6
|
+
export function clipIsActive(clip) {
|
|
7
|
+
return !!(clip && (clip.sectionPlane || clip.clipBox?.enabled));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Is world point (x,y,z) clipped away (invisible) by the section plane or crop
|
|
11
|
+
* box? Mirrors the renderer's fragment discard EXACTLY so a CPU pick can't select
|
|
12
|
+
* geometry the GPU cropped/sectioned off. Section: discard where
|
|
13
|
+
* (dot(p,n) - distance) * side > 0; box: discard outside the AABB.
|
|
14
|
+
*/
|
|
15
|
+
export function pointClipped(clip, x, y, z) {
|
|
16
|
+
const sp = clip?.sectionPlane;
|
|
17
|
+
if (sp) {
|
|
18
|
+
const side = sp.flipped ? -1 : 1;
|
|
19
|
+
if ((x * sp.normal[0] + y * sp.normal[1] + z * sp.normal[2] - sp.distance) * side > 0)
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
const b = clip?.clipBox;
|
|
23
|
+
if (b?.enabled) {
|
|
24
|
+
if (x < b.min[0] || y < b.min[1] || z < b.min[2] || x > b.max[0] || y > b.max[1] || z > b.max[2])
|
|
25
|
+
return true;
|
|
26
|
+
}
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Is the whole AABB clipped away: every corner cut by the section plane, or no
|
|
31
|
+
* overlap with the crop box? Used to skip fully-hidden entities/boxes before the
|
|
32
|
+
* triangle test (perf) and to clip the bounding-box-only raycast (released geom).
|
|
33
|
+
* Conservative: only skips when NOTHING of the box could be visible.
|
|
34
|
+
*/
|
|
35
|
+
export function boxFullyClipped(clip, box) {
|
|
36
|
+
const sp = clip?.sectionPlane;
|
|
37
|
+
if (sp) {
|
|
38
|
+
const side = sp.flipped ? -1 : 1;
|
|
39
|
+
const [nx, ny, nz] = sp.normal;
|
|
40
|
+
// Corner that minimises (dot(p,n) - dist)*side: per axis pick min/max by sign.
|
|
41
|
+
const px = nx * side >= 0 ? box.min.x : box.max.x;
|
|
42
|
+
const py = ny * side >= 0 ? box.min.y : box.max.y;
|
|
43
|
+
const pz = nz * side >= 0 ? box.min.z : box.max.z;
|
|
44
|
+
if ((px * nx + py * ny + pz * nz - sp.distance) * side > 0)
|
|
45
|
+
return true; // every corner cut
|
|
46
|
+
}
|
|
47
|
+
const b = clip?.clipBox;
|
|
48
|
+
if (b?.enabled) {
|
|
49
|
+
if (box.max.x < b.min[0] || box.min.x > b.max[0] ||
|
|
50
|
+
box.max.y < b.min[1] || box.min.y > b.max[1] ||
|
|
51
|
+
box.max.z < b.min[2] || box.min.z > b.max[2])
|
|
52
|
+
return true; // no overlap with crop box
|
|
53
|
+
}
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
5
56
|
/**
|
|
6
57
|
* Ray-box intersection test (slab method).
|
|
7
58
|
* Handles zero ray direction components (axis-aligned rays) safely.
|
|
@@ -108,6 +159,84 @@ export function rayBoxDistance(rayOrigin, rayDirInv, rayDirSign, box) {
|
|
|
108
159
|
return null;
|
|
109
160
|
return tmin < 0 ? 0 : tmin;
|
|
110
161
|
}
|
|
162
|
+
/** Ray-box entry/exit params [tmin, tmax] (unclamped), or null on miss. */
|
|
163
|
+
function rayBoxInterval(rayOrigin, rayDirInv, rayDirSign, box) {
|
|
164
|
+
const bounds = [box.min, box.max];
|
|
165
|
+
let tmin = -Infinity;
|
|
166
|
+
let tmax = Infinity;
|
|
167
|
+
const axes = ['x', 'y', 'z'];
|
|
168
|
+
for (let a = 0; a < 3; a++) {
|
|
169
|
+
const ax = axes[a];
|
|
170
|
+
if (!isFinite(rayDirInv[ax])) {
|
|
171
|
+
if (rayOrigin[ax] < box.min[ax] || rayOrigin[ax] > box.max[ax])
|
|
172
|
+
return null;
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
const t1 = (bounds[rayDirSign[a]][ax] - rayOrigin[ax]) * rayDirInv[ax];
|
|
176
|
+
const t2 = (bounds[1 - rayDirSign[a]][ax] - rayOrigin[ax]) * rayDirInv[ax];
|
|
177
|
+
if (t1 > tmin)
|
|
178
|
+
tmin = t1;
|
|
179
|
+
if (t2 < tmax)
|
|
180
|
+
tmax = t2;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
if (tmax < tmin || tmax < 0)
|
|
184
|
+
return null;
|
|
185
|
+
return { tmin, tmax };
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Entry distance into the VISIBLE part of `box` under the section plane / crop
|
|
189
|
+
* box, or null if the box is wholly clipped along the ray. Unlike a plain box
|
|
190
|
+
* entry, this clips the crop box exactly (AABB intersection) and the section
|
|
191
|
+
* plane as a half-space, so the released-geometry bbox raycast can't return a box
|
|
192
|
+
* whose only ray overlap is in the cropped/sectioned-away region.
|
|
193
|
+
*/
|
|
194
|
+
export function clippedBoxEntryDistance(rayOrigin, rayDir, rayDirInv, rayDirSign, box, clip) {
|
|
195
|
+
// Crop box: the visible region inside `box` is exactly box intersect cropBox (both AABB).
|
|
196
|
+
let testBox = box;
|
|
197
|
+
const cb = clip?.clipBox;
|
|
198
|
+
if (cb?.enabled) {
|
|
199
|
+
const min = { x: Math.max(box.min.x, cb.min[0]), y: Math.max(box.min.y, cb.min[1]), z: Math.max(box.min.z, cb.min[2]) };
|
|
200
|
+
const max = { x: Math.min(box.max.x, cb.max[0]), y: Math.min(box.max.y, cb.max[1]), z: Math.min(box.max.z, cb.max[2]) };
|
|
201
|
+
if (min.x > max.x || min.y > max.y || min.z > max.z)
|
|
202
|
+
return null;
|
|
203
|
+
testBox = { min, max };
|
|
204
|
+
}
|
|
205
|
+
const iv = rayBoxInterval(rayOrigin, rayDirInv, rayDirSign, testBox);
|
|
206
|
+
if (!iv)
|
|
207
|
+
return null;
|
|
208
|
+
let { tmin, tmax } = iv;
|
|
209
|
+
// Section plane: visible where f(t) = (dot(P(t),n) - dist) * side <= 0.
|
|
210
|
+
const sp = clip?.sectionPlane;
|
|
211
|
+
if (sp) {
|
|
212
|
+
const side = sp.flipped ? -1 : 1;
|
|
213
|
+
const [nx, ny, nz] = sp.normal;
|
|
214
|
+
const f0 = (rayOrigin.x * nx + rayOrigin.y * ny + rayOrigin.z * nz - sp.distance) * side;
|
|
215
|
+
const slope = (rayDir.x * nx + rayDir.y * ny + rayDir.z * nz) * side;
|
|
216
|
+
if (Math.abs(slope) < 1e-12) {
|
|
217
|
+
if (f0 > 0)
|
|
218
|
+
return null; // ray runs parallel on the cut-away side
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
const tCross = -f0 / slope;
|
|
222
|
+
if (slope > 0) {
|
|
223
|
+
if (tmin > tCross)
|
|
224
|
+
return null; // whole interval cut away
|
|
225
|
+
if (tmax > tCross)
|
|
226
|
+
tmax = tCross; // visible only up to the plane
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
if (tmax < tCross)
|
|
230
|
+
return null;
|
|
231
|
+
if (tmin < tCross)
|
|
232
|
+
tmin = tCross; // visible only beyond the plane
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
if (tmax < tmin)
|
|
236
|
+
return null;
|
|
237
|
+
}
|
|
238
|
+
return tmin < 0 ? 0 : tmin;
|
|
239
|
+
}
|
|
111
240
|
/**
|
|
112
241
|
* Möller–Trumbore ray-triangle intersection.
|
|
113
242
|
* Returns distance to intersection or null if no hit.
|
|
@@ -155,15 +284,20 @@ export function prepareRayDirInv(rayDir) {
|
|
|
155
284
|
* CPU raycast against bounding-box-only data (post geometry release).
|
|
156
285
|
* Returns the closest hit by bounding-box entry distance.
|
|
157
286
|
*/
|
|
158
|
-
export function raycastBoundingBoxes(rayOrigin, rayDirInv, rayDirSign, boundingBoxes, hiddenIds, isolatedIds) {
|
|
287
|
+
export function raycastBoundingBoxes(rayOrigin, rayDir, rayDirInv, rayDirSign, boundingBoxes, hiddenIds, isolatedIds, clip) {
|
|
159
288
|
let closestHit = null;
|
|
160
289
|
let closestDistance = Infinity;
|
|
290
|
+
const hasClip = clipIsActive(clip);
|
|
161
291
|
for (const [expressId, bbox] of boundingBoxes) {
|
|
162
292
|
if (hiddenIds?.has(expressId))
|
|
163
293
|
continue;
|
|
164
294
|
if (isolatedIds !== null && isolatedIds !== undefined && !isolatedIds.has(expressId))
|
|
165
295
|
continue;
|
|
166
|
-
|
|
296
|
+
// Entry into the VISIBLE part of the box, so a box clipped (fully or
|
|
297
|
+
// partially) by the section plane / crop box can't win the pick.
|
|
298
|
+
const tNear = hasClip
|
|
299
|
+
? clippedBoxEntryDistance(rayOrigin, rayDir, rayDirInv, rayDirSign, bbox, clip)
|
|
300
|
+
: rayBoxDistance(rayOrigin, rayDirInv, rayDirSign, bbox);
|
|
167
301
|
if (tNear !== null && tNear < closestDistance) {
|
|
168
302
|
closestDistance = tNear;
|
|
169
303
|
closestHit = { expressId, distance: tNear };
|
|
@@ -181,9 +315,10 @@ export function raycastBoundingBoxes(rayOrigin, rayDirInv, rayDirSign, boundingB
|
|
|
181
315
|
* @param hiddenIds - Optional set of hidden expressIds to skip
|
|
182
316
|
* @param isolatedIds - Optional set; when non-null only these expressIds are tested
|
|
183
317
|
*/
|
|
184
|
-
export function raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, meshDataMap, getEntityBoundingBox, hiddenIds, isolatedIds) {
|
|
318
|
+
export function raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, meshDataMap, getEntityBoundingBox, hiddenIds, isolatedIds, clip) {
|
|
185
319
|
let closestHit = null;
|
|
186
320
|
let closestDistance = Infinity;
|
|
321
|
+
const hasClip = clipIsActive(clip);
|
|
187
322
|
// First pass: filter by bounding box (fast)
|
|
188
323
|
const candidates = [];
|
|
189
324
|
for (const expressId of meshDataMap.keys()) {
|
|
@@ -194,6 +329,9 @@ export function raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, meshD
|
|
|
194
329
|
const bbox = getEntityBoundingBox(expressId);
|
|
195
330
|
if (!bbox)
|
|
196
331
|
continue;
|
|
332
|
+
// Skip entities the section plane / crop box fully hides.
|
|
333
|
+
if (hasClip && boxFullyClipped(clip, bbox))
|
|
334
|
+
continue;
|
|
197
335
|
if (rayIntersectsBox(rayOrigin, rayDirInv, rayDirSign, bbox)) {
|
|
198
336
|
candidates.push(expressId);
|
|
199
337
|
}
|
|
@@ -231,6 +369,11 @@ export function raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, meshD
|
|
|
231
369
|
const v2 = { x: positions[i2], y: positions[i2 + 1], z: positions[i2 + 2] };
|
|
232
370
|
const t = rayTriangleIntersect(localRayOrigin, rayDir, v0, v1, v2);
|
|
233
371
|
if (t !== null && t < closestDistance) {
|
|
372
|
+
// Reject hits the user has sectioned/cropped away so the pick falls
|
|
373
|
+
// through to the nearest VISIBLE surface behind the cut. World hit =
|
|
374
|
+
// rayOrigin + t*rayDir (the local-frame origin offset cancels).
|
|
375
|
+
if (hasClip && pointClipped(clip, rayOrigin.x + t * rayDir.x, rayOrigin.y + t * rayDir.y, rayOrigin.z + t * rayDir.z))
|
|
376
|
+
continue;
|
|
234
377
|
closestDistance = t;
|
|
235
378
|
closestHit = { expressId, distance: t, modelIndex: piece.modelIndex };
|
|
236
379
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-raycaster.js","sourceRoot":"","sources":["../src/scene-raycaster.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"scene-raycaster.js","sourceRoot":"","sources":["../src/scene-raycaster.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAU/D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAOtC,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,IAA2B;IACtD,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,IAAsC,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS;IAClG,MAAM,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IACrG,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACf,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IAChH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,IAAsC,EAAE,GAAgB;IACtF,MAAM,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QAC/B,+EAA+E;QAC/E,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC,CAAC,mBAAmB;IAC9F,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;QACf,IACE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC,CAAC,2BAA2B;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAe,EACf,SAAe,EAAG,0BAA0B;AAC5C,UAAoC,EACpC,GAAgB;IAEhB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,GAAG,QAAQ,CAAC;IAEpB,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QAC7D,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,KAAK,CAAC;QAC/C,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,OAAO,IAAI,IAAI,CAAC,CAAC;AACnB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,SAAe,EACf,SAAe,EACf,UAAoC,EACpC,GAAgB;IAEhB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAElC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,GAAG,QAAQ,CAAC;IAEpB,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,mDAAmD;QACnD,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACrE,IAAI,GAAG,EAAE,CAAC;QACV,IAAI,GAAG,EAAE,CAAC;IACZ,CAAC;IAED,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,SAAS;IACT,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACpE,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;QACxE,IAAI,IAAI,GAAG,KAAK,IAAI,KAAK,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;QAC/B,IAAI,KAAK,GAAG,IAAI;YAAE,IAAI,GAAG,KAAK,CAAC;IACjC,CAAC;IAED,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1B,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7B,CAAC;AAED,2EAA2E;AAC3E,SAAS,cAAc,CACrB,SAAe,EACf,SAAe,EACf,UAAoC,EACpC,GAAgB;IAEhB,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC;IACrB,IAAI,IAAI,GAAG,QAAQ,CAAC;IACpB,MAAM,IAAI,GAAmB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACnB,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC7B,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;QAC9E,CAAC;aAAM,CAAC;YACN,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YACvE,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;YAC3E,IAAI,EAAE,GAAG,IAAI;gBAAE,IAAI,GAAG,EAAE,CAAC;YACzB,IAAI,EAAE,GAAG,IAAI;gBAAE,IAAI,GAAG,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,IAAI,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,SAAe,EACf,MAAY,EACZ,SAAe,EACf,UAAoC,EACpC,GAAgB,EAChB,IAAsC;IAEtC,0FAA0F;IAC1F,IAAI,OAAO,GAAG,GAAG,CAAC;IAClB,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,CAAC;IACzB,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC;QAChB,MAAM,GAAG,GAAS,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9H,MAAM,GAAG,GAAS,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9H,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QACjE,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACzB,CAAC;IACD,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,CAAC,EAAE;QAAE,OAAO,IAAI,CAAC;IACrB,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAExB,wEAAwE;IACxE,MAAM,EAAE,GAAG,IAAI,EAAE,YAAY,CAAC;IAC9B,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC;QAC/B,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;QACzF,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,CAAC;QACrE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,CAAC;YAC5B,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC,CAAC,yCAAyC;QACpE,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,CAAC;YAC3B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,IAAI,IAAI,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAC,CAAO,0BAA0B;gBAChE,IAAI,IAAI,GAAG,MAAM;oBAAE,IAAI,GAAG,MAAM,CAAC,CAAM,+BAA+B;YACxE,CAAC;iBAAM,CAAC;gBACN,IAAI,IAAI,GAAG,MAAM;oBAAE,OAAO,IAAI,CAAC;gBAC/B,IAAI,IAAI,GAAG,MAAM;oBAAE,IAAI,GAAG,MAAM,CAAC,CAAM,gCAAgC;YACzE,CAAC;QACH,CAAC;QACD,IAAI,IAAI,GAAG,IAAI;YAAE,OAAO,IAAI,CAAC;IAC/B,CAAC;IACD,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAe,EACf,MAAY,EACZ,EAAQ,EACR,EAAQ,EACR,EAAQ;IAER,MAAM,OAAO,GAAG,IAAI,CAAC;IAErB,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,OAAO;QAAE,OAAO,IAAI,CAAC,CAAC,2BAA2B;IAEzE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAClB,MAAM,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAElC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAEpC,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEvC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG;QAAE,OAAO,IAAI,CAAC;IAExC,MAAM,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEtC,IAAI,CAAC,GAAG,OAAO;QAAE,OAAO,CAAC,CAAC,CAAC,mBAAmB;IAC9C,OAAO,IAAI,CAAC;AACd,CAAC;AASD;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAY;IAC3C,MAAM,SAAS,GAAS;QACtB,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QAC7C,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;QAC7C,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ;KAC9C,CAAC;IACF,MAAM,UAAU,GAA6B;QAC3C,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvB,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACxB,CAAC;IACF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,SAAe,EACf,MAAY,EACZ,SAAe,EACf,UAAoC,EACpC,aAAuC,EACvC,SAAuB,EACvB,WAAgC,EAChC,IAA2B;IAE3B,IAAI,UAAU,GAAsB,IAAI,CAAC;IACzC,IAAI,eAAe,GAAG,QAAQ,CAAC;IAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnC,KAAK,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,aAAa,EAAE,CAAC;QAC9C,IAAI,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAE/F,qEAAqE;QACrE,iEAAiE;QACjE,MAAM,KAAK,GAAG,OAAO;YACnB,CAAC,CAAC,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,CAAC;YAC/E,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QAC3D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,GAAG,eAAe,EAAE,CAAC;YAC9C,eAAe,GAAG,KAAK,CAAC;YACxB,UAAU,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAAe,EACf,MAAY,EACZ,SAAe,EACf,UAAoC,EACpC,WAA8J,EAC9J,oBAA+D,EAC/D,SAAuB,EACvB,WAAgC,EAChC,IAA2B;IAE3B,IAAI,UAAU,GAAsB,IAAI,CAAC;IACzC,IAAI,eAAe,GAAG,QAAQ,CAAC;IAC/B,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEnC,4CAA4C;IAC5C,MAAM,UAAU,GAAa,EAAE,CAAC;IAEhC,KAAK,MAAM,SAAS,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;QAC3C,IAAI,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QACxC,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,SAAS;QAE/F,MAAM,IAAI,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAC7C,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,0DAA0D;QAC1D,IAAI,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC;YAAE,SAAS;QAErD,IAAI,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC;YAC7D,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,SAAS;QAEtB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;YAClC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YAC9B,MAAM,cAAc,GAAG,KAAK,CAAC,SAAS,CAAC;YAEvC,0EAA0E;YAC1E,0EAA0E;YAC1E,yEAAyE;YACzE,mEAAmE;YACnE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;YACvB,MAAM,cAAc,GAAS,CAAC;gBAC5B,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gBACzE,CAAC,CAAC,SAAS,CAAC;YAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,+DAA+D;gBAC/D,eAAe;gBACf,IAAI,cAAc,EAAE,CAAC;oBACnB,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;oBAC3B,IAAI,cAAc,CAAC,OAAO,CAAC,KAAK,SAAS;wBAAE,SAAS;gBACtD,CAAC;gBAED,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC1B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;gBAE9B,MAAM,EAAE,GAAS,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClF,MAAM,EAAE,GAAS,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBAClF,MAAM,EAAE,GAAS,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC;gBAElF,MAAM,CAAC,GAAG,oBAAoB,CAAC,cAAc,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;gBACnE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC;oBACtC,oEAAoE;oBACpE,qEAAqE;oBACrE,gEAAgE;oBAChE,IAAI,OAAO,IAAI,YAAY,CACzB,IAAI,EACJ,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,EAC1B,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,EAC1B,SAAS,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAC3B;wBAAE,SAAS;oBACZ,eAAe,GAAG,CAAC,CAAC;oBACpB,UAAU,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
|
package/dist/scene.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Scene graph and mesh management
|
|
3
3
|
*/
|
|
4
|
-
import type { Mesh, BatchedMesh, Vec3 } from './types.js';
|
|
4
|
+
import type { Mesh, BatchedMesh, Vec3, PickClipState } from './types.js';
|
|
5
5
|
import type { MeshData } from '@ifc-lite/geometry';
|
|
6
6
|
import type { RenderPipeline } from './pipeline.js';
|
|
7
7
|
import { type BoundingBox, type RaycastHit } from './scene-raycaster.js';
|
|
@@ -567,6 +567,6 @@ export declare class Scene {
|
|
|
567
567
|
* Returns expressId and modelIndex of closest hit, or null.
|
|
568
568
|
* Delegates to extracted raycaster utilities.
|
|
569
569
|
*/
|
|
570
|
-
raycast(rayOrigin: Vec3, rayDir: Vec3, hiddenIds?: Set<number>, isolatedIds?: Set<number> | null): RaycastHit | null;
|
|
570
|
+
raycast(rayOrigin: Vec3, rayDir: Vec3, hiddenIds?: Set<number>, isolatedIds?: Set<number> | null, clip?: PickClipState | null): RaycastHit | null;
|
|
571
571
|
}
|
|
572
572
|
//# sourceMappingURL=scene.d.ts.map
|
package/dist/scene.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
|
package/dist/scene.js
CHANGED
|
@@ -2431,14 +2431,14 @@ export class Scene {
|
|
|
2431
2431
|
* Returns expressId and modelIndex of closest hit, or null.
|
|
2432
2432
|
* Delegates to extracted raycaster utilities.
|
|
2433
2433
|
*/
|
|
2434
|
-
raycast(rayOrigin, rayDir, hiddenIds, isolatedIds) {
|
|
2434
|
+
raycast(rayOrigin, rayDir, hiddenIds, isolatedIds, clip) {
|
|
2435
2435
|
const { rayDirInv, rayDirSign } = prepareRayDirInv(rayDir);
|
|
2436
2436
|
// When geometry data has been released, use bounding-box-only raycast.
|
|
2437
2437
|
if (this.geometryReleased) {
|
|
2438
|
-
return raycastBoundingBoxes(rayOrigin, rayDirInv, rayDirSign, this.boundingBoxes, hiddenIds, isolatedIds);
|
|
2438
|
+
return raycastBoundingBoxes(rayOrigin, rayDir, rayDirInv, rayDirSign, this.boundingBoxes, hiddenIds, isolatedIds, clip);
|
|
2439
2439
|
}
|
|
2440
2440
|
// Full triangle-level raycast with bounding-box pre-filter
|
|
2441
|
-
const flatHit = raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, this.meshDataMap, (id) => this.getEntityBoundingBox(id), hiddenIds, isolatedIds);
|
|
2441
|
+
const flatHit = raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, this.meshDataMap, (id) => this.getEntityBoundingBox(id), hiddenIds, isolatedIds, clip);
|
|
2442
2442
|
// Instanced-only occurrences live in the shard, not meshDataMap, so the CPU
|
|
2443
2443
|
// pick fallback would miss them. Materialize triangles lazily ONLY for
|
|
2444
2444
|
// entities whose world AABB the ray actually hits (never the whole instanced
|
|
@@ -2459,7 +2459,7 @@ export class Scene {
|
|
|
2459
2459
|
instancedMap.set(eid, pieces);
|
|
2460
2460
|
}
|
|
2461
2461
|
if (instancedMap.size > 0) {
|
|
2462
|
-
instancedHit = raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, instancedMap, (id) => this.getInstancedEntityBounds(id), hiddenIds, isolatedIds);
|
|
2462
|
+
instancedHit = raycastTriangles(rayOrigin, rayDir, rayDirInv, rayDirSign, instancedMap, (id) => this.getInstancedEntityBounds(id), hiddenIds, isolatedIds, clip);
|
|
2463
2463
|
}
|
|
2464
2464
|
}
|
|
2465
2465
|
if (flatHit && instancedHit) {
|