three-base 2.0.60 → 2.0.62
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/InstancedMeshBase.js +1 -1
- package/InstancedMeshBase.ts +1 -1
- package/MeshBase.js +1 -1
- package/MeshBase.ts +1 -1
- package/ThreeBase.js +1 -0
- package/ThreeBase.ts +1 -0
- package/Transition.d.ts +1 -1
- package/Transition.ts +18 -18
- package/package.json +1 -1
- package/threeLoader.d.ts +1 -1
- package/threeLoader.js +1 -1
- package/threeLoader.ts +1 -1
- package/threeUtils.d.ts +1 -0
- package/threeUtils.js +18 -1
- package/threeUtils.ts +19 -2
package/InstancedMeshBase.js
CHANGED
|
@@ -35,7 +35,7 @@ export default class InstancedMeshBase extends MeshBase {
|
|
|
35
35
|
if (!MeshBase.models.get(url) && !MeshBase.loadModeling.get(url)) {
|
|
36
36
|
MeshBase.loadModeling.set(url, true);
|
|
37
37
|
// 万能加载器
|
|
38
|
-
let modal = await threeLoader.
|
|
38
|
+
let modal = await threeLoader.loadModel(url, filename);
|
|
39
39
|
threeUtils.center(modal);
|
|
40
40
|
threeUtils.alignBottom(modal);
|
|
41
41
|
modal.updateMatrixWorld(true);
|
package/InstancedMeshBase.ts
CHANGED
|
@@ -53,7 +53,7 @@ export default class InstancedMeshBase extends MeshBase {
|
|
|
53
53
|
MeshBase.loadModeling.set(url, true);
|
|
54
54
|
|
|
55
55
|
// 万能加载器
|
|
56
|
-
let modal = await threeLoader.
|
|
56
|
+
let modal = await threeLoader.loadModel(url, filename);
|
|
57
57
|
|
|
58
58
|
threeUtils.center(modal);
|
|
59
59
|
threeUtils.alignBottom(modal);
|
package/MeshBase.js
CHANGED
|
@@ -36,7 +36,7 @@ export default class MeshBase extends Group {
|
|
|
36
36
|
if (!MeshBase.models.get(url) && !MeshBase.loadModeling.get(url)) {
|
|
37
37
|
MeshBase.loadModeling.set(url, true);
|
|
38
38
|
// 万能加载器
|
|
39
|
-
let modal = await threeLoader.
|
|
39
|
+
let modal = await threeLoader.loadModel(url, filename);
|
|
40
40
|
MeshBase.models.set(url, modal);
|
|
41
41
|
MeshBase.loadModeling.set(url, false);
|
|
42
42
|
}
|
package/MeshBase.ts
CHANGED
|
@@ -50,7 +50,7 @@ export default class MeshBase extends Group {
|
|
|
50
50
|
MeshBase.loadModeling.set(url, true);
|
|
51
51
|
|
|
52
52
|
// 万能加载器
|
|
53
|
-
let modal = await threeLoader.
|
|
53
|
+
let modal = await threeLoader.loadModel(url, filename);
|
|
54
54
|
|
|
55
55
|
MeshBase.models.set(url, modal);
|
|
56
56
|
MeshBase.loadModeling.set(url, false);
|
package/ThreeBase.js
CHANGED
|
@@ -133,6 +133,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
133
133
|
if (this.rendererLost) {
|
|
134
134
|
this.renderer.forceContextRestore();
|
|
135
135
|
this.renderer.domElement.style.opacity = "1";
|
|
136
|
+
this.needRender = true;
|
|
136
137
|
}
|
|
137
138
|
this.setSize(div.clientWidth, div.clientHeight);
|
|
138
139
|
// 开启时时渲染
|
package/ThreeBase.ts
CHANGED
|
@@ -152,6 +152,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
152
152
|
if (this.rendererLost) {
|
|
153
153
|
this.renderer.forceContextRestore();
|
|
154
154
|
this.renderer.domElement.style.opacity = "1";
|
|
155
|
+
this.needRender = true;
|
|
155
156
|
}
|
|
156
157
|
|
|
157
158
|
this.setSize(div.clientWidth, div.clientHeight);
|
package/Transition.d.ts
CHANGED
|
@@ -21,7 +21,7 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
21
21
|
setDuration(duration?: number): this;
|
|
22
22
|
setDelay(delay?: number): this;
|
|
23
23
|
_: {
|
|
24
|
-
[key in `${K}_start` | `${K}_end` | `${K}_startTime`]:
|
|
24
|
+
[key in `${K}_start` | `${K}_end` | `${K}_startTime`]: number;
|
|
25
25
|
};
|
|
26
26
|
private onChangeCall;
|
|
27
27
|
private onDoneCall;
|
package/Transition.ts
CHANGED
|
@@ -85,7 +85,7 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
// 存储 每个参数的 起始位置 起始时间 终止位置 终止时间
|
|
88
|
-
_: { [key in `${K}_start` | `${K}_end` | `${K}_startTime`]:
|
|
88
|
+
_: { [key in `${K}_start` | `${K}_end` | `${K}_startTime`]: number } = {} as { [key in `${K}_start` | `${K}_end` | `${K}_startTime`]: number };
|
|
89
89
|
|
|
90
90
|
// 数据改变的事件回调
|
|
91
91
|
private onChangeCall = (josn: T) => { };
|
|
@@ -127,13 +127,13 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
127
127
|
|
|
128
128
|
key = String(key) as Extract<keyof T, string>;
|
|
129
129
|
|
|
130
|
-
if (this._keys.includes(key) && this.timeTemp < (this._[key + "_startTime"] + this._duration)) {
|
|
130
|
+
if (this._keys.includes(key) && this.timeTemp < ((this._ as any)[key + "_startTime"] + this._duration)) {
|
|
131
131
|
|
|
132
|
-
let start = this._[key + "_start"];
|
|
132
|
+
let start = (this._ as any)[key + "_start"];
|
|
133
133
|
|
|
134
|
-
let end = this._[key + "_end"];
|
|
134
|
+
let end = (this._ as any)[key + "_end"];
|
|
135
135
|
|
|
136
|
-
let timeProgress = Math.min(1, Math.max(0, (this.timeTemp - this._[key + "_startTime"]) / this._duration));
|
|
136
|
+
let timeProgress = Math.min(1, Math.max(0, (this.timeTemp - (this._ as any)[key + "_startTime"]) / this._duration));
|
|
137
137
|
|
|
138
138
|
// 斜率
|
|
139
139
|
let t = 0;
|
|
@@ -154,9 +154,9 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
154
154
|
// 通过斜率求y值
|
|
155
155
|
return (bezier(this._Ybezier, t) * (end - start)) + start;
|
|
156
156
|
|
|
157
|
-
} else if (this._keys.includes(key) && this.timeTemp >= (this._[key + "_startTime"] + this._duration)) {
|
|
157
|
+
} else if (this._keys.includes(key) && this.timeTemp >= ((this._ as any)[key + "_startTime"] + this._duration)) {
|
|
158
158
|
|
|
159
|
-
return this._[key + "_end"];
|
|
159
|
+
return (this._ as any)[key + "_end"];
|
|
160
160
|
}
|
|
161
161
|
|
|
162
162
|
// `没有 ${ key } 的值`;
|
|
@@ -170,13 +170,13 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
170
170
|
for (let key in param) {
|
|
171
171
|
|
|
172
172
|
// 有就赋值
|
|
173
|
-
if (this._keys.includes(key) && Math.abs(param[key] - this._[key + "_end"]) > 0.0001) {
|
|
173
|
+
if (this._keys.includes(key) && Math.abs(param[key] - (this._ as any)[key + "_end"]) > 0.0001) {
|
|
174
174
|
|
|
175
|
-
this._[key + "_start"] = this.get(key);
|
|
175
|
+
(this._ as any)[key + "_start"] = this.get(key);
|
|
176
176
|
|
|
177
|
-
this._[key + "_end"] = param[key];
|
|
177
|
+
(this._ as any)[key + "_end"] = param[key];
|
|
178
178
|
// 起始时间
|
|
179
|
-
this._[key + "_startTime"] = timetemp;
|
|
179
|
+
(this._ as any)[key + "_startTime"] = timetemp;
|
|
180
180
|
|
|
181
181
|
// 执行状态未完成
|
|
182
182
|
this._isDone = false;
|
|
@@ -184,11 +184,11 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
184
184
|
// 没有就添加一个
|
|
185
185
|
} else if (!this._keys.includes(key)) {
|
|
186
186
|
|
|
187
|
-
this._[key + "_start"] = param[key];
|
|
187
|
+
(this._ as any)[key + "_start"] = param[key];
|
|
188
188
|
|
|
189
|
-
this._[key + "_end"] = param[key];
|
|
189
|
+
(this._ as any)[key + "_end"] = param[key];
|
|
190
190
|
// 起始时间
|
|
191
|
-
this._[key + "_startTime"] = timetemp - this._duration;
|
|
191
|
+
(this._ as any)[key + "_startTime"] = timetemp - this._duration;
|
|
192
192
|
|
|
193
193
|
// 执行状态未完成
|
|
194
194
|
this._isDone = false;
|
|
@@ -221,9 +221,9 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
221
221
|
this._keys.push(key);
|
|
222
222
|
}
|
|
223
223
|
|
|
224
|
-
this._[key + "_start"] = param[key];
|
|
225
|
-
this._[key + "_end"] = param[key];
|
|
226
|
-
this._[key + "_startTime"] = -this._duration;
|
|
224
|
+
(this._ as any)[key + "_start"] = param[key];
|
|
225
|
+
(this._ as any)[key + "_end"] = param[key];
|
|
226
|
+
(this._ as any)[key + "_startTime"] = -this._duration;
|
|
227
227
|
}
|
|
228
228
|
|
|
229
229
|
if (this.onChangeCall) {
|
|
@@ -270,7 +270,7 @@ export default class Transition<T extends TransitionParame, K extends Extract<ke
|
|
|
270
270
|
|
|
271
271
|
for (let i in this._keys) {
|
|
272
272
|
|
|
273
|
-
isisDone = this._[this._keys[i] + "_startTime"] + this._duration < this.timeTemp;
|
|
273
|
+
isisDone = (this._ as any)[this._keys[i] + "_startTime"] + this._duration < this.timeTemp;
|
|
274
274
|
|
|
275
275
|
// 只要有一个没有完成 都算没有完成 过渡
|
|
276
276
|
if (!isisDone) {
|
package/package.json
CHANGED
package/threeLoader.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ declare class ThreeLoader extends EventDispatcher {
|
|
|
19
19
|
gltfLoader: GLTFLoader;
|
|
20
20
|
usdzLoader: USDZLoader;
|
|
21
21
|
/** 加载模型支持glb,fbx,stl,obj */
|
|
22
|
-
|
|
22
|
+
loadModel(url: string, filename?: string): Promise<Object3D<import("three").Object3DEventMap>>;
|
|
23
23
|
onload: boolean;
|
|
24
24
|
}
|
|
25
25
|
declare const threeLoader: ThreeLoader;
|
package/threeLoader.js
CHANGED
|
@@ -124,7 +124,7 @@ class ThreeLoader extends EventDispatcher {
|
|
|
124
124
|
//usdz加载器
|
|
125
125
|
usdzLoader = new USDZLoader();
|
|
126
126
|
/** 加载模型支持glb,fbx,stl,obj */
|
|
127
|
-
async
|
|
127
|
+
async loadModel(url, filename = "") {
|
|
128
128
|
// 获取后缀
|
|
129
129
|
const suffix = (get((filename || url).match(/\.([^\.]+)$/), [1]) || "").toLowerCase();
|
|
130
130
|
let Object3d = new Object3D();
|
package/threeLoader.ts
CHANGED
|
@@ -152,7 +152,7 @@ class ThreeLoader extends EventDispatcher {
|
|
|
152
152
|
usdzLoader = new USDZLoader();
|
|
153
153
|
|
|
154
154
|
/** 加载模型支持glb,fbx,stl,obj */
|
|
155
|
-
async
|
|
155
|
+
async loadModel(url: string, filename: string = "") {
|
|
156
156
|
|
|
157
157
|
// 获取后缀
|
|
158
158
|
const suffix = (get((filename || url).match(/\.([^\.]+)$/), [1]) || "").toLowerCase();
|
package/threeUtils.d.ts
CHANGED
|
@@ -41,6 +41,7 @@ declare class ThreeUtils extends EventDispatcher {
|
|
|
41
41
|
exportUsdz(): void;
|
|
42
42
|
getVolume(geometry: BufferGeometry): number;
|
|
43
43
|
signedVolumeOfTriangle(p1: Vector3, p2: Vector3, p3: Vector3): number;
|
|
44
|
+
dipose(object3d: Object3D): void;
|
|
44
45
|
}
|
|
45
46
|
declare const threeUtils: ThreeUtils;
|
|
46
47
|
export default threeUtils;
|
package/threeUtils.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @Last Modified by: xiaosihan
|
|
5
5
|
* @Last Modified time: 2023-05-03 00:36:18
|
|
6
6
|
*/
|
|
7
|
-
import { Box3, Clock, EventDispatcher, Vector3 } from "three";
|
|
7
|
+
import { Box3, Clock, EventDispatcher, Material, Vector3 } from "three";
|
|
8
8
|
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';
|
|
9
9
|
class ThreeUtils extends EventDispatcher {
|
|
10
10
|
constructor() {
|
|
@@ -244,6 +244,23 @@ class ThreeUtils extends EventDispatcher {
|
|
|
244
244
|
signedVolumeOfTriangle(p1, p2, p3) {
|
|
245
245
|
return p1.dot(p2.cross(p3)) / 6.0;
|
|
246
246
|
}
|
|
247
|
+
//清理对象的网格和材质的缓存
|
|
248
|
+
dipose(object3d) {
|
|
249
|
+
object3d.traverse(obj => {
|
|
250
|
+
const mesh = obj;
|
|
251
|
+
if (mesh.isMesh) {
|
|
252
|
+
mesh.geometry.dispose();
|
|
253
|
+
if (mesh.material instanceof Material) {
|
|
254
|
+
mesh.material.dispose();
|
|
255
|
+
}
|
|
256
|
+
else if (mesh.material instanceof Array) {
|
|
257
|
+
mesh.material.map(m => {
|
|
258
|
+
m.dispose();
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
});
|
|
263
|
+
}
|
|
247
264
|
}
|
|
248
265
|
const threeUtils = new ThreeUtils();
|
|
249
266
|
export default threeUtils;
|
package/threeUtils.ts
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* @Last Modified time: 2023-05-03 00:36:18
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import { Box3, BufferAttribute, BufferGeometry, Clock, EventDispatcher, Mesh, MeshStandardMaterial, Object3D, Vector3 } from "three";
|
|
8
|
+
import { Box3, BufferAttribute, BufferGeometry, Clock, EventDispatcher, Material, Mesh, MeshStandardMaterial, Object3D, Vector3 } from "three";
|
|
9
9
|
import { GLTFExporter } from 'three/examples/jsm/exporters/GLTFExporter';
|
|
10
10
|
|
|
11
11
|
class ThreeUtils extends EventDispatcher {
|
|
@@ -242,7 +242,7 @@ class ThreeUtils extends EventDispatcher {
|
|
|
242
242
|
|
|
243
243
|
//导出usdz
|
|
244
244
|
exportUsdz() {
|
|
245
|
-
|
|
245
|
+
|
|
246
246
|
}
|
|
247
247
|
|
|
248
248
|
// 计算网格的体积
|
|
@@ -283,6 +283,23 @@ class ThreeUtils extends EventDispatcher {
|
|
|
283
283
|
return p1.dot(p2.cross(p3)) / 6.0;
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
+
//清理对象的网格和材质的缓存
|
|
287
|
+
dipose(object3d: Object3D) {
|
|
288
|
+
object3d.traverse(obj => {
|
|
289
|
+
const mesh = obj as Mesh;
|
|
290
|
+
if (mesh.isMesh) {
|
|
291
|
+
mesh.geometry.dispose();
|
|
292
|
+
if (mesh.material instanceof Material) {
|
|
293
|
+
mesh.material.dispose();
|
|
294
|
+
} else if (mesh.material instanceof Array) {
|
|
295
|
+
mesh.material.map(m => {
|
|
296
|
+
m.dispose();
|
|
297
|
+
})
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
});
|
|
301
|
+
}
|
|
302
|
+
|
|
286
303
|
}
|
|
287
304
|
|
|
288
305
|
const threeUtils = new ThreeUtils();
|