@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.
- package/dist/banner.d.ts +232 -3
- package/dist/banner.js +1 -2
- package/dist/banner.js.map +1 -1
- package/dist/camera.d.ts +232 -3
- package/dist/camera.js +1 -2
- package/dist/camera.js.map +1 -1
- package/dist/carrier.d.ts +263 -0
- package/dist/carrier.js +272 -0
- package/dist/carrier.js.map +1 -0
- package/dist/cube.d.ts +232 -4
- package/dist/cube.js +1 -2
- package/dist/cube.js.map +1 -1
- package/dist/cylinder.d.ts +1 -3
- package/dist/cylinder.js +1 -2
- package/dist/cylinder.js.map +1 -1
- 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 +1 -0
- package/dist/editors/index.js +5 -0
- package/dist/editors/index.js.map +1 -1
- package/dist/editors/property-editor-gltf-fill-targets.d.ts +17 -0
- package/dist/editors/property-editor-gltf-fill-targets.js +211 -0
- package/dist/editors/property-editor-gltf-fill-targets.js.map +1 -0
- package/dist/editors/property-editor-gltf-info.js +38 -29
- package/dist/editors/property-editor-gltf-info.js.map +1 -1
- package/dist/editors/property-editor-location-increase-pattern.js +91 -95
- package/dist/editors/property-editor-location-increase-pattern.js.map +1 -1
- package/dist/effects/outline.js +1 -1
- package/dist/effects/outline.js.map +1 -1
- package/dist/ellipse.js +2 -4
- package/dist/ellipse.js.map +1 -1
- package/dist/gltf-object.d.ts +232 -3
- package/dist/gltf-object.js +1 -2
- package/dist/gltf-object.js.map +1 -1
- package/dist/html-overlay-element.js +3 -7
- package/dist/html-overlay-element.js.map +1 -1
- package/dist/index.d.ts +5 -17
- package/dist/index.js +7 -17
- package/dist/index.js.map +1 -1
- package/dist/light.d.ts +1 -2
- package/dist/light.js +1 -2
- package/dist/light.js.map +1 -1
- package/dist/polygon.js +2 -4
- package/dist/polygon.js.map +1 -1
- package/dist/rack-table-3d.d.ts +16 -0
- package/dist/rack-table-3d.js +94 -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 +108 -380
- package/dist/rack-table.js.map +1 -1
- package/dist/rack.d.ts +3 -5
- package/dist/rack.js +7 -9
- package/dist/rack.js.map +1 -1
- package/dist/rect.js +2 -4
- package/dist/rect.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/sphere.d.ts +1 -3
- package/dist/sphere.js +1 -2
- package/dist/sphere.js.map +1 -1
- package/dist/sprite.d.ts +232 -3
- package/dist/sprite.js +1 -2
- package/dist/sprite.js.map +1 -1
- package/dist/stock.d.ts +22 -10
- package/dist/stock.js +130 -109
- package/dist/stock.js.map +1 -1
- 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 +1 -0
- package/dist/templates/index.js +9 -1
- package/dist/templates/index.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/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/text.js +2 -4
- package/dist/text.js.map +1 -1
- package/dist/three-container.d.ts +11 -35
- package/dist/three-container.js +128 -322
- package/dist/three-container.js.map +1 -1
- package/dist/three-controls.d.ts +101 -1
- package/dist/three-controls.js +339 -541
- package/dist/three-controls.js.map +1 -1
- package/dist/three-space.d.ts +6 -83
- package/dist/three-space.js +25 -537
- package/dist/three-space.js.map +1 -1
- package/dist/threed/index.d.ts +1 -0
- package/dist/threed/index.js +1 -0
- package/dist/threed/index.js.map +1 -1
- package/dist/threed/interfaces.d.ts +15 -0
- package/dist/threed/interfaces.js +5 -0
- package/dist/threed/interfaces.js.map +1 -0
- package/dist/threed/managers/camera-manager.d.ts +14 -0
- package/dist/threed/managers/camera-manager.js +60 -0
- package/dist/threed/managers/camera-manager.js.map +1 -0
- package/dist/threed/managers/controls-manager.d.ts +50 -0
- package/dist/threed/managers/controls-manager.js +249 -0
- package/dist/threed/managers/controls-manager.js.map +1 -0
- package/dist/threed/managers/event-manager3d.d.ts +19 -0
- package/dist/threed/managers/event-manager3d.js +76 -0
- package/dist/threed/managers/event-manager3d.js.map +1 -0
- package/dist/threed/managers/index.d.ts +7 -0
- package/dist/threed/managers/index.js +7 -0
- package/dist/threed/managers/index.js.map +1 -0
- package/dist/threed/managers/light-manager.d.ts +7 -0
- package/dist/threed/managers/light-manager.js +37 -0
- package/dist/threed/managers/light-manager.js.map +1 -0
- package/dist/threed/managers/renderer-manager.d.ts +30 -0
- package/dist/threed/managers/renderer-manager.js +120 -0
- package/dist/threed/managers/renderer-manager.js.map +1 -0
- package/dist/threed/managers/scene-manager.d.ts +15 -0
- package/dist/threed/managers/scene-manager.js +48 -0
- package/dist/threed/managers/scene-manager.js.map +1 -0
- package/dist/threed/managers/types.d.ts +36 -0
- package/dist/threed/managers/types.js +2 -0
- package/dist/threed/managers/types.js.map +1 -0
- package/dist/threed/real-object-dom-element.js +11 -3
- package/dist/threed/real-object-dom-element.js.map +1 -1
- package/dist/threed/real-object-extrude.d.ts +1 -0
- package/dist/threed/real-object-extrude.js +7 -0
- package/dist/threed/real-object-extrude.js.map +1 -1
- package/dist/threed/real-object-gltf.js +6 -2
- package/dist/threed/real-object-gltf.js.map +1 -1
- package/dist/threed/real-object-mesh.js +4 -6
- package/dist/threed/real-object-mesh.js.map +1 -1
- package/dist/threed/real-object-registry.d.ts +7 -0
- package/dist/threed/real-object-registry.js +32 -0
- package/dist/threed/real-object-registry.js.map +1 -0
- package/dist/threed/real-object-scene.js +10 -5
- package/dist/threed/real-object-scene.js.map +1 -1
- package/dist/threed/real-object-sprite-2d.js.map +1 -1
- package/dist/threed/real-object-sprite.js +2 -0
- package/dist/threed/real-object-sprite.js.map +1 -1
- package/dist/threed/real-object-text.js +2 -0
- package/dist/threed/real-object-text.js.map +1 -1
- package/dist/threed/real-object.d.ts +3 -2
- package/dist/threed/real-object.js +7 -16
- package/dist/threed/real-object.js.map +1 -1
- package/dist/threed/three-dimensional-container.d.ts +1 -2
- package/dist/threed/three-dimensional-container.js.map +1 -1
- package/dist/threed/utils/dispose.d.ts +2 -0
- package/dist/threed/utils/dispose.js +32 -0
- package/dist/threed/utils/dispose.js.map +1 -0
- 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 +4 -5
- package/dist/visualizer.js +15 -28
- package/dist/visualizer.js.map +1 -1
- package/dist/wall.d.ts +232 -4
- package/dist/wall.js +1 -2
- package/dist/wall.js.map +1 -1
- package/icons/carrier.png +0 -0
- package/icons/signal-tower.png +0 -0
- package/icons/tank.png +0 -0
- package/icons/vehicle.png +0 -0
- package/package.json +16 -18
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,34 @@ var rowControlHandler = {
|
|
|
221
232
|
component.set('heights', heights);
|
|
222
233
|
}
|
|
223
234
|
};
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
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
|
-
|
|
238
|
-
|
|
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
|
-
|
|
256
|
-
|
|
257
|
-
|
|
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
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
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
|
-
|
|
329
|
-
|
|
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
|
-
|
|
344
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
418
|
-
|
|
419
|
-
|
|
366
|
+
const components = this.components;
|
|
367
|
+
const total = components.length;
|
|
368
|
+
const columns = this.getState('columns');
|
|
420
369
|
// 병합된 셀도 포함시킨다.
|
|
421
|
-
|
|
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
|
-
|
|
382
|
+
const indices = _cells.map(cell => components.indexOf(cell));
|
|
434
383
|
indices.forEach(i => {
|
|
435
|
-
|
|
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
|
-
|
|
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
|
-
|
|
546
|
-
for (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
686
|
+
const sum = columns.reduce((sum, column) => {
|
|
739
687
|
return sum + this.widths[column];
|
|
740
688
|
}, 0);
|
|
741
|
-
|
|
742
|
-
|
|
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
|
-
|
|
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
|
-
|
|
703
|
+
const sum = rows.reduce((sum, row) => {
|
|
756
704
|
return sum + this.heights[row];
|
|
757
705
|
}, 0);
|
|
758
|
-
|
|
759
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
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
|
}
|