@operato/scene-visualizer 9.2.2 → 10.0.0-beta.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/carrier.d.ts +263 -0
- package/dist/carrier.js +272 -0
- package/dist/carrier.js.map +1 -0
- package/dist/desk.d.ts +238 -3
- package/dist/desk.js +1 -2
- package/dist/desk.js.map +1 -1
- package/dist/editors/index.d.ts +3 -0
- package/dist/editors/index.js +15 -0
- package/dist/editors/index.js.map +1 -1
- package/dist/editors/property-editor-gltf-fill-targets.d.ts +20 -0
- package/dist/editors/property-editor-gltf-fill-targets.js +313 -0
- package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -0
- package/dist/editors/property-editor-gltf-info.d.ts +25 -3
- package/dist/editors/property-editor-gltf-info.js +333 -73
- package/dist/editors/property-editor-gltf-info.js.map +1 -1
- package/dist/editors/property-editor-gltf-play-targets.d.ts +25 -0
- package/dist/editors/property-editor-gltf-play-targets.js +388 -0
- package/dist/editors/property-editor-gltf-play-targets.js.map +1 -0
- package/dist/editors/property-editor-location-increase-pattern.js +87 -95
- package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
- package/dist/editors/property-editor-stocker-location.d.ts +13 -0
- package/dist/editors/property-editor-stocker-location.js +151 -0
- package/dist/editors/property-editor-stocker-location.js.map +1 -0
- package/dist/editors/property-editor-stocker-ports.d.ts +8 -0
- package/dist/editors/property-editor-stocker-ports.js +112 -0
- package/dist/editors/property-editor-stocker-ports.js.map +1 -0
- package/dist/effects/outline.js +1 -1
- package/dist/effects/outline.js.map +1 -1
- package/dist/index.d.ts +8 -17
- package/dist/index.js +10 -17
- package/dist/index.js.map +1 -1
- package/dist/rack-table-3d.d.ts +16 -0
- package/dist/rack-table-3d.js +95 -0
- package/dist/rack-table-3d.js.map +1 -0
- package/dist/rack-table-cell.d.ts +238 -3
- package/dist/rack-table-cell.js +44 -51
- package/dist/rack-table-cell.js.map +1 -1
- package/dist/rack-table-location.d.ts +37 -0
- package/dist/rack-table-location.js +227 -0
- package/dist/rack-table-location.js.map +1 -0
- package/dist/rack-table.d.ts +13 -29
- package/dist/rack-table.js +121 -380
- package/dist/rack-table.js.map +1 -1
- package/dist/rack.d.ts +16 -5
- package/dist/rack.js +106 -19
- package/dist/rack.js.map +1 -1
- package/dist/signal-tower.d.ts +492 -0
- package/dist/signal-tower.js +275 -0
- package/dist/signal-tower.js.map +1 -0
- package/dist/stock-hub.d.ts +25 -0
- package/dist/stock-hub.js +147 -0
- package/dist/stock-hub.js.map +1 -0
- package/dist/stock.d.ts +52 -8
- package/dist/stock.js +223 -120
- package/dist/stock.js.map +1 -1
- package/dist/stocker-3d.d.ts +23 -0
- package/dist/stocker-3d.js +352 -0
- package/dist/stocker-3d.js.map +1 -0
- package/dist/stocker-port-3d.d.ts +14 -0
- package/dist/stocker-port-3d.js +80 -0
- package/dist/stocker-port-3d.js.map +1 -0
- package/dist/stocker-port.d.ts +254 -0
- package/dist/stocker-port.js +123 -0
- package/dist/stocker-port.js.map +1 -0
- package/dist/stocker.d.ts +340 -0
- package/dist/stocker.js +370 -0
- package/dist/stocker.js.map +1 -0
- package/dist/tank.d.ts +492 -0
- package/dist/tank.js +312 -0
- package/dist/tank.js.map +1 -0
- package/dist/templates/carrier.d.ts +19 -0
- package/dist/templates/carrier.js +20 -0
- package/dist/templates/carrier.js.map +1 -0
- package/dist/templates/cube.js +1 -1
- package/dist/templates/cube.js.map +1 -1
- package/dist/templates/cylinder.js +3 -3
- package/dist/templates/cylinder.js.map +1 -1
- package/dist/templates/index.d.ts +38 -38
- package/dist/templates/index.js +15 -1
- package/dist/templates/index.js.map +1 -1
- package/dist/templates/rack-table.d.ts +2 -0
- package/dist/templates/rack-table.js +4 -2
- package/dist/templates/rack-table.js.map +1 -1
- package/dist/templates/signal-tower.d.ts +21 -0
- package/dist/templates/signal-tower.js +22 -0
- package/dist/templates/signal-tower.js.map +1 -0
- package/dist/templates/sphere.d.ts +1 -0
- package/dist/templates/sphere.js +5 -4
- package/dist/templates/sphere.js.map +1 -1
- package/dist/templates/stock-hub.d.ts +14 -0
- package/dist/templates/stock-hub.js +15 -0
- package/dist/templates/stock-hub.js.map +1 -0
- package/dist/templates/stocker-port.d.ts +17 -0
- package/dist/templates/stocker-port.js +17 -0
- package/dist/templates/stocker-port.js.map +1 -0
- package/dist/templates/stocker.d.ts +27 -0
- package/dist/templates/stocker.js +38 -0
- package/dist/templates/stocker.js.map +1 -0
- package/dist/templates/tank.d.ts +21 -0
- package/dist/templates/tank.js +22 -0
- package/dist/templates/tank.js.map +1 -0
- package/dist/templates/vehicle.d.ts +19 -0
- package/dist/templates/vehicle.js +20 -0
- package/dist/templates/vehicle.js.map +1 -0
- package/dist/templates/visualizer.js +1 -1
- package/dist/templates/visualizer.js.map +1 -1
- package/dist/vehicle.d.ts +248 -0
- package/dist/vehicle.js +133 -0
- package/dist/vehicle.js.map +1 -0
- package/dist/visualizer.d.ts +5 -5
- package/dist/visualizer.js +72 -68
- package/dist/visualizer.js.map +1 -1
- package/icons/carrier.png +0 -0
- package/icons/signal-tower.png +0 -0
- package/icons/stock-hub.png +0 -0
- package/icons/tank.png +0 -0
- package/icons/vehicle.png +0 -0
- package/package.json +16 -18
- package/translations/en.json +6 -0
- package/translations/ja.json +5 -0
- package/translations/ko.json +6 -1
- package/translations/ms.json +5 -0
- package/translations/zh.json +5 -0
- package/dist/banner.d.ts +0 -15
- package/dist/banner.js +0 -76
- package/dist/banner.js.map +0 -1
- package/dist/camera.d.ts +0 -20
- package/dist/camera.js +0 -108
- package/dist/camera.js.map +0 -1
- package/dist/cube.d.ts +0 -13
- package/dist/cube.js +0 -38
- package/dist/cube.js.map +0 -1
- package/dist/cylinder.d.ts +0 -11
- package/dist/cylinder.js +0 -38
- package/dist/cylinder.js.map +0 -1
- package/dist/ellipse.d.ts +0 -5
- package/dist/ellipse.js +0 -22
- package/dist/ellipse.js.map +0 -1
- package/dist/gltf-object.d.ts +0 -20
- package/dist/gltf-object.js +0 -104
- package/dist/gltf-object.js.map +0 -1
- package/dist/html-overlay-element.d.ts +0 -1
- package/dist/html-overlay-element.js +0 -12
- package/dist/html-overlay-element.js.map +0 -1
- package/dist/light.d.ts +0 -15
- package/dist/light.js +0 -135
- package/dist/light.js.map +0 -1
- package/dist/polygon.d.ts +0 -17
- package/dist/polygon.js +0 -64
- package/dist/polygon.js.map +0 -1
- package/dist/rect.d.ts +0 -5
- package/dist/rect.js +0 -36
- package/dist/rect.js.map +0 -1
- package/dist/scene/component.d.ts +0 -1
- package/dist/scene/component.js +0 -29
- package/dist/scene/component.js.map +0 -1
- package/dist/sphere.d.ts +0 -11
- package/dist/sphere.js +0 -38
- package/dist/sphere.js.map +0 -1
- package/dist/sprite.d.ts +0 -9
- package/dist/sprite.js +0 -28
- package/dist/sprite.js.map +0 -1
- package/dist/text.d.ts +0 -1
- package/dist/text.js +0 -9
- package/dist/text.js.map +0 -1
- package/dist/three-container-editor.d.ts +0 -22
- package/dist/three-container-editor.js +0 -132
- package/dist/three-container-editor.js.map +0 -1
- package/dist/three-container.d.ts +0 -85
- package/dist/three-container.js +0 -565
- package/dist/three-container.js.map +0 -1
- package/dist/three-controls.d.ts +0 -11
- package/dist/three-controls.js +0 -616
- package/dist/three-controls.js.map +0 -1
- package/dist/three-layout.d.ts +0 -8
- package/dist/three-layout.js +0 -20
- package/dist/three-layout.js.map +0 -1
- package/dist/three-space.d.ts +0 -85
- package/dist/three-space.js +0 -570
- package/dist/three-space.js.map +0 -1
- package/dist/threed/common.d.ts +0 -22
- package/dist/threed/common.js +0 -19
- package/dist/threed/common.js.map +0 -1
- package/dist/threed/floor/floor.d.ts +0 -3
- package/dist/threed/floor/floor.js +0 -51
- package/dist/threed/floor/floor.js.map +0 -1
- package/dist/threed/html/elements.d.ts +0 -2
- package/dist/threed/html/elements.js +0 -21
- package/dist/threed/html/elements.js.map +0 -1
- package/dist/threed/index.d.ts +0 -15
- package/dist/threed/index.js +0 -16
- package/dist/threed/index.js.map +0 -1
- package/dist/threed/real-object-camera-meshed.d.ts +0 -12
- package/dist/threed/real-object-camera-meshed.js +0 -49
- package/dist/threed/real-object-camera-meshed.js.map +0 -1
- package/dist/threed/real-object-camera.d.ts +0 -9
- package/dist/threed/real-object-camera.js +0 -31
- package/dist/threed/real-object-camera.js.map +0 -1
- package/dist/threed/real-object-dom-element.d.ts +0 -9
- package/dist/threed/real-object-dom-element.js +0 -40
- package/dist/threed/real-object-dom-element.js.map +0 -1
- package/dist/threed/real-object-dummy.d.ts +0 -6
- package/dist/threed/real-object-dummy.js +0 -11
- package/dist/threed/real-object-dummy.js.map +0 -1
- package/dist/threed/real-object-extrude.d.ts +0 -21
- package/dist/threed/real-object-extrude.js +0 -173
- package/dist/threed/real-object-extrude.js.map +0 -1
- package/dist/threed/real-object-gltf.d.ts +0 -16
- package/dist/threed/real-object-gltf.js +0 -101
- package/dist/threed/real-object-gltf.js.map +0 -1
- package/dist/threed/real-object-group.d.ts +0 -5
- package/dist/threed/real-object-group.js +0 -11
- package/dist/threed/real-object-group.js.map +0 -1
- package/dist/threed/real-object-mesh.d.ts +0 -13
- package/dist/threed/real-object-mesh.js +0 -75
- package/dist/threed/real-object-mesh.js.map +0 -1
- package/dist/threed/real-object-plane.d.ts +0 -5
- package/dist/threed/real-object-plane.js +0 -22
- package/dist/threed/real-object-plane.js.map +0 -1
- package/dist/threed/real-object-scene.d.ts +0 -21
- package/dist/threed/real-object-scene.js +0 -67
- package/dist/threed/real-object-scene.js.map +0 -1
- package/dist/threed/real-object-sprite-2d.d.ts +0 -14
- package/dist/threed/real-object-sprite-2d.js +0 -45
- package/dist/threed/real-object-sprite-2d.js.map +0 -1
- package/dist/threed/real-object-sprite.d.ts +0 -11
- package/dist/threed/real-object-sprite.js +0 -50
- package/dist/threed/real-object-sprite.js.map +0 -1
- package/dist/threed/real-object-text.d.ts +0 -15
- package/dist/threed/real-object-text.js +0 -64
- package/dist/threed/real-object-text.js.map +0 -1
- package/dist/threed/real-object.d.ts +0 -64
- package/dist/threed/real-object.js +0 -260
- package/dist/threed/real-object.js.map +0 -1
- package/dist/threed/texture/canvas-texture.d.ts +0 -4
- package/dist/threed/texture/canvas-texture.js +0 -49
- package/dist/threed/texture/canvas-texture.js.map +0 -1
- package/dist/threed/texture/text-texture.d.ts +0 -8
- package/dist/threed/texture/text-texture.js +0 -79
- package/dist/threed/texture/text-texture.js.map +0 -1
- package/dist/threed/three-dimensional-container.d.ts +0 -8
- package/dist/threed/three-dimensional-container.js +0 -2
- package/dist/threed/three-dimensional-container.js.map +0 -1
- package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
- package/dist/threed/utils/bound-uv-generator.js +0 -42
- package/dist/threed/utils/bound-uv-generator.js.map +0 -1
- package/dist/wall.d.ts +0 -13
- package/dist/wall.js +0 -45
- package/dist/wall.js.map +0 -1
package/dist/rack-table.js
CHANGED
|
@@ -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 {
|
|
9
|
-
import {
|
|
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
|
-
|
|
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
|
-
|
|
175
|
+
const arr = [];
|
|
165
176
|
for (let i = 0; i < size; i++)
|
|
166
177
|
arr.push(1);
|
|
167
178
|
return arr;
|
|
168
179
|
}
|
|
169
|
-
|
|
180
|
+
const columnControlHandler = {
|
|
170
181
|
ondragmove: function (point, index, component) {
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
182
|
+
const { left, top, width, height } = component.textBounds;
|
|
183
|
+
const widths_sum = component.widths_sum;
|
|
184
|
+
const widths = component.widths.slice();
|
|
174
185
|
/* 컨트롤의 원래 위치를 구한다. */
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|
-
|
|
207
|
+
const rowControlHandler = {
|
|
197
208
|
ondragmove: function (point, index, component) {
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
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
|
-
|
|
204
|
-
|
|
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
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
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,47 @@ var rowControlHandler = {
|
|
|
221
232
|
component.set('heights', heights);
|
|
222
233
|
}
|
|
223
234
|
};
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
}
|
|
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);
|
|
254
|
-
}
|
|
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
|
-
}
|
|
289
|
-
}
|
|
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);
|
|
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);
|
|
304
247
|
}
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
248
|
+
// 하위호환: 자체 legendTarget이 없으면 부모(Visualizer)의 legendTarget 폴백
|
|
249
|
+
if (!this._legendTarget) {
|
|
250
|
+
let ancestor = this.parent;
|
|
251
|
+
while (ancestor) {
|
|
252
|
+
if (ancestor.legendTarget)
|
|
253
|
+
return ancestor.legendTarget;
|
|
254
|
+
ancestor = ancestor.parent;
|
|
309
255
|
}
|
|
310
|
-
|
|
256
|
+
// 서비스 레지스트리 폴백: stock-hub의 legendTarget
|
|
257
|
+
const stockHub = this.root?.getService?.('stock');
|
|
258
|
+
if (stockHub?.legendTarget)
|
|
259
|
+
return stockHub.legendTarget;
|
|
311
260
|
}
|
|
312
|
-
return
|
|
261
|
+
return this._legendTarget;
|
|
262
|
+
}
|
|
263
|
+
get hideEmptyStock() {
|
|
264
|
+
return !!this.getState('hideEmptyStock');
|
|
265
|
+
}
|
|
266
|
+
_onLegendChanged() {
|
|
267
|
+
this._resetMaterials();
|
|
268
|
+
this.invalidate();
|
|
269
|
+
}
|
|
270
|
+
_resetMaterials() {
|
|
271
|
+
this._stock_materials.forEach(m => m.dispose?.());
|
|
272
|
+
this._stock_materials = [];
|
|
273
|
+
delete this._default_material;
|
|
274
|
+
delete this._empty_material;
|
|
313
275
|
}
|
|
314
|
-
updateAlpha() { }
|
|
315
|
-
}
|
|
316
|
-
let RackTable = class RackTable extends ContainerAbstract {
|
|
317
276
|
is3dish() {
|
|
318
277
|
return true;
|
|
319
278
|
}
|
|
@@ -321,12 +280,15 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
321
280
|
return new RackTable3d(this);
|
|
322
281
|
}
|
|
323
282
|
dispose() {
|
|
283
|
+
this._legendTarget?.off('change', this._onLegendChanged, this);
|
|
284
|
+
delete this._legendTarget;
|
|
285
|
+
this._resetMaterials();
|
|
324
286
|
super.dispose();
|
|
325
287
|
delete this._focused_cell;
|
|
326
288
|
}
|
|
327
289
|
created() {
|
|
328
|
-
|
|
329
|
-
|
|
290
|
+
const tobeSize = this.rows * this.columns;
|
|
291
|
+
const gap = this.size() - tobeSize;
|
|
330
292
|
if (gap == 0) {
|
|
331
293
|
return;
|
|
332
294
|
}
|
|
@@ -340,8 +302,8 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
340
302
|
newbies.push(buildNewCell(this.app));
|
|
341
303
|
this.add(newbies);
|
|
342
304
|
}
|
|
343
|
-
|
|
344
|
-
|
|
305
|
+
const widths = this.getState('widths');
|
|
306
|
+
const heights = this.getState('heights');
|
|
345
307
|
if (!widths || widths.length < this.columns)
|
|
346
308
|
this.set('widths', this.widths);
|
|
347
309
|
if (!heights || heights.length < this.rows)
|
|
@@ -352,7 +314,7 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
352
314
|
return false;
|
|
353
315
|
}
|
|
354
316
|
get widths() {
|
|
355
|
-
|
|
317
|
+
const widths = this.getState('widths');
|
|
356
318
|
if (!widths)
|
|
357
319
|
return array(1, this.columns);
|
|
358
320
|
if (widths.length < this.columns)
|
|
@@ -362,7 +324,7 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
362
324
|
return widths;
|
|
363
325
|
}
|
|
364
326
|
get heights() {
|
|
365
|
-
|
|
327
|
+
const heights = this.getState('heights');
|
|
366
328
|
if (!heights)
|
|
367
329
|
return array(1, this.rows);
|
|
368
330
|
if (heights.length < this.rows)
|
|
@@ -376,7 +338,7 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
376
338
|
let removals = this.components.slice(oldcolumns * newrows);
|
|
377
339
|
this.remove(removals);
|
|
378
340
|
}
|
|
379
|
-
|
|
341
|
+
const minrows = Math.min(newrows, oldrows);
|
|
380
342
|
if (newcolumns > oldcolumns) {
|
|
381
343
|
for (let r = 0; r < minrows; r++) {
|
|
382
344
|
for (let c = oldcolumns; c < newcolumns; c++) {
|
|
@@ -414,11 +376,11 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
414
376
|
return this.getState('rows');
|
|
415
377
|
}
|
|
416
378
|
setCellsStyle(cells, style, where) {
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
379
|
+
const components = this.components;
|
|
380
|
+
const total = components.length;
|
|
381
|
+
const columns = this.getState('columns');
|
|
420
382
|
// 병합된 셀도 포함시킨다.
|
|
421
|
-
|
|
383
|
+
const _cells = [];
|
|
422
384
|
cells.forEach(c => {
|
|
423
385
|
_cells.push(c);
|
|
424
386
|
if (c.colspan || c.rowspan) {
|
|
@@ -430,9 +392,9 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
430
392
|
_cells.push(this.components[i * this.columns + j]);
|
|
431
393
|
}
|
|
432
394
|
});
|
|
433
|
-
|
|
395
|
+
const indices = _cells.map(cell => components.indexOf(cell));
|
|
434
396
|
indices.forEach(i => {
|
|
435
|
-
|
|
397
|
+
const cell = components[i];
|
|
436
398
|
switch (where) {
|
|
437
399
|
case 'all':
|
|
438
400
|
setCellBorder(cell, style, where);
|
|
@@ -531,8 +493,7 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
531
493
|
});
|
|
532
494
|
}
|
|
533
495
|
getRowColumn(cell) {
|
|
534
|
-
|
|
535
|
-
var length = this.components.length;
|
|
496
|
+
const idx = this.components.indexOf(cell);
|
|
536
497
|
return {
|
|
537
498
|
column: idx % this.columns,
|
|
538
499
|
row: Math.floor(idx / this.columns)
|
|
@@ -542,8 +503,8 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
542
503
|
return this.components.slice(row * this.columns, (row + 1) * this.columns);
|
|
543
504
|
}
|
|
544
505
|
getCellsByColumn(column) {
|
|
545
|
-
|
|
546
|
-
for (
|
|
506
|
+
const cells = [];
|
|
507
|
+
for (let i = 0; i < this.rows; i++)
|
|
547
508
|
cells.push(this.components[this.columns * i + column]);
|
|
548
509
|
return cells;
|
|
549
510
|
}
|
|
@@ -560,7 +521,7 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
560
521
|
return a - b;
|
|
561
522
|
});
|
|
562
523
|
rows.reverse();
|
|
563
|
-
|
|
524
|
+
const heights = this.heights.slice();
|
|
564
525
|
rows.forEach(row => {
|
|
565
526
|
this.remove(this.getCellsByRow(row));
|
|
566
527
|
});
|
|
@@ -581,7 +542,7 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
581
542
|
});
|
|
582
543
|
columns.reverse();
|
|
583
544
|
columns.forEach(column => {
|
|
584
|
-
|
|
545
|
+
const widths = this.widths.slice();
|
|
585
546
|
this.remove(this.getCellsByColumn(column));
|
|
586
547
|
widths.splice(column, 1);
|
|
587
548
|
this.model.columns -= 1; // 고의적으로, change 이벤트가 발생하지 않도록 set(..)을 사용하지 않음.
|
|
@@ -729,268 +690,43 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
729
690
|
});
|
|
730
691
|
}
|
|
731
692
|
distributeHorizontal(cells) {
|
|
732
|
-
|
|
693
|
+
const columns = [];
|
|
733
694
|
cells.forEach(cell => {
|
|
734
695
|
let rowcolumn = this.getRowColumn(cell);
|
|
735
696
|
if (-1 == columns.indexOf(rowcolumn.column))
|
|
736
697
|
columns.push(rowcolumn.column);
|
|
737
698
|
});
|
|
738
|
-
|
|
699
|
+
const sum = columns.reduce((sum, column) => {
|
|
739
700
|
return sum + this.widths[column];
|
|
740
701
|
}, 0);
|
|
741
|
-
|
|
742
|
-
|
|
702
|
+
const newval = Math.round((sum / columns.length) * 100) / 100;
|
|
703
|
+
const widths = this.widths.slice();
|
|
743
704
|
columns.forEach(column => {
|
|
744
705
|
widths[column] = newval;
|
|
745
706
|
});
|
|
746
707
|
this.set('widths', widths);
|
|
747
708
|
}
|
|
748
709
|
distributeVertical(cells) {
|
|
749
|
-
|
|
710
|
+
const rows = [];
|
|
750
711
|
cells.forEach(cell => {
|
|
751
712
|
let rowcolumn = this.getRowColumn(cell);
|
|
752
713
|
if (-1 == rows.indexOf(rowcolumn.row))
|
|
753
714
|
rows.push(rowcolumn.row);
|
|
754
715
|
});
|
|
755
|
-
|
|
716
|
+
const sum = rows.reduce((sum, row) => {
|
|
756
717
|
return sum + this.heights[row];
|
|
757
718
|
}, 0);
|
|
758
|
-
|
|
759
|
-
|
|
719
|
+
const newval = Math.round((sum / rows.length) * 100) / 100;
|
|
720
|
+
const heights = this.heights.slice();
|
|
760
721
|
rows.forEach(row => {
|
|
761
722
|
heights[row] = newval;
|
|
762
723
|
});
|
|
763
724
|
this.set('heights', heights);
|
|
764
725
|
}
|
|
765
|
-
/**
|
|
766
|
-
* visualizer location setting functions
|
|
767
|
-
*/
|
|
768
726
|
increaseLocation(type, skipNumbering, startSection, startUnit) {
|
|
769
|
-
|
|
770
|
-
|
|
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
|
-
});
|
|
727
|
+
const { sectionDigits = 2, unitDigits = 2 } = this.state;
|
|
728
|
+
const selectedCells = this.root.selected;
|
|
729
|
+
increaseLocation(selectedCells, type, skipNumbering, startSection, startUnit, sectionDigits, unitDigits);
|
|
994
730
|
}
|
|
995
731
|
get columns() {
|
|
996
732
|
return this.getState('columns');
|
|
@@ -1023,25 +759,25 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
1023
759
|
return this.components;
|
|
1024
760
|
}
|
|
1025
761
|
get widths_sum() {
|
|
1026
|
-
|
|
762
|
+
const widths = this.widths;
|
|
1027
763
|
return widths ? widths.filter((width, i) => i < this.columns).reduce((sum, width) => sum + width, 0) : this.columns;
|
|
1028
764
|
}
|
|
1029
765
|
get heights_sum() {
|
|
1030
|
-
|
|
766
|
+
const heights = this.heights;
|
|
1031
767
|
return heights ? heights.filter((height, i) => i < this.rows).reduce((sum, height) => sum + height, 0) : this.rows;
|
|
1032
768
|
}
|
|
1033
769
|
get nature() {
|
|
1034
770
|
return NATURE;
|
|
1035
771
|
}
|
|
1036
772
|
get controls() {
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
773
|
+
const widths = this.widths;
|
|
774
|
+
const heights = this.heights;
|
|
775
|
+
const inside = this.textBounds;
|
|
776
|
+
const width_unit = inside.width / this.widths_sum;
|
|
777
|
+
const height_unit = inside.height / this.heights_sum;
|
|
778
|
+
let x = inside.left;
|
|
779
|
+
let y = inside.top;
|
|
780
|
+
const controls = [];
|
|
1045
781
|
widths.slice(0, this.columns - 1).forEach((width) => {
|
|
1046
782
|
x += width * width_unit;
|
|
1047
783
|
controls.push({
|
|
@@ -1061,6 +797,11 @@ let RackTable = class RackTable extends ContainerAbstract {
|
|
|
1061
797
|
return controls;
|
|
1062
798
|
}
|
|
1063
799
|
onchange(after, before) {
|
|
800
|
+
if ('legendTarget' in after || 'legendTarget' in before) {
|
|
801
|
+
this._legendTarget?.off('change', this._onLegendChanged, this);
|
|
802
|
+
delete this._legendTarget;
|
|
803
|
+
this._resetMaterials();
|
|
804
|
+
}
|
|
1064
805
|
if ('rows' in after || 'columns' in after) {
|
|
1065
806
|
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
807
|
}
|