@ifc-lite/renderer 1.6.1 → 1.7.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.
- package/README.md +40 -0
- package/dist/camera-animation.d.ts +108 -0
- package/dist/camera-animation.d.ts.map +1 -0
- package/dist/camera-animation.js +606 -0
- package/dist/camera-animation.js.map +1 -0
- package/dist/camera-controls.d.ts +75 -0
- package/dist/camera-controls.d.ts.map +1 -0
- package/dist/camera-controls.js +239 -0
- package/dist/camera-controls.js.map +1 -0
- package/dist/camera-projection.d.ts +51 -0
- package/dist/camera-projection.d.ts.map +1 -0
- package/dist/camera-projection.js +147 -0
- package/dist/camera-projection.js.map +1 -0
- package/dist/camera.d.ts +33 -45
- package/dist/camera.d.ts.map +1 -1
- package/dist/camera.js +128 -815
- package/dist/camera.js.map +1 -1
- package/dist/geometry-manager.d.ts +99 -0
- package/dist/geometry-manager.d.ts.map +1 -0
- package/dist/geometry-manager.js +387 -0
- package/dist/geometry-manager.js.map +1 -0
- package/dist/index.d.ts +7 -19
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -658
- package/dist/index.js.map +1 -1
- package/dist/math.d.ts +6 -0
- package/dist/math.d.ts.map +1 -1
- package/dist/math.js +20 -0
- package/dist/math.js.map +1 -1
- package/dist/picking-manager.d.ts +31 -0
- package/dist/picking-manager.d.ts.map +1 -0
- package/dist/picking-manager.js +140 -0
- package/dist/picking-manager.js.map +1 -0
- package/dist/raycast-engine.d.ts +76 -0
- package/dist/raycast-engine.d.ts.map +1 -0
- package/dist/raycast-engine.js +255 -0
- package/dist/raycast-engine.js.map +1 -0
- package/dist/scene.d.ts +8 -1
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +59 -25
- package/dist/scene.js.map +1 -1
- 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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"}
|