@ifc-lite/renderer 1.2.1 → 1.4.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,197 @@
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
+ // Safety limit - warn before approaching 32-bit limit
5
+ // WebGPU picking uses r32uint (max 4,294,967,295)
6
+ const MAX_SAFE_OFFSET = 2_000_000_000;
7
+ /**
8
+ * Central registry for multi-model federation
9
+ * Manages ID offsets and provides O(1) to-global / O(log N) from-global transformations
10
+ */
11
+ export class FederationRegistry {
12
+ modelRanges = new Map();
13
+ sortedRanges = []; // Sorted by offset for binary search
14
+ nextOffset = 0;
15
+ /**
16
+ * Register a new model and get its ID offset
17
+ * Call this BEFORE adding meshes to the scene
18
+ *
19
+ * @param modelId Unique identifier for this model
20
+ * @param maxExpressId Highest expressId in this model (scan meshes first)
21
+ * @returns The offset to add to all expressIds for this model
22
+ */
23
+ registerModel(modelId, maxExpressId) {
24
+ // Validate inputs
25
+ if (!modelId || typeof modelId !== 'string') {
26
+ throw new Error(`[FederationRegistry] Invalid modelId: ${modelId}`);
27
+ }
28
+ if (typeof maxExpressId !== 'number' || !Number.isFinite(maxExpressId) || maxExpressId < 0) {
29
+ throw new Error(`[FederationRegistry] Invalid maxExpressId: ${maxExpressId} for model ${modelId}`);
30
+ }
31
+ // Check for duplicate registration
32
+ if (this.modelRanges.has(modelId)) {
33
+ const existing = this.modelRanges.get(modelId);
34
+ console.warn(`[FederationRegistry] Model ${modelId} already registered with offset ${existing.offset}`);
35
+ return existing.offset;
36
+ }
37
+ // Check for overflow
38
+ if (this.nextOffset + maxExpressId > MAX_SAFE_OFFSET) {
39
+ throw new Error(`[FederationRegistry] Cannot register model: would exceed safe ID limit. ` +
40
+ `Current offset: ${this.nextOffset}, model max ID: ${maxExpressId}. ` +
41
+ `Please unload some models first.`);
42
+ }
43
+ const offset = this.nextOffset;
44
+ const range = { modelId, offset, maxExpressId };
45
+ this.modelRanges.set(modelId, range);
46
+ this.sortedRanges.push(range);
47
+ // Keep sorted by offset for binary search
48
+ this.sortedRanges.sort((a, b) => a.offset - b.offset);
49
+ // Next model starts after this model's range (+1 gap for safety)
50
+ this.nextOffset = offset + maxExpressId + 1;
51
+ return offset;
52
+ }
53
+ /**
54
+ * Unregister a model (when removed from viewer)
55
+ * Note: The offset space is NOT reclaimed to avoid invalidating any
56
+ * existing references (selections, undo stack, etc.)
57
+ */
58
+ unregisterModel(modelId) {
59
+ const range = this.modelRanges.get(modelId);
60
+ if (!range) {
61
+ console.warn(`[FederationRegistry] Cannot unregister unknown model: ${modelId}`);
62
+ return;
63
+ }
64
+ this.modelRanges.delete(modelId);
65
+ this.sortedRanges = this.sortedRanges.filter(r => r.modelId !== modelId);
66
+ // Note: nextOffset is NOT reduced - offset space is burned
67
+ }
68
+ /**
69
+ * Transform a local expressId to a globally unique ID
70
+ * O(1) - direct map lookup + addition
71
+ */
72
+ toGlobalId(modelId, expressId) {
73
+ const range = this.modelRanges.get(modelId);
74
+ if (!range) {
75
+ console.warn(`[FederationRegistry] Unknown model: ${modelId}, returning expressId unchanged`);
76
+ return expressId;
77
+ }
78
+ return expressId + range.offset;
79
+ }
80
+ /**
81
+ * Transform a global ID back to model + local expressId
82
+ * O(log N) - binary search on sorted ranges
83
+ */
84
+ fromGlobalId(globalId) {
85
+ if (this.sortedRanges.length === 0) {
86
+ return null;
87
+ }
88
+ // Binary search to find which range contains this globalId
89
+ const range = this.binarySearchRange(globalId);
90
+ if (!range) {
91
+ return null;
92
+ }
93
+ // Verify the globalId is actually within this model's range
94
+ const localId = globalId - range.offset;
95
+ if (localId < 0 || localId > range.maxExpressId) {
96
+ // globalId is in the gap between models
97
+ return null;
98
+ }
99
+ return {
100
+ modelId: range.modelId,
101
+ expressId: localId,
102
+ };
103
+ }
104
+ /**
105
+ * Get the model ID that owns a global ID (without computing expressId)
106
+ * O(log N)
107
+ */
108
+ getModelForGlobalId(globalId) {
109
+ const result = this.fromGlobalId(globalId);
110
+ return result?.modelId ?? null;
111
+ }
112
+ /**
113
+ * Get the offset for a model (useful for batch transformations)
114
+ */
115
+ getOffset(modelId) {
116
+ return this.modelRanges.get(modelId)?.offset ?? null;
117
+ }
118
+ /**
119
+ * Check if a model is registered
120
+ */
121
+ hasModel(modelId) {
122
+ return this.modelRanges.has(modelId);
123
+ }
124
+ /**
125
+ * Get all registered model IDs
126
+ */
127
+ getModelIds() {
128
+ return Array.from(this.modelRanges.keys());
129
+ }
130
+ /**
131
+ * Get the number of registered models
132
+ */
133
+ getModelCount() {
134
+ return this.modelRanges.size;
135
+ }
136
+ /**
137
+ * Get all global IDs for a model (as a range)
138
+ * Useful for bulk operations like "hide all entities in model X"
139
+ */
140
+ getGlobalIdRange(modelId) {
141
+ const range = this.modelRanges.get(modelId);
142
+ if (!range)
143
+ return null;
144
+ return {
145
+ start: range.offset,
146
+ end: range.offset + range.maxExpressId,
147
+ };
148
+ }
149
+ /**
150
+ * Check if a global ID belongs to a specific model
151
+ * O(1) when we know the model
152
+ */
153
+ isInModel(globalId, modelId) {
154
+ const range = this.modelRanges.get(modelId);
155
+ if (!range)
156
+ return false;
157
+ const localId = globalId - range.offset;
158
+ return localId >= 0 && localId <= range.maxExpressId;
159
+ }
160
+ /**
161
+ * Clear all registrations (for full reset)
162
+ */
163
+ clear() {
164
+ this.modelRanges.clear();
165
+ this.sortedRanges = [];
166
+ this.nextOffset = 0;
167
+ }
168
+ /**
169
+ * Binary search to find the range that could contain a globalId
170
+ * Returns the range with the largest offset that is <= globalId
171
+ */
172
+ binarySearchRange(globalId) {
173
+ const ranges = this.sortedRanges;
174
+ if (ranges.length === 0)
175
+ return null;
176
+ // If globalId is before first range, no match
177
+ if (globalId < ranges[0].offset)
178
+ return null;
179
+ let lo = 0;
180
+ let hi = ranges.length - 1;
181
+ // Find the rightmost range where offset <= globalId
182
+ while (lo < hi) {
183
+ const mid = Math.floor((lo + hi + 1) / 2);
184
+ if (ranges[mid].offset <= globalId) {
185
+ lo = mid;
186
+ }
187
+ else {
188
+ hi = mid - 1;
189
+ }
190
+ }
191
+ return ranges[lo];
192
+ }
193
+ }
194
+ // Singleton instance for the application
195
+ // Export both the class (for testing) and a singleton instance
196
+ export const federationRegistry = new FederationRegistry();
197
+ //# sourceMappingURL=federation-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-registry.js","sourceRoot":"","sources":["../src/federation-registry.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,9 +8,13 @@ export { Scene } from './scene.js';
8
8
  export { Picker } from './picker.js';
9
9
  export { MathUtils } from './math.js';
10
10
  export { SectionPlaneRenderer } from './section-plane.js';
11
+ export { Section2DOverlayRenderer } from './section-2d-overlay.js';
12
+ export type { Section2DOverlayOptions, CutPolygon2D, DrawingLine2D } from './section-2d-overlay.js';
11
13
  export { Raycaster } from './raycaster.js';
12
14
  export { SnapDetector, SnapType } from './snap-detector.js';
13
15
  export { BVH } from './bvh.js';
16
+ export { FederationRegistry, federationRegistry } from './federation-registry.js';
17
+ export type { ModelRange, GlobalIdLookup } from './federation-registry.js';
14
18
  export * from './types.js';
15
19
  export type { Ray, Vec3, Intersection } from './raycaster.js';
16
20
  export type { SnapTarget, SnapOptions, EdgeLockInput, MagneticSnapResult } from './snap-detector.js';
@@ -18,7 +22,8 @@ export { ZeroCopyGpuUploader, createZeroCopyUploader, type WasmMemoryHandle, typ
18
22
  import { RenderPipeline } from './pipeline.js';
19
23
  import { Camera } from './camera.js';
20
24
  import { Scene } from './scene.js';
21
- import type { RenderOptions, PickOptions, Mesh } from './types.js';
25
+ import type { RenderOptions, PickOptions, PickResult, Mesh } from './types.js';
26
+ import { type CutPolygon2D, type DrawingLine2D } from './section-2d-overlay.js';
22
27
  import type { InstancedGeometry } from '@ifc-lite/wasm';
23
28
  import { Raycaster, type Intersection } from './raycaster.js';
24
29
  import { SnapDetector, type SnapTarget, type SnapOptions, type EdgeLockInput, type MagneticSnapResult } from './snap-detector.js';
@@ -34,17 +39,42 @@ export declare class Renderer {
34
39
  private picker;
35
40
  private canvas;
36
41
  private sectionPlaneRenderer;
42
+ private section2DOverlayRenderer;
37
43
  private modelBounds;
38
44
  private raycaster;
39
45
  private snapDetector;
40
46
  private bvh;
41
47
  private bvhCache;
42
48
  private readonly BVH_THRESHOLD;
49
+ private lastRenderErrorTime;
50
+ private readonly RENDER_ERROR_THROTTLE_MS;
43
51
  constructor(canvas: HTMLCanvasElement);
44
52
  /**
45
53
  * Initialize renderer
46
54
  */
47
55
  init(): Promise<void>;
56
+ /**
57
+ * Load geometry from GeometryResult or MeshData array
58
+ * This is the main entry point for loading IFC geometry into the renderer
59
+ *
60
+ * @param geometry - Either a GeometryResult from geometry.process() or an array of MeshData
61
+ */
62
+ loadGeometry(geometry: import('@ifc-lite/geometry').GeometryResult | import('@ifc-lite/geometry').MeshData[]): void;
63
+ /**
64
+ * Add multiple meshes to the scene (convenience method for streaming)
65
+ *
66
+ * @param meshes - Array of MeshData to add
67
+ * @param isStreaming - If true, throttles batch rebuilding for better streaming performance
68
+ */
69
+ addMeshes(meshes: import('@ifc-lite/geometry').MeshData[], isStreaming?: boolean): void;
70
+ /**
71
+ * Update model bounds from mesh data
72
+ */
73
+ private updateModelBounds;
74
+ /**
75
+ * Fit camera to view all loaded geometry
76
+ */
77
+ fitToView(): void;
48
78
  /**
49
79
  * Add mesh to scene with per-mesh GPU resources for unique colors
50
80
  */
@@ -80,8 +110,9 @@ export declare class Renderer {
80
110
  /**
81
111
  * Pick object at screen coordinates
82
112
  * Respects visibility filtering so users can only select visible elements
113
+ * Returns PickResult with expressId and modelIndex for multi-model support
83
114
  */
84
- pick(x: number, y: number, options?: PickOptions): Promise<number | null>;
115
+ pick(x: number, y: number, options?: PickOptions): Promise<PickResult | null>;
85
116
  /**
86
117
  * Raycast into the scene to get precise 3D intersection point
87
118
  * This is more accurate than pick() as it returns the exact surface point
@@ -123,6 +154,25 @@ export declare class Renderer {
123
154
  resize(width: number, height: number): void;
124
155
  getCamera(): Camera;
125
156
  getScene(): Scene;
157
+ /**
158
+ * Upload 2D section drawing data for 3D overlay rendering
159
+ * Call this when a 2D drawing is generated to display it on the section plane
160
+ * Uses same position calculation as section plane: sectionRange min/max if provided, else modelBounds
161
+ */
162
+ uploadSection2DOverlay(polygons: CutPolygon2D[], lines: DrawingLine2D[], axis: 'down' | 'front' | 'side', position: number, // 0-100 percentage
163
+ sectionRange?: {
164
+ min?: number;
165
+ max?: number;
166
+ }, // Same storey-based range as section plane
167
+ flipped?: boolean): void;
168
+ /**
169
+ * Clear the 2D section overlay
170
+ */
171
+ clearSection2DOverlay(): void;
172
+ /**
173
+ * Check if 2D section overlay has geometry to render
174
+ */
175
+ hasSection2DOverlay(): boolean;
126
176
  /**
127
177
  * Get render pipeline (for batching)
128
178
  */
@@ -135,5 +185,15 @@ export declare class Renderer {
135
185
  * Get the GPU device (returns null if not initialized)
136
186
  */
137
187
  getGPUDevice(): GPUDevice | null;
188
+ /**
189
+ * Capture a screenshot of the current view
190
+ * Waits for GPU work to complete and captures exactly what's displayed
191
+ * @returns PNG data URL or null if capture failed
192
+ */
193
+ captureScreenshot(): Promise<string | null>;
194
+ /**
195
+ * Get the canvas element
196
+ */
197
+ getCanvas(): HTMLCanvasElement;
138
198
  }
139
199
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}