@operato/scene-visualizer 1.2.12 → 1.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/CHANGELOG.md +19 -0
- package/db.sqlite +0 -0
- package/dist/cube.d.ts +1 -3
- package/dist/cube.js +1 -5
- package/dist/cube.js.map +1 -1
- package/dist/cylinder.d.ts +1 -3
- package/dist/cylinder.js +1 -5
- package/dist/cylinder.js.map +1 -1
- package/dist/rack.js +3 -3
- package/dist/rack.js.map +1 -1
- package/dist/sphere.d.ts +1 -3
- package/dist/sphere.js +1 -8
- package/dist/sphere.js.map +1 -1
- package/dist/sprite.js +0 -6
- package/dist/sprite.js.map +1 -1
- package/dist/stock.d.ts +7 -2
- package/dist/stock.js +8 -4
- package/dist/stock.js.map +1 -1
- package/dist/threed/common.js +3 -2
- package/dist/threed/common.js.map +1 -1
- package/dist/threed/real-object-camera-meshed.d.ts +1 -1
- package/dist/threed/real-object-camera-meshed.js +1 -1
- package/dist/threed/real-object-camera-meshed.js.map +1 -1
- package/dist/threed/real-object-dom-element.d.ts +0 -3
- package/dist/threed/real-object-dom-element.js +0 -51
- package/dist/threed/real-object-dom-element.js.map +1 -1
- package/dist/threed/real-object-extrude.d.ts +2 -3
- package/dist/threed/real-object-extrude.js +27 -66
- package/dist/threed/real-object-extrude.js.map +1 -1
- package/dist/threed/real-object-gltf.d.ts +0 -2
- package/dist/threed/real-object-gltf.js +2 -8
- package/dist/threed/real-object-gltf.js.map +1 -1
- package/dist/threed/real-object-mesh.d.ts +3 -2
- package/dist/threed/real-object-mesh.js +22 -13
- package/dist/threed/real-object-mesh.js.map +1 -1
- package/dist/threed/real-object-plane.d.ts +2 -3
- package/dist/threed/real-object-plane.js +6 -7
- package/dist/threed/real-object-plane.js.map +1 -1
- package/dist/threed/real-object-sprite-2d.d.ts +2 -2
- package/dist/threed/real-object-sprite-2d.js +12 -9
- package/dist/threed/real-object-sprite-2d.js.map +1 -1
- package/dist/threed/real-object-sprite.d.ts +4 -1
- package/dist/threed/real-object-sprite.js +30 -1
- package/dist/threed/real-object-sprite.js.map +1 -1
- package/dist/threed/real-object-text.d.ts +3 -4
- package/dist/threed/real-object-text.js +41 -47
- package/dist/threed/real-object-text.js.map +1 -1
- package/dist/threed/real-object.d.ts +0 -1
- package/dist/threed/real-object.js +14 -18
- package/dist/threed/real-object.js.map +1 -1
- package/dist/threed/texture/canvas-texture.js +3 -1
- package/dist/threed/texture/canvas-texture.js.map +1 -1
- package/dist/wall.d.ts +2 -3
- package/dist/wall.js +4 -5
- package/dist/wall.js.map +1 -1
- package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +6 -21
- package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +10 -0
- package/logs/application-2023-03-05-12.log +6 -0
- package/logs/application-2023-03-05-23.log +12 -0
- package/logs/connections-2023-03-05-12.log +35 -0
- package/logs/connections-2023-03-05-23.log +70 -0
- package/package.json +2 -2
- package/src/cube.ts +1 -7
- package/src/cylinder.ts +1 -7
- package/src/rack.ts +3 -4
- package/src/sphere.ts +1 -10
- package/src/sprite.ts +0 -8
- package/src/stock.ts +9 -6
- package/src/threed/common.ts +3 -2
- package/src/threed/real-object-camera-meshed.ts +1 -1
- package/src/threed/real-object-dom-element.ts +0 -71
- package/src/threed/real-object-extrude.ts +31 -69
- package/src/threed/real-object-gltf.ts +2 -10
- package/src/threed/real-object-mesh.ts +21 -14
- package/src/threed/real-object-plane.ts +6 -9
- package/src/threed/real-object-sprite-2d.ts +15 -12
- package/src/threed/real-object-sprite.ts +36 -2
- package/src/threed/real-object-text.ts +49 -60
- package/src/threed/real-object.ts +15 -22
- package/src/threed/texture/canvas-texture.ts +3 -1
- package/src/wall.ts +5 -6
- package/tsconfig.tsbuildinfo +1 -1
- package/logs/application-2023-03-01-03.log +0 -6
- package/logs/application-2023-03-01-13.log +0 -6
- package/logs/application-2023-03-01-15.log +0 -6
- package/logs/application-2023-03-03-00.log +0 -25
- package/logs/application-2023-03-03-01.log +0 -6
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
import * as THREE from 'three';
|
|
5
|
-
import tinycolor from 'tinycolor2';
|
|
6
5
|
import { RealObject } from './real-object';
|
|
7
6
|
import { BoundUVGenerator } from './utils/bound-uv-generator';
|
|
8
7
|
import { createCanvas } from './html/elements';
|
|
@@ -21,7 +20,7 @@ export class RealObjectExtrude extends RealObject {
|
|
|
21
20
|
}
|
|
22
21
|
build() {
|
|
23
22
|
super.build();
|
|
24
|
-
var { depth = 1
|
|
23
|
+
var { depth = 1 } = this.component.state;
|
|
25
24
|
// 다각형 그리기
|
|
26
25
|
var shape = this.shape;
|
|
27
26
|
if (!shape) {
|
|
@@ -37,17 +36,15 @@ export class RealObjectExtrude extends RealObject {
|
|
|
37
36
|
});
|
|
38
37
|
}
|
|
39
38
|
var geometry = this.createGeometry(shape);
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
this.object3d.add(this._sideMesh);
|
|
50
|
-
}
|
|
39
|
+
var material = this.createMainMaterial();
|
|
40
|
+
this._mainMesh = this.createMainMesh(geometry, material);
|
|
41
|
+
this._mainMesh.castShadow = true;
|
|
42
|
+
this.object3d.add(this._mainMesh);
|
|
43
|
+
this._sideMesh = this.createSideMesh(geometry, shape /* FIXME , extrudeSettings */);
|
|
44
|
+
this._sideMesh.castShadow = true;
|
|
45
|
+
this.object3d.add(this._sideMesh);
|
|
46
|
+
this.updateFillStyle();
|
|
47
|
+
this.updateStrokeStyle();
|
|
51
48
|
}
|
|
52
49
|
createGeometry(shape) {
|
|
53
50
|
const { depth = 1 } = this.component.state;
|
|
@@ -61,35 +58,13 @@ export class RealObjectExtrude extends RealObject {
|
|
|
61
58
|
geometry.center();
|
|
62
59
|
return geometry;
|
|
63
60
|
}
|
|
64
|
-
|
|
65
|
-
var { fillStyle = 'black', alpha = 1 } = this.component.state;
|
|
66
|
-
var params = {};
|
|
67
|
-
var opacity = alpha;
|
|
68
|
-
const texture = RealObject.buildFillStyleTexture(this.component);
|
|
69
|
-
if (texture) {
|
|
70
|
-
params = {
|
|
71
|
-
map: texture,
|
|
72
|
-
side: THREE.FrontSide
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
else if (typeof fillStyle == 'string') {
|
|
76
|
-
if (fillStyle !== 'transparent') {
|
|
77
|
-
params.color = fillStyle;
|
|
78
|
-
opacity *= tinycolor(fillStyle).getAlpha();
|
|
79
|
-
}
|
|
80
|
-
else {
|
|
81
|
-
opacity = 0;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
61
|
+
createMainMaterial() {
|
|
84
62
|
return new THREE.MeshStandardMaterial({
|
|
85
|
-
...params,
|
|
86
|
-
opacity,
|
|
87
|
-
transparent: opacity < 1,
|
|
88
63
|
metalness: 0.5,
|
|
89
64
|
roughness: 0.5
|
|
90
65
|
});
|
|
91
66
|
}
|
|
92
|
-
|
|
67
|
+
createMainMesh(geometry, material) {
|
|
93
68
|
var mesh = new THREE.Mesh(geometry, material);
|
|
94
69
|
mesh.rotation.x = -Math.PI / 2;
|
|
95
70
|
mesh.rotation.y = -Math.PI;
|
|
@@ -97,21 +72,16 @@ export class RealObjectExtrude extends RealObject {
|
|
|
97
72
|
return mesh;
|
|
98
73
|
}
|
|
99
74
|
createSideMesh(geometry, shape) {
|
|
100
|
-
var {
|
|
75
|
+
var { depth = 1, lineWidth = 0 } = this.component.state;
|
|
101
76
|
var hole = new THREE.Path();
|
|
102
77
|
hole.setFromPoints(shape.getPoints());
|
|
103
78
|
var sideMaterial = new THREE.MeshStandardMaterial({
|
|
104
|
-
color: strokeStyle,
|
|
105
79
|
metalness: 0.5,
|
|
106
|
-
roughness: 0.5
|
|
80
|
+
roughness: 0.5,
|
|
81
|
+
// prevent overlapped layers flickering
|
|
82
|
+
polygonOffset: true,
|
|
83
|
+
polygonOffsetFactor: -0.1
|
|
107
84
|
});
|
|
108
|
-
var tinyStrokeStyle = tinycolor(strokeStyle);
|
|
109
|
-
var strokeAlpha = tinyStrokeStyle.getAlpha();
|
|
110
|
-
sideMaterial.opacity = alpha * strokeAlpha;
|
|
111
|
-
sideMaterial.transparent = alpha < 1 || strokeAlpha < 1;
|
|
112
|
-
// prevent overlapped layers flickering
|
|
113
|
-
sideMaterial.polygonOffset = true;
|
|
114
|
-
sideMaterial.polygonOffsetFactor = -0.1;
|
|
115
85
|
shape = this.sideShape || shape;
|
|
116
86
|
shape.holes.push(hole);
|
|
117
87
|
var sideExtrudeSettings = {
|
|
@@ -143,7 +113,6 @@ export class RealObjectExtrude extends RealObject {
|
|
|
143
113
|
return 1 << count;
|
|
144
114
|
}
|
|
145
115
|
var { width, height } = this.component.bounds;
|
|
146
|
-
// TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.
|
|
147
116
|
var poweredWidth = nextPowerOf2(width);
|
|
148
117
|
var poweredHeight = nextPowerOf2(height);
|
|
149
118
|
let canvas = createCanvas(poweredWidth, poweredHeight);
|
|
@@ -158,21 +127,22 @@ export class RealObjectExtrude extends RealObject {
|
|
|
158
127
|
return texture;
|
|
159
128
|
}
|
|
160
129
|
updateAlpha() {
|
|
161
|
-
var { alpha = 1, fillStyle,
|
|
130
|
+
var { alpha = 1, fillStyle, strokeStyle } = this.component.state;
|
|
162
131
|
this._mainMesh && applyAlpha(this._mainMesh.material, alpha, fillStyle);
|
|
163
|
-
this._sideMesh && applyAlpha(this._sideMesh.material, alpha,
|
|
132
|
+
this._sideMesh && applyAlpha(this._sideMesh.material, alpha, strokeStyle);
|
|
164
133
|
}
|
|
165
134
|
updateStrokeStyle() {
|
|
166
135
|
var _a;
|
|
167
|
-
|
|
168
|
-
if (
|
|
169
|
-
;
|
|
170
|
-
((_a = this._sideMesh) === null || _a === void 0 ? void 0 : _a.material).color.set(strokeStyle);
|
|
136
|
+
const material = (_a = this._sideMesh) === null || _a === void 0 ? void 0 : _a.material;
|
|
137
|
+
if (!material) {
|
|
138
|
+
return;
|
|
171
139
|
}
|
|
140
|
+
var { strokeStyle } = this.component.state;
|
|
141
|
+
material.color.set(strokeStyle);
|
|
172
142
|
}
|
|
173
143
|
updateFillStyle() {
|
|
174
144
|
var _a;
|
|
175
|
-
var { fillStyle } = this.component.state;
|
|
145
|
+
var { fillStyle, alpha = 1 } = this.component.state;
|
|
176
146
|
var material = (_a = this._mainMesh) === null || _a === void 0 ? void 0 : _a.material;
|
|
177
147
|
if (!material) {
|
|
178
148
|
return;
|
|
@@ -181,18 +151,9 @@ export class RealObjectExtrude extends RealObject {
|
|
|
181
151
|
if (texture) {
|
|
182
152
|
material.map = texture;
|
|
183
153
|
}
|
|
184
|
-
else
|
|
185
|
-
|
|
186
|
-
material.color.set(fillStyle);
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
// material.color.set(fillStyle)
|
|
190
|
-
material.opacity = 0;
|
|
191
|
-
}
|
|
154
|
+
else {
|
|
155
|
+
material.color.set(fillStyle);
|
|
192
156
|
}
|
|
193
157
|
}
|
|
194
|
-
get rebuildingProperties() {
|
|
195
|
-
return ['width', 'height', 'depth', 'text', 'path'];
|
|
196
|
-
}
|
|
197
158
|
}
|
|
198
159
|
//# sourceMappingURL=real-object-extrude.js.map
|
|
@@ -1 +1 @@
|
|
|
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'\nimport tinycolor from 'tinycolor2'\n\nimport { RealObject } from './real-object'\n\nimport { BoundUVGenerator } from './utils/bound-uv-generator'\nimport { createCanvas } from './html/elements'\nimport { applyAlpha } from './common'\n\nexport class RealObjectExtrude extends RealObject {\n _boundUVGenerator?: BoundUVGenerator\n private _mainMesh?: THREE.Mesh\n private _sideMesh?: THREE.Mesh\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, fillStyle = 0xffffff, strokeStyle = 0x636363, lineWidth = 1, alpha = 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 if (fillStyle && fillStyle != 'none') {\n var material = this.createMaterial()\n this._mainMesh = this.createMesh(geometry, material as THREE.Material)\n this._mainMesh.castShadow = true\n\n this.object3d.add(this._mainMesh)\n }\n\n if (strokeStyle && strokeStyle != 'transparent' && lineWidth > 0) {\n this._sideMesh = this.createSideMesh(geometry, shape /* FIXME , extrudeSettings */)\n this._sideMesh.castShadow = true\n\n this.object3d.add(this._sideMesh)\n }\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 createMaterial() {\n var { fillStyle = 'black', alpha = 1 } = this.component.state\n\n var params = {} as any\n var opacity = alpha\n const texture = RealObject.buildFillStyleTexture(this.component)\n\n if (texture) {\n params = {\n map: texture,\n side: THREE.FrontSide\n }\n } else if (typeof fillStyle == 'string') {\n if (fillStyle !== 'transparent') {\n params.color = fillStyle\n opacity *= tinycolor(fillStyle).getAlpha()\n } else {\n opacity = 0\n }\n }\n\n return new THREE.MeshStandardMaterial({\n ...params,\n opacity,\n transparent: opacity < 1,\n metalness: 0.5,\n roughness: 0.5\n })\n }\n\n createMesh(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 { strokeStyle = 0x000000, depth = 1, lineWidth = 0, alpha = 1 } = this.component.state\n\n var hole = new THREE.Path()\n hole.setFromPoints(shape.getPoints())\n\n var sideMaterial = new THREE.MeshStandardMaterial({\n color: strokeStyle,\n metalness: 0.5,\n roughness: 0.5\n })\n\n var tinyStrokeStyle = tinycolor(strokeStyle)\n var strokeAlpha = tinyStrokeStyle.getAlpha()\n sideMaterial.opacity = alpha * strokeAlpha\n sideMaterial.transparent = alpha < 1 || strokeAlpha < 1\n\n // prevent overlapped layers flickering\n sideMaterial.polygonOffset = true\n sideMaterial.polygonOffsetFactor = -0.1\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 // TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.\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, lineStyle } = this.component.state\n\n this._mainMesh && applyAlpha(this._mainMesh.material, alpha, fillStyle)\n this._sideMesh && applyAlpha(this._sideMesh.material, alpha, lineStyle && lineStyle.strokeStyle)\n }\n\n updateStrokeStyle() {\n var { strokeStyle } = this.component.state\n\n if (typeof strokeStyle == 'string') {\n ;(this._sideMesh?.material as THREE.MeshStandardMaterial).color.set(strokeStyle)\n }\n }\n\n updateFillStyle() {\n var { fillStyle } = this.component.state\n var material = this._mainMesh?.material as THREE.MeshLambertMaterial\n if (!material) {\n return\n }\n\n const texture = RealObject.buildFillStyleTexture(this.component)\n\n if (texture) {\n material.map = texture\n } else if (typeof fillStyle == 'string') {\n if (fillStyle !== 'transparent') {\n material.color.set(fillStyle)\n } else {\n // material.color.set(fillStyle)\n material.opacity = 0\n }\n }\n }\n\n get rebuildingProperties(): string[] {\n return ['width', 'height', 'depth', 'text', 'path']\n }\n}\n"]}
|
|
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'\n\nimport { BoundUVGenerator } from './utils/bound-uv-generator'\nimport { createCanvas } from './html/elements'\nimport { applyAlpha } from './common'\n\nexport class RealObjectExtrude extends RealObject {\n _boundUVGenerator?: BoundUVGenerator\n private _mainMesh?: THREE.Mesh\n private _sideMesh?: THREE.Mesh\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 material.map = texture\n } else {\n material.color.set(fillStyle)\n }\n }\n}\n"]}
|
|
@@ -64,7 +64,7 @@ export class RealObjectGLTF extends RealObject {
|
|
|
64
64
|
this.pivot = new THREE.Object3D();
|
|
65
65
|
this.object3d.add(this.pivot);
|
|
66
66
|
this.pivot.add(object);
|
|
67
|
-
this.
|
|
67
|
+
this.updateDimension();
|
|
68
68
|
if (animations && animations.length) {
|
|
69
69
|
for (var i = 0; i < animations.length; i++) {
|
|
70
70
|
var animation = animations[i];
|
|
@@ -81,18 +81,12 @@ export class RealObjectGLTF extends RealObject {
|
|
|
81
81
|
// 반복적으로 로딩하면 WebGL 리소스 부족으로 오류 발생.
|
|
82
82
|
return super.clear();
|
|
83
83
|
}
|
|
84
|
-
|
|
84
|
+
updateDimension() {
|
|
85
85
|
var { width = 1, height = 1, depth = 1 } = this.component.state;
|
|
86
86
|
var { x = 1, y = 1, z = 1 } = this.objectSize || {};
|
|
87
87
|
this.pivot && this.pivot.scale.set(width / x, depth / y, height / z);
|
|
88
88
|
this.component.invalidate();
|
|
89
89
|
}
|
|
90
|
-
updateDimension() {
|
|
91
|
-
this._rescale();
|
|
92
|
-
}
|
|
93
|
-
get rebuildingProperties() {
|
|
94
|
-
return ['fillStyle', 'lineStyle', 'text'];
|
|
95
|
-
}
|
|
96
90
|
}
|
|
97
91
|
RealObjectGLTF._GLTFLoader = new GLTFLoader();
|
|
98
92
|
//# sourceMappingURL=real-object-gltf.js.map
|
|
@@ -1 +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;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAE9C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,OAAO,EAAQ,UAAU,EAAE,MAAM,0CAA0C,CAAA;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAA;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAClE,aAAa;AACb,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAA;AAElF,MAAM,OAAO,cAAe,SAAQ,UAAU;IAA9C;;QAIU,eAAU,GAAmB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;
|
|
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'\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'\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 } = 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 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 // TODO gltf object 리소스 해제가 필요하면, 여기에 추가.\n // 반복적으로 로딩하면 WebGL 리소스 부족으로 오류 발생.\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"]}
|
|
@@ -5,7 +5,8 @@ export declare abstract class RealObjectMesh extends RealObject<THREE.Mesh> {
|
|
|
5
5
|
build(): void;
|
|
6
6
|
updateAlpha(): void;
|
|
7
7
|
updateHidden(): void;
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
updateFillStyle(): void;
|
|
9
|
+
protected abstract buildGeometry(): void;
|
|
10
|
+
buildMaterial(): void;
|
|
10
11
|
clear(): THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>;
|
|
11
12
|
}
|
|
@@ -10,8 +10,8 @@ export class RealObjectMesh extends RealObject {
|
|
|
10
10
|
}
|
|
11
11
|
build() {
|
|
12
12
|
super.build();
|
|
13
|
-
this.
|
|
14
|
-
this.
|
|
13
|
+
this.buildGeometry();
|
|
14
|
+
this.buildMaterial();
|
|
15
15
|
}
|
|
16
16
|
/* overide */
|
|
17
17
|
updateAlpha() {
|
|
@@ -21,22 +21,31 @@ export class RealObjectMesh extends RealObject {
|
|
|
21
21
|
updateHidden() {
|
|
22
22
|
this.object3d.visible = !this.component.state.hidden;
|
|
23
23
|
}
|
|
24
|
-
|
|
24
|
+
updateFillStyle() {
|
|
25
25
|
var { fillStyle } = this.component.state;
|
|
26
|
-
var
|
|
26
|
+
var material = this.object3d.material;
|
|
27
|
+
if (!material) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
27
30
|
const texture = RealObject.buildFillStyleTexture(this.component);
|
|
28
31
|
if (texture) {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
};
|
|
32
|
+
texture.needsUpdate = true;
|
|
33
|
+
material.map = texture;
|
|
32
34
|
}
|
|
33
|
-
else {
|
|
34
|
-
|
|
35
|
-
color
|
|
36
|
-
}
|
|
35
|
+
else if (typeof fillStyle == 'string') {
|
|
36
|
+
if (fillStyle !== 'transparent') {
|
|
37
|
+
material.color.set(fillStyle);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
material.opacity = 0;
|
|
41
|
+
}
|
|
37
42
|
}
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
}
|
|
44
|
+
buildMaterial() {
|
|
45
|
+
this.object3d.material = new THREE.MeshStandardMaterial({
|
|
46
|
+
transparent: true,
|
|
47
|
+
side: THREE.DoubleSide
|
|
48
|
+
});
|
|
40
49
|
}
|
|
41
50
|
clear() {
|
|
42
51
|
this.object3d.traverse((mesh) => {
|
|
@@ -1 +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;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,OAAgB,cAAe,SAAQ,UAAsB;IACvD,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,
|
|
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;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,OAAgB,cAAe,SAAQ,UAAsB;IACvD,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,aAAa,EAAE,CAAA;QACpB,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,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;IAED,eAAe;QACb,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAsC,CAAA;QACnE,IAAI,CAAC,QAAQ,EAAE;YACb,OAAM;SACP;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAEhE,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;YAC1B,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAA;SACvB;aAAM,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;YACvC,IAAI,SAAS,KAAK,aAAa,EAAE;gBAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;aAC9B;iBAAM;gBACL,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAA;aACrB;SACF;IACH,CAAC;IAID,aAAa;QACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,oBAAoB,CAAC;YACtD,WAAW,EAAE,IAAI;YACjB,IAAI,EAAE,KAAK,CAAC,UAAU;SACvB,CAAC,CAAA;IACJ,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'\n\nimport { applyAlpha } from './common'\nimport { RealObject } from './real-object'\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 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 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 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"]}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
1
|
import { RealObjectMesh } from './real-object-mesh';
|
|
3
2
|
export declare class RealObjectPlane extends RealObjectMesh {
|
|
4
|
-
buildGeometry():
|
|
5
|
-
buildMaterial():
|
|
3
|
+
buildGeometry(): void;
|
|
4
|
+
buildMaterial(): void;
|
|
6
5
|
}
|
|
@@ -9,15 +9,14 @@ import { RealObjectMesh } from './real-object-mesh';
|
|
|
9
9
|
export class RealObjectPlane extends RealObjectMesh {
|
|
10
10
|
buildGeometry() {
|
|
11
11
|
var { width, height } = this.component.state.dimension;
|
|
12
|
-
|
|
12
|
+
this.object3d.geometry = new THREE.PlaneGeometry(width, height);
|
|
13
13
|
}
|
|
14
14
|
buildMaterial() {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
return material;
|
|
15
|
+
this.object3d.material = new THREE.MeshStandardMaterial({
|
|
16
|
+
opacity: 0,
|
|
17
|
+
side: THREE.DoubleSide,
|
|
18
|
+
blending: THREE.NoBlending
|
|
19
|
+
});
|
|
21
20
|
}
|
|
22
21
|
}
|
|
23
22
|
//# sourceMappingURL=real-object-plane.js.map
|
|
@@ -1 +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,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD,aAAa;QACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAA;QAEtD,
|
|
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,oBAAoB,CAAA;AAEnD,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'\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,10 +1,10 @@
|
|
|
1
|
-
import * as THREE from 'three';
|
|
2
1
|
import { RealObjectSprite } from './real-object-sprite';
|
|
3
2
|
export declare class RealObjectSprite2D extends RealObjectSprite {
|
|
4
|
-
buildMaterial():
|
|
3
|
+
buildMaterial(): void;
|
|
5
4
|
get scale(): {
|
|
6
5
|
x: number;
|
|
7
6
|
y: number;
|
|
8
7
|
z: any;
|
|
9
8
|
};
|
|
9
|
+
updateFillStyle(): void;
|
|
10
10
|
}
|
|
@@ -5,15 +5,7 @@ import * as THREE from 'three';
|
|
|
5
5
|
import { RealObjectSprite } from './real-object-sprite';
|
|
6
6
|
import { createCanvasTexture } from './texture/canvas-texture';
|
|
7
7
|
export class RealObjectSprite2D extends RealObjectSprite {
|
|
8
|
-
buildMaterial() {
|
|
9
|
-
var { fillStyle } = this.component.state;
|
|
10
|
-
var material = new THREE.SpriteMaterial({
|
|
11
|
-
map: createCanvasTexture(this.component),
|
|
12
|
-
alphaTest: 0.1
|
|
13
|
-
});
|
|
14
|
-
material.sizeAttenuation = false;
|
|
15
|
-
return material;
|
|
16
|
-
}
|
|
8
|
+
buildMaterial() { }
|
|
17
9
|
get scale() {
|
|
18
10
|
const { width, height } = this.component.bounds;
|
|
19
11
|
const { width: parentWidth, height: parentHeight } = this.threeContainer.bounds;
|
|
@@ -24,5 +16,16 @@ export class RealObjectSprite2D extends RealObjectSprite {
|
|
|
24
16
|
z: scale
|
|
25
17
|
};
|
|
26
18
|
}
|
|
19
|
+
updateFillStyle() {
|
|
20
|
+
var material = this.object3d.material;
|
|
21
|
+
if (material) {
|
|
22
|
+
material.dispose();
|
|
23
|
+
}
|
|
24
|
+
this.object3d.material = new THREE.SpriteMaterial({
|
|
25
|
+
map: createCanvasTexture(this.component),
|
|
26
|
+
alphaTest: 0.1
|
|
27
|
+
});
|
|
28
|
+
this.object3d.material.sizeAttenuation = false;
|
|
29
|
+
}
|
|
27
30
|
}
|
|
28
31
|
//# sourceMappingURL=real-object-sprite-2d.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"real-object-sprite-2d.js","sourceRoot":"","sources":["../../src/threed/real-object-sprite-2d.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,aAAa
|
|
1
|
+
{"version":3,"file":"real-object-sprite-2d.js","sourceRoot":"","sources":["../../src/threed/real-object-sprite-2d.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAE9D,MAAM,OAAO,kBAAmB,SAAQ,gBAAgB;IACtD,aAAa,KAAI,CAAC;IAElB,IAAI,KAAK;QACP,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAA;QAC/C,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,cAAe,CAAC,MAAM,CAAA;QAChF,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAE1C,OAAO;YACL,CAAC,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,GAAG,WAAW;YAChC,CAAC,EAAE,CAAC,KAAK,GAAG,MAAM,CAAC,GAAG,YAAY;YAClC,CAAC,EAAE,KAAK;SACT,CAAA;IACH,CAAC;IAED,eAAe;QACb,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAgC,CAAA;QAC7D,IAAI,QAAQ,EAAE;YACZ,QAAQ,CAAC,OAAO,EAAE,CAAA;SACnB;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,cAAc,CAAC;YAChD,GAAG,EAAE,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC;YACxC,SAAS,EAAE,GAAG;SACf,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAA;IAChD,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { RealObjectSprite } from './real-object-sprite'\nimport { createCanvasTexture } from './texture/canvas-texture'\n\nexport class RealObjectSprite2D extends RealObjectSprite {\n buildMaterial() {}\n\n get scale() {\n const { width, height } = this.component.bounds\n const { width: parentWidth, height: parentHeight } = this.threeContainer!.bounds\n const { scale = 1 } = this.component.state\n\n return {\n x: (scale * width) / parentWidth,\n y: (scale * height) / parentHeight,\n z: scale\n }\n }\n\n updateFillStyle() {\n var material = this.object3d.material as THREE.SpriteMaterial\n if (material) {\n material.dispose()\n }\n\n this.object3d.material = new THREE.SpriteMaterial({\n map: createCanvasTexture(this.component),\n alphaTest: 0.1\n })\n\n this.object3d.material.sizeAttenuation = false\n }\n}\n"]}
|
|
@@ -3,5 +3,8 @@ import { RealObject } from './real-object';
|
|
|
3
3
|
export declare abstract class RealObjectSprite extends RealObject<THREE.Sprite> {
|
|
4
4
|
protected getObject3dInstance(): THREE.Sprite;
|
|
5
5
|
build(): void;
|
|
6
|
-
abstract buildMaterial():
|
|
6
|
+
abstract buildMaterial(): void;
|
|
7
|
+
updateAlpha(): void;
|
|
8
|
+
updateHidden(): void;
|
|
9
|
+
updateFillStyle(): void;
|
|
7
10
|
}
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* Copyright © HatioLab Inc. All rights reserved.
|
|
3
3
|
*/
|
|
4
4
|
import * as THREE from 'three';
|
|
5
|
+
import { applyAlpha } from './common';
|
|
5
6
|
import { RealObject } from './real-object';
|
|
6
7
|
export class RealObjectSprite extends RealObject {
|
|
7
8
|
getObject3dInstance() {
|
|
@@ -9,7 +10,35 @@ export class RealObjectSprite extends RealObject {
|
|
|
9
10
|
}
|
|
10
11
|
build() {
|
|
11
12
|
super.build();
|
|
12
|
-
this.
|
|
13
|
+
this.buildMaterial();
|
|
14
|
+
}
|
|
15
|
+
/* overide */
|
|
16
|
+
updateAlpha() {
|
|
17
|
+
var { alpha = 1, fillStyle } = this.component.state;
|
|
18
|
+
applyAlpha(this.object3d.material, alpha, fillStyle);
|
|
19
|
+
}
|
|
20
|
+
updateHidden() {
|
|
21
|
+
this.object3d.visible = !this.component.state.hidden;
|
|
22
|
+
}
|
|
23
|
+
updateFillStyle() {
|
|
24
|
+
var { fillStyle } = this.component.state;
|
|
25
|
+
var material = this.object3d.material;
|
|
26
|
+
if (!material) {
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const texture = RealObject.buildFillStyleTexture(this.component);
|
|
30
|
+
if (texture) {
|
|
31
|
+
texture.needsUpdate = true;
|
|
32
|
+
material.map = texture;
|
|
33
|
+
}
|
|
34
|
+
else if (typeof fillStyle == 'string') {
|
|
35
|
+
if (fillStyle !== 'transparent') {
|
|
36
|
+
material.color.set(fillStyle);
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
material.opacity = 0;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
13
42
|
}
|
|
14
43
|
}
|
|
15
44
|
//# sourceMappingURL=real-object-sprite.js.map
|
|
@@ -1 +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;
|
|
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;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE1C,MAAM,OAAgB,gBAAiB,SAAQ,UAAwB;IAC3D,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,MAAM,EAAE,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IAID,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;IAED,eAAe;QACb,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QACxC,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAgC,CAAA;QAC7D,IAAI,CAAC,QAAQ,EAAE;YACb,OAAM;SACP;QAED,MAAM,OAAO,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAEhE,IAAI,OAAO,EAAE;YACX,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;YAC1B,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAA;SACvB;aAAM,IAAI,OAAO,SAAS,IAAI,QAAQ,EAAE;YACvC,IAAI,SAAS,KAAK,aAAa,EAAE;gBAC/B,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;aAC9B;iBAAM;gBACL,QAAQ,CAAC,OAAO,GAAG,CAAC,CAAA;aACrB;SACF;IACH,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { applyAlpha } from './common'\n\nimport { RealObject } from './real-object'\n\nexport 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.buildMaterial()\n }\n\n abstract buildMaterial(): void\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.SpriteMaterial\n if (!material) {\n return\n }\n\n const texture = RealObject.buildFillStyleTexture(this.component)\n\n if (texture) {\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"]}
|
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
import { RealObjectMesh } from './real-object-mesh';
|
|
2
|
-
import * as THREE from 'three';
|
|
3
2
|
/**
|
|
4
3
|
* RealObjectText
|
|
5
4
|
*/
|
|
6
5
|
export declare class RealObjectText extends RealObjectMesh {
|
|
7
|
-
buildGeometry():
|
|
8
|
-
buildMaterial(): THREE.MeshBasicMaterial;
|
|
9
|
-
updateDimension(): void;
|
|
6
|
+
buildGeometry(): void;
|
|
10
7
|
get rotation(): {
|
|
11
8
|
x: number;
|
|
12
9
|
y: any;
|
|
13
10
|
z: any;
|
|
14
11
|
};
|
|
12
|
+
updateDimension(): void;
|
|
13
|
+
updateText(): void;
|
|
15
14
|
updateAlpha(): void;
|
|
16
15
|
}
|