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/lib/class/line.js CHANGED
@@ -435,7 +435,8 @@ var Line = exports["default"] = /*#__PURE__*/function () {
435
435
  }
436
436
  }, {
437
437
  key: "beginDrawingLine",
438
- value: function beginDrawingLine(state, layerID, x, y) {
438
+ value: function beginDrawingLine(state, layerID, x, y, onInternalEvent) {
439
+ var _state$get;
439
440
  // if end drawing by created area
440
441
  if (state.mode == _constants.MODE_IDLE) {
441
442
  return {
@@ -488,6 +489,13 @@ var Line = exports["default"] = /*#__PURE__*/function () {
488
489
  activeSnapElement: snap ? snap.snap : null,
489
490
  drawingSupport: drawingSupport
490
491
  });
492
+ var layer = state.getIn(['scene', 'layers', layerID]);
493
+ var catalog = (_state$get = state.get('catalog')) === null || _state$get === void 0 ? void 0 : _state$get.toJS();
494
+ var payload = (0, _helper.updatePayloadOfInternalEvent)(line, layer, catalog);
495
+ if (onInternalEvent) onInternalEvent({
496
+ type: _constants.INTERNAL_EVENT_START_DRAW_WALL,
497
+ value: payload
498
+ });
491
499
  return {
492
500
  updatedState: state
493
501
  };
@@ -17,6 +17,7 @@ var _export = require("../utils/export");
17
17
  var _export2 = require("../class/export");
18
18
  var viewer2DActions = _interopRequireWildcard(require("../actions/viewer2d-actions"));
19
19
  var _helper = require("../utils/helper");
20
+ var _convertUnitsLite = require("../utils/convert-units-lite");
20
21
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
21
22
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
22
23
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
@@ -42,8 +43,8 @@ var Project = exports["default"] = /*#__PURE__*/function () {
42
43
  }, {
43
44
  key: "newProject",
44
45
  value: function newProject(state) {
45
- var doorStyle = state.toJS().doorStyle === null ? null : state.toJS().doorStyle;
46
- var oStyle = state.oStyle;
46
+ var _state$toJS$doorStyle, _state;
47
+ 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;
47
48
  // let counterTop = state.getIn(['scene', 'layers', layerID, 'counterTop']);
48
49
  // let floorStyle = state.getIn(['scene', 'layers', layerID, 'floorStyle']);
49
50
  var _viewer2D = state.viewer2D;
@@ -57,7 +58,6 @@ var Project = exports["default"] = /*#__PURE__*/function () {
57
58
  state = new _models.State({});
58
59
  state = state.merge({
59
60
  doorStyle: doorStyle,
60
- oStyle: oStyle,
61
61
  viewer2D: _viewer2D
62
62
  });
63
63
  // state = Item.setCounterTop(state, counterTop).updatedState;
@@ -68,9 +68,8 @@ var Project = exports["default"] = /*#__PURE__*/function () {
68
68
  }
69
69
  }, {
70
70
  key: "loadProject",
71
- value: function loadProject(state, sceneJSON, categoryData) {
71
+ value: function loadProject(state, sceneJSON) {
72
72
  var doorStyle = state.doorStyle;
73
- var oStyle = state.oStyle;
74
73
  var layerID = state.scene.selectedLayer;
75
74
  var _viewer2D = state.viewer2D;
76
75
  var viewer = state.viewer2D.toJS();
@@ -85,9 +84,9 @@ var Project = exports["default"] = /*#__PURE__*/function () {
85
84
  a: 0.99,
86
85
  d: 0.99
87
86
  });
88
- var _state = state,
89
- oldScene = _state.scene,
90
- oldSceneHistory = _state.sceneHistory;
87
+ var _state2 = state,
88
+ oldScene = _state2.scene,
89
+ oldSceneHistory = _state2.sceneHistory;
91
90
  var json_items = sceneJSON.layers[sceneJSON.selectedLayer].items;
92
91
  var elements = state.catalog.get('elements').toArray();
93
92
  var _loop = function _loop(x) {
@@ -102,6 +101,17 @@ var Project = exports["default"] = /*#__PURE__*/function () {
102
101
  for (var x in json_items) {
103
102
  _loop(x);
104
103
  }
104
+
105
+ // making layer's doorStyle when changing room shape
106
+ // THIS LOGIC WAS MOVED TO SET INITIAL DOOR STYLE
107
+ // if (isEmpty(sceneJSON?.layers[layerID]?.doorStyle)) {
108
+ // let newlayer = {
109
+ // ...sceneJSON?.layers[layerID],
110
+ // doorStyle: doorStyle.toJS()
111
+ // };
112
+ // sceneJSON && (sceneJSON.layers[layerID] = newlayer);
113
+ // }
114
+
105
115
  var newScene = new _models.Scene(sceneJSON);
106
116
  state = new _models.State({
107
117
  scene: newScene.toJS(),
@@ -163,35 +173,17 @@ var Project = exports["default"] = /*#__PURE__*/function () {
163
173
  f: f
164
174
  });
165
175
  }
166
- if (!doorStyle) {
167
- if (state.getIn(['scene', 'layers', layerID, 'doorStyle'])) {
168
- doorStyle = state.getIn(['scene', 'layers', layerID, 'doorStyle']);
169
- }
176
+
177
+ // Matching state.doorStyle with layer.doorStyle
178
+ if (state.getIn(['scene', 'layers', layerID, 'doorStyle'])) {
179
+ doorStyle = state.getIn(['scene', 'layers', layerID, 'doorStyle']);
170
180
  }
171
181
  state = state.merge({
172
182
  doorStyle: doorStyle,
173
- oStyle: oStyle,
174
183
  viewer2D: _viewer2D
175
184
  });
176
185
  state = _export2.Item.setCounterTop(state, counterTop).updatedState;
177
186
  state = _export2.Area.setFloorStyles(state, floorStyle).updatedState;
178
- if (state.getIn(['scene', 'layers', layerID, 'doorStyle']) && !state.getIn(['scene', 'layers', layerID, 'doorStyle', 'install'])) {
179
- var layerDoorStyle = state.getIn(['scene', 'layers', layerID, 'doorStyle']);
180
- var install = '';
181
- categoryData.data.doorStyles.items.forEach(function (category) {
182
- category.items.forEach(function (element) {
183
- if (element.items.filter(function (it) {
184
- return it.id === layerDoorStyle.id && (layerDoorStyle.install ? category.name === layerDoorStyle.install : true);
185
- }).length) {
186
- install = category.name;
187
- }
188
- });
189
- });
190
- layerDoorStyle = _objectSpread(_objectSpread({}, layerDoorStyle), {}, {
191
- install: install
192
- });
193
- state = state.mergeIn(['scene', 'layers', layerID, 'doorStyle'], layerDoorStyle);
194
- }
195
187
  this.updateZoomScale(state, a);
196
188
  viewer2DActions.updateCameraView(_viewer2D);
197
189
  return {
@@ -324,29 +316,52 @@ var Project = exports["default"] = /*#__PURE__*/function () {
324
316
  }
325
317
  }, {
326
318
  key: "remove",
327
- value: function remove(state) {
319
+ value: function remove(state, delObject) {
328
320
  var selectedLayer = state.getIn(['scene', 'selectedLayer']);
329
321
  var _state$getIn = state.getIn(['scene', 'layers', selectedLayer, 'selected']),
330
322
  selectedLines = _state$getIn.lines,
331
323
  selectedHoles = _state$getIn.holes,
332
324
  selectedItems = _state$getIn.items;
333
- var allVertices = state.getIn(['scene', 'layers', selectedLayer, 'vertices']).toJS();
334
- var selLines = state.getIn(['scene', 'layers', selectedLayer, 'selected', 'lines']).toJS();
335
- var lineID = selLines[0];
336
- var delLine = !(0, _helper.isEmpty)(lineID) && state.getIn(['scene', 'layers', selectedLayer, 'lines', lineID]).toJS();
337
- var allLines = state.getIn(['scene', 'layers', selectedLayer, 'lines']).toJS();
338
325
  var relatedLines = [];
339
- !(0, _helper.isEmpty)(delLine) && _export.GeometryUtils.getRelatedLines(relatedLines, delLine, allVertices, allLines);
340
- selectedLines.forEach(function (lineID) {
341
- state = _export2.Line.remove(state, selectedLayer, lineID).updatedState;
342
- });
343
- selectedHoles.forEach(function (holeID) {
344
- state = _export2.Hole.remove(state, selectedLayer, holeID).updatedState;
345
- });
346
- selectedItems.forEach(function (itemID) {
347
- state = _export2.Item.remove(state, selectedLayer, itemID).updatedState;
348
- });
349
- if (!(0, _helper.isEmpty)(selectedLines) && !(0, _helper.isEmpty)(relatedLines)) {
326
+
327
+ // if deleting element is line then get the related lines that to update walls
328
+ if (delObject && delObject.prototype === constants.ELEMENT_LINE || (0, _helper.isEmpty)(delObject) && !(0, _helper.isEmpty)(selectedLines)) {
329
+ var allVertices = state.getIn(['scene', 'layers', selectedLayer, 'vertices']).toJS();
330
+ var selLines = state.getIn(['scene', 'layers', selectedLayer, 'selected', constants.ELEMENT_LINE]).toJS();
331
+ var curSelLineID = (delObject === null || delObject === void 0 ? void 0 : delObject.prototype) === constants.ELEMENT_LINE ? delObject.id : selLines[0];
332
+ var delLine = !(0, _helper.isEmpty)(curSelLineID) && state.getIn(['scene', 'layers', selectedLayer, 'lines', curSelLineID]).toJS();
333
+ var allLines = state.getIn(['scene', 'layers', selectedLayer, 'lines']).toJS();
334
+ !(0, _helper.isEmpty)(delLine) && _export.GeometryUtils.getRelatedLines(relatedLines, delLine, allVertices, allLines);
335
+ }
336
+
337
+ // delete element
338
+ if (delObject) {
339
+ switch (delObject.prototype) {
340
+ case constants.ELEMENT_LINE:
341
+ state = _export2.Line.remove(state, selectedLayer, delObject.id).updatedState;
342
+ break;
343
+ case constants.ELEMENT_HOLE:
344
+ state = _export2.Hole.remove(state, selectedLayer, delObject.id).updatedState;
345
+ break;
346
+ case constants.ELEMENT_ITEM:
347
+ state = _export2.Item.remove(state, selectedLayer, delObject.id).updatedState;
348
+ break;
349
+ }
350
+ } else {
351
+ // no specified object, then remove all selected elements
352
+ selectedLines.forEach(function (lineID) {
353
+ state = _export2.Line.remove(state, selectedLayer, lineID).updatedState;
354
+ });
355
+ selectedHoles.forEach(function (holeID) {
356
+ state = _export2.Hole.remove(state, selectedLayer, holeID).updatedState;
357
+ });
358
+ selectedItems.forEach(function (itemID) {
359
+ state = _export2.Item.remove(state, selectedLayer, itemID).updatedState;
360
+ });
361
+ }
362
+
363
+ // update wall if line removed
364
+ if (!(0, _helper.isEmpty)(relatedLines)) {
350
365
  state = state.setIn(['mode'], _constants.MODE_DRAWING_LINE);
351
366
  relatedLines.forEach(function (relLine, index) {
352
367
  state = _export2.Line.select(state, selectedLayer, relLine.id).updatedState;
@@ -820,6 +835,108 @@ var Project = exports["default"] = /*#__PURE__*/function () {
820
835
  updatedState: state
821
836
  };
822
837
  }
838
+ }, {
839
+ key: "createRoomWithShape",
840
+ value: function createRoomWithShape(state, roomShapeType, width, height, doorStyle) {
841
+ var catalog = state.catalog;
842
+ // keep measurement unit
843
+ var curLayerID = state.scene.selectedLayer;
844
+ var layerUnit = state.getIn(['scene', 'layers', curLayerID, 'unit']);
845
+ var ceilHeight = state.getIn(['scene', 'layers', curLayerID, 'ceilHeight']);
846
+ state = this.newProject(state).updatedState;
847
+ state = state.merge({
848
+ catalog: catalog
849
+ });
850
+ state = _export2.Item.setInitialDoorStyle(state, doorStyle).updatedState;
851
+ var layerID = state.scene.selectedLayer;
852
+ if (roomShapeType !== constants.ROOM_SHAPE_TYPE.CUSTOM && !(0, _helper.isEmpty)(width) && !(0, _helper.isEmpty)(height) && width !== 0 && height !== 0) {
853
+ var _viewer2D = state.viewer2D;
854
+ var viewer = _viewer2D.toJS();
855
+ if ((0, _helper.isEmpty)(viewer)) return {
856
+ updatedState: state
857
+ };
858
+ width = (0, _convertUnitsLite.convert)(width).from(state.getIn(['scene', 'layers', 'layer-1', 'unit'])).to('cm');
859
+ height = (0, _convertUnitsLite.convert)(height).from(state.getIn(['scene', 'layers', 'layer-1', 'unit'])).to('cm');
860
+ var halfWidth = width / 2;
861
+ var halfHeight = height / 2;
862
+ var viewerWidth = viewer.SVGWidth;
863
+ var viewerHeight = viewer.SVGHeight;
864
+ var centerPos = {
865
+ x: viewerWidth / 2,
866
+ y: viewerHeight / 2
867
+ };
868
+ var vtLB = {
869
+ x: centerPos.x - halfWidth,
870
+ y: centerPos.y - halfHeight
871
+ };
872
+ var vtRB = {
873
+ x: centerPos.x + halfWidth,
874
+ y: centerPos.y - halfHeight
875
+ };
876
+ var vtRT = {
877
+ x: centerPos.x + halfWidth,
878
+ y: centerPos.y + halfHeight
879
+ };
880
+ var vtLT = {
881
+ x: centerPos.x - halfWidth,
882
+ y: centerPos.y + halfHeight
883
+ };
884
+ var vertices = [];
885
+ switch (roomShapeType) {
886
+ case 'rectangle':
887
+ vertices = [vtLB, vtLT, vtRT, vtRB];
888
+ break;
889
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_RIGHT_BOTTOM:
890
+ vertices = [vtLB, vtRB, vtRT];
891
+ break;
892
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_RIGHT_TOP:
893
+ vertices = [vtRB, vtRT, vtLT];
894
+ break;
895
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_LEFT_TOP:
896
+ vertices = [vtRT, vtLT, vtLB];
897
+ break;
898
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_LEFT_BOTTOM:
899
+ vertices = [vtLT, vtLB, vtRB];
900
+ break;
901
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_LEFT_TOP_RIGHT:
902
+ vertices = [vtRB, vtRT, vtLT, vtLB];
903
+ break;
904
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_TOP_RIGHT_BOTTOM:
905
+ vertices = [vtLB, vtRB, vtRT, vtLT];
906
+ break;
907
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_RIGHT_BOTTOM_LEFT:
908
+ vertices = [vtLT, vtLB, vtRB, vtRT];
909
+ break;
910
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_BOTTOM_LEFT_TOP:
911
+ vertices = [vtRT, vtLT, vtLB, vtRB];
912
+ break;
913
+ }
914
+ for (var i = 0; i < vertices.length - 1; i++) {
915
+ state = _export2.Line.create(state, layerID, 'wall', vertices[i].x, vertices[i].y, vertices[i + 1].x, vertices[i + 1].y).updatedState;
916
+ }
917
+ if (roomShapeType === constants.ROOM_SHAPE_TYPE.RECTANGLE) {
918
+ state = _export2.Line.create(state, layerID, 'wall', vertices[vertices.length - 1].x, vertices[vertices.length - 1].y, vertices[0].x, vertices[0].y).updatedState;
919
+ }
920
+ var layer = state.getIn(['scene', 'layers', layerID]);
921
+ var lines = layer.getIn(['lines']).toJS();
922
+ var drawingInfo = {};
923
+ var lineKey = Object.keys(lines);
924
+ for (var _i = 0; _i < lineKey.length; _i++) {
925
+ if (!(0, _helper.isEmpty)(lineKey)) {
926
+ drawingInfo.drawingLine = layer.getIn(['lines', lineKey[_i]]);
927
+ }
928
+ state = _export2.Layer.detectAndUpdateAreas(state, layerID, drawingInfo).updatedState;
929
+ }
930
+ }
931
+
932
+ // copy keeped measurement unit
933
+ state = state.setIn(['scene', 'layers', layerID, 'unit'], layerUnit);
934
+ state = state.setIn(['scene', 'layers', layerID, 'ceilHeight'], ceilHeight);
935
+ state = (0, _helper.centering2D)(state);
936
+ return {
937
+ updatedState: state
938
+ };
939
+ }
823
940
  }]);
824
941
  }();
825
942
  module.exports = exports.default;
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
8
  exports["default"] = Content;
9
- var _react = _interopRequireDefault(require("react"));
9
+ var _react = _interopRequireWildcard(require("react"));
10
10
  var _propTypes = _interopRequireDefault(require("prop-types"));
11
11
  var _viewer2d = _interopRequireDefault(require("./viewer2d/viewer2d"));
12
12
  var _viewer3d = _interopRequireDefault(require("./viewer3d/viewer3d"));
@@ -26,9 +26,18 @@ function Content(_ref, _ref2) {
26
26
  setToolbar = _ref.setToolbar,
27
27
  replaceCabinet = _ref.replaceCabinet,
28
28
  keyDownEnable = _ref.keyDownEnable,
29
- catalog = _ref.catalog;
29
+ catalog = _ref.catalog,
30
+ onInternalEvent = _ref.onInternalEvent;
30
31
  var projectActions = _ref2.projectActions;
31
32
  var mode = state.get('mode');
33
+
34
+ // Internal Event for unselect_all
35
+ (0, _react.useEffect)(function () {
36
+ 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({
37
+ type: constants.INTERNAL_EVENT_UNSELECT_ALL,
38
+ value: null
39
+ });
40
+ }, [state.getIn(['scene', 'layers', 'layer-1', 'selected'])]);
32
41
  switch (mode) {
33
42
  // this mode is when view elevation
34
43
  case constants.MODE_ELEVATION_VIEW:
@@ -50,7 +59,8 @@ function Content(_ref, _ref2) {
50
59
  setToolbar: setToolbar,
51
60
  replaceCabinet: replaceCabinet,
52
61
  keyDownEnable: keyDownEnable,
53
- downloadFlag: false
62
+ downloadFlag: false,
63
+ onInternalEvent: onInternalEvent
54
64
  });
55
65
  case constants.MODE_3D_FIRST_PERSON:
56
66
  return /*#__PURE__*/_react["default"].createElement(_viewer3dFirstPerson["default"], {
@@ -88,7 +98,8 @@ function Content(_ref, _ref2) {
88
98
  width: width,
89
99
  height: height,
90
100
  setToolbar: setToolbar,
91
- replaceCabinet: replaceCabinet
101
+ replaceCabinet: replaceCabinet,
102
+ onInternalEvent: onInternalEvent
92
103
  });
93
104
  case constants.MODE_ROTATING_ITEM_3D:
94
105
  case constants.MODE_DRAGGING_ITEM_3D:
@@ -104,7 +115,8 @@ function Content(_ref, _ref2) {
104
115
  setToolbar: setToolbar,
105
116
  replaceCabinet: replaceCabinet,
106
117
  keyDownEnable: keyDownEnable,
107
- downloadFlag: false
118
+ downloadFlag: false,
119
+ onInternalEvent: onInternalEvent
108
120
  });
109
121
 
110
122
  // case constants.MODE_CONFIGURING_PROJECT:
@@ -129,7 +141,8 @@ Content.propTypes = {
129
141
  state: _propTypes["default"].object.isRequired,
130
142
  width: _propTypes["default"].number.isRequired,
131
143
  height: _propTypes["default"].number.isRequired,
132
- replaceCabinet: _propTypes["default"].func.isRequired
144
+ replaceCabinet: _propTypes["default"].func.isRequired,
145
+ onInternalEvent: _propTypes["default"].func.isRequired
133
146
  };
134
147
  Content.contextTypes = {
135
148
  projectActions: _propTypes["default"].object.isRequired
@@ -29,7 +29,7 @@ function GridStreak(_ref) {
29
29
  key: i,
30
30
  cx: x,
31
31
  cy: y,
32
- r: 1.5,
32
+ r: 2,
33
33
  fill: color
34
34
  }));
35
35
  }
@@ -14,6 +14,7 @@ var _convertUnitsLite = require("../../utils/convert-units-lite");
14
14
  var _export = require("../../utils/export");
15
15
  var _constants = require("../../constants");
16
16
  var _utils = require("./utils");
17
+ var _geometry = require("../../utils/geometry");
17
18
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
18
19
  var STYLE_LINE = {
19
20
  fill: '#0096fd',
@@ -30,6 +31,7 @@ var STYLE_CIRCLE2 = {
30
31
  cursor: 'ew-resize'
31
32
  };
32
33
  function Item(_ref, _ref2) {
34
+ var _element$render2D;
33
35
  var layer = _ref.layer,
34
36
  item = _ref.item,
35
37
  scene = _ref.scene,
@@ -39,7 +41,8 @@ function Item(_ref, _ref2) {
39
41
  var x = item.x,
40
42
  y = item.y,
41
43
  rotation = item.rotation,
42
- id = item.id;
44
+ id = item.id,
45
+ layoutpos = item.layoutpos;
43
46
  var showBaseCabinetMeasure = scene.showBaseCabinetMeasure,
44
47
  showWallCabinetMeasure = scene.showWallCabinetMeasure;
45
48
  var vertices = layer.vertices;
@@ -50,6 +53,7 @@ function Item(_ref, _ref2) {
50
53
  var allLineRects;
51
54
  var allItemRect;
52
55
  var width, height;
56
+ var altitude = item.properties.getIn(['altitude', '_length']);
53
57
  var _useState = (0, _react.useState)(false),
54
58
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
55
59
  clockRotateState = _useState2[0],
@@ -118,16 +122,11 @@ function Item(_ref, _ref2) {
118
122
  var selectedItem;
119
123
  if (layer.selected.items.size > 0) {
120
124
  selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
121
- var catid = selectedItem.type;
122
- var cat = catalog.elements[catid];
123
- if (!cat) cat = catalog.elements[(0, _utils.returnReplaceableDeepSearchType)(catid)];
124
- if (cat === undefined || cat === null) {
125
- cat = catalog.getIn(['elements', catid]);
126
- if (!cat) cat = catalog.getIn(['elements', (0, _utils.returnReplaceableDeepSearchType)(catid)]);
127
- }
125
+ var _catid = selectedItem.type;
126
+ var _cat = (0, _geometry.findCatalogElement)(catalog, _catid);
128
127
  currentItem = {
129
128
  selectedItem: selectedItem,
130
- cat: cat
129
+ cat: _cat
131
130
  };
132
131
  }
133
132
  layer.items.forEach(function (item) {
@@ -139,8 +138,7 @@ function Item(_ref, _ref2) {
139
138
  rotRad: item.rotation / 180 * Math.PI
140
139
  };
141
140
  var catid = item.type;
142
- var cat = catalog.elements[catid];
143
- if (!cat) cat = catalog.elements[(0, _utils.returnReplaceableDeepSearchType)(catid)];
141
+ var cat = (0, _geometry.findCatalogElement)(catalog, catid);
144
142
  var width = (0, _convertUnitsLite.convert)(item.properties.getIn(['width', '_length'])).from('in').to('cm');
145
143
  var height = (0, _convertUnitsLite.convert)(item.properties.getIn(['depth', '_length'])).from('in').to('cm');
146
144
  // let width = cat.info.sizeinfo.width;
@@ -159,33 +157,36 @@ function Item(_ref, _ref2) {
159
157
  // }
160
158
 
161
159
  if (!item.selected) {
162
- var _x = val.pos.x;
163
- var _y = val.pos.y;
164
- var rotRad = val.rotRad;
165
- var w = val.size.width / 2;
166
- var h = val.size.height / 2;
167
- var mx = _x - w * Math.cos(rotRad);
168
- var my = _y - w * Math.sin(rotRad);
169
- var x0 = mx + h * Math.sin(rotRad);
170
- var y0 = my - h * Math.cos(rotRad);
171
- var x3 = mx * 2 - x0;
172
- var y3 = my * 2 - y0;
173
- var x1 = _x * 2 - x3;
174
- var y1 = _y * 2 - y3;
175
- var x2 = _x * 2 - x0;
176
- var y2 = _y * 2 - y0;
177
- rectarray.push({
178
- rect: [point(x0, y0), point(x1, y1), point(x0, y0), point(x1, y1)]
179
- });
180
- rectarray.push({
181
- rect: [point(x1, y1), point(x2, y2), point(x1, y1), point(x2, y2)]
182
- });
183
- rectarray.push({
184
- rect: [point(x2, y2), point(x3, y3), point(x2, y2), point(x3, y3)]
185
- });
186
- rectarray.push({
187
- rect: [point(x3, y3), point(x0, y0), point(x3, y3), point(x0, y0)]
188
- });
160
+ var detectObjectsAtSameAltitudeFlag = layoutpos === 'Base' ? item.properties.getIn(['altitude', '_length']) <= altitude + tempHeight.get('_length') : item.properties.getIn(['altitude', '_length']) + item.properties.getIn(['height', '_length']) >= altitude;
161
+ if (detectObjectsAtSameAltitudeFlag) {
162
+ var _x = val.pos.x;
163
+ var _y = val.pos.y;
164
+ var rotRad = val.rotRad;
165
+ var w = val.size.width / 2;
166
+ var h = val.size.height / 2;
167
+ var mx = _x - w * Math.cos(rotRad);
168
+ var my = _y - w * Math.sin(rotRad);
169
+ var x0 = mx + h * Math.sin(rotRad);
170
+ var y0 = my - h * Math.cos(rotRad);
171
+ var x3 = mx * 2 - x0;
172
+ var y3 = my * 2 - y0;
173
+ var x1 = _x * 2 - x3;
174
+ var y1 = _y * 2 - y3;
175
+ var x2 = _x * 2 - x0;
176
+ var y2 = _y * 2 - y0;
177
+ rectarray.push({
178
+ rect: [point(x0, y0), point(x1, y1), point(x0, y0), point(x1, y1)]
179
+ });
180
+ rectarray.push({
181
+ rect: [point(x1, y1), point(x2, y2), point(x1, y1), point(x2, y2)]
182
+ });
183
+ rectarray.push({
184
+ rect: [point(x2, y2), point(x3, y3), point(x2, y2), point(x3, y3)]
185
+ });
186
+ rectarray.push({
187
+ rect: [point(x3, y3), point(x0, y0), point(x3, y3), point(x0, y0)]
188
+ });
189
+ }
189
190
  }
190
191
  });
191
192
 
@@ -246,25 +247,38 @@ function Item(_ref, _ref2) {
246
247
  */
247
248
  var getDistant = function getDistant(x, y, rotRad) {
248
249
  var center_h = 3 * height / 8;
249
- var center_x = x;
250
+ var center_x = x; // middle of front line of cabinet rect
250
251
  var center_y = y;
251
- var center_x1 = x - center_h * Math.sin(rotRad);
252
+ var center_x1 = x - center_h * Math.sin(rotRad); // center point of cabinet rect
252
253
  var center_y1 = y + center_h * Math.cos(rotRad);
253
254
  var PointArray = [];
254
- curiteminfo.rectCenterPoint.forEach(function (centerpoint) {
255
- var comparelength = [];
255
+ var _loop = function _loop(i) {
256
+ var centerpoint = curiteminfo.rectCenterPoint[i];
257
+ // [rectCenterPoint] has four middle points of cabinet rect edges
258
+ var comparelength = []; // distance array from rectCenterPoint[i] to other lines(walls, other cabinet rect edges)
256
259
  var a;
257
- var RectLineFuction;
260
+ var RectLineFuction; // normal line of cabinet rect edge
258
261
  if (centerpoint[1] === 180 || centerpoint[1] === 0) RectLineFuction = _export.GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x1, center_y1);else RectLineFuction = _export.GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x, center_y);
259
262
  allRect.forEach(function (linerect) {
263
+ // calc distance to all other lines
260
264
  var p0 = _export.GeometryUtils.clone_point(linerect.rect[2]);
261
265
  var p1 = _export.GeometryUtils.clone_point(linerect.rect[3]);
262
- var lineFunction = {};
266
+ var lineFunction = {}; // other line function
263
267
  if (p0.x !== p1.x || p0.y !== p1.y) lineFunction = _export.GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
268
+ // intersection between normal line and other line
264
269
  var coordinatePoint = _export.GeometryUtils.twoLinesIntersection(lineFunction.a, lineFunction.b, lineFunction.c, RectLineFuction.a, RectLineFuction.b, RectLineFuction.c);
265
270
  if (coordinatePoint !== undefined) {
266
- if (_export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && _export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
267
- if (_export.GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > _export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
271
+ if (
272
+ // intersection point is on the other line
273
+ _export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && _export.GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > _export.GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
274
+ // check the intersection point is outside direction of edge
275
+ var isOutside = true;
276
+ for (var j = 0; j < curiteminfo.rectCenterPoint.length; j++) {
277
+ if (j === i) continue;
278
+ var otherCenterPoint = curiteminfo.rectCenterPoint[j];
279
+ if (_export.GeometryUtils.isPointOnLineSegment(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y, otherCenterPoint[0].x, otherCenterPoint[0].y)) isOutside = false;
280
+ }
281
+ if (isOutside && _export.GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > _export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
268
282
  comparelength.push(_export.GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y));
269
283
  a = Math.min.apply(null, comparelength);
270
284
  }
@@ -272,7 +286,10 @@ function Item(_ref, _ref2) {
272
286
  }
273
287
  });
274
288
  PointArray.push([a, centerpoint[1]]);
275
- });
289
+ };
290
+ for (var i = 0; i < curiteminfo.rectCenterPoint.length; i++) {
291
+ _loop(i);
292
+ }
276
293
  return {
277
294
  PointArray: PointArray
278
295
  };
@@ -281,9 +298,22 @@ function Item(_ref, _ref2) {
281
298
  var nh = height / 2;
282
299
  var _getDistant = getDistant(x, y, val.rotRad),
283
300
  PointArray = _getDistant.PointArray;
301
+ var catid = item.type;
302
+ var cat = catalog.elements[catid];
284
303
  PointArray.forEach(function (pointElement, index) {
285
304
  if (pointElement[0] == undefined) PointArray[index][0] = 0;
305
+ // if (pointElement[1] === -90 && cat.info.is_corner !== 1) {
306
+ // PointArray[index][0] -= 4;
307
+ // }
308
+ });
309
+ var cnt = 0;
310
+ PointArray.forEach(function (pointElement) {
311
+ if (pointElement[0] == 0) cnt++;
286
312
  });
313
+ if (cnt == 4 || cnt == 3) {
314
+ PointArray[0][0] = 100;
315
+ PointArray[1][0] = 100;
316
+ }
287
317
  if (Array.isArray(PointArray)) {
288
318
  itemsActions.storeDistArray(layerID, id, PointArray);
289
319
  }
@@ -311,12 +341,12 @@ function Item(_ref, _ref2) {
311
341
  length: itemDistanceFromLine,
312
342
  angle: rotation,
313
343
  rotation: element[1],
314
- 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)")
344
+ 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)")
315
345
  })));
316
346
  }
317
347
  });
318
348
  }
319
- var renderedItem = element.render2D.call(element, item, layer, scene);
349
+ 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);
320
350
  var isSmall = false;
321
351
  if (width < 40) isSmall = true;
322
352
  var parts = [];
@@ -393,7 +423,10 @@ function Item(_ref, _ref2) {
393
423
  y: "-19",
394
424
  height: "16",
395
425
  width: "16",
396
- style: {
426
+ style: (0, _utils.isWarningItem)(item) ? {
427
+ transform: 'rotateX(180deg)',
428
+ opacity: 0.5
429
+ } : {
397
430
  transform: 'rotateX(180deg)'
398
431
  }
399
432
  })), /*#__PURE__*/_react["default"].createElement("g", {