@chocozhang/three-model-render 1.0.2 → 1.0.4
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 +149 -530
- package/dist/camera/index.d.ts +59 -36
- package/dist/camera/index.js +77 -57
- package/dist/camera/index.js.map +1 -1
- package/dist/camera/index.mjs +77 -57
- package/dist/camera/index.mjs.map +1 -1
- package/dist/core/index.d.ts +60 -27
- package/dist/core/index.js +124 -95
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +124 -95
- package/dist/core/index.mjs.map +1 -1
- package/dist/effect/index.d.ts +47 -134
- package/dist/effect/index.js +109 -65
- package/dist/effect/index.js.map +1 -1
- package/dist/effect/index.mjs +109 -65
- package/dist/effect/index.mjs.map +1 -1
- package/dist/index.d.ts +397 -341
- package/dist/index.js +651 -472
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +651 -472
- package/dist/index.mjs.map +1 -1
- package/dist/interaction/index.d.ts +85 -52
- package/dist/interaction/index.js +161 -133
- package/dist/interaction/index.js.map +1 -1
- package/dist/interaction/index.mjs +161 -133
- package/dist/interaction/index.mjs.map +1 -1
- package/dist/loader/index.d.ts +89 -56
- package/dist/loader/index.js +115 -76
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/index.mjs +115 -76
- package/dist/loader/index.mjs.map +1 -1
- package/dist/setup/index.d.ts +28 -18
- package/dist/setup/index.js +33 -24
- package/dist/setup/index.js.map +1 -1
- package/dist/setup/index.mjs +33 -24
- package/dist/setup/index.mjs.map +1 -1
- package/dist/ui/index.d.ts +18 -7
- package/dist/ui/index.js +32 -22
- package/dist/ui/index.js.map +1 -1
- package/dist/ui/index.mjs +32 -22
- package/dist/ui/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/setup/index.d.ts
CHANGED
|
@@ -1,23 +1,33 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @file autoSetup.ts
|
|
5
|
+
* @description
|
|
6
|
+
* Automatically sets up the camera and basic lighting scene based on the model's bounding box.
|
|
7
|
+
*
|
|
8
|
+
* @best-practice
|
|
9
|
+
* - Call `autoSetupCameraAndLight` after loading a model to get a quick "good looking" scene.
|
|
10
|
+
* - Returns a handle to dispose lights or update intensity later.
|
|
11
|
+
*/
|
|
12
|
+
|
|
3
13
|
interface AutoSetupOptions {
|
|
4
|
-
/**
|
|
14
|
+
/** Extra padding multiplier based on bounding sphere (>1 expands view range) */
|
|
5
15
|
padding?: number;
|
|
6
|
-
/**
|
|
16
|
+
/** Camera elevation offset (radians), default slight top-down (0.2 rad ≈ 11°) */
|
|
7
17
|
elevation?: number;
|
|
8
|
-
/**
|
|
18
|
+
/** Whether to enable shadows - high performance cost, default false */
|
|
9
19
|
enableShadows?: boolean;
|
|
10
|
-
/**
|
|
20
|
+
/** Shadow map size, higher is clearer but more expensive, default 1024 */
|
|
11
21
|
shadowMapSize?: number;
|
|
12
|
-
/** DirectionalLights
|
|
22
|
+
/** Number of DirectionalLights (evenly distributed around) */
|
|
13
23
|
directionalCount?: number;
|
|
14
|
-
/**
|
|
24
|
+
/** Whether to automatically set mesh.castShadow / mesh.receiveShadow to true (default true) */
|
|
15
25
|
setMeshShadowProps?: boolean;
|
|
16
|
-
/**
|
|
26
|
+
/** If renderer is passed, the tool will automatically enable renderer.shadowMap (if enableShadows is true) */
|
|
17
27
|
renderer?: THREE.WebGLRenderer | null;
|
|
18
28
|
}
|
|
19
29
|
/**
|
|
20
|
-
*
|
|
30
|
+
* Return handle, containing created lights group, computed center/radius, and dispose method
|
|
21
31
|
*/
|
|
22
32
|
type AutoSetupHandle = {
|
|
23
33
|
lightsGroup: THREE.Group;
|
|
@@ -27,19 +37,19 @@ type AutoSetupHandle = {
|
|
|
27
37
|
updateLightIntensity: (factor: number) => void;
|
|
28
38
|
};
|
|
29
39
|
/**
|
|
30
|
-
*
|
|
40
|
+
* Automatically setup camera and basic lighting - Optimized
|
|
31
41
|
*
|
|
32
|
-
*
|
|
33
|
-
* -
|
|
34
|
-
* -
|
|
35
|
-
* -
|
|
42
|
+
* Features:
|
|
43
|
+
* - Adds light intensity adjustment method
|
|
44
|
+
* - Improved error handling
|
|
45
|
+
* - Optimized dispose logic
|
|
36
46
|
*
|
|
37
|
-
* - camera: THREE.PerspectiveCamera
|
|
38
|
-
* - scene: THREE.Scene
|
|
39
|
-
* - model: THREE.Object3D
|
|
40
|
-
* - options:
|
|
47
|
+
* - camera: THREE.PerspectiveCamera (will be moved and pointed at model center)
|
|
48
|
+
* - scene: THREE.Scene (newly created light group will be added to the scene)
|
|
49
|
+
* - model: THREE.Object3D loaded model (arbitrary transform/coordinates)
|
|
50
|
+
* - options: Optional configuration (see AutoSetupOptions)
|
|
41
51
|
*
|
|
42
|
-
*
|
|
52
|
+
* Returns AutoSetupHandle, caller should call handle.dispose() when component unmounts/switches
|
|
43
53
|
*/
|
|
44
54
|
declare function autoSetupCameraAndLight(camera: THREE.PerspectiveCamera, scene: THREE.Scene, model: THREE.Object3D, options?: AutoSetupOptions): AutoSetupHandle;
|
|
45
55
|
|
package/dist/setup/index.js
CHANGED
|
@@ -22,23 +22,32 @@ function _interopNamespaceDefault(e) {
|
|
|
22
22
|
var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* @file autoSetup.ts
|
|
26
|
+
* @description
|
|
27
|
+
* Automatically sets up the camera and basic lighting scene based on the model's bounding box.
|
|
26
28
|
*
|
|
27
|
-
*
|
|
28
|
-
* -
|
|
29
|
-
* -
|
|
30
|
-
|
|
29
|
+
* @best-practice
|
|
30
|
+
* - Call `autoSetupCameraAndLight` after loading a model to get a quick "good looking" scene.
|
|
31
|
+
* - Returns a handle to dispose lights or update intensity later.
|
|
32
|
+
*/
|
|
33
|
+
/**
|
|
34
|
+
* Automatically setup camera and basic lighting - Optimized
|
|
35
|
+
*
|
|
36
|
+
* Features:
|
|
37
|
+
* - Adds light intensity adjustment method
|
|
38
|
+
* - Improved error handling
|
|
39
|
+
* - Optimized dispose logic
|
|
31
40
|
*
|
|
32
|
-
* - camera: THREE.PerspectiveCamera
|
|
33
|
-
* - scene: THREE.Scene
|
|
34
|
-
* - model: THREE.Object3D
|
|
35
|
-
* - options:
|
|
41
|
+
* - camera: THREE.PerspectiveCamera (will be moved and pointed at model center)
|
|
42
|
+
* - scene: THREE.Scene (newly created light group will be added to the scene)
|
|
43
|
+
* - model: THREE.Object3D loaded model (arbitrary transform/coordinates)
|
|
44
|
+
* - options: Optional configuration (see AutoSetupOptions)
|
|
36
45
|
*
|
|
37
|
-
*
|
|
46
|
+
* Returns AutoSetupHandle, caller should call handle.dispose() when component unmounts/switches
|
|
38
47
|
*/
|
|
39
48
|
function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
40
49
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
41
|
-
//
|
|
50
|
+
// Boundary check
|
|
42
51
|
if (!camera || !scene || !model) {
|
|
43
52
|
throw new Error('autoSetupCameraAndLight: camera, scene, model are required');
|
|
44
53
|
}
|
|
@@ -52,9 +61,9 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
52
61
|
renderer: (_g = options.renderer) !== null && _g !== void 0 ? _g : null,
|
|
53
62
|
};
|
|
54
63
|
try {
|
|
55
|
-
// --- 1)
|
|
64
|
+
// --- 1) Calculate bounding data
|
|
56
65
|
const box = new THREE__namespace.Box3().setFromObject(model);
|
|
57
|
-
//
|
|
66
|
+
// Check bounding box validity
|
|
58
67
|
if (!isFinite(box.min.x)) {
|
|
59
68
|
throw new Error('autoSetupCameraAndLight: Invalid bounding box');
|
|
60
69
|
}
|
|
@@ -62,7 +71,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
62
71
|
box.getBoundingSphere(sphere);
|
|
63
72
|
const center = sphere.center.clone();
|
|
64
73
|
const radius = Math.max(0.001, sphere.radius);
|
|
65
|
-
// --- 2)
|
|
74
|
+
// --- 2) Calculate camera position
|
|
66
75
|
const fov = (camera.fov * Math.PI) / 180;
|
|
67
76
|
const halfFov = fov / 2;
|
|
68
77
|
const sinHalfFov = Math.max(Math.sin(halfFov), 0.001);
|
|
@@ -74,17 +83,17 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
74
83
|
camera.near = Math.max(0.001, radius / 1000);
|
|
75
84
|
camera.far = Math.max(1000, radius * 50);
|
|
76
85
|
camera.updateProjectionMatrix();
|
|
77
|
-
// --- 3)
|
|
86
|
+
// --- 3) Enable Shadows
|
|
78
87
|
if (opts.renderer && opts.enableShadows) {
|
|
79
88
|
opts.renderer.shadowMap.enabled = true;
|
|
80
89
|
opts.renderer.shadowMap.type = THREE__namespace.PCFSoftShadowMap;
|
|
81
90
|
}
|
|
82
|
-
// --- 4)
|
|
91
|
+
// --- 4) Create Lights Group
|
|
83
92
|
const lightsGroup = new THREE__namespace.Group();
|
|
84
93
|
lightsGroup.name = 'autoSetupLightsGroup';
|
|
85
94
|
lightsGroup.position.copy(center);
|
|
86
95
|
scene.add(lightsGroup);
|
|
87
|
-
// 4.1
|
|
96
|
+
// 4.1 Basic Light
|
|
88
97
|
const hemi = new THREE__namespace.HemisphereLight(0xffffff, 0x444444, 0.6);
|
|
89
98
|
hemi.name = 'auto_hemi';
|
|
90
99
|
hemi.position.set(0, radius * 2.0, 0);
|
|
@@ -92,7 +101,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
92
101
|
const ambient = new THREE__namespace.AmbientLight(0xffffff, 0.25);
|
|
93
102
|
ambient.name = 'auto_ambient';
|
|
94
103
|
lightsGroup.add(ambient);
|
|
95
|
-
// 4.2
|
|
104
|
+
// 4.2 Directional Lights
|
|
96
105
|
const dirCount = Math.max(1, Math.floor(opts.directionalCount));
|
|
97
106
|
const directionalLights = [];
|
|
98
107
|
const dirs = [];
|
|
@@ -127,7 +136,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
127
136
|
}
|
|
128
137
|
directionalLights.push(light);
|
|
129
138
|
}
|
|
130
|
-
// 4.3
|
|
139
|
+
// 4.3 Point Light Fill
|
|
131
140
|
const fill1 = new THREE__namespace.PointLight(0xffffff, 0.5, radius * 4);
|
|
132
141
|
fill1.position.copy(center).add(new THREE__namespace.Vector3(radius * 0.5, 0.2 * radius, 0));
|
|
133
142
|
fill1.name = 'auto_fill1';
|
|
@@ -136,7 +145,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
136
145
|
fill2.position.copy(center).add(new THREE__namespace.Vector3(-radius * 0.5, -0.2 * radius, 0));
|
|
137
146
|
fill2.name = 'auto_fill2';
|
|
138
147
|
lightsGroup.add(fill2);
|
|
139
|
-
// --- 5)
|
|
148
|
+
// --- 5) Set Mesh Shadow Props
|
|
140
149
|
if (opts.setMeshShadowProps) {
|
|
141
150
|
model.traverse((ch) => {
|
|
142
151
|
if (ch.isMesh) {
|
|
@@ -147,12 +156,12 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
147
156
|
}
|
|
148
157
|
});
|
|
149
158
|
}
|
|
150
|
-
// --- 6)
|
|
159
|
+
// --- 6) Return handle ---
|
|
151
160
|
const handle = {
|
|
152
161
|
lightsGroup,
|
|
153
162
|
center,
|
|
154
163
|
radius,
|
|
155
|
-
//
|
|
164
|
+
// Update light intensity
|
|
156
165
|
updateLightIntensity(factor) {
|
|
157
166
|
lightsGroup.traverse((node) => {
|
|
158
167
|
if (node.isLight) {
|
|
@@ -164,10 +173,10 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
164
173
|
},
|
|
165
174
|
dispose: () => {
|
|
166
175
|
try {
|
|
167
|
-
//
|
|
176
|
+
// Remove lights group
|
|
168
177
|
if (lightsGroup.parent)
|
|
169
178
|
lightsGroup.parent.remove(lightsGroup);
|
|
170
|
-
//
|
|
179
|
+
// Dispose shadow resources
|
|
171
180
|
lightsGroup.traverse((node) => {
|
|
172
181
|
if (node.isLight) {
|
|
173
182
|
const l = node;
|
package/dist/setup/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/setup/autoSetup.ts"],"sourcesContent":[null],"names":["THREE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/setup/autoSetup.ts"],"sourcesContent":[null],"names":["THREE"],"mappings":"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"}
|
package/dist/setup/index.mjs
CHANGED
|
@@ -1,23 +1,32 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* @file autoSetup.ts
|
|
5
|
+
* @description
|
|
6
|
+
* Automatically sets up the camera and basic lighting scene based on the model's bounding box.
|
|
5
7
|
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
|
|
8
|
+
* @best-practice
|
|
9
|
+
* - Call `autoSetupCameraAndLight` after loading a model to get a quick "good looking" scene.
|
|
10
|
+
* - Returns a handle to dispose lights or update intensity later.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Automatically setup camera and basic lighting - Optimized
|
|
14
|
+
*
|
|
15
|
+
* Features:
|
|
16
|
+
* - Adds light intensity adjustment method
|
|
17
|
+
* - Improved error handling
|
|
18
|
+
* - Optimized dispose logic
|
|
10
19
|
*
|
|
11
|
-
* - camera: THREE.PerspectiveCamera
|
|
12
|
-
* - scene: THREE.Scene
|
|
13
|
-
* - model: THREE.Object3D
|
|
14
|
-
* - options:
|
|
20
|
+
* - camera: THREE.PerspectiveCamera (will be moved and pointed at model center)
|
|
21
|
+
* - scene: THREE.Scene (newly created light group will be added to the scene)
|
|
22
|
+
* - model: THREE.Object3D loaded model (arbitrary transform/coordinates)
|
|
23
|
+
* - options: Optional configuration (see AutoSetupOptions)
|
|
15
24
|
*
|
|
16
|
-
*
|
|
25
|
+
* Returns AutoSetupHandle, caller should call handle.dispose() when component unmounts/switches
|
|
17
26
|
*/
|
|
18
27
|
function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
19
28
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
20
|
-
//
|
|
29
|
+
// Boundary check
|
|
21
30
|
if (!camera || !scene || !model) {
|
|
22
31
|
throw new Error('autoSetupCameraAndLight: camera, scene, model are required');
|
|
23
32
|
}
|
|
@@ -31,9 +40,9 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
31
40
|
renderer: (_g = options.renderer) !== null && _g !== void 0 ? _g : null,
|
|
32
41
|
};
|
|
33
42
|
try {
|
|
34
|
-
// --- 1)
|
|
43
|
+
// --- 1) Calculate bounding data
|
|
35
44
|
const box = new THREE.Box3().setFromObject(model);
|
|
36
|
-
//
|
|
45
|
+
// Check bounding box validity
|
|
37
46
|
if (!isFinite(box.min.x)) {
|
|
38
47
|
throw new Error('autoSetupCameraAndLight: Invalid bounding box');
|
|
39
48
|
}
|
|
@@ -41,7 +50,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
41
50
|
box.getBoundingSphere(sphere);
|
|
42
51
|
const center = sphere.center.clone();
|
|
43
52
|
const radius = Math.max(0.001, sphere.radius);
|
|
44
|
-
// --- 2)
|
|
53
|
+
// --- 2) Calculate camera position
|
|
45
54
|
const fov = (camera.fov * Math.PI) / 180;
|
|
46
55
|
const halfFov = fov / 2;
|
|
47
56
|
const sinHalfFov = Math.max(Math.sin(halfFov), 0.001);
|
|
@@ -53,17 +62,17 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
53
62
|
camera.near = Math.max(0.001, radius / 1000);
|
|
54
63
|
camera.far = Math.max(1000, radius * 50);
|
|
55
64
|
camera.updateProjectionMatrix();
|
|
56
|
-
// --- 3)
|
|
65
|
+
// --- 3) Enable Shadows
|
|
57
66
|
if (opts.renderer && opts.enableShadows) {
|
|
58
67
|
opts.renderer.shadowMap.enabled = true;
|
|
59
68
|
opts.renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
60
69
|
}
|
|
61
|
-
// --- 4)
|
|
70
|
+
// --- 4) Create Lights Group
|
|
62
71
|
const lightsGroup = new THREE.Group();
|
|
63
72
|
lightsGroup.name = 'autoSetupLightsGroup';
|
|
64
73
|
lightsGroup.position.copy(center);
|
|
65
74
|
scene.add(lightsGroup);
|
|
66
|
-
// 4.1
|
|
75
|
+
// 4.1 Basic Light
|
|
67
76
|
const hemi = new THREE.HemisphereLight(0xffffff, 0x444444, 0.6);
|
|
68
77
|
hemi.name = 'auto_hemi';
|
|
69
78
|
hemi.position.set(0, radius * 2.0, 0);
|
|
@@ -71,7 +80,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
71
80
|
const ambient = new THREE.AmbientLight(0xffffff, 0.25);
|
|
72
81
|
ambient.name = 'auto_ambient';
|
|
73
82
|
lightsGroup.add(ambient);
|
|
74
|
-
// 4.2
|
|
83
|
+
// 4.2 Directional Lights
|
|
75
84
|
const dirCount = Math.max(1, Math.floor(opts.directionalCount));
|
|
76
85
|
const directionalLights = [];
|
|
77
86
|
const dirs = [];
|
|
@@ -106,7 +115,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
106
115
|
}
|
|
107
116
|
directionalLights.push(light);
|
|
108
117
|
}
|
|
109
|
-
// 4.3
|
|
118
|
+
// 4.3 Point Light Fill
|
|
110
119
|
const fill1 = new THREE.PointLight(0xffffff, 0.5, radius * 4);
|
|
111
120
|
fill1.position.copy(center).add(new THREE.Vector3(radius * 0.5, 0.2 * radius, 0));
|
|
112
121
|
fill1.name = 'auto_fill1';
|
|
@@ -115,7 +124,7 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
115
124
|
fill2.position.copy(center).add(new THREE.Vector3(-radius * 0.5, -0.2 * radius, 0));
|
|
116
125
|
fill2.name = 'auto_fill2';
|
|
117
126
|
lightsGroup.add(fill2);
|
|
118
|
-
// --- 5)
|
|
127
|
+
// --- 5) Set Mesh Shadow Props
|
|
119
128
|
if (opts.setMeshShadowProps) {
|
|
120
129
|
model.traverse((ch) => {
|
|
121
130
|
if (ch.isMesh) {
|
|
@@ -126,12 +135,12 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
126
135
|
}
|
|
127
136
|
});
|
|
128
137
|
}
|
|
129
|
-
// --- 6)
|
|
138
|
+
// --- 6) Return handle ---
|
|
130
139
|
const handle = {
|
|
131
140
|
lightsGroup,
|
|
132
141
|
center,
|
|
133
142
|
radius,
|
|
134
|
-
//
|
|
143
|
+
// Update light intensity
|
|
135
144
|
updateLightIntensity(factor) {
|
|
136
145
|
lightsGroup.traverse((node) => {
|
|
137
146
|
if (node.isLight) {
|
|
@@ -143,10 +152,10 @@ function autoSetupCameraAndLight(camera, scene, model, options = {}) {
|
|
|
143
152
|
},
|
|
144
153
|
dispose: () => {
|
|
145
154
|
try {
|
|
146
|
-
//
|
|
155
|
+
// Remove lights group
|
|
147
156
|
if (lightsGroup.parent)
|
|
148
157
|
lightsGroup.parent.remove(lightsGroup);
|
|
149
|
-
//
|
|
158
|
+
// Dispose shadow resources
|
|
150
159
|
lightsGroup.traverse((node) => {
|
|
151
160
|
if (node.isLight) {
|
|
152
161
|
const l = node;
|
package/dist/setup/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../src/setup/autoSetup.ts"],"sourcesContent":[null],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../../src/setup/autoSetup.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* @file modelsLabel.ts
|
|
5
|
+
* @description
|
|
6
|
+
* Creates interactive 2D labels (DOM elements) attached to 3D objects with connecting lines.
|
|
7
|
+
*
|
|
8
|
+
* @best-practice
|
|
9
|
+
* - Use `createModelsLabel` to annotate parts of a model.
|
|
10
|
+
* - Supports fading endpoints, pulsing dots, and custom styling.
|
|
11
|
+
* - Performance optimized with caching and RAF throttling.
|
|
12
|
+
*/
|
|
13
|
+
|
|
3
14
|
interface LabelOptions {
|
|
4
15
|
fontSize?: string;
|
|
5
16
|
color?: string;
|
|
@@ -22,14 +33,14 @@ interface LabelManager {
|
|
|
22
33
|
dispose: () => void;
|
|
23
34
|
}
|
|
24
35
|
/**
|
|
25
|
-
*
|
|
36
|
+
* Create Model Labels (with connecting lines and pulsing dots) - Optimized
|
|
26
37
|
*
|
|
27
|
-
*
|
|
28
|
-
* -
|
|
29
|
-
* -
|
|
30
|
-
* -
|
|
31
|
-
* -
|
|
32
|
-
* - RAF
|
|
38
|
+
* Features:
|
|
39
|
+
* - Supports pause/resume
|
|
40
|
+
* - Configurable update interval
|
|
41
|
+
* - Fade in/out effects
|
|
42
|
+
* - Cached bounding box calculation
|
|
43
|
+
* - RAF management optimization
|
|
33
44
|
*/
|
|
34
45
|
declare function createModelsLabel(camera: THREE.Camera, renderer: THREE.WebGLRenderer, parentModel: THREE.Object3D, modelLabelsMap: Record<string, string>, options?: LabelOptions): LabelManager;
|
|
35
46
|
|
package/dist/ui/index.js
CHANGED
|
@@ -22,14 +22,24 @@ function _interopNamespaceDefault(e) {
|
|
|
22
22
|
var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
|
-
*
|
|
25
|
+
* @file modelsLabel.ts
|
|
26
|
+
* @description
|
|
27
|
+
* Creates interactive 2D labels (DOM elements) attached to 3D objects with connecting lines.
|
|
26
28
|
*
|
|
27
|
-
*
|
|
28
|
-
* -
|
|
29
|
-
* -
|
|
30
|
-
* -
|
|
31
|
-
|
|
32
|
-
|
|
29
|
+
* @best-practice
|
|
30
|
+
* - Use `createModelsLabel` to annotate parts of a model.
|
|
31
|
+
* - Supports fading endpoints, pulsing dots, and custom styling.
|
|
32
|
+
* - Performance optimized with caching and RAF throttling.
|
|
33
|
+
*/
|
|
34
|
+
/**
|
|
35
|
+
* Create Model Labels (with connecting lines and pulsing dots) - Optimized
|
|
36
|
+
*
|
|
37
|
+
* Features:
|
|
38
|
+
* - Supports pause/resume
|
|
39
|
+
* - Configurable update interval
|
|
40
|
+
* - Fade in/out effects
|
|
41
|
+
* - Cached bounding box calculation
|
|
42
|
+
* - RAF management optimization
|
|
33
43
|
*/
|
|
34
44
|
function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, options) {
|
|
35
45
|
var _a, _b, _c, _d, _e, _f;
|
|
@@ -44,8 +54,8 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
44
54
|
dotSpacing: (_c = options === null || options === void 0 ? void 0 : options.dotSpacing) !== null && _c !== void 0 ? _c : 2,
|
|
45
55
|
lineColor: (options === null || options === void 0 ? void 0 : options.lineColor) || 'rgba(200,200,200,0.7)',
|
|
46
56
|
lineWidth: (_d = options === null || options === void 0 ? void 0 : options.lineWidth) !== null && _d !== void 0 ? _d : 1,
|
|
47
|
-
updateInterval: (_e = options === null || options === void 0 ? void 0 : options.updateInterval) !== null && _e !== void 0 ? _e : 0, //
|
|
48
|
-
fadeInDuration: (_f = options === null || options === void 0 ? void 0 : options.fadeInDuration) !== null && _f !== void 0 ? _f : 300, //
|
|
57
|
+
updateInterval: (_e = options === null || options === void 0 ? void 0 : options.updateInterval) !== null && _e !== void 0 ? _e : 0, // Default update every frame
|
|
58
|
+
fadeInDuration: (_f = options === null || options === void 0 ? void 0 : options.fadeInDuration) !== null && _f !== void 0 ? _f : 300, // Fade-in duration
|
|
49
59
|
};
|
|
50
60
|
const container = document.createElement('div');
|
|
51
61
|
container.style.position = 'absolute';
|
|
@@ -71,10 +81,10 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
71
81
|
let currentLabelsMap = Object.assign({}, modelLabelsMap);
|
|
72
82
|
let labels = [];
|
|
73
83
|
let isActive = true;
|
|
74
|
-
let isPaused = false;
|
|
75
|
-
let rafId = null;
|
|
76
|
-
let lastUpdateTime = 0;
|
|
77
|
-
//
|
|
84
|
+
let isPaused = false;
|
|
85
|
+
let rafId = null;
|
|
86
|
+
let lastUpdateTime = 0;
|
|
87
|
+
// Inject styles (with fade-in animation)
|
|
78
88
|
const styleId = 'three-model-label-styles';
|
|
79
89
|
if (!document.getElementById(styleId)) {
|
|
80
90
|
const style = document.createElement('style');
|
|
@@ -113,14 +123,14 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
113
123
|
`;
|
|
114
124
|
document.head.appendChild(style);
|
|
115
125
|
}
|
|
116
|
-
//
|
|
126
|
+
// Get or update cached top position
|
|
117
127
|
const getObjectTopPosition = (labelData) => {
|
|
118
128
|
const obj = labelData.object;
|
|
119
|
-
//
|
|
129
|
+
// If cached and object hasn't transformed, return cached
|
|
120
130
|
if (labelData.cachedTopPos && !obj.matrixWorldNeedsUpdate) {
|
|
121
131
|
return labelData.cachedTopPos.clone();
|
|
122
132
|
}
|
|
123
|
-
//
|
|
133
|
+
// Recalculate
|
|
124
134
|
const box = new THREE__namespace.Box3().setFromObject(obj);
|
|
125
135
|
labelData.cachedBox = box;
|
|
126
136
|
if (!box.isEmpty()) {
|
|
@@ -198,20 +208,20 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
198
208
|
wrapper,
|
|
199
209
|
dot,
|
|
200
210
|
line,
|
|
201
|
-
cachedBox: null, //
|
|
211
|
+
cachedBox: null, // Initialize cache
|
|
202
212
|
cachedTopPos: null
|
|
203
213
|
});
|
|
204
214
|
}
|
|
205
215
|
});
|
|
206
216
|
};
|
|
207
217
|
rebuildLabels();
|
|
208
|
-
//
|
|
218
|
+
// Optimized update function
|
|
209
219
|
const updateLabels = (timestamp) => {
|
|
210
220
|
if (!isActive || isPaused) {
|
|
211
221
|
rafId = null;
|
|
212
222
|
return;
|
|
213
223
|
}
|
|
214
|
-
//
|
|
224
|
+
// Throttle
|
|
215
225
|
if (cfg.updateInterval > 0 && timestamp - lastUpdateTime < cfg.updateInterval) {
|
|
216
226
|
rafId = requestAnimationFrame(updateLabels);
|
|
217
227
|
return;
|
|
@@ -224,7 +234,7 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
224
234
|
svg.setAttribute('height', `${height}`);
|
|
225
235
|
labels.forEach((labelData) => {
|
|
226
236
|
const { el, wrapper, dot, line } = labelData;
|
|
227
|
-
const topWorld = getObjectTopPosition(labelData); //
|
|
237
|
+
const topWorld = getObjectTopPosition(labelData); // Use cache
|
|
228
238
|
const topNDC = topWorld.clone().project(camera);
|
|
229
239
|
const modelX = (topNDC.x * 0.5 + 0.5) * width + rect.left;
|
|
230
240
|
const modelY = (-(topNDC.y * 0.5) + 0.5) * height + rect.top;
|
|
@@ -259,7 +269,7 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
259
269
|
currentLabelsMap = Object.assign({}, newMap);
|
|
260
270
|
rebuildLabels();
|
|
261
271
|
},
|
|
262
|
-
//
|
|
272
|
+
// Pause update
|
|
263
273
|
pause() {
|
|
264
274
|
isPaused = true;
|
|
265
275
|
if (rafId !== null) {
|
|
@@ -267,7 +277,7 @@ function createModelsLabel(camera, renderer, parentModel, modelLabelsMap, option
|
|
|
267
277
|
rafId = null;
|
|
268
278
|
}
|
|
269
279
|
},
|
|
270
|
-
//
|
|
280
|
+
// Resume update
|
|
271
281
|
resume() {
|
|
272
282
|
if (!isPaused)
|
|
273
283
|
return;
|
package/dist/ui/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/ui/modelsLabel.ts"],"sourcesContent":[null],"names":["THREE"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/ui/modelsLabel.ts"],"sourcesContent":[null],"names":["THREE"],"mappings":"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"}
|