@ifc-lite/renderer 1.6.1 → 1.8.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 (46) hide show
  1. package/README.md +40 -0
  2. package/dist/camera-animation.d.ts +108 -0
  3. package/dist/camera-animation.d.ts.map +1 -0
  4. package/dist/camera-animation.js +606 -0
  5. package/dist/camera-animation.js.map +1 -0
  6. package/dist/camera-controls.d.ts +75 -0
  7. package/dist/camera-controls.d.ts.map +1 -0
  8. package/dist/camera-controls.js +239 -0
  9. package/dist/camera-controls.js.map +1 -0
  10. package/dist/camera-projection.d.ts +51 -0
  11. package/dist/camera-projection.d.ts.map +1 -0
  12. package/dist/camera-projection.js +147 -0
  13. package/dist/camera-projection.js.map +1 -0
  14. package/dist/camera.d.ts +33 -45
  15. package/dist/camera.d.ts.map +1 -1
  16. package/dist/camera.js +128 -815
  17. package/dist/camera.js.map +1 -1
  18. package/dist/geometry-manager.d.ts +99 -0
  19. package/dist/geometry-manager.d.ts.map +1 -0
  20. package/dist/geometry-manager.js +387 -0
  21. package/dist/geometry-manager.js.map +1 -0
  22. package/dist/index.d.ts +7 -19
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +62 -658
  25. package/dist/index.js.map +1 -1
  26. package/dist/math.d.ts +6 -0
  27. package/dist/math.d.ts.map +1 -1
  28. package/dist/math.js +20 -0
  29. package/dist/math.js.map +1 -1
  30. package/dist/picking-manager.d.ts +31 -0
  31. package/dist/picking-manager.d.ts.map +1 -0
  32. package/dist/picking-manager.js +140 -0
  33. package/dist/picking-manager.js.map +1 -0
  34. package/dist/pipeline.d.ts +2 -0
  35. package/dist/pipeline.d.ts.map +1 -1
  36. package/dist/pipeline.js +42 -0
  37. package/dist/pipeline.js.map +1 -1
  38. package/dist/raycast-engine.d.ts +76 -0
  39. package/dist/raycast-engine.d.ts.map +1 -0
  40. package/dist/raycast-engine.js +255 -0
  41. package/dist/raycast-engine.js.map +1 -0
  42. package/dist/scene.d.ts +26 -1
  43. package/dist/scene.d.ts.map +1 -1
  44. package/dist/scene.js +134 -25
  45. package/dist/scene.js.map +1 -1
  46. package/package.json +4 -4
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # @ifc-lite/renderer
2
+
3
+ WebGPU-based 3D rendering engine for IFClite. Provides GPU-accelerated rendering with depth testing, frustum culling, and zero-copy WASM-to-GPU data transfer.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @ifc-lite/renderer
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { Renderer } from '@ifc-lite/renderer';
15
+
16
+ const renderer = new Renderer(canvas);
17
+ await renderer.init();
18
+
19
+ renderer.loadGeometry(geometryData);
20
+ renderer.fitToView();
21
+ renderer.render();
22
+ ```
23
+
24
+ ## Features
25
+
26
+ - WebGPU rendering with depth testing and frustum culling
27
+ - Zero-copy transfer from WASM linear memory to GPU buffers
28
+ - Section planes for cross-section views
29
+ - 3D measurements with snap-to-edge
30
+ - Entity picking via GPU ray casting
31
+ - Multi-model federation support (FederationRegistry)
32
+ - Per-entity visibility and color override
33
+
34
+ ## API
35
+
36
+ See the [Rendering Guide](../../docs/guide/rendering.md) and [API Reference](../../docs/api/typescript.md#ifc-literenderer).
37
+
38
+ ## License
39
+
40
+ [MPL-2.0](../../LICENSE)
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Camera animation system handling tweened transitions, inertia/momentum,
3
+ * preset views, and first-person mode.
4
+ * Extracted from Camera class using composition pattern.
5
+ */
6
+ import type { Vec3 } from './types.js';
7
+ import type { CameraInternalState } from './camera-controls.js';
8
+ import type { CameraControls } from './camera-controls.js';
9
+ import type { CameraProjection } from './camera-projection.js';
10
+ /**
11
+ * Manages camera animations: tweened transitions between positions,
12
+ * inertia/momentum after user interaction, preset view switching
13
+ * with rotation cycling, and first-person movement.
14
+ */
15
+ export declare class CameraAnimator {
16
+ private readonly state;
17
+ private readonly updateMatrices;
18
+ private readonly controls;
19
+ private readonly projection;
20
+ private velocity;
21
+ private damping;
22
+ private minVelocity;
23
+ private animationStartTime;
24
+ private animationDuration;
25
+ private animationStartPos;
26
+ private animationStartTarget;
27
+ private animationEndPos;
28
+ private animationEndTarget;
29
+ private animationStartUp;
30
+ private animationEndUp;
31
+ private animationEasing;
32
+ private isFirstPersonMode;
33
+ private firstPersonSpeed;
34
+ private lastPresetView;
35
+ private presetViewRotation;
36
+ constructor(state: CameraInternalState, updateMatrices: () => void, controls: CameraControls, projection: CameraProjection);
37
+ addOrbitVelocity(deltaX: number, deltaY: number): void;
38
+ addPanVelocity(deltaX: number, deltaY: number, panSpeed: number): void;
39
+ addZoomVelocity(normalizedDelta: number): void;
40
+ /**
41
+ * Reset preset view tracking (called when user orbits)
42
+ */
43
+ resetPresetTracking(): void;
44
+ /**
45
+ * Update camera animation and inertia
46
+ * Returns true if camera is still animating
47
+ */
48
+ update(_deltaTime: number): boolean;
49
+ /**
50
+ * Animate camera to fit bounds (southeast isometric view)
51
+ * Y-up coordinate system
52
+ */
53
+ zoomToFit(min: Vec3, max: Vec3, duration?: number): Promise<void>;
54
+ /**
55
+ * Frame/center view on a point (keeps current distance and direction)
56
+ * Standard CAD "Frame Selection" behavior
57
+ */
58
+ framePoint(point: Vec3, duration?: number): Promise<void>;
59
+ /**
60
+ * Frame selection - zoom to fit bounds while keeping current view direction
61
+ * This is what "Frame Selection" should do - zoom to fill screen
62
+ */
63
+ frameBounds(min: Vec3, max: Vec3, duration?: number): Promise<void>;
64
+ zoomExtent(min: Vec3, max: Vec3, duration?: number): Promise<void>;
65
+ /**
66
+ * Animate camera to position and target
67
+ */
68
+ animateTo(endPos: Vec3, endTarget: Vec3, duration?: number): Promise<void>;
69
+ /**
70
+ * Animate camera to position, target, and up vector (for orthogonal preset views)
71
+ */
72
+ animateToWithUp(endPos: Vec3, endTarget: Vec3, endUp: Vec3, duration?: number): Promise<void>;
73
+ /**
74
+ * Easing function: easeOutCubic
75
+ */
76
+ private easeOutCubic;
77
+ /**
78
+ * Set first-person mode
79
+ */
80
+ enableFirstPersonMode(enabled: boolean): void;
81
+ /**
82
+ * Move in first-person mode (Y-up coordinate system)
83
+ */
84
+ moveFirstPerson(forward: number, right: number, up: number): void;
85
+ /**
86
+ * Set preset view with explicit bounds (Y-up coordinate system)
87
+ * Clicking the same view again rotates 90 degrees around the view axis
88
+ * @param buildingRotation Optional building rotation in radians (from IfcSite placement)
89
+ */
90
+ setPresetView(view: 'top' | 'bottom' | 'front' | 'back' | 'left' | 'right', bounds?: {
91
+ min: Vec3;
92
+ max: Vec3;
93
+ }, buildingRotation?: number): void;
94
+ /**
95
+ * Get current bounds estimate (simplified - in production would use scene bounds)
96
+ */
97
+ private getCurrentBounds;
98
+ /**
99
+ * Reset velocity (stop inertia)
100
+ */
101
+ stopInertia(): void;
102
+ /**
103
+ * Reset camera animation state (clear inertia, cancel animations, reset preset tracking)
104
+ * Called when loading a new model to ensure clean state
105
+ */
106
+ reset(): void;
107
+ }
108
+ //# sourceMappingURL=camera-animation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera-animation.d.ts","sourceRoot":"","sources":["../src/camera-animation.ts"],"names":[],"mappings":"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"}