@operato/scene-visualizer 10.0.0-beta.1 → 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.
- package/package.json +2 -2
- package/dist/banner.d.ts +0 -244
- package/dist/banner.js +0 -75
- package/dist/banner.js.map +0 -1
- package/dist/camera.d.ts +0 -249
- package/dist/camera.js +0 -107
- package/dist/camera.js.map +0 -1
- package/dist/cube.d.ts +0 -241
- package/dist/cube.js +0 -37
- package/dist/cube.js.map +0 -1
- package/dist/cylinder.d.ts +0 -9
- package/dist/cylinder.js +0 -37
- package/dist/cylinder.js.map +0 -1
- package/dist/ellipse.d.ts +0 -5
- package/dist/ellipse.js +0 -20
- package/dist/ellipse.js.map +0 -1
- package/dist/gltf-object.d.ts +0 -249
- package/dist/gltf-object.js +0 -103
- package/dist/gltf-object.js.map +0 -1
- package/dist/html-overlay-element.d.ts +0 -1
- package/dist/html-overlay-element.js +0 -8
- package/dist/html-overlay-element.js.map +0 -1
- package/dist/light.d.ts +0 -14
- package/dist/light.js +0 -134
- package/dist/light.js.map +0 -1
- package/dist/polygon.d.ts +0 -17
- package/dist/polygon.js +0 -62
- package/dist/polygon.js.map +0 -1
- package/dist/rect.d.ts +0 -5
- package/dist/rect.js +0 -34
- package/dist/rect.js.map +0 -1
- package/dist/scene/component.d.ts +0 -1
- package/dist/scene/component.js +0 -29
- package/dist/scene/component.js.map +0 -1
- package/dist/sphere.d.ts +0 -9
- package/dist/sphere.js +0 -37
- package/dist/sphere.js.map +0 -1
- package/dist/sprite.d.ts +0 -238
- package/dist/sprite.js +0 -27
- package/dist/sprite.js.map +0 -1
- package/dist/text.d.ts +0 -1
- package/dist/text.js +0 -7
- package/dist/text.js.map +0 -1
- package/dist/three-container-editor.d.ts +0 -22
- package/dist/three-container-editor.js +0 -132
- package/dist/three-container-editor.js.map +0 -1
- package/dist/three-container.d.ts +0 -61
- package/dist/three-container.js +0 -371
- package/dist/three-container.js.map +0 -1
- package/dist/three-controls.d.ts +0 -111
- package/dist/three-controls.js +0 -414
- package/dist/three-controls.js.map +0 -1
- package/dist/three-layout.d.ts +0 -8
- package/dist/three-layout.js +0 -20
- package/dist/three-layout.js.map +0 -1
- package/dist/three-space.d.ts +0 -8
- package/dist/three-space.js +0 -58
- package/dist/three-space.js.map +0 -1
- package/dist/threed/common.d.ts +0 -22
- package/dist/threed/common.js +0 -19
- package/dist/threed/common.js.map +0 -1
- package/dist/threed/floor/floor.d.ts +0 -3
- package/dist/threed/floor/floor.js +0 -51
- package/dist/threed/floor/floor.js.map +0 -1
- package/dist/threed/html/elements.d.ts +0 -2
- package/dist/threed/html/elements.js +0 -21
- package/dist/threed/html/elements.js.map +0 -1
- package/dist/threed/index.d.ts +0 -16
- package/dist/threed/index.js +0 -17
- package/dist/threed/index.js.map +0 -1
- package/dist/threed/interfaces.d.ts +0 -15
- package/dist/threed/interfaces.js +0 -5
- package/dist/threed/interfaces.js.map +0 -1
- package/dist/threed/managers/camera-manager.d.ts +0 -14
- package/dist/threed/managers/camera-manager.js +0 -60
- package/dist/threed/managers/camera-manager.js.map +0 -1
- package/dist/threed/managers/controls-manager.d.ts +0 -50
- package/dist/threed/managers/controls-manager.js +0 -249
- package/dist/threed/managers/controls-manager.js.map +0 -1
- package/dist/threed/managers/event-manager3d.d.ts +0 -19
- package/dist/threed/managers/event-manager3d.js +0 -76
- package/dist/threed/managers/event-manager3d.js.map +0 -1
- package/dist/threed/managers/index.d.ts +0 -7
- package/dist/threed/managers/index.js +0 -7
- package/dist/threed/managers/index.js.map +0 -1
- package/dist/threed/managers/light-manager.d.ts +0 -7
- package/dist/threed/managers/light-manager.js +0 -37
- package/dist/threed/managers/light-manager.js.map +0 -1
- package/dist/threed/managers/renderer-manager.d.ts +0 -30
- package/dist/threed/managers/renderer-manager.js +0 -120
- package/dist/threed/managers/renderer-manager.js.map +0 -1
- package/dist/threed/managers/scene-manager.d.ts +0 -15
- package/dist/threed/managers/scene-manager.js +0 -48
- package/dist/threed/managers/scene-manager.js.map +0 -1
- package/dist/threed/managers/types.d.ts +0 -36
- package/dist/threed/managers/types.js +0 -2
- package/dist/threed/managers/types.js.map +0 -1
- package/dist/threed/real-object-camera-meshed.d.ts +0 -12
- package/dist/threed/real-object-camera-meshed.js +0 -49
- package/dist/threed/real-object-camera-meshed.js.map +0 -1
- package/dist/threed/real-object-camera.d.ts +0 -9
- package/dist/threed/real-object-camera.js +0 -31
- package/dist/threed/real-object-camera.js.map +0 -1
- package/dist/threed/real-object-dom-element.d.ts +0 -9
- package/dist/threed/real-object-dom-element.js +0 -48
- package/dist/threed/real-object-dom-element.js.map +0 -1
- package/dist/threed/real-object-dummy.d.ts +0 -6
- package/dist/threed/real-object-dummy.js +0 -11
- package/dist/threed/real-object-dummy.js.map +0 -1
- package/dist/threed/real-object-extrude.d.ts +0 -22
- package/dist/threed/real-object-extrude.js +0 -180
- package/dist/threed/real-object-extrude.js.map +0 -1
- package/dist/threed/real-object-gltf.d.ts +0 -16
- package/dist/threed/real-object-gltf.js +0 -105
- package/dist/threed/real-object-gltf.js.map +0 -1
- package/dist/threed/real-object-group.d.ts +0 -5
- package/dist/threed/real-object-group.js +0 -11
- package/dist/threed/real-object-group.js.map +0 -1
- package/dist/threed/real-object-mesh.d.ts +0 -13
- package/dist/threed/real-object-mesh.js +0 -73
- package/dist/threed/real-object-mesh.js.map +0 -1
- package/dist/threed/real-object-plane.d.ts +0 -5
- package/dist/threed/real-object-plane.js +0 -22
- package/dist/threed/real-object-plane.js.map +0 -1
- package/dist/threed/real-object-registry.d.ts +0 -7
- package/dist/threed/real-object-registry.js +0 -32
- package/dist/threed/real-object-registry.js.map +0 -1
- package/dist/threed/real-object-scene.d.ts +0 -21
- package/dist/threed/real-object-scene.js +0 -72
- package/dist/threed/real-object-scene.js.map +0 -1
- package/dist/threed/real-object-sprite-2d.d.ts +0 -14
- package/dist/threed/real-object-sprite-2d.js +0 -45
- package/dist/threed/real-object-sprite-2d.js.map +0 -1
- package/dist/threed/real-object-sprite.d.ts +0 -11
- package/dist/threed/real-object-sprite.js +0 -52
- package/dist/threed/real-object-sprite.js.map +0 -1
- package/dist/threed/real-object-text.d.ts +0 -15
- package/dist/threed/real-object-text.js +0 -66
- package/dist/threed/real-object-text.js.map +0 -1
- package/dist/threed/real-object.d.ts +0 -65
- package/dist/threed/real-object.js +0 -251
- package/dist/threed/real-object.js.map +0 -1
- package/dist/threed/texture/canvas-texture.d.ts +0 -4
- package/dist/threed/texture/canvas-texture.js +0 -49
- package/dist/threed/texture/canvas-texture.js.map +0 -1
- package/dist/threed/texture/text-texture.d.ts +0 -8
- package/dist/threed/texture/text-texture.js +0 -79
- package/dist/threed/texture/text-texture.js.map +0 -1
- package/dist/threed/three-dimensional-container.d.ts +0 -7
- package/dist/threed/three-dimensional-container.js +0 -2
- package/dist/threed/three-dimensional-container.js.map +0 -1
- package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
- package/dist/threed/utils/bound-uv-generator.js +0 -42
- package/dist/threed/utils/bound-uv-generator.js.map +0 -1
- package/dist/threed/utils/dispose.d.ts +0 -2
- package/dist/threed/utils/dispose.js +0 -32
- package/dist/threed/utils/dispose.js.map +0 -1
- package/dist/wall.d.ts +0 -241
- package/dist/wall.js +0 -44
- package/dist/wall.js.map +0 -1
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import { RealObject } from './real-object.js';
|
|
5
|
-
export class RealObjectDummy extends RealObject {
|
|
6
|
-
build() {
|
|
7
|
-
super.build();
|
|
8
|
-
}
|
|
9
|
-
update() { }
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=real-object-dummy.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-dummy.js","sourceRoot":"","sources":["../../src/threed/real-object-dummy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,OAAO,eAAgB,SAAQ,UAA0B;IAC7D,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;IACD,MAAM,KAAI,CAAC;CACZ","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { RealObject } from './real-object.js'\n\nexport class RealObjectDummy extends RealObject<THREE.Object3D> {\n build() {\n super.build()\n }\n update() {}\n}\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { RealObject } from './real-object.js';
|
|
3
|
-
import { BoundUVGenerator } from './utils/bound-uv-generator.js';
|
|
4
|
-
export declare class RealObjectExtrude extends RealObject {
|
|
5
|
-
_boundUVGenerator?: BoundUVGenerator;
|
|
6
|
-
private _mainMesh?;
|
|
7
|
-
private _sideMesh?;
|
|
8
|
-
clear(): THREE.Object3D<THREE.Object3DEventMap>;
|
|
9
|
-
get shape(): any;
|
|
10
|
-
get sideShape(): null;
|
|
11
|
-
get boundUVGenerator(): BoundUVGenerator;
|
|
12
|
-
build(): void;
|
|
13
|
-
createGeometry(shape: THREE.Shape): THREE.BufferGeometry;
|
|
14
|
-
createMainMaterial(): THREE.MeshStandardMaterial;
|
|
15
|
-
createMainMesh(geometry: THREE.BufferGeometry, material: THREE.Material): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material, THREE.Object3DEventMap>;
|
|
16
|
-
createSideMesh(geometry: THREE.BufferGeometry, shape: THREE.Shape): THREE.Mesh<THREE.ExtrudeGeometry, THREE.MeshStandardMaterial, THREE.Object3DEventMap>;
|
|
17
|
-
createTexture(): THREE.CanvasTexture;
|
|
18
|
-
updateAlpha(): void;
|
|
19
|
-
updateStrokeStyle(): void;
|
|
20
|
-
updateFillStyle(): void;
|
|
21
|
-
updateDimension(): void;
|
|
22
|
-
}
|
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { RealObject } from './real-object.js';
|
|
6
|
-
import { BoundUVGenerator } from './utils/bound-uv-generator.js';
|
|
7
|
-
import { createCanvas } from './html/elements.js';
|
|
8
|
-
import { applyAlpha } from './common.js';
|
|
9
|
-
export class RealObjectExtrude extends RealObject {
|
|
10
|
-
clear() {
|
|
11
|
-
this._mainMesh = undefined;
|
|
12
|
-
this._sideMesh = undefined;
|
|
13
|
-
return super.clear();
|
|
14
|
-
}
|
|
15
|
-
get shape() {
|
|
16
|
-
return null;
|
|
17
|
-
}
|
|
18
|
-
get sideShape() {
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
get boundUVGenerator() {
|
|
22
|
-
if (!this._boundUVGenerator)
|
|
23
|
-
this._boundUVGenerator = new BoundUVGenerator();
|
|
24
|
-
return this._boundUVGenerator;
|
|
25
|
-
}
|
|
26
|
-
build() {
|
|
27
|
-
super.build();
|
|
28
|
-
var { depth = 1 } = this.component.state;
|
|
29
|
-
// 다각형 그리기
|
|
30
|
-
var shape = this.shape;
|
|
31
|
-
if (!shape) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
var boundUVGenerator = this.boundUVGenerator;
|
|
35
|
-
if (boundUVGenerator) {
|
|
36
|
-
boundUVGenerator.setShape({
|
|
37
|
-
extrudedShape: shape,
|
|
38
|
-
extrudedOptions: {
|
|
39
|
-
depth
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
var geometry = this.createGeometry(shape);
|
|
44
|
-
var material = this.createMainMaterial();
|
|
45
|
-
this._mainMesh = this.createMainMesh(geometry, material);
|
|
46
|
-
this._mainMesh.castShadow = true;
|
|
47
|
-
this.object3d.add(this._mainMesh);
|
|
48
|
-
this._sideMesh = this.createSideMesh(geometry, shape /* FIXME , extrudeSettings */);
|
|
49
|
-
this._sideMesh.castShadow = true;
|
|
50
|
-
this.object3d.add(this._sideMesh);
|
|
51
|
-
this.updateFillStyle();
|
|
52
|
-
this.updateStrokeStyle();
|
|
53
|
-
}
|
|
54
|
-
createGeometry(shape) {
|
|
55
|
-
const { depth = 1 } = this.component.state;
|
|
56
|
-
const extrudeSettings = {
|
|
57
|
-
steps: 1,
|
|
58
|
-
depth,
|
|
59
|
-
bevelEnabled: false,
|
|
60
|
-
UVGenerator: this.boundUVGenerator
|
|
61
|
-
};
|
|
62
|
-
var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);
|
|
63
|
-
geometry.center();
|
|
64
|
-
return geometry;
|
|
65
|
-
}
|
|
66
|
-
createMainMaterial() {
|
|
67
|
-
return new THREE.MeshStandardMaterial({
|
|
68
|
-
metalness: 0.5,
|
|
69
|
-
roughness: 0.5
|
|
70
|
-
});
|
|
71
|
-
}
|
|
72
|
-
createMainMesh(geometry, material) {
|
|
73
|
-
var mesh = new THREE.Mesh(geometry, material);
|
|
74
|
-
mesh.rotation.x = -Math.PI / 2;
|
|
75
|
-
mesh.rotation.y = -Math.PI;
|
|
76
|
-
mesh.rotation.z = -Math.PI;
|
|
77
|
-
return mesh;
|
|
78
|
-
}
|
|
79
|
-
createSideMesh(geometry, shape) {
|
|
80
|
-
var { depth = 1, lineWidth = 0 } = this.component.state;
|
|
81
|
-
var hole = new THREE.Path();
|
|
82
|
-
hole.setFromPoints(shape.getPoints());
|
|
83
|
-
var sideMaterial = new THREE.MeshStandardMaterial({
|
|
84
|
-
metalness: 0.5,
|
|
85
|
-
roughness: 0.5,
|
|
86
|
-
// prevent overlapped layers flickering
|
|
87
|
-
polygonOffset: true,
|
|
88
|
-
polygonOffsetFactor: -0.1
|
|
89
|
-
});
|
|
90
|
-
shape = this.sideShape || shape;
|
|
91
|
-
shape.holes.push(hole);
|
|
92
|
-
var sideExtrudeSettings = {
|
|
93
|
-
steps: 1,
|
|
94
|
-
depth: depth + 1,
|
|
95
|
-
bevelEnabled: true,
|
|
96
|
-
bevelThickness: 0,
|
|
97
|
-
bevelSize: lineWidth,
|
|
98
|
-
bevelSizeSegments: 5
|
|
99
|
-
};
|
|
100
|
-
var sideGeometry = new THREE.ExtrudeGeometry(shape, sideExtrudeSettings);
|
|
101
|
-
sideGeometry.center();
|
|
102
|
-
var sideMesh = new THREE.Mesh(sideGeometry, sideMaterial);
|
|
103
|
-
sideMesh.rotation.x = -Math.PI / 2;
|
|
104
|
-
sideMesh.rotation.y = -Math.PI;
|
|
105
|
-
sideMesh.rotation.z = -Math.PI;
|
|
106
|
-
return sideMesh;
|
|
107
|
-
}
|
|
108
|
-
createTexture() {
|
|
109
|
-
function nextPowerOf2(n) {
|
|
110
|
-
var count = 0;
|
|
111
|
-
if (n && !(n & (n - 1))) {
|
|
112
|
-
return n;
|
|
113
|
-
}
|
|
114
|
-
while (n != 0) {
|
|
115
|
-
n >>= 1;
|
|
116
|
-
count += 1;
|
|
117
|
-
}
|
|
118
|
-
return 1 << count;
|
|
119
|
-
}
|
|
120
|
-
var { width, height } = this.component.bounds;
|
|
121
|
-
var poweredWidth = nextPowerOf2(width);
|
|
122
|
-
var poweredHeight = nextPowerOf2(height);
|
|
123
|
-
let canvas = createCanvas(poweredWidth, poweredHeight);
|
|
124
|
-
this.component.render(canvas.getContext('2d'));
|
|
125
|
-
var texture = new THREE.CanvasTexture(canvas);
|
|
126
|
-
texture.needsUpdate = true;
|
|
127
|
-
texture.wrapS = THREE.RepeatWrapping;
|
|
128
|
-
texture.wrapT = THREE.RepeatWrapping;
|
|
129
|
-
texture.offset.set(0, 1 - height / poweredHeight);
|
|
130
|
-
texture.repeat.set(width / poweredWidth, height / poweredHeight);
|
|
131
|
-
texture.minFilter = THREE.LinearFilter;
|
|
132
|
-
return texture;
|
|
133
|
-
}
|
|
134
|
-
updateAlpha() {
|
|
135
|
-
var { alpha = 1, fillStyle, strokeStyle } = this.component.state;
|
|
136
|
-
this._mainMesh && applyAlpha(this._mainMesh.material, alpha, fillStyle);
|
|
137
|
-
this._sideMesh && applyAlpha(this._sideMesh.material, alpha, strokeStyle);
|
|
138
|
-
}
|
|
139
|
-
updateStrokeStyle() {
|
|
140
|
-
var _a;
|
|
141
|
-
const material = (_a = this._sideMesh) === null || _a === void 0 ? void 0 : _a.material;
|
|
142
|
-
if (!material) {
|
|
143
|
-
return;
|
|
144
|
-
}
|
|
145
|
-
var { strokeStyle } = this.component.state;
|
|
146
|
-
material.color.set(strokeStyle);
|
|
147
|
-
}
|
|
148
|
-
updateFillStyle() {
|
|
149
|
-
var _a;
|
|
150
|
-
var { fillStyle, alpha = 1 } = this.component.state;
|
|
151
|
-
var material = (_a = this._mainMesh) === null || _a === void 0 ? void 0 : _a.material;
|
|
152
|
-
if (!material) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
const texture = RealObject.buildFillStyleTexture(this.component);
|
|
156
|
-
if (texture) {
|
|
157
|
-
if (material.map)
|
|
158
|
-
material.map.dispose();
|
|
159
|
-
material.map = texture;
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
material.color.set(fillStyle);
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
updateDimension() {
|
|
166
|
-
var { width, height, depth } = this.dimension;
|
|
167
|
-
if (!this._mainMesh || !this._sideMesh)
|
|
168
|
-
return;
|
|
169
|
-
this._mainMesh.geometry.computeBoundingBox();
|
|
170
|
-
let bbox = this._mainMesh.geometry.boundingBox;
|
|
171
|
-
if (bbox) {
|
|
172
|
-
let originalWidth = bbox.max.x - bbox.min.x;
|
|
173
|
-
let originalHeight = bbox.max.y - bbox.min.y;
|
|
174
|
-
let originalDepth = bbox.max.z - bbox.min.z;
|
|
175
|
-
this._mainMesh.scale.set(width / originalWidth, height / originalHeight, depth / originalDepth);
|
|
176
|
-
this._sideMesh.scale.set(width / originalWidth, height / originalHeight, depth / originalDepth);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
//# sourceMappingURL=real-object-extrude.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-extrude.js","sourceRoot":"","sources":["../../src/threed/real-object-extrude.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\n\nimport { RealObject } from './real-object.js'\n\nimport { BoundUVGenerator } from './utils/bound-uv-generator.js'\nimport { createCanvas } from './html/elements.js'\nimport { applyAlpha } from './common.js'\n\nexport class RealObjectExtrude extends RealObject {\n _boundUVGenerator?: BoundUVGenerator\n private _mainMesh?: THREE.Mesh\n private _sideMesh?: THREE.Mesh\n\n clear() {\n this._mainMesh = undefined\n this._sideMesh = undefined\n return super.clear()\n }\n\n get shape(): any {\n return null\n }\n\n get sideShape() {\n return null\n }\n\n get boundUVGenerator() {\n if (!this._boundUVGenerator) this._boundUVGenerator = new BoundUVGenerator()\n\n return this._boundUVGenerator\n }\n\n build() {\n super.build()\n\n var { depth = 1 } = this.component.state\n\n // 다각형 그리기\n var shape = this.shape\n if (!shape) {\n return\n }\n\n var boundUVGenerator = this.boundUVGenerator\n\n if (boundUVGenerator) {\n boundUVGenerator.setShape({\n extrudedShape: shape,\n extrudedOptions: {\n depth\n }\n })\n }\n\n var geometry = this.createGeometry(shape)\n\n var material = this.createMainMaterial()\n this._mainMesh = this.createMainMesh(geometry, material as THREE.Material)\n this._mainMesh.castShadow = true\n\n this.object3d.add(this._mainMesh)\n\n this._sideMesh = this.createSideMesh(geometry, shape /* FIXME , extrudeSettings */)\n this._sideMesh.castShadow = true\n\n this.object3d.add(this._sideMesh)\n\n this.updateFillStyle()\n this.updateStrokeStyle()\n }\n\n createGeometry(shape: THREE.Shape): THREE.BufferGeometry {\n const { depth = 1 } = this.component.state\n\n const extrudeSettings = {\n steps: 1,\n depth,\n bevelEnabled: false,\n UVGenerator: this.boundUVGenerator\n } as THREE.ExtrudeGeometryOptions\n\n var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings)\n geometry.center()\n\n return geometry as any\n }\n\n createMainMaterial() {\n return new THREE.MeshStandardMaterial({\n metalness: 0.5,\n roughness: 0.5\n })\n }\n\n createMainMesh(geometry: THREE.BufferGeometry, material: THREE.Material) {\n var mesh = new THREE.Mesh(geometry, material)\n mesh.rotation.x = -Math.PI / 2\n mesh.rotation.y = -Math.PI\n mesh.rotation.z = -Math.PI\n\n return mesh\n }\n\n createSideMesh(geometry: THREE.BufferGeometry, shape: THREE.Shape) {\n var { depth = 1, lineWidth = 0 } = this.component.state\n\n var hole = new THREE.Path()\n hole.setFromPoints(shape.getPoints())\n\n var sideMaterial = new THREE.MeshStandardMaterial({\n metalness: 0.5,\n roughness: 0.5,\n // prevent overlapped layers flickering\n polygonOffset: true,\n polygonOffsetFactor: -0.1\n })\n\n shape = this.sideShape || shape\n shape.holes.push(hole)\n\n var sideExtrudeSettings = {\n steps: 1,\n depth: depth + 1,\n bevelEnabled: true,\n bevelThickness: 0,\n bevelSize: lineWidth,\n bevelSizeSegments: 5\n }\n\n var sideGeometry = new THREE.ExtrudeGeometry(shape, sideExtrudeSettings)\n sideGeometry.center()\n\n var sideMesh = new THREE.Mesh(sideGeometry, sideMaterial)\n sideMesh.rotation.x = -Math.PI / 2\n sideMesh.rotation.y = -Math.PI\n sideMesh.rotation.z = -Math.PI\n\n return sideMesh\n }\n\n createTexture() {\n function nextPowerOf2(n: number) {\n var count = 0\n\n if (n && !(n & (n - 1))) {\n return n\n }\n\n while (n != 0) {\n n >>= 1\n count += 1\n }\n\n return 1 << count\n }\n\n var { width, height } = this.component.bounds\n\n var poweredWidth = nextPowerOf2(width)\n var poweredHeight = nextPowerOf2(height)\n\n let canvas = createCanvas(poweredWidth, poweredHeight)\n this.component.render(canvas.getContext('2d')!)\n\n var texture = new THREE.CanvasTexture(canvas)\n\n texture.needsUpdate = true\n texture.wrapS = THREE.RepeatWrapping\n texture.wrapT = THREE.RepeatWrapping\n texture.offset.set(0, 1 - height / poweredHeight)\n texture.repeat.set(width / poweredWidth, height / poweredHeight)\n texture.minFilter = THREE.LinearFilter\n\n return texture\n }\n\n updateAlpha() {\n var { alpha = 1, fillStyle, strokeStyle } = this.component.state\n\n this._mainMesh && applyAlpha(this._mainMesh.material, alpha, fillStyle)\n this._sideMesh && applyAlpha(this._sideMesh.material, alpha, strokeStyle)\n }\n\n updateStrokeStyle() {\n const material = this._sideMesh?.material as THREE.MeshStandardMaterial\n if (!material) {\n return\n }\n\n var { strokeStyle } = this.component.state\n\n material.color.set(strokeStyle)\n }\n\n updateFillStyle() {\n var { fillStyle, alpha = 1 } = this.component.state\n\n var material = this._mainMesh?.material as THREE.MeshStandardMaterial\n if (!material) {\n return\n }\n\n const texture = RealObject.buildFillStyleTexture(this.component)\n\n if (texture) {\n if (material.map) material.map.dispose()\n material.map = texture\n } else {\n material.color.set(fillStyle)\n }\n }\n\n updateDimension() {\n var { width, height, depth } = this.dimension\n\n if (!this._mainMesh || !this._sideMesh) return\n\n this._mainMesh.geometry.computeBoundingBox()\n let bbox = this._mainMesh.geometry.boundingBox\n\n if (bbox) {\n let originalWidth = bbox.max.x - bbox.min.x\n let originalHeight = bbox.max.y - bbox.min.y\n let originalDepth = bbox.max.z - bbox.min.z\n\n this._mainMesh.scale.set(width / originalWidth, height / originalHeight, depth / originalDepth)\n this._sideMesh.scale.set(width / originalWidth, height / originalHeight, depth / originalDepth)\n }\n }\n}\n"]}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { RealObject } from './real-object.js';
|
|
3
|
-
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
4
|
-
import { Properties } from '@hatiolab/things-scene';
|
|
5
|
-
export declare class RealObjectGLTF extends RealObject {
|
|
6
|
-
private static _GLTFLoader;
|
|
7
|
-
private pivot?;
|
|
8
|
-
private objectSize?;
|
|
9
|
-
static get GLTFLoader(): GLTFLoader;
|
|
10
|
-
build(): void;
|
|
11
|
-
private gltfLoaded;
|
|
12
|
-
clear(): THREE.Object3D<THREE.Object3DEventMap>;
|
|
13
|
-
updateDimension(): void;
|
|
14
|
-
updateSource(): void;
|
|
15
|
-
onchange(after: Properties, before: Properties): void;
|
|
16
|
-
}
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { error } from '@hatiolab/things-scene';
|
|
6
|
-
import { RealObject } from './real-object.js';
|
|
7
|
-
import { disposeObject3D } from './utils/dispose.js';
|
|
8
|
-
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
9
|
-
import { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js';
|
|
10
|
-
import { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js';
|
|
11
|
-
// @ts-ignore
|
|
12
|
-
import { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module.js';
|
|
13
|
-
export class RealObjectGLTF extends RealObject {
|
|
14
|
-
constructor() {
|
|
15
|
-
super(...arguments);
|
|
16
|
-
this.objectSize = new THREE.Vector3();
|
|
17
|
-
}
|
|
18
|
-
static get GLTFLoader() {
|
|
19
|
-
return RealObjectGLTF._GLTFLoader;
|
|
20
|
-
}
|
|
21
|
-
build() {
|
|
22
|
-
super.build();
|
|
23
|
-
var { src: source } = this.component.state;
|
|
24
|
-
if (!source) {
|
|
25
|
-
this.clear();
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
let gltfLoader = new GLTFLoader();
|
|
29
|
-
// Optional: Provide a DRACOLoader instance to decode compressed mesh data
|
|
30
|
-
const dracoLoader = new DRACOLoader();
|
|
31
|
-
dracoLoader.setDecoderPath('/node_modules/three/examples/jsm/libs/draco/');
|
|
32
|
-
gltfLoader.setDRACOLoader(dracoLoader);
|
|
33
|
-
const ktx2Loader = new KTX2Loader();
|
|
34
|
-
ktx2Loader.setTranscoderPath(`/node_modules/three/examples/jsm/libs/basis/`);
|
|
35
|
-
ktx2Loader.detectSupport(this.threeContainer.renderer3d);
|
|
36
|
-
gltfLoader.setKTX2Loader(ktx2Loader);
|
|
37
|
-
gltfLoader.setMeshoptDecoder(MeshoptDecoder);
|
|
38
|
-
var fullsource = this.component.app.url(source);
|
|
39
|
-
gltfLoader.setCrossOrigin('use-credentials');
|
|
40
|
-
gltfLoader.load(fullsource, gltf => {
|
|
41
|
-
this.gltfLoaded(gltf);
|
|
42
|
-
}, xhr => {
|
|
43
|
-
console.log(Math.round((xhr.loaded / xhr.total) * 100) + '% loaded');
|
|
44
|
-
}, err => {
|
|
45
|
-
error('GLTFLoader.load', err);
|
|
46
|
-
this.clear();
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
gltfLoaded(gltf) {
|
|
50
|
-
let scene = gltf.scene;
|
|
51
|
-
var animations = gltf.animations;
|
|
52
|
-
var object = scene.clone();
|
|
53
|
-
object.userData.context = this;
|
|
54
|
-
object.traverse((child) => {
|
|
55
|
-
if (child.isMesh) {
|
|
56
|
-
child.castShadow = true;
|
|
57
|
-
}
|
|
58
|
-
});
|
|
59
|
-
var boundingBox = new THREE.Box3().setFromObject(object);
|
|
60
|
-
var center = boundingBox.getCenter(object.position);
|
|
61
|
-
this.objectSize = boundingBox.getSize(this.objectSize);
|
|
62
|
-
center.multiplyScalar(-1);
|
|
63
|
-
// 오브젝트 공백을 최소로 하기위해서 clear() 를 최대한 pending함.
|
|
64
|
-
this.clear();
|
|
65
|
-
this.pivot = new THREE.Object3D();
|
|
66
|
-
this.object3d.add(this.pivot);
|
|
67
|
-
this.pivot.add(object);
|
|
68
|
-
this.updateDimension();
|
|
69
|
-
if (animations && animations.length) {
|
|
70
|
-
for (var i = 0; i < animations.length; i++) {
|
|
71
|
-
var animation = animations[i];
|
|
72
|
-
var action = this.threeContainer.mixer.clipAction(animation);
|
|
73
|
-
action.play();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
console.log('no animations..');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
clear() {
|
|
81
|
-
if (this.pivot) {
|
|
82
|
-
disposeObject3D(this.pivot);
|
|
83
|
-
}
|
|
84
|
-
this.pivot = undefined;
|
|
85
|
-
this.objectSize = undefined;
|
|
86
|
-
return super.clear();
|
|
87
|
-
}
|
|
88
|
-
updateDimension() {
|
|
89
|
-
var { width = 1, height = 1, depth = 1 } = this.component.state;
|
|
90
|
-
var { x = 1, y = 1, z = 1 } = this.objectSize || {};
|
|
91
|
-
this.pivot && this.pivot.scale.set(width / x, depth / y, height / z);
|
|
92
|
-
this.component.invalidate();
|
|
93
|
-
}
|
|
94
|
-
updateSource() {
|
|
95
|
-
this.build();
|
|
96
|
-
}
|
|
97
|
-
onchange(after, before) {
|
|
98
|
-
super.onchange(after, before);
|
|
99
|
-
if ('src' in after) {
|
|
100
|
-
this.updateSource();
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
RealObjectGLTF._GLTFLoader = new GLTFLoader();
|
|
105
|
-
//# sourceMappingURL=real-object-gltf.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-gltf.js","sourceRoot":"","sources":["../../src/threed/real-object-gltf.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 '@hatiolab/things-scene'\n\nimport { RealObject } from './real-object.js'\nimport { disposeObject3D } from './utils/dispose.js'\n\nimport { GLTF, GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\nimport { DRACOLoader } from 'three/examples/jsm/loaders/DRACOLoader.js'\nimport { KTX2Loader } from 'three/examples/jsm/loaders/KTX2Loader.js'\n// @ts-ignore\nimport { MeshoptDecoder } from 'three/examples/jsm/libs/meshopt_decoder.module.js'\nimport { Properties } from '@hatiolab/things-scene'\n\nexport 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: source } = this.component.state\n\n if (!source) {\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 fullsource = this.component.app.url(source)\n gltfLoader.setCrossOrigin('use-credentials')\n\n gltfLoader.load(\n fullsource,\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 object.userData.context = this\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.updateDimension()\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 if (this.pivot) {\n disposeObject3D(this.pivot)\n }\n this.pivot = undefined\n this.objectSize = undefined\n\n return super.clear()\n }\n\n updateDimension() {\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 updateSource() {\n this.build()\n }\n\n onchange(after: Properties, before: Properties) {\n super.onchange(after, before)\n\n if ('src' in after) {\n this.updateSource()\n }\n }\n}\n"]}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { RealObject } from './real-object.js';
|
|
6
|
-
export class RealObjectGroup extends RealObject {
|
|
7
|
-
getObject3dInstance() {
|
|
8
|
-
return new THREE.Group();
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
//# sourceMappingURL=real-object-group.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,MAAM,OAAO,eAAgB,SAAQ,UAAuB;IAChD,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.js'\n\nexport 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.getRealObject()\n // if (item) {\n // this.object3d.add(item.object3d)\n // }\n // })\n // }\n}\n"]}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { RealObject } from './real-object.js';
|
|
3
|
-
export declare abstract class RealObjectMesh extends RealObject<THREE.Mesh> {
|
|
4
|
-
protected getObject3dInstance(): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[], THREE.Object3DEventMap>;
|
|
5
|
-
build(): void;
|
|
6
|
-
updateAlpha(): void;
|
|
7
|
-
updateHidden(): void;
|
|
8
|
-
updateFillStyle(): void;
|
|
9
|
-
updateDimension(): void;
|
|
10
|
-
protected abstract buildGeometry(): void;
|
|
11
|
-
buildMaterial(): void;
|
|
12
|
-
clear(): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes>, THREE.Material | THREE.Material[], THREE.Object3DEventMap>;
|
|
13
|
-
}
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
import * as THREE from 'three';
|
|
5
|
-
import { applyAlpha } from './common.js';
|
|
6
|
-
import { RealObject } from './real-object.js';
|
|
7
|
-
import { disposeObject3D } from './utils/dispose.js';
|
|
8
|
-
export class RealObjectMesh extends RealObject {
|
|
9
|
-
getObject3dInstance() {
|
|
10
|
-
return new THREE.Mesh();
|
|
11
|
-
}
|
|
12
|
-
build() {
|
|
13
|
-
super.build();
|
|
14
|
-
this.buildGeometry();
|
|
15
|
-
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
|
-
updateFillStyle() {
|
|
26
|
-
var { fillStyle } = this.component.state;
|
|
27
|
-
var material = this.object3d.material;
|
|
28
|
-
if (!material) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
const texture = RealObject.buildFillStyleTexture(this.component);
|
|
32
|
-
if (texture) {
|
|
33
|
-
if (material.map)
|
|
34
|
-
material.map.dispose();
|
|
35
|
-
texture.needsUpdate = true;
|
|
36
|
-
material.map = texture;
|
|
37
|
-
}
|
|
38
|
-
else if (typeof fillStyle == 'string') {
|
|
39
|
-
if (fillStyle !== 'transparent') {
|
|
40
|
-
material.color.set(fillStyle);
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
material.opacity = 0;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
updateDimension() {
|
|
48
|
-
var { width, height } = this.component.bounds;
|
|
49
|
-
var { depth = 1 } = this.component.state;
|
|
50
|
-
if (!this.object3d) {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
this.object3d.geometry.computeBoundingBox();
|
|
54
|
-
let bbox = this.object3d.geometry.boundingBox;
|
|
55
|
-
if (bbox) {
|
|
56
|
-
let originalWidth = bbox.max.x - bbox.min.x;
|
|
57
|
-
let originalDepth = bbox.max.y - bbox.min.y;
|
|
58
|
-
let originalHeight = bbox.max.z - bbox.min.z;
|
|
59
|
-
this.object3d.scale.set(width / originalWidth, depth / originalDepth, height / originalHeight);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
buildMaterial() {
|
|
63
|
-
this.object3d.material = new THREE.MeshStandardMaterial({
|
|
64
|
-
transparent: true,
|
|
65
|
-
side: THREE.DoubleSide
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
clear() {
|
|
69
|
-
disposeObject3D(this.object3d);
|
|
70
|
-
return super.clear();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=real-object-mesh.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-mesh.js","sourceRoot":"","sources":["../../src/threed/real-object-mesh.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\n\nimport { applyAlpha } from './common.js'\nimport { RealObject } from './real-object.js'\nimport { disposeObject3D } from './utils/dispose.js'\n\nexport 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.buildGeometry()\n 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 updateFillStyle() {\n var { fillStyle } = this.component.state\n var material = this.object3d.material as THREE.MeshStandardMaterial\n if (!material) {\n return\n }\n\n const texture = RealObject.buildFillStyleTexture(this.component)\n\n if (texture) {\n if (material.map) material.map.dispose()\n texture.needsUpdate = true\n material.map = texture\n } else if (typeof fillStyle == 'string') {\n if (fillStyle !== 'transparent') {\n material.color.set(fillStyle)\n } else {\n material.opacity = 0\n }\n }\n }\n\n updateDimension(): void {\n var { width, height } = this.component.bounds\n var { depth = 1 } = this.component.state\n\n if (!this.object3d) {\n return\n }\n\n this.object3d.geometry.computeBoundingBox()\n\n let bbox = this.object3d.geometry.boundingBox\n\n if (bbox) {\n let originalWidth = bbox.max.x - bbox.min.x\n let originalDepth = bbox.max.y - bbox.min.y\n let originalHeight = bbox.max.z - bbox.min.z\n\n this.object3d.scale.set(width / originalWidth, depth / originalDepth, height / originalHeight)\n }\n }\n\n protected abstract buildGeometry(): void\n\n buildMaterial(): void {\n this.object3d.material = new THREE.MeshStandardMaterial({\n transparent: true,\n side: THREE.DoubleSide\n })\n }\n\n clear() {\n disposeObject3D(this.object3d)\n\n return super.clear()\n }\n}\n"]}
|
|
@@ -1,22 +0,0 @@
|
|
|
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.js';
|
|
9
|
-
export class RealObjectPlane extends RealObjectMesh {
|
|
10
|
-
buildGeometry() {
|
|
11
|
-
var { width, height } = this.component.state.dimension;
|
|
12
|
-
this.object3d.geometry = new THREE.PlaneGeometry(width, height);
|
|
13
|
-
}
|
|
14
|
-
buildMaterial() {
|
|
15
|
-
this.object3d.material = new THREE.MeshStandardMaterial({
|
|
16
|
-
opacity: 0,
|
|
17
|
-
side: THREE.DoubleSide,
|
|
18
|
-
blending: THREE.NoBlending
|
|
19
|
-
});
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
//# sourceMappingURL=real-object-plane.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAEtD,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD,aAAa;QACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;QAEtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACjE,CAAC;IAED,aAAa;QACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;YACtD,OAAO,EAAE,CAAC;YACV,IAAI,EAAE,KAAK,CAAC,UAAU;YACtB,QAAQ,EAAE,KAAK,CAAC,UAAU;SAC3B,CAAC,CAAA;IACJ,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.js'\n\nexport class RealObjectPlane extends RealObjectMesh {\n buildGeometry() {\n var { width, height } = this.component.state.dimension\n\n this.object3d.geometry = new THREE.PlaneGeometry(width, height)\n }\n\n buildMaterial() /* : THREE.MeshMaterialType | THREE.MeshMaterialType[] */ {\n this.object3d.material = new THREE.MeshStandardMaterial({\n opacity: 0,\n side: THREE.DoubleSide,\n blending: THREE.NoBlending\n })\n }\n}\n"]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Component } from '@hatiolab/things-scene';
|
|
2
|
-
import type { RealObject } from './real-object.js';
|
|
3
|
-
type RealObjectFactory = (component: Component) => RealObject;
|
|
4
|
-
export declare function registerRealObjectFactory(type: string, factory: RealObjectFactory): void;
|
|
5
|
-
export declare function registerDefaultRealObjectFactory(factory: RealObjectFactory): void;
|
|
6
|
-
export declare function createRealObjectFor(component: Component): RealObject | undefined;
|
|
7
|
-
export {};
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
|
-
*/
|
|
4
|
-
const registry = new Map();
|
|
5
|
-
let defaultFactory;
|
|
6
|
-
export function registerRealObjectFactory(type, factory) {
|
|
7
|
-
registry.set(type, factory);
|
|
8
|
-
}
|
|
9
|
-
export function registerDefaultRealObjectFactory(factory) {
|
|
10
|
-
defaultFactory = factory;
|
|
11
|
-
}
|
|
12
|
-
export function createRealObjectFor(component) {
|
|
13
|
-
var _a;
|
|
14
|
-
// 1. 서브클래스 오버라이드 우선 (Cube, Sphere 등)
|
|
15
|
-
const own = component.buildRealObject();
|
|
16
|
-
if (own)
|
|
17
|
-
return own;
|
|
18
|
-
// 2. 타입별 레지스트리 조회
|
|
19
|
-
const type = (_a = component.model) === null || _a === void 0 ? void 0 : _a.type;
|
|
20
|
-
const factory = type ? registry.get(type) : undefined;
|
|
21
|
-
if (factory)
|
|
22
|
-
return factory(component);
|
|
23
|
-
// 3. HTML element → 등록된 'html-overlay-element' 팩토리로 fallback
|
|
24
|
-
if (component.isHTMLElement()) {
|
|
25
|
-
const htmlFactory = registry.get('html-overlay-element');
|
|
26
|
-
if (htmlFactory)
|
|
27
|
-
return htmlFactory(component);
|
|
28
|
-
}
|
|
29
|
-
// 4. 기본값
|
|
30
|
-
return defaultFactory === null || defaultFactory === void 0 ? void 0 : defaultFactory(component);
|
|
31
|
-
}
|
|
32
|
-
//# sourceMappingURL=real-object-registry.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-registry.js","sourceRoot":"","sources":["../../src/threed/real-object-registry.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;AACrD,IAAI,cAA6C,CAAA;AAEjD,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,OAA0B;IAChF,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;AAC7B,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,OAA0B;IACzE,cAAc,GAAG,OAAO,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,SAAoB;;IACtD,qCAAqC;IACrC,MAAM,GAAG,GAAG,SAAS,CAAC,eAAe,EAA4B,CAAA;IACjE,IAAI,GAAG;QAAE,OAAO,GAAG,CAAA;IAEnB,kBAAkB;IAClB,MAAM,IAAI,GAAG,MAAA,SAAS,CAAC,KAAK,0CAAE,IAAI,CAAA;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;IACrD,IAAI,OAAO;QAAE,OAAO,OAAO,CAAC,SAAS,CAAC,CAAA;IAEtC,6DAA6D;IAC7D,IAAI,SAAS,CAAC,aAAa,EAAE,EAAE,CAAC;QAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAA;QACxD,IAAI,WAAW;YAAE,OAAO,WAAW,CAAC,SAAS,CAAC,CAAA;IAChD,CAAC;IAED,SAAS;IACT,OAAO,cAAc,aAAd,cAAc,uBAAd,cAAc,CAAG,SAAS,CAAC,CAAA;AACpC,CAAC","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport type { Component } from '@hatiolab/things-scene'\nimport type { RealObject } from './real-object.js'\n\ntype RealObjectFactory = (component: Component) => RealObject\n\nconst registry = new Map<string, RealObjectFactory>()\nlet defaultFactory: RealObjectFactory | undefined\n\nexport function registerRealObjectFactory(type: string, factory: RealObjectFactory) {\n registry.set(type, factory)\n}\n\nexport function registerDefaultRealObjectFactory(factory: RealObjectFactory) {\n defaultFactory = factory\n}\n\nexport function createRealObjectFor(component: Component): RealObject | undefined {\n // 1. 서브클래스 오버라이드 우선 (Cube, Sphere 등)\n const own = component.buildRealObject() as RealObject | undefined\n if (own) return own\n\n // 2. 타입별 레지스트리 조회\n const type = component.model?.type\n const factory = type ? registry.get(type) : undefined\n if (factory) return factory(component)\n\n // 3. HTML element → 등록된 'html-overlay-element' 팩토리로 fallback\n if (component.isHTMLElement()) {\n const htmlFactory = registry.get('html-overlay-element')\n if (htmlFactory) return htmlFactory(component)\n }\n\n // 4. 기본값\n return defaultFactory?.(component)\n}\n"]}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
|
-
import { RealObject } from './real-object.js';
|
|
3
|
-
export declare 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 | undefined);
|
|
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
|
-
}
|