@operato/scene-visualizer 7.3.15 → 7.3.19

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 (103) hide show
  1. package/dist/html-overlay-element.js +0 -6
  2. package/dist/html-overlay-element.js.map +1 -1
  3. package/dist/three-container.js +1 -0
  4. package/dist/three-container.js.map +1 -1
  5. package/dist/threed/real-object-text.d.ts +1 -1
  6. package/dist/threed/real-object-text.js +1 -1
  7. package/dist/threed/real-object-text.js.map +1 -1
  8. package/dist/threed/real-object.d.ts +2 -2
  9. package/dist/threed/real-object.js +6 -2
  10. package/dist/threed/real-object.js.map +1 -1
  11. package/package.json +2 -2
  12. package/CHANGELOG.md +0 -622
  13. package/attachments/0d91a37d-c2d7-4c6d-88dc-a29e5bbea361.png +0 -0
  14. package/attachments/1b07c8d3-07d5-4007-b02e-031ee1755539.glb +0 -0
  15. package/attachments/226c6c23-c4fd-46c8-93e3-3d3d9c4bb8a9.glb +0 -0
  16. package/attachments/4425ca46-cf1d-476d-9185-dcb881ecad1f.glb +0 -0
  17. package/attachments/51e7c45d-6eae-4baf-a4e2-ba979b7e77cd.glb +0 -0
  18. package/attachments/54427925-c109-4499-875c-fb14207b95c5.glb +0 -0
  19. package/attachments/8cc70a65-e20f-4187-83c8-64deb3faf3d9.glb +0 -0
  20. package/attachments/964d004d-1fe7-4224-89a6-2b6e86db233c.glb +0 -0
  21. package/attachments/ff47fd63-6f1c-4a69-b965-9bb03797a415.png +0 -0
  22. package/db.sqlite +0 -0
  23. package/demo/index-modeller.html +0 -112
  24. package/demo/index.html +0 -109
  25. package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +0 -20
  26. package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +0 -20
  27. package/logs/application-2024-10-01-00.log +0 -105
  28. package/logs/application-2024-10-01-01.log +0 -105
  29. package/logs/connections-2024-10-01-00.log +0 -50
  30. package/logs/connections-2024-10-01-01.log +0 -50
  31. package/schema.graphql +0 -4455
  32. package/src/banner.ts +0 -88
  33. package/src/camera.ts +0 -132
  34. package/src/component.d.ts +0 -10
  35. package/src/cube.ts +0 -39
  36. package/src/cylinder.ts +0 -39
  37. package/src/desk.ts +0 -135
  38. package/src/editors/index.ts +0 -13
  39. package/src/editors/property-editor-gltf-info.ts +0 -135
  40. package/src/editors/property-editor-location-increase-pattern.ts +0 -260
  41. package/src/effects/outline.ts +0 -54
  42. package/src/ellipse.ts +0 -37
  43. package/src/gltf-object.ts +0 -117
  44. package/src/html-overlay-element.ts +0 -21
  45. package/src/index.ts +0 -29
  46. package/src/light.ts +0 -155
  47. package/src/polygon.ts +0 -88
  48. package/src/rack-table-cell.ts +0 -386
  49. package/src/rack-table.ts +0 -1296
  50. package/src/rack.ts +0 -232
  51. package/src/rect.ts +0 -39
  52. package/src/scene/component.ts +0 -38
  53. package/src/sphere.ts +0 -39
  54. package/src/sprite.ts +0 -30
  55. package/src/stock.ts +0 -262
  56. package/src/templates/3d-container.ts +0 -21
  57. package/src/templates/banner.ts +0 -21
  58. package/src/templates/camera.ts +0 -25
  59. package/src/templates/cube.ts +0 -20
  60. package/src/templates/cylinder.ts +0 -20
  61. package/src/templates/desk.ts +0 -20
  62. package/src/templates/gltf-object.ts +0 -20
  63. package/src/templates/index.ts +0 -29
  64. package/src/templates/light.ts +0 -23
  65. package/src/templates/pallet.ts +0 -20
  66. package/src/templates/rack-table.ts +0 -21
  67. package/src/templates/sphere.ts +0 -20
  68. package/src/templates/sprite.ts +0 -21
  69. package/src/templates/visualizer.ts +0 -21
  70. package/src/templates/wall.ts +0 -20
  71. package/src/text.ts +0 -10
  72. package/src/three-container-editor.ts +0 -187
  73. package/src/three-container.ts +0 -723
  74. package/src/three-controls.ts +0 -778
  75. package/src/three-layout.ts +0 -25
  76. package/src/three-space.ts +0 -732
  77. package/src/threed/common.ts +0 -21
  78. package/src/threed/floor/floor.ts +0 -62
  79. package/src/threed/html/elements.ts +0 -27
  80. package/src/threed/index.ts +0 -15
  81. package/src/threed/real-object-camera-meshed.ts +0 -67
  82. package/src/threed/real-object-camera.ts +0 -41
  83. package/src/threed/real-object-dom-element.ts +0 -55
  84. package/src/threed/real-object-dummy.ts +0 -13
  85. package/src/threed/real-object-extrude.ts +0 -210
  86. package/src/threed/real-object-gltf.ts +0 -136
  87. package/src/threed/real-object-group.ts +0 -35
  88. package/src/threed/real-object-mesh.ts +0 -74
  89. package/src/threed/real-object-plane.ts +0 -27
  90. package/src/threed/real-object-scene.ts +0 -84
  91. package/src/threed/real-object-sprite-2d.ts +0 -54
  92. package/src/threed/real-object-sprite.ts +0 -64
  93. package/src/threed/real-object-text.ts +0 -86
  94. package/src/threed/real-object.ts +0 -321
  95. package/src/threed/texture/canvas-texture.ts +0 -67
  96. package/src/threed/texture/text-texture.ts +0 -100
  97. package/src/threed/three-dimensional-container.ts +0 -9
  98. package/src/threed/utils/bound-uv-generator.ts +0 -80
  99. package/src/visualizer.ts +0 -319
  100. package/src/wall.ts +0 -50
  101. package/tsconfig.json +0 -24
  102. package/tsconfig.tsbuildinfo +0 -1
  103. package/web-dev-server.config.mjs +0 -27
@@ -1,723 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
-
5
- import { Component, ComponentNature, Container, error, FPS, Layout, Properties } 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
-
10
- import ThreeControls from './three-controls'
11
- import './three-layout'
12
- import { RealObject } from './threed/real-object'
13
- import { ThreeDimensionalContainer } from './threed/three-dimensional-container'
14
- import { CSS3DRenderer } from 'three/examples/jsm/renderers/CSS3DRenderer'
15
- import { createFloor } from './threed/floor/floor'
16
- import { RealObjectDomElement } from './threed'
17
-
18
- const NATURE: ComponentNature = {
19
- mutable: false,
20
- resizable: true,
21
- rotatable: true,
22
- properties: [
23
- {
24
- type: 'select',
25
- label: 'precision',
26
- name: 'precision',
27
- property: {
28
- options: [
29
- {
30
- display: 'High',
31
- value: 'highp'
32
- },
33
- {
34
- display: 'Medium',
35
- value: 'mediump'
36
- },
37
- {
38
- display: 'Low',
39
- value: 'lowp'
40
- }
41
- ]
42
- }
43
- },
44
- {
45
- type: 'checkbox',
46
- label: 'anti-alias',
47
- name: 'antialias',
48
- property: 'antialias'
49
- },
50
- {
51
- type: 'checkbox',
52
- label: '3dmode',
53
- name: 'threed',
54
- property: 'threed'
55
- },
56
- {
57
- type: 'checkbox',
58
- label: 'auto-rotate',
59
- name: 'autoRotate',
60
- property: 'autoRotate'
61
- },
62
- {
63
- type: 'checkbox',
64
- label: 'debug',
65
- name: 'debug',
66
- property: 'debug'
67
- }
68
- ],
69
- help: 'scene/component/three-container'
70
- }
71
-
72
- const WEBGL_NO_SUPPORT_TEXT = 'WebGL no support'
73
-
74
- export class ThreeContainer extends Container implements ThreeDimensionalContainer {
75
- _scene3d?: THREE.Scene
76
- _initalizeComplete?: Promise<void>
77
-
78
- _mixer?: THREE.AnimationMixer
79
-
80
- _camera?: THREE.PerspectiveCamera
81
- _renderer3d?: THREE.WebGLRenderer
82
-
83
- _mouse?: THREE.Vector2
84
-
85
- _clock?: THREE.Clock
86
-
87
- _controls?: any
88
- _onFocus?: (e: FocusEvent) => void
89
- _onResize?: (e: Event) => void
90
- _noSupportWebgl: boolean = false
91
-
92
- _raycaster = new THREE.Raycaster()
93
-
94
- _lastFocused?: RealObject
95
- _lastHovered?: RealObject
96
-
97
- private _css3DScene?: THREE.Scene
98
- private _css3DRenderer?: CSS3DRenderer
99
-
100
- composer?: EffectComposer
101
-
102
- containable(component: Component) {
103
- return component.is3dish()
104
- }
105
-
106
- is3dContainer() {
107
- return true
108
- }
109
-
110
- /* THREE Object related .. */
111
-
112
- createObjects(components: Component[]) {
113
- for (let component of components) {
114
- try {
115
- var item = component.realObject
116
-
117
- if (item) {
118
- if (component.isHTMLElement()) {
119
- this.css3DScene.add((item as RealObjectDomElement).object3d)
120
- } else {
121
- this._scene3d!.add(item.object3d)
122
- }
123
- }
124
- } catch (err) {
125
- error(err)
126
- }
127
- }
128
- }
129
-
130
- destroy_scene3d() {
131
- this.stop()
132
-
133
- window.removeEventListener('focus', this._onFocus!)
134
- window.removeEventListener('resize', this._onResize!)
135
-
136
- if (this._renderer3d) this._renderer3d.clear()
137
-
138
- if (this._controls?.autoRotate) {
139
- this._controls.doAutoRotate(false)
140
- }
141
-
142
- delete this._renderer3d
143
- delete this._camera
144
- delete this._controls
145
-
146
- if (this._scene3d) {
147
- let children = this._scene3d.children.slice()
148
- for (let i in children) {
149
- let child = children[i] as any
150
- if (child.dispose) child.dispose()
151
- if (child.geometry && child.geometry.dispose) child.geometry.dispose()
152
- if (child.material && child.material.dispose) child.material.dispose()
153
- if (child.texture && child.texture.dispose) child.texture.dispose()
154
- this._scene3d.remove(child)
155
- }
156
- }
157
-
158
- delete this._scene3d
159
- }
160
-
161
- update() {
162
- var { width, height } = this.bounds
163
-
164
- var {
165
- fov = 45,
166
- near = 0.1,
167
- far = 20000,
168
- antialias = true,
169
- precision = 'highp',
170
- cameraX,
171
- cameraY,
172
- cameraZ,
173
- exposure = 2.5
174
- } = this.state
175
-
176
- var components = this.components || []
177
-
178
- // SCENE
179
- this._scene3d = new THREE.Scene()
180
-
181
- // CAMERA
182
- var aspect = width / height
183
-
184
- this._camera = new THREE.PerspectiveCamera(fov, aspect, near, far)
185
-
186
- var cameraXPos = height * 0.8,
187
- cameraYPos = width * 0.8,
188
- cameraZPos = Math.min(500, Math.floor(Math.min(width, height)))
189
- // cameraZPos = Math.floor(Math.min(width, height))
190
-
191
- if (cameraX != undefined) cameraXPos = cameraX * width
192
- if (cameraY != undefined) cameraYPos = cameraY * height
193
- if (cameraZ != undefined) cameraZPos = cameraZ * Math.floor(Math.min(width, height))
194
-
195
- this._camera.position.set(cameraXPos, cameraZPos, cameraYPos)
196
-
197
- this._scene3d.add(this._camera)
198
- this._camera.lookAt(this._scene3d.position)
199
- this._camera.zoom = this.getState('zoom') * 0.01
200
-
201
- try {
202
- const canvas = document.createElement('canvas')
203
- let context = canvas!.getContext('webgl2')!
204
-
205
- var renderer3d = new THREE.WebGLRenderer({
206
- canvas,
207
- context,
208
- precision,
209
- alpha: true,
210
- antialias
211
- })
212
- } catch (e) {
213
- this._noSupportWebgl = true
214
- return
215
- }
216
-
217
- this._renderer3d = renderer3d
218
-
219
- renderer3d!.autoClear = true
220
- // @ts-ignore for three@0.150.1
221
- renderer3d!.outputColorSpace = THREE.SRGBColorSpace
222
- renderer3d!.useLegacyLights = false
223
- renderer3d!.toneMappingExposure = Math.pow(exposure, 5.0)
224
- renderer3d!.toneMapping = THREE.LinearToneMapping
225
- renderer3d!.shadowMap.enabled = true
226
- renderer3d!.setClearColor(0xffffff, 0) // transparent
227
- renderer3d!.setSize(width, height)
228
-
229
- // CONTROLS
230
- this._controls = new (ThreeControls as any)(this._camera, this)
231
- this._controls.cameraChanged = true
232
-
233
- // Lights
234
- var _hemiLight = new THREE.HemisphereLight(0xdddddd, 0x333333, 0.035)
235
-
236
- this.scene3d!.add(_hemiLight)
237
-
238
- this._mouse = new THREE.Vector2()
239
-
240
- this._clock = new THREE.Clock(true)
241
- this._mixer = new THREE.AnimationMixer(this.scene3d!)
242
-
243
- this.createObjects(components)
244
-
245
- this._camera.updateProjectionMatrix()
246
-
247
- const floor = createFloor(this)
248
-
249
- if (floor) {
250
- this._scene3d.add(floor)
251
- }
252
-
253
- // postprocessing
254
-
255
- var composer = (this.composer = new EffectComposer(renderer3d!))
256
- composer.setSize(width, height)
257
-
258
- const renderPass = new RenderPass(this._scene3d, this._camera)
259
- composer.addPass(renderPass)
260
-
261
- this._onFocus = (e: FocusEvent) => {
262
- this.render_threed()
263
- }
264
-
265
- this._onResize = (e: Event) => {
266
- this.resize()
267
- }
268
-
269
- window.addEventListener('resize', this._onResize)
270
- window.addEventListener('focus', this._onFocus)
271
-
272
- this.buildOverlays()
273
- this.resize()
274
- }
275
-
276
- resize() {
277
- const { width, height } = this.bounds
278
-
279
- this._camera!.aspect = width / height
280
-
281
- this.renderer3d!.setSize(width, height)
282
- this.css3DRenderer.setSize(width, height)
283
-
284
- this.composer?.setSize(width, height)
285
- this._camera!.updateProjectionMatrix()
286
- }
287
-
288
- init_scene3d() {
289
- this.root.on('redraw', this.onredraw, this)
290
-
291
- if (this._scene3d) {
292
- this.destroy_scene3d()
293
- }
294
-
295
- this.update()
296
-
297
- this.onchangeData && this.onchangeData(this.data, this.data)
298
- }
299
-
300
- threed_animate() {
301
- if (!this._controls) {
302
- return
303
- }
304
-
305
- if (this._mixer) {
306
- this._mixer.update(this._clock!.getDelta())
307
- }
308
-
309
- this._controls.update()
310
-
311
- if (this.state.autoRotate) {
312
- this.invalidate()
313
- }
314
-
315
- this.render_threed()
316
- }
317
-
318
- stop() {}
319
-
320
- get scene3d() {
321
- if (!this._scene3d) {
322
- this.init_scene3d()
323
- }
324
-
325
- return this._scene3d
326
- }
327
-
328
- get renderer3d() {
329
- return this._renderer3d
330
- }
331
-
332
- get mixer() {
333
- return this._mixer
334
- }
335
-
336
- get zoom() {
337
- return this._camera?.zoom
338
- }
339
-
340
- /**
341
- * CSS3DRenderer용 THREE.Scene을 제공
342
- */
343
- get css3DScene() {
344
- if (!this._css3DScene) {
345
- this._css3DScene = this.buildCSS3DScene()
346
- }
347
- return this._css3DScene
348
- }
349
-
350
- protected buildCSS3DScene() {
351
- return new THREE.Scene()
352
- }
353
-
354
- protected disposeCSS3DScene() {
355
- var children = [...this.css3DScene.children]
356
- children.forEach(child => this.css3DScene.remove(child))
357
- }
358
-
359
- /* css3d-renderer */
360
-
361
- /**
362
- * css3d-renderer getter
363
- */
364
- get css3DRenderer() {
365
- if (!this._css3DRenderer) {
366
- this._css3DRenderer = this.createCSS3DRenderer()
367
- }
368
-
369
- return this._css3DRenderer
370
- }
371
-
372
- protected createCSS3DRenderer() {
373
- var renderer = new CSS3DRenderer()
374
- var div = renderer.domElement
375
- div.style.position = 'absolute'
376
- div.style.top = '0'
377
- div.style.pointerEvents = 'none'
378
-
379
- if (this.app.isViewMode) {
380
- // disableAllUserEvents(div)
381
- } else {
382
- div.style.pointerEvents = 'none'
383
- }
384
-
385
- return renderer
386
- }
387
-
388
- protected disposeCSS3DRenderer() {
389
- // Nothing to do
390
- }
391
-
392
- /**
393
- * element내부에 필요한 overlay들을 생성
394
- * ViewRenderer에서는 CSS3DRenderer와 GLRendering을 위한 canvas를 오버레이로 만든다.
395
- * Warn: this.element는 아직 만들어지지 않은 상태에 buildOverlays가 호출됨.
396
- * @param into
397
- */
398
- buildOverlays() {
399
- this.element.appendChild(this.css3DRenderer.domElement)
400
- }
401
-
402
- render_threed() {
403
- if (this.composer) {
404
- this.composer.render()
405
- }
406
- }
407
-
408
- /* Container Overides .. */
409
- render(ctx: CanvasRenderingContext2D) {
410
- if (this.app.isViewMode) {
411
- this.setState('threed', true)
412
- }
413
-
414
- if (this.state.threed && !this._noSupportWebgl && this._camera) {
415
- this.css3DRenderer.render(this.css3DScene, this._camera!)
416
- return
417
- }
418
-
419
- super.render(ctx)
420
- }
421
-
422
- postrender(ctx: CanvasRenderingContext2D) {
423
- var { left, top, debug, threed } = this.state
424
-
425
- var { width, height } = this.bounds
426
-
427
- // ios에서 width, height에 소수점이 있으면 3d를 표현하지 못하는 문제가 있어 정수화
428
- width = Math.floor(width)
429
- height = Math.floor(height)
430
-
431
- if (threed) {
432
- if (!this._scene3d) {
433
- this.init_scene3d()
434
- this.render_threed()
435
- }
436
-
437
- if (this._noSupportWebgl) {
438
- this._showWebglNoSupportText(ctx)
439
- return
440
- }
441
-
442
- if (!this._renderer3d) {
443
- return
444
- }
445
-
446
- var { width: rendererWidth, height: rendererHeight } = this._renderer3d.getSize(new THREE.Vector2())
447
-
448
- ctx.drawImage(this._renderer3d.domElement, 0, 0, rendererWidth, rendererHeight, left, top, width, height)
449
-
450
- if (debug) {
451
- ctx.font = 100 + 'px Arial'
452
- ctx.textAlign = 'center'
453
- ctx.fillStyle = 'black'
454
- ctx.globalAlpha = 0.5
455
- ctx.fillText(String(FPS()), 100, 100)
456
- }
457
- } else {
458
- super.postrender(ctx)
459
- }
460
- }
461
-
462
- dispose() {
463
- this.root.off('redraw', this.onredraw, this)
464
-
465
- this.disposeCSS3DScene()
466
-
467
- this.composer?.dispose()
468
- this.destroy_scene3d()
469
-
470
- super.dispose()
471
- }
472
-
473
- get layout() {
474
- return Layout.get('three')
475
- }
476
-
477
- get nature(): ComponentNature {
478
- return NATURE
479
- }
480
-
481
- getObjectByRaycast(): THREE.Object3D | undefined {
482
- var intersects = this.getObjectsByRaycast()
483
-
484
- if (intersects && intersects.length > 0) {
485
- var object: THREE.Object3D | null = intersects[0].object
486
- while (object) {
487
- if (object.userData.context) {
488
- return object
489
- }
490
-
491
- object = object.parent
492
- }
493
- }
494
- }
495
-
496
- getObjectsByRaycast() {
497
- var vector = this._mouse
498
- if (!this._camera) {
499
- return
500
- }
501
-
502
- this._raycaster.setFromCamera(vector!, this._camera)
503
-
504
- var intersects = this._raycaster.intersectObjects(this._scene3d!.children, true)
505
-
506
- return intersects
507
- }
508
-
509
- _showWebglNoSupportText(context: CanvasRenderingContext2D) {
510
- context.save()
511
-
512
- var { width, height } = this.state
513
-
514
- context.font = width / 20 + 'px Arial'
515
- context.textAlign = 'center'
516
- context.fillText(WEBGL_NO_SUPPORT_TEXT, width / 2 - width / 40, height / 2)
517
-
518
- context.restore()
519
- }
520
-
521
- /* Event Handlers */
522
-
523
- onchange(after: Properties, before: Properties) {
524
- if (after.hasOwnProperty('width') || after.hasOwnProperty('height') || after.hasOwnProperty('threed'))
525
- this.destroy_scene3d()
526
-
527
- if (after.hasOwnProperty('autoRotate')) {
528
- if (this._controls) {
529
- this._controls.doAutoRotate(after.autoRotate)
530
- }
531
- }
532
-
533
- if (
534
- after.hasOwnProperty('fov') ||
535
- after.hasOwnProperty('near') ||
536
- after.hasOwnProperty('far') ||
537
- after.hasOwnProperty('zoom')
538
- ) {
539
- if (this._camera) {
540
- const { near, far, zoom, fov } = this.state
541
-
542
- this._camera.near = near
543
- this._camera.far = far
544
- this._camera.zoom = zoom * 0.01
545
- this._camera.fov = fov
546
- this._camera.updateProjectionMatrix()
547
-
548
- this._controls.cameraChanged = true
549
- }
550
- }
551
- }
552
-
553
- onmousedown(e: MouseEvent) {
554
- if (this._controls) {
555
- this._controls.onMouseDown(e)
556
- }
557
- }
558
-
559
- onmouseup(e: MouseEvent) {
560
- if (this._controls) {
561
- if (this._lastFocused) {
562
- ;(this._lastFocused as any)._focused = false
563
- }
564
-
565
- const { left, top, width, height } = this.state
566
-
567
- var pointer = this.transcoordC2S(e.offsetX, e.offsetY)
568
-
569
- this._mouse!.x = ((pointer.x - left) / width) * 2 - 1
570
- this._mouse!.y = -((pointer.y - top) / height) * 2 + 1
571
-
572
- var object = this.getObjectByRaycast()
573
- var realObject = object?.userData.context as RealObject
574
-
575
- if (realObject) {
576
- ;(realObject as any)._focused = true
577
- ;(realObject as any)._focusedAt = performance.now()
578
- this._lastFocused = realObject
579
- realObject.component?.trigger('click', e)
580
- }
581
-
582
- e.stopPropagation()
583
- }
584
- }
585
-
586
- onmousemove(e: MouseEvent) {
587
- if (this._controls) {
588
- const { left, top, width, height } = this.state
589
-
590
- var pointer = this.transcoordC2S(e.offsetX, e.offsetY)
591
-
592
- this._mouse!.x = ((pointer.x - left) / width) * 2 - 1
593
- this._mouse!.y = -((pointer.y - top) / height) * 2 + 1
594
-
595
- var object = this.getObjectByRaycast()
596
- var realObject = object?.userData.context as RealObject
597
-
598
- if (realObject !== this._lastHovered) {
599
- if (this._lastHovered) {
600
- this._lastHovered.component?.trigger('mouseleave', e)
601
- delete this._lastHovered
602
- }
603
-
604
- if (realObject) {
605
- this._lastHovered = realObject
606
- this._lastHovered.component?.trigger('mouseenter', e)
607
- }
608
- }
609
-
610
- this._controls.onMouseMove(e)
611
-
612
- e.stopPropagation()
613
- }
614
- }
615
-
616
- onmouseleave(e: MouseEvent) {}
617
-
618
- onwheel(e: WheelEvent) {
619
- if (this._controls) {
620
- this.handleMouseWheel(e)
621
- e.stopPropagation()
622
- }
623
- }
624
-
625
- ondblclick(e: MouseEvent) {
626
- if (this._controls) {
627
- this.setState('zoom', this.getState('zoom'))
628
- this._controls.reset()
629
- e.stopPropagation()
630
- }
631
- }
632
-
633
- ondragstart(e: DragEvent) {
634
- if (this._controls) {
635
- var pointer = this.transcoordC2S(e.offsetX, e.offsetY)
636
- var { left, top, width, height } = this.bounds
637
-
638
- this._mouse!.x = ((pointer.x - left) / width) * 2 - 1
639
- this._mouse!.y = -((pointer.y - top) / height) * 2 + 1
640
-
641
- this._controls.onDragStart(e)
642
- e.stopPropagation()
643
- }
644
- }
645
-
646
- ondragmove(e: DragEvent) {
647
- if (this._controls) {
648
- this._controls.cameraChanged = true
649
- this._controls.onDragMove(e)
650
- e.stopPropagation()
651
- }
652
- }
653
-
654
- ondragend(e: DragEvent) {
655
- if (this._controls) {
656
- this._controls.cameraChanged = true
657
- this._controls.onDragEnd(e)
658
- e.stopPropagation()
659
- }
660
- }
661
-
662
- ontouchstart(e: TouchEvent) {
663
- if (this._controls) {
664
- this._controls.onTouchStart(e)
665
- e.stopPropagation()
666
- }
667
- }
668
-
669
- onpan(e: TouchEvent) {
670
- if (this._controls) {
671
- this._controls.cameraChanged = true
672
- this._controls.onTouchMove(e)
673
- e.stopPropagation()
674
- }
675
- }
676
- ontouchend(e: TouchEvent) {
677
- if (this._controls) {
678
- this._controls.onTouchEnd(e)
679
- e.stopPropagation()
680
- }
681
- }
682
-
683
- onkeydown(e: KeyboardEvent) {
684
- if (this._controls) {
685
- this._controls.onKeyDown(e)
686
- e.stopPropagation()
687
- }
688
- }
689
-
690
- onpinch(e: TouchEvent) {
691
- if (this._controls) {
692
- var zoom = this.getState('zoom')
693
- //@ts-ignore
694
- zoom *= e.scale
695
-
696
- if (zoom < 100) zoom = 100
697
-
698
- this.setState('zoom', zoom)
699
- e.stopPropagation()
700
- }
701
- }
702
-
703
- ondoubletap() {
704
- this._controls.reset()
705
- }
706
-
707
- handleMouseWheel(event: WheelEvent) {
708
- var delta = 0
709
- var zoom = this.getState('zoom')
710
-
711
- delta = -event.deltaY
712
- zoom += delta * 0.1
713
- if (zoom < 100) zoom = 100
714
-
715
- this.setState('zoom', zoom)
716
- }
717
-
718
- onredraw() {
719
- this.threed_animate()
720
- }
721
- }
722
-
723
- Component.register('3d-container', ThreeContainer)