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

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 (181) hide show
  1. package/dist/banner.d.ts +232 -3
  2. package/dist/banner.js +1 -2
  3. package/dist/banner.js.map +1 -1
  4. package/dist/camera.d.ts +232 -3
  5. package/dist/camera.js +1 -2
  6. package/dist/camera.js.map +1 -1
  7. package/dist/carrier.d.ts +263 -0
  8. package/dist/carrier.js +272 -0
  9. package/dist/carrier.js.map +1 -0
  10. package/dist/cube.d.ts +232 -4
  11. package/dist/cube.js +1 -2
  12. package/dist/cube.js.map +1 -1
  13. package/dist/cylinder.d.ts +1 -3
  14. package/dist/cylinder.js +1 -2
  15. package/dist/cylinder.js.map +1 -1
  16. package/dist/desk.d.ts +238 -3
  17. package/dist/desk.js +1 -2
  18. package/dist/desk.js.map +1 -1
  19. package/dist/editors/index.d.ts +1 -0
  20. package/dist/editors/index.js +5 -0
  21. package/dist/editors/index.js.map +1 -1
  22. package/dist/editors/property-editor-gltf-fill-targets.d.ts +17 -0
  23. package/dist/editors/property-editor-gltf-fill-targets.js +211 -0
  24. package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -0
  25. package/dist/editors/property-editor-gltf-info.js +38 -29
  26. package/dist/editors/property-editor-gltf-info.js.map +1 -1
  27. package/dist/editors/property-editor-location-increase-pattern.js +91 -95
  28. package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
  29. package/dist/effects/outline.js +1 -1
  30. package/dist/effects/outline.js.map +1 -1
  31. package/dist/ellipse.js +2 -4
  32. package/dist/ellipse.js.map +1 -1
  33. package/dist/gltf-object.d.ts +232 -3
  34. package/dist/gltf-object.js +1 -2
  35. package/dist/gltf-object.js.map +1 -1
  36. package/dist/html-overlay-element.js +3 -7
  37. package/dist/html-overlay-element.js.map +1 -1
  38. package/dist/index.d.ts +5 -17
  39. package/dist/index.js +7 -17
  40. package/dist/index.js.map +1 -1
  41. package/dist/light.d.ts +1 -2
  42. package/dist/light.js +1 -2
  43. package/dist/light.js.map +1 -1
  44. package/dist/polygon.js +2 -4
  45. package/dist/polygon.js.map +1 -1
  46. package/dist/rack-table-3d.d.ts +16 -0
  47. package/dist/rack-table-3d.js +94 -0
  48. package/dist/rack-table-3d.js.map +1 -0
  49. package/dist/rack-table-cell.d.ts +238 -3
  50. package/dist/rack-table-cell.js +44 -51
  51. package/dist/rack-table-cell.js.map +1 -1
  52. package/dist/rack-table-location.d.ts +37 -0
  53. package/dist/rack-table-location.js +227 -0
  54. package/dist/rack-table-location.js.map +1 -0
  55. package/dist/rack-table.d.ts +13 -29
  56. package/dist/rack-table.js +108 -380
  57. package/dist/rack-table.js.map +1 -1
  58. package/dist/rack.d.ts +3 -5
  59. package/dist/rack.js +7 -9
  60. package/dist/rack.js.map +1 -1
  61. package/dist/rect.js +2 -4
  62. package/dist/rect.js.map +1 -1
  63. package/dist/signal-tower.d.ts +492 -0
  64. package/dist/signal-tower.js +275 -0
  65. package/dist/signal-tower.js.map +1 -0
  66. package/dist/sphere.d.ts +1 -3
  67. package/dist/sphere.js +1 -2
  68. package/dist/sphere.js.map +1 -1
  69. package/dist/sprite.d.ts +232 -3
  70. package/dist/sprite.js +1 -2
  71. package/dist/sprite.js.map +1 -1
  72. package/dist/stock.d.ts +22 -10
  73. package/dist/stock.js +130 -109
  74. package/dist/stock.js.map +1 -1
  75. package/dist/tank.d.ts +492 -0
  76. package/dist/tank.js +312 -0
  77. package/dist/tank.js.map +1 -0
  78. package/dist/templates/carrier.d.ts +19 -0
  79. package/dist/templates/carrier.js +20 -0
  80. package/dist/templates/carrier.js.map +1 -0
  81. package/dist/templates/cube.js +1 -1
  82. package/dist/templates/cube.js.map +1 -1
  83. package/dist/templates/cylinder.js +3 -3
  84. package/dist/templates/cylinder.js.map +1 -1
  85. package/dist/templates/index.d.ts +1 -0
  86. package/dist/templates/index.js +9 -1
  87. package/dist/templates/index.js.map +1 -1
  88. package/dist/templates/signal-tower.d.ts +21 -0
  89. package/dist/templates/signal-tower.js +22 -0
  90. package/dist/templates/signal-tower.js.map +1 -0
  91. package/dist/templates/sphere.d.ts +1 -0
  92. package/dist/templates/sphere.js +5 -4
  93. package/dist/templates/sphere.js.map +1 -1
  94. package/dist/templates/tank.d.ts +21 -0
  95. package/dist/templates/tank.js +22 -0
  96. package/dist/templates/tank.js.map +1 -0
  97. package/dist/templates/vehicle.d.ts +19 -0
  98. package/dist/templates/vehicle.js +20 -0
  99. package/dist/templates/vehicle.js.map +1 -0
  100. package/dist/text.js +2 -4
  101. package/dist/text.js.map +1 -1
  102. package/dist/three-container.d.ts +11 -35
  103. package/dist/three-container.js +128 -322
  104. package/dist/three-container.js.map +1 -1
  105. package/dist/three-controls.d.ts +101 -1
  106. package/dist/three-controls.js +339 -541
  107. package/dist/three-controls.js.map +1 -1
  108. package/dist/three-space.d.ts +6 -83
  109. package/dist/three-space.js +25 -537
  110. package/dist/three-space.js.map +1 -1
  111. package/dist/threed/index.d.ts +1 -0
  112. package/dist/threed/index.js +1 -0
  113. package/dist/threed/index.js.map +1 -1
  114. package/dist/threed/interfaces.d.ts +15 -0
  115. package/dist/threed/interfaces.js +5 -0
  116. package/dist/threed/interfaces.js.map +1 -0
  117. package/dist/threed/managers/camera-manager.d.ts +14 -0
  118. package/dist/threed/managers/camera-manager.js +60 -0
  119. package/dist/threed/managers/camera-manager.js.map +1 -0
  120. package/dist/threed/managers/controls-manager.d.ts +50 -0
  121. package/dist/threed/managers/controls-manager.js +249 -0
  122. package/dist/threed/managers/controls-manager.js.map +1 -0
  123. package/dist/threed/managers/event-manager3d.d.ts +19 -0
  124. package/dist/threed/managers/event-manager3d.js +76 -0
  125. package/dist/threed/managers/event-manager3d.js.map +1 -0
  126. package/dist/threed/managers/index.d.ts +7 -0
  127. package/dist/threed/managers/index.js +7 -0
  128. package/dist/threed/managers/index.js.map +1 -0
  129. package/dist/threed/managers/light-manager.d.ts +7 -0
  130. package/dist/threed/managers/light-manager.js +37 -0
  131. package/dist/threed/managers/light-manager.js.map +1 -0
  132. package/dist/threed/managers/renderer-manager.d.ts +30 -0
  133. package/dist/threed/managers/renderer-manager.js +120 -0
  134. package/dist/threed/managers/renderer-manager.js.map +1 -0
  135. package/dist/threed/managers/scene-manager.d.ts +15 -0
  136. package/dist/threed/managers/scene-manager.js +48 -0
  137. package/dist/threed/managers/scene-manager.js.map +1 -0
  138. package/dist/threed/managers/types.d.ts +36 -0
  139. package/dist/threed/managers/types.js +2 -0
  140. package/dist/threed/managers/types.js.map +1 -0
  141. package/dist/threed/real-object-dom-element.js +11 -3
  142. package/dist/threed/real-object-dom-element.js.map +1 -1
  143. package/dist/threed/real-object-extrude.d.ts +1 -0
  144. package/dist/threed/real-object-extrude.js +7 -0
  145. package/dist/threed/real-object-extrude.js.map +1 -1
  146. package/dist/threed/real-object-gltf.js +6 -2
  147. package/dist/threed/real-object-gltf.js.map +1 -1
  148. package/dist/threed/real-object-mesh.js +4 -6
  149. package/dist/threed/real-object-mesh.js.map +1 -1
  150. package/dist/threed/real-object-registry.d.ts +7 -0
  151. package/dist/threed/real-object-registry.js +32 -0
  152. package/dist/threed/real-object-registry.js.map +1 -0
  153. package/dist/threed/real-object-scene.js +10 -5
  154. package/dist/threed/real-object-scene.js.map +1 -1
  155. package/dist/threed/real-object-sprite-2d.js.map +1 -1
  156. package/dist/threed/real-object-sprite.js +2 -0
  157. package/dist/threed/real-object-sprite.js.map +1 -1
  158. package/dist/threed/real-object-text.js +2 -0
  159. package/dist/threed/real-object-text.js.map +1 -1
  160. package/dist/threed/real-object.d.ts +3 -2
  161. package/dist/threed/real-object.js +7 -16
  162. package/dist/threed/real-object.js.map +1 -1
  163. package/dist/threed/three-dimensional-container.d.ts +1 -2
  164. package/dist/threed/three-dimensional-container.js.map +1 -1
  165. package/dist/threed/utils/dispose.d.ts +2 -0
  166. package/dist/threed/utils/dispose.js +32 -0
  167. package/dist/threed/utils/dispose.js.map +1 -0
  168. package/dist/vehicle.d.ts +248 -0
  169. package/dist/vehicle.js +133 -0
  170. package/dist/vehicle.js.map +1 -0
  171. package/dist/visualizer.d.ts +4 -5
  172. package/dist/visualizer.js +15 -28
  173. package/dist/visualizer.js.map +1 -1
  174. package/dist/wall.d.ts +232 -4
  175. package/dist/wall.js +1 -2
  176. package/dist/wall.js.map +1 -1
  177. package/icons/carrier.png +0 -0
  178. package/icons/signal-tower.png +0 -0
  179. package/icons/tank.png +0 -0
  180. package/icons/vehicle.png +0 -0
  181. package/package.json +16 -18
@@ -2,11 +2,9 @@
2
2
  * Copyright © HatioLab Inc. All rights reserved.
3
3
  */
4
4
  import { __decorate } from "tslib";
5
- import * as THREE from 'three';
6
- import * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';
7
5
  import { Component, ContainerAbstract, Layout, Model, sceneComponent } from '@hatiolab/things-scene';
8
- import { Rack } from './rack.js';
9
- import { RealObjectGroup } from './threed/real-object-group.js';
6
+ import { RackTable3d } from './rack-table-3d.js';
7
+ import { increaseLocation } from './rack-table-location.js';
10
8
  const NATURE = {
11
9
  mutable: false,
12
10
  resizable: true,
@@ -80,6 +78,19 @@ const NATURE = {
80
78
  type: 'checkbox',
81
79
  label: 'hide-rack-frame',
82
80
  name: 'hideRackFrame'
81
+ },
82
+ {
83
+ type: 'id-input',
84
+ label: 'legend-target',
85
+ name: 'legendTarget',
86
+ property: {
87
+ component: 'legend'
88
+ }
89
+ },
90
+ {
91
+ type: 'checkbox',
92
+ label: 'hide-empty-stock',
93
+ name: 'hideEmptyStock'
83
94
  }
84
95
  ],
85
96
  help: 'scene/component/rack-table'
@@ -120,7 +131,7 @@ function buildNewCell(app) {
120
131
  }, app);
121
132
  }
122
133
  function buildCopiedCell(copy, app) {
123
- var obj = JSON.parse(JSON.stringify(copy));
134
+ const obj = JSON.parse(JSON.stringify(copy));
124
135
  delete obj.text;
125
136
  return Model.compile(obj, app);
126
137
  }
@@ -161,29 +172,29 @@ function after(columns, i) {
161
172
  return !((i + 1) % columns) ? -1 : i + 1;
162
173
  }
163
174
  function array(value, size) {
164
- var arr = [];
175
+ const arr = [];
165
176
  for (let i = 0; i < size; i++)
166
177
  arr.push(1);
167
178
  return arr;
168
179
  }
169
- var columnControlHandler = {
180
+ const columnControlHandler = {
170
181
  ondragmove: function (point, index, component) {
171
- var { left, top, width, height } = component.textBounds;
172
- var widths_sum = component.widths_sum;
173
- var widths = component.widths.slice();
182
+ const { left, top, width, height } = component.textBounds;
183
+ const widths_sum = component.widths_sum;
184
+ const widths = component.widths.slice();
174
185
  /* 컨트롤의 원래 위치를 구한다. */
175
- var origin_pos_unit = widths.slice(0, index + 1).reduce((sum, width) => sum + width, 0);
176
- var origin_offset = left + (origin_pos_unit / widths_sum) * width;
186
+ const origin_pos_unit = widths.slice(0, index + 1).reduce((sum, width) => sum + width, 0);
187
+ const origin_offset = left + (origin_pos_unit / widths_sum) * width;
177
188
  /*
178
189
  * point의 좌표는 부모 레이어 기준의 x, y 값이다.
179
190
  * 따라서, 도형의 회전을 감안한 좌표로의 변환이 필요하다.
180
191
  * Transcoord시에는 point좌표가 부모까지 transcoord되어있는 상태이므로,
181
192
  * 컴포넌트자신에 대한 transcoord만 필요하다.(마지막 파라미터를 false로).
182
193
  */
183
- var transcoorded = component.transcoordP2S(point.x, point.y);
184
- var diff = transcoorded.x - origin_offset;
185
- var diff_unit = (diff / width) * widths_sum;
186
- var min_width_unit = (widths_sum / width) * 5; // 5픽셀정도를 최소로
194
+ const transcoorded = component.transcoordP2S(point.x, point.y);
195
+ const diff = transcoorded.x - origin_offset;
196
+ let diff_unit = (diff / width) * widths_sum;
197
+ const min_width_unit = (widths_sum / width) * 5; // 5픽셀정도를 최소로
187
198
  if (diff_unit < 0)
188
199
  diff_unit = -Math.min(widths[index] - min_width_unit, -diff_unit);
189
200
  else
@@ -193,25 +204,25 @@ var columnControlHandler = {
193
204
  component.set('widths', widths);
194
205
  }
195
206
  };
196
- var rowControlHandler = {
207
+ const rowControlHandler = {
197
208
  ondragmove: function (point, index, component) {
198
- var { left, top, width, height } = component.textBounds;
199
- var heights_sum = component.heights_sum;
200
- var heights = component.heights.slice();
209
+ const { left, top, width, height } = component.textBounds;
210
+ const heights_sum = component.heights_sum;
211
+ const heights = component.heights.slice();
201
212
  /* 컨트롤의 원래 위치를 구한다. */
202
213
  index -= component.columns - 1;
203
- var origin_pos_unit = heights.slice(0, index + 1).reduce((sum, height) => sum + height, 0);
204
- var origin_offset = top + (origin_pos_unit / heights_sum) * height;
214
+ const origin_pos_unit = heights.slice(0, index + 1).reduce((sum, height) => sum + height, 0);
215
+ const origin_offset = top + (origin_pos_unit / heights_sum) * height;
205
216
  /*
206
217
  * point의 좌표는 부모 레이어 기준의 x, y 값이다.
207
218
  * 따라서, 도형의 회전을 감안한 좌표로의 변환이 필요하다.
208
219
  * Transcoord시에는 point좌표가 부모까지 transcoord되어있는 상태이므로,
209
220
  * 컴포넌트자신에 대한 transcoord만 필요하다.(마지막 파라미터를 false로).
210
221
  */
211
- var transcoorded = component.transcoordP2S(point.x, point.y);
212
- var diff = transcoorded.y - origin_offset;
213
- var diff_unit = (diff / height) * heights_sum;
214
- var min_height_unit = (heights_sum / height) * 5; // 5픽셀정도를 최소로
222
+ const transcoorded = component.transcoordP2S(point.x, point.y);
223
+ const diff = transcoorded.y - origin_offset;
224
+ let diff_unit = (diff / height) * heights_sum;
225
+ const min_height_unit = (heights_sum / height) * 5; // 5픽셀정도를 최소로
215
226
  if (diff_unit < 0)
216
227
  diff_unit = -Math.min(heights[index] - min_height_unit, -diff_unit);
217
228
  else
@@ -221,99 +232,34 @@ var rowControlHandler = {
221
232
  component.set('heights', heights);
222
233
  }
223
234
  };
224
- export class RackTable3d extends RealObjectGroup {
225
- build() {
226
- super.build();
227
- this.createRacks();
228
- }
229
- get position() {
230
- var { zPos = 0 } = this.component.state;
231
- return {
232
- x: this.cx || 0,
233
- y: zPos,
234
- z: this.cy || 0
235
- };
235
+ let RackTable = class RackTable extends ContainerAbstract {
236
+ _focused_cell;
237
+ // StockMaterialProvider 구현
238
+ _stock_materials = [];
239
+ _default_material;
240
+ _empty_material;
241
+ _legendTarget;
242
+ get legendTarget() {
243
+ const { legendTarget } = this.state;
244
+ if (!this._legendTarget && legendTarget) {
245
+ this._legendTarget = this.root.findById?.(legendTarget);
246
+ this._legendTarget?.on('change', this._onLegendChanged, this);
247
+ }
248
+ return this._legendTarget;
236
249
  }
237
- createRacks() {
238
- var { rotation = 0, shelfLocations, shelves = 1 } = this.component.state;
239
- this.object3d.rotation.y = -rotation;
240
- const racks = this.component.components
241
- .map((cell) => {
242
- let { shelfLocations: shelfLoc = shelfLocations, isEmpty } = cell.state;
243
- if (!isEmpty) {
244
- cell.setState('shelfLocations', shelfLoc);
245
- var rack = new Rack(cell);
246
- rack.update();
247
- this.object3d.add(rack.object3d);
248
- return rack;
249
- }
250
- return;
251
- })
252
- .filter(rack => !!rack);
253
- this.mergeAndAddRackCommonObjects(racks);
250
+ get hideEmptyStock() {
251
+ return !!this.getState('hideEmptyStock');
254
252
  }
255
- mergeAndAddRackCommonObjects(racks) {
256
- var framesGeometries = [];
257
- var boardsGeometries = [];
258
- if (racks.length > 0) {
259
- racks.forEach(rack => {
260
- const geometry = rack.frame;
261
- if (!geometry) {
262
- return;
263
- }
264
- geometry.translate(rack.position.x, rack.position.y, rack.position.z);
265
- geometry.scale(rack.scale.x, rack.scale.y, rack.scale.z);
266
- framesGeometries.push(geometry);
267
- });
268
- if (framesGeometries.length > 0) {
269
- const frameMesh = new THREE.Mesh(BufferGeometryUtils.mergeGeometries(framesGeometries), Rack.frameMaterial);
270
- this.object3d.add(frameMesh);
271
- }
272
- racks.forEach(rack => {
273
- const geometry = rack.board;
274
- if (!geometry) {
275
- return;
276
- }
277
- geometry.translate(rack.position.x, rack.position.y, rack.position.z);
278
- geometry.scale(rack.scale.x, rack.scale.y, rack.scale.z);
279
- boardsGeometries.push(geometry);
280
- });
281
- if (boardsGeometries.length > 0) {
282
- const material = Rack.boardMaterial;
283
- material.opacity = 0.5;
284
- material.transparent = true;
285
- const boardMesh = new THREE.Mesh(BufferGeometryUtils.mergeGeometries(boardsGeometries), material);
286
- this.object3d.add(boardMesh);
287
- }
288
- }
253
+ _onLegendChanged() {
254
+ this._resetMaterials();
255
+ this.invalidate();
289
256
  }
290
- makeShelfString(pattern, shelf, length) {
291
- /**
292
- * pattern #: 숫자
293
- * pattern 0: 고정 자리수
294
- * pattern -: 역순
295
- */
296
- if (!pattern || !shelf || !length)
297
- return;
298
- var isReverse = /^\-/.test(pattern);
299
- pattern = pattern.replace(/#+/, '#');
300
- var fixedLength = (pattern.match(/0/g) || []).length || 0;
301
- var shelfString = String(isReverse ? length - shelf + 1 : shelf);
302
- if (shelfString.length > fixedLength && fixedLength > 0) {
303
- shelfString = shelfString.substring(shelfString.length - fixedLength);
304
- }
305
- else {
306
- var prefix = '';
307
- for (var i = 0; i < fixedLength - shelfString.length; i++) {
308
- prefix += '0';
309
- }
310
- shelfString = prefix + shelfString;
311
- }
312
- return shelfString;
257
+ _resetMaterials() {
258
+ this._stock_materials.forEach(m => m.dispose?.());
259
+ this._stock_materials = [];
260
+ delete this._default_material;
261
+ delete this._empty_material;
313
262
  }
314
- updateAlpha() { }
315
- }
316
- let RackTable = class RackTable extends ContainerAbstract {
317
263
  is3dish() {
318
264
  return true;
319
265
  }
@@ -321,12 +267,15 @@ let RackTable = class RackTable extends ContainerAbstract {
321
267
  return new RackTable3d(this);
322
268
  }
323
269
  dispose() {
270
+ this._legendTarget?.off('change', this._onLegendChanged, this);
271
+ delete this._legendTarget;
272
+ this._resetMaterials();
324
273
  super.dispose();
325
274
  delete this._focused_cell;
326
275
  }
327
276
  created() {
328
- var tobeSize = this.rows * this.columns;
329
- var gap = this.size() - tobeSize;
277
+ const tobeSize = this.rows * this.columns;
278
+ const gap = this.size() - tobeSize;
330
279
  if (gap == 0) {
331
280
  return;
332
281
  }
@@ -340,8 +289,8 @@ let RackTable = class RackTable extends ContainerAbstract {
340
289
  newbies.push(buildNewCell(this.app));
341
290
  this.add(newbies);
342
291
  }
343
- var widths = this.getState('widths');
344
- var heights = this.getState('heights');
292
+ const widths = this.getState('widths');
293
+ const heights = this.getState('heights');
345
294
  if (!widths || widths.length < this.columns)
346
295
  this.set('widths', this.widths);
347
296
  if (!heights || heights.length < this.rows)
@@ -352,7 +301,7 @@ let RackTable = class RackTable extends ContainerAbstract {
352
301
  return false;
353
302
  }
354
303
  get widths() {
355
- var widths = this.getState('widths');
304
+ const widths = this.getState('widths');
356
305
  if (!widths)
357
306
  return array(1, this.columns);
358
307
  if (widths.length < this.columns)
@@ -362,7 +311,7 @@ let RackTable = class RackTable extends ContainerAbstract {
362
311
  return widths;
363
312
  }
364
313
  get heights() {
365
- var heights = this.getState('heights');
314
+ const heights = this.getState('heights');
366
315
  if (!heights)
367
316
  return array(1, this.rows);
368
317
  if (heights.length < this.rows)
@@ -376,7 +325,7 @@ let RackTable = class RackTable extends ContainerAbstract {
376
325
  let removals = this.components.slice(oldcolumns * newrows);
377
326
  this.remove(removals);
378
327
  }
379
- var minrows = Math.min(newrows, oldrows);
328
+ const minrows = Math.min(newrows, oldrows);
380
329
  if (newcolumns > oldcolumns) {
381
330
  for (let r = 0; r < minrows; r++) {
382
331
  for (let c = oldcolumns; c < newcolumns; c++) {
@@ -414,11 +363,11 @@ let RackTable = class RackTable extends ContainerAbstract {
414
363
  return this.getState('rows');
415
364
  }
416
365
  setCellsStyle(cells, style, where) {
417
- var components = this.components;
418
- var total = components.length;
419
- var columns = this.getState('columns');
366
+ const components = this.components;
367
+ const total = components.length;
368
+ const columns = this.getState('columns');
420
369
  // 병합된 셀도 포함시킨다.
421
- var _cells = [];
370
+ const _cells = [];
422
371
  cells.forEach(c => {
423
372
  _cells.push(c);
424
373
  if (c.colspan || c.rowspan) {
@@ -430,9 +379,9 @@ let RackTable = class RackTable extends ContainerAbstract {
430
379
  _cells.push(this.components[i * this.columns + j]);
431
380
  }
432
381
  });
433
- var indices = _cells.map(cell => components.indexOf(cell));
382
+ const indices = _cells.map(cell => components.indexOf(cell));
434
383
  indices.forEach(i => {
435
- var cell = components[i];
384
+ const cell = components[i];
436
385
  switch (where) {
437
386
  case 'all':
438
387
  setCellBorder(cell, style, where);
@@ -531,8 +480,7 @@ let RackTable = class RackTable extends ContainerAbstract {
531
480
  });
532
481
  }
533
482
  getRowColumn(cell) {
534
- var idx = this.components.indexOf(cell);
535
- var length = this.components.length;
483
+ const idx = this.components.indexOf(cell);
536
484
  return {
537
485
  column: idx % this.columns,
538
486
  row: Math.floor(idx / this.columns)
@@ -542,8 +490,8 @@ let RackTable = class RackTable extends ContainerAbstract {
542
490
  return this.components.slice(row * this.columns, (row + 1) * this.columns);
543
491
  }
544
492
  getCellsByColumn(column) {
545
- var cells = [];
546
- for (var i = 0; i < this.rows; i++)
493
+ const cells = [];
494
+ for (let i = 0; i < this.rows; i++)
547
495
  cells.push(this.components[this.columns * i + column]);
548
496
  return cells;
549
497
  }
@@ -560,7 +508,7 @@ let RackTable = class RackTable extends ContainerAbstract {
560
508
  return a - b;
561
509
  });
562
510
  rows.reverse();
563
- var heights = this.heights.slice();
511
+ const heights = this.heights.slice();
564
512
  rows.forEach(row => {
565
513
  this.remove(this.getCellsByRow(row));
566
514
  });
@@ -581,7 +529,7 @@ let RackTable = class RackTable extends ContainerAbstract {
581
529
  });
582
530
  columns.reverse();
583
531
  columns.forEach(column => {
584
- var widths = this.widths.slice();
532
+ const widths = this.widths.slice();
585
533
  this.remove(this.getCellsByColumn(column));
586
534
  widths.splice(column, 1);
587
535
  this.model.columns -= 1; // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.
@@ -729,268 +677,43 @@ let RackTable = class RackTable extends ContainerAbstract {
729
677
  });
730
678
  }
731
679
  distributeHorizontal(cells) {
732
- var columns = [];
680
+ const columns = [];
733
681
  cells.forEach(cell => {
734
682
  let rowcolumn = this.getRowColumn(cell);
735
683
  if (-1 == columns.indexOf(rowcolumn.column))
736
684
  columns.push(rowcolumn.column);
737
685
  });
738
- var sum = columns.reduce((sum, column) => {
686
+ const sum = columns.reduce((sum, column) => {
739
687
  return sum + this.widths[column];
740
688
  }, 0);
741
- var newval = Math.round((sum / columns.length) * 100) / 100;
742
- var widths = this.widths.slice();
689
+ const newval = Math.round((sum / columns.length) * 100) / 100;
690
+ const widths = this.widths.slice();
743
691
  columns.forEach(column => {
744
692
  widths[column] = newval;
745
693
  });
746
694
  this.set('widths', widths);
747
695
  }
748
696
  distributeVertical(cells) {
749
- var rows = [];
697
+ const rows = [];
750
698
  cells.forEach(cell => {
751
699
  let rowcolumn = this.getRowColumn(cell);
752
700
  if (-1 == rows.indexOf(rowcolumn.row))
753
701
  rows.push(rowcolumn.row);
754
702
  });
755
- var sum = rows.reduce((sum, row) => {
703
+ const sum = rows.reduce((sum, row) => {
756
704
  return sum + this.heights[row];
757
705
  }, 0);
758
- var newval = Math.round((sum / rows.length) * 100) / 100;
759
- var heights = this.heights.slice();
706
+ const newval = Math.round((sum / rows.length) * 100) / 100;
707
+ const heights = this.heights.slice();
760
708
  rows.forEach(row => {
761
709
  heights[row] = newval;
762
710
  });
763
711
  this.set('heights', heights);
764
712
  }
765
- /**
766
- * visualizer location setting functions
767
- */
768
713
  increaseLocation(type, skipNumbering, startSection, startUnit) {
769
- /**
770
- * step 1
771
- *
772
- * selected collect rack-cell
773
- */
774
- var selectedCells = this.root.selected;
775
- /**
776
- * step 2
777
- *
778
- * classify cells by row
779
- */
780
- var classified = this.classifyByRow(selectedCells);
781
- /**
782
- * step 3
783
- *
784
- * find aisle
785
- */
786
- var aisleRowIndices = this.getAisleRowIndices(classified);
787
- /**
788
- * step 4
789
- *
790
- * classify cells by section
791
- */
792
- var sections = this.classifyCellsBySection(classified, aisleRowIndices);
793
- /**
794
- * step 5
795
- *
796
- * rearrange by aisle
797
- */
798
- var rearranged = this.rearrangeByAisle(type, sections);
799
- /**
800
- * step 6
801
- *
802
- * if skip numbering, remove empty cells
803
- */
804
- if (skipNumbering)
805
- rearranged = this.removeEmptyCells(rearranged);
806
- /**
807
- * step 7
808
- *
809
- * merge rows
810
- */
811
- var merged = this.mergeRows(rearranged);
812
- /**
813
- * step 8
814
- *
815
- * set location
816
- */
817
- this.setLocations(merged, startSection, startUnit);
818
- }
819
- classifyByRow(cells) {
820
- var classified = [];
821
- cells.forEach(c => {
822
- var index = c.index;
823
- var { row, column } = index;
824
- if (!classified[row]) {
825
- classified[row] = [];
826
- }
827
- classified[row][column] = c;
828
- });
829
- return classified;
830
- }
831
- findAisle(rows) {
832
- if (!rows) {
833
- return [];
834
- }
835
- return rows.filter(r => {
836
- return r[0] && r[0].isAisle;
837
- });
838
- }
839
- getAisleRowIndices(rows) {
840
- var aisles = this.findAisle(rows);
841
- var aisleRowIndices = [];
842
- aisles.forEach(aisle => {
843
- aisleRowIndices.push(rows.indexOf(aisle));
844
- });
845
- return aisleRowIndices;
846
- }
847
- classifyCellsBySection(rows, aisleRowIndices) {
848
- var sections = [];
849
- var wasAisle = false;
850
- var section;
851
- rows.forEach((row, i) => {
852
- var isAisle = aisleRowIndices.indexOf(i) > -1;
853
- if (!(wasAisle || isAisle)) {
854
- section = [];
855
- sections.push(section);
856
- }
857
- wasAisle = isAisle;
858
- section.push(row);
859
- });
860
- return sections;
861
- }
862
- rearrangeByAisle(type, sections) {
863
- var rearranged = [];
864
- switch (type.toLowerCase()) {
865
- case 'cw':
866
- var reverse = false;
867
- sections.forEach((rows, i) => {
868
- var section = [];
869
- rearranged.push(section);
870
- rows.forEach((r, i) => {
871
- if (reverse)
872
- r.reverse();
873
- if (i % 2 === 0) {
874
- section.push(r);
875
- reverse = !reverse;
876
- }
877
- });
878
- });
879
- break;
880
- case 'ccw':
881
- var reverse = true;
882
- sections.forEach((rows, i) => {
883
- var section = [];
884
- rearranged.push(section);
885
- rows.forEach((r, i) => {
886
- if (reverse)
887
- r.reverse();
888
- if (i % 2 === 0) {
889
- section.push(r);
890
- reverse = !reverse;
891
- }
892
- });
893
- });
894
- break;
895
- case 'zigzag':
896
- sections.forEach((rows, i) => {
897
- var section = [];
898
- rows.forEach((r, i) => {
899
- if (i % 2 === 0) {
900
- section.push(r);
901
- }
902
- });
903
- var sectionLength = section.length;
904
- var tempRow = [];
905
- var tempSection = [];
906
- section.forEach((row, rowIdx) => {
907
- row.forEach((cell, idx) => {
908
- tempRow[rowIdx + idx * section.length] = cell;
909
- });
910
- });
911
- var chunkSize = tempRow.length / sectionLength;
912
- for (var idx = 0; idx < sectionLength; idx++) {
913
- tempSection.push(tempRow.slice(idx * chunkSize, (idx + 1) * chunkSize));
914
- }
915
- rearranged.push(tempSection);
916
- });
917
- break;
918
- case 'zigzag-reverse':
919
- sections.forEach((rows, i) => {
920
- var section = [];
921
- rows.forEach((r, i) => {
922
- if (i % 2 === 0) {
923
- r.reverse();
924
- section.push(r);
925
- }
926
- });
927
- var sectionLength = section.length;
928
- var tempRow = [];
929
- var tempSection = [];
930
- section.forEach((row, rowIdx) => {
931
- row.forEach((cell, idx) => {
932
- tempRow[rowIdx + idx * section.length] = cell;
933
- });
934
- });
935
- var chunkSize = tempRow.length / sectionLength;
936
- for (var idx = 0; idx < sectionLength; idx++) {
937
- tempSection.push(tempRow.slice(idx * chunkSize, (idx + 1) * chunkSize));
938
- }
939
- rearranged.push(tempSection);
940
- });
941
- break;
942
- }
943
- return rearranged;
944
- }
945
- removeEmptyCells(sections) {
946
- var newSections = [];
947
- sections.forEach(rows => {
948
- var newRows = [];
949
- newSections.push(newRows);
950
- rows.forEach(row => {
951
- var newRow = [];
952
- newRows.push(newRow);
953
- row.forEach((c, i) => {
954
- if (!c.isEmpty)
955
- newRow.push(c);
956
- });
957
- });
958
- });
959
- return newSections;
960
- }
961
- mergeRows(sections) {
962
- var merged = [];
963
- sections.forEach(section => {
964
- var newSection = [];
965
- section.forEach(rows => {
966
- var mergedRow = [];
967
- rows.forEach(row => {
968
- mergedRow = mergedRow.concat(row);
969
- });
970
- newSection = newSection.concat(mergedRow);
971
- });
972
- merged.push(newSection);
973
- });
974
- return merged;
975
- }
976
- setLocations(sections, startSection, startUnit) {
977
- var { sectionDigits = 2, unitDigits = 2 } = this.state;
978
- var sectionNumber = Number(startSection) || 1;
979
- sections.forEach(section => {
980
- var unitNumber = Number(startUnit) || 1;
981
- section.forEach(c => {
982
- if (!c.isEmpty) {
983
- c.set('section', String(sectionNumber).padStart(sectionDigits, '0'));
984
- c.set('unit', String(unitNumber).padStart(unitDigits, '0'));
985
- }
986
- else {
987
- c.set('section', null);
988
- c.set('unit', null);
989
- }
990
- unitNumber++;
991
- });
992
- sectionNumber++;
993
- });
714
+ const { sectionDigits = 2, unitDigits = 2 } = this.state;
715
+ const selectedCells = this.root.selected;
716
+ increaseLocation(selectedCells, type, skipNumbering, startSection, startUnit, sectionDigits, unitDigits);
994
717
  }
995
718
  get columns() {
996
719
  return this.getState('columns');
@@ -1023,25 +746,25 @@ let RackTable = class RackTable extends ContainerAbstract {
1023
746
  return this.components;
1024
747
  }
1025
748
  get widths_sum() {
1026
- var widths = this.widths;
749
+ const widths = this.widths;
1027
750
  return widths ? widths.filter((width, i) => i < this.columns).reduce((sum, width) => sum + width, 0) : this.columns;
1028
751
  }
1029
752
  get heights_sum() {
1030
- var heights = this.heights;
753
+ const heights = this.heights;
1031
754
  return heights ? heights.filter((height, i) => i < this.rows).reduce((sum, height) => sum + height, 0) : this.rows;
1032
755
  }
1033
756
  get nature() {
1034
757
  return NATURE;
1035
758
  }
1036
759
  get controls() {
1037
- var widths = this.widths;
1038
- var heights = this.heights;
1039
- var inside = this.textBounds;
1040
- var width_unit = inside.width / this.widths_sum;
1041
- var height_unit = inside.height / this.heights_sum;
1042
- var x = inside.left;
1043
- var y = inside.top;
1044
- var controls = [];
760
+ const widths = this.widths;
761
+ const heights = this.heights;
762
+ const inside = this.textBounds;
763
+ const width_unit = inside.width / this.widths_sum;
764
+ const height_unit = inside.height / this.heights_sum;
765
+ let x = inside.left;
766
+ let y = inside.top;
767
+ const controls = [];
1045
768
  widths.slice(0, this.columns - 1).forEach((width) => {
1046
769
  x += width * width_unit;
1047
770
  controls.push({
@@ -1061,6 +784,11 @@ let RackTable = class RackTable extends ContainerAbstract {
1061
784
  return controls;
1062
785
  }
1063
786
  onchange(after, before) {
787
+ if ('legendTarget' in after || 'legendTarget' in before) {
788
+ this._legendTarget?.off('change', this._onLegendChanged, this);
789
+ delete this._legendTarget;
790
+ this._resetMaterials();
791
+ }
1064
792
  if ('rows' in after || 'columns' in after) {
1065
793
  this.buildCells(this.getState('rows'), this.getState('columns'), before.hasOwnProperty('rows') ? before.rows : this.getState('rows'), before.hasOwnProperty('columns') ? before.columns : this.getState('columns'));
1066
794
  }