@operato/scene-visualizer 9.2.2 → 10.0.0-beta.1
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/dist/banner.d.ts +232 -3
- package/dist/banner.js +1 -2
- package/dist/banner.js.map +1 -1
- package/dist/camera.d.ts +232 -3
- package/dist/camera.js +1 -2
- package/dist/camera.js.map +1 -1
- package/dist/carrier.d.ts +263 -0
- package/dist/carrier.js +272 -0
- package/dist/carrier.js.map +1 -0
- package/dist/cube.d.ts +232 -4
- package/dist/cube.js +1 -2
- package/dist/cube.js.map +1 -1
- package/dist/cylinder.d.ts +1 -3
- package/dist/cylinder.js +1 -2
- package/dist/cylinder.js.map +1 -1
- package/dist/desk.d.ts +238 -3
- package/dist/desk.js +1 -2
- package/dist/desk.js.map +1 -1
- package/dist/editors/index.d.ts +1 -0
- package/dist/editors/index.js +5 -0
- package/dist/editors/index.js.map +1 -1
- package/dist/editors/property-editor-gltf-fill-targets.d.ts +17 -0
- package/dist/editors/property-editor-gltf-fill-targets.js +211 -0
- package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -0
- package/dist/editors/property-editor-gltf-info.js +38 -29
- package/dist/editors/property-editor-gltf-info.js.map +1 -1
- package/dist/editors/property-editor-location-increase-pattern.js +91 -95
- package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
- package/dist/effects/outline.js +1 -1
- package/dist/effects/outline.js.map +1 -1
- package/dist/ellipse.js +2 -4
- package/dist/ellipse.js.map +1 -1
- package/dist/gltf-object.d.ts +232 -3
- package/dist/gltf-object.js +1 -2
- package/dist/gltf-object.js.map +1 -1
- package/dist/html-overlay-element.js +3 -7
- package/dist/html-overlay-element.js.map +1 -1
- package/dist/index.d.ts +5 -17
- package/dist/index.js +7 -17
- package/dist/index.js.map +1 -1
- package/dist/light.d.ts +1 -2
- package/dist/light.js +1 -2
- package/dist/light.js.map +1 -1
- package/dist/polygon.js +2 -4
- package/dist/polygon.js.map +1 -1
- package/dist/rack-table-3d.d.ts +16 -0
- package/dist/rack-table-3d.js +94 -0
- package/dist/rack-table-3d.js.map +1 -0
- package/dist/rack-table-cell.d.ts +238 -3
- package/dist/rack-table-cell.js +44 -51
- package/dist/rack-table-cell.js.map +1 -1
- package/dist/rack-table-location.d.ts +37 -0
- package/dist/rack-table-location.js +227 -0
- package/dist/rack-table-location.js.map +1 -0
- package/dist/rack-table.d.ts +13 -29
- package/dist/rack-table.js +108 -380
- package/dist/rack-table.js.map +1 -1
- package/dist/rack.d.ts +3 -5
- package/dist/rack.js +7 -9
- package/dist/rack.js.map +1 -1
- package/dist/rect.js +2 -4
- package/dist/rect.js.map +1 -1
- package/dist/signal-tower.d.ts +492 -0
- package/dist/signal-tower.js +275 -0
- package/dist/signal-tower.js.map +1 -0
- package/dist/sphere.d.ts +1 -3
- package/dist/sphere.js +1 -2
- package/dist/sphere.js.map +1 -1
- package/dist/sprite.d.ts +232 -3
- package/dist/sprite.js +1 -2
- package/dist/sprite.js.map +1 -1
- package/dist/stock.d.ts +22 -10
- package/dist/stock.js +87 -81
- package/dist/stock.js.map +1 -1
- package/dist/tank.d.ts +492 -0
- package/dist/tank.js +312 -0
- package/dist/tank.js.map +1 -0
- package/dist/templates/carrier.d.ts +19 -0
- package/dist/templates/carrier.js +20 -0
- package/dist/templates/carrier.js.map +1 -0
- package/dist/templates/cube.js +1 -1
- package/dist/templates/cube.js.map +1 -1
- package/dist/templates/cylinder.js +3 -3
- package/dist/templates/cylinder.js.map +1 -1
- package/dist/templates/index.d.ts +1 -0
- package/dist/templates/index.js +9 -1
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/signal-tower.d.ts +21 -0
- package/dist/templates/signal-tower.js +22 -0
- package/dist/templates/signal-tower.js.map +1 -0
- package/dist/templates/sphere.d.ts +1 -0
- package/dist/templates/sphere.js +5 -4
- package/dist/templates/sphere.js.map +1 -1
- package/dist/templates/tank.d.ts +21 -0
- package/dist/templates/tank.js +22 -0
- package/dist/templates/tank.js.map +1 -0
- package/dist/templates/vehicle.d.ts +19 -0
- package/dist/templates/vehicle.js +20 -0
- package/dist/templates/vehicle.js.map +1 -0
- package/dist/text.js +2 -4
- package/dist/text.js.map +1 -1
- package/dist/three-container.d.ts +11 -35
- package/dist/three-container.js +128 -322
- package/dist/three-container.js.map +1 -1
- package/dist/three-controls.d.ts +101 -1
- package/dist/three-controls.js +339 -541
- package/dist/three-controls.js.map +1 -1
- package/dist/three-space.d.ts +6 -83
- package/dist/three-space.js +25 -537
- package/dist/three-space.js.map +1 -1
- package/dist/threed/index.d.ts +1 -0
- package/dist/threed/index.js +1 -0
- package/dist/threed/index.js.map +1 -1
- package/dist/threed/interfaces.d.ts +15 -0
- package/dist/threed/interfaces.js +5 -0
- package/dist/threed/interfaces.js.map +1 -0
- package/dist/threed/managers/camera-manager.d.ts +14 -0
- package/dist/threed/managers/camera-manager.js +60 -0
- package/dist/threed/managers/camera-manager.js.map +1 -0
- package/dist/threed/managers/controls-manager.d.ts +50 -0
- package/dist/threed/managers/controls-manager.js +249 -0
- package/dist/threed/managers/controls-manager.js.map +1 -0
- package/dist/threed/managers/event-manager3d.d.ts +19 -0
- package/dist/threed/managers/event-manager3d.js +76 -0
- package/dist/threed/managers/event-manager3d.js.map +1 -0
- package/dist/threed/managers/index.d.ts +7 -0
- package/dist/threed/managers/index.js +7 -0
- package/dist/threed/managers/index.js.map +1 -0
- package/dist/threed/managers/light-manager.d.ts +7 -0
- package/dist/threed/managers/light-manager.js +37 -0
- package/dist/threed/managers/light-manager.js.map +1 -0
- package/dist/threed/managers/renderer-manager.d.ts +30 -0
- package/dist/threed/managers/renderer-manager.js +120 -0
- package/dist/threed/managers/renderer-manager.js.map +1 -0
- package/dist/threed/managers/scene-manager.d.ts +15 -0
- package/dist/threed/managers/scene-manager.js +48 -0
- package/dist/threed/managers/scene-manager.js.map +1 -0
- package/dist/threed/managers/types.d.ts +36 -0
- package/dist/threed/managers/types.js +2 -0
- package/dist/threed/managers/types.js.map +1 -0
- package/dist/threed/real-object-dom-element.js +11 -3
- package/dist/threed/real-object-dom-element.js.map +1 -1
- package/dist/threed/real-object-extrude.d.ts +1 -0
- package/dist/threed/real-object-extrude.js +7 -0
- package/dist/threed/real-object-extrude.js.map +1 -1
- package/dist/threed/real-object-gltf.js +6 -2
- package/dist/threed/real-object-gltf.js.map +1 -1
- package/dist/threed/real-object-mesh.js +4 -6
- package/dist/threed/real-object-mesh.js.map +1 -1
- package/dist/threed/real-object-registry.d.ts +7 -0
- package/dist/threed/real-object-registry.js +32 -0
- package/dist/threed/real-object-registry.js.map +1 -0
- package/dist/threed/real-object-scene.js +10 -5
- package/dist/threed/real-object-scene.js.map +1 -1
- package/dist/threed/real-object-sprite-2d.js.map +1 -1
- package/dist/threed/real-object-sprite.js +2 -0
- package/dist/threed/real-object-sprite.js.map +1 -1
- package/dist/threed/real-object-text.js +2 -0
- package/dist/threed/real-object-text.js.map +1 -1
- package/dist/threed/real-object.d.ts +3 -2
- package/dist/threed/real-object.js +7 -16
- package/dist/threed/real-object.js.map +1 -1
- package/dist/threed/three-dimensional-container.d.ts +1 -2
- package/dist/threed/three-dimensional-container.js.map +1 -1
- package/dist/threed/utils/dispose.d.ts +2 -0
- package/dist/threed/utils/dispose.js +32 -0
- package/dist/threed/utils/dispose.js.map +1 -0
- package/dist/vehicle.d.ts +248 -0
- package/dist/vehicle.js +133 -0
- package/dist/vehicle.js.map +1 -0
- package/dist/visualizer.d.ts +4 -5
- package/dist/visualizer.js +15 -28
- package/dist/visualizer.js.map +1 -1
- package/dist/wall.d.ts +232 -4
- package/dist/wall.js +1 -2
- package/dist/wall.js.map +1 -1
- package/icons/carrier.png +0 -0
- package/icons/signal-tower.png +0 -0
- package/icons/tank.png +0 -0
- package/icons/vehicle.png +0 -0
- package/package.json +16 -18
package/dist/three-container.js
CHANGED
|
@@ -3,13 +3,9 @@
|
|
|
3
3
|
*/
|
|
4
4
|
import { __decorate } from "tslib";
|
|
5
5
|
import { Container, error, FPS, Layout, sceneComponent } from '@hatiolab/things-scene';
|
|
6
|
-
import * as THREE from 'three';
|
|
7
|
-
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
|
|
8
|
-
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass.js';
|
|
9
|
-
import ThreeControls from './three-controls.js';
|
|
10
6
|
import './three-layout.js';
|
|
11
|
-
import {
|
|
12
|
-
import {
|
|
7
|
+
import { createRealObjectFor } from './threed/real-object-registry.js';
|
|
8
|
+
import { SceneManager, CameraManager, RendererManager, LightManager, ControlsManager, EventManager3D } from './threed/managers/index.js';
|
|
13
9
|
const NATURE = {
|
|
14
10
|
mutable: false,
|
|
15
11
|
resizable: true,
|
|
@@ -21,45 +17,16 @@ const NATURE = {
|
|
|
21
17
|
name: 'precision',
|
|
22
18
|
property: {
|
|
23
19
|
options: [
|
|
24
|
-
{
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
},
|
|
28
|
-
{
|
|
29
|
-
display: 'Medium',
|
|
30
|
-
value: 'mediump'
|
|
31
|
-
},
|
|
32
|
-
{
|
|
33
|
-
display: 'Low',
|
|
34
|
-
value: 'lowp'
|
|
35
|
-
}
|
|
20
|
+
{ display: 'High', value: 'highp' },
|
|
21
|
+
{ display: 'Medium', value: 'mediump' },
|
|
22
|
+
{ display: 'Low', value: 'lowp' }
|
|
36
23
|
]
|
|
37
24
|
}
|
|
38
25
|
},
|
|
39
|
-
{
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
property: 'antialias'
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
type: 'checkbox',
|
|
47
|
-
label: '3dmode',
|
|
48
|
-
name: 'threed',
|
|
49
|
-
property: 'threed'
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
type: 'checkbox',
|
|
53
|
-
label: 'auto-rotate',
|
|
54
|
-
name: 'autoRotate',
|
|
55
|
-
property: 'autoRotate'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
type: 'checkbox',
|
|
59
|
-
label: 'debug',
|
|
60
|
-
name: 'debug',
|
|
61
|
-
property: 'debug'
|
|
62
|
-
}
|
|
26
|
+
{ type: 'checkbox', label: 'anti-alias', name: 'antialias', property: 'antialias' },
|
|
27
|
+
{ type: 'checkbox', label: '3dmode', name: 'threed', property: 'threed' },
|
|
28
|
+
{ type: 'checkbox', label: 'auto-rotate', name: 'autoRotate', property: 'autoRotate' },
|
|
29
|
+
{ type: 'checkbox', label: 'debug', name: 'debug', property: 'debug' }
|
|
63
30
|
],
|
|
64
31
|
help: 'scene/component/three-container'
|
|
65
32
|
};
|
|
@@ -67,26 +34,33 @@ const WEBGL_NO_SUPPORT_TEXT = 'WebGL no support';
|
|
|
67
34
|
let ThreeContainer = class ThreeContainer extends Container {
|
|
68
35
|
constructor() {
|
|
69
36
|
super(...arguments);
|
|
70
|
-
this.
|
|
71
|
-
this.
|
|
37
|
+
this.sceneManager = new SceneManager();
|
|
38
|
+
this.cameraManager = new CameraManager();
|
|
39
|
+
this.rendererManager = new RendererManager();
|
|
40
|
+
this.lightManager = new LightManager();
|
|
41
|
+
this.controlsManager = new ControlsManager();
|
|
42
|
+
this.eventManager = new EventManager3D();
|
|
72
43
|
}
|
|
73
44
|
containable(component) {
|
|
74
|
-
return
|
|
45
|
+
return true;
|
|
75
46
|
}
|
|
76
47
|
is3dContainer() {
|
|
77
48
|
return true;
|
|
78
49
|
}
|
|
79
50
|
/* THREE Object related .. */
|
|
80
51
|
createObjects(components) {
|
|
81
|
-
for (
|
|
52
|
+
for (const component of components) {
|
|
82
53
|
try {
|
|
83
|
-
|
|
54
|
+
const item = createRealObjectFor(component);
|
|
84
55
|
if (item) {
|
|
56
|
+
component._realObject = item;
|
|
57
|
+
item.update();
|
|
58
|
+
item.updateTransform();
|
|
85
59
|
if (component.isHTMLElement()) {
|
|
86
|
-
this.css3DScene.add(item.object3d);
|
|
60
|
+
this.rendererManager.css3DScene.add(item.object3d);
|
|
87
61
|
}
|
|
88
62
|
else {
|
|
89
|
-
this.
|
|
63
|
+
this.sceneManager.scene.add(item.object3d);
|
|
90
64
|
}
|
|
91
65
|
}
|
|
92
66
|
}
|
|
@@ -96,248 +70,141 @@ let ThreeContainer = class ThreeContainer extends Container {
|
|
|
96
70
|
}
|
|
97
71
|
}
|
|
98
72
|
destroy_scene3d() {
|
|
99
|
-
var _a;
|
|
100
73
|
this.stop();
|
|
101
74
|
window.removeEventListener('focus', this._onFocus);
|
|
102
75
|
window.removeEventListener('resize', this._onResize);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (child.geometry && child.geometry.dispose)
|
|
118
|
-
child.geometry.dispose();
|
|
119
|
-
if (child.material && child.material.dispose)
|
|
120
|
-
child.material.dispose();
|
|
121
|
-
if (child.texture && child.texture.dispose)
|
|
122
|
-
child.texture.dispose();
|
|
123
|
-
this._scene3d.remove(child);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
delete this._scene3d;
|
|
76
|
+
this.controlsManager.destroy();
|
|
77
|
+
this.lightManager.destroy();
|
|
78
|
+
this.rendererManager.destroy();
|
|
79
|
+
this.cameraManager.destroy();
|
|
80
|
+
this.sceneManager.destroy();
|
|
81
|
+
this.eventManager.destroy();
|
|
82
|
+
}
|
|
83
|
+
getLightingConfig() {
|
|
84
|
+
return {
|
|
85
|
+
hemisphere: { skyColor: 0xdddddd, groundColor: 0x333333, intensity: 0.035 }
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
getCss3DSceneAttribute() {
|
|
89
|
+
return 'three-container:css3d-renderer';
|
|
127
90
|
}
|
|
128
91
|
update() {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
92
|
+
const { width, height } = this.bounds;
|
|
93
|
+
const { fov = 45, near = 0.1, far = 20000, antialias = true, precision = 'highp', cameraX, cameraY, cameraZ, exposure = 2.5 } = this.state;
|
|
94
|
+
const components = this.components || [];
|
|
132
95
|
// SCENE
|
|
133
|
-
|
|
96
|
+
const scene = this.sceneManager.setup();
|
|
134
97
|
// CAMERA
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (cameraY != undefined)
|
|
142
|
-
cameraYPos = cameraY * height;
|
|
143
|
-
if (cameraZ != undefined)
|
|
144
|
-
cameraZPos = cameraZ * Math.floor(Math.min(width, height));
|
|
145
|
-
this._camera.position.set(cameraXPos, cameraZPos, cameraYPos);
|
|
146
|
-
this._scene3d.add(this._camera);
|
|
147
|
-
this._camera.lookAt(this._scene3d.position);
|
|
148
|
-
this._camera.zoom = this.getState('zoom') * 0.01;
|
|
149
|
-
try {
|
|
150
|
-
const canvas = document.createElement('canvas');
|
|
151
|
-
let context = canvas.getContext('webgl2');
|
|
152
|
-
var renderer3d = new THREE.WebGLRenderer({
|
|
153
|
-
canvas,
|
|
154
|
-
context,
|
|
155
|
-
precision,
|
|
156
|
-
alpha: true,
|
|
157
|
-
antialias
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
catch (e) {
|
|
161
|
-
this._noSupportWebgl = true;
|
|
98
|
+
const camera = this.cameraManager.setup(width, height, {
|
|
99
|
+
fov, near, far, zoom: this.getState('zoom'), cameraX, cameraY, cameraZ
|
|
100
|
+
});
|
|
101
|
+
this.cameraManager.addToScene(scene);
|
|
102
|
+
// RENDERER (WebGL)
|
|
103
|
+
if (!this.rendererManager.setupWebGL(width, height, { precision, antialias, exposure })) {
|
|
162
104
|
return;
|
|
163
105
|
}
|
|
164
|
-
this._renderer3d = renderer3d;
|
|
165
|
-
renderer3d.autoClear = true;
|
|
166
|
-
// @ts-ignore for three@0.150.1
|
|
167
|
-
renderer3d.outputColorSpace = THREE.SRGBColorSpace;
|
|
168
|
-
renderer3d.useLegacyLights = false;
|
|
169
|
-
renderer3d.toneMappingExposure = Math.pow(exposure, 5.0);
|
|
170
|
-
renderer3d.toneMapping = THREE.LinearToneMapping;
|
|
171
|
-
renderer3d.shadowMap.enabled = true;
|
|
172
|
-
renderer3d.setClearColor(0xffffff, 0); // transparent
|
|
173
|
-
renderer3d.setSize(width, height);
|
|
174
106
|
// CONTROLS
|
|
175
|
-
this.
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
this.
|
|
180
|
-
|
|
181
|
-
this._clock = new THREE.Clock(true);
|
|
182
|
-
this._mixer = new THREE.AnimationMixer(this.scene3d);
|
|
107
|
+
this.controlsManager.setup(camera, this);
|
|
108
|
+
// LIGHTS
|
|
109
|
+
this.lightManager.setup(scene, camera, this.getLightingConfig());
|
|
110
|
+
// MIXER
|
|
111
|
+
this.sceneManager.setupMixer();
|
|
112
|
+
// CREATE 3D OBJECTS
|
|
183
113
|
this.createObjects(components);
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
//
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
this._onFocus = (e) => {
|
|
195
|
-
this.render_threed();
|
|
196
|
-
};
|
|
197
|
-
this._onResize = (e) => {
|
|
198
|
-
this.resize();
|
|
199
|
-
};
|
|
114
|
+
camera.updateProjectionMatrix();
|
|
115
|
+
// FLOOR
|
|
116
|
+
this.sceneManager.addFloor(this);
|
|
117
|
+
// POSTPROCESSING
|
|
118
|
+
this.rendererManager.setupComposer(scene, camera, width, height);
|
|
119
|
+
// CSS3D
|
|
120
|
+
this.rendererManager.setupCSS3D(this.app.isViewMode, this.getCss3DSceneAttribute());
|
|
121
|
+
// EVENT LISTENERS
|
|
122
|
+
this._onFocus = () => this.render_threed();
|
|
123
|
+
this._onResize = () => this.resize();
|
|
200
124
|
window.addEventListener('resize', this._onResize);
|
|
201
125
|
window.addEventListener('focus', this._onFocus);
|
|
202
126
|
this.buildOverlays();
|
|
203
127
|
this.resize();
|
|
204
128
|
}
|
|
205
129
|
resize() {
|
|
206
|
-
var _a;
|
|
207
130
|
const { width, height } = this.bounds;
|
|
208
|
-
this.
|
|
209
|
-
this.
|
|
210
|
-
this.css3DRenderer.setSize(width, height);
|
|
211
|
-
(_a = this.composer) === null || _a === void 0 ? void 0 : _a.setSize(width, height);
|
|
212
|
-
this._camera.updateProjectionMatrix();
|
|
131
|
+
this.cameraManager.updateAspect(width, height);
|
|
132
|
+
this.rendererManager.resize(width, height);
|
|
213
133
|
}
|
|
214
134
|
init_scene3d() {
|
|
215
135
|
this.root.on('redraw', this.onredraw, this);
|
|
216
|
-
if (this.
|
|
136
|
+
if (this.sceneManager.scene) {
|
|
217
137
|
this.destroy_scene3d();
|
|
218
138
|
}
|
|
219
139
|
this.update();
|
|
220
140
|
this.onchangeData && this.onchangeData(this.data, this.data);
|
|
221
141
|
}
|
|
222
142
|
threed_animate() {
|
|
223
|
-
if (!this.
|
|
143
|
+
if (!this.controlsManager.isActive) {
|
|
224
144
|
return;
|
|
225
145
|
}
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
this._controls.update();
|
|
230
|
-
if (this.state.autoRotate) {
|
|
231
|
-
this.invalidate();
|
|
232
|
-
}
|
|
146
|
+
this.sceneManager.updateAnimation();
|
|
147
|
+
this.controlsManager.update();
|
|
233
148
|
this.render_threed();
|
|
234
149
|
}
|
|
235
150
|
stop() { }
|
|
236
151
|
get scene3d() {
|
|
237
|
-
if (!this.
|
|
152
|
+
if (!this.sceneManager.scene) {
|
|
238
153
|
this.init_scene3d();
|
|
239
154
|
}
|
|
240
|
-
return this.
|
|
155
|
+
return this.sceneManager.scene;
|
|
241
156
|
}
|
|
242
157
|
get renderer3d() {
|
|
243
|
-
return this.
|
|
158
|
+
return this.rendererManager.renderer;
|
|
244
159
|
}
|
|
245
160
|
get mixer() {
|
|
246
|
-
return this.
|
|
161
|
+
return this.sceneManager.mixer;
|
|
247
162
|
}
|
|
248
163
|
get zoom() {
|
|
249
|
-
|
|
250
|
-
return (_a = this._camera) === null || _a === void 0 ? void 0 : _a.zoom;
|
|
164
|
+
return this.cameraManager.zoom;
|
|
251
165
|
}
|
|
252
|
-
/**
|
|
253
|
-
* CSS3DRenderer용 THREE.Scene을 제공
|
|
254
|
-
*/
|
|
255
166
|
get css3DScene() {
|
|
256
|
-
|
|
257
|
-
this._css3DScene = this.buildCSS3DScene();
|
|
258
|
-
}
|
|
259
|
-
return this._css3DScene;
|
|
167
|
+
return this.rendererManager.css3DScene;
|
|
260
168
|
}
|
|
261
|
-
buildCSS3DScene() {
|
|
262
|
-
return new THREE.Scene();
|
|
263
|
-
}
|
|
264
|
-
disposeCSS3DScene() {
|
|
265
|
-
var children = [...this.css3DScene.children];
|
|
266
|
-
children.forEach(child => this.css3DScene.remove(child));
|
|
267
|
-
}
|
|
268
|
-
/* css3d-renderer */
|
|
269
|
-
/**
|
|
270
|
-
* css3d-renderer getter
|
|
271
|
-
*/
|
|
272
169
|
get css3DRenderer() {
|
|
273
|
-
|
|
274
|
-
this._css3DRenderer = this.createCSS3DRenderer();
|
|
275
|
-
}
|
|
276
|
-
return this._css3DRenderer;
|
|
277
|
-
}
|
|
278
|
-
createCSS3DRenderer() {
|
|
279
|
-
var renderer = new CSS3DRenderer();
|
|
280
|
-
var div = renderer.domElement;
|
|
281
|
-
div.style.position = 'absolute';
|
|
282
|
-
div.style.top = '0';
|
|
283
|
-
div.style.pointerEvents = 'none';
|
|
284
|
-
div.setAttribute('scene', 'three-container:css3d-renderer');
|
|
285
|
-
if (this.app.isViewMode) {
|
|
286
|
-
// disableAllUserEvents(div)
|
|
287
|
-
}
|
|
288
|
-
else {
|
|
289
|
-
div.style.pointerEvents = 'none';
|
|
290
|
-
}
|
|
291
|
-
return renderer;
|
|
292
|
-
}
|
|
293
|
-
disposeCSS3DRenderer() {
|
|
294
|
-
// Nothing to do
|
|
170
|
+
return this.rendererManager.css3DRenderer;
|
|
295
171
|
}
|
|
296
|
-
/**
|
|
297
|
-
* element내부에 필요한 overlay들을 생성
|
|
298
|
-
* ViewRenderer에서는 CSS3DRenderer와 GLRendering을 위한 canvas를 오버레이로 만든다.
|
|
299
|
-
* Warn: this.element는 아직 만들어지지 않은 상태에 buildOverlays가 호출됨.
|
|
300
|
-
* @param into
|
|
301
|
-
*/
|
|
302
172
|
buildOverlays() {
|
|
303
173
|
this.element.appendChild(this.css3DRenderer.domElement);
|
|
304
174
|
}
|
|
305
175
|
render_threed() {
|
|
306
|
-
|
|
307
|
-
this.composer.render();
|
|
308
|
-
}
|
|
176
|
+
this.rendererManager.render();
|
|
309
177
|
}
|
|
310
|
-
/* Container
|
|
178
|
+
/* Container Overrides */
|
|
311
179
|
render(ctx) {
|
|
312
180
|
if (this.app.isViewMode) {
|
|
313
181
|
this.setState('threed', true);
|
|
314
182
|
}
|
|
315
|
-
if (this.state.threed && !this.
|
|
316
|
-
this.
|
|
183
|
+
if (this.state.threed && !this.rendererManager.noSupportWebgl && this.cameraManager.camera) {
|
|
184
|
+
this.rendererManager.renderCSS3D(this.cameraManager.camera);
|
|
317
185
|
return;
|
|
318
186
|
}
|
|
319
187
|
super.render(ctx);
|
|
320
188
|
}
|
|
321
189
|
postrender(ctx) {
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
// ios에서 width, height에 소수점이 있으면 3d를 표현하지 못하는 문제가 있어 정수화
|
|
190
|
+
const { left, top, debug, threed } = this.state;
|
|
191
|
+
let { width, height } = this.bounds;
|
|
325
192
|
width = Math.floor(width);
|
|
326
193
|
height = Math.floor(height);
|
|
327
194
|
if (threed) {
|
|
328
|
-
if (!this.
|
|
195
|
+
if (!this.sceneManager.scene) {
|
|
329
196
|
this.init_scene3d();
|
|
330
197
|
this.render_threed();
|
|
331
198
|
}
|
|
332
|
-
if (this.
|
|
199
|
+
if (this.rendererManager.noSupportWebgl) {
|
|
333
200
|
this._showWebglNoSupportText(ctx);
|
|
334
201
|
return;
|
|
335
202
|
}
|
|
336
|
-
if (!this.
|
|
203
|
+
if (!this.rendererManager.renderer) {
|
|
337
204
|
return;
|
|
338
205
|
}
|
|
339
|
-
|
|
340
|
-
ctx.drawImage(this.
|
|
206
|
+
const { width: rw, height: rh } = this.rendererManager.getSize();
|
|
207
|
+
ctx.drawImage(this.rendererManager.domElement, 0, 0, rw, rh, left, top, width, height);
|
|
341
208
|
if (debug) {
|
|
342
209
|
ctx.font = 100 + 'px Arial';
|
|
343
210
|
ctx.textAlign = 'center';
|
|
@@ -351,10 +218,8 @@ let ThreeContainer = class ThreeContainer extends Container {
|
|
|
351
218
|
}
|
|
352
219
|
}
|
|
353
220
|
dispose() {
|
|
354
|
-
var _a;
|
|
355
221
|
this.root.off('redraw', this.onredraw, this);
|
|
356
|
-
this.disposeCSS3DScene();
|
|
357
|
-
(_a = this.composer) === null || _a === void 0 ? void 0 : _a.dispose();
|
|
222
|
+
this.rendererManager.disposeCSS3DScene();
|
|
358
223
|
this.destroy_scene3d();
|
|
359
224
|
super.dispose();
|
|
360
225
|
}
|
|
@@ -365,29 +230,18 @@ let ThreeContainer = class ThreeContainer extends Container {
|
|
|
365
230
|
return NATURE;
|
|
366
231
|
}
|
|
367
232
|
getObjectByRaycast() {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
while (object) {
|
|
372
|
-
if (object.userData.context) {
|
|
373
|
-
return object;
|
|
374
|
-
}
|
|
375
|
-
object = object.parent;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
233
|
+
if (!this.cameraManager.camera || !this.sceneManager.scene)
|
|
234
|
+
return;
|
|
235
|
+
return this.eventManager.getObjectByRaycast(this.cameraManager.camera, this.sceneManager.scene);
|
|
378
236
|
}
|
|
379
237
|
getObjectsByRaycast() {
|
|
380
|
-
|
|
381
|
-
if (!this._camera) {
|
|
238
|
+
if (!this.cameraManager.camera || !this.sceneManager.scene)
|
|
382
239
|
return;
|
|
383
|
-
|
|
384
|
-
this._raycaster.setFromCamera(vector, this._camera);
|
|
385
|
-
var intersects = this._raycaster.intersectObjects(this._scene3d.children, true);
|
|
386
|
-
return intersects;
|
|
240
|
+
return this.eventManager.getObjectsByRaycast(this.cameraManager.camera, this.sceneManager.scene);
|
|
387
241
|
}
|
|
388
242
|
_showWebglNoSupportText(context) {
|
|
389
243
|
context.save();
|
|
390
|
-
|
|
244
|
+
const { width, height } = this.state;
|
|
391
245
|
context.font = width / 20 + 'px Arial';
|
|
392
246
|
context.textAlign = 'center';
|
|
393
247
|
context.fillText(WEBGL_NO_SUPPORT_TEXT, width / 2 - width / 40, height / 2);
|
|
@@ -398,141 +252,95 @@ let ThreeContainer = class ThreeContainer extends Container {
|
|
|
398
252
|
if (after.hasOwnProperty('width') || after.hasOwnProperty('height') || after.hasOwnProperty('threed'))
|
|
399
253
|
this.destroy_scene3d();
|
|
400
254
|
if (after.hasOwnProperty('autoRotate')) {
|
|
401
|
-
|
|
402
|
-
this._controls.doAutoRotate(after.autoRotate);
|
|
403
|
-
}
|
|
255
|
+
this.controlsManager.setAutoRotate(after.autoRotate);
|
|
404
256
|
}
|
|
405
257
|
if (after.hasOwnProperty('fov') ||
|
|
406
258
|
after.hasOwnProperty('near') ||
|
|
407
259
|
after.hasOwnProperty('far') ||
|
|
408
260
|
after.hasOwnProperty('zoom')) {
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
this._camera.far = far;
|
|
413
|
-
this._camera.zoom = zoom * 0.01;
|
|
414
|
-
this._camera.fov = fov;
|
|
415
|
-
this._camera.updateProjectionMatrix();
|
|
416
|
-
this._controls.cameraChanged = true;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
}
|
|
420
|
-
onmousedown(e) {
|
|
421
|
-
if (this._controls) {
|
|
422
|
-
this._controls.onMouseDown(e);
|
|
261
|
+
const { near, far, zoom, fov } = this.state;
|
|
262
|
+
this.cameraManager.updateProperties({ near, far, zoom, fov });
|
|
263
|
+
this.controlsManager.markCameraChanged();
|
|
423
264
|
}
|
|
424
265
|
}
|
|
266
|
+
onmousedown(e) { }
|
|
425
267
|
onmouseup(e) {
|
|
426
|
-
|
|
427
|
-
if (this._controls) {
|
|
428
|
-
if (this._lastFocused) {
|
|
429
|
-
;
|
|
430
|
-
this._lastFocused._focused = false;
|
|
431
|
-
}
|
|
268
|
+
if (this.controlsManager.isActive) {
|
|
432
269
|
const { left, top, width, height } = this.state;
|
|
433
|
-
|
|
434
|
-
this.
|
|
435
|
-
this.
|
|
436
|
-
var object = this.getObjectByRaycast();
|
|
437
|
-
var realObject = object === null || object === void 0 ? void 0 : object.userData.context;
|
|
438
|
-
if (realObject) {
|
|
439
|
-
;
|
|
440
|
-
realObject._focused = true;
|
|
441
|
-
realObject._focusedAt = performance.now();
|
|
442
|
-
this._lastFocused = realObject;
|
|
443
|
-
(_a = realObject.component) === null || _a === void 0 ? void 0 : _a.trigger('click', e);
|
|
444
|
-
}
|
|
270
|
+
const pointer = this.transcoordC2S(e.offsetX, e.offsetY);
|
|
271
|
+
this.eventManager.updateMouseNDC(pointer.x, pointer.y, left, top, width, height);
|
|
272
|
+
this.eventManager.handleClick(this.cameraManager.camera, this.sceneManager.scene, e);
|
|
445
273
|
e.stopPropagation();
|
|
446
274
|
}
|
|
447
275
|
}
|
|
448
276
|
onmousemove(e) {
|
|
449
|
-
|
|
450
|
-
if (this._controls) {
|
|
277
|
+
if (this.controlsManager.isActive) {
|
|
451
278
|
const { left, top, width, height } = this.state;
|
|
452
|
-
|
|
453
|
-
this.
|
|
454
|
-
this.
|
|
455
|
-
var object = this.getObjectByRaycast();
|
|
456
|
-
var realObject = object === null || object === void 0 ? void 0 : object.userData.context;
|
|
457
|
-
if (realObject !== this._lastHovered) {
|
|
458
|
-
if (this._lastHovered) {
|
|
459
|
-
(_a = this._lastHovered.component) === null || _a === void 0 ? void 0 : _a.trigger('mouseleave', e);
|
|
460
|
-
delete this._lastHovered;
|
|
461
|
-
}
|
|
462
|
-
if (realObject) {
|
|
463
|
-
this._lastHovered = realObject;
|
|
464
|
-
(_b = this._lastHovered.component) === null || _b === void 0 ? void 0 : _b.trigger('mouseenter', e);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
this._controls.onMouseMove(e);
|
|
279
|
+
const pointer = this.transcoordC2S(e.offsetX, e.offsetY);
|
|
280
|
+
this.eventManager.updateMouseNDC(pointer.x, pointer.y, left, top, width, height);
|
|
281
|
+
this.eventManager.handleHover(this.cameraManager.camera, this.sceneManager.scene, e);
|
|
468
282
|
e.stopPropagation();
|
|
469
283
|
}
|
|
470
284
|
}
|
|
471
285
|
onmouseleave(e) { }
|
|
472
286
|
onwheel(e) {
|
|
473
|
-
if (this.
|
|
287
|
+
if (this.controlsManager.isActive) {
|
|
474
288
|
this.handleMouseWheel(e);
|
|
475
289
|
e.stopPropagation();
|
|
476
290
|
}
|
|
477
291
|
}
|
|
478
292
|
ondblclick(e) {
|
|
479
|
-
if (this.
|
|
293
|
+
if (this.controlsManager.isActive) {
|
|
480
294
|
this.setState('zoom', this.getState('zoom'));
|
|
481
|
-
this.
|
|
295
|
+
this.controlsManager.reset();
|
|
482
296
|
e.stopPropagation();
|
|
483
297
|
}
|
|
484
298
|
}
|
|
299
|
+
// things-scene 이벤트 → ControlsManager (orbit/pan 처리)
|
|
485
300
|
ondragstart(e) {
|
|
486
|
-
if (this.
|
|
487
|
-
|
|
488
|
-
var { left, top, width, height } = this.bounds;
|
|
489
|
-
this._mouse.x = ((pointer.x - left) / width) * 2 - 1;
|
|
490
|
-
this._mouse.y = -((pointer.y - top) / height) * 2 + 1;
|
|
491
|
-
this._controls.onDragStart(e);
|
|
301
|
+
if (this.controlsManager.isActive) {
|
|
302
|
+
this.controlsManager.onDragStart(e);
|
|
492
303
|
e.stopPropagation();
|
|
493
304
|
}
|
|
494
305
|
}
|
|
495
306
|
ondragmove(e) {
|
|
496
|
-
if (this.
|
|
497
|
-
this.
|
|
498
|
-
this._controls.onDragMove(e);
|
|
307
|
+
if (this.controlsManager.isActive) {
|
|
308
|
+
this.controlsManager.onDragMove(e);
|
|
499
309
|
e.stopPropagation();
|
|
500
310
|
}
|
|
501
311
|
}
|
|
502
312
|
ondragend(e) {
|
|
503
|
-
if (this.
|
|
504
|
-
this.
|
|
505
|
-
this._controls.onDragEnd(e);
|
|
313
|
+
if (this.controlsManager.isActive) {
|
|
314
|
+
this.controlsManager.onDragEnd(e);
|
|
506
315
|
e.stopPropagation();
|
|
507
316
|
}
|
|
508
317
|
}
|
|
509
318
|
ontouchstart(e) {
|
|
510
|
-
if (this.
|
|
511
|
-
this.
|
|
319
|
+
if (this.controlsManager.isActive) {
|
|
320
|
+
this.controlsManager.onTouchStart(e);
|
|
512
321
|
e.stopPropagation();
|
|
513
322
|
}
|
|
514
323
|
}
|
|
515
324
|
onpan(e) {
|
|
516
|
-
if (this.
|
|
517
|
-
this.
|
|
518
|
-
this._controls.onTouchMove(e);
|
|
325
|
+
if (this.controlsManager.isActive) {
|
|
326
|
+
this.controlsManager.onTouchMove(e);
|
|
519
327
|
e.stopPropagation();
|
|
520
328
|
}
|
|
521
329
|
}
|
|
522
330
|
ontouchend(e) {
|
|
523
|
-
if (this.
|
|
524
|
-
this.
|
|
331
|
+
if (this.controlsManager.isActive) {
|
|
332
|
+
this.controlsManager.onTouchEnd(e);
|
|
525
333
|
e.stopPropagation();
|
|
526
334
|
}
|
|
527
335
|
}
|
|
528
336
|
onkeydown(e) {
|
|
529
|
-
if (this.
|
|
530
|
-
this.
|
|
337
|
+
if (this.controlsManager.isActive) {
|
|
338
|
+
this.controlsManager.onKeyDown(e);
|
|
531
339
|
e.stopPropagation();
|
|
532
340
|
}
|
|
533
341
|
}
|
|
534
342
|
onpinch(e) {
|
|
535
|
-
if (this.
|
|
343
|
+
if (this.controlsManager.isActive) {
|
|
536
344
|
var zoom = this.getState('zoom');
|
|
537
345
|
//@ts-ignore
|
|
538
346
|
zoom *= e.scale;
|
|
@@ -543,13 +351,11 @@ let ThreeContainer = class ThreeContainer extends Container {
|
|
|
543
351
|
}
|
|
544
352
|
}
|
|
545
353
|
ondoubletap() {
|
|
546
|
-
this.
|
|
354
|
+
this.controlsManager.reset();
|
|
547
355
|
}
|
|
548
356
|
handleMouseWheel(event) {
|
|
549
|
-
var delta = 0;
|
|
550
357
|
var zoom = this.getState('zoom');
|
|
551
|
-
|
|
552
|
-
zoom += delta * 0.1;
|
|
358
|
+
zoom += -event.deltaY * 0.1;
|
|
553
359
|
if (zoom < 100)
|
|
554
360
|
zoom = 100;
|
|
555
361
|
this.setState('zoom', zoom);
|