@hatiolab/things-scene 3.2.12 → 3.2.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/db.sqlite +0 -0
- package/dist/animation/animate.d.ts +4 -0
- package/dist/animation/animations/animation.d.ts +14 -0
- package/dist/animation/animations/fade.d.ts +4 -0
- package/dist/animation/animations/heartbeat.d.ts +4 -0
- package/dist/animation/animations/moving.d.ts +4 -0
- package/dist/animation/animations/outline.d.ts +10 -0
- package/dist/animation/animations/rotation.d.ts +4 -0
- package/dist/animation/animations/vibration.d.ts +4 -0
- package/dist/animation/compile.d.ts +1 -0
- package/dist/animation/delta.d.ts +19 -0
- package/dist/animation/index.d.ts +1 -0
- package/dist/command/command-change.d.ts +7 -0
- package/dist/command/command-migrate.d.ts +4 -0
- package/dist/command/command-migrate.js +85 -0
- package/dist/command/command-migrate.js.map +1 -0
- package/dist/command/command.d.ts +5 -0
- package/dist/command/snapshot-commander.d.ts +15 -0
- package/dist/components/anchor/anchor.d.ts +128 -0
- package/dist/components/anchor/ellipse-anchors.d.ts +2 -0
- package/dist/components/anchor/ellipse-anchors.js +38 -0
- package/dist/components/anchor/ellipse-anchors.js.map +1 -0
- package/dist/components/anchor/rect-anchors.d.ts +10 -0
- package/dist/components/audio.d.ts +25 -0
- package/dist/components/audio.js +141 -0
- package/dist/components/audio.js.map +1 -0
- package/dist/components/cloud.d.ts +13 -0
- package/dist/components/cloud.js +31 -0
- package/dist/components/cloud.js.map +1 -0
- package/dist/components/component.d.ts +227 -0
- package/dist/components/component.js +912 -0
- package/dist/components/component.js.map +1 -0
- package/dist/components/container-abstract.d.ts +51 -0
- package/dist/components/container-abstract.js +372 -0
- package/dist/components/container-abstract.js.map +1 -0
- package/dist/components/container.d.ts +38 -0
- package/dist/components/container.js +75 -0
- package/dist/components/container.js.map +1 -0
- package/dist/components/data/data-mapping.d.ts +16 -0
- package/dist/components/data/data.d.ts +8 -0
- package/dist/components/data/evaluator.d.ts +1 -0
- package/dist/components/donut.d.ts +15 -0
- package/dist/components/donut.js +74 -0
- package/dist/components/donut.js.map +1 -0
- package/dist/components/drawer/draw-image-pendable.d.ts +1 -0
- package/dist/components/drawer/effect.d.ts +1 -0
- package/dist/components/drawer/fill.d.ts +14 -0
- package/dist/components/drawer/format.d.ts +1 -0
- package/dist/components/drawer/line.d.ts +3 -0
- package/dist/components/drawer/stroke.d.ts +1 -0
- package/dist/components/drawer/text-wrapper.d.ts +10 -0
- package/dist/components/drawer/text.d.ts +3 -0
- package/dist/components/ellipse.d.ts +35 -0
- package/dist/components/ellipse.js +99 -0
- package/dist/components/ellipse.js.map +1 -0
- package/dist/components/file/ondropfile.d.ts +1 -0
- package/dist/components/fit/fit.d.ts +15 -0
- package/dist/components/geometry/transcoord.d.ts +41 -0
- package/dist/components/geometry/union.d.ts +6 -0
- package/dist/components/gif-view.d.ts +18 -0
- package/dist/components/gif-view.js +116 -0
- package/dist/components/gif-view.js.map +1 -0
- package/dist/components/global-ref.d.ts +36 -0
- package/dist/components/global-ref.js +128 -0
- package/dist/components/global-ref.js.map +1 -0
- package/dist/components/group.d.ts +15 -0
- package/dist/components/group.js +145 -0
- package/dist/components/group.js.map +1 -0
- package/dist/components/html/elements.d.ts +2 -0
- package/dist/components/html/fill.d.ts +1 -0
- package/dist/components/html/reposition.d.ts +1 -0
- package/dist/components/html/shadow.d.ts +1 -0
- package/dist/components/html-overlay-container.d.ts +27 -0
- package/dist/components/html-overlay-container.js +14 -0
- package/dist/components/html-overlay-container.js.map +1 -0
- package/dist/components/html-overlay-element.d.ts +25 -0
- package/dist/components/html-overlay-element.js +9 -0
- package/dist/components/html-overlay-element.js.map +1 -0
- package/dist/components/image-view.d.ts +19 -0
- package/dist/components/image-view.js +180 -0
- package/dist/components/image-view.js.map +1 -0
- package/dist/components/index.d.ts +32 -0
- package/dist/components/index.js +39 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/info-window.d.ts +41 -0
- package/dist/components/info-window.js +425 -0
- package/dist/components/info-window.js.map +1 -0
- package/dist/components/line.d.ts +91 -0
- package/dist/components/line.js +303 -0
- package/dist/components/line.js.map +1 -0
- package/dist/components/local-ref.d.ts +47 -0
- package/dist/components/local-ref.js +103 -0
- package/dist/components/local-ref.js.map +1 -0
- package/dist/components/mixins/connectable.d.ts +45 -0
- package/dist/components/mixins/data-source.d.ts +9 -0
- package/dist/components/mixins/html-element.d.ts +24 -0
- package/dist/components/mixins/move-handle.d.ts +11 -0
- package/dist/components/mixins/rect-path.d.ts +13 -0
- package/dist/components/mixins/value-holder.d.ts +18 -0
- package/dist/components/mutater/bounds.d.ts +10 -0
- package/dist/components/mutater/path.d.ts +5 -0
- package/dist/components/ortholine.d.ts +21 -0
- package/dist/components/ortholine.js +814 -0
- package/dist/components/ortholine.js.map +1 -0
- package/dist/components/outline/ellipse-outline.d.ts +4 -0
- package/dist/components/outline/ellipse-outline.js +11 -0
- package/dist/components/outline/ellipse-outline.js.map +1 -0
- package/dist/components/outline/path-outline.d.ts +1 -0
- package/dist/components/path.d.ts +5 -0
- package/dist/components/path.js +40 -0
- package/dist/components/path.js.map +1 -0
- package/dist/components/polygon.d.ts +40 -0
- package/dist/components/polygon.js +157 -0
- package/dist/components/polygon.js.map +1 -0
- package/dist/components/polyline.d.ts +18 -0
- package/dist/components/polyline.js +102 -0
- package/dist/components/polyline.js.map +1 -0
- package/dist/components/popup.d.ts +48 -0
- package/dist/components/popup.js +138 -0
- package/dist/components/popup.js.map +1 -0
- package/dist/components/rect.d.ts +26 -0
- package/dist/components/rect.js +91 -0
- package/dist/components/rect.js.map +1 -0
- package/dist/components/retention/retention-manager.d.ts +8 -0
- package/dist/components/root-container.d.ts +90 -0
- package/dist/components/root-container.js +478 -0
- package/dist/components/root-container.js.map +1 -0
- package/dist/components/ruler.d.ts +16 -0
- package/dist/components/ruler.js +77 -0
- package/dist/components/ruler.js.map +1 -0
- package/dist/components/shape.d.ts +25 -0
- package/dist/components/shape.js +80 -0
- package/dist/components/shape.js.map +1 -0
- package/dist/components/star.d.ts +13 -0
- package/dist/components/star.js +80 -0
- package/dist/components/star.js.map +1 -0
- package/dist/components/text/substitutor.d.ts +3 -0
- package/dist/components/text.d.ts +8 -0
- package/dist/components/text.js +15 -0
- package/dist/components/text.js.map +1 -0
- package/dist/components/three-container.d.ts +60 -0
- package/dist/components/three-container.js +515 -0
- package/dist/components/three-container.js.map +1 -0
- package/dist/components/triangle.d.ts +15 -0
- package/dist/components/triangle.js +76 -0
- package/dist/components/triangle.js.map +1 -0
- package/dist/const.d.ts +39 -0
- package/dist/core/collection.d.ts +8 -0
- package/dist/core/debug.d.ts +1 -0
- package/dist/core/deep-equals.d.ts +1 -0
- package/dist/core/dom-to-image.d.ts +127 -0
- package/dist/core/event.d.ts +92 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/list.d.ts +32 -0
- package/dist/core/logger.d.ts +3 -0
- package/dist/core/memoize.d.ts +6 -0
- package/dist/core/mixin.d.ts +1 -0
- package/dist/core/obj-accessor.d.ts +1 -0
- package/dist/core/reference-map.d.ts +14 -0
- package/dist/core/round-rect.d.ts +19 -0
- package/dist/core/script-loader.d.ts +3 -0
- package/dist/core/snapshot-taker.d.ts +12 -0
- package/dist/core/stack.d.ts +2 -0
- package/dist/core/timecapsule.d.ts +18 -0
- package/dist/core/utils.d.ts +9 -0
- package/dist/decorator/anchors-decorator.d.ts +31 -0
- package/dist/decorator/data-spread-decorator.d.ts +1 -0
- package/dist/decorator/decotag-decorator.d.ts +1 -0
- package/dist/decorator/index.d.ts +2 -0
- package/dist/decorator/link-decorator.d.ts +1 -0
- package/dist/effect/gradation.d.ts +1 -0
- package/dist/effect/index.d.ts +1 -0
- package/dist/effect/shadow.d.ts +2 -0
- package/dist/effect/turn.d.ts +1 -0
- package/dist/event/event-engine.d.ts +12 -0
- package/dist/event/event-pump.d.ts +11 -0
- package/dist/event/event-tracker.d.ts +21 -0
- package/dist/event/index.d.ts +2 -0
- package/dist/event/ua-event-handler.d.ts +32 -0
- package/dist/event-map/event-map.d.ts +9 -0
- package/dist/event-map/index.d.ts +1 -0
- package/dist/event-map/move-handler.d.ts +1 -0
- package/dist/event-map/text-editor-lite.d.ts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/layer/action/emphasize.d.ts +2 -0
- package/dist/layer/action/popup.d.ts +5 -0
- package/dist/layer/action/pressed.d.ts +2 -0
- package/dist/layer/add-layer.d.ts +42 -0
- package/dist/layer/add-layer.js +142 -0
- package/dist/layer/add-layer.js.map +1 -0
- package/dist/layer/decotag-layer.d.ts +27 -0
- package/dist/layer/decotag-layer.js +105 -0
- package/dist/layer/decotag-layer.js.map +1 -0
- package/dist/layer/guide-layer.d.ts +44 -0
- package/dist/layer/guide-layer.js +261 -0
- package/dist/layer/guide-layer.js.map +1 -0
- package/dist/layer/index.d.ts +7 -0
- package/dist/layer/index.js +11 -0
- package/dist/layer/index.js.map +1 -0
- package/dist/layer/layer.d.ts +32 -0
- package/dist/layer/layer.js +155 -0
- package/dist/layer/layer.js.map +1 -0
- package/dist/layer/model-layer.d.ts +46 -0
- package/dist/layer/model-layer.js +402 -0
- package/dist/layer/model-layer.js.map +1 -0
- package/dist/layer/modeler/anchor-handler.d.ts +36 -0
- package/dist/layer/modeler/control-handler.d.ts +18 -0
- package/dist/layer/modeler/focus-outline.d.ts +5 -0
- package/dist/layer/modeler/group-outline.d.ts +5 -0
- package/dist/layer/modeler/index.d.ts +7 -0
- package/dist/layer/modeler/path-handler.d.ts +22 -0
- package/dist/layer/modeler/resizer.d.ts +13 -0
- package/dist/layer/modeler/rotator.d.ts +15 -0
- package/dist/layer/modeler/rotator.js +120 -0
- package/dist/layer/modeler/rotator.js.map +1 -0
- package/dist/layer/modeling-layer.d.ts +66 -0
- package/dist/layer/modeling-layer.js +451 -0
- package/dist/layer/modeling-layer.js.map +1 -0
- package/dist/layer/selection/selected-finder.d.ts +1 -0
- package/dist/layer/selection-layer.d.ts +42 -0
- package/dist/layer/selection-layer.js +307 -0
- package/dist/layer/selection-layer.js.map +1 -0
- package/dist/layer/shift-layer.d.ts +18 -0
- package/dist/layer/shift-layer.js +61 -0
- package/dist/layer/shift-layer.js.map +1 -0
- package/dist/layout/absolute.d.ts +8 -0
- package/dist/layout/card.d.ts +7 -0
- package/dist/layout/html-absolute.d.ts +8 -0
- package/dist/layout/index.d.ts +8 -0
- package/dist/layout/index.js +12 -0
- package/dist/layout/index.js.map +1 -0
- package/dist/layout/layout.d.ts +11 -0
- package/dist/layout/linear-horizontal.d.ts +7 -0
- package/dist/layout/linear-vertical.d.ts +7 -0
- package/dist/layout/table.d.ts +9 -0
- package/dist/layout/three.d.ts +8 -0
- package/dist/layout/three.js +20 -0
- package/dist/layout/three.js.map +1 -0
- package/dist/license/license.d.ts +18 -0
- package/dist/model/compile.d.ts +1 -0
- package/dist/model/compile.js +28 -0
- package/dist/model/compile.js.map +1 -0
- package/dist/model/duplicate.d.ts +1 -0
- package/dist/model/index.d.ts +3 -0
- package/dist/model/selector.d.ts +2 -0
- package/dist/style/compile.d.ts +1 -0
- package/dist/style/index.d.ts +1 -0
- package/dist/things-scene/api/add-start.d.ts +1 -0
- package/dist/things-scene/api/add.d.ts +5 -0
- package/dist/things-scene/api/align.d.ts +1 -0
- package/dist/things-scene/api/change.d.ts +2 -0
- package/dist/things-scene/api/clipboard.d.ts +3 -0
- package/dist/things-scene/api/distribute.d.ts +1 -0
- package/dist/things-scene/api/duplicate.d.ts +4 -0
- package/dist/things-scene/api/fullscreen.d.ts +1 -0
- package/dist/things-scene/api/group.d.ts +8 -0
- package/dist/things-scene/api/group.js +78 -0
- package/dist/things-scene/api/group.js.map +1 -0
- package/dist/things-scene/api/ids.d.ts +4 -0
- package/dist/things-scene/api/index.d.ts +15 -0
- package/dist/things-scene/api/listener.d.ts +3 -0
- package/dist/things-scene/api/remove.d.ts +4 -0
- package/dist/things-scene/api/symmetry.d.ts +2 -0
- package/dist/things-scene/api/symmetry.js +39 -0
- package/dist/things-scene/api/symmetry.js.map +1 -0
- package/dist/things-scene/api/to-data-url.d.ts +1 -0
- package/dist/things-scene/api/to-data-url.js +69 -0
- package/dist/things-scene/api/to-data-url.js.map +1 -0
- package/dist/things-scene/api/zorder.d.ts +2 -0
- package/dist/things-scene/application-context.d.ts +40 -0
- package/dist/things-scene/config.d.ts +4 -0
- package/dist/things-scene/create.d.ts +20 -0
- package/dist/things-scene/fps.d.ts +1 -0
- package/dist/things-scene/index.d.ts +17 -0
- package/dist/things-scene/index.js +23 -0
- package/dist/things-scene/index.js.map +1 -0
- package/dist/things-scene/polyfill.d.ts +2 -0
- package/dist/things-scene/scene.d.ts +155 -0
- package/dist/things-scene/version.d.ts +2 -0
- package/dist/threed/common.d.ts +22 -0
- package/dist/threed/control/three-controls.d.ts +11 -0
- package/dist/threed/control/three-controls.js +620 -0
- package/dist/threed/control/three-controls.js.map +1 -0
- package/dist/threed/html/elements.d.ts +2 -0
- package/dist/threed/real-object-camera-meshed.d.ts +12 -0
- package/dist/threed/real-object-camera-meshed.js +49 -0
- package/dist/threed/real-object-camera-meshed.js.map +1 -0
- package/dist/threed/real-object-camera.d.ts +9 -0
- package/dist/threed/real-object-camera.js +31 -0
- package/dist/threed/real-object-camera.js.map +1 -0
- package/dist/threed/real-object-dom-element.d.ts +20 -0
- package/dist/threed/real-object-dom-element.js +78 -0
- package/dist/threed/real-object-dom-element.js.map +1 -0
- package/dist/threed/real-object-dummy.d.ts +6 -0
- package/dist/threed/real-object-dummy.js +11 -0
- package/dist/threed/real-object-dummy.js.map +1 -0
- package/dist/threed/real-object-extrude.d.ts +19 -0
- package/dist/threed/real-object-extrude.js +171 -0
- package/dist/threed/real-object-extrude.js.map +1 -0
- package/dist/threed/real-object-gltf.d.ts +15 -0
- package/dist/threed/real-object-gltf.js +97 -0
- package/dist/threed/real-object-gltf.js.map +1 -0
- package/dist/threed/real-object-group.d.ts +5 -0
- package/dist/threed/real-object-group.js +11 -0
- package/dist/threed/real-object-group.js.map +1 -0
- package/dist/threed/real-object-mesh.d.ts +11 -0
- package/dist/threed/real-object-mesh.js +55 -0
- package/dist/threed/real-object-mesh.js.map +1 -0
- package/dist/threed/real-object-plane.d.ts +6 -0
- package/dist/threed/real-object-plane.js +23 -0
- package/dist/threed/real-object-plane.js.map +1 -0
- package/dist/threed/real-object-scene.d.ts +21 -0
- package/dist/threed/real-object-scene.js +89 -0
- package/dist/threed/real-object-scene.js.map +1 -0
- package/dist/threed/real-object-sprite.d.ts +12 -0
- package/dist/threed/real-object-sprite.js +35 -0
- package/dist/threed/real-object-sprite.js.map +1 -0
- package/dist/threed/real-object-text.d.ts +16 -0
- package/dist/threed/real-object-text.js +70 -0
- package/dist/threed/real-object-text.js.map +1 -0
- package/dist/threed/real-object.d.ts +48 -0
- package/dist/threed/real-object.js +199 -0
- package/dist/threed/real-object.js.map +1 -0
- package/dist/threed/texture/text-texture.d.ts +8 -0
- package/dist/threed/three-dimensional-container.d.ts +7 -0
- package/dist/threed/three-dimensional-container.js +2 -0
- package/dist/threed/three-dimensional-container.js.map +1 -0
- package/dist/threed/utils/bound-uv-generator.d.ts +16 -0
- package/dist/types.d.ts +53 -0
- package/dist/types.js +368 -0
- package/dist/types.js.map +1 -0
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +3 -3
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +15 -5
- package/logs/application-2023-03-01-01.log +16 -0
- package/logs/connections-2023-02-20-09.log +35 -0
- package/logs/connections-2023-02-20-10.log +35 -0
- package/logs/connections-2023-03-01-01.log +70 -0
- package/package.json +1 -1
- package/things-scene.d.ts +13 -0
- package/things-scene.mjs +1 -1
- package/logs/application-2023-02-20-07.log +0 -6
- package/logs/connections-2023-02-08-11.log +0 -70
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import RealObject from './real-object';
|
|
6
|
+
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
7
|
+
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader';
|
|
8
|
+
import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader';
|
|
9
|
+
/* @ts-ignore */
|
|
10
|
+
import { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module.js';
|
|
11
|
+
import { error } from '../core/logger';
|
|
12
|
+
export default class RealObjectGLTF extends RealObject {
|
|
13
|
+
constructor() {
|
|
14
|
+
super(...arguments);
|
|
15
|
+
this.objectSize = new THREE.Vector3();
|
|
16
|
+
}
|
|
17
|
+
static get GLTFLoader() {
|
|
18
|
+
return RealObjectGLTF._GLTFLoader;
|
|
19
|
+
}
|
|
20
|
+
build() {
|
|
21
|
+
super.build();
|
|
22
|
+
var { src } = this.component.state;
|
|
23
|
+
if (!src) {
|
|
24
|
+
this.clear();
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
let gltfLoader = new GLTFLoader();
|
|
28
|
+
// Optional: Provide a DRACOLoader instance to decode compressed mesh data
|
|
29
|
+
const dracoLoader = new DRACOLoader();
|
|
30
|
+
dracoLoader.setDecoderPath('/node_modules/three/examples/jsm/libs/draco/');
|
|
31
|
+
gltfLoader.setDRACOLoader(dracoLoader);
|
|
32
|
+
const ktx2Loader = new KTX2Loader();
|
|
33
|
+
ktx2Loader.setTranscoderPath(`/node_modules/three/examples/jsm/libs/basis/`);
|
|
34
|
+
ktx2Loader.detectSupport(this.threeContainer.renderer3d);
|
|
35
|
+
gltfLoader.setKTX2Loader(ktx2Loader);
|
|
36
|
+
gltfLoader.setMeshoptDecoder(MeshoptDecoder);
|
|
37
|
+
var fullSrc = this.component.app.url(src);
|
|
38
|
+
gltfLoader.setCrossOrigin('use-credentials');
|
|
39
|
+
gltfLoader.load(fullSrc, gltf => {
|
|
40
|
+
this.gltfLoaded(gltf);
|
|
41
|
+
}, xhr => {
|
|
42
|
+
console.log(Math.round((xhr.loaded / xhr.total) * 100) + '% loaded');
|
|
43
|
+
}, err => {
|
|
44
|
+
error('GLTFLoader.load', err);
|
|
45
|
+
this.clear();
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
gltfLoaded(gltf) {
|
|
49
|
+
let scene = gltf.scene;
|
|
50
|
+
var animations = gltf.animations;
|
|
51
|
+
var object = scene.clone();
|
|
52
|
+
object.traverse((child) => {
|
|
53
|
+
if (child.isMesh) {
|
|
54
|
+
child.castShadow = true;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
var boundingBox = new THREE.Box3().setFromObject(object);
|
|
58
|
+
var center = boundingBox.getCenter(object.position);
|
|
59
|
+
this.objectSize = boundingBox.getSize(this.objectSize);
|
|
60
|
+
center.multiplyScalar(-1);
|
|
61
|
+
// 오브젝트 공백을 최소로 하기위해서 clear() 를 최대한 pending함.
|
|
62
|
+
this.clear();
|
|
63
|
+
this.pivot = new THREE.Object3D();
|
|
64
|
+
this.object3d.add(this.pivot);
|
|
65
|
+
this.pivot.add(object);
|
|
66
|
+
this._rescale();
|
|
67
|
+
if (animations && animations.length) {
|
|
68
|
+
for (var i = 0; i < animations.length; i++) {
|
|
69
|
+
var animation = animations[i];
|
|
70
|
+
var action = this.threeContainer.mixer.clipAction(animation);
|
|
71
|
+
action.play();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
console.log('no animations..');
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
clear() {
|
|
79
|
+
// TODO gltf object 리소스 해제가 필요하면, 여기에 추가.
|
|
80
|
+
// 반복적으로 로딩하면 WebGL 리소스 부족으로 오류 발생.
|
|
81
|
+
return super.clear();
|
|
82
|
+
}
|
|
83
|
+
_rescale() {
|
|
84
|
+
var { width = 1, height = 1, depth = 1 } = this.component.state;
|
|
85
|
+
var { x = 1, y = 1, z = 1 } = this.objectSize || {};
|
|
86
|
+
this.pivot && this.pivot.scale.set(width / x, depth / y, height / z);
|
|
87
|
+
this.component.invalidate();
|
|
88
|
+
}
|
|
89
|
+
updateDimension() {
|
|
90
|
+
this._rescale();
|
|
91
|
+
}
|
|
92
|
+
get rebuildingProperties() {
|
|
93
|
+
return ['fillStyle', 'lineStyle', 'text'];
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
RealObjectGLTF._GLTFLoader = new GLTFLoader();
|
|
97
|
+
//# sourceMappingURL=real-object-gltf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-gltf.js","sourceRoot":"","sources":["../../src/threed/real-object-gltf.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,OAAO,EAAQ,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAClE,gBAAgB;AAChB,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAA;AAClF,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU;IAAtD;;QAIU,eAAU,GAAmB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IA8G1D,CAAC;IA5GC,MAAM,KAAK,UAAU;QACnB,OAAO,cAAc,CAAC,WAAW,CAAA;IACnC,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAElC,IAAI,CAAC,GAAG,EAAE;YACR,IAAI,CAAC,KAAK,EAAE,CAAA;YACZ,OAAM;SACP;QAED,IAAI,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QAEjC,0EAA0E;QAC1E,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAA;QACrC,WAAW,CAAC,cAAc,CAAC,8CAA8C,CAAC,CAAA;QAC1E,UAAU,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;QAEtC,MAAM,UAAU,GAAG,IAAI,UAAU,EAAE,CAAA;QACnC,UAAU,CAAC,iBAAiB,CAAC,8CAA8C,CAAC,CAAA;QAC5E,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,cAAe,CAAC,UAAW,CAAC,CAAA;QAC1D,UAAU,CAAC,aAAa,CAAC,UAAU,CAAC,CAAA;QAEpC,UAAU,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAA;QAE5C,IAAI,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACzC,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAA;QAE5C,UAAU,CAAC,IAAI,CACb,OAAO,EACP,IAAI,CAAC,EAAE;YACL,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;QACvB,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;QACtE,CAAC,EACD,GAAG,CAAC,EAAE;YACJ,KAAK,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAA;YAC7B,IAAI,CAAC,KAAK,EAAE,CAAA;QACd,CAAC,CACF,CAAA;IACH,CAAC;IAEO,UAAU,CAAC,IAAU;QAC3B,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;QAEtB,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAChC,IAAI,MAAM,GAAG,KAAK,CAAC,KAAK,EAAE,CAAA;QAE1B,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAqB,EAAE,EAAE;YACxC,IAAK,KAAa,CAAC,MAAM,EAAE;gBACzB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAA;aACxB;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QACxD,IAAI,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QACnD,IAAI,CAAC,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,UAAW,CAAC,CAAA;QAEvD,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAA;QAEzB,6CAA6C;QAC7C,IAAI,CAAC,KAAK,EAAE,CAAA;QAEZ,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAA;QACjC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC7B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAEtB,IAAI,CAAC,QAAQ,EAAE,CAAA;QAEf,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,EAAE;YACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,SAAS,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;gBAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,cAAe,CAAC,KAAM,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;gBAC9D,MAAM,CAAC,IAAI,EAAE,CAAA;aACd;SACF;aAAM;YACL,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;SAC/B;IACH,CAAC;IAED,KAAK;QACH,yCAAyC;QACzC,mCAAmC;QAEnC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,QAAQ;QACN,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAE/D,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAA;QAEnD,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;QAEpE,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;IAC7B,CAAC;IAED,eAAe;QACb,IAAI,CAAC,QAAQ,EAAE,CAAA;IACjB,CAAC;IAED,IAAI,oBAAoB;QACtB,OAAO,CAAC,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,CAAA;IAC3C,CAAC;;AAhHc,0BAAW,GAAG,IAAI,UAAU,EAAE,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\n\nimport RealObject from './real-object'\n\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader'\nimport { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader'\n/* @ts-ignore */\nimport { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module.js'\nimport { error } from '../core/logger'\n\nexport default class RealObjectGLTF extends RealObject {\n private static _GLTFLoader = new GLTFLoader()\n\n private pivot?: THREE.Object3D\n private objectSize?: THREE.Vector3 = new THREE.Vector3()\n\n static get GLTFLoader() {\n return RealObjectGLTF._GLTFLoader\n }\n\n build() {\n super.build()\n\n var { src } = this.component.state\n\n if (!src) {\n this.clear()\n return\n }\n\n let gltfLoader = new GLTFLoader()\n\n // Optional: Provide a DRACOLoader instance to decode compressed mesh data\n const dracoLoader = new DRACOLoader()\n dracoLoader.setDecoderPath('/node_modules/three/examples/jsm/libs/draco/')\n gltfLoader.setDRACOLoader(dracoLoader)\n\n const ktx2Loader = new KTX2Loader()\n ktx2Loader.setTranscoderPath(`/node_modules/three/examples/jsm/libs/basis/`)\n ktx2Loader.detectSupport(this.threeContainer!.renderer3d!)\n gltfLoader.setKTX2Loader(ktx2Loader)\n\n gltfLoader.setMeshoptDecoder(MeshoptDecoder)\n\n var fullSrc = this.component.app.url(src)\n gltfLoader.setCrossOrigin('use-credentials')\n\n gltfLoader.load(\n fullSrc,\n gltf => {\n this.gltfLoaded(gltf)\n },\n xhr => {\n console.log(Math.round((xhr.loaded / xhr.total) * 100) + '% loaded')\n },\n err => {\n error('GLTFLoader.load', err)\n this.clear()\n }\n )\n }\n\n private gltfLoaded(gltf: GLTF) {\n let scene = gltf.scene\n\n var animations = gltf.animations\n var object = scene.clone()\n\n object.traverse((child: THREE.Object3D) => {\n if ((child as any).isMesh) {\n child.castShadow = true\n }\n })\n\n var boundingBox = new THREE.Box3().setFromObject(object)\n var center = boundingBox.getCenter(object.position)\n this.objectSize = boundingBox.getSize(this.objectSize!)\n\n center.multiplyScalar(-1)\n\n // 오브젝트 공백을 최소로 하기위해서 clear() 를 최대한 pending함.\n this.clear()\n\n this.pivot = new THREE.Object3D()\n this.object3d.add(this.pivot)\n this.pivot.add(object)\n\n this._rescale()\n\n if (animations && animations.length) {\n for (var i = 0; i < animations.length; i++) {\n var animation = animations[i]\n var action = this.threeContainer!.mixer!.clipAction(animation)\n action.play()\n }\n } else {\n console.log('no animations..')\n }\n }\n\n clear() {\n // TODO gltf object 리소스 해제가 필요하면, 여기에 추가.\n // 반복적으로 로딩하면 WebGL 리소스 부족으로 오류 발생.\n\n return super.clear()\n }\n\n _rescale() {\n var { width = 1, height = 1, depth = 1 } = this.component.state\n\n var { x = 1, y = 1, z = 1 } = this.objectSize || {}\n\n this.pivot && this.pivot.scale.set(width / x, depth / y, height / z)\n\n this.component.invalidate()\n }\n\n updateDimension() {\n this._rescale()\n }\n\n get rebuildingProperties(): string[] {\n return ['fillStyle', 'lineStyle', 'text']\n }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import RealObject from './real-object';
|
|
6
|
+
export default class RealObjectGroup extends RealObject {
|
|
7
|
+
getObject3dInstance() {
|
|
8
|
+
return new THREE.Group();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=real-object-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-group.js","sourceRoot":"","sources":["../../src/threed/real-object-group.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAAuB;IACxD,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,CAAA;IAC1B,CAAC;CAyBF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport * as THREE from 'three'\nimport RealObject from './real-object'\n\nexport default class RealObjectGroup extends RealObject<THREE.Group> {\n protected getObject3dInstance() {\n return new THREE.Group()\n }\n\n // build() {\n // super.build()\n\n // var { left = 0, top = 0, width = 0, height = 0 } = this.component.bounds\n\n // let cx = left + width / 2 - canvasSize.width / 2\n // let cy = top + height / 2 - canvasSize.height / 2\n // // let cz = this.state.rx\n\n // this.object3d.position.x = cx\n // this.object3d.position.z = cy\n // }\n\n // createChildrenObject() {\n // var { components } = this._model\n\n // components.forEach((component: Model) => {\n // var item = component.realObject\n // if (item) {\n // this.object3d.add(item.object3d)\n // }\n // })\n // }\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import RealObject from './real-object';
|
|
3
|
+
export default abstract class RealObjectMesh extends RealObject<THREE.Mesh> {
|
|
4
|
+
protected getObject3dInstance(): THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>;
|
|
5
|
+
build(): void;
|
|
6
|
+
updateAlpha(): void;
|
|
7
|
+
updateHidden(): void;
|
|
8
|
+
protected abstract buildGeometry(): THREE.BufferGeometry;
|
|
9
|
+
buildMaterial(): THREE.Material;
|
|
10
|
+
clear(): THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { error } from '../core/logger';
|
|
6
|
+
import { applyAlpha } from './common';
|
|
7
|
+
import RealObject from './real-object';
|
|
8
|
+
export default class RealObjectMesh extends RealObject {
|
|
9
|
+
getObject3dInstance() {
|
|
10
|
+
return new THREE.Mesh();
|
|
11
|
+
}
|
|
12
|
+
build() {
|
|
13
|
+
super.build();
|
|
14
|
+
this.object3d.geometry = this.buildGeometry();
|
|
15
|
+
this.object3d.material = this.buildMaterial();
|
|
16
|
+
}
|
|
17
|
+
/* overide */
|
|
18
|
+
updateAlpha() {
|
|
19
|
+
var { alpha = 1, fillStyle } = this.component.state;
|
|
20
|
+
applyAlpha(this.object3d.material, alpha, fillStyle);
|
|
21
|
+
}
|
|
22
|
+
updateHidden() {
|
|
23
|
+
this.object3d.visible = !this.component.state.hidden;
|
|
24
|
+
}
|
|
25
|
+
buildMaterial() {
|
|
26
|
+
var { fillStyle } = this.component.state;
|
|
27
|
+
var params = {};
|
|
28
|
+
if (typeof fillStyle == 'object') {
|
|
29
|
+
params = {
|
|
30
|
+
map: new THREE.TextureLoader(THREE.DefaultLoadingManager).load(fillStyle.image, () => {
|
|
31
|
+
this.component.invalidate();
|
|
32
|
+
}, e => {
|
|
33
|
+
error(e);
|
|
34
|
+
})
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
params = {
|
|
39
|
+
color: fillStyle || '#FFF'
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
const material = new THREE.MeshLambertMaterial(params);
|
|
43
|
+
return material;
|
|
44
|
+
}
|
|
45
|
+
clear() {
|
|
46
|
+
this.object3d.traverse((mesh) => {
|
|
47
|
+
if (mesh.isMesh) {
|
|
48
|
+
mesh.geometry.dispose();
|
|
49
|
+
(mesh.material.length ? mesh.material : [mesh.material]).forEach((m) => m.dispose && m.dispose());
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return super.clear();
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=real-object-mesh.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-mesh.js","sourceRoot":"","sources":["../../src/threed/real-object-mesh.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAEtC,OAAO,EAAE,UAAU,EAA2C,MAAM,UAAU,CAAA;AAC9E,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,OAAO,OAAgB,cAAe,SAAQ,UAAsB;IAC/D,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;QAC7C,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,CAAA;IAC/C,CAAC;IAED,aAAa;IAEb,WAAW;QACT,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAEnD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAA;IACtD,CAAC;IAID,aAAa;QACX,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAExC,IAAI,MAAM,GAAQ,EAAE,CAAA;QAEpB,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;YAChC,MAAM,GAAG;gBACP,GAAG,EAAE,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAC5D,SAAS,CAAC,KAAK,EACf,GAAG,EAAE;oBACH,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;gBAC7B,CAAC,EACD,CAAC,CAAC,EAAE;oBACF,KAAK,CAAC,CAAC,CAAC,CAAA;gBACV,CAAC,CACF;aACF,CAAA;SACF;aAAM;YACL,MAAM,GAAG;gBACP,KAAK,EAAE,SAAS,IAAI,MAAM;aAC3B,CAAA;SACF;QAED,MAAM,QAAQ,GAAG,IAAI,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAA;QAEtD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAS,EAAE,EAAE;YACnC,IAAI,IAAI,CAAC,MAAM,EAAE;gBACf,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CACtB;gBAAA,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;aACxG;QACH,CAAC,CAAC,CAAA;QAEF,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { error } from '../core/logger'\n\nimport { applyAlpha, UNIT_ROTATE, UNIT_SCALE, UNIT_TRANSLATE } from './common'\nimport RealObject from './real-object'\n\nexport default abstract class RealObjectMesh extends RealObject<THREE.Mesh> {\n protected getObject3dInstance() {\n return new THREE.Mesh()\n }\n\n build() {\n super.build()\n\n this.object3d.geometry = this.buildGeometry()\n this.object3d.material = this.buildMaterial()\n }\n\n /* overide */\n\n updateAlpha() {\n var { alpha = 1, fillStyle } = this.component.state\n\n applyAlpha(this.object3d.material, alpha, fillStyle)\n }\n\n updateHidden() {\n this.object3d.visible = !this.component.state.hidden\n }\n\n protected abstract buildGeometry(): THREE.BufferGeometry\n\n buildMaterial(): THREE.Material /* : THREE.MeshMaterialType | THREE.MeshMaterialType[] */ {\n var { fillStyle } = this.component.state\n\n var params: any = {}\n\n if (typeof fillStyle == 'object') {\n params = {\n map: new THREE.TextureLoader(THREE.DefaultLoadingManager).load(\n fillStyle.image,\n () => {\n this.component.invalidate()\n },\n e => {\n error(e)\n }\n )\n }\n } else {\n params = {\n color: fillStyle || '#FFF'\n }\n }\n\n const material = new THREE.MeshLambertMaterial(params)\n\n return material\n }\n\n clear() {\n this.object3d.traverse((mesh: any) => {\n if (mesh.isMesh) {\n mesh.geometry.dispose()\n ;(mesh.material.length ? mesh.material : [mesh.material]).forEach((m: any) => m.dispose && m.dispose())\n }\n })\n\n return super.clear()\n }\n}\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
/*
|
|
5
|
+
Inspired by http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/
|
|
6
|
+
*/
|
|
7
|
+
import * as THREE from 'three';
|
|
8
|
+
import RealObjectMesh from './real-object-mesh';
|
|
9
|
+
export default class RealObjectPlane extends RealObjectMesh {
|
|
10
|
+
buildGeometry() {
|
|
11
|
+
var { width, height } = this.component.state.dimension;
|
|
12
|
+
return new THREE.PlaneGeometry(width, height);
|
|
13
|
+
}
|
|
14
|
+
buildMaterial() {
|
|
15
|
+
var material = new THREE.MeshBasicMaterial();
|
|
16
|
+
material.color.set('black');
|
|
17
|
+
material.opacity = 0;
|
|
18
|
+
material.side = THREE.DoubleSide;
|
|
19
|
+
material.blending = THREE.NoBlending;
|
|
20
|
+
return material;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=real-object-plane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-plane.js","sourceRoot":"","sources":["../../src/threed/real-object-plane.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;EAEE;AAEF,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,cAAc,MAAM,oBAAoB,CAAA;AAE/C,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,cAAc;IACzD,aAAa;QACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;QAEtD,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;IAED,aAAa;QACX,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAA;QAE5C,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;QAC3B,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAA;QACpB,QAAQ,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAA;QAChC,QAAQ,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAA;QAEpC,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\n/* \n Inspired by http://learningthreejs.com/blog/2013/04/30/closing-the-gap-between-html-and-webgl/\n*/\n\nimport * as THREE from 'three'\n\nimport RealObjectMesh from './real-object-mesh'\n\nexport default class RealObjectPlane extends RealObjectMesh {\n buildGeometry() {\n var { width, height } = this.component.state.dimension\n\n return new THREE.PlaneGeometry(width, height)\n }\n\n buildMaterial() /* : THREE.MeshMaterialType | THREE.MeshMaterialType[] */ {\n var material = new THREE.MeshBasicMaterial()\n\n material.color.set('black')\n material.opacity = 0\n material.side = THREE.DoubleSide\n material.blending = THREE.NoBlending\n\n return material\n }\n}\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import RealObject from './real-object';
|
|
3
|
+
export default class RealObjectScene extends RealObject<THREE.Scene> {
|
|
4
|
+
private _floor?;
|
|
5
|
+
private _animationMixer?;
|
|
6
|
+
protected getObject3dInstance(): THREE.Scene;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
clear(): THREE.Scene;
|
|
9
|
+
get floor(): THREE.Mesh;
|
|
10
|
+
set floor(floor: THREE.Mesh);
|
|
11
|
+
build(): void;
|
|
12
|
+
updateTransform(): void;
|
|
13
|
+
updateTransformReverse(): void;
|
|
14
|
+
updateDimension(): void;
|
|
15
|
+
updatePosition(): void;
|
|
16
|
+
updateRotate(): void;
|
|
17
|
+
updateScale(): void;
|
|
18
|
+
updateAlpha(): void;
|
|
19
|
+
updateHidden(): void;
|
|
20
|
+
get animationMixer(): THREE.AnimationMixer;
|
|
21
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { error } from '../core/logger';
|
|
6
|
+
import RealObject from './real-object';
|
|
7
|
+
export default class RealObjectScene extends RealObject {
|
|
8
|
+
getObject3dInstance() {
|
|
9
|
+
return new THREE.Scene();
|
|
10
|
+
}
|
|
11
|
+
dispose() {
|
|
12
|
+
this.object3d.children.forEach(child => {
|
|
13
|
+
;
|
|
14
|
+
child['dispose'] && child['dispose']();
|
|
15
|
+
this.object3d.remove(child);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
clear() {
|
|
19
|
+
if (this._floor) {
|
|
20
|
+
this.object3d.remove(this._floor);
|
|
21
|
+
if (this._floor.material instanceof Array) {
|
|
22
|
+
;
|
|
23
|
+
this._floor.material.forEach(material => material.dispose());
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
this._floor.material.dispose();
|
|
27
|
+
}
|
|
28
|
+
this._floor.geometry.dispose();
|
|
29
|
+
delete this._floor;
|
|
30
|
+
}
|
|
31
|
+
return super.clear();
|
|
32
|
+
}
|
|
33
|
+
get floor() {
|
|
34
|
+
return this._floor;
|
|
35
|
+
}
|
|
36
|
+
set floor(floor) {
|
|
37
|
+
var { width, height } = this.component.state;
|
|
38
|
+
floor.scale.set(width, height, 1);
|
|
39
|
+
floor.rotation.x = -Math.PI / 2;
|
|
40
|
+
floor.position.y = 0;
|
|
41
|
+
floor.name = 'floor';
|
|
42
|
+
floor.receiveShadow = true;
|
|
43
|
+
this.object3d.add(floor);
|
|
44
|
+
this._floor = floor;
|
|
45
|
+
this.component.invalidate();
|
|
46
|
+
}
|
|
47
|
+
build() {
|
|
48
|
+
super.build();
|
|
49
|
+
var { fillStyle } = this.component.state;
|
|
50
|
+
if (!fillStyle || fillStyle == 'none') {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
var floorGeometry = new THREE.PlaneGeometry();
|
|
54
|
+
var floorMaterial;
|
|
55
|
+
var side = THREE.DoubleSide;
|
|
56
|
+
if (typeof fillStyle == 'object' && fillStyle.type == 'pattern' && fillStyle.image) {
|
|
57
|
+
floorMaterial = new THREE.MeshBasicMaterial({
|
|
58
|
+
map: new THREE.TextureLoader(THREE.DefaultLoadingManager).load(fillStyle.image, () => {
|
|
59
|
+
this.component.invalidate();
|
|
60
|
+
}, e => {
|
|
61
|
+
error(e);
|
|
62
|
+
}),
|
|
63
|
+
side
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
else if (typeof fillStyle == 'string') {
|
|
67
|
+
floorMaterial = new THREE.MeshBasicMaterial({
|
|
68
|
+
color: fillStyle,
|
|
69
|
+
side
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
this.floor = new THREE.Mesh(floorGeometry, floorMaterial);
|
|
73
|
+
}
|
|
74
|
+
updateTransform() { }
|
|
75
|
+
updateTransformReverse() { }
|
|
76
|
+
updateDimension() { }
|
|
77
|
+
updatePosition() { }
|
|
78
|
+
updateRotate() { }
|
|
79
|
+
updateScale() { }
|
|
80
|
+
updateAlpha() { }
|
|
81
|
+
updateHidden() { }
|
|
82
|
+
get animationMixer() {
|
|
83
|
+
if (!this._animationMixer) {
|
|
84
|
+
this._animationMixer = new THREE.AnimationMixer(this.object3d);
|
|
85
|
+
}
|
|
86
|
+
return this._animationMixer;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=real-object-scene.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-scene.js","sourceRoot":"","sources":["../../src/threed/real-object-scene.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { error } from '../core/logger'\n\nimport RealObject from './real-object'\n\nexport default class RealObjectScene extends RealObject<THREE.Scene> {\n private _floor?: THREE.Mesh\n private _animationMixer?: THREE.AnimationMixer\n\n protected getObject3dInstance() {\n return new THREE.Scene()\n }\n\n dispose() {\n this.object3d.children.forEach(child => {\n ;(child as any)['dispose'] && (child as any)['dispose']()\n\n this.object3d.remove(child)\n })\n }\n\n clear() {\n if (this._floor) {\n this.object3d.remove(this._floor)\n\n if (this._floor.material instanceof Array) {\n ;(this._floor.material as THREE.Material[]).forEach(material => material.dispose())\n } else {\n this._floor.material.dispose()\n }\n this._floor.geometry.dispose()\n\n delete this._floor\n }\n\n return super.clear()\n }\n\n get floor(): THREE.Mesh {\n return this._floor!\n }\n\n set floor(floor: THREE.Mesh) {\n var { width, height } = this.component.state\n\n floor.scale.set(width, height, 1)\n floor.rotation.x = -Math.PI / 2\n floor.position.y = 0\n\n floor.name = 'floor'\n\n floor.receiveShadow = true\n\n this.object3d.add(floor)\n\n this._floor = floor\n\n this.component.invalidate()\n }\n\n build() {\n super.build()\n\n var { fillStyle } = this.component.state\n\n if (!fillStyle || fillStyle == 'none') {\n return\n }\n\n var floorGeometry = new THREE.PlaneGeometry()\n var floorMaterial\n var side = THREE.DoubleSide\n\n if (typeof fillStyle == 'object' && fillStyle.type == 'pattern' && fillStyle.image) {\n floorMaterial = new THREE.MeshBasicMaterial({\n map: new THREE.TextureLoader(THREE.DefaultLoadingManager).load(\n fillStyle.image,\n () => {\n this.component.invalidate()\n },\n e => {\n error(e)\n }\n ),\n side\n })\n } else if (typeof fillStyle == 'string') {\n floorMaterial = new THREE.MeshBasicMaterial({\n color: fillStyle,\n side\n })\n }\n\n this.floor = new THREE.Mesh(floorGeometry, floorMaterial)\n }\n\n updateTransform() {}\n updateTransformReverse() {}\n updateDimension() {}\n updatePosition() {}\n updateRotate() {}\n updateScale() {}\n updateAlpha() {}\n updateHidden() {}\n\n get animationMixer(): THREE.AnimationMixer {\n if (!this._animationMixer) {\n this._animationMixer = new THREE.AnimationMixer(this.object3d)\n }\n\n return this._animationMixer\n }\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import RealObject from './real-object';
|
|
3
|
+
export default abstract class RealObjectSprite extends RealObject<THREE.Sprite> {
|
|
4
|
+
protected getObject3dInstance(): THREE.Sprite;
|
|
5
|
+
build(): void;
|
|
6
|
+
dispose(): void;
|
|
7
|
+
updateDimension(): void;
|
|
8
|
+
updateAlpha(): void;
|
|
9
|
+
updateHidden(): void;
|
|
10
|
+
abstract buildMaterial(): THREE.Material;
|
|
11
|
+
clear(): THREE.Sprite;
|
|
12
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import * as THREE from 'three';
|
|
5
|
+
import { applyAlpha } from './common';
|
|
6
|
+
import RealObject from './real-object';
|
|
7
|
+
export default class RealObjectSprite extends RealObject {
|
|
8
|
+
getObject3dInstance() {
|
|
9
|
+
return new THREE.Sprite();
|
|
10
|
+
}
|
|
11
|
+
build() {
|
|
12
|
+
super.build();
|
|
13
|
+
this.object3d.material = this.buildMaterial();
|
|
14
|
+
}
|
|
15
|
+
dispose() {
|
|
16
|
+
this.clear();
|
|
17
|
+
}
|
|
18
|
+
/* overide */
|
|
19
|
+
updateDimension() {
|
|
20
|
+
this.update();
|
|
21
|
+
}
|
|
22
|
+
updateAlpha() {
|
|
23
|
+
var { alpha = 1, fillStyle } = this.component.state;
|
|
24
|
+
applyAlpha(this.object3d.material, alpha, fillStyle);
|
|
25
|
+
}
|
|
26
|
+
updateHidden() {
|
|
27
|
+
this.object3d.visible = !this.component.state.hidden;
|
|
28
|
+
}
|
|
29
|
+
clear() {
|
|
30
|
+
this.object3d.material.dispose();
|
|
31
|
+
this.geometry.dispose();
|
|
32
|
+
return super.clear();
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=real-object-sprite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-sprite.js","sourceRoot":"","sources":["../../src/threed/real-object-sprite.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,OAAO,OAAgB,gBAAiB,SAAQ,UAAwB;IACnE,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,EAA0B,CAAA;IACvE,CAAC;IAED,OAAO;QACL,IAAI,CAAC,KAAK,EAAE,CAAA;IACd,CAAC;IAED,aAAa;IACb,eAAe;QACb,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC;IAED,WAAW;QACT,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAEnD,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;IACtD,CAAC;IAED,YAAY;QACV,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAA;IACtD,CAAC;IAID,KAAK;QACH,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAC/B;QAAC,IAAY,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;QAEjC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\n\nimport { applyAlpha } from './common'\nimport RealObject from './real-object'\n\nexport default abstract class RealObjectSprite extends RealObject<THREE.Sprite> {\n protected getObject3dInstance() {\n return new THREE.Sprite()\n }\n\n build() {\n super.build()\n\n this.object3d.material = this.buildMaterial() as THREE.SpriteMaterial\n }\n\n dispose() {\n this.clear()\n }\n\n /* overide */\n updateDimension() {\n this.update()\n }\n\n updateAlpha() {\n var { alpha = 1, fillStyle } = this.component.state\n\n applyAlpha(this.object3d.material, alpha, fillStyle)\n }\n\n updateHidden() {\n this.object3d.visible = !this.component.state.hidden\n }\n\n abstract buildMaterial(): THREE.Material\n\n clear() {\n this.object3d.material.dispose()\n ;(this as any).geometry.dispose()\n\n return super.clear()\n }\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import RealObjectMesh from './real-object-mesh';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
/**
|
|
4
|
+
* RealObjectText
|
|
5
|
+
*/
|
|
6
|
+
export default class RealObjectText extends RealObjectMesh {
|
|
7
|
+
buildGeometry(): THREE.PlaneGeometry;
|
|
8
|
+
buildMaterial(): THREE.MeshBasicMaterial;
|
|
9
|
+
updateDimension(): void;
|
|
10
|
+
get rotation(): {
|
|
11
|
+
x: number;
|
|
12
|
+
y: any;
|
|
13
|
+
z: any;
|
|
14
|
+
};
|
|
15
|
+
updateAlpha(): void;
|
|
16
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
+
*/
|
|
4
|
+
import RealObjectMesh from './real-object-mesh';
|
|
5
|
+
import * as THREE from 'three';
|
|
6
|
+
import { textTexture, textBounds } from './texture/text-texture';
|
|
7
|
+
/**
|
|
8
|
+
* RealObjectText
|
|
9
|
+
*/
|
|
10
|
+
export default class RealObjectText extends RealObjectMesh {
|
|
11
|
+
buildGeometry() {
|
|
12
|
+
// TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.
|
|
13
|
+
var { bold = false, italic = false, fontFamily = 'Serif', fontSize = 10, fontColor = 'black' } = this.component.state;
|
|
14
|
+
var text = this.component.text;
|
|
15
|
+
let { width, height } = textBounds(text, {
|
|
16
|
+
bold,
|
|
17
|
+
italic,
|
|
18
|
+
fontFamily,
|
|
19
|
+
fontSize,
|
|
20
|
+
fontColor
|
|
21
|
+
});
|
|
22
|
+
// FIXME
|
|
23
|
+
// ;(this.component as any).dimension = {
|
|
24
|
+
// width,
|
|
25
|
+
// height,
|
|
26
|
+
// depth: 1
|
|
27
|
+
// }
|
|
28
|
+
this.component.setState({
|
|
29
|
+
width,
|
|
30
|
+
depth: 1,
|
|
31
|
+
height
|
|
32
|
+
});
|
|
33
|
+
return new THREE.PlaneGeometry(width, height);
|
|
34
|
+
}
|
|
35
|
+
buildMaterial() {
|
|
36
|
+
var { width, height, bold = false, italic = false, fontFamily = 'Serif', fontSize = 10, fontColor = 'black' } = this.component.state;
|
|
37
|
+
// TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.
|
|
38
|
+
var text = this.component.text;
|
|
39
|
+
return new THREE.MeshBasicMaterial({
|
|
40
|
+
map: textTexture(text, width, height, {
|
|
41
|
+
bold,
|
|
42
|
+
italic,
|
|
43
|
+
fontFamily,
|
|
44
|
+
fontSize,
|
|
45
|
+
fontColor
|
|
46
|
+
}),
|
|
47
|
+
transparent: true,
|
|
48
|
+
alphaTest: 0.2,
|
|
49
|
+
side: THREE.DoubleSide
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
/* overide */
|
|
53
|
+
updateDimension() {
|
|
54
|
+
// Intentionally do nothing
|
|
55
|
+
}
|
|
56
|
+
get rotation() {
|
|
57
|
+
const { rotationX = 0, rotationY = 0, rotation = 0 } = this.component.state;
|
|
58
|
+
return {
|
|
59
|
+
x: rotationX - Math.PI / 2,
|
|
60
|
+
y: rotationY,
|
|
61
|
+
z: rotation
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
updateAlpha() {
|
|
65
|
+
// material의 transparency는 항상 true으로 유지되어야 한다.
|
|
66
|
+
super.updateAlpha();
|
|
67
|
+
this.object3d.material.transparent = true;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=real-object-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"real-object-text.js","sourceRoot":"","sources":["../../src/threed/real-object-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,cAAc,MAAM,oBAAoB,CAAA;AAE/C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEhE;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,cAAc;IACxD,aAAa;QACX,wDAAwD;QACxD,IAAI,EACF,IAAI,GAAG,KAAK,EACZ,MAAM,GAAG,KAAK,EACd,UAAU,GAAG,OAAO,EACpB,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,OAAO,EACpB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAExB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;QAC9B,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,IAAI,EAAE;YACvC,IAAI;YACJ,MAAM;YACN,UAAU;YACV,QAAQ;YACR,SAAS;SACV,CAAC,CAAA;QAEF,QAAQ;QACR,yCAAyC;QACzC,WAAW;QACX,YAAY;QACZ,aAAa;QACb,IAAI;QACJ,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC;YACtB,KAAK;YACL,KAAK,EAAE,CAAC;YACR,MAAM;SACP,CAAC,CAAA;QAEF,OAAO,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;IAED,aAAa;QACX,IAAI,EACF,KAAK,EACL,MAAM,EACN,IAAI,GAAG,KAAK,EACZ,MAAM,GAAG,KAAK,EACd,UAAU,GAAG,OAAO,EACpB,QAAQ,GAAG,EAAE,EACb,SAAS,GAAG,OAAO,EACpB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAExB,wDAAwD;QACxD,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;QAE9B,OAAO,IAAI,KAAK,CAAC,iBAAiB,CAAC;YACjC,GAAG,EAAE,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;gBACpC,IAAI;gBACJ,MAAM;gBACN,UAAU;gBACV,QAAQ;gBACR,SAAS;aACV,CAAC;YACF,WAAW,EAAE,IAAI;YACjB,SAAS,EAAE,GAAG;YACd,IAAI,EAAE,KAAK,CAAC,UAAU;SACvB,CAAC,CAAA;IACJ,CAAC;IAED,aAAa;IACb,eAAe;QACb,2BAA2B;IAC7B,CAAC;IAED,IAAI,QAAQ;QACV,MAAM,EAAE,SAAS,GAAG,CAAC,EAAE,SAAS,GAAG,CAAC,EAAE,QAAQ,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAE3E,OAAO;YACL,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC;YAC1B,CAAC,EAAE,SAAS;YACZ,CAAC,EAAE,QAAQ;SACZ,CAAA;IACH,CAAC;IAED,WAAW;QACT,8CAA8C;QAC9C,KAAK,CAAC,WAAW,EAAE,CAClB;QAAC,IAAI,CAAC,QAAQ,CAAC,QAAgB,CAAC,WAAW,GAAG,IAAI,CAAA;IACrD,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport RealObjectMesh from './real-object-mesh'\n\nimport * as THREE from 'three'\n\nimport { textTexture, textBounds } from './texture/text-texture'\n\n/**\n * RealObjectText\n */\nexport default class RealObjectText extends RealObjectMesh {\n buildGeometry() {\n // TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.\n var {\n bold = false,\n italic = false,\n fontFamily = 'Serif',\n fontSize = 10,\n fontColor = 'black'\n } = this.component.state\n\n var text = this.component.text\n let { width, height } = textBounds(text, {\n bold,\n italic,\n fontFamily,\n fontSize,\n fontColor\n })\n\n // FIXME\n // ;(this.component as any).dimension = {\n // width,\n // height,\n // depth: 1\n // }\n this.component.setState({\n width,\n depth: 1,\n height\n })\n\n return new THREE.PlaneGeometry(width, height)\n }\n\n buildMaterial() {\n var {\n width,\n height,\n bold = false,\n italic = false,\n fontFamily = 'Serif',\n fontSize = 10,\n fontColor = 'black'\n } = this.component.state\n\n // TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.\n var text = this.component.text\n\n return new THREE.MeshBasicMaterial({\n map: textTexture(text, width, height, {\n bold,\n italic,\n fontFamily,\n fontSize,\n fontColor\n }),\n transparent: true,\n alphaTest: 0.2,\n side: THREE.DoubleSide\n })\n }\n\n /* overide */\n updateDimension() {\n // Intentionally do nothing\n }\n\n get rotation() {\n const { rotationX = 0, rotationY = 0, rotation = 0 } = this.component.state\n\n return {\n x: rotationX - Math.PI / 2,\n y: rotationY,\n z: rotation\n }\n }\n\n updateAlpha() {\n // material의 transparency는 항상 true으로 유지되어야 한다.\n super.updateAlpha()\n ;(this.object3d.material as any).transparent = true\n }\n}\n"]}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Component, Properties } from '@hatiolab/things-scene';
|
|
2
|
+
import * as THREE from 'three';
|
|
3
|
+
import { ThreeDimensionalContainer } from './three-dimensional-container';
|
|
4
|
+
export default abstract class RealObject<T extends THREE.Object3D = THREE.Object3D> {
|
|
5
|
+
protected _component: Component;
|
|
6
|
+
object3d: T;
|
|
7
|
+
constructor(component: Component);
|
|
8
|
+
update(): void;
|
|
9
|
+
protected getObject3dInstance(): T;
|
|
10
|
+
build(): void;
|
|
11
|
+
get component(): Component;
|
|
12
|
+
get threeContainer(): ThreeDimensionalContainer | undefined;
|
|
13
|
+
dispose(): void;
|
|
14
|
+
clear(): T;
|
|
15
|
+
/**
|
|
16
|
+
* Component의 상태값의 변화를 Object3D에 반영 - translate, rotation, scale
|
|
17
|
+
*/
|
|
18
|
+
updateTransform(): void;
|
|
19
|
+
get position(): {
|
|
20
|
+
x: number;
|
|
21
|
+
y: any;
|
|
22
|
+
z: number;
|
|
23
|
+
};
|
|
24
|
+
get rotation(): {
|
|
25
|
+
x: any;
|
|
26
|
+
y: any;
|
|
27
|
+
z: any;
|
|
28
|
+
};
|
|
29
|
+
get scale(): {
|
|
30
|
+
x: any;
|
|
31
|
+
y: any;
|
|
32
|
+
z: any;
|
|
33
|
+
};
|
|
34
|
+
get cx(): number;
|
|
35
|
+
get cy(): number;
|
|
36
|
+
get cz(): any;
|
|
37
|
+
/**
|
|
38
|
+
* Object3D 모델의 변화를 Component의 모델값에 반영
|
|
39
|
+
*/
|
|
40
|
+
updatePosition(): void;
|
|
41
|
+
updateRotate(): void;
|
|
42
|
+
updateScale(): void;
|
|
43
|
+
updateDimension(): void;
|
|
44
|
+
updateAlpha(): void;
|
|
45
|
+
updateHidden(): void;
|
|
46
|
+
onchange(after: Properties, before: Properties): void;
|
|
47
|
+
get rebuildingProperties(): string[];
|
|
48
|
+
}
|