@ifc-lite/renderer 1.20.0 → 1.21.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.
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Routing predicates for the opaque/transparent pipeline split.
3
+ *
4
+ * Lens / Pset colour overrides are drawn by a second "overlay paint" pass
5
+ * whose pipeline uses `depthCompare: 'equal'` so it only paints where the
6
+ * base draw already wrote depth. The transparent pipeline runs with
7
+ * `depthWriteEnabled: false`, so a colour override on an entity whose base
8
+ * draw is transparent (IfcSpace, IfcOpeningElement, glass, …) silently
9
+ * fails — the equality test never matches.
10
+ *
11
+ * To fix that, the renderer promotes the base draw of overridden entities
12
+ * to the opaque pipeline so depth gets written and the overlay paint
13
+ * succeeds. To avoid turning non-overridden batchmates opaque, batches
14
+ * with mixed override membership are split into a "promoted" sub-batch
15
+ * (all overridden) and a "remaining" sub-batch (all not), each routed
16
+ * through its appropriate pipeline.
17
+ *
18
+ * These helpers express the routing decision as pure functions so they
19
+ * can be unit-tested without a GPU device. See issue #677.
20
+ */
21
+ export type RGBAOverrideMap = ReadonlyMap<number, readonly [number, number, number, number]>;
22
+ /**
23
+ * Decide whether a mesh should render through the transparent pipeline.
24
+ *
25
+ * @param alpha Resolved alpha for the mesh (post `transparencyOverrides`).
26
+ * @param transparency Optional PBR transparency (IfcSurfaceStyleRendering).
27
+ * @param expressId The mesh's expressId, used to consult `colorOverrides`.
28
+ * @param colorOverrides Active lens / Pset override map, or null when none.
29
+ *
30
+ * @returns `true` if the mesh should route to the transparent pipeline.
31
+ * `false` means route to the opaque pipeline (writes depth).
32
+ */
33
+ export declare function shouldRouteMeshTransparent(alpha: number, transparency: number, expressId: number, colorOverrides: RGBAOverrideMap | null): boolean;
34
+ /**
35
+ * Decide whether a batch (or sub-batch) should render through the transparent
36
+ * pipeline. A batch is promoted to opaque **only when every id in it** carries
37
+ * a deliberate override — i.e. when promotion can't make any unrelated
38
+ * batchmate opaque. Mixed batches must be split upstream via
39
+ * {@link splitVisibleIdsByPromotion}; the splitter calls this helper on each
40
+ * homogeneous sub-batch.
41
+ *
42
+ * @param alpha Resolved batch alpha (post `transparencyOverrides`).
43
+ * @param expressIds The (sub-)batch's expressIds.
44
+ * @param colorOverrides Active lens / Pset override map, or null when none.
45
+ */
46
+ export declare function shouldRouteBatchTransparent(alpha: number, expressIds: ReadonlyArray<number>, colorOverrides: RGBAOverrideMap | null): boolean;
47
+ /**
48
+ * Partition a visible-id set into the subset that needs opaque-pipeline
49
+ * promotion (deliberate colour overrides, alpha ≥ 0.2) and the rest.
50
+ *
51
+ * Used by the renderer's batch loop when a transparent parent batch has
52
+ * mixed override membership: each subset becomes its own partial sub-batch
53
+ * so non-overridden batchmates keep their native transparent routing.
54
+ *
55
+ * Returns `null` when no split is needed — either the override map is empty
56
+ * or no id in `visibleIds` carries a deliberate override. The caller should
57
+ * then route the whole input through its native pipeline.
58
+ */
59
+ export declare function splitVisibleIdsByPromotion(visibleIds: Iterable<number>, colorOverrides: RGBAOverrideMap | null): {
60
+ promoted: Set<number>;
61
+ remaining: Set<number>;
62
+ } | null;
63
+ //# sourceMappingURL=overlay-routing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-routing.d.ts","sourceRoot":"","sources":["../src/overlay-routing.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAkB7F;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,eAAe,GAAG,IAAI,GACrC,OAAO,CAUT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,EACjC,cAAc,EAAE,eAAe,GAAG,IAAI,GACrC,OAAO,CAaT;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,0BAA0B,CACxC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,EAC5B,cAAc,EAAE,eAAe,GAAG,IAAI,GACrC;IAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;CAAE,GAAG,IAAI,CAW1D"}
@@ -0,0 +1,98 @@
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
+ const OPAQUE_ALPHA_CUTOFF = 0.99;
5
+ /**
6
+ * Minimum override alpha that triggers opaque-pipeline promotion.
7
+ *
8
+ * Lens "ghost" colours used to fade unmatched entities sit at alpha 0.15
9
+ * (see `packages/lens/src/colors.ts`). Promoting a ghost overlay would
10
+ * cause a previously-near-invisible IfcSpace to render as an opaque
11
+ * cyan box with a faint gray tint — a regression for users running lens
12
+ * rules that don't target IfcSpace. Anything at this threshold or above
13
+ * was clearly a deliberate colour choice (colorize, transparent action,
14
+ * IDS pass/fail) and gets promoted; ghost-tier overlays are left in the
15
+ * native transparent path (where they remain invisible, same as today).
16
+ */
17
+ const OVERRIDE_PROMOTION_MIN_ALPHA = 0.2;
18
+ /**
19
+ * Decide whether a mesh should render through the transparent pipeline.
20
+ *
21
+ * @param alpha Resolved alpha for the mesh (post `transparencyOverrides`).
22
+ * @param transparency Optional PBR transparency (IfcSurfaceStyleRendering).
23
+ * @param expressId The mesh's expressId, used to consult `colorOverrides`.
24
+ * @param colorOverrides Active lens / Pset override map, or null when none.
25
+ *
26
+ * @returns `true` if the mesh should route to the transparent pipeline.
27
+ * `false` means route to the opaque pipeline (writes depth).
28
+ */
29
+ export function shouldRouteMeshTransparent(alpha, transparency, expressId, colorOverrides) {
30
+ const nativelyTransparent = alpha < OPAQUE_ALPHA_CUTOFF || transparency > 0.01;
31
+ if (!nativelyTransparent)
32
+ return false;
33
+ // Lens / Pset override above the ghost threshold → promote to opaque
34
+ // so the overlay paint (depthCompare 'equal') has matching depth.
35
+ if (colorOverrides != null) {
36
+ const override = colorOverrides.get(expressId);
37
+ if (override != null && override[3] >= OVERRIDE_PROMOTION_MIN_ALPHA)
38
+ return false;
39
+ }
40
+ return true;
41
+ }
42
+ /**
43
+ * Decide whether a batch (or sub-batch) should render through the transparent
44
+ * pipeline. A batch is promoted to opaque **only when every id in it** carries
45
+ * a deliberate override — i.e. when promotion can't make any unrelated
46
+ * batchmate opaque. Mixed batches must be split upstream via
47
+ * {@link splitVisibleIdsByPromotion}; the splitter calls this helper on each
48
+ * homogeneous sub-batch.
49
+ *
50
+ * @param alpha Resolved batch alpha (post `transparencyOverrides`).
51
+ * @param expressIds The (sub-)batch's expressIds.
52
+ * @param colorOverrides Active lens / Pset override map, or null when none.
53
+ */
54
+ export function shouldRouteBatchTransparent(alpha, expressIds, colorOverrides) {
55
+ if (alpha >= OPAQUE_ALPHA_CUTOFF)
56
+ return false;
57
+ if (colorOverrides == null || colorOverrides.size === 0 || expressIds.length === 0) {
58
+ return true;
59
+ }
60
+ // Promote ONLY when every id carries a deliberate override. Mixed batches
61
+ // must be split upstream — promoting them whole would turn non-overridden
62
+ // batchmates opaque (regression flagged on PR #682).
63
+ for (const eid of expressIds) {
64
+ const override = colorOverrides.get(eid);
65
+ if (override == null || override[3] < OVERRIDE_PROMOTION_MIN_ALPHA)
66
+ return true;
67
+ }
68
+ return false;
69
+ }
70
+ /**
71
+ * Partition a visible-id set into the subset that needs opaque-pipeline
72
+ * promotion (deliberate colour overrides, alpha ≥ 0.2) and the rest.
73
+ *
74
+ * Used by the renderer's batch loop when a transparent parent batch has
75
+ * mixed override membership: each subset becomes its own partial sub-batch
76
+ * so non-overridden batchmates keep their native transparent routing.
77
+ *
78
+ * Returns `null` when no split is needed — either the override map is empty
79
+ * or no id in `visibleIds` carries a deliberate override. The caller should
80
+ * then route the whole input through its native pipeline.
81
+ */
82
+ export function splitVisibleIdsByPromotion(visibleIds, colorOverrides) {
83
+ if (colorOverrides == null || colorOverrides.size === 0)
84
+ return null;
85
+ const promoted = new Set();
86
+ const remaining = new Set();
87
+ for (const id of visibleIds) {
88
+ const o = colorOverrides.get(id);
89
+ if (o != null && o[3] >= OVERRIDE_PROMOTION_MIN_ALPHA)
90
+ promoted.add(id);
91
+ else
92
+ remaining.add(id);
93
+ }
94
+ if (promoted.size === 0)
95
+ return null;
96
+ return { promoted, remaining };
97
+ }
98
+ //# sourceMappingURL=overlay-routing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-routing.js","sourceRoot":"","sources":["../src/overlay-routing.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAyB/D,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC;;;;;;;;;;;GAWG;AACH,MAAM,4BAA4B,GAAG,GAAG,CAAC;AAEzC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,0BAA0B,CACxC,KAAa,EACb,YAAoB,EACpB,SAAiB,EACjB,cAAsC;IAEtC,MAAM,mBAAmB,GAAG,KAAK,GAAG,mBAAmB,IAAI,YAAY,GAAG,IAAI,CAAC;IAC/E,IAAI,CAAC,mBAAmB;QAAE,OAAO,KAAK,CAAC;IACvC,qEAAqE;IACrE,kEAAkE;IAClE,IAAI,cAAc,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,IAAI,4BAA4B;YAAE,OAAO,KAAK,CAAC;IACpF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,2BAA2B,CACzC,KAAa,EACb,UAAiC,EACjC,cAAsC;IAEtC,IAAI,KAAK,IAAI,mBAAmB;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnF,OAAO,IAAI,CAAC;IACd,CAAC;IACD,0EAA0E;IAC1E,0EAA0E;IAC1E,qDAAqD;IACrD,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACzC,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,4BAA4B;YAAE,OAAO,IAAI,CAAC;IAClF,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,0BAA0B,CACxC,UAA4B,EAC5B,cAAsC;IAEtC,IAAI,cAAc,IAAI,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrE,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,4BAA4B;YAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;YACnE,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC"}
package/dist/scene.d.ts CHANGED
@@ -119,6 +119,61 @@ export declare class Scene {
119
119
  * Check if there are pending batch rebuilds
120
120
  */
121
121
  hasPendingBatches(): boolean;
122
+ /**
123
+ * Remove every mesh registered for `expressId` from the scene.
124
+ * Affected buckets are marked for rebuild on the next call to
125
+ * `rebuildPendingBatches`, so the GPU drops them on the next
126
+ * frame. Returns `true` when at least one mesh was removed.
127
+ *
128
+ * Used by the viewer's authoring actions (split, delete) to
129
+ * make tombstoned IFC entities disappear from the rendered
130
+ * scene — the previous v1 workaround was to hide them via
131
+ * `hiddenIds`, but that left the mesh in GPU memory and inside
132
+ * raycast bounds. This is the proper removal path.
133
+ *
134
+ * Notes:
135
+ * - For color-merged meshes (the `entityIds` per-vertex case)
136
+ * a single MeshData often hosts many entities. We do NOT
137
+ * drop the whole mesh in that case — that would also remove
138
+ * the other entities — but we DO clear the bbox + meshDataMap
139
+ * for the requested expressId, so picking and selection stop
140
+ * finding the removed entity. Re-rendering the merged mesh
141
+ * unchanged is the right behaviour because color-merged
142
+ * batches are an optimisation: the geometry is still real;
143
+ * the IFC tombstone just means we ignore it for queries.
144
+ */
145
+ removeMeshesForEntity(expressId: number): boolean;
146
+ /**
147
+ * Bulk variant of `removeMeshesForEntity`. Avoids re-marking the
148
+ * same bucket key once per entity in the common "split N walls"
149
+ * batch. Returns the number of entities that had at least one
150
+ * dedicated mesh removed.
151
+ */
152
+ removeMeshesForEntities(expressIds: Iterable<number>): number;
153
+ /**
154
+ * Translate every mesh for `expressId` by `delta` in renderer
155
+ * world frame (Y-up). Modifies `positions` in place and marks
156
+ * the affected bucket(s) for re-batch on the next call to
157
+ * `rebuildPendingBatches`.
158
+ *
159
+ * Bounding boxes are cleared for the entity so the next bounds
160
+ * query recomputes from the new positions; raycast bounds will
161
+ * therefore lag by exactly one query, which is acceptable for
162
+ * the drag-end → fresh-pick interaction the gizmo drives.
163
+ *
164
+ * Returns `true` when at least one mesh was modified. Used by
165
+ * the viewer's `translateEntity` action to keep the rendered
166
+ * mesh in sync with the IFC coords mutation.
167
+ *
168
+ * Color-merged meshes (shared by many entities via per-vertex
169
+ * `entityIds`) cannot be translated for a single entity without
170
+ * walking the entityIds array vertex by vertex; this helper
171
+ * skips them and returns `false` so the caller can fall back
172
+ * to a full reload if needed.
173
+ */
174
+ translateMeshesForEntity(expressId: number, delta: [number, number, number]): boolean;
175
+ /** Bulk variant of `translateMeshesForEntity`. */
176
+ translateMeshesForEntities(updates: Map<number, [number, number, number]>): number;
122
177
  /**
123
178
  * Queue meshes for deferred GPU upload.
124
179
  * Instant (no GPU work) — safe to call from React effects.
@@ -259,6 +314,21 @@ export declare class Scene {
259
314
  getOverrideBatches(): BatchedMesh[];
260
315
  /** Check if color overrides are active */
261
316
  hasColorOverrides(): boolean;
317
+ /**
318
+ * Get the active expressId → RGBA override map, or null if none.
319
+ *
320
+ * Used by the renderer to promote overridden meshes/batches to the opaque
321
+ * pipeline so the overlay paint pass (depthCompare 'equal') finds matching
322
+ * depth. Without this, an override on an entity that defaults to the
323
+ * transparent pipeline (IfcSpace, IfcOpeningElement, glass, …) silently
324
+ * fails to paint — the transparent pipeline doesn't write depth, so the
325
+ * equality test rejects every fragment.
326
+ *
327
+ * Returns a `ReadonlyMap` view: the renderer holds the only writeable
328
+ * reference (via `setColorOverrides`) so routing decisions stay in sync
329
+ * with the overlay batches we built from the same data.
330
+ */
331
+ getColorOverrides(): ReadonlyMap<number, readonly [number, number, number, number]> | null;
262
332
  /** Destroy GPU resources for overlay batches */
263
333
  private destroyOverrideBatches;
264
334
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scene.d.ts","sourceRoot":"","sources":["../src/scene.ts"],"names":[],"mappings":"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"}