kitchen-simulator 4.0.0-queuedEvents → 4.0.0
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/es/LiteKitchenConfigurator.js +141 -288
- package/es/LiteRenderer.js +159 -398
- package/es/actions/items-actions.js +10 -6
- package/es/actions/lines-actions.js +3 -1
- package/es/actions/project-actions.js +15 -5
- package/es/assets/img/svg/bottombar/elevation.svg +12 -5
- package/es/catalog/areas/area/planner-element.js +10 -5
- package/es/catalog/catalog.js +1 -4
- package/es/catalog/factories/area-factory-3d.js +2 -1
- package/es/catalog/factories/wall-factory-3d.js +2 -2
- package/es/catalog/factories/wall-factory.js +8 -8
- package/es/catalog/lines/wall/planner-element.js +18 -9
- package/es/catalog/utils/exporter.js +7 -3
- package/es/catalog/utils/item-loader.js +24 -14
- package/es/catalog/utils/mtl-loader.js +2 -2
- package/es/catalog/utils/obj-loader.js +2 -2
- package/es/class/hole.js +0 -2
- package/es/class/item.js +183 -184
- package/es/class/line.js +11 -3
- package/es/class/project.js +165 -48
- package/es/components/content.js +19 -6
- package/es/components/viewer2d/grids/grid-streak.js +1 -1
- package/es/components/viewer2d/item.js +84 -51
- package/es/components/viewer2d/line.js +315 -243
- package/es/components/viewer2d/ruler.js +20 -38
- package/es/components/viewer2d/rulerDist.js +48 -78
- package/es/components/viewer2d/utils.js +6 -0
- package/es/components/viewer2d/viewer2d.js +298 -220
- package/es/components/viewer3d/front3D.js +3 -2
- package/es/components/viewer3d/libs/mtl-loader.js +2 -2
- package/es/components/viewer3d/libs/obj-loader.js +2 -2
- package/es/components/viewer3d/libs/orbit-controls.js +3 -4
- package/es/components/viewer3d/libs/pointer-lock-controls.js +6 -7
- package/es/components/viewer3d/scene-creator.js +51 -15
- package/es/components/viewer3d/viewer3d.js +121 -82
- package/es/constants.js +111 -3
- package/es/devLiteRenderer.js +688 -31
- package/es/index.js +567 -87
- package/es/models.js +9 -5
- package/es/plugins/SVGLoader.js +7 -5
- package/es/plugins/console-debugger.js +0 -2
- package/es/plugins/keyboard.js +15 -6
- package/es/reducers/items-reducer.js +5 -5
- package/es/reducers/lines-reducer.js +1 -1
- package/es/reducers/project-reducer.js +5 -3
- package/es/shared-style.js +4 -4
- package/es/utils/geometry.js +163 -2
- package/es/utils/get-edges-of-subgraphs.js +1 -1
- package/es/utils/graph-cycles.js +1 -1
- package/es/utils/graph.js +1 -1
- package/es/utils/helper.js +105 -3
- package/es/utils/isolate-event-handler.js +1542 -164
- package/es/utils/molding.js +461 -11
- package/lib/LiteKitchenConfigurator.js +141 -289
- package/lib/LiteRenderer.js +159 -399
- package/lib/actions/items-actions.js +10 -6
- package/lib/actions/lines-actions.js +3 -1
- package/lib/actions/project-actions.js +15 -4
- package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
- package/lib/catalog/areas/area/planner-element.js +11 -5
- package/lib/catalog/catalog.js +1 -4
- package/lib/catalog/factories/area-factory-3d.js +2 -1
- package/lib/catalog/factories/wall-factory-3d.js +2 -2
- package/lib/catalog/factories/wall-factory.js +8 -8
- package/lib/catalog/lines/wall/planner-element.js +19 -9
- package/lib/catalog/utils/exporter.js +7 -3
- package/lib/catalog/utils/item-loader.js +24 -14
- package/lib/catalog/utils/mtl-loader.js +9 -2
- package/lib/catalog/utils/obj-loader.js +10 -2
- package/lib/class/hole.js +0 -2
- package/lib/class/item.js +180 -181
- package/lib/class/line.js +9 -1
- package/lib/class/project.js +164 -47
- package/lib/components/content.js +19 -6
- package/lib/components/viewer2d/grids/grid-streak.js +1 -1
- package/lib/components/viewer2d/item.js +83 -50
- package/lib/components/viewer2d/line.js +315 -242
- package/lib/components/viewer2d/ruler.js +19 -37
- package/lib/components/viewer2d/rulerDist.js +48 -78
- package/lib/components/viewer2d/utils.js +7 -0
- package/lib/components/viewer2d/viewer2d.js +296 -219
- package/lib/components/viewer3d/front3D.js +3 -2
- package/lib/components/viewer3d/libs/mtl-loader.js +9 -2
- package/lib/components/viewer3d/libs/obj-loader.js +9 -2
- package/lib/components/viewer3d/libs/orbit-controls.js +11 -5
- package/lib/components/viewer3d/libs/pointer-lock-controls.js +13 -7
- package/lib/components/viewer3d/scene-creator.js +49 -13
- package/lib/components/viewer3d/viewer3d.js +119 -80
- package/lib/constants.js +116 -7
- package/lib/devLiteRenderer.js +687 -30
- package/lib/index.js +567 -87
- package/lib/models.js +9 -5
- package/lib/plugins/SVGLoader.js +7 -5
- package/lib/plugins/console-debugger.js +0 -2
- package/lib/plugins/keyboard.js +15 -6
- package/lib/reducers/items-reducer.js +5 -5
- package/lib/reducers/lines-reducer.js +1 -1
- package/lib/reducers/project-reducer.js +4 -2
- package/lib/shared-style.js +4 -4
- package/lib/utils/geometry.js +164 -2
- package/lib/utils/get-edges-of-subgraphs.js +6 -1
- package/lib/utils/graph-cycles.js +7 -8
- package/lib/utils/graph.js +6 -1
- package/lib/utils/helper.js +108 -2
- package/lib/utils/isolate-event-handler.js +1538 -159
- package/lib/utils/molding.js +463 -9
- package/package.json +1 -1
- package/es/assets/Window.hdr +0 -2100
- package/es/assets/img/1.jpg +0 -0
- package/lib/assets/Window.hdr +0 -2100
- package/lib/assets/img/1.jpg +0 -0
package/es/class/line.js
CHANGED
|
@@ -5,8 +5,8 @@ import { fromJS, List, Map } from 'immutable';
|
|
|
5
5
|
import { Group, Hole, Layer, Vertex } from "./export";
|
|
6
6
|
import { GeometryUtils, history, IDBroker, NameGenerator, SnapSceneUtils, SnapUtils } from "../utils/export";
|
|
7
7
|
import * as Three from 'three';
|
|
8
|
-
import { END_DRAGGING_LINE, END_DRAGGING_VERTEX, END_DRAWING_LINE, EPSILON, MIN_ANGLE_DISALLOW_DRAW_WALL, MODE_DRAGGING_LINE, MODE_DRAWING_LINE, MODE_IDLE, MODE_WAITING_DRAWING_LINE, UNIT_ANGLE } from "../constants";
|
|
9
|
-
import { isEmpty } from "../utils/helper";
|
|
8
|
+
import { END_DRAGGING_LINE, END_DRAGGING_VERTEX, END_DRAWING_LINE, EPSILON, INTERNAL_EVENT_START_DRAW_WALL, MIN_ANGLE_DISALLOW_DRAW_WALL, MODE_DRAGGING_LINE, MODE_DRAWING_LINE, MODE_IDLE, MODE_WAITING_DRAWING_LINE, UNIT_ANGLE } from "../constants";
|
|
9
|
+
import { isEmpty, updatePayloadOfInternalEvent } from "../utils/helper";
|
|
10
10
|
var timeGlobal = 0;
|
|
11
11
|
var TimeRecorder = /*#__PURE__*/function () {
|
|
12
12
|
function TimeRecorder(name) {
|
|
@@ -426,7 +426,8 @@ var Line = /*#__PURE__*/function () {
|
|
|
426
426
|
}
|
|
427
427
|
}, {
|
|
428
428
|
key: "beginDrawingLine",
|
|
429
|
-
value: function beginDrawingLine(state, layerID, x, y) {
|
|
429
|
+
value: function beginDrawingLine(state, layerID, x, y, onInternalEvent) {
|
|
430
|
+
var _state$get;
|
|
430
431
|
// if end drawing by created area
|
|
431
432
|
if (state.mode == MODE_IDLE) {
|
|
432
433
|
return {
|
|
@@ -479,6 +480,13 @@ var Line = /*#__PURE__*/function () {
|
|
|
479
480
|
activeSnapElement: snap ? snap.snap : null,
|
|
480
481
|
drawingSupport: drawingSupport
|
|
481
482
|
});
|
|
483
|
+
var layer = state.getIn(['scene', 'layers', layerID]);
|
|
484
|
+
var catalog = (_state$get = state.get('catalog')) === null || _state$get === void 0 ? void 0 : _state$get.toJS();
|
|
485
|
+
var payload = updatePayloadOfInternalEvent(line, layer, catalog);
|
|
486
|
+
if (onInternalEvent) onInternalEvent({
|
|
487
|
+
type: INTERNAL_EVENT_START_DRAW_WALL,
|
|
488
|
+
value: payload
|
|
489
|
+
});
|
|
482
490
|
return {
|
|
483
491
|
updatedState: state
|
|
484
492
|
};
|
package/es/class/project.js
CHANGED
|
@@ -10,7 +10,8 @@ import { State, Catalog, Scene, safeLoadMapList, CatalogElement } from "../model
|
|
|
10
10
|
import { GeometryUtils, history } from "../utils/export";
|
|
11
11
|
import { Layer, Group, Line, Hole, Item, Area, HorizontalGuide, VerticalGuide } from "../class/export";
|
|
12
12
|
import * as viewer2DActions from "../actions/viewer2d-actions";
|
|
13
|
-
import { isEmpty } from "../utils/helper";
|
|
13
|
+
import { centering2D, isEmpty } from "../utils/helper";
|
|
14
|
+
import { convert } from "../utils/convert-units-lite";
|
|
14
15
|
var Project = /*#__PURE__*/function () {
|
|
15
16
|
function Project() {
|
|
16
17
|
_classCallCheck(this, Project);
|
|
@@ -33,8 +34,8 @@ var Project = /*#__PURE__*/function () {
|
|
|
33
34
|
}, {
|
|
34
35
|
key: "newProject",
|
|
35
36
|
value: function newProject(state) {
|
|
36
|
-
var
|
|
37
|
-
var
|
|
37
|
+
var _state$toJS$doorStyle, _state;
|
|
38
|
+
var doorStyle = (_state$toJS$doorStyle = (_state = state) === null || _state === void 0 || (_state = _state.toJS()) === null || _state === void 0 ? void 0 : _state.doorStyle) !== null && _state$toJS$doorStyle !== void 0 ? _state$toJS$doorStyle : null;
|
|
38
39
|
// let counterTop = state.getIn(['scene', 'layers', layerID, 'counterTop']);
|
|
39
40
|
// let floorStyle = state.getIn(['scene', 'layers', layerID, 'floorStyle']);
|
|
40
41
|
var _viewer2D = state.viewer2D;
|
|
@@ -48,7 +49,6 @@ var Project = /*#__PURE__*/function () {
|
|
|
48
49
|
state = new State({});
|
|
49
50
|
state = state.merge({
|
|
50
51
|
doorStyle: doorStyle,
|
|
51
|
-
oStyle: oStyle,
|
|
52
52
|
viewer2D: _viewer2D
|
|
53
53
|
});
|
|
54
54
|
// state = Item.setCounterTop(state, counterTop).updatedState;
|
|
@@ -59,9 +59,8 @@ var Project = /*#__PURE__*/function () {
|
|
|
59
59
|
}
|
|
60
60
|
}, {
|
|
61
61
|
key: "loadProject",
|
|
62
|
-
value: function loadProject(state, sceneJSON
|
|
62
|
+
value: function loadProject(state, sceneJSON) {
|
|
63
63
|
var doorStyle = state.doorStyle;
|
|
64
|
-
var oStyle = state.oStyle;
|
|
65
64
|
var layerID = state.scene.selectedLayer;
|
|
66
65
|
var _viewer2D = state.viewer2D;
|
|
67
66
|
var viewer = state.viewer2D.toJS();
|
|
@@ -76,9 +75,9 @@ var Project = /*#__PURE__*/function () {
|
|
|
76
75
|
a: 0.99,
|
|
77
76
|
d: 0.99
|
|
78
77
|
});
|
|
79
|
-
var
|
|
80
|
-
oldScene =
|
|
81
|
-
oldSceneHistory =
|
|
78
|
+
var _state2 = state,
|
|
79
|
+
oldScene = _state2.scene,
|
|
80
|
+
oldSceneHistory = _state2.sceneHistory;
|
|
82
81
|
var json_items = sceneJSON.layers[sceneJSON.selectedLayer].items;
|
|
83
82
|
var elements = state.catalog.get('elements').toArray();
|
|
84
83
|
var _loop = function _loop(x) {
|
|
@@ -93,6 +92,17 @@ var Project = /*#__PURE__*/function () {
|
|
|
93
92
|
for (var x in json_items) {
|
|
94
93
|
_loop(x);
|
|
95
94
|
}
|
|
95
|
+
|
|
96
|
+
// making layer's doorStyle when changing room shape
|
|
97
|
+
// THIS LOGIC WAS MOVED TO SET INITIAL DOOR STYLE
|
|
98
|
+
// if (isEmpty(sceneJSON?.layers[layerID]?.doorStyle)) {
|
|
99
|
+
// let newlayer = {
|
|
100
|
+
// ...sceneJSON?.layers[layerID],
|
|
101
|
+
// doorStyle: doorStyle.toJS()
|
|
102
|
+
// };
|
|
103
|
+
// sceneJSON && (sceneJSON.layers[layerID] = newlayer);
|
|
104
|
+
// }
|
|
105
|
+
|
|
96
106
|
var newScene = new Scene(sceneJSON);
|
|
97
107
|
state = new State({
|
|
98
108
|
scene: newScene.toJS(),
|
|
@@ -154,35 +164,17 @@ var Project = /*#__PURE__*/function () {
|
|
|
154
164
|
f: f
|
|
155
165
|
});
|
|
156
166
|
}
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
167
|
+
|
|
168
|
+
// Matching state.doorStyle with layer.doorStyle
|
|
169
|
+
if (state.getIn(['scene', 'layers', layerID, 'doorStyle'])) {
|
|
170
|
+
doorStyle = state.getIn(['scene', 'layers', layerID, 'doorStyle']);
|
|
161
171
|
}
|
|
162
172
|
state = state.merge({
|
|
163
173
|
doorStyle: doorStyle,
|
|
164
|
-
oStyle: oStyle,
|
|
165
174
|
viewer2D: _viewer2D
|
|
166
175
|
});
|
|
167
176
|
state = Item.setCounterTop(state, counterTop).updatedState;
|
|
168
177
|
state = Area.setFloorStyles(state, floorStyle).updatedState;
|
|
169
|
-
if (state.getIn(['scene', 'layers', layerID, 'doorStyle']) && !state.getIn(['scene', 'layers', layerID, 'doorStyle', 'install'])) {
|
|
170
|
-
var layerDoorStyle = state.getIn(['scene', 'layers', layerID, 'doorStyle']);
|
|
171
|
-
var install = '';
|
|
172
|
-
categoryData.data.doorStyles.items.forEach(function (category) {
|
|
173
|
-
category.items.forEach(function (element) {
|
|
174
|
-
if (element.items.filter(function (it) {
|
|
175
|
-
return it.id === layerDoorStyle.id && (layerDoorStyle.install ? category.name === layerDoorStyle.install : true);
|
|
176
|
-
}).length) {
|
|
177
|
-
install = category.name;
|
|
178
|
-
}
|
|
179
|
-
});
|
|
180
|
-
});
|
|
181
|
-
layerDoorStyle = _objectSpread(_objectSpread({}, layerDoorStyle), {}, {
|
|
182
|
-
install: install
|
|
183
|
-
});
|
|
184
|
-
state = state.mergeIn(['scene', 'layers', layerID, 'doorStyle'], layerDoorStyle);
|
|
185
|
-
}
|
|
186
178
|
this.updateZoomScale(state, a);
|
|
187
179
|
viewer2DActions.updateCameraView(_viewer2D);
|
|
188
180
|
return {
|
|
@@ -315,29 +307,52 @@ var Project = /*#__PURE__*/function () {
|
|
|
315
307
|
}
|
|
316
308
|
}, {
|
|
317
309
|
key: "remove",
|
|
318
|
-
value: function remove(state) {
|
|
310
|
+
value: function remove(state, delObject) {
|
|
319
311
|
var selectedLayer = state.getIn(['scene', 'selectedLayer']);
|
|
320
312
|
var _state$getIn = state.getIn(['scene', 'layers', selectedLayer, 'selected']),
|
|
321
313
|
selectedLines = _state$getIn.lines,
|
|
322
314
|
selectedHoles = _state$getIn.holes,
|
|
323
315
|
selectedItems = _state$getIn.items;
|
|
324
|
-
var allVertices = state.getIn(['scene', 'layers', selectedLayer, 'vertices']).toJS();
|
|
325
|
-
var selLines = state.getIn(['scene', 'layers', selectedLayer, 'selected', 'lines']).toJS();
|
|
326
|
-
var lineID = selLines[0];
|
|
327
|
-
var delLine = !isEmpty(lineID) && state.getIn(['scene', 'layers', selectedLayer, 'lines', lineID]).toJS();
|
|
328
|
-
var allLines = state.getIn(['scene', 'layers', selectedLayer, 'lines']).toJS();
|
|
329
316
|
var relatedLines = [];
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
}
|
|
340
|
-
|
|
317
|
+
|
|
318
|
+
// if deleting element is line then get the related lines that to update walls
|
|
319
|
+
if (delObject && delObject.prototype === constants.ELEMENT_LINE || isEmpty(delObject) && !isEmpty(selectedLines)) {
|
|
320
|
+
var allVertices = state.getIn(['scene', 'layers', selectedLayer, 'vertices']).toJS();
|
|
321
|
+
var selLines = state.getIn(['scene', 'layers', selectedLayer, 'selected', constants.ELEMENT_LINE]).toJS();
|
|
322
|
+
var curSelLineID = (delObject === null || delObject === void 0 ? void 0 : delObject.prototype) === constants.ELEMENT_LINE ? delObject.id : selLines[0];
|
|
323
|
+
var delLine = !isEmpty(curSelLineID) && state.getIn(['scene', 'layers', selectedLayer, 'lines', curSelLineID]).toJS();
|
|
324
|
+
var allLines = state.getIn(['scene', 'layers', selectedLayer, 'lines']).toJS();
|
|
325
|
+
!isEmpty(delLine) && GeometryUtils.getRelatedLines(relatedLines, delLine, allVertices, allLines);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// delete element
|
|
329
|
+
if (delObject) {
|
|
330
|
+
switch (delObject.prototype) {
|
|
331
|
+
case constants.ELEMENT_LINE:
|
|
332
|
+
state = Line.remove(state, selectedLayer, delObject.id).updatedState;
|
|
333
|
+
break;
|
|
334
|
+
case constants.ELEMENT_HOLE:
|
|
335
|
+
state = Hole.remove(state, selectedLayer, delObject.id).updatedState;
|
|
336
|
+
break;
|
|
337
|
+
case constants.ELEMENT_ITEM:
|
|
338
|
+
state = Item.remove(state, selectedLayer, delObject.id).updatedState;
|
|
339
|
+
break;
|
|
340
|
+
}
|
|
341
|
+
} else {
|
|
342
|
+
// no specified object, then remove all selected elements
|
|
343
|
+
selectedLines.forEach(function (lineID) {
|
|
344
|
+
state = Line.remove(state, selectedLayer, lineID).updatedState;
|
|
345
|
+
});
|
|
346
|
+
selectedHoles.forEach(function (holeID) {
|
|
347
|
+
state = Hole.remove(state, selectedLayer, holeID).updatedState;
|
|
348
|
+
});
|
|
349
|
+
selectedItems.forEach(function (itemID) {
|
|
350
|
+
state = Item.remove(state, selectedLayer, itemID).updatedState;
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
// update wall if line removed
|
|
355
|
+
if (!isEmpty(relatedLines)) {
|
|
341
356
|
state = state.setIn(['mode'], MODE_DRAWING_LINE);
|
|
342
357
|
relatedLines.forEach(function (relLine, index) {
|
|
343
358
|
state = Line.select(state, selectedLayer, relLine.id).updatedState;
|
|
@@ -811,6 +826,108 @@ var Project = /*#__PURE__*/function () {
|
|
|
811
826
|
updatedState: state
|
|
812
827
|
};
|
|
813
828
|
}
|
|
829
|
+
}, {
|
|
830
|
+
key: "createRoomWithShape",
|
|
831
|
+
value: function createRoomWithShape(state, roomShapeType, width, height, doorStyle) {
|
|
832
|
+
var catalog = state.catalog;
|
|
833
|
+
// keep measurement unit
|
|
834
|
+
var curLayerID = state.scene.selectedLayer;
|
|
835
|
+
var layerUnit = state.getIn(['scene', 'layers', curLayerID, 'unit']);
|
|
836
|
+
var ceilHeight = state.getIn(['scene', 'layers', curLayerID, 'ceilHeight']);
|
|
837
|
+
state = this.newProject(state).updatedState;
|
|
838
|
+
state = state.merge({
|
|
839
|
+
catalog: catalog
|
|
840
|
+
});
|
|
841
|
+
state = Item.setInitialDoorStyle(state, doorStyle).updatedState;
|
|
842
|
+
var layerID = state.scene.selectedLayer;
|
|
843
|
+
if (roomShapeType !== constants.ROOM_SHAPE_TYPE.CUSTOM && !isEmpty(width) && !isEmpty(height) && width !== 0 && height !== 0) {
|
|
844
|
+
var _viewer2D = state.viewer2D;
|
|
845
|
+
var viewer = _viewer2D.toJS();
|
|
846
|
+
if (isEmpty(viewer)) return {
|
|
847
|
+
updatedState: state
|
|
848
|
+
};
|
|
849
|
+
width = convert(width).from(state.getIn(['scene', 'layers', 'layer-1', 'unit'])).to('cm');
|
|
850
|
+
height = convert(height).from(state.getIn(['scene', 'layers', 'layer-1', 'unit'])).to('cm');
|
|
851
|
+
var halfWidth = width / 2;
|
|
852
|
+
var halfHeight = height / 2;
|
|
853
|
+
var viewerWidth = viewer.SVGWidth;
|
|
854
|
+
var viewerHeight = viewer.SVGHeight;
|
|
855
|
+
var centerPos = {
|
|
856
|
+
x: viewerWidth / 2,
|
|
857
|
+
y: viewerHeight / 2
|
|
858
|
+
};
|
|
859
|
+
var vtLB = {
|
|
860
|
+
x: centerPos.x - halfWidth,
|
|
861
|
+
y: centerPos.y - halfHeight
|
|
862
|
+
};
|
|
863
|
+
var vtRB = {
|
|
864
|
+
x: centerPos.x + halfWidth,
|
|
865
|
+
y: centerPos.y - halfHeight
|
|
866
|
+
};
|
|
867
|
+
var vtRT = {
|
|
868
|
+
x: centerPos.x + halfWidth,
|
|
869
|
+
y: centerPos.y + halfHeight
|
|
870
|
+
};
|
|
871
|
+
var vtLT = {
|
|
872
|
+
x: centerPos.x - halfWidth,
|
|
873
|
+
y: centerPos.y + halfHeight
|
|
874
|
+
};
|
|
875
|
+
var vertices = [];
|
|
876
|
+
switch (roomShapeType) {
|
|
877
|
+
case 'rectangle':
|
|
878
|
+
vertices = [vtLB, vtLT, vtRT, vtRB];
|
|
879
|
+
break;
|
|
880
|
+
case constants.ROOM_SHAPE_TYPE.TWO_WALLS_RIGHT_BOTTOM:
|
|
881
|
+
vertices = [vtLB, vtRB, vtRT];
|
|
882
|
+
break;
|
|
883
|
+
case constants.ROOM_SHAPE_TYPE.TWO_WALLS_RIGHT_TOP:
|
|
884
|
+
vertices = [vtRB, vtRT, vtLT];
|
|
885
|
+
break;
|
|
886
|
+
case constants.ROOM_SHAPE_TYPE.TWO_WALLS_LEFT_TOP:
|
|
887
|
+
vertices = [vtRT, vtLT, vtLB];
|
|
888
|
+
break;
|
|
889
|
+
case constants.ROOM_SHAPE_TYPE.TWO_WALLS_LEFT_BOTTOM:
|
|
890
|
+
vertices = [vtLT, vtLB, vtRB];
|
|
891
|
+
break;
|
|
892
|
+
case constants.ROOM_SHAPE_TYPE.THREE_WALLS_LEFT_TOP_RIGHT:
|
|
893
|
+
vertices = [vtRB, vtRT, vtLT, vtLB];
|
|
894
|
+
break;
|
|
895
|
+
case constants.ROOM_SHAPE_TYPE.THREE_WALLS_TOP_RIGHT_BOTTOM:
|
|
896
|
+
vertices = [vtLB, vtRB, vtRT, vtLT];
|
|
897
|
+
break;
|
|
898
|
+
case constants.ROOM_SHAPE_TYPE.THREE_WALLS_RIGHT_BOTTOM_LEFT:
|
|
899
|
+
vertices = [vtLT, vtLB, vtRB, vtRT];
|
|
900
|
+
break;
|
|
901
|
+
case constants.ROOM_SHAPE_TYPE.THREE_WALLS_BOTTOM_LEFT_TOP:
|
|
902
|
+
vertices = [vtRT, vtLT, vtLB, vtRB];
|
|
903
|
+
break;
|
|
904
|
+
}
|
|
905
|
+
for (var i = 0; i < vertices.length - 1; i++) {
|
|
906
|
+
state = Line.create(state, layerID, 'wall', vertices[i].x, vertices[i].y, vertices[i + 1].x, vertices[i + 1].y).updatedState;
|
|
907
|
+
}
|
|
908
|
+
if (roomShapeType === constants.ROOM_SHAPE_TYPE.RECTANGLE) {
|
|
909
|
+
state = Line.create(state, layerID, 'wall', vertices[vertices.length - 1].x, vertices[vertices.length - 1].y, vertices[0].x, vertices[0].y).updatedState;
|
|
910
|
+
}
|
|
911
|
+
var layer = state.getIn(['scene', 'layers', layerID]);
|
|
912
|
+
var lines = layer.getIn(['lines']).toJS();
|
|
913
|
+
var drawingInfo = {};
|
|
914
|
+
var lineKey = Object.keys(lines);
|
|
915
|
+
for (var _i = 0; _i < lineKey.length; _i++) {
|
|
916
|
+
if (!isEmpty(lineKey)) {
|
|
917
|
+
drawingInfo.drawingLine = layer.getIn(['lines', lineKey[_i]]);
|
|
918
|
+
}
|
|
919
|
+
state = Layer.detectAndUpdateAreas(state, layerID, drawingInfo).updatedState;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
// copy keeped measurement unit
|
|
924
|
+
state = state.setIn(['scene', 'layers', layerID, 'unit'], layerUnit);
|
|
925
|
+
state = state.setIn(['scene', 'layers', layerID, 'ceilHeight'], ceilHeight);
|
|
926
|
+
state = centering2D(state);
|
|
927
|
+
return {
|
|
928
|
+
updatedState: state
|
|
929
|
+
};
|
|
930
|
+
}
|
|
814
931
|
}]);
|
|
815
932
|
}();
|
|
816
933
|
export { Project as default };
|
package/es/components/content.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from 'react';
|
|
1
|
+
import React, { useEffect } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import Viewer2D from "./viewer2d/viewer2d";
|
|
4
4
|
import Viewer3D from "./viewer3d/viewer3d";
|
|
@@ -16,9 +16,18 @@ export default function Content(_ref, _ref2) {
|
|
|
16
16
|
setToolbar = _ref.setToolbar,
|
|
17
17
|
replaceCabinet = _ref.replaceCabinet,
|
|
18
18
|
keyDownEnable = _ref.keyDownEnable,
|
|
19
|
-
catalog = _ref.catalog
|
|
19
|
+
catalog = _ref.catalog,
|
|
20
|
+
onInternalEvent = _ref.onInternalEvent;
|
|
20
21
|
var projectActions = _ref2.projectActions;
|
|
21
22
|
var mode = state.get('mode');
|
|
23
|
+
|
|
24
|
+
// Internal Event for unselect_all
|
|
25
|
+
useEffect(function () {
|
|
26
|
+
if (state.getIn(['scene', 'layers', 'layer-1', 'selected', 'vertices']).size + state.getIn(['scene', 'layers', 'layer-1', 'selected', 'lines']).size + state.getIn(['scene', 'layers', 'layer-1', 'selected', 'holes']).size + state.getIn(['scene', 'layers', 'layer-1', 'selected', 'areas']).size + state.getIn(['scene', 'layers', 'layer-1', 'selected', 'items']).size < 1) onInternalEvent === null || onInternalEvent === void 0 || onInternalEvent({
|
|
27
|
+
type: constants.INTERNAL_EVENT_UNSELECT_ALL,
|
|
28
|
+
value: null
|
|
29
|
+
});
|
|
30
|
+
}, [state.getIn(['scene', 'layers', 'layer-1', 'selected'])]);
|
|
22
31
|
switch (mode) {
|
|
23
32
|
// this mode is when view elevation
|
|
24
33
|
case constants.MODE_ELEVATION_VIEW:
|
|
@@ -40,7 +49,8 @@ export default function Content(_ref, _ref2) {
|
|
|
40
49
|
setToolbar: setToolbar,
|
|
41
50
|
replaceCabinet: replaceCabinet,
|
|
42
51
|
keyDownEnable: keyDownEnable,
|
|
43
|
-
downloadFlag: false
|
|
52
|
+
downloadFlag: false,
|
|
53
|
+
onInternalEvent: onInternalEvent
|
|
44
54
|
});
|
|
45
55
|
case constants.MODE_3D_FIRST_PERSON:
|
|
46
56
|
return /*#__PURE__*/React.createElement(Viewer3DFirstPerson, {
|
|
@@ -78,7 +88,8 @@ export default function Content(_ref, _ref2) {
|
|
|
78
88
|
width: width,
|
|
79
89
|
height: height,
|
|
80
90
|
setToolbar: setToolbar,
|
|
81
|
-
replaceCabinet: replaceCabinet
|
|
91
|
+
replaceCabinet: replaceCabinet,
|
|
92
|
+
onInternalEvent: onInternalEvent
|
|
82
93
|
});
|
|
83
94
|
case constants.MODE_ROTATING_ITEM_3D:
|
|
84
95
|
case constants.MODE_DRAGGING_ITEM_3D:
|
|
@@ -94,7 +105,8 @@ export default function Content(_ref, _ref2) {
|
|
|
94
105
|
setToolbar: setToolbar,
|
|
95
106
|
replaceCabinet: replaceCabinet,
|
|
96
107
|
keyDownEnable: keyDownEnable,
|
|
97
|
-
downloadFlag: false
|
|
108
|
+
downloadFlag: false,
|
|
109
|
+
onInternalEvent: onInternalEvent
|
|
98
110
|
});
|
|
99
111
|
|
|
100
112
|
// case constants.MODE_CONFIGURING_PROJECT:
|
|
@@ -119,7 +131,8 @@ Content.propTypes = {
|
|
|
119
131
|
state: PropTypes.object.isRequired,
|
|
120
132
|
width: PropTypes.number.isRequired,
|
|
121
133
|
height: PropTypes.number.isRequired,
|
|
122
|
-
replaceCabinet: PropTypes.func.isRequired
|
|
134
|
+
replaceCabinet: PropTypes.func.isRequired,
|
|
135
|
+
onInternalEvent: PropTypes.func.isRequired
|
|
123
136
|
};
|
|
124
137
|
Content.contextTypes = {
|
|
125
138
|
projectActions: PropTypes.object.isRequired
|
|
@@ -5,7 +5,8 @@ import RulerDist from "./rulerDist";
|
|
|
5
5
|
import { convert } from "../../utils/convert-units-lite";
|
|
6
6
|
import { GeometryUtils } from "../../utils/export";
|
|
7
7
|
import { MODE_ROTATING_ITEM, WALL_CABINET_LAYOUTPOS } from "../../constants";
|
|
8
|
-
import { isEmpty, returnReplaceableDeepSearchType } from "./utils";
|
|
8
|
+
import { isEmpty, isWarningItem, returnReplaceableDeepSearchType } from "./utils";
|
|
9
|
+
import { findCatalogElement } from "../../utils/geometry";
|
|
9
10
|
var STYLE_LINE = {
|
|
10
11
|
fill: '#0096fd',
|
|
11
12
|
stroke: '#0096fd'
|
|
@@ -21,6 +22,7 @@ var STYLE_CIRCLE2 = {
|
|
|
21
22
|
cursor: 'ew-resize'
|
|
22
23
|
};
|
|
23
24
|
export default function Item(_ref, _ref2) {
|
|
25
|
+
var _element$render2D;
|
|
24
26
|
var layer = _ref.layer,
|
|
25
27
|
item = _ref.item,
|
|
26
28
|
scene = _ref.scene,
|
|
@@ -30,7 +32,8 @@ export default function Item(_ref, _ref2) {
|
|
|
30
32
|
var x = item.x,
|
|
31
33
|
y = item.y,
|
|
32
34
|
rotation = item.rotation,
|
|
33
|
-
id = item.id
|
|
35
|
+
id = item.id,
|
|
36
|
+
layoutpos = item.layoutpos;
|
|
34
37
|
var showBaseCabinetMeasure = scene.showBaseCabinetMeasure,
|
|
35
38
|
showWallCabinetMeasure = scene.showWallCabinetMeasure;
|
|
36
39
|
var vertices = layer.vertices;
|
|
@@ -41,6 +44,7 @@ export default function Item(_ref, _ref2) {
|
|
|
41
44
|
var allLineRects;
|
|
42
45
|
var allItemRect;
|
|
43
46
|
var width, height;
|
|
47
|
+
var altitude = item.properties.getIn(['altitude', '_length']);
|
|
44
48
|
var _useState = useState(false),
|
|
45
49
|
_useState2 = _slicedToArray(_useState, 2),
|
|
46
50
|
clockRotateState = _useState2[0],
|
|
@@ -109,16 +113,11 @@ export default function Item(_ref, _ref2) {
|
|
|
109
113
|
var selectedItem;
|
|
110
114
|
if (layer.selected.items.size > 0) {
|
|
111
115
|
selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
|
|
112
|
-
var
|
|
113
|
-
var
|
|
114
|
-
if (!cat) cat = catalog.elements[returnReplaceableDeepSearchType(catid)];
|
|
115
|
-
if (cat === undefined || cat === null) {
|
|
116
|
-
cat = catalog.getIn(['elements', catid]);
|
|
117
|
-
if (!cat) cat = catalog.getIn(['elements', returnReplaceableDeepSearchType(catid)]);
|
|
118
|
-
}
|
|
116
|
+
var _catid = selectedItem.type;
|
|
117
|
+
var _cat = findCatalogElement(catalog, _catid);
|
|
119
118
|
currentItem = {
|
|
120
119
|
selectedItem: selectedItem,
|
|
121
|
-
cat:
|
|
120
|
+
cat: _cat
|
|
122
121
|
};
|
|
123
122
|
}
|
|
124
123
|
layer.items.forEach(function (item) {
|
|
@@ -130,8 +129,7 @@ export default function Item(_ref, _ref2) {
|
|
|
130
129
|
rotRad: item.rotation / 180 * Math.PI
|
|
131
130
|
};
|
|
132
131
|
var catid = item.type;
|
|
133
|
-
var cat = catalog
|
|
134
|
-
if (!cat) cat = catalog.elements[returnReplaceableDeepSearchType(catid)];
|
|
132
|
+
var cat = findCatalogElement(catalog, catid);
|
|
135
133
|
var width = convert(item.properties.getIn(['width', '_length'])).from('in').to('cm');
|
|
136
134
|
var height = convert(item.properties.getIn(['depth', '_length'])).from('in').to('cm');
|
|
137
135
|
// let width = cat.info.sizeinfo.width;
|
|
@@ -150,33 +148,36 @@ export default function Item(_ref, _ref2) {
|
|
|
150
148
|
// }
|
|
151
149
|
|
|
152
150
|
if (!item.selected) {
|
|
153
|
-
var
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
151
|
+
var detectObjectsAtSameAltitudeFlag = layoutpos === 'Base' ? item.properties.getIn(['altitude', '_length']) <= altitude + tempHeight.get('_length') : item.properties.getIn(['altitude', '_length']) + item.properties.getIn(['height', '_length']) >= altitude;
|
|
152
|
+
if (detectObjectsAtSameAltitudeFlag) {
|
|
153
|
+
var _x = val.pos.x;
|
|
154
|
+
var _y = val.pos.y;
|
|
155
|
+
var rotRad = val.rotRad;
|
|
156
|
+
var w = val.size.width / 2;
|
|
157
|
+
var h = val.size.height / 2;
|
|
158
|
+
var mx = _x - w * Math.cos(rotRad);
|
|
159
|
+
var my = _y - w * Math.sin(rotRad);
|
|
160
|
+
var x0 = mx + h * Math.sin(rotRad);
|
|
161
|
+
var y0 = my - h * Math.cos(rotRad);
|
|
162
|
+
var x3 = mx * 2 - x0;
|
|
163
|
+
var y3 = my * 2 - y0;
|
|
164
|
+
var x1 = _x * 2 - x3;
|
|
165
|
+
var y1 = _y * 2 - y3;
|
|
166
|
+
var x2 = _x * 2 - x0;
|
|
167
|
+
var y2 = _y * 2 - y0;
|
|
168
|
+
rectarray.push({
|
|
169
|
+
rect: [point(x0, y0), point(x1, y1), point(x0, y0), point(x1, y1)]
|
|
170
|
+
});
|
|
171
|
+
rectarray.push({
|
|
172
|
+
rect: [point(x1, y1), point(x2, y2), point(x1, y1), point(x2, y2)]
|
|
173
|
+
});
|
|
174
|
+
rectarray.push({
|
|
175
|
+
rect: [point(x2, y2), point(x3, y3), point(x2, y2), point(x3, y3)]
|
|
176
|
+
});
|
|
177
|
+
rectarray.push({
|
|
178
|
+
rect: [point(x3, y3), point(x0, y0), point(x3, y3), point(x0, y0)]
|
|
179
|
+
});
|
|
180
|
+
}
|
|
180
181
|
}
|
|
181
182
|
});
|
|
182
183
|
|
|
@@ -237,25 +238,38 @@ export default function Item(_ref, _ref2) {
|
|
|
237
238
|
*/
|
|
238
239
|
var getDistant = function getDistant(x, y, rotRad) {
|
|
239
240
|
var center_h = 3 * height / 8;
|
|
240
|
-
var center_x = x;
|
|
241
|
+
var center_x = x; // middle of front line of cabinet rect
|
|
241
242
|
var center_y = y;
|
|
242
|
-
var center_x1 = x - center_h * Math.sin(rotRad);
|
|
243
|
+
var center_x1 = x - center_h * Math.sin(rotRad); // center point of cabinet rect
|
|
243
244
|
var center_y1 = y + center_h * Math.cos(rotRad);
|
|
244
245
|
var PointArray = [];
|
|
245
|
-
|
|
246
|
-
var
|
|
246
|
+
var _loop = function _loop(i) {
|
|
247
|
+
var centerpoint = curiteminfo.rectCenterPoint[i];
|
|
248
|
+
// [rectCenterPoint] has four middle points of cabinet rect edges
|
|
249
|
+
var comparelength = []; // distance array from rectCenterPoint[i] to other lines(walls, other cabinet rect edges)
|
|
247
250
|
var a;
|
|
248
|
-
var RectLineFuction;
|
|
251
|
+
var RectLineFuction; // normal line of cabinet rect edge
|
|
249
252
|
if (centerpoint[1] === 180 || centerpoint[1] === 0) RectLineFuction = GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x1, center_y1);else RectLineFuction = GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x, center_y);
|
|
250
253
|
allRect.forEach(function (linerect) {
|
|
254
|
+
// calc distance to all other lines
|
|
251
255
|
var p0 = GeometryUtils.clone_point(linerect.rect[2]);
|
|
252
256
|
var p1 = GeometryUtils.clone_point(linerect.rect[3]);
|
|
253
|
-
var lineFunction = {};
|
|
257
|
+
var lineFunction = {}; // other line function
|
|
254
258
|
if (p0.x !== p1.x || p0.y !== p1.y) lineFunction = GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
|
|
259
|
+
// intersection between normal line and other line
|
|
255
260
|
var coordinatePoint = GeometryUtils.twoLinesIntersection(lineFunction.a, lineFunction.b, lineFunction.c, RectLineFuction.a, RectLineFuction.b, RectLineFuction.c);
|
|
256
261
|
if (coordinatePoint !== undefined) {
|
|
257
|
-
if (
|
|
258
|
-
|
|
262
|
+
if (
|
|
263
|
+
// intersection point is on the other line
|
|
264
|
+
GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
|
|
265
|
+
// check the intersection point is outside direction of edge
|
|
266
|
+
var isOutside = true;
|
|
267
|
+
for (var j = 0; j < curiteminfo.rectCenterPoint.length; j++) {
|
|
268
|
+
if (j === i) continue;
|
|
269
|
+
var otherCenterPoint = curiteminfo.rectCenterPoint[j];
|
|
270
|
+
if (GeometryUtils.isPointOnLineSegment(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y, otherCenterPoint[0].x, otherCenterPoint[0].y)) isOutside = false;
|
|
271
|
+
}
|
|
272
|
+
if (isOutside && GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
|
|
259
273
|
comparelength.push(GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y));
|
|
260
274
|
a = Math.min.apply(null, comparelength);
|
|
261
275
|
}
|
|
@@ -263,7 +277,10 @@ export default function Item(_ref, _ref2) {
|
|
|
263
277
|
}
|
|
264
278
|
});
|
|
265
279
|
PointArray.push([a, centerpoint[1]]);
|
|
266
|
-
}
|
|
280
|
+
};
|
|
281
|
+
for (var i = 0; i < curiteminfo.rectCenterPoint.length; i++) {
|
|
282
|
+
_loop(i);
|
|
283
|
+
}
|
|
267
284
|
return {
|
|
268
285
|
PointArray: PointArray
|
|
269
286
|
};
|
|
@@ -272,9 +289,22 @@ export default function Item(_ref, _ref2) {
|
|
|
272
289
|
var nh = height / 2;
|
|
273
290
|
var _getDistant = getDistant(x, y, val.rotRad),
|
|
274
291
|
PointArray = _getDistant.PointArray;
|
|
292
|
+
var catid = item.type;
|
|
293
|
+
var cat = catalog.elements[catid];
|
|
275
294
|
PointArray.forEach(function (pointElement, index) {
|
|
276
295
|
if (pointElement[0] == undefined) PointArray[index][0] = 0;
|
|
296
|
+
// if (pointElement[1] === -90 && cat.info.is_corner !== 1) {
|
|
297
|
+
// PointArray[index][0] -= 4;
|
|
298
|
+
// }
|
|
299
|
+
});
|
|
300
|
+
var cnt = 0;
|
|
301
|
+
PointArray.forEach(function (pointElement) {
|
|
302
|
+
if (pointElement[0] == 0) cnt++;
|
|
277
303
|
});
|
|
304
|
+
if (cnt == 4 || cnt == 3) {
|
|
305
|
+
PointArray[0][0] = 100;
|
|
306
|
+
PointArray[1][0] = 100;
|
|
307
|
+
}
|
|
278
308
|
if (Array.isArray(PointArray)) {
|
|
279
309
|
itemsActions.storeDistArray(layerID, id, PointArray);
|
|
280
310
|
}
|
|
@@ -302,12 +332,12 @@ export default function Item(_ref, _ref2) {
|
|
|
302
332
|
length: itemDistanceFromLine,
|
|
303
333
|
angle: rotation,
|
|
304
334
|
rotation: element[1],
|
|
305
|
-
transform: "translate(".concat(element[1] === 180 ? -nw : element[1] === 0 ? nw : 0, ", ").concat(element[1] === 90 ? nh : element[1] === -90 ? -nh
|
|
335
|
+
transform: "translate(".concat(element[1] === 180 ? -nw : element[1] === 0 ? nw : 0, ", ").concat(element[1] === 90 ? nh : element[1] === -90 ? cat.info.is_corner !== 1 ? -(nh + 4) : -nh : 0, ") rotate(").concat(element[1], ", 0, 0)")
|
|
306
336
|
})));
|
|
307
337
|
}
|
|
308
338
|
});
|
|
309
339
|
}
|
|
310
|
-
var renderedItem = element.render2D.call(element, item, layer, scene);
|
|
340
|
+
var renderedItem = element === null || element === void 0 || (_element$render2D = element.render2D) === null || _element$render2D === void 0 ? void 0 : _element$render2D.call(element, item, layer, scene);
|
|
311
341
|
var isSmall = false;
|
|
312
342
|
if (width < 40) isSmall = true;
|
|
313
343
|
var parts = [];
|
|
@@ -384,7 +414,10 @@ export default function Item(_ref, _ref2) {
|
|
|
384
414
|
y: "-19",
|
|
385
415
|
height: "16",
|
|
386
416
|
width: "16",
|
|
387
|
-
style: {
|
|
417
|
+
style: isWarningItem(item) ? {
|
|
418
|
+
transform: 'rotateX(180deg)',
|
|
419
|
+
opacity: 0.5
|
|
420
|
+
} : {
|
|
388
421
|
transform: 'rotateX(180deg)'
|
|
389
422
|
}
|
|
390
423
|
})), /*#__PURE__*/React.createElement("g", {
|