@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.
Files changed (87) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/db.sqlite +0 -0
  3. package/dist/cube.d.ts +1 -3
  4. package/dist/cube.js +1 -5
  5. package/dist/cube.js.map +1 -1
  6. package/dist/cylinder.d.ts +1 -3
  7. package/dist/cylinder.js +1 -5
  8. package/dist/cylinder.js.map +1 -1
  9. package/dist/rack.js +3 -3
  10. package/dist/rack.js.map +1 -1
  11. package/dist/sphere.d.ts +1 -3
  12. package/dist/sphere.js +1 -8
  13. package/dist/sphere.js.map +1 -1
  14. package/dist/sprite.js +0 -6
  15. package/dist/sprite.js.map +1 -1
  16. package/dist/stock.d.ts +7 -2
  17. package/dist/stock.js +8 -4
  18. package/dist/stock.js.map +1 -1
  19. package/dist/threed/common.js +3 -2
  20. package/dist/threed/common.js.map +1 -1
  21. package/dist/threed/real-object-camera-meshed.d.ts +1 -1
  22. package/dist/threed/real-object-camera-meshed.js +1 -1
  23. package/dist/threed/real-object-camera-meshed.js.map +1 -1
  24. package/dist/threed/real-object-dom-element.d.ts +0 -3
  25. package/dist/threed/real-object-dom-element.js +0 -51
  26. package/dist/threed/real-object-dom-element.js.map +1 -1
  27. package/dist/threed/real-object-extrude.d.ts +2 -3
  28. package/dist/threed/real-object-extrude.js +27 -66
  29. package/dist/threed/real-object-extrude.js.map +1 -1
  30. package/dist/threed/real-object-gltf.d.ts +0 -2
  31. package/dist/threed/real-object-gltf.js +2 -8
  32. package/dist/threed/real-object-gltf.js.map +1 -1
  33. package/dist/threed/real-object-mesh.d.ts +3 -2
  34. package/dist/threed/real-object-mesh.js +22 -13
  35. package/dist/threed/real-object-mesh.js.map +1 -1
  36. package/dist/threed/real-object-plane.d.ts +2 -3
  37. package/dist/threed/real-object-plane.js +6 -7
  38. package/dist/threed/real-object-plane.js.map +1 -1
  39. package/dist/threed/real-object-sprite-2d.d.ts +2 -2
  40. package/dist/threed/real-object-sprite-2d.js +12 -9
  41. package/dist/threed/real-object-sprite-2d.js.map +1 -1
  42. package/dist/threed/real-object-sprite.d.ts +4 -1
  43. package/dist/threed/real-object-sprite.js +30 -1
  44. package/dist/threed/real-object-sprite.js.map +1 -1
  45. package/dist/threed/real-object-text.d.ts +3 -4
  46. package/dist/threed/real-object-text.js +41 -47
  47. package/dist/threed/real-object-text.js.map +1 -1
  48. package/dist/threed/real-object.d.ts +0 -1
  49. package/dist/threed/real-object.js +14 -18
  50. package/dist/threed/real-object.js.map +1 -1
  51. package/dist/threed/texture/canvas-texture.js +3 -1
  52. package/dist/threed/texture/canvas-texture.js.map +1 -1
  53. package/dist/wall.d.ts +2 -3
  54. package/dist/wall.js +4 -5
  55. package/dist/wall.js.map +1 -1
  56. package/logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json +6 -21
  57. package/logs/.5e5d741d8b7784a2fbad65eedc0fd46946aaf6f2-audit.json +10 -0
  58. package/logs/application-2023-03-05-12.log +6 -0
  59. package/logs/application-2023-03-05-23.log +12 -0
  60. package/logs/connections-2023-03-05-12.log +35 -0
  61. package/logs/connections-2023-03-05-23.log +70 -0
  62. package/package.json +2 -2
  63. package/src/cube.ts +1 -7
  64. package/src/cylinder.ts +1 -7
  65. package/src/rack.ts +3 -4
  66. package/src/sphere.ts +1 -10
  67. package/src/sprite.ts +0 -8
  68. package/src/stock.ts +9 -6
  69. package/src/threed/common.ts +3 -2
  70. package/src/threed/real-object-camera-meshed.ts +1 -1
  71. package/src/threed/real-object-dom-element.ts +0 -71
  72. package/src/threed/real-object-extrude.ts +31 -69
  73. package/src/threed/real-object-gltf.ts +2 -10
  74. package/src/threed/real-object-mesh.ts +21 -14
  75. package/src/threed/real-object-plane.ts +6 -9
  76. package/src/threed/real-object-sprite-2d.ts +15 -12
  77. package/src/threed/real-object-sprite.ts +36 -2
  78. package/src/threed/real-object-text.ts +49 -60
  79. package/src/threed/real-object.ts +15 -22
  80. package/src/threed/texture/canvas-texture.ts +3 -1
  81. package/src/wall.ts +5 -6
  82. package/tsconfig.tsbuildinfo +1 -1
  83. package/logs/application-2023-03-01-03.log +0 -6
  84. package/logs/application-2023-03-01-13.log +0 -6
  85. package/logs/application-2023-03-01-15.log +0 -6
  86. package/logs/application-2023-03-03-00.log +0 -25
  87. package/logs/application-2023-03-03-01.log +0 -6
@@ -1,58 +1,16 @@
1
1
  /*
2
2
  * Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
- import { RealObjectMesh } from './real-object-mesh';
5
4
  import * as THREE from 'three';
6
- import { textTexture, textBounds } from './texture/text-texture';
5
+ import { applyAlpha } from './common';
6
+ import { RealObjectMesh } from './real-object-mesh';
7
+ import { textTexture } from './texture/text-texture';
7
8
  /**
8
9
  * RealObjectText
9
10
  */
10
11
  export 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
- }
12
+ buildGeometry() { }
52
13
  /* overide */
53
- updateDimension() {
54
- // Intentionally do nothing
55
- }
56
14
  get rotation() {
57
15
  const { rotationX = 0, rotationY = 0, rotation = 0 } = this.component.state;
58
16
  return {
@@ -61,9 +19,45 @@ export class RealObjectText extends RealObjectMesh {
61
19
  z: rotation
62
20
  };
63
21
  }
22
+ updateDimension() {
23
+ var { width, height } = this.component.state;
24
+ if (this.object3d.geometry) {
25
+ this.object3d.geometry.dispose();
26
+ }
27
+ /* scaling으로 해결되지 않기때문에, 새로 geometry를 만드는 방법을 사용한다 */
28
+ this.object3d.geometry = new THREE.PlaneGeometry(width, height);
29
+ }
30
+ updateText() {
31
+ var material = this.object3d.material;
32
+ if (!material) {
33
+ return;
34
+ }
35
+ var { width, height, bold = false, italic = false, fontFamily = 'Serif', fontSize = 10, fontColor = 'black', fillStyle } = this.component.state;
36
+ var text = this.component.text;
37
+ const texture = textTexture(text, width, height, {
38
+ bold,
39
+ italic,
40
+ fontFamily,
41
+ fontSize,
42
+ fontColor
43
+ });
44
+ if (texture) {
45
+ material.map = texture;
46
+ texture.needsUpdate = true;
47
+ }
48
+ else if (typeof fillStyle == 'string') {
49
+ if (fillStyle !== 'transparent') {
50
+ material.color.set(fillStyle);
51
+ }
52
+ else {
53
+ material.opacity = 0;
54
+ }
55
+ }
56
+ }
64
57
  updateAlpha() {
65
58
  // material의 transparency는 항상 true으로 유지되어야 한다.
66
- super.updateAlpha();
59
+ var { alpha = 1, fontColor } = this.component.state;
60
+ applyAlpha(this.object3d.material, alpha, fontColor);
67
61
  this.object3d.material.transparent = true;
68
62
  }
69
63
  }
@@ -1 +1 @@
1
- {"version":3,"file":"real-object-text.js","sourceRoot":"","sources":["../../src/threed/real-object-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AAEhE;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD,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 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"]}
1
+ {"version":3,"file":"real-object-text.js","sourceRoot":"","sources":["../../src/threed/real-object-text.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAErC,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAEpD;;GAEG;AACH,MAAM,OAAO,cAAe,SAAQ,cAAc;IAChD,aAAa,KAAI,CAAC;IAElB,aAAa;IAEb,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,eAAe;QACb,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE;YAC1B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAA;SACjC;QAED,qDAAqD;QACrD,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IACjE,CAAC;IAED,UAAU;QACR,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAsC,CAAA;QACnE,IAAI,CAAC,QAAQ,EAAE;YACb,OAAM;SACP;QAED,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,EACnB,SAAS,EACV,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAExB,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAA;QAE9B,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE;YAC/C,IAAI;YACJ,MAAM;YACN,UAAU;YACV,QAAQ;YACR,SAAS;SACV,CAAC,CAAA;QAEF,IAAI,OAAO,EAAE;YACX,QAAQ,CAAC,GAAG,GAAG,OAAO,CAAA;YACtB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;SAC3B;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;IAED,WAAW;QACT,8CAA8C;QAC9C,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,CACnD;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 * as THREE from 'three'\nimport { applyAlpha } from './common'\n\nimport { RealObjectMesh } from './real-object-mesh'\nimport { textTexture } from './texture/text-texture'\n\n/**\n * RealObjectText\n */\nexport class RealObjectText extends RealObjectMesh {\n buildGeometry() {}\n\n /* overide */\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 updateDimension() {\n var { width, height } = this.component.state\n\n if (this.object3d.geometry) {\n this.object3d.geometry.dispose()\n }\n\n /* scaling으로 해결되지 않기때문에, 새로 geometry를 만드는 방법을 사용한다 */\n this.object3d.geometry = new THREE.PlaneGeometry(width, height)\n }\n\n updateText() {\n var material = this.object3d.material as THREE.MeshStandardMaterial\n if (!material) {\n return\n }\n\n var {\n width,\n height,\n bold = false,\n italic = false,\n fontFamily = 'Serif',\n fontSize = 10,\n fontColor = 'black',\n fillStyle\n } = this.component.state\n\n var text = this.component.text\n\n const texture = textTexture(text, width, height, {\n bold,\n italic,\n fontFamily,\n fontSize,\n fontColor\n })\n\n if (texture) {\n material.map = texture\n texture.needsUpdate = true\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 updateAlpha() {\n // material의 transparency는 항상 true으로 유지되어야 한다.\n var { alpha = 1, fontColor } = this.component.state\n\n applyAlpha(this.object3d.material, alpha, fontColor)\n ;(this.object3d.material as any).transparent = true\n }\n}\n"]}
@@ -61,5 +61,4 @@ export declare abstract class RealObject<T extends THREE.Object3D = THREE.Object
61
61
  updateFillStyle(): void;
62
62
  updateText(): void;
63
63
  onchange(after: Properties, before: Properties): void;
64
- get rebuildingProperties(): string[];
65
64
  }
@@ -14,6 +14,7 @@ export class RealObject {
14
14
  texture.minFilter = THREE.LinearFilter;
15
15
  texture.encoding = THREE.sRGBEncoding;
16
16
  texture.repeat.set(1, 1);
17
+ texture.needsUpdate = true;
17
18
  component.invalidate();
18
19
  }, e => {
19
20
  console.error(e);
@@ -29,9 +30,13 @@ export class RealObject {
29
30
  update() {
30
31
  this.clear();
31
32
  this.build();
33
+ this.updateDimension();
32
34
  this.updateTransform();
35
+ this.updateFillStyle();
36
+ this.updateStrokeStyle();
33
37
  this.updateAlpha();
34
38
  this.updateHidden();
39
+ this.updateText();
35
40
  }
36
41
  getObject3dInstance() {
37
42
  return new THREE.Object3D();
@@ -192,7 +197,8 @@ export class RealObject {
192
197
  this.object3d.scale.set(Math.max(x, SCALE_MIN), Math.max(y, SCALE_MIN), Math.max(z, SCALE_MIN));
193
198
  }
194
199
  updateDimension() {
195
- this.update();
200
+ var { width, height, depth } = this.dimension;
201
+ this.object3d.scale.set(width, height, depth);
196
202
  }
197
203
  updateAlpha() {
198
204
  var { alpha } = this.component.state;
@@ -213,26 +219,19 @@ export class RealObject {
213
219
  updateHidden() {
214
220
  this.object3d.visible = !this.component.state.hidden;
215
221
  }
216
- updateStrokeStyle() {
217
- this.update();
218
- }
219
- updateFillStyle() {
220
- this.update();
221
- }
222
- updateText() {
223
- this.update();
224
- }
222
+ updateStrokeStyle() { }
223
+ updateFillStyle() { }
224
+ updateText() { }
225
225
  onchange(after, before) {
226
- if (hasProperties(this.rebuildingProperties, after)) {
227
- this.update();
228
- return;
229
- }
230
226
  if (hasProperties(['cx', 'cy', 'cz', 'zPos', 'left', 'top'], after)) {
231
- this.updateDimension();
227
+ this.updatePosition();
232
228
  }
233
229
  if (hasProperties(['width', 'height', 'depth'], after)) {
234
230
  this.updateDimension();
235
231
  }
232
+ if (hasProperties(['rotationX', 'rotationY', 'rotation'], after)) {
233
+ this.updateRotate();
234
+ }
236
235
  if ('scale' in after) {
237
236
  this.updateScale();
238
237
  }
@@ -252,8 +251,5 @@ export class RealObject {
252
251
  this.updateText();
253
252
  }
254
253
  }
255
- get rebuildingProperties() {
256
- return ['width', 'height', 'depth', 'fillStyle', 'strokeStyle', 'text', 'path'];
257
- }
258
254
  }
259
255
  //# sourceMappingURL=real-object.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"real-object.js","sourceRoot":"","sources":["../../src/threed/real-object.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { Component, Properties, DELTA } from '@hatiolab/things-scene'\n\nimport { SCALE_MIN } from './common'\nimport { ThreeDimensionalContainer } from './three-dimensional-container'\n\nfunction hasProperties(props: string[], obj: object) {\n return props.findIndex(prop => prop in obj) !== -1\n}\n\nexport abstract class RealObject<T extends THREE.Object3D = THREE.Object3D> {\n protected _component: Component\n protected _focused: boolean = false\n\n public object3d: T\n\n static buildFillStyleTexture(component: Component) {\n const { fillStyle } = component.state\n\n if (typeof fillStyle == 'object' && fillStyle.type == 'pattern' && fillStyle.image) {\n return new THREE.TextureLoader(THREE.DefaultLoadingManager).load(\n component.app.url(fillStyle.image),\n texture => {\n texture.minFilter = THREE.LinearFilter\n texture.encoding = THREE.sRGBEncoding\n texture.repeat.set(1, 1)\n\n component.invalidate()\n },\n e => {\n console.error(e)\n }\n )\n }\n }\n\n constructor(component: Component) {\n this._component = component\n this.object3d = this.getObject3dInstance()\n\n this.component.on('change', this.onchange, this)\n }\n\n update() {\n this.clear()\n this.build()\n\n this.updateTransform()\n this.updateAlpha()\n this.updateHidden()\n }\n\n protected getObject3dInstance(): T {\n return new THREE.Object3D() as T\n }\n\n build() {\n this.object3d.userData.context = this\n this.object3d.castShadow = true\n this.object3d.name = this.component.state.id\n }\n\n get component(): Component {\n return this._component!\n }\n\n get threeContainer(): ThreeDimensionalContainer | undefined {\n var component = this.component\n\n while (component) {\n if ('is3dContainer' in component && (component as ThreeDimensionalContainer).is3dContainer()) {\n return component as ThreeDimensionalContainer\n }\n component = component.parent\n }\n }\n\n get focused(): boolean {\n return this._focused\n }\n\n set focused(focused: boolean) {\n this._focused = focused\n }\n\n dispose() {\n this.component.off('change', this.onchange, this)\n delete this.component._realObject\n\n this.clear()\n }\n\n clear() {\n this.object3d.children.slice().forEach((child: any) => {\n if (child['dispose']) child['dispose']()\n if (child['geometry'] && child['geometry']['dispose']) child['geometry']['dispose']()\n if (child['material'] && child['material']['dispose']) child['material']['dispose']()\n if (child['texture'] && child['texture']['dispose']) child['texture']['dispose']()\n this.object3d.remove(child)\n })\n\n this.object3d.userData = {}\n return this.object3d.clear()\n }\n\n /**\n * Component의 상태값의 변화를 Object3D에 반영 - translate, rotation, scale\n */\n updateTransform() {\n // var {\n // scale: { x: sx = 1, y: sy = 1, z: sz = 1 } = UNIT_SCALE,\n // translate: { x: tx = 0, y: ty = 0, z: tz = 0 } = UNIT_TRANSLATE,\n // rotate: { x: rx = 0, y: ry = 0, z: rz = 0 } = UNIT_ROTATE\n // } = this.component.state\n\n var { x: tx, y: ty, z: tz } = this.position\n var { x: rx, y: ry, z: rz } = this.rotation\n var { x: sx, y: sy, z: sz } = this.scale\n\n this.object3d.position.set(tx, ty, tz)\n this.object3d.rotation.set(rx, ry, rz)\n this.object3d.scale.set(Math.max(sx, SCALE_MIN), Math.max(sy, SCALE_MIN), Math.max(sz, SCALE_MIN))\n }\n\n get position() {\n const { x, y, z } = this.center\n return {\n x,\n y: z,\n z: y\n }\n }\n\n get rotation() {\n const { rotationX = 0, rotationY = 0, rotation = 0 } = this.component.state\n\n return {\n x: rotationX,\n y: rotationY,\n z: -rotation\n }\n }\n\n get scale() {\n const { scale = 1 } = this.component.state\n\n return {\n x: scale,\n y: scale,\n z: scale\n }\n }\n\n get cx() {\n var { x = 0 } = this.component.center\n var { width: parentWidth = 0 } = this.component.parent.bounds\n var { tx = 0 } = this.component.delta() as DELTA\n\n return x + tx - parentWidth / 2\n }\n\n get cy() {\n var { y = 0 } = this.component.center\n var { height: parentHeight = 0 } = this.component.parent.bounds\n var { ty = 0 } = this.component.delta() as DELTA\n\n return y + ty - parentHeight / 2\n }\n\n get cz() {\n var { zPos = 0, depth = 1 } = this.component.state\n var { tz = 0 } = this.component.delta() as DELTA\n\n return zPos + tz + depth / 2\n }\n\n get center() {\n var { x = 0, y = 0 } = this.component.center\n var { width: parentWidth = 0, height: parentHeight = 0 } = this.component.parent.bounds\n\n var { tx = 0, ty = 0, tz = 0 } = this.component.delta() as DELTA\n\n return {\n x: x + tx - parentWidth / 2,\n y: y + ty - parentHeight / 2,\n z: this.cz\n }\n }\n\n get dimension() {\n const { width, height } = this.component.bounds\n const { depth } = this.component.state\n return {\n width,\n height,\n depth\n }\n }\n\n /**\n * Object3D 모델의 변화를 Component의 모델값에 반영\n */\n // updateTransformReverse() {\n // var { rotation, position, scale } = this.object3d\n\n // this.component.set({\n // rotate: {\n // x: rotation.x,\n // y: rotation.y,\n // z: rotation.z\n // },\n // translate: {\n // x: position.x,\n // y: position.y,\n // z: position.z\n // },\n // scale: {\n // x: scale.x,\n // y: scale.y,\n // z: scale.z\n // }\n // })\n // }\n\n /* update functions - 전체적인 rebuilding이 필요하지 않은 update 기능 들임 */\n updatePosition() {\n var { x = 0, y = 0, z = 0 } = this.position\n this.object3d.position.set(x, y, z)\n }\n\n updateRotate() {\n var { x = 0, y = 0, z = 0 } = this.rotation\n this.object3d.rotation.set(x, y, z)\n }\n\n updateScale() {\n var { x = 1, y = 1, z = 1 } = this.scale\n this.object3d.scale.set(Math.max(x, SCALE_MIN), Math.max(y, SCALE_MIN), Math.max(z, SCALE_MIN))\n }\n\n updateDimension() {\n this.update()\n }\n\n updateAlpha() {\n var { alpha } = this.component.state\n\n alpha = alpha == undefined ? 1 : alpha\n\n this.object3d.traverse((o: any) => {\n var materials = o.material\n if (!o.material) return\n\n if (!Array.isArray(materials)) {\n materials = [materials]\n }\n\n materials.forEach((m: any) => {\n m.opacity *= alpha\n m.transparent = alpha < 1\n })\n })\n }\n\n updateHidden() {\n this.object3d.visible = !this.component.state.hidden\n }\n\n updateStrokeStyle() {\n this.update()\n }\n\n updateFillStyle() {\n this.update()\n }\n\n updateText() {\n this.update()\n }\n\n onchange(after: Properties, before: Properties) {\n if (hasProperties(this.rebuildingProperties, after)) {\n this.update()\n return\n }\n\n if (hasProperties(['cx', 'cy', 'cz', 'zPos', 'left', 'top'], after)) {\n this.updateDimension()\n }\n\n if (hasProperties(['width', 'height', 'depth'], after)) {\n this.updateDimension()\n }\n\n if ('scale' in after) {\n this.updateScale()\n }\n\n if ('hidden' in after) {\n this.updateHidden()\n }\n\n if ('alpha' in after) {\n this.updateAlpha()\n }\n\n if ('strokeStyle' in after) {\n this.updateStrokeStyle()\n }\n\n if ('fillStyle' in after) {\n this.updateFillStyle()\n }\n\n if ('text' in after) {\n this.updateText()\n }\n }\n\n get rebuildingProperties(): string[] {\n return ['width', 'height', 'depth', 'fillStyle', 'strokeStyle', 'text', 'path']\n }\n}\n"]}
1
+ {"version":3,"file":"real-object.js","sourceRoot":"","sources":["../../src/threed/real-object.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport { Component, Properties, DELTA } from '@hatiolab/things-scene'\n\nimport { SCALE_MIN } from './common'\nimport { ThreeDimensionalContainer } from './three-dimensional-container'\n\nfunction hasProperties(props: string[], obj: object) {\n return props.findIndex(prop => prop in obj) !== -1\n}\n\nexport abstract class RealObject<T extends THREE.Object3D = THREE.Object3D> {\n protected _component: Component\n protected _focused: boolean = false\n\n public object3d: T\n\n static buildFillStyleTexture(component: Component) {\n const { fillStyle } = component.state\n\n if (typeof fillStyle == 'object' && fillStyle.type == 'pattern' && fillStyle.image) {\n return new THREE.TextureLoader(THREE.DefaultLoadingManager).load(\n component.app.url(fillStyle.image),\n texture => {\n texture.minFilter = THREE.LinearFilter\n texture.encoding = THREE.sRGBEncoding\n texture.repeat.set(1, 1)\n texture.needsUpdate = true\n\n component.invalidate()\n },\n e => {\n console.error(e)\n }\n )\n }\n }\n\n constructor(component: Component) {\n this._component = component\n this.object3d = this.getObject3dInstance()\n\n this.component.on('change', this.onchange, this)\n }\n\n update() {\n this.clear()\n this.build()\n\n this.updateDimension()\n this.updateTransform()\n this.updateFillStyle()\n this.updateStrokeStyle()\n this.updateAlpha()\n this.updateHidden()\n this.updateText()\n }\n\n protected getObject3dInstance(): T {\n return new THREE.Object3D() as T\n }\n\n build() {\n this.object3d.userData.context = this\n this.object3d.castShadow = true\n this.object3d.name = this.component.state.id\n }\n\n get component(): Component {\n return this._component!\n }\n\n get threeContainer(): ThreeDimensionalContainer | undefined {\n var component = this.component\n\n while (component) {\n if ('is3dContainer' in component && (component as ThreeDimensionalContainer).is3dContainer()) {\n return component as ThreeDimensionalContainer\n }\n component = component.parent\n }\n }\n\n get focused(): boolean {\n return this._focused\n }\n\n set focused(focused: boolean) {\n this._focused = focused\n }\n\n dispose() {\n this.component.off('change', this.onchange, this)\n delete this.component._realObject\n\n this.clear()\n }\n\n clear() {\n this.object3d.children.slice().forEach((child: any) => {\n if (child['dispose']) child['dispose']()\n if (child['geometry'] && child['geometry']['dispose']) child['geometry']['dispose']()\n if (child['material'] && child['material']['dispose']) child['material']['dispose']()\n if (child['texture'] && child['texture']['dispose']) child['texture']['dispose']()\n this.object3d.remove(child)\n })\n\n this.object3d.userData = {}\n return this.object3d.clear()\n }\n\n /**\n * Component의 상태값의 변화를 Object3D에 반영 - translate, rotation, scale\n */\n updateTransform() {\n // var {\n // scale: { x: sx = 1, y: sy = 1, z: sz = 1 } = UNIT_SCALE,\n // translate: { x: tx = 0, y: ty = 0, z: tz = 0 } = UNIT_TRANSLATE,\n // rotate: { x: rx = 0, y: ry = 0, z: rz = 0 } = UNIT_ROTATE\n // } = this.component.state\n\n var { x: tx, y: ty, z: tz } = this.position\n var { x: rx, y: ry, z: rz } = this.rotation\n var { x: sx, y: sy, z: sz } = this.scale\n\n this.object3d.position.set(tx, ty, tz)\n this.object3d.rotation.set(rx, ry, rz)\n this.object3d.scale.set(Math.max(sx, SCALE_MIN), Math.max(sy, SCALE_MIN), Math.max(sz, SCALE_MIN))\n }\n\n get position() {\n const { x, y, z } = this.center\n return {\n x,\n y: z,\n z: y\n }\n }\n\n get rotation() {\n const { rotationX = 0, rotationY = 0, rotation = 0 } = this.component.state\n\n return {\n x: rotationX,\n y: rotationY,\n z: -rotation\n }\n }\n\n get scale() {\n const { scale = 1 } = this.component.state\n\n return {\n x: scale,\n y: scale,\n z: scale\n }\n }\n\n get cx() {\n var { x = 0 } = this.component.center\n var { width: parentWidth = 0 } = this.component.parent.bounds\n var { tx = 0 } = this.component.delta() as DELTA\n\n return x + tx - parentWidth / 2\n }\n\n get cy() {\n var { y = 0 } = this.component.center\n var { height: parentHeight = 0 } = this.component.parent.bounds\n var { ty = 0 } = this.component.delta() as DELTA\n\n return y + ty - parentHeight / 2\n }\n\n get cz() {\n var { zPos = 0, depth = 1 } = this.component.state\n var { tz = 0 } = this.component.delta() as DELTA\n\n return zPos + tz + depth / 2\n }\n\n get center() {\n var { x = 0, y = 0 } = this.component.center\n var { width: parentWidth = 0, height: parentHeight = 0 } = this.component.parent.bounds\n\n var { tx = 0, ty = 0, tz = 0 } = this.component.delta() as DELTA\n\n return {\n x: x + tx - parentWidth / 2,\n y: y + ty - parentHeight / 2,\n z: this.cz\n }\n }\n\n get dimension() {\n const { width, height } = this.component.bounds\n const { depth } = this.component.state\n return {\n width,\n height,\n depth\n }\n }\n\n /**\n * Object3D 모델의 변화를 Component의 모델값에 반영\n */\n // updateTransformReverse() {\n // var { rotation, position, scale } = this.object3d\n\n // this.component.set({\n // rotate: {\n // x: rotation.x,\n // y: rotation.y,\n // z: rotation.z\n // },\n // translate: {\n // x: position.x,\n // y: position.y,\n // z: position.z\n // },\n // scale: {\n // x: scale.x,\n // y: scale.y,\n // z: scale.z\n // }\n // })\n // }\n\n /* update functions - 전체적인 rebuilding이 필요하지 않은 update 기능 들임 */\n updatePosition() {\n var { x = 0, y = 0, z = 0 } = this.position\n this.object3d.position.set(x, y, z)\n }\n\n updateRotate() {\n var { x = 0, y = 0, z = 0 } = this.rotation\n this.object3d.rotation.set(x, y, z)\n }\n\n updateScale() {\n var { x = 1, y = 1, z = 1 } = this.scale\n this.object3d.scale.set(Math.max(x, SCALE_MIN), Math.max(y, SCALE_MIN), Math.max(z, SCALE_MIN))\n }\n\n updateDimension() {\n var { width, height, depth } = this.dimension\n this.object3d.scale.set(width, height, depth)\n }\n\n updateAlpha() {\n var { alpha } = this.component.state\n\n alpha = alpha == undefined ? 1 : alpha\n\n this.object3d.traverse((o: any) => {\n var materials = o.material\n if (!o.material) return\n\n if (!Array.isArray(materials)) {\n materials = [materials]\n }\n\n materials.forEach((m: any) => {\n m.opacity *= alpha\n m.transparent = alpha < 1\n })\n })\n }\n\n updateHidden() {\n this.object3d.visible = !this.component.state.hidden\n }\n\n updateStrokeStyle() {}\n updateFillStyle() {}\n updateText() {}\n\n onchange(after: Properties, before: Properties) {\n if (hasProperties(['cx', 'cy', 'cz', 'zPos', 'left', 'top'], after)) {\n this.updatePosition()\n }\n\n if (hasProperties(['width', 'height', 'depth'], after)) {\n this.updateDimension()\n }\n\n if (hasProperties(['rotationX', 'rotationY', 'rotation'], after)) {\n this.updateRotate()\n }\n\n if ('scale' in after) {\n this.updateScale()\n }\n\n if ('hidden' in after) {\n this.updateHidden()\n }\n\n if ('alpha' in after) {\n this.updateAlpha()\n }\n\n if ('strokeStyle' in after) {\n this.updateStrokeStyle()\n }\n\n if ('fillStyle' in after) {\n this.updateFillStyle()\n }\n\n if ('text' in after) {\n this.updateText()\n }\n }\n}\n"]}
@@ -14,7 +14,9 @@ export function createCanvasTexture(component) {
14
14
  texture.wrapT = THREE.RepeatWrapping;
15
15
  texture.offset.set(0, 0);
16
16
  texture.repeat.set(1, 1);
17
- texture.minFilter = THREE.LinearFilter;
17
+ texture.magFilter = THREE.NearestFilter;
18
+ texture.minFilter = THREE.LinearMipMapLinearFilter;
19
+ texture.encoding = THREE.sRGBEncoding;
18
20
  return texture;
19
21
  }
20
22
  export function renderCanvasTexture(canvas, component, scale) {
@@ -1 +1 @@
1
- {"version":3,"file":"canvas-texture.js","sourceRoot":"","sources":["../../../src/threed/texture/canvas-texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,MAAM,UAAU,mBAAmB,CAAC,SAAoB;;IACtD,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAA;IAExC,0CAA0C;IAC1C,mEAAmE;IACnE,MAAM,KAAK,GAAG,CAAC,MAAA,MAAA,SAAS,CAAC,UAAU,0CAAE,cAAc,0CAAE,IAAe,IAAG,CAAC,CAAA;IAExE,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;IAExD,IAAI,OAAO,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAE7C,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAE7C,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;IAC1B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAA;IACpC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAA;IACpC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,YAAY,CAAA;IAEtC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB,EAAE,SAAoB,EAAE,KAAa;IAChG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAA;IAEpC,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAErC,OAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5B,OAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;IAC/B,SAAS,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAA;IAC1B,SAAS,CAAC,UAAU,CAAC,OAAQ,CAAC,CAAA;AAChC,CAAC","sourcesContent":["import * as THREE from 'three'\nimport { Component } from '@hatiolab/things-scene'\n\nimport { createCanvas } from '../html/elements'\n\nexport function createCanvasTexture(component: Component): THREE.Texture {\n var { width, height } = component.bounds\n\n // Factor for increasing image resolution.\n // TODO to be able to redraw according to the change in zoom value.\n const scale = (component.realObject?.threeContainer?.zoom as number) * 2\n\n let canvas = createCanvas(width * scale, height * scale)\n\n var texture = new THREE.CanvasTexture(canvas)\n\n renderCanvasTexture(canvas, component, scale)\n\n texture.needsUpdate = true\n texture.wrapS = THREE.RepeatWrapping\n texture.wrapT = THREE.RepeatWrapping\n texture.offset.set(0, 0)\n texture.repeat.set(1, 1)\n texture.minFilter = THREE.LinearFilter\n\n return texture\n}\n\nexport function renderCanvasTexture(canvas: HTMLCanvasElement, component: Component, scale: number) {\n var { left, top } = component.bounds\n\n let context = canvas.getContext('2d')\n\n context!.scale(scale, scale)\n context!.translate(-left, -top)\n component.render(context!)\n component.postrender(context!)\n}\n"]}
1
+ {"version":3,"file":"canvas-texture.js","sourceRoot":"","sources":["../../../src/threed/texture/canvas-texture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAE/C,MAAM,UAAU,mBAAmB,CAAC,SAAoB;;IACtD,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,CAAA;IAExC,0CAA0C;IAC1C,mEAAmE;IACnE,MAAM,KAAK,GAAG,CAAC,MAAA,MAAA,SAAS,CAAC,UAAU,0CAAE,cAAc,0CAAE,IAAe,IAAG,CAAC,CAAA;IAExE,IAAI,MAAM,GAAG,YAAY,CAAC,KAAK,GAAG,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;IAExD,IAAI,OAAO,GAAG,IAAI,KAAK,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAE7C,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAA;IAE7C,OAAO,CAAC,WAAW,GAAG,IAAI,CAAA;IAC1B,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAA;IACpC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,cAAc,CAAA;IACpC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACxB,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,aAAa,CAAA;IACvC,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,wBAAwB,CAAA;IAClD,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAA;IAErC,OAAO,OAAO,CAAA;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAyB,EAAE,SAAoB,EAAE,KAAa;IAChG,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC,MAAM,CAAA;IAEpC,IAAI,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IAErC,OAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;IAC5B,OAAQ,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAA;IAC/B,SAAS,CAAC,MAAM,CAAC,OAAQ,CAAC,CAAA;IAC1B,SAAS,CAAC,UAAU,CAAC,OAAQ,CAAC,CAAA;AAChC,CAAC","sourcesContent":["import * as THREE from 'three'\nimport { Component } from '@hatiolab/things-scene'\n\nimport { createCanvas } from '../html/elements'\n\nexport function createCanvasTexture(component: Component): THREE.Texture {\n var { width, height } = component.bounds\n\n // Factor for increasing image resolution.\n // TODO to be able to redraw according to the change in zoom value.\n const scale = (component.realObject?.threeContainer?.zoom as number) * 2\n\n let canvas = createCanvas(width * scale, height * scale)\n\n var texture = new THREE.CanvasTexture(canvas)\n\n renderCanvasTexture(canvas, component, scale)\n\n texture.needsUpdate = true\n texture.wrapS = THREE.RepeatWrapping\n texture.wrapT = THREE.RepeatWrapping\n texture.offset.set(0, 0)\n texture.repeat.set(1, 1)\n texture.magFilter = THREE.NearestFilter\n texture.minFilter = THREE.LinearMipMapLinearFilter\n texture.encoding = THREE.sRGBEncoding\n\n return texture\n}\n\nexport function renderCanvasTexture(canvas: HTMLCanvasElement, component: Component, scale: number) {\n var { left, top } = component.bounds\n\n let context = canvas.getContext('2d')\n\n context!.scale(scale, scale)\n context!.translate(-left, -top)\n component.render(context!)\n component.postrender(context!)\n}\n"]}
package/dist/wall.d.ts CHANGED
@@ -1,10 +1,9 @@
1
1
  import { Shape } from '@hatiolab/things-scene';
2
- import * as THREE from 'three';
3
2
  import { RealObject } from './threed/real-object';
4
3
  import { RealObjectMesh } from './threed/real-object-mesh';
5
4
  export declare class Wall3D extends RealObjectMesh {
6
- buildGeometry(): THREE.BoxGeometry;
7
- buildMaterial(): THREE.MeshStandardMaterial;
5
+ buildGeometry(): void;
6
+ updateDimension(): void;
8
7
  }
9
8
  declare const Wall_base: typeof Shape;
10
9
  export declare class Wall extends Wall_base {
package/dist/wall.js CHANGED
@@ -20,12 +20,11 @@ const NATURE = {
20
20
  };
21
21
  export class Wall3D extends RealObjectMesh {
22
22
  buildGeometry() {
23
- var { width, height, depth = 1 } = this.component.state;
24
- return new THREE.BoxGeometry(width, depth, height);
23
+ this.object3d.geometry = new THREE.BoxGeometry(1, 1, 1);
25
24
  }
26
- buildMaterial() {
27
- var { fillStyle = 'gray' } = this.component.state;
28
- return new THREE.MeshStandardMaterial({ color: fillStyle, side: THREE.FrontSide });
25
+ updateDimension() {
26
+ var { width, height, depth = 1 } = this.component.state;
27
+ this.object3d.scale.set(width, depth, height);
29
28
  }
30
29
  }
31
30
  export class Wall extends RectPath(Shape) {
package/dist/wall.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wall.js","sourceRoot":"","sources":["../src/wall.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnE,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB;KACF;IACD,IAAI,EAAE,sBAAsB;CAC7B,CAAA;AAED,MAAM,OAAO,MAAO,SAAQ,cAAc;IACxC,aAAa;QACX,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QACvD,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IACpD,CAAC;IAED,aAAa;QACX,IAAI,EAAE,SAAS,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAEjD,OAAO,IAAI,KAAK,CAAC,oBAAoB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAA;IACpF,CAAC;CACF;AAED,MAAM,OAAO,IAAK,SAAQ,QAAQ,CAAC,KAAK,CAAC;IACvC,OAAO;QACL,OAAO,IAAI,CAAA;IACb,CAAC;IAED,eAAe;QACb,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, RectPath, Shape } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\nimport { RealObject } from './threed/real-object'\nimport { RealObjectMesh } from './threed/real-object-mesh'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'depth',\n name: 'depth',\n property: 'depth'\n }\n ],\n help: 'scene/component/wall'\n}\n\nexport class Wall3D extends RealObjectMesh {\n buildGeometry() {\n var { width, height, depth = 1 } = this.component.state\n return new THREE.BoxGeometry(width, depth, height)\n }\n\n buildMaterial() {\n var { fillStyle = 'gray' } = this.component.state\n\n return new THREE.MeshStandardMaterial({ color: fillStyle, side: THREE.FrontSide })\n }\n}\n\nexport class Wall extends RectPath(Shape) {\n is3dish() {\n return true\n }\n\n buildRealObject(): RealObject | undefined {\n return new Wall3D(this)\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.register('wall', Wall)\n"]}
1
+ {"version":3,"file":"wall.js","sourceRoot":"","sources":["../src/wall.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,SAAS,EAAc,QAAQ,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAC/E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAE1D,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,KAAK;IACd,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,IAAI;IACf,UAAU,EAAE;QACV;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,OAAO;SAClB;KACF;IACD,IAAI,EAAE,sBAAsB;CAC7B,CAAA;AAED,MAAM,OAAO,MAAO,SAAQ,cAAc;IACxC,aAAa;QACX,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,eAAe;QACb,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAEvD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAC/C,CAAC;CACF;AAED,MAAM,OAAO,IAAK,SAAQ,QAAQ,CAAC,KAAK,CAAC;IACvC,OAAO;QACL,OAAO,IAAI,CAAA;IACb,CAAC;IAED,eAAe;QACb,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,MAAM,CAAA;IACf,CAAC;CACF;AAED,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport { Component, Properties, RectPath, Shape } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\nimport { RealObject } from './threed/real-object'\nimport { RealObjectMesh } from './threed/real-object-mesh'\n\nconst NATURE = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'number',\n label: 'depth',\n name: 'depth',\n property: 'depth'\n }\n ],\n help: 'scene/component/wall'\n}\n\nexport class Wall3D extends RealObjectMesh {\n buildGeometry() {\n this.object3d.geometry = new THREE.BoxGeometry(1, 1, 1)\n }\n\n updateDimension(): void {\n var { width, height, depth = 1 } = this.component.state\n\n this.object3d.scale.set(width, depth, height)\n }\n}\n\nexport class Wall extends RectPath(Shape) {\n is3dish() {\n return true\n }\n\n buildRealObject(): RealObject | undefined {\n return new Wall3D(this)\n }\n\n get nature() {\n return NATURE\n }\n}\n\nComponent.register('wall', Wall)\n"]}
@@ -6,29 +6,14 @@
6
6
  "auditLog": "logs/.08636eb59927f12972f6774f5947c8507b3564c2-audit.json",
7
7
  "files": [
8
8
  {
9
- "date": 1677609045030,
10
- "name": "logs/application-2023-03-01-03.log",
11
- "hash": "cbb1c94289188b68ae183ae07ad473504bbe4a945b6cca05d72a119ea99bcb95"
9
+ "date": 1677986779847,
10
+ "name": "logs/application-2023-03-05-12.log",
11
+ "hash": "b1491e6040f9ae51f97238e436babcce355a8fcfb99640f0e6291efa2dcb4fa1"
12
12
  },
13
13
  {
14
- "date": 1677645356970,
15
- "name": "logs/application-2023-03-01-13.log",
16
- "hash": "2e4fa8c5b0be391ddcf9ea0e3777d0d9879f750168ea0bcf14b686417166135d"
17
- },
18
- {
19
- "date": 1677651216796,
20
- "name": "logs/application-2023-03-01-15.log",
21
- "hash": "0632ba06863b1caa1df0f1e955f7cd363f3b0b0f0a93ba8a45ee6eb66430813c"
22
- },
23
- {
24
- "date": 1677769390251,
25
- "name": "logs/application-2023-03-03-00.log",
26
- "hash": "3fe90aa25fcc912b5b407fcc5e5daf3c95233a379872c3a4b66ad446b53417ff"
27
- },
28
- {
29
- "date": 1677772961148,
30
- "name": "logs/application-2023-03-03-01.log",
31
- "hash": "604655a0040727b80c6c4b55aacdb4013b09a98256e273e47e8a8940c3053c53"
14
+ "date": 1678026248957,
15
+ "name": "logs/application-2023-03-05-23.log",
16
+ "hash": "d76e61c4122d462e689279e776a5adccb0d78492a54a2410e86c85f3cebdc37d"
32
17
  }
33
18
  ],
34
19
  "hashType": "sha256"
@@ -89,6 +89,16 @@
89
89
  "date": 1677772962126,
90
90
  "name": "logs/connections-2023-03-03-01.log",
91
91
  "hash": "fc5531e11c4749dfce844fbb20984c87511eb069cda9d105048aa09e4a5f50d9"
92
+ },
93
+ {
94
+ "date": 1677986781600,
95
+ "name": "logs/connections-2023-03-05-12.log",
96
+ "hash": "a49891708de1da2d8dd2aef1fdd7dacb049daa2a80973bf57d9ca3d6f42ea105"
97
+ },
98
+ {
99
+ "date": 1678026250498,
100
+ "name": "logs/connections-2023-03-05-23.log",
101
+ "hash": "f0755fba64d96b7ddaf4a77da762e735bed176f67a348c4b6079a55857543572"
92
102
  }
93
103
  ],
94
104
  "hashType": "sha256"
@@ -0,0 +1,6 @@
1
+ 2023-03-05T12:26:20+09:00 info: File Storage is Ready.
2
+ 2023-03-05T12:26:21+09:00 error: oracledb module loading failed
3
+ 2023-03-05T12:26:22+09:00 info: Default DataSource established
4
+ 2023-03-05T12:26:22+09:00 info: Transaction DataSource established
5
+ 2023-03-05T12:26:23+09:00 info: 🚀 Server ready at http://0.0.0.0:3000/graphql
6
+ 2023-03-05T12:26:23+09:00 info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/graphql
@@ -0,0 +1,12 @@
1
+ 2023-03-05T23:24:09+09:00 info: File Storage is Ready.
2
+ 2023-03-05T23:24:10+09:00 error: oracledb module loading failed
3
+ 2023-03-05T23:24:11+09:00 info: Default DataSource established
4
+ 2023-03-05T23:24:11+09:00 info: Transaction DataSource established
5
+ 2023-03-05T23:24:12+09:00 info: 🚀 Server ready at http://0.0.0.0:3000/graphql
6
+ 2023-03-05T23:24:12+09:00 info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/graphql
7
+ 2023-03-05T23:43:51+09:00 info: File Storage is Ready.
8
+ 2023-03-05T23:43:51+09:00 error: oracledb module loading failed
9
+ 2023-03-05T23:43:52+09:00 info: Default DataSource established
10
+ 2023-03-05T23:43:52+09:00 info: Transaction DataSource established
11
+ 2023-03-05T23:43:53+09:00 info: 🚀 Server ready at http://0.0.0.0:3000/graphql
12
+ 2023-03-05T23:43:53+09:00 info: 🚀 Subscriptions ready at ws://0.0.0.0:3000/graphql
@@ -0,0 +1,35 @@
1
+ 2023-03-05T12:26:23+09:00 info: Initializing ConnectionManager...
2
+ 2023-03-05T12:26:23+09:00 info: Connector 'echo-back-server' started to ready
3
+ 2023-03-05T12:26:23+09:00 info: Connector 'echo-back' started to ready
4
+ 2023-03-05T12:26:23+09:00 info: Connector 'http-connector' started to ready
5
+ 2023-03-05T12:26:23+09:00 info: Connector 'graphql-connector' started to ready
6
+ 2023-03-05T12:26:23+09:00 info: Connector 'sqlite-connector' started to ready
7
+ 2023-03-05T12:26:23+09:00 info: Connector 'postgresql-connector' started to ready
8
+ 2023-03-05T12:26:23+09:00 info: Connector 'mqtt-connector' started to ready
9
+ 2023-03-05T12:26:23+09:00 info: Connector 'mssql-connector' started to ready
10
+ 2023-03-05T12:26:23+09:00 info: Connector 'oracle-connector' started to ready
11
+ 2023-03-05T12:26:23+09:00 info: Connector 'mysql-connector' started to ready
12
+ 2023-03-05T12:26:23+09:00 info: Connector 'socket-server' started to ready
13
+ 2023-03-05T12:26:23+09:00 info: echo-back-servers are ready
14
+ 2023-03-05T12:26:23+09:00 info: echo-back connections are ready
15
+ 2023-03-05T12:26:23+09:00 info: http-connector connections are ready
16
+ 2023-03-05T12:26:23+09:00 info: graphql-connector connections are ready
17
+ 2023-03-05T12:26:23+09:00 info: sqlite-connector connections are ready
18
+ 2023-03-05T12:26:23+09:00 info: postgresql-connector connections are ready
19
+ 2023-03-05T12:26:23+09:00 info: mqtt-connector connections are ready
20
+ 2023-03-05T12:26:23+09:00 info: mssql-connector connections are ready
21
+ 2023-03-05T12:26:23+09:00 info: oracle-connector connections are ready
22
+ 2023-03-05T12:26:23+09:00 info: mysql-connector connections are ready
23
+ 2023-03-05T12:26:23+09:00 info: socket servers are ready
24
+ 2023-03-05T12:26:23+09:00 info: All connector for 'echo-back-server' ready
25
+ 2023-03-05T12:26:23+09:00 info: All connector for 'echo-back' ready
26
+ 2023-03-05T12:26:23+09:00 info: All connector for 'http-connector' ready
27
+ 2023-03-05T12:26:23+09:00 info: All connector for 'graphql-connector' ready
28
+ 2023-03-05T12:26:23+09:00 info: All connector for 'sqlite-connector' ready
29
+ 2023-03-05T12:26:23+09:00 info: All connector for 'postgresql-connector' ready
30
+ 2023-03-05T12:26:23+09:00 info: All connector for 'mqtt-connector' ready
31
+ 2023-03-05T12:26:23+09:00 info: All connector for 'mssql-connector' ready
32
+ 2023-03-05T12:26:23+09:00 info: All connector for 'oracle-connector' ready
33
+ 2023-03-05T12:26:23+09:00 info: All connector for 'mysql-connector' ready
34
+ 2023-03-05T12:26:23+09:00 info: All connector for 'socket-server' ready
35
+ 2023-03-05T12:26:23+09:00 info: ConnectionManager initialization done:
@@ -0,0 +1,70 @@
1
+ 2023-03-05T23:24:12+09:00 info: Initializing ConnectionManager...
2
+ 2023-03-05T23:24:12+09:00 info: Connector 'echo-back-server' started to ready
3
+ 2023-03-05T23:24:12+09:00 info: Connector 'echo-back' started to ready
4
+ 2023-03-05T23:24:12+09:00 info: Connector 'http-connector' started to ready
5
+ 2023-03-05T23:24:12+09:00 info: Connector 'graphql-connector' started to ready
6
+ 2023-03-05T23:24:12+09:00 info: Connector 'sqlite-connector' started to ready
7
+ 2023-03-05T23:24:12+09:00 info: Connector 'postgresql-connector' started to ready
8
+ 2023-03-05T23:24:12+09:00 info: Connector 'mqtt-connector' started to ready
9
+ 2023-03-05T23:24:12+09:00 info: Connector 'mssql-connector' started to ready
10
+ 2023-03-05T23:24:12+09:00 info: Connector 'oracle-connector' started to ready
11
+ 2023-03-05T23:24:12+09:00 info: Connector 'mysql-connector' started to ready
12
+ 2023-03-05T23:24:12+09:00 info: Connector 'socket-server' started to ready
13
+ 2023-03-05T23:24:12+09:00 info: echo-back-servers are ready
14
+ 2023-03-05T23:24:12+09:00 info: echo-back connections are ready
15
+ 2023-03-05T23:24:12+09:00 info: http-connector connections are ready
16
+ 2023-03-05T23:24:12+09:00 info: graphql-connector connections are ready
17
+ 2023-03-05T23:24:12+09:00 info: sqlite-connector connections are ready
18
+ 2023-03-05T23:24:12+09:00 info: postgresql-connector connections are ready
19
+ 2023-03-05T23:24:12+09:00 info: mqtt-connector connections are ready
20
+ 2023-03-05T23:24:12+09:00 info: mssql-connector connections are ready
21
+ 2023-03-05T23:24:12+09:00 info: oracle-connector connections are ready
22
+ 2023-03-05T23:24:12+09:00 info: mysql-connector connections are ready
23
+ 2023-03-05T23:24:12+09:00 info: socket servers are ready
24
+ 2023-03-05T23:24:12+09:00 info: All connector for 'echo-back-server' ready
25
+ 2023-03-05T23:24:12+09:00 info: All connector for 'echo-back' ready
26
+ 2023-03-05T23:24:12+09:00 info: All connector for 'http-connector' ready
27
+ 2023-03-05T23:24:12+09:00 info: All connector for 'graphql-connector' ready
28
+ 2023-03-05T23:24:12+09:00 info: All connector for 'sqlite-connector' ready
29
+ 2023-03-05T23:24:12+09:00 info: All connector for 'postgresql-connector' ready
30
+ 2023-03-05T23:24:12+09:00 info: All connector for 'mqtt-connector' ready
31
+ 2023-03-05T23:24:12+09:00 info: All connector for 'mssql-connector' ready
32
+ 2023-03-05T23:24:12+09:00 info: All connector for 'oracle-connector' ready
33
+ 2023-03-05T23:24:12+09:00 info: All connector for 'mysql-connector' ready
34
+ 2023-03-05T23:24:12+09:00 info: All connector for 'socket-server' ready
35
+ 2023-03-05T23:24:12+09:00 info: ConnectionManager initialization done:
36
+ 2023-03-05T23:43:53+09:00 info: Initializing ConnectionManager...
37
+ 2023-03-05T23:43:53+09:00 info: Connector 'echo-back-server' started to ready
38
+ 2023-03-05T23:43:53+09:00 info: Connector 'echo-back' started to ready
39
+ 2023-03-05T23:43:53+09:00 info: Connector 'http-connector' started to ready
40
+ 2023-03-05T23:43:53+09:00 info: Connector 'graphql-connector' started to ready
41
+ 2023-03-05T23:43:53+09:00 info: Connector 'sqlite-connector' started to ready
42
+ 2023-03-05T23:43:53+09:00 info: Connector 'postgresql-connector' started to ready
43
+ 2023-03-05T23:43:53+09:00 info: Connector 'mqtt-connector' started to ready
44
+ 2023-03-05T23:43:53+09:00 info: Connector 'mssql-connector' started to ready
45
+ 2023-03-05T23:43:53+09:00 info: Connector 'oracle-connector' started to ready
46
+ 2023-03-05T23:43:53+09:00 info: Connector 'mysql-connector' started to ready
47
+ 2023-03-05T23:43:53+09:00 info: Connector 'socket-server' started to ready
48
+ 2023-03-05T23:43:53+09:00 info: echo-back-servers are ready
49
+ 2023-03-05T23:43:53+09:00 info: echo-back connections are ready
50
+ 2023-03-05T23:43:53+09:00 info: http-connector connections are ready
51
+ 2023-03-05T23:43:53+09:00 info: graphql-connector connections are ready
52
+ 2023-03-05T23:43:53+09:00 info: sqlite-connector connections are ready
53
+ 2023-03-05T23:43:53+09:00 info: postgresql-connector connections are ready
54
+ 2023-03-05T23:43:53+09:00 info: mqtt-connector connections are ready
55
+ 2023-03-05T23:43:53+09:00 info: mssql-connector connections are ready
56
+ 2023-03-05T23:43:53+09:00 info: oracle-connector connections are ready
57
+ 2023-03-05T23:43:53+09:00 info: mysql-connector connections are ready
58
+ 2023-03-05T23:43:53+09:00 info: socket servers are ready
59
+ 2023-03-05T23:43:53+09:00 info: All connector for 'echo-back-server' ready
60
+ 2023-03-05T23:43:53+09:00 info: All connector for 'echo-back' ready
61
+ 2023-03-05T23:43:53+09:00 info: All connector for 'http-connector' ready
62
+ 2023-03-05T23:43:53+09:00 info: All connector for 'graphql-connector' ready
63
+ 2023-03-05T23:43:53+09:00 info: All connector for 'sqlite-connector' ready
64
+ 2023-03-05T23:43:53+09:00 info: All connector for 'postgresql-connector' ready
65
+ 2023-03-05T23:43:53+09:00 info: All connector for 'mqtt-connector' ready
66
+ 2023-03-05T23:43:53+09:00 info: All connector for 'mssql-connector' ready
67
+ 2023-03-05T23:43:53+09:00 info: All connector for 'oracle-connector' ready
68
+ 2023-03-05T23:43:53+09:00 info: All connector for 'mysql-connector' ready
69
+ 2023-03-05T23:43:53+09:00 info: All connector for 'socket-server' ready
70
+ 2023-03-05T23:43:53+09:00 info: ConnectionManager initialization done:
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@operato/scene-visualizer",
3
3
  "description": "visualizer component for operato-scene",
4
4
  "author": "heartyoh",
5
- "version": "1.2.12",
5
+ "version": "1.2.14",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.js",
8
8
  "things-scene": true,
@@ -61,5 +61,5 @@
61
61
  "prettier --write"
62
62
  ]
63
63
  },
64
- "gitHead": "423f23b929f9f4f0121cc3a740613858a7110015"
64
+ "gitHead": "58d3f506485a33ce6cfedf50ec20659f38dd6c44"
65
65
  }
package/src/cube.ts CHANGED
@@ -18,13 +18,7 @@ export class Cube3D extends RealObjectMesh {
18
18
  buildGeometry() {
19
19
  var { width = 0, height = 0, depth = 0 } = this.component.state
20
20
 
21
- return new THREE.BoxGeometry(width, depth, height)
22
- }
23
-
24
- buildMaterial() {
25
- var { fillStyle = 'lightgray' } = this.component.state
26
-
27
- return new THREE.MeshStandardMaterial({ color: fillStyle, side: THREE.FrontSide })
21
+ this.object3d.geometry = new THREE.BoxGeometry(width, depth, height)
28
22
  }
29
23
  }
30
24
 
package/src/cylinder.ts CHANGED
@@ -18,13 +18,7 @@ export class Cylinder3D extends RealObjectMesh {
18
18
  buildGeometry() {
19
19
  var { depth = 0, rx = 0 } = this.component.state
20
20
 
21
- return new THREE.CylinderGeometry(rx, rx, depth, 25)
22
- }
23
-
24
- buildMaterial() {
25
- var { fillStyle = 'lightgray' } = this.component.state
26
-
27
- return new THREE.MeshStandardMaterial({ color: fillStyle, side: THREE.FrontSide })
21
+ this.object3d.geometry = new THREE.CylinderGeometry(rx, rx, depth, 25)
28
22
  }
29
23
  }
30
24
 
package/src/rack.ts CHANGED
@@ -55,11 +55,10 @@ export class Rack extends RealObject {
55
55
  if (!Rack._boardMaterial) {
56
56
  Rack._boardMaterial = new THREE.MeshStandardMaterial({
57
57
  color: '#dedede',
58
- side: THREE.DoubleSide
58
+ side: THREE.DoubleSide,
59
+ polygonOffset: true,
60
+ polygonOffsetFactor: -0.1
59
61
  })
60
-
61
- Rack._boardMaterial.polygonOffset = true
62
- Rack._boardMaterial.polygonOffsetFactor = -0.1
63
62
  }
64
63
 
65
64
  return Rack._boardMaterial