three-base 1.129.12 → 1.129.14
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.d.ts +1 -1
- package/lib/ThreeBase.js +8 -8
- package/lib/ThreeBase.ts +9 -9
- package/package.json +1 -1
package/lib/ThreeBase.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
16
16
|
controls: OrbitControls;
|
|
17
17
|
isRendererContextLost: boolean;
|
|
18
18
|
setContainer(div: HTMLDivElement | null): Promise<void>;
|
|
19
|
-
|
|
19
|
+
setsize(width: number, height: number): void;
|
|
20
20
|
controlsPosition: Transition;
|
|
21
21
|
controlsCenter: Transition;
|
|
22
22
|
init(): void;
|
package/lib/ThreeBase.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
* @Last Modified by: xiaosihan
|
|
5
5
|
* @Last Modified time: 2023-03-30 11:00:20
|
|
6
6
|
*/
|
|
7
|
-
import elementResizeEvent from "element-resize-event";
|
|
8
7
|
import { round } from "lodash";
|
|
9
8
|
import { AxesHelper, EventDispatcher, GridHelper, LinearFilter, Mesh, MOUSE, NoBlending, NormalBlending, PerspectiveCamera, RGBAFormat, Scene, TOUCH, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
|
|
10
9
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
@@ -76,10 +75,6 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
76
75
|
for (let c of canvas)
|
|
77
76
|
c.remove();
|
|
78
77
|
div.append(this.renderer.domElement);
|
|
79
|
-
// 监听容器的尺寸的改变
|
|
80
|
-
elementResizeEvent(div, () => {
|
|
81
|
-
this.resize(div.clientWidth, div.clientHeight);
|
|
82
|
-
});
|
|
83
78
|
// 如果上下文被销毁了, 就恢复上下文
|
|
84
79
|
if (this.isRendererContextLost) {
|
|
85
80
|
//@ts-ignore
|
|
@@ -88,14 +83,14 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
88
83
|
await new Promise(resolve => requestAnimationFrame(resolve));
|
|
89
84
|
this.renderer.domElement.style.opacity = "1";
|
|
90
85
|
}
|
|
91
|
-
this.
|
|
86
|
+
this.setsize(div.clientWidth, div.clientHeight);
|
|
92
87
|
// 开启时时渲染
|
|
93
88
|
threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
|
|
94
89
|
threeUtils.addEventListener("requestAnimationFrame", this.renderBindThis);
|
|
95
90
|
}
|
|
96
91
|
}
|
|
97
92
|
// 修改尺寸
|
|
98
|
-
|
|
93
|
+
setsize(width, height) {
|
|
99
94
|
this.camera.aspect = width / height;
|
|
100
95
|
this.camera.updateProjectionMatrix();
|
|
101
96
|
this.renderer.setPixelRatio(window.devicePixelRatio);
|
|
@@ -228,7 +223,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
228
223
|
this.renderer.forceContextLoss();
|
|
229
224
|
// 标记上下文被销毁了
|
|
230
225
|
this.isRendererContextLost = true;
|
|
231
|
-
this.
|
|
226
|
+
this.setsize(100, 100);
|
|
232
227
|
this.renderer.domElement.style.opacity = "0";
|
|
233
228
|
}
|
|
234
229
|
// 渲染场景
|
|
@@ -240,6 +235,11 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
240
235
|
this.stopRender();
|
|
241
236
|
return;
|
|
242
237
|
}
|
|
238
|
+
//判断尺寸发生改变时重置尺寸
|
|
239
|
+
const parentNode = this.renderer.domElement.parentNode;
|
|
240
|
+
if (parentNode.clientWidth !== this.size.x || parentNode.clientHeight !== this.size.y) {
|
|
241
|
+
this.setsize(parentNode.clientWidth, parentNode.clientHeight);
|
|
242
|
+
}
|
|
243
243
|
// 分发鼠标事件
|
|
244
244
|
this.threeMouse.dispatchEvent();
|
|
245
245
|
// 在不自动渲染时, needRender=false 就跳过渲染
|
package/lib/ThreeBase.ts
CHANGED
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* @Last Modified time: 2023-03-30 11:00:20
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
import elementResizeEvent from "element-resize-event";
|
|
9
8
|
import { round } from "lodash";
|
|
10
9
|
import { AxesHelper, BufferGeometry, EventDispatcher, GridHelper, LinearFilter, Mesh, MeshBasicMaterial, MOUSE, NoBlending, NormalBlending, Object3D, PerspectiveCamera, RGBAFormat, Scene, Texture, TOUCH, Vector2, Vector3, WebGLRenderer, WebGLRenderTarget } from "three";
|
|
11
10
|
import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";
|
|
@@ -92,11 +91,6 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
92
91
|
for (let c of canvas) c.remove();
|
|
93
92
|
div.append(this.renderer.domElement);
|
|
94
93
|
|
|
95
|
-
// 监听容器的尺寸的改变
|
|
96
|
-
elementResizeEvent(div, () => {
|
|
97
|
-
this.resize(div.clientWidth, div.clientHeight);
|
|
98
|
-
});
|
|
99
|
-
|
|
100
94
|
// 如果上下文被销毁了, 就恢复上下文
|
|
101
95
|
if (this.isRendererContextLost) {
|
|
102
96
|
//@ts-ignore
|
|
@@ -106,7 +100,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
106
100
|
this.renderer.domElement.style.opacity = "1";
|
|
107
101
|
}
|
|
108
102
|
|
|
109
|
-
this.
|
|
103
|
+
this.setsize(div.clientWidth, div.clientHeight);
|
|
110
104
|
|
|
111
105
|
// 开启时时渲染
|
|
112
106
|
threeUtils.removeEventListener("requestAnimationFrame", this.renderBindThis);
|
|
@@ -115,7 +109,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
115
109
|
}
|
|
116
110
|
|
|
117
111
|
// 修改尺寸
|
|
118
|
-
|
|
112
|
+
setsize(width: number, height: number) {
|
|
119
113
|
this.camera.aspect = width / height;
|
|
120
114
|
this.camera.updateProjectionMatrix();
|
|
121
115
|
this.renderer.setPixelRatio(window.devicePixelRatio);
|
|
@@ -271,7 +265,7 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
271
265
|
this.renderer.forceContextLoss();
|
|
272
266
|
// 标记上下文被销毁了
|
|
273
267
|
this.isRendererContextLost = true;
|
|
274
|
-
this.
|
|
268
|
+
this.setsize(100, 100);
|
|
275
269
|
this.renderer.domElement.style.opacity = "0";
|
|
276
270
|
}
|
|
277
271
|
|
|
@@ -287,6 +281,12 @@ export default class ThreeBase extends EventDispatcher {
|
|
|
287
281
|
return;
|
|
288
282
|
}
|
|
289
283
|
|
|
284
|
+
//判断尺寸发生改变时重置尺寸
|
|
285
|
+
const parentNode = this.renderer.domElement.parentNode as HTMLDivElement;
|
|
286
|
+
if (parentNode.clientWidth !== this.size.x || parentNode.clientHeight !== this.size.y) {
|
|
287
|
+
this.setsize(parentNode.clientWidth, parentNode.clientHeight);
|
|
288
|
+
}
|
|
289
|
+
|
|
290
290
|
// 分发鼠标事件
|
|
291
291
|
this.threeMouse.dispatchEvent();
|
|
292
292
|
|