@operato/scene-visualizer 9.2.2 → 10.0.0-beta.2

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.
Files changed (204) hide show
  1. package/dist/carrier.d.ts +263 -0
  2. package/dist/carrier.js +272 -0
  3. package/dist/carrier.js.map +1 -0
  4. package/dist/desk.d.ts +238 -3
  5. package/dist/desk.js +1 -2
  6. package/dist/desk.js.map +1 -1
  7. package/dist/editors/index.d.ts +1 -0
  8. package/dist/editors/index.js +5 -0
  9. package/dist/editors/index.js.map +1 -1
  10. package/dist/editors/property-editor-gltf-fill-targets.d.ts +17 -0
  11. package/dist/editors/property-editor-gltf-fill-targets.js +211 -0
  12. package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -0
  13. package/dist/editors/property-editor-gltf-info.js +38 -29
  14. package/dist/editors/property-editor-gltf-info.js.map +1 -1
  15. package/dist/editors/property-editor-location-increase-pattern.js +91 -95
  16. package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
  17. package/dist/effects/outline.js +1 -1
  18. package/dist/effects/outline.js.map +1 -1
  19. package/dist/index.d.ts +5 -17
  20. package/dist/index.js +7 -17
  21. package/dist/index.js.map +1 -1
  22. package/dist/rack-table-3d.d.ts +16 -0
  23. package/dist/rack-table-3d.js +94 -0
  24. package/dist/rack-table-3d.js.map +1 -0
  25. package/dist/rack-table-cell.d.ts +238 -3
  26. package/dist/rack-table-cell.js +44 -51
  27. package/dist/rack-table-cell.js.map +1 -1
  28. package/dist/rack-table-location.d.ts +37 -0
  29. package/dist/rack-table-location.js +227 -0
  30. package/dist/rack-table-location.js.map +1 -0
  31. package/dist/rack-table.d.ts +13 -29
  32. package/dist/rack-table.js +108 -380
  33. package/dist/rack-table.js.map +1 -1
  34. package/dist/rack.d.ts +3 -5
  35. package/dist/rack.js +7 -9
  36. package/dist/rack.js.map +1 -1
  37. package/dist/signal-tower.d.ts +492 -0
  38. package/dist/signal-tower.js +275 -0
  39. package/dist/signal-tower.js.map +1 -0
  40. package/dist/stock.d.ts +22 -10
  41. package/dist/stock.js +87 -81
  42. package/dist/stock.js.map +1 -1
  43. package/dist/tank.d.ts +492 -0
  44. package/dist/tank.js +312 -0
  45. package/dist/tank.js.map +1 -0
  46. package/dist/templates/carrier.d.ts +19 -0
  47. package/dist/templates/carrier.js +20 -0
  48. package/dist/templates/carrier.js.map +1 -0
  49. package/dist/templates/cube.js +1 -1
  50. package/dist/templates/cube.js.map +1 -1
  51. package/dist/templates/cylinder.js +3 -3
  52. package/dist/templates/cylinder.js.map +1 -1
  53. package/dist/templates/index.d.ts +1 -0
  54. package/dist/templates/index.js +9 -1
  55. package/dist/templates/index.js.map +1 -1
  56. package/dist/templates/signal-tower.d.ts +21 -0
  57. package/dist/templates/signal-tower.js +22 -0
  58. package/dist/templates/signal-tower.js.map +1 -0
  59. package/dist/templates/sphere.d.ts +1 -0
  60. package/dist/templates/sphere.js +5 -4
  61. package/dist/templates/sphere.js.map +1 -1
  62. package/dist/templates/tank.d.ts +21 -0
  63. package/dist/templates/tank.js +22 -0
  64. package/dist/templates/tank.js.map +1 -0
  65. package/dist/templates/vehicle.d.ts +19 -0
  66. package/dist/templates/vehicle.js +20 -0
  67. package/dist/templates/vehicle.js.map +1 -0
  68. package/dist/vehicle.d.ts +248 -0
  69. package/dist/vehicle.js +133 -0
  70. package/dist/vehicle.js.map +1 -0
  71. package/dist/visualizer.d.ts +4 -5
  72. package/dist/visualizer.js +15 -28
  73. package/dist/visualizer.js.map +1 -1
  74. package/icons/carrier.png +0 -0
  75. package/icons/signal-tower.png +0 -0
  76. package/icons/tank.png +0 -0
  77. package/icons/vehicle.png +0 -0
  78. package/package.json +16 -18
  79. package/dist/banner.d.ts +0 -15
  80. package/dist/banner.js +0 -76
  81. package/dist/banner.js.map +0 -1
  82. package/dist/camera.d.ts +0 -20
  83. package/dist/camera.js +0 -108
  84. package/dist/camera.js.map +0 -1
  85. package/dist/cube.d.ts +0 -13
  86. package/dist/cube.js +0 -38
  87. package/dist/cube.js.map +0 -1
  88. package/dist/cylinder.d.ts +0 -11
  89. package/dist/cylinder.js +0 -38
  90. package/dist/cylinder.js.map +0 -1
  91. package/dist/ellipse.d.ts +0 -5
  92. package/dist/ellipse.js +0 -22
  93. package/dist/ellipse.js.map +0 -1
  94. package/dist/gltf-object.d.ts +0 -20
  95. package/dist/gltf-object.js +0 -104
  96. package/dist/gltf-object.js.map +0 -1
  97. package/dist/html-overlay-element.d.ts +0 -1
  98. package/dist/html-overlay-element.js +0 -12
  99. package/dist/html-overlay-element.js.map +0 -1
  100. package/dist/light.d.ts +0 -15
  101. package/dist/light.js +0 -135
  102. package/dist/light.js.map +0 -1
  103. package/dist/polygon.d.ts +0 -17
  104. package/dist/polygon.js +0 -64
  105. package/dist/polygon.js.map +0 -1
  106. package/dist/rect.d.ts +0 -5
  107. package/dist/rect.js +0 -36
  108. package/dist/rect.js.map +0 -1
  109. package/dist/scene/component.d.ts +0 -1
  110. package/dist/scene/component.js +0 -29
  111. package/dist/scene/component.js.map +0 -1
  112. package/dist/sphere.d.ts +0 -11
  113. package/dist/sphere.js +0 -38
  114. package/dist/sphere.js.map +0 -1
  115. package/dist/sprite.d.ts +0 -9
  116. package/dist/sprite.js +0 -28
  117. package/dist/sprite.js.map +0 -1
  118. package/dist/text.d.ts +0 -1
  119. package/dist/text.js +0 -9
  120. package/dist/text.js.map +0 -1
  121. package/dist/three-container-editor.d.ts +0 -22
  122. package/dist/three-container-editor.js +0 -132
  123. package/dist/three-container-editor.js.map +0 -1
  124. package/dist/three-container.d.ts +0 -85
  125. package/dist/three-container.js +0 -565
  126. package/dist/three-container.js.map +0 -1
  127. package/dist/three-controls.d.ts +0 -11
  128. package/dist/three-controls.js +0 -616
  129. package/dist/three-controls.js.map +0 -1
  130. package/dist/three-layout.d.ts +0 -8
  131. package/dist/three-layout.js +0 -20
  132. package/dist/three-layout.js.map +0 -1
  133. package/dist/three-space.d.ts +0 -85
  134. package/dist/three-space.js +0 -570
  135. package/dist/three-space.js.map +0 -1
  136. package/dist/threed/common.d.ts +0 -22
  137. package/dist/threed/common.js +0 -19
  138. package/dist/threed/common.js.map +0 -1
  139. package/dist/threed/floor/floor.d.ts +0 -3
  140. package/dist/threed/floor/floor.js +0 -51
  141. package/dist/threed/floor/floor.js.map +0 -1
  142. package/dist/threed/html/elements.d.ts +0 -2
  143. package/dist/threed/html/elements.js +0 -21
  144. package/dist/threed/html/elements.js.map +0 -1
  145. package/dist/threed/index.d.ts +0 -15
  146. package/dist/threed/index.js +0 -16
  147. package/dist/threed/index.js.map +0 -1
  148. package/dist/threed/real-object-camera-meshed.d.ts +0 -12
  149. package/dist/threed/real-object-camera-meshed.js +0 -49
  150. package/dist/threed/real-object-camera-meshed.js.map +0 -1
  151. package/dist/threed/real-object-camera.d.ts +0 -9
  152. package/dist/threed/real-object-camera.js +0 -31
  153. package/dist/threed/real-object-camera.js.map +0 -1
  154. package/dist/threed/real-object-dom-element.d.ts +0 -9
  155. package/dist/threed/real-object-dom-element.js +0 -40
  156. package/dist/threed/real-object-dom-element.js.map +0 -1
  157. package/dist/threed/real-object-dummy.d.ts +0 -6
  158. package/dist/threed/real-object-dummy.js +0 -11
  159. package/dist/threed/real-object-dummy.js.map +0 -1
  160. package/dist/threed/real-object-extrude.d.ts +0 -21
  161. package/dist/threed/real-object-extrude.js +0 -173
  162. package/dist/threed/real-object-extrude.js.map +0 -1
  163. package/dist/threed/real-object-gltf.d.ts +0 -16
  164. package/dist/threed/real-object-gltf.js +0 -101
  165. package/dist/threed/real-object-gltf.js.map +0 -1
  166. package/dist/threed/real-object-group.d.ts +0 -5
  167. package/dist/threed/real-object-group.js +0 -11
  168. package/dist/threed/real-object-group.js.map +0 -1
  169. package/dist/threed/real-object-mesh.d.ts +0 -13
  170. package/dist/threed/real-object-mesh.js +0 -75
  171. package/dist/threed/real-object-mesh.js.map +0 -1
  172. package/dist/threed/real-object-plane.d.ts +0 -5
  173. package/dist/threed/real-object-plane.js +0 -22
  174. package/dist/threed/real-object-plane.js.map +0 -1
  175. package/dist/threed/real-object-scene.d.ts +0 -21
  176. package/dist/threed/real-object-scene.js +0 -67
  177. package/dist/threed/real-object-scene.js.map +0 -1
  178. package/dist/threed/real-object-sprite-2d.d.ts +0 -14
  179. package/dist/threed/real-object-sprite-2d.js +0 -45
  180. package/dist/threed/real-object-sprite-2d.js.map +0 -1
  181. package/dist/threed/real-object-sprite.d.ts +0 -11
  182. package/dist/threed/real-object-sprite.js +0 -50
  183. package/dist/threed/real-object-sprite.js.map +0 -1
  184. package/dist/threed/real-object-text.d.ts +0 -15
  185. package/dist/threed/real-object-text.js +0 -64
  186. package/dist/threed/real-object-text.js.map +0 -1
  187. package/dist/threed/real-object.d.ts +0 -64
  188. package/dist/threed/real-object.js +0 -260
  189. package/dist/threed/real-object.js.map +0 -1
  190. package/dist/threed/texture/canvas-texture.d.ts +0 -4
  191. package/dist/threed/texture/canvas-texture.js +0 -49
  192. package/dist/threed/texture/canvas-texture.js.map +0 -1
  193. package/dist/threed/texture/text-texture.d.ts +0 -8
  194. package/dist/threed/texture/text-texture.js +0 -79
  195. package/dist/threed/texture/text-texture.js.map +0 -1
  196. package/dist/threed/three-dimensional-container.d.ts +0 -8
  197. package/dist/threed/three-dimensional-container.js +0 -2
  198. package/dist/threed/three-dimensional-container.js.map +0 -1
  199. package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
  200. package/dist/threed/utils/bound-uv-generator.js +0 -42
  201. package/dist/threed/utils/bound-uv-generator.js.map +0 -1
  202. package/dist/wall.d.ts +0 -13
  203. package/dist/wall.js +0 -45
  204. package/dist/wall.js.map +0 -1
@@ -1,85 +0,0 @@
1
- import { Component, ComponentNature, Container, Properties } from '@hatiolab/things-scene';
2
- import * as THREE from 'three';
3
- import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js';
4
- import './three-layout.js';
5
- import { RealObject } from './threed/real-object.js';
6
- import { ThreeDimensionalContainer } from './threed/three-dimensional-container.js';
7
- import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
8
- export declare class ThreeContainer extends Container implements ThreeDimensionalContainer {
9
- _scene3d?: THREE.Scene;
10
- _initalizeComplete?: Promise<void>;
11
- _mixer?: THREE.AnimationMixer;
12
- _camera?: THREE.PerspectiveCamera;
13
- _renderer3d?: THREE.WebGLRenderer;
14
- _mouse?: THREE.Vector2;
15
- _clock?: THREE.Clock;
16
- _controls?: any;
17
- _onFocus?: (e: FocusEvent) => void;
18
- _onResize?: (e: Event) => void;
19
- _noSupportWebgl: boolean;
20
- _raycaster: THREE.Raycaster;
21
- _lastFocused?: RealObject;
22
- _lastHovered?: RealObject;
23
- private _css3DScene?;
24
- private _css3DRenderer?;
25
- composer?: EffectComposer;
26
- containable(component: Component): boolean;
27
- is3dContainer(): boolean;
28
- createObjects(components: Component[]): void;
29
- destroy_scene3d(): void;
30
- update(): void;
31
- resize(): void;
32
- init_scene3d(): void;
33
- threed_animate(): void;
34
- stop(): void;
35
- get scene3d(): THREE.Scene | undefined;
36
- get renderer3d(): THREE.WebGLRenderer | undefined;
37
- get mixer(): THREE.AnimationMixer | undefined;
38
- get zoom(): number | undefined;
39
- /**
40
- * CSS3DRenderer용 THREE.Scene을 제공
41
- */
42
- get css3DScene(): THREE.Scene;
43
- protected buildCSS3DScene(): THREE.Scene;
44
- protected disposeCSS3DScene(): void;
45
- /**
46
- * css3d-renderer getter
47
- */
48
- get css3DRenderer(): CSS3DRenderer;
49
- protected createCSS3DRenderer(): CSS3DRenderer;
50
- protected disposeCSS3DRenderer(): void;
51
- /**
52
- * element내부에 필요한 overlay들을 생성
53
- * ViewRenderer에서는 CSS3DRenderer와 GLRendering을 위한 canvas를 오버레이로 만든다.
54
- * Warn: this.element는 아직 만들어지지 않은 상태에 buildOverlays가 호출됨.
55
- * @param into
56
- */
57
- buildOverlays(): void;
58
- render_threed(): void;
59
- render(ctx: CanvasRenderingContext2D): void;
60
- postrender(ctx: CanvasRenderingContext2D): void;
61
- dispose(): void;
62
- get layout(): import("@hatiolab/things-scene").LAYOUT;
63
- get nature(): ComponentNature;
64
- getObjectByRaycast(): THREE.Object3D | undefined;
65
- getObjectsByRaycast(): THREE.Intersection<THREE.Object3D<THREE.Object3DEventMap>>[] | undefined;
66
- _showWebglNoSupportText(context: CanvasRenderingContext2D): void;
67
- onchange(after: Properties, before: Properties): void;
68
- onmousedown(e: MouseEvent): void;
69
- onmouseup(e: MouseEvent): void;
70
- onmousemove(e: MouseEvent): void;
71
- onmouseleave(e: MouseEvent): void;
72
- onwheel(e: WheelEvent): void;
73
- ondblclick(e: MouseEvent): void;
74
- ondragstart(e: DragEvent): void;
75
- ondragmove(e: DragEvent): void;
76
- ondragend(e: DragEvent): void;
77
- ontouchstart(e: TouchEvent): void;
78
- onpan(e: TouchEvent): void;
79
- ontouchend(e: TouchEvent): void;
80
- onkeydown(e: KeyboardEvent): void;
81
- onpinch(e: TouchEvent): void;
82
- ondoubletap(): void;
83
- handleMouseWheel(event: WheelEvent): void;
84
- onredraw(): void;
85
- }
@@ -1,565 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import { __decorate } from "tslib";
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
- import './three-layout.js';
11
- import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
12
- import { createFloor } from './threed/floor/floor.js';
13
- const NATURE = {
14
- mutable: false,
15
- resizable: true,
16
- rotatable: true,
17
- properties: [
18
- {
19
- type: 'select',
20
- label: 'precision',
21
- name: 'precision',
22
- property: {
23
- options: [
24
- {
25
- display: 'High',
26
- value: 'highp'
27
- },
28
- {
29
- display: 'Medium',
30
- value: 'mediump'
31
- },
32
- {
33
- display: 'Low',
34
- value: 'lowp'
35
- }
36
- ]
37
- }
38
- },
39
- {
40
- type: 'checkbox',
41
- label: 'anti-alias',
42
- name: 'antialias',
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
- }
63
- ],
64
- help: 'scene/component/three-container'
65
- };
66
- const WEBGL_NO_SUPPORT_TEXT = 'WebGL no support';
67
- let ThreeContainer = class ThreeContainer extends Container {
68
- constructor() {
69
- super(...arguments);
70
- this._noSupportWebgl = false;
71
- this._raycaster = new THREE.Raycaster();
72
- }
73
- containable(component) {
74
- return component.is3dish();
75
- }
76
- is3dContainer() {
77
- return true;
78
- }
79
- /* THREE Object related .. */
80
- createObjects(components) {
81
- for (let component of components) {
82
- try {
83
- var item = component.realObject;
84
- if (item) {
85
- if (component.isHTMLElement()) {
86
- this.css3DScene.add(item.object3d);
87
- }
88
- else {
89
- this._scene3d.add(item.object3d);
90
- }
91
- }
92
- }
93
- catch (err) {
94
- error(err);
95
- }
96
- }
97
- }
98
- destroy_scene3d() {
99
- var _a;
100
- this.stop();
101
- window.removeEventListener('focus', this._onFocus);
102
- window.removeEventListener('resize', this._onResize);
103
- if (this._renderer3d)
104
- this._renderer3d.clear();
105
- if ((_a = this._controls) === null || _a === void 0 ? void 0 : _a.autoRotate) {
106
- this._controls.doAutoRotate(false);
107
- }
108
- delete this._renderer3d;
109
- delete this._camera;
110
- delete this._controls;
111
- if (this._scene3d) {
112
- let children = this._scene3d.children.slice();
113
- for (let i in children) {
114
- let child = children[i];
115
- if (child.dispose)
116
- child.dispose();
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;
127
- }
128
- update() {
129
- var { width, height } = this.bounds;
130
- var { fov = 45, near = 0.1, far = 20000, antialias = true, precision = 'highp', cameraX, cameraY, cameraZ, exposure = 2.5 } = this.state;
131
- var components = this.components || [];
132
- // SCENE
133
- this._scene3d = new THREE.Scene();
134
- // CAMERA
135
- var aspect = width / height;
136
- this._camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
137
- var cameraXPos = height * 0.8, cameraYPos = width * 0.8, cameraZPos = Math.min(500, Math.floor(Math.min(width, height)));
138
- // cameraZPos = Math.floor(Math.min(width, height))
139
- if (cameraX != undefined)
140
- cameraXPos = cameraX * width;
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;
162
- return;
163
- }
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
- // CONTROLS
175
- this._controls = new ThreeControls(this._camera, this);
176
- this._controls.cameraChanged = true;
177
- // Lights
178
- var _hemiLight = new THREE.HemisphereLight(0xdddddd, 0x333333, 0.035);
179
- this.scene3d.add(_hemiLight);
180
- this._mouse = new THREE.Vector2();
181
- this._clock = new THREE.Clock(true);
182
- this._mixer = new THREE.AnimationMixer(this.scene3d);
183
- this.createObjects(components);
184
- this._camera.updateProjectionMatrix();
185
- const floor = createFloor(this);
186
- if (floor) {
187
- this._scene3d.add(floor);
188
- }
189
- // postprocessing
190
- var composer = (this.composer = new EffectComposer(renderer3d));
191
- composer.setSize(width, height);
192
- const renderPass = new RenderPass(this._scene3d, this._camera);
193
- composer.addPass(renderPass);
194
- this._onFocus = (e) => {
195
- this.render_threed();
196
- };
197
- this._onResize = (e) => {
198
- this.resize();
199
- };
200
- window.addEventListener('resize', this._onResize);
201
- window.addEventListener('focus', this._onFocus);
202
- this.buildOverlays();
203
- this.resize();
204
- }
205
- resize() {
206
- var _a;
207
- const { width, height } = this.bounds;
208
- this._camera.aspect = width / height;
209
- this.renderer3d.setSize(width, height);
210
- this.css3DRenderer.setSize(width, height);
211
- (_a = this.composer) === null || _a === void 0 ? void 0 : _a.setSize(width, height);
212
- this._camera.updateProjectionMatrix();
213
- }
214
- init_scene3d() {
215
- this.root.on('redraw', this.onredraw, this);
216
- if (this._scene3d) {
217
- this.destroy_scene3d();
218
- }
219
- this.update();
220
- this.onchangeData && this.onchangeData(this.data, this.data);
221
- }
222
- threed_animate() {
223
- if (!this._controls) {
224
- return;
225
- }
226
- if (this._mixer) {
227
- this._mixer.update(this._clock.getDelta());
228
- }
229
- this._controls.update();
230
- if (this.state.autoRotate) {
231
- this.invalidate();
232
- }
233
- this.render_threed();
234
- }
235
- stop() { }
236
- get scene3d() {
237
- if (!this._scene3d) {
238
- this.init_scene3d();
239
- }
240
- return this._scene3d;
241
- }
242
- get renderer3d() {
243
- return this._renderer3d;
244
- }
245
- get mixer() {
246
- return this._mixer;
247
- }
248
- get zoom() {
249
- var _a;
250
- return (_a = this._camera) === null || _a === void 0 ? void 0 : _a.zoom;
251
- }
252
- /**
253
- * CSS3DRenderer용 THREE.Scene을 제공
254
- */
255
- get css3DScene() {
256
- if (!this._css3DScene) {
257
- this._css3DScene = this.buildCSS3DScene();
258
- }
259
- return this._css3DScene;
260
- }
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
- get css3DRenderer() {
273
- if (!this._css3DRenderer) {
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
295
- }
296
- /**
297
- * element내부에 필요한 overlay들을 생성
298
- * ViewRenderer에서는 CSS3DRenderer와 GLRendering을 위한 canvas를 오버레이로 만든다.
299
- * Warn: this.element는 아직 만들어지지 않은 상태에 buildOverlays가 호출됨.
300
- * @param into
301
- */
302
- buildOverlays() {
303
- this.element.appendChild(this.css3DRenderer.domElement);
304
- }
305
- render_threed() {
306
- if (this.composer) {
307
- this.composer.render();
308
- }
309
- }
310
- /* Container Overides .. */
311
- render(ctx) {
312
- if (this.app.isViewMode) {
313
- this.setState('threed', true);
314
- }
315
- if (this.state.threed && !this._noSupportWebgl && this._camera) {
316
- this.css3DRenderer.render(this.css3DScene, this._camera);
317
- return;
318
- }
319
- super.render(ctx);
320
- }
321
- postrender(ctx) {
322
- var { left, top, debug, threed } = this.state;
323
- var { width, height } = this.bounds;
324
- // ios에서 width, height에 소수점이 있으면 3d를 표현하지 못하는 문제가 있어 정수화
325
- width = Math.floor(width);
326
- height = Math.floor(height);
327
- if (threed) {
328
- if (!this._scene3d) {
329
- this.init_scene3d();
330
- this.render_threed();
331
- }
332
- if (this._noSupportWebgl) {
333
- this._showWebglNoSupportText(ctx);
334
- return;
335
- }
336
- if (!this._renderer3d) {
337
- return;
338
- }
339
- var { width: rendererWidth, height: rendererHeight } = this._renderer3d.getSize(new THREE.Vector2());
340
- ctx.drawImage(this._renderer3d.domElement, 0, 0, rendererWidth, rendererHeight, left, top, width, height);
341
- if (debug) {
342
- ctx.font = 100 + 'px Arial';
343
- ctx.textAlign = 'center';
344
- ctx.fillStyle = 'black';
345
- ctx.globalAlpha = 0.5;
346
- ctx.fillText(String(FPS()), 100, 100);
347
- }
348
- }
349
- else {
350
- super.postrender(ctx);
351
- }
352
- }
353
- dispose() {
354
- var _a;
355
- this.root.off('redraw', this.onredraw, this);
356
- this.disposeCSS3DScene();
357
- (_a = this.composer) === null || _a === void 0 ? void 0 : _a.dispose();
358
- this.destroy_scene3d();
359
- super.dispose();
360
- }
361
- get layout() {
362
- return Layout.get('three');
363
- }
364
- get nature() {
365
- return NATURE;
366
- }
367
- getObjectByRaycast() {
368
- var intersects = this.getObjectsByRaycast();
369
- if (intersects && intersects.length > 0) {
370
- var object = intersects[0].object;
371
- while (object) {
372
- if (object.userData.context) {
373
- return object;
374
- }
375
- object = object.parent;
376
- }
377
- }
378
- }
379
- getObjectsByRaycast() {
380
- var vector = this._mouse;
381
- if (!this._camera) {
382
- return;
383
- }
384
- this._raycaster.setFromCamera(vector, this._camera);
385
- var intersects = this._raycaster.intersectObjects(this._scene3d.children, true);
386
- return intersects;
387
- }
388
- _showWebglNoSupportText(context) {
389
- context.save();
390
- var { width, height } = this.state;
391
- context.font = width / 20 + 'px Arial';
392
- context.textAlign = 'center';
393
- context.fillText(WEBGL_NO_SUPPORT_TEXT, width / 2 - width / 40, height / 2);
394
- context.restore();
395
- }
396
- /* Event Handlers */
397
- onchange(after, before) {
398
- if (after.hasOwnProperty('width') || after.hasOwnProperty('height') || after.hasOwnProperty('threed'))
399
- this.destroy_scene3d();
400
- if (after.hasOwnProperty('autoRotate')) {
401
- if (this._controls) {
402
- this._controls.doAutoRotate(after.autoRotate);
403
- }
404
- }
405
- if (after.hasOwnProperty('fov') ||
406
- after.hasOwnProperty('near') ||
407
- after.hasOwnProperty('far') ||
408
- after.hasOwnProperty('zoom')) {
409
- if (this._camera) {
410
- const { near, far, zoom, fov } = this.state;
411
- this._camera.near = near;
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);
423
- }
424
- }
425
- onmouseup(e) {
426
- var _a;
427
- if (this._controls) {
428
- if (this._lastFocused) {
429
- ;
430
- this._lastFocused._focused = false;
431
- }
432
- const { left, top, width, height } = this.state;
433
- var pointer = this.transcoordC2S(e.offsetX, e.offsetY);
434
- this._mouse.x = ((pointer.x - left) / width) * 2 - 1;
435
- this._mouse.y = -((pointer.y - top) / height) * 2 + 1;
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
- }
445
- e.stopPropagation();
446
- }
447
- }
448
- onmousemove(e) {
449
- var _a, _b;
450
- if (this._controls) {
451
- const { left, top, width, height } = this.state;
452
- var pointer = this.transcoordC2S(e.offsetX, e.offsetY);
453
- this._mouse.x = ((pointer.x - left) / width) * 2 - 1;
454
- this._mouse.y = -((pointer.y - top) / height) * 2 + 1;
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);
468
- e.stopPropagation();
469
- }
470
- }
471
- onmouseleave(e) { }
472
- onwheel(e) {
473
- if (this._controls) {
474
- this.handleMouseWheel(e);
475
- e.stopPropagation();
476
- }
477
- }
478
- ondblclick(e) {
479
- if (this._controls) {
480
- this.setState('zoom', this.getState('zoom'));
481
- this._controls.reset();
482
- e.stopPropagation();
483
- }
484
- }
485
- ondragstart(e) {
486
- if (this._controls) {
487
- var pointer = this.transcoordC2S(e.offsetX, e.offsetY);
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);
492
- e.stopPropagation();
493
- }
494
- }
495
- ondragmove(e) {
496
- if (this._controls) {
497
- this._controls.cameraChanged = true;
498
- this._controls.onDragMove(e);
499
- e.stopPropagation();
500
- }
501
- }
502
- ondragend(e) {
503
- if (this._controls) {
504
- this._controls.cameraChanged = true;
505
- this._controls.onDragEnd(e);
506
- e.stopPropagation();
507
- }
508
- }
509
- ontouchstart(e) {
510
- if (this._controls) {
511
- this._controls.onTouchStart(e);
512
- e.stopPropagation();
513
- }
514
- }
515
- onpan(e) {
516
- if (this._controls) {
517
- this._controls.cameraChanged = true;
518
- this._controls.onTouchMove(e);
519
- e.stopPropagation();
520
- }
521
- }
522
- ontouchend(e) {
523
- if (this._controls) {
524
- this._controls.onTouchEnd(e);
525
- e.stopPropagation();
526
- }
527
- }
528
- onkeydown(e) {
529
- if (this._controls) {
530
- this._controls.onKeyDown(e);
531
- e.stopPropagation();
532
- }
533
- }
534
- onpinch(e) {
535
- if (this._controls) {
536
- var zoom = this.getState('zoom');
537
- //@ts-ignore
538
- zoom *= e.scale;
539
- if (zoom < 100)
540
- zoom = 100;
541
- this.setState('zoom', zoom);
542
- e.stopPropagation();
543
- }
544
- }
545
- ondoubletap() {
546
- this._controls.reset();
547
- }
548
- handleMouseWheel(event) {
549
- var delta = 0;
550
- var zoom = this.getState('zoom');
551
- delta = -event.deltaY;
552
- zoom += delta * 0.1;
553
- if (zoom < 100)
554
- zoom = 100;
555
- this.setState('zoom', zoom);
556
- }
557
- onredraw() {
558
- this.threed_animate();
559
- }
560
- };
561
- ThreeContainer = __decorate([
562
- sceneComponent('3d-container')
563
- ], ThreeContainer);
564
- export { ThreeContainer };
565
- //# sourceMappingURL=three-container.js.map