three-base 1.0.23 → 1.0.25
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/lib/ThreeBase.ts +2 -7
- package/lib/threeUtils.ts +46 -23
- package/package.json +1 -1
package/lib/ThreeBase.ts
CHANGED
|
@@ -224,15 +224,10 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
224
224
|
getLookAt() {
|
|
225
225
|
const position = this.camera.position.toArray().map(v => round(v, 3));
|
|
226
226
|
const center = this.controls.target.toArray().map(v => round(v, 3));
|
|
227
|
-
if (threeUtils.isDev) {
|
|
228
|
-
console.log(`
|
|
229
|
-
center: new Vector3(${center.join(",")}),
|
|
230
|
-
position: new Vector3(${position.join(",")})
|
|
231
|
-
`);
|
|
232
|
-
}
|
|
233
227
|
return {
|
|
228
|
+
center: new Vector3(...center),
|
|
234
229
|
position: new Vector3(...position),
|
|
235
|
-
center: new Vector3(
|
|
230
|
+
centerPosition: `center: new Vector3(${center.join(",")}),position: new Vector3(${position.join(",")})`
|
|
236
231
|
}
|
|
237
232
|
}
|
|
238
233
|
|
package/lib/threeUtils.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @Last Modified time: 2022-06-21 16:45:33
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { Box3, Clock, EventDispatcher, Object3D, Vector3 } from "three";
|
|
8
|
+
import { Box3, BufferGeometry, Clock, EventDispatcher, Object3D, Vector3 } from "three";
|
|
9
9
|
|
|
10
10
|
class ThreeUtils extends EventDispatcher {
|
|
11
11
|
|
|
@@ -16,7 +16,7 @@ class ThreeUtils extends EventDispatcher {
|
|
|
16
16
|
}
|
|
17
17
|
//@ts-ignore
|
|
18
18
|
isProd = process.env.NODE_ENV === "production";
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
//@ts-ignore
|
|
21
21
|
isDev = process.env.NODE_ENV === "development";
|
|
22
22
|
|
|
@@ -45,37 +45,60 @@ class ThreeUtils extends EventDispatcher {
|
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
// 获取模型大小
|
|
48
|
-
getSize(object3d: Object3D) {
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
getSize(object3d: Object3D | BufferGeometry) {
|
|
49
|
+
|
|
50
|
+
if (object3d instanceof Object3D) {
|
|
51
|
+
this.box3.setFromObject(object3d);
|
|
52
|
+
this.box3.getSize(this.size);
|
|
53
|
+
} else if (object3d instanceof BufferGeometry) {
|
|
54
|
+
object3d.computeBoundingBox();
|
|
55
|
+
object3d.boundingBox.getSize(this.size);
|
|
56
|
+
}
|
|
57
|
+
|
|
51
58
|
return this.size;
|
|
52
59
|
}
|
|
53
60
|
|
|
54
61
|
// 模型对齐底面
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
+
alignBotton(object3d: Object3D | BufferGeometry, y = 0) {
|
|
63
|
+
|
|
64
|
+
if (object3d instanceof Object3D) {
|
|
65
|
+
this.box3.setFromObject(object3d);
|
|
66
|
+
this.box3.getCenter(this.center);
|
|
67
|
+
this.box3.getSize(this.size);
|
|
68
|
+
object3d.position.y -= (this.center.y - (this.size.y * 0.5));
|
|
69
|
+
object3d.position.y += y;
|
|
70
|
+
object3d.updateMatrixWorld(true);
|
|
71
|
+
} else if (object3d instanceof BufferGeometry) {
|
|
72
|
+
object3d.computeBoundingBox();
|
|
73
|
+
object3d.translate(0, -object3d.boundingBox.min.y, 0);
|
|
74
|
+
}
|
|
62
75
|
}
|
|
63
76
|
|
|
64
77
|
// 居中对象
|
|
65
|
-
centerObject3D(object3d: Object3D) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
78
|
+
centerObject3D(object3d: Object3D | BufferGeometry) {
|
|
79
|
+
if (object3d instanceof Object3D) {
|
|
80
|
+
this.box3.setFromObject(object3d);
|
|
81
|
+
this.box3.getCenter(this.center);
|
|
82
|
+
object3d.position.sub(this.center);
|
|
83
|
+
object3d.updateMatrixWorld(true);
|
|
84
|
+
} else if (object3d instanceof BufferGeometry) {
|
|
85
|
+
object3d.center();
|
|
86
|
+
}
|
|
70
87
|
}
|
|
71
88
|
|
|
72
89
|
//缩放至指定大小
|
|
73
|
-
scaleTo(object3d: Object3D, size: number = 1) {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
90
|
+
scaleTo(object3d: Object3D | BufferGeometry, size: number = 1) {
|
|
91
|
+
if (object3d instanceof Object3D) {
|
|
92
|
+
this.box3.setFromObject(object3d);
|
|
93
|
+
this.box3.getSize(this.size);
|
|
94
|
+
const scale = size / Math.max(this.size.x, this.size.y, this.size.z);
|
|
95
|
+
object3d.scale.multiplyScalar(scale);
|
|
96
|
+
object3d.updateMatrixWorld(true);
|
|
97
|
+
} else if (object3d instanceof BufferGeometry) {
|
|
98
|
+
const originSize = this.getSize(object3d);
|
|
99
|
+
const scale = size / Math.max(originSize.x, originSize.y, originSize.z);
|
|
100
|
+
object3d.scale(scale, scale, scale);
|
|
101
|
+
}
|
|
79
102
|
}
|
|
80
103
|
|
|
81
104
|
}
|