@operato/scene-visualizer 10.0.0-beta.1 → 10.0.0-beta.3

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 (163) hide show
  1. package/dist/editors/property-editor-gltf-info.d.ts +8 -1
  2. package/dist/editors/property-editor-gltf-info.js +80 -24
  3. package/dist/editors/property-editor-gltf-info.js.map +1 -1
  4. package/package.json +2 -2
  5. package/dist/banner.d.ts +0 -244
  6. package/dist/banner.js +0 -75
  7. package/dist/banner.js.map +0 -1
  8. package/dist/camera.d.ts +0 -249
  9. package/dist/camera.js +0 -107
  10. package/dist/camera.js.map +0 -1
  11. package/dist/cube.d.ts +0 -241
  12. package/dist/cube.js +0 -37
  13. package/dist/cube.js.map +0 -1
  14. package/dist/cylinder.d.ts +0 -9
  15. package/dist/cylinder.js +0 -37
  16. package/dist/cylinder.js.map +0 -1
  17. package/dist/ellipse.d.ts +0 -5
  18. package/dist/ellipse.js +0 -20
  19. package/dist/ellipse.js.map +0 -1
  20. package/dist/gltf-object.d.ts +0 -249
  21. package/dist/gltf-object.js +0 -103
  22. package/dist/gltf-object.js.map +0 -1
  23. package/dist/html-overlay-element.d.ts +0 -1
  24. package/dist/html-overlay-element.js +0 -8
  25. package/dist/html-overlay-element.js.map +0 -1
  26. package/dist/light.d.ts +0 -14
  27. package/dist/light.js +0 -134
  28. package/dist/light.js.map +0 -1
  29. package/dist/polygon.d.ts +0 -17
  30. package/dist/polygon.js +0 -62
  31. package/dist/polygon.js.map +0 -1
  32. package/dist/rect.d.ts +0 -5
  33. package/dist/rect.js +0 -34
  34. package/dist/rect.js.map +0 -1
  35. package/dist/scene/component.d.ts +0 -1
  36. package/dist/scene/component.js +0 -29
  37. package/dist/scene/component.js.map +0 -1
  38. package/dist/sphere.d.ts +0 -9
  39. package/dist/sphere.js +0 -37
  40. package/dist/sphere.js.map +0 -1
  41. package/dist/sprite.d.ts +0 -238
  42. package/dist/sprite.js +0 -27
  43. package/dist/sprite.js.map +0 -1
  44. package/dist/text.d.ts +0 -1
  45. package/dist/text.js +0 -7
  46. package/dist/text.js.map +0 -1
  47. package/dist/three-container-editor.d.ts +0 -22
  48. package/dist/three-container-editor.js +0 -132
  49. package/dist/three-container-editor.js.map +0 -1
  50. package/dist/three-container.d.ts +0 -61
  51. package/dist/three-container.js +0 -371
  52. package/dist/three-container.js.map +0 -1
  53. package/dist/three-controls.d.ts +0 -111
  54. package/dist/three-controls.js +0 -414
  55. package/dist/three-controls.js.map +0 -1
  56. package/dist/three-layout.d.ts +0 -8
  57. package/dist/three-layout.js +0 -20
  58. package/dist/three-layout.js.map +0 -1
  59. package/dist/three-space.d.ts +0 -8
  60. package/dist/three-space.js +0 -58
  61. package/dist/three-space.js.map +0 -1
  62. package/dist/threed/common.d.ts +0 -22
  63. package/dist/threed/common.js +0 -19
  64. package/dist/threed/common.js.map +0 -1
  65. package/dist/threed/floor/floor.d.ts +0 -3
  66. package/dist/threed/floor/floor.js +0 -51
  67. package/dist/threed/floor/floor.js.map +0 -1
  68. package/dist/threed/html/elements.d.ts +0 -2
  69. package/dist/threed/html/elements.js +0 -21
  70. package/dist/threed/html/elements.js.map +0 -1
  71. package/dist/threed/index.d.ts +0 -16
  72. package/dist/threed/index.js +0 -17
  73. package/dist/threed/index.js.map +0 -1
  74. package/dist/threed/interfaces.d.ts +0 -15
  75. package/dist/threed/interfaces.js +0 -5
  76. package/dist/threed/interfaces.js.map +0 -1
  77. package/dist/threed/managers/camera-manager.d.ts +0 -14
  78. package/dist/threed/managers/camera-manager.js +0 -60
  79. package/dist/threed/managers/camera-manager.js.map +0 -1
  80. package/dist/threed/managers/controls-manager.d.ts +0 -50
  81. package/dist/threed/managers/controls-manager.js +0 -249
  82. package/dist/threed/managers/controls-manager.js.map +0 -1
  83. package/dist/threed/managers/event-manager3d.d.ts +0 -19
  84. package/dist/threed/managers/event-manager3d.js +0 -76
  85. package/dist/threed/managers/event-manager3d.js.map +0 -1
  86. package/dist/threed/managers/index.d.ts +0 -7
  87. package/dist/threed/managers/index.js +0 -7
  88. package/dist/threed/managers/index.js.map +0 -1
  89. package/dist/threed/managers/light-manager.d.ts +0 -7
  90. package/dist/threed/managers/light-manager.js +0 -37
  91. package/dist/threed/managers/light-manager.js.map +0 -1
  92. package/dist/threed/managers/renderer-manager.d.ts +0 -30
  93. package/dist/threed/managers/renderer-manager.js +0 -120
  94. package/dist/threed/managers/renderer-manager.js.map +0 -1
  95. package/dist/threed/managers/scene-manager.d.ts +0 -15
  96. package/dist/threed/managers/scene-manager.js +0 -48
  97. package/dist/threed/managers/scene-manager.js.map +0 -1
  98. package/dist/threed/managers/types.d.ts +0 -36
  99. package/dist/threed/managers/types.js +0 -2
  100. package/dist/threed/managers/types.js.map +0 -1
  101. package/dist/threed/real-object-camera-meshed.d.ts +0 -12
  102. package/dist/threed/real-object-camera-meshed.js +0 -49
  103. package/dist/threed/real-object-camera-meshed.js.map +0 -1
  104. package/dist/threed/real-object-camera.d.ts +0 -9
  105. package/dist/threed/real-object-camera.js +0 -31
  106. package/dist/threed/real-object-camera.js.map +0 -1
  107. package/dist/threed/real-object-dom-element.d.ts +0 -9
  108. package/dist/threed/real-object-dom-element.js +0 -48
  109. package/dist/threed/real-object-dom-element.js.map +0 -1
  110. package/dist/threed/real-object-dummy.d.ts +0 -6
  111. package/dist/threed/real-object-dummy.js +0 -11
  112. package/dist/threed/real-object-dummy.js.map +0 -1
  113. package/dist/threed/real-object-extrude.d.ts +0 -22
  114. package/dist/threed/real-object-extrude.js +0 -180
  115. package/dist/threed/real-object-extrude.js.map +0 -1
  116. package/dist/threed/real-object-gltf.d.ts +0 -16
  117. package/dist/threed/real-object-gltf.js +0 -105
  118. package/dist/threed/real-object-gltf.js.map +0 -1
  119. package/dist/threed/real-object-group.d.ts +0 -5
  120. package/dist/threed/real-object-group.js +0 -11
  121. package/dist/threed/real-object-group.js.map +0 -1
  122. package/dist/threed/real-object-mesh.d.ts +0 -13
  123. package/dist/threed/real-object-mesh.js +0 -73
  124. package/dist/threed/real-object-mesh.js.map +0 -1
  125. package/dist/threed/real-object-plane.d.ts +0 -5
  126. package/dist/threed/real-object-plane.js +0 -22
  127. package/dist/threed/real-object-plane.js.map +0 -1
  128. package/dist/threed/real-object-registry.d.ts +0 -7
  129. package/dist/threed/real-object-registry.js +0 -32
  130. package/dist/threed/real-object-registry.js.map +0 -1
  131. package/dist/threed/real-object-scene.d.ts +0 -21
  132. package/dist/threed/real-object-scene.js +0 -72
  133. package/dist/threed/real-object-scene.js.map +0 -1
  134. package/dist/threed/real-object-sprite-2d.d.ts +0 -14
  135. package/dist/threed/real-object-sprite-2d.js +0 -45
  136. package/dist/threed/real-object-sprite-2d.js.map +0 -1
  137. package/dist/threed/real-object-sprite.d.ts +0 -11
  138. package/dist/threed/real-object-sprite.js +0 -52
  139. package/dist/threed/real-object-sprite.js.map +0 -1
  140. package/dist/threed/real-object-text.d.ts +0 -15
  141. package/dist/threed/real-object-text.js +0 -66
  142. package/dist/threed/real-object-text.js.map +0 -1
  143. package/dist/threed/real-object.d.ts +0 -65
  144. package/dist/threed/real-object.js +0 -251
  145. package/dist/threed/real-object.js.map +0 -1
  146. package/dist/threed/texture/canvas-texture.d.ts +0 -4
  147. package/dist/threed/texture/canvas-texture.js +0 -49
  148. package/dist/threed/texture/canvas-texture.js.map +0 -1
  149. package/dist/threed/texture/text-texture.d.ts +0 -8
  150. package/dist/threed/texture/text-texture.js +0 -79
  151. package/dist/threed/texture/text-texture.js.map +0 -1
  152. package/dist/threed/three-dimensional-container.d.ts +0 -7
  153. package/dist/threed/three-dimensional-container.js +0 -2
  154. package/dist/threed/three-dimensional-container.js.map +0 -1
  155. package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
  156. package/dist/threed/utils/bound-uv-generator.js +0 -42
  157. package/dist/threed/utils/bound-uv-generator.js.map +0 -1
  158. package/dist/threed/utils/dispose.d.ts +0 -2
  159. package/dist/threed/utils/dispose.js +0 -32
  160. package/dist/threed/utils/dispose.js.map +0 -1
  161. package/dist/wall.d.ts +0 -241
  162. package/dist/wall.js +0 -44
  163. package/dist/wall.js.map +0 -1
@@ -6,11 +6,18 @@ import { OxPropertyEditor, PropertySpec } from '@operato/property-editor';
6
6
  import { Component } from '@hatiolab/things-scene';
7
7
  export default class GLTFInfoEditor extends OxPropertyEditor {
8
8
  static styles: import("lit").CSSResult[];
9
- src?: string;
9
+ src: string | undefined;
10
10
  width: number;
11
11
  height: number;
12
12
  depth: number;
13
+ constructor();
13
14
  editorTemplate(value: any, spec: PropertySpec): TemplateResult;
15
+ private _applyAction;
16
+ /**
17
+ * 현재 컴포넌트의 W/H/D 중 가장 큰 값을 기준으로,
18
+ * 원래 모델의 비율에 맞게 나머지 치수를 조절한다.
19
+ */
20
+ private _applyProportional;
14
21
  updated(changes: PropertyValues<this>): void;
15
22
  fetchSourceInfo(component: Component, src: string): Promise<unknown>;
16
23
  }
@@ -35,16 +35,23 @@ let GLTFInfoEditor = class GLTFInfoEditor extends OxPropertyEditor {
35
35
  font-weight: bold;
36
36
  }
37
37
 
38
- div[info] md-elevated-button {
38
+ .buttons {
39
+ display: flex;
40
+ gap: 4px;
39
41
  margin-left: auto;
42
+ }
43
+
44
+ .buttons md-elevated-button {
40
45
  --md-icon-size: 24px;
41
46
  }
42
47
  `
43
48
  ];
44
- src;
45
- width = 0;
46
- height = 0;
47
- depth = 0;
49
+ constructor() {
50
+ super();
51
+ this.width = 0;
52
+ this.height = 0;
53
+ this.depth = 0;
54
+ }
48
55
  editorTemplate(value, spec) {
49
56
  const valid = this.width && this.height && this.depth;
50
57
  var property = spec.property || {};
@@ -58,32 +65,81 @@ let GLTFInfoEditor = class GLTFInfoEditor extends OxPropertyEditor {
58
65
  <div label>[W x H x D] :</div>
59
66
  ${valid
60
67
  ? html ` <div value>${this.width} x ${this.height} x ${this.depth}</div>
61
- <md-elevated-button
62
- @click=${(e) => {
63
- this.dispatchEvent(new CustomEvent('i-need-selected', {
64
- bubbles: true,
65
- composed: true,
66
- detail: {
67
- callback: (selected) => {
68
- typeof action === 'function' &&
69
- action(selected[0], {
70
- width: this.width,
71
- height: this.height,
72
- depth: this.depth
73
- });
74
- }
75
- }
76
- }));
68
+ <div class="buttons">
69
+ <md-elevated-button
70
+ title="원래 크기로 설정"
71
+ @click=${() => {
72
+ this._applyAction(action, {
73
+ width: this.width,
74
+ height: this.height,
75
+ depth: this.depth
76
+ });
77
77
  }}
78
- >
79
- <md-icon>autorenew</md-icon>
80
- </md-elevated-button>`
78
+ >
79
+ <md-icon>autorenew</md-icon>
80
+ </md-elevated-button>
81
+ <md-elevated-button
82
+ title="현재 크기에 비율 맞춤"
83
+ @click=${() => this._applyProportional(action)}
84
+ >
85
+ <md-icon>aspect_ratio</md-icon>
86
+ </md-elevated-button>
87
+ </div>`
81
88
  : html ` <div></div> `}
82
89
  </div>
83
90
  </div>
84
91
  </fieldset>
85
92
  `;
86
93
  }
94
+ _applyAction(action, dimension) {
95
+ this.dispatchEvent(new CustomEvent('i-need-selected', {
96
+ bubbles: true,
97
+ composed: true,
98
+ detail: {
99
+ callback: (selected) => {
100
+ typeof action === 'function' && action(selected[0], dimension);
101
+ }
102
+ }
103
+ }));
104
+ }
105
+ /**
106
+ * 현재 컴포넌트의 W/H/D 중 가장 큰 값을 기준으로,
107
+ * 원래 모델의 비율에 맞게 나머지 치수를 조절한다.
108
+ */
109
+ _applyProportional(action) {
110
+ this.dispatchEvent(new CustomEvent('i-need-selected', {
111
+ bubbles: true,
112
+ composed: true,
113
+ detail: {
114
+ callback: (selected) => {
115
+ const component = selected[0];
116
+ if (!component || typeof action !== 'function')
117
+ return;
118
+ const { width: cw = 1, height: ch = 1, depth: cd = 1 } = component.state;
119
+ const { width: ow, height: oh, depth: od } = this; // 원래 모델 치수
120
+ if (!ow || !oh || !od)
121
+ return;
122
+ // 현재 치수 중 가장 큰 값과, 그에 대응하는 원래 모델 치수로 scale 계산
123
+ const maxCurrent = Math.max(cw, ch, cd);
124
+ let scale;
125
+ if (maxCurrent === cw) {
126
+ scale = cw / ow;
127
+ }
128
+ else if (maxCurrent === ch) {
129
+ scale = ch / oh;
130
+ }
131
+ else {
132
+ scale = cd / od;
133
+ }
134
+ action(component, {
135
+ width: Math.round(ow * scale),
136
+ height: Math.round(oh * scale),
137
+ depth: Math.round(od * scale)
138
+ });
139
+ }
140
+ }
141
+ }));
142
+ }
87
143
  updated(changes) {
88
144
  if (changes.has('src')) {
89
145
  this.dispatchEvent(new CustomEvent('i-need-selected', {
@@ -1 +1 @@
1
- {"version":3,"file":"property-editor-gltf-info.js","sourceRoot":"","sources":["../../src/editors/property-editor-gltf-info.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@operato/i18n/ox-i18n.js'\n\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxPropertyEditor, PropertySpec } from '@operato/property-editor'\nimport { Component } from '@hatiolab/things-scene'\n\nimport * as THREE from 'three'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\n\nconst EXT_SPECGLOSS = 'KHR_materials_pbrSpecularGlossiness'\n\nclass SpecGlossCompat {\n name = EXT_SPECGLOSS\n extendMaterialParams() {\n return Promise.resolve()\n }\n}\n\nfunction registerSpecGlossCompat(loader: GLTFLoader) {\n loader.register(() => new SpecGlossCompat())\n}\n\n@customElement('property-editor-gltf-info')\nexport default class GLTFInfoEditor extends OxPropertyEditor {\n static styles = [\n ...OxPropertyEditor.styles,\n css`\n div[info] {\n display: flex;\n flex-direction: row;\n font-size: 12px;\n }\n\n div[info] * {\n align-self: center;\n }\n\n div[info] title {\n font-weight: bold;\n }\n\n div[info] md-elevated-button {\n margin-left: auto;\n --md-icon-size: 24px;\n }\n `\n ]\n\n @property({ type: String }) src?: string\n\n @state() width: number = 0\n @state() height: number = 0\n @state() depth: number = 0\n\n editorTemplate(value: any, spec: PropertySpec): TemplateResult {\n const valid = this.width && this.height && this.depth\n\n var property = spec.property || {}\n var { action } = property\n\n return html`\n <fieldset fullwidth>\n <legend><ox-i18n msgid=\"label.gltf-info\">GLTF info.</ox-i18n></legend>\n\n <div>\n <div info>\n <div label>[W x H x D] :</div>\n ${valid\n ? html` <div value>${this.width} x ${this.height} x ${this.depth}</div>\n <md-elevated-button\n @click=${(e: MouseEvent) => {\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: {\n callback: (selected: any[]) => {\n typeof action === 'function' &&\n action(selected[0], {\n width: this.width,\n height: this.height,\n depth: this.depth\n })\n }\n }\n })\n )\n }}\n >\n <md-icon>autorenew</md-icon>\n </md-elevated-button>`\n : html` <div></div> `}\n </div>\n </div>\n </fieldset>\n `\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('src')) {\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: {\n callback: async (selected: any[]) => {\n await this.fetchSourceInfo(selected[0], this.src!)\n }\n }\n })\n )\n }\n }\n\n async fetchSourceInfo(component: Component, src: string) {\n if (!src || !src.trim()) {\n return\n }\n\n try {\n const path = component.app.url(src)\n\n let gltfLoader = new GLTFLoader()\n registerSpecGlossCompat(gltfLoader)\n\n gltfLoader.setCrossOrigin('use-credentials')\n\n return new Promise((resolve: any) => {\n gltfLoader.load(path, gltf => {\n var box = new THREE.Box3().setFromObject(gltf.scene)\n var { x, y, z } = box.getSize(new THREE.Vector3())\n\n this.width = Math.floor(x)\n this.depth = Math.floor(y)\n this.height = Math.floor(z)\n\n resolve()\n })\n })\n } catch (e) {\n console.error(e)\n return\n }\n }\n}\n"]}
1
+ {"version":3,"file":"property-editor-gltf-info.js","sourceRoot":"","sources":["../../src/editors/property-editor-gltf-info.ts"],"names":[],"mappings":"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","sourcesContent":["import '@material/web/icon/icon.js'\nimport '@material/web/button/elevated-button.js'\nimport '@operato/i18n/ox-i18n.js'\n\nimport { css, html, PropertyValues, TemplateResult } from 'lit'\nimport { customElement, property, state } from 'lit/decorators.js'\n\nimport { OxPropertyEditor, PropertySpec } from '@operato/property-editor'\nimport { Component } from '@hatiolab/things-scene'\n\nimport * as THREE from 'three'\nimport { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js'\n\nconst EXT_SPECGLOSS = 'KHR_materials_pbrSpecularGlossiness'\n\nclass SpecGlossCompat {\n name = EXT_SPECGLOSS\n extendMaterialParams() {\n return Promise.resolve()\n }\n}\n\nfunction registerSpecGlossCompat(loader: GLTFLoader) {\n loader.register(() => new SpecGlossCompat())\n}\n\n@customElement('property-editor-gltf-info')\nexport default class GLTFInfoEditor extends OxPropertyEditor {\n static styles = [\n ...OxPropertyEditor.styles,\n css`\n div[info] {\n display: flex;\n flex-direction: row;\n font-size: 12px;\n }\n\n div[info] * {\n align-self: center;\n }\n\n div[info] title {\n font-weight: bold;\n }\n\n .buttons {\n display: flex;\n gap: 4px;\n margin-left: auto;\n }\n\n .buttons md-elevated-button {\n --md-icon-size: 24px;\n }\n `\n ]\n\n @property({ type: String }) declare src: string | undefined\n\n @state() declare width: number\n @state() declare height: number\n @state() declare depth: number\n\n constructor() {\n super()\n this.width = 0\n this.height = 0\n this.depth = 0\n }\n\n editorTemplate(value: any, spec: PropertySpec): TemplateResult {\n const valid = this.width && this.height && this.depth\n\n var property = spec.property || {}\n var { action } = property\n\n return html`\n <fieldset fullwidth>\n <legend><ox-i18n msgid=\"label.gltf-info\">GLTF info.</ox-i18n></legend>\n\n <div>\n <div info>\n <div label>[W x H x D] :</div>\n ${valid\n ? html` <div value>${this.width} x ${this.height} x ${this.depth}</div>\n <div class=\"buttons\">\n <md-elevated-button\n title=\"원래 크기로 설정\"\n @click=${() => {\n this._applyAction(action, {\n width: this.width,\n height: this.height,\n depth: this.depth\n })\n }}\n >\n <md-icon>autorenew</md-icon>\n </md-elevated-button>\n <md-elevated-button\n title=\"현재 크기에 비율 맞춤\"\n @click=${() => this._applyProportional(action)}\n >\n <md-icon>aspect_ratio</md-icon>\n </md-elevated-button>\n </div>`\n : html` <div></div> `}\n </div>\n </div>\n </fieldset>\n `\n }\n\n private _applyAction(action: any, dimension: { width: number; height: number; depth: number }) {\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: {\n callback: (selected: any[]) => {\n typeof action === 'function' && action(selected[0], dimension)\n }\n }\n })\n )\n }\n\n /**\n * 현재 컴포넌트의 W/H/D 중 가장 큰 값을 기준으로,\n * 원래 모델의 비율에 맞게 나머지 치수를 조절한다.\n */\n private _applyProportional(action: any) {\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: {\n callback: (selected: any[]) => {\n const component = selected[0]\n if (!component || typeof action !== 'function') return\n\n const { width: cw = 1, height: ch = 1, depth: cd = 1 } = component.state\n const { width: ow, height: oh, depth: od } = this // 원래 모델 치수\n\n if (!ow || !oh || !od) return\n\n // 현재 치수 중 가장 큰 값과, 그에 대응하는 원래 모델 치수로 scale 계산\n const maxCurrent = Math.max(cw, ch, cd)\n let scale: number\n\n if (maxCurrent === cw) {\n scale = cw / ow\n } else if (maxCurrent === ch) {\n scale = ch / oh\n } else {\n scale = cd / od\n }\n\n action(component, {\n width: Math.round(ow * scale),\n height: Math.round(oh * scale),\n depth: Math.round(od * scale)\n })\n }\n }\n })\n )\n }\n\n updated(changes: PropertyValues<this>) {\n if (changes.has('src')) {\n this.dispatchEvent(\n new CustomEvent('i-need-selected', {\n bubbles: true,\n composed: true,\n detail: {\n callback: async (selected: any[]) => {\n await this.fetchSourceInfo(selected[0], this.src!)\n }\n }\n })\n )\n }\n }\n\n async fetchSourceInfo(component: Component, src: string) {\n if (!src || !src.trim()) {\n return\n }\n\n try {\n const path = component.app.url(src)\n\n let gltfLoader = new GLTFLoader()\n registerSpecGlossCompat(gltfLoader)\n\n gltfLoader.setCrossOrigin('use-credentials')\n\n return new Promise((resolve: any) => {\n gltfLoader.load(path, gltf => {\n var box = new THREE.Box3().setFromObject(gltf.scene)\n var { x, y, z } = box.getSize(new THREE.Vector3())\n\n this.width = Math.floor(x)\n this.depth = Math.floor(y)\n this.height = Math.floor(z)\n\n resolve()\n })\n })\n } catch (e) {\n console.error(e)\n return\n }\n }\n}\n"]}
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": "10.0.0-beta.1",
5
+ "version": "10.0.0-beta.3",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "module": "dist/index.js",
@@ -63,5 +63,5 @@
63
63
  "prettier --write"
64
64
  ]
65
65
  },
66
- "gitHead": "bb127dd516b9e962fb2d0a24bc2d8c5e108f06fb"
66
+ "gitHead": "11790eeafaf6b7949e2f44e2ae670c0364c3a47d"
67
67
  }
package/dist/banner.d.ts DELETED
@@ -1,244 +0,0 @@
1
- import * as THREE from 'three';
2
- import { Component, ComponentNature, Shape, RealObject } from '@hatiolab/things-scene';
3
- export declare class Banner3D extends RealObject {
4
- build(): void;
5
- createCube(w: number, h: number, d: number): THREE.Mesh<THREE.BoxGeometry, THREE.MeshStandardMaterial, THREE.Object3DEventMap>;
6
- createTextureBoard(w: number, h: number): THREE.Mesh<THREE.PlaneGeometry, THREE.MeshStandardMaterial, THREE.Object3DEventMap>;
7
- }
8
- declare const Banner_base: (new (...args: any[]) => {
9
- contains(x: any, y: any): boolean;
10
- get path(): {
11
- x: any;
12
- y: any;
13
- }[];
14
- set path(path: {
15
- x: any;
16
- y: any;
17
- }[]): any;
18
- get anchors(): {
19
- name: string;
20
- position: {
21
- x: any;
22
- y: any;
23
- };
24
- }[];
25
- get bounds(): any;
26
- set bounds(bounds: any): any;
27
- render(ctx: any): void;
28
- _app: any;
29
- _model: any;
30
- _state: any;
31
- _delta: any;
32
- _animation: any;
33
- _animate: any;
34
- _parent: any;
35
- _disposed: any;
36
- _textHidden: any;
37
- _text_substitutor: any;
38
- _value_substitutor: any;
39
- _mappings: any;
40
- _realObject: import("@hatiolab/things-scene").IRealObject | undefined;
41
- _cachedState: any;
42
- updatedAt: any;
43
- fontSize: any;
44
- __cache__: any;
45
- created(): void;
46
- added(parent: any): void;
47
- removed(parent: any): void;
48
- ready(): Promise<void>;
49
- touch(): void;
50
- clearCache(...attrs: any[]): void;
51
- removeSelf(completely: any): void;
52
- resetAnimation(): void;
53
- dispose(): void;
54
- get nature(): import("@hatiolab/things-scene").ComponentNature;
55
- get disposed(): boolean;
56
- isLayer(): boolean;
57
- isGroup(): boolean;
58
- isContainer(): this is import("@hatiolab/things-scene/dist-types/types/component").Container;
59
- isLine(): boolean;
60
- isRoot(): boolean;
61
- isRootModel(): boolean;
62
- is3dish(): boolean;
63
- isIn3DSpace(): boolean;
64
- isTemplate(): boolean;
65
- isHTMLElement(): boolean;
66
- isConnectable(): boolean;
67
- isIdentifiable(): boolean;
68
- isPositionable(): boolean;
69
- replaceRefids(replaceMap: any): void;
70
- get(property: any): any;
71
- set(props: any, propval?: any): any;
72
- getState(property: any): any;
73
- setState(props: any, propval?: any): any;
74
- get model(): any;
75
- get state(): any;
76
- get hierarchy(): any;
77
- get volatile(): never[];
78
- _applyProps(target: any, props: any, options: any): any;
79
- move(offset: {
80
- x: number;
81
- y: number;
82
- }, ...args: boolean[]): void;
83
- symmetryX(x?: number): void;
84
- symmetryY(y: number): void;
85
- adjustResize(bounds: import("@hatiolab/things-scene").BOUNDS, origin_bounds: import("@hatiolab/things-scene").BOUNDS, diagonal: boolean): any;
86
- adjustRotation(rotation: number, step: boolean): any;
87
- outline(progress: number): any;
88
- get center(): import("@hatiolab/things-scene").POINT;
89
- set center(p: import("@hatiolab/things-scene").POINT): any;
90
- get location(): import("@hatiolab/things-scene").POINT;
91
- set location(l: import("@hatiolab/things-scene").POINT): any;
92
- get rotate(): import("@hatiolab/things-scene").POINT;
93
- set rotate(r: import("@hatiolab/things-scene").POINT): any;
94
- get dimension(): import("@hatiolab/things-scene").DIMENSION;
95
- set dimension(d: import("@hatiolab/things-scene").DIMENSION): any;
96
- get drawPath(): import("@hatiolab/things-scene").POINT[];
97
- get rotatePoint(): import("@hatiolab/things-scene").POINT;
98
- get mutable(): boolean;
99
- get resizable(): boolean;
100
- get rotatable(): boolean;
101
- buildRealObject(): import("@hatiolab/things-scene").IRealObject | undefined;
102
- get realObject(): import("@hatiolab/things-scene").IRealObject | undefined;
103
- draw(context?: import("@hatiolab/things-scene").SceneRenderContext): void;
104
- prerender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
105
- postrender(context: import("@hatiolab/things-scene").SceneRenderContext): void;
106
- prepare(resolve: (component: Component) => void, reject: (reason: any) => void): void;
107
- prepareIf(condition: boolean): void;
108
- drawText(context: import("@hatiolab/things-scene").SceneRenderContext): void;
109
- drawStroke(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
110
- drawFill(context: import("@hatiolab/things-scene").SceneRenderContext, override?: Record<string, unknown>): void;
111
- get strokeStyle(): any;
112
- set strokeStyle(v: any): any;
113
- get fillStyle(): any;
114
- set fillStyle(v: any): any;
115
- get fontColor(): string;
116
- set fontColor(v: string): any;
117
- get rotation(): number;
118
- set rotation(v: number): any;
119
- get decorators(): string[];
120
- get decotag(): string;
121
- get hidden(): boolean;
122
- set hidden(v: boolean): any;
123
- get tag(): string;
124
- set tag(v: string): any;
125
- get appendum(): any;
126
- set appendum(v: any): any;
127
- defaultTextSubstitutor(): any;
128
- textLines(context?: import("@hatiolab/things-scene").SceneRenderContext): any;
129
- get font(): string;
130
- get lineHeight(): number;
131
- get textSubstitutor(): () => string;
132
- get text(): string;
133
- set text(v: string): any;
134
- get textBounds(): import("@hatiolab/things-scene").BOUNDS;
135
- get textRotation(): number;
136
- get textHidden(): boolean;
137
- set textHidden(v: boolean): any;
138
- get hasTextProperty(): boolean;
139
- animate(opts: import("@hatiolab/things-scene/dist-types/animation/interfaces").AnimationConfig): any;
140
- effect(context: import("@hatiolab/things-scene").SceneRenderContext, model: any): any;
141
- serialize(...others: any[]): any;
142
- trim(): void;
143
- closeScene(data: any): void;
144
- delta(attr?: string | object, value?: any): any;
145
- invalidate(): void;
146
- get value(): any;
147
- set value(v: any): any;
148
- get data(): any;
149
- set data(v: any): any;
150
- set tap(v: any): any;
151
- get mappings(): any[];
152
- get retention(): number;
153
- get animation(): import("@hatiolab/things-scene/dist-types/animation/interfaces").AnimationController | undefined;
154
- get started(): boolean;
155
- set started(v: boolean): any;
156
- get controls(): import("@hatiolab/things-scene").Control[] | undefined;
157
- findFirst(finder: string | ((c: Component) => boolean), ...others: any[]): any;
158
- findAll(s: string | ((c: Component) => boolean), ...others: any[]): any;
159
- capture(x: number, y: number, except?: (c: Component) => boolean): any;
160
- findAnchor(name: string): any;
161
- isDescendible(container: Component): any;
162
- getContext(component?: unknown): any;
163
- get root(): Component;
164
- get rootModel(): Component;
165
- get parent(): Component;
166
- set parent(v: Component): any;
167
- get scalable(): boolean;
168
- get stuck(): boolean;
169
- get capturable(): boolean;
170
- get position(): string;
171
- get origin(): string;
172
- get offset(): import("@hatiolab/things-scene").POINT;
173
- get app(): import("@hatiolab/things-scene").ApplicationContext;
174
- drawEffect(context: import("@hatiolab/things-scene").SceneRenderContext): void;
175
- prepareFill(resolve: Function, reject: Function): void;
176
- prepareFillIf(condition: boolean): void;
177
- onchangeFill(after: Record<string, any>, before: Record<string, any>): void;
178
- drawImage(context: import("@hatiolab/things-scene").SceneRenderContext, image: HTMLImageElement, left: number, top: number, width: number, height: number): void;
179
- mutateBounds(logic: ((bounds: import("@hatiolab/things-scene").BOUNDS) => import("@hatiolab/things-scene").BOUNDS | void) | null, context?: any): void;
180
- mutatePath(beforeLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, afterLogic: ((path: import("@hatiolab/things-scene").POINT[]) => import("@hatiolab/things-scene").POINT[] | void) | null, context?: any): void;
181
- access(accessor: string, data: any): any;
182
- substitute(template: string, data: any): any;
183
- onchangeMappings(after: Record<string, any>, before: Record<string, any>): void;
184
- onchangeData(after: Record<string, any>, before: Record<string, any>): void;
185
- buildMappings(): void;
186
- executeMappings(force?: boolean): void;
187
- disposeMappings(): void;
188
- ondropfile(transfered: FileList, files: string[]): void;
189
- transcoordS2P(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
190
- transcoordP2S(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
191
- transcoordS2T(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
192
- transcoordT2P(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
193
- transcoordT2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
194
- transcoordS2TR(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
195
- transcoordS2O(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
196
- transcoordC2S(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
197
- transcoordS2C(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
198
- toParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
199
- fromParent(x: number, y: number, rp?: import("@hatiolab/things-scene").POINT): import("@hatiolab/things-scene").POINT;
200
- toScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
201
- fromScene(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
202
- toLocal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
203
- toGlobal(x: number, y: number, top?: Component): import("@hatiolab/things-scene").POINT;
204
- toOther(x: number, y: number, target: Component): import("@hatiolab/things-scene").POINT;
205
- on(name: string | object, callback: Function, context?: any): any;
206
- off(name?: string | object, callback?: Function, context?: any): any;
207
- once(name: string | object, callback: Function, context?: any): any;
208
- trigger(name: string, ...args: any[]): any;
209
- delegate_on(delegator: any): any;
210
- delegate_off(delegator: any): any;
211
- onchange(after: Record<string, any>, before: Record<string, any>): void;
212
- calculateBounds?(): void;
213
- oncreate_element?(element: HTMLElement): void;
214
- removeComponent(component: Component, ghost?: boolean): void;
215
- addComponent(component: Component, ghost?: boolean): void;
216
- insertComponentAt(component: Component, index: number, ghost?: boolean): void;
217
- getOverlay(component: Component): HTMLElement | undefined;
218
- findById(id: string): Component | undefined;
219
- findByRefid(ref: string | number): Component | undefined;
220
- findAllById(id: string): Component[];
221
- resize(): void;
222
- fit(type?: string): void;
223
- get components(): Component[] | undefined;
224
- get layout(): any;
225
- get auxOverlay(): HTMLElement | undefined;
226
- get isReady(): boolean;
227
- get unitScale(): number;
228
- get selected(): Component[];
229
- set selected(_v: Component[]): any;
230
- get focused(): Component | null;
231
- set focused(_v: Component | null): any;
232
- get hasSameParentForAllSelected(): boolean;
233
- set hasSameParentForAllSelected(_v: boolean): any;
234
- get fitMode(): string | undefined;
235
- set fitMode(_v: string | undefined): any;
236
- get element(): HTMLElement | null;
237
- set element(_v: HTMLElement | null): any;
238
- }) & typeof Shape;
239
- export declare class Banner extends Banner_base {
240
- is3dish(): boolean;
241
- get nature(): ComponentNature;
242
- buildRealObject(): RealObject | undefined;
243
- }
244
- export {};
package/dist/banner.js DELETED
@@ -1,75 +0,0 @@
1
- import { __decorate } from "tslib";
2
- /*
3
- * Copyright © HatioLab Inc. All rights reserved.
4
- */
5
- import * as THREE from 'three';
6
- import { RectPath, Shape, sceneComponent, RealObject } from '@hatiolab/things-scene';
7
- const NATURE = {
8
- mutable: false,
9
- resizable: true,
10
- rotatable: true,
11
- properties: [
12
- {
13
- type: 'color',
14
- label: 'box-color',
15
- name: 'boxColor',
16
- property: 'boxColor'
17
- }
18
- ],
19
- help: 'scene/component/banner'
20
- };
21
- export class Banner3D extends RealObject {
22
- build() {
23
- super.build();
24
- var { width = 1, height = 1, depth = 1 } = this.component.state;
25
- this.object3d.add(this.createCube(width, height, depth));
26
- let textureBoard = this.createTextureBoard(width, depth);
27
- textureBoard.position.set(0, 0, 0.5 * height + 1);
28
- this.object3d.add(textureBoard);
29
- }
30
- createCube(w, h, d) {
31
- var { boxColor = '#ccaa76' } = this.component.state;
32
- var geometry = new THREE.BoxGeometry(w, d, h);
33
- var material = new THREE.MeshStandardMaterial({
34
- color: boxColor,
35
- side: THREE.FrontSide
36
- });
37
- var cube = new THREE.Mesh(geometry, material);
38
- cube.castShadow = true;
39
- return cube;
40
- }
41
- createTextureBoard(w, h) {
42
- var boardMaterial;
43
- let { fillStyle = '#ccaa76' } = this.component.state;
44
- const texture = RealObject.buildFillStyleTexture(this.component);
45
- if (texture) {
46
- boardMaterial = new THREE.MeshStandardMaterial({ map: texture });
47
- }
48
- else {
49
- boardMaterial = new THREE.MeshStandardMaterial({
50
- color: fillStyle || '#ccaa76',
51
- side: THREE.FrontSide
52
- });
53
- }
54
- var boardGeometry = new THREE.PlaneGeometry(w, h, 1, 1);
55
- var boardMesh = new THREE.Mesh(boardGeometry, boardMaterial);
56
- boardMesh.castShadow = true;
57
- return boardMesh;
58
- }
59
- }
60
- let Banner = class Banner extends RectPath(Shape) {
61
- is3dish() {
62
- return true;
63
- }
64
- get nature() {
65
- return NATURE;
66
- }
67
- buildRealObject() {
68
- return new Banner3D(this);
69
- }
70
- };
71
- Banner = __decorate([
72
- sceneComponent('banner')
73
- ], Banner);
74
- export { Banner };
75
- //# sourceMappingURL=banner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\nimport * as THREE from 'three'\nimport { Component, ComponentNature, RectPath, Shape, sceneComponent, RealObject, RealObjectMesh } from '@hatiolab/things-scene'\n\nconst NATURE: ComponentNature = {\n mutable: false,\n resizable: true,\n rotatable: true,\n properties: [\n {\n type: 'color',\n label: 'box-color',\n name: 'boxColor',\n property: 'boxColor'\n }\n ],\n help: 'scene/component/banner'\n}\n\nexport class Banner3D extends RealObject {\n build() {\n super.build()\n\n var { width = 1, height = 1, depth = 1 } = this.component.state\n\n this.object3d.add(this.createCube(width, height, depth))\n\n let textureBoard = this.createTextureBoard(width, depth)\n textureBoard.position.set(0, 0, 0.5 * height + 1)\n this.object3d.add(textureBoard)\n }\n\n createCube(w: number, h: number, d: number) {\n var { boxColor = '#ccaa76' } = this.component.state\n\n var geometry = new THREE.BoxGeometry(w, d, h)\n var material = new THREE.MeshStandardMaterial({\n color: boxColor,\n side: THREE.FrontSide\n })\n\n var cube = new THREE.Mesh(geometry, material)\n cube.castShadow = true\n\n return cube\n }\n\n createTextureBoard(w: number, h: number) {\n var boardMaterial\n\n let { fillStyle = '#ccaa76' } = this.component.state\n const texture = RealObject.buildFillStyleTexture(this.component)\n\n if (texture) {\n boardMaterial = new THREE.MeshStandardMaterial({ map: texture })\n } else {\n boardMaterial = new THREE.MeshStandardMaterial({\n color: fillStyle || '#ccaa76',\n side: THREE.FrontSide\n })\n }\n\n var boardGeometry = new THREE.PlaneGeometry(w, h, 1, 1)\n var boardMesh = new THREE.Mesh(boardGeometry, boardMaterial)\n boardMesh.castShadow = true\n\n return boardMesh\n }\n}\n\n@sceneComponent('banner')\nexport class Banner extends RectPath(Shape) {\n is3dish() {\n return true\n }\n\n get nature() {\n return NATURE\n }\n\n buildRealObject(): RealObject | undefined {\n return new Banner3D(this as any)\n }\n}\n"]}