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.
Files changed (111) hide show
  1. package/es/LiteKitchenConfigurator.js +141 -288
  2. package/es/LiteRenderer.js +159 -398
  3. package/es/actions/items-actions.js +10 -6
  4. package/es/actions/lines-actions.js +3 -1
  5. package/es/actions/project-actions.js +15 -5
  6. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  7. package/es/catalog/areas/area/planner-element.js +10 -5
  8. package/es/catalog/catalog.js +1 -4
  9. package/es/catalog/factories/area-factory-3d.js +2 -1
  10. package/es/catalog/factories/wall-factory-3d.js +2 -2
  11. package/es/catalog/factories/wall-factory.js +8 -8
  12. package/es/catalog/lines/wall/planner-element.js +18 -9
  13. package/es/catalog/utils/exporter.js +7 -3
  14. package/es/catalog/utils/item-loader.js +24 -14
  15. package/es/catalog/utils/mtl-loader.js +2 -2
  16. package/es/catalog/utils/obj-loader.js +2 -2
  17. package/es/class/hole.js +0 -2
  18. package/es/class/item.js +183 -184
  19. package/es/class/line.js +11 -3
  20. package/es/class/project.js +165 -48
  21. package/es/components/content.js +19 -6
  22. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  23. package/es/components/viewer2d/item.js +84 -51
  24. package/es/components/viewer2d/line.js +315 -243
  25. package/es/components/viewer2d/ruler.js +20 -38
  26. package/es/components/viewer2d/rulerDist.js +48 -78
  27. package/es/components/viewer2d/utils.js +6 -0
  28. package/es/components/viewer2d/viewer2d.js +298 -220
  29. package/es/components/viewer3d/front3D.js +3 -2
  30. package/es/components/viewer3d/libs/mtl-loader.js +2 -2
  31. package/es/components/viewer3d/libs/obj-loader.js +2 -2
  32. package/es/components/viewer3d/libs/orbit-controls.js +3 -4
  33. package/es/components/viewer3d/libs/pointer-lock-controls.js +6 -7
  34. package/es/components/viewer3d/scene-creator.js +51 -15
  35. package/es/components/viewer3d/viewer3d.js +121 -82
  36. package/es/constants.js +111 -3
  37. package/es/devLiteRenderer.js +688 -31
  38. package/es/index.js +567 -87
  39. package/es/models.js +9 -5
  40. package/es/plugins/SVGLoader.js +7 -5
  41. package/es/plugins/console-debugger.js +0 -2
  42. package/es/plugins/keyboard.js +15 -6
  43. package/es/reducers/items-reducer.js +5 -5
  44. package/es/reducers/lines-reducer.js +1 -1
  45. package/es/reducers/project-reducer.js +5 -3
  46. package/es/shared-style.js +4 -4
  47. package/es/utils/geometry.js +163 -2
  48. package/es/utils/get-edges-of-subgraphs.js +1 -1
  49. package/es/utils/graph-cycles.js +1 -1
  50. package/es/utils/graph.js +1 -1
  51. package/es/utils/helper.js +105 -3
  52. package/es/utils/isolate-event-handler.js +1542 -164
  53. package/es/utils/molding.js +461 -11
  54. package/lib/LiteKitchenConfigurator.js +141 -289
  55. package/lib/LiteRenderer.js +159 -399
  56. package/lib/actions/items-actions.js +10 -6
  57. package/lib/actions/lines-actions.js +3 -1
  58. package/lib/actions/project-actions.js +15 -4
  59. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  60. package/lib/catalog/areas/area/planner-element.js +11 -5
  61. package/lib/catalog/catalog.js +1 -4
  62. package/lib/catalog/factories/area-factory-3d.js +2 -1
  63. package/lib/catalog/factories/wall-factory-3d.js +2 -2
  64. package/lib/catalog/factories/wall-factory.js +8 -8
  65. package/lib/catalog/lines/wall/planner-element.js +19 -9
  66. package/lib/catalog/utils/exporter.js +7 -3
  67. package/lib/catalog/utils/item-loader.js +24 -14
  68. package/lib/catalog/utils/mtl-loader.js +9 -2
  69. package/lib/catalog/utils/obj-loader.js +10 -2
  70. package/lib/class/hole.js +0 -2
  71. package/lib/class/item.js +180 -181
  72. package/lib/class/line.js +9 -1
  73. package/lib/class/project.js +164 -47
  74. package/lib/components/content.js +19 -6
  75. package/lib/components/viewer2d/grids/grid-streak.js +1 -1
  76. package/lib/components/viewer2d/item.js +83 -50
  77. package/lib/components/viewer2d/line.js +315 -242
  78. package/lib/components/viewer2d/ruler.js +19 -37
  79. package/lib/components/viewer2d/rulerDist.js +48 -78
  80. package/lib/components/viewer2d/utils.js +7 -0
  81. package/lib/components/viewer2d/viewer2d.js +296 -219
  82. package/lib/components/viewer3d/front3D.js +3 -2
  83. package/lib/components/viewer3d/libs/mtl-loader.js +9 -2
  84. package/lib/components/viewer3d/libs/obj-loader.js +9 -2
  85. package/lib/components/viewer3d/libs/orbit-controls.js +11 -5
  86. package/lib/components/viewer3d/libs/pointer-lock-controls.js +13 -7
  87. package/lib/components/viewer3d/scene-creator.js +49 -13
  88. package/lib/components/viewer3d/viewer3d.js +119 -80
  89. package/lib/constants.js +116 -7
  90. package/lib/devLiteRenderer.js +687 -30
  91. package/lib/index.js +567 -87
  92. package/lib/models.js +9 -5
  93. package/lib/plugins/SVGLoader.js +7 -5
  94. package/lib/plugins/console-debugger.js +0 -2
  95. package/lib/plugins/keyboard.js +15 -6
  96. package/lib/reducers/items-reducer.js +5 -5
  97. package/lib/reducers/lines-reducer.js +1 -1
  98. package/lib/reducers/project-reducer.js +4 -2
  99. package/lib/shared-style.js +4 -4
  100. package/lib/utils/geometry.js +164 -2
  101. package/lib/utils/get-edges-of-subgraphs.js +6 -1
  102. package/lib/utils/graph-cycles.js +7 -8
  103. package/lib/utils/graph.js +6 -1
  104. package/lib/utils/helper.js +108 -2
  105. package/lib/utils/isolate-event-handler.js +1538 -159
  106. package/lib/utils/molding.js +463 -9
  107. package/package.json +1 -1
  108. package/es/assets/Window.hdr +0 -2100
  109. package/es/assets/img/1.jpg +0 -0
  110. package/lib/assets/Window.hdr +0 -2100
  111. 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
  };
@@ -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 doorStyle = state.toJS().doorStyle === null ? null : state.toJS().doorStyle;
37
- var oStyle = state.oStyle;
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, categoryData) {
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 _state = state,
80
- oldScene = _state.scene,
81
- oldSceneHistory = _state.sceneHistory;
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
- if (!doorStyle) {
158
- if (state.getIn(['scene', 'layers', layerID, 'doorStyle'])) {
159
- doorStyle = state.getIn(['scene', 'layers', layerID, 'doorStyle']);
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
- !isEmpty(delLine) && GeometryUtils.getRelatedLines(relatedLines, delLine, allVertices, allLines);
331
- selectedLines.forEach(function (lineID) {
332
- state = Line.remove(state, selectedLayer, lineID).updatedState;
333
- });
334
- selectedHoles.forEach(function (holeID) {
335
- state = Hole.remove(state, selectedLayer, holeID).updatedState;
336
- });
337
- selectedItems.forEach(function (itemID) {
338
- state = Item.remove(state, selectedLayer, itemID).updatedState;
339
- });
340
- if (!isEmpty(selectedLines) && !isEmpty(relatedLines)) {
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 };
@@ -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
@@ -22,7 +22,7 @@ export default function GridStreak(_ref) {
22
22
  key: i,
23
23
  cx: x,
24
24
  cy: y,
25
- r: 1.5,
25
+ r: 2,
26
26
  fill: color
27
27
  }));
28
28
  }
@@ -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 catid = selectedItem.type;
113
- var cat = catalog.elements[catid];
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: 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.elements[catid];
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 _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
- });
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
- curiteminfo.rectCenterPoint.forEach(function (centerpoint) {
246
- var comparelength = [];
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 (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)) {
258
- if (GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
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 : 3 * nh / 4, ") rotate(").concat(element[1], ", 0, 0)")
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", {