kitchen-simulator 4.0.6-react-18 → 4.0.6

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 (192) hide show
  1. package/README.md +3 -0
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +162 -107
  4. package/es/LiteRenderer.js +162 -137
  5. package/es/actions/export.js +25 -12
  6. package/es/assets/gltf/door_sliding.bin +0 -0
  7. package/es/assets/img/png/helper/video_preview_start.png +0 -0
  8. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  9. package/es/catalog/catalog.js +21 -5
  10. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  11. package/es/catalog/properties/export.js +21 -0
  12. package/es/catalog/properties/property-checkbox.js +68 -0
  13. package/es/catalog/properties/property-color.js +39 -0
  14. package/es/catalog/properties/property-enum.js +50 -0
  15. package/es/catalog/properties/property-hidden.js +19 -0
  16. package/es/catalog/properties/property-lenght-measure.js +100 -0
  17. package/es/catalog/properties/property-length-measure.js +84 -0
  18. package/es/catalog/properties/property-length-measure_hole.js +100 -0
  19. package/es/catalog/properties/property-number.js +48 -0
  20. package/es/catalog/properties/property-read-only.js +26 -0
  21. package/es/catalog/properties/property-string.js +48 -0
  22. package/es/catalog/properties/property-toggle.js +39 -0
  23. package/es/catalog/properties/shared-property-style.js +14 -0
  24. package/es/catalog/utils/exporter.js +1 -0
  25. package/es/catalog/utils/item-loader.js +35 -26
  26. package/es/class/hole.js +0 -2
  27. package/es/class/item.js +96 -70
  28. package/es/class/line.js +4 -8
  29. package/es/class/project.js +93 -80
  30. package/es/components/content.js +5 -93
  31. package/es/components/export.js +4 -6
  32. package/es/components/style/button.js +106 -0
  33. package/es/components/style/cancel-button.js +21 -0
  34. package/es/components/style/content-container.js +30 -0
  35. package/es/components/style/content-title.js +25 -0
  36. package/es/components/style/delete-button.js +24 -0
  37. package/es/components/style/export.js +28 -2
  38. package/es/components/style/form-block.js +20 -0
  39. package/es/components/style/form-color-input.js +26 -0
  40. package/es/components/style/form-label.js +22 -0
  41. package/es/components/style/form-number-input.js +29 -27
  42. package/es/components/style/form-number-input_2.js +200 -0
  43. package/es/components/style/form-select.js +19 -0
  44. package/es/components/style/form-slider.js +60 -0
  45. package/es/components/style/form-submit-button.js +25 -0
  46. package/es/components/style/form-text-input.js +69 -0
  47. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  48. package/es/components/viewer2d/group.js +5 -4
  49. package/es/components/viewer2d/item.js +155 -359
  50. package/es/components/viewer2d/layer.js +1 -1
  51. package/es/components/viewer2d/line.js +17 -47
  52. package/es/components/viewer2d/ruler.js +5 -3
  53. package/es/components/viewer2d/rulerDist.js +8 -7
  54. package/es/components/viewer2d/rulerX.js +4 -2
  55. package/es/components/viewer2d/rulerY.js +3 -0
  56. package/es/components/viewer2d/scene.js +17 -12
  57. package/es/components/viewer2d/state.js +1 -1
  58. package/es/components/viewer2d/utils.js +2 -2
  59. package/es/components/viewer2d/vertex.js +3 -2
  60. package/es/components/viewer2d/viewer2d.js +51 -87
  61. package/es/components/viewer3d/ruler-utils/scene3D.js +1 -1
  62. package/es/components/viewer3d/scene-creator.js +59 -18
  63. package/es/components/viewer3d/viewer3d-first-person.js +24 -26
  64. package/es/components/viewer3d/viewer3d.js +100 -112
  65. package/es/constants.js +6 -2
  66. package/es/devLiteRenderer.js +491 -150
  67. package/es/index.js +606 -1
  68. package/es/models.js +3 -2
  69. package/es/plugins/SVGLoader.js +1414 -0
  70. package/es/plugins/console-debugger.js +34 -0
  71. package/es/plugins/export.js +7 -0
  72. package/es/plugins/keyboard.js +110 -0
  73. package/es/reducers/project-reducer.js +3 -0
  74. package/es/styles/export.js +5 -0
  75. package/es/styles/tabs.css +40 -0
  76. package/es/utils/geometry.js +72 -114
  77. package/es/utils/helper.js +38 -1
  78. package/es/utils/isolate-event-handler.js +826 -606
  79. package/es/utils/molding.js +457 -11
  80. package/lib/AppContext.js +1 -1
  81. package/lib/LiteKitchenConfigurator.js +161 -107
  82. package/lib/LiteRenderer.js +161 -137
  83. package/lib/actions/export.js +35 -39
  84. package/lib/assets/gltf/door_sliding.bin +0 -0
  85. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  86. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  87. package/lib/catalog/catalog.js +20 -4
  88. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  89. package/lib/catalog/properties/export.js +81 -0
  90. package/lib/catalog/properties/property-checkbox.js +76 -0
  91. package/lib/catalog/properties/property-color.js +47 -0
  92. package/lib/catalog/properties/property-enum.js +58 -0
  93. package/lib/catalog/properties/property-hidden.js +27 -0
  94. package/lib/catalog/properties/property-lenght-measure.js +108 -0
  95. package/lib/catalog/properties/property-length-measure.js +92 -0
  96. package/lib/catalog/properties/property-length-measure_hole.js +108 -0
  97. package/lib/catalog/properties/property-number.js +56 -0
  98. package/lib/catalog/properties/property-read-only.js +34 -0
  99. package/lib/catalog/properties/property-string.js +56 -0
  100. package/lib/catalog/properties/property-toggle.js +47 -0
  101. package/lib/catalog/properties/shared-property-style.js +21 -0
  102. package/lib/catalog/utils/exporter.js +1 -0
  103. package/lib/catalog/utils/item-loader.js +35 -26
  104. package/lib/class/hole.js +0 -2
  105. package/lib/class/item.js +94 -68
  106. package/lib/class/line.js +3 -7
  107. package/lib/class/project.js +93 -80
  108. package/lib/components/content.js +5 -93
  109. package/lib/components/export.js +6 -26
  110. package/lib/components/style/button.js +115 -0
  111. package/lib/components/style/cancel-button.js +29 -0
  112. package/lib/components/style/content-container.js +38 -0
  113. package/lib/components/style/content-title.js +35 -0
  114. package/lib/components/style/delete-button.js +34 -0
  115. package/lib/components/style/export.js +105 -1
  116. package/lib/components/style/form-block.js +28 -0
  117. package/lib/components/style/form-color-input.js +34 -0
  118. package/lib/components/style/form-label.js +30 -0
  119. package/lib/components/style/form-number-input.js +29 -27
  120. package/lib/components/style/form-number-input_2.js +209 -0
  121. package/lib/components/style/form-select.js +29 -0
  122. package/lib/components/style/form-slider.js +68 -0
  123. package/lib/components/style/form-submit-button.js +35 -0
  124. package/lib/components/style/form-text-input.js +78 -0
  125. package/lib/components/viewer2d/grids/grid-streak.js +1 -1
  126. package/lib/components/viewer2d/group.js +5 -4
  127. package/lib/components/viewer2d/item.js +152 -356
  128. package/lib/components/viewer2d/layer.js +1 -1
  129. package/lib/components/viewer2d/line.js +17 -47
  130. package/lib/components/viewer2d/ruler.js +4 -2
  131. package/lib/components/viewer2d/rulerDist.js +8 -7
  132. package/lib/components/viewer2d/rulerX.js +4 -2
  133. package/lib/components/viewer2d/rulerY.js +3 -0
  134. package/lib/components/viewer2d/scene.js +17 -12
  135. package/lib/components/viewer2d/state.js +1 -1
  136. package/lib/components/viewer2d/utils.js +2 -2
  137. package/lib/components/viewer2d/vertex.js +3 -2
  138. package/lib/components/viewer2d/viewer2d.js +49 -84
  139. package/lib/components/viewer3d/ruler-utils/scene3D.js +1 -1
  140. package/lib/components/viewer3d/scene-creator.js +57 -16
  141. package/lib/components/viewer3d/viewer3d-first-person.js +24 -26
  142. package/lib/components/viewer3d/viewer3d.js +97 -108
  143. package/lib/constants.js +11 -7
  144. package/lib/devLiteRenderer.js +489 -148
  145. package/lib/index.js +607 -6
  146. package/lib/models.js +3 -2
  147. package/lib/plugins/SVGLoader.js +1419 -0
  148. package/lib/plugins/console-debugger.js +42 -0
  149. package/lib/plugins/export.js +25 -0
  150. package/lib/plugins/keyboard.js +117 -0
  151. package/lib/reducers/project-reducer.js +3 -0
  152. package/lib/styles/export.js +13 -0
  153. package/lib/styles/tabs.css +40 -0
  154. package/lib/utils/geometry.js +72 -114
  155. package/lib/utils/helper.js +40 -1
  156. package/lib/utils/isolate-event-handler.js +826 -605
  157. package/lib/utils/molding.js +458 -9
  158. package/package.json +21 -20
  159. package/es/mocks/appliancePayload.json +0 -27
  160. package/es/mocks/cabinetPayload.json +0 -1914
  161. package/es/mocks/cabinetPayload2.json +0 -76
  162. package/es/mocks/dataBundle2.json +0 -4
  163. package/es/mocks/distancePayload.json +0 -6
  164. package/es/mocks/doorStylePayload2.json +0 -84
  165. package/es/mocks/furnishingPayload.json +0 -23
  166. package/es/mocks/itemCDSPayload.json +0 -27
  167. package/es/mocks/lightingPayload.json +0 -23
  168. package/es/mocks/mockProps.json +0 -43
  169. package/es/mocks/mockProps2.json +0 -9
  170. package/es/mocks/moldingPayload.json +0 -19
  171. package/es/mocks/projectItemsCatalog.json +0 -133
  172. package/es/mocks/rectangleShape.json +0 -238
  173. package/es/mocks/replaceCabinetPayload.json +0 -81
  174. package/es/mocks/roomShapePayload.json +0 -5
  175. package/es/useAppContext.js +0 -8
  176. package/lib/mocks/appliancePayload.json +0 -27
  177. package/lib/mocks/cabinetPayload.json +0 -1914
  178. package/lib/mocks/cabinetPayload2.json +0 -76
  179. package/lib/mocks/dataBundle2.json +0 -4
  180. package/lib/mocks/distancePayload.json +0 -6
  181. package/lib/mocks/doorStylePayload2.json +0 -84
  182. package/lib/mocks/furnishingPayload.json +0 -23
  183. package/lib/mocks/itemCDSPayload.json +0 -27
  184. package/lib/mocks/lightingPayload.json +0 -23
  185. package/lib/mocks/mockProps.json +0 -43
  186. package/lib/mocks/mockProps2.json +0 -9
  187. package/lib/mocks/moldingPayload.json +0 -19
  188. package/lib/mocks/projectItemsCatalog.json +0 -133
  189. package/lib/mocks/rectangleShape.json +0 -238
  190. package/lib/mocks/replaceCabinetPayload.json +0 -81
  191. package/lib/mocks/roomShapePayload.json +0 -5
  192. package/lib/useAppContext.js +0 -16
@@ -19,17 +19,16 @@ import { checkCabinetOverlap, createBacksplash, deleteSpecifiedMeshObjects, fVLi
19
19
  import { disposeObject, disposeScene } from "./three-memory-cleaner";
20
20
  import diff from 'immutablediff';
21
21
  import * as SharedStyle from "../../shared-style";
22
- import { BASE_CABINET_LAYOUTPOS, MODE_3D_VIEW, MODE_DRAGGING_ITEM_3D, MODE_DRAWING_HOLE_3D, MODE_DRAWING_ITEM_3D, MODE_ELEVATION_VIEW, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, SECONDARY_PURPLE_COLOR, TALL_CABINET_LAYOUTPOS, UNIT_CENTIMETER, WALL_CABINET_LAYOUTPOS, INTERNAL_EVENT_SELECT_ELEMENT, INTERNAL_EVENT_DRAG_ELEMENT, INTERNAL_EVENT_DRAW_ELEMENT, INTERNAL_EVENT_ROTATE_ELEMENT, MODE_ROTATING_ITEM, MODE_DRAGGING_HOLE_3D } from "../../constants";
22
+ import { BASE_CABINET_LAYOUTPOS, MODE_3D_VIEW, MODE_DRAGGING_ITEM_3D, MODE_DRAWING_HOLE_3D, MODE_DRAWING_ITEM_3D, MODE_ELEVATION_VIEW, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, SECONDARY_PURPLE_COLOR, TALL_CABINET_LAYOUTPOS, UNIT_CENTIMETER, WALL_CABINET_LAYOUTPOS, INTERNAL_EVENT_SELECT_ELEMENT, INTERNAL_EVENT_DRAG_ELEMENT, INTERNAL_EVENT_DRAW_ELEMENT, INTERNAL_EVENT_ROTATE_ELEMENT, MODE_ROTATING_ITEM, MODE_DRAGGING_HOLE_3D, INTERNAL_EVENT_REPLACE_CABINET } from "../../constants";
23
23
  import { isUndefined } from 'util';
24
24
  import { verticesDistance } from "../../utils/geometry";
25
25
  import { convert } from "../../utils/convert-units-lite";
26
26
  import { GeometryUtils } from "../../utils/export";
27
- import { handleCamRect, isElevationView, isEmpty } from "../../utils/helper";
27
+ import { handleCamRect, isElevationView, isEmpty, updatePayloadOfInternalEvent } from "../../utils/helper";
28
28
  import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
29
29
  import CameraControls from 'camera-controls';
30
30
  import { getAllMeshes, vectorIntersectWithMesh } from "../../utils/objects-utils";
31
- import { isWarningItem, returnReplaceableDeepSearchType } from "../viewer2d/utils";
32
- import { MoldingUtils } from "../../utils/export";
31
+ import { returnReplaceableDeepSearchType } from "../viewer2d/utils";
33
32
  CameraControls.install({
34
33
  THREE: Three
35
34
  });
@@ -232,6 +231,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
232
231
  });
233
232
  self.renderer.domElement.style.display = 'block';
234
233
  }, 1500);
234
+ self.planData = planData;
235
235
  });
236
236
  var area = scene.getIn(['layers', scene.selectedLayer, 'areas']);
237
237
  var layer = scene.getIn(['layers', scene.selectedLayer]);
@@ -670,7 +670,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
670
670
  layer.lines.forEach(function (line) {
671
671
  line.holes.forEach(function (holeID) {
672
672
  var hole = layer.holes.get(holeID);
673
- holes.push(hole);
673
+ if (hole) holes.push(hole);
674
674
  });
675
675
  });
676
676
  var i = 0;
@@ -1186,18 +1186,10 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1186
1186
  };
1187
1187
  var sendInternalEvent = function sendInternalEvent(evtType, evtElement) {
1188
1188
  var pointArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1189
- if (!isEmpty(evtType)) {
1190
- var _this2$props$onIntern, _this2$props;
1191
- var payload = evtElement === null || evtElement === void 0 ? void 0 : evtElement.toJS();
1192
- if ((evtElement === null || evtElement === void 0 ? void 0 : evtElement.prototype) === 'items') {
1193
- // check this cabinet has warning box
1194
- payload.isWarning = isWarningItem(evtElement);
1195
- // check this item is available molding
1196
- payload.isMoldingAvailable = MoldingUtils.isEnableItemForMolding(layer, evtElement); // check this item is snapped to wall
1197
- payload.isAttachedWall = MoldingUtils.isAttachedWall(layer, evtElement);
1198
- // update distArray
1199
- if (pointArray) payload.distArray = pointArray;
1200
- }
1189
+ if (!isEmpty(evtType) && !isEmpty(evtElement)) {
1190
+ var _state$get, _this2$props$onIntern, _this2$props;
1191
+ var catalog = (_state$get = state.get('catalog')) === null || _state$get === void 0 ? void 0 : _state$get.toJS();
1192
+ var payload = updatePayloadOfInternalEvent(evtElement, layer, catalog, pointArray);
1201
1193
  (_this2$props$onIntern = (_this2$props = _this2.props).onInternalEvent) === null || _this2$props$onIntern === void 0 || _this2$props$onIntern.call(_this2$props, {
1202
1194
  type: evtType,
1203
1195
  value: payload
@@ -1355,11 +1347,6 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1355
1347
  if (selectedFlag || toolIntersects.length > 0 && !isElevationView(mode)) {
1356
1348
  cameraControls.mouseButtons.left = CameraControls.ACTION.NONE;
1357
1349
  selectedFlag = false;
1358
- } else {
1359
- isSelected = false;
1360
- _this2.context.projectActions.unselectAll();
1361
- scene3D.remove(toolObj);
1362
- _this2.context.itemsActions.removeReplacingSupport();
1363
1350
  }
1364
1351
  }
1365
1352
  } else {
@@ -1412,11 +1399,18 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1412
1399
  }
1413
1400
  switch (_this2.props.state.mode) {
1414
1401
  case MODE_DRAGGING_ITEM_3D:
1402
+ case MODE_DRAGGING_HOLE_3D:
1415
1403
  internalType = INTERNAL_EVENT_DRAG_ELEMENT;
1416
1404
  break;
1417
1405
  case MODE_ROTATING_ITEM_3D:
1418
1406
  internalType = INTERNAL_EVENT_ROTATE_ELEMENT;
1419
1407
  break;
1408
+ case MODE_DRAWING_HOLE_3D:
1409
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
1410
+ break;
1411
+ case MODE_IDLE_3D:
1412
+ internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1413
+ break;
1420
1414
  }
1421
1415
  if (_this2.props.state.mode == MODE_DRAGGING_ITEM_3D) {
1422
1416
  _this2.context.itemsActions.endDraggingItem3D();
@@ -1450,7 +1444,8 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1450
1444
  });
1451
1445
  });
1452
1446
  var intersects = raycaster.intersectObjects(meshes, true);
1453
- var _i10;
1447
+ var _i10; // index of warning object in intersects
1448
+
1454
1449
  if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1455
1450
  for (_i10 = 0; _i10 < intersects.length; _i10++) {
1456
1451
  if (intersects[_i10].object.name === 'warningObj') break;
@@ -1466,6 +1461,9 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1466
1461
  var replaceInfo = intersects[_i10].object.parent.parent.userData;
1467
1462
  _this2.context.itemsActions.selectItem(replaceInfo.layerId, replaceInfo.itemId);
1468
1463
  !_this2.props.downloadFlag && _this2.props.replaceCabinet(true);
1464
+ internalType = INTERNAL_EVENT_REPLACE_CABINET;
1465
+ var replaceElement = _this2.props.state.scene.layers.get(replaceInfo.layerId).items.get(replaceInfo.itemId);
1466
+ sendInternalEvent(internalType, replaceElement);
1469
1467
  return;
1470
1468
  }
1471
1469
  }
@@ -1478,6 +1476,19 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1478
1476
  }
1479
1477
  }
1480
1478
  gridMatrix.copy(gridPlane.matrixWorld).invert();
1479
+ var addItemToolObj = function addItemToolObj() {
1480
+ var _planData$sceneGraph, _selectedObject, _intersects$_i;
1481
+ var selectedItem = (_planData$sceneGraph = planData.sceneGraph) === null || _planData$sceneGraph === void 0 || (_planData$sceneGraph = _planData$sceneGraph.layers[selectedObject.layerID]) === null || _planData$sceneGraph === void 0 ? void 0 : _planData$sceneGraph.items[(_selectedObject = selectedObject) === null || _selectedObject === void 0 ? void 0 : _selectedObject.itemID];
1482
+ if (isUndefined(selectedItem)) return;
1483
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1484
+ var itemPos = selectedItem.position.clone();
1485
+ if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === selectedItem.userData.itemId) {
1486
+ toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1487
+ } else {
1488
+ toolObj.position.set(planData.plan.position.x + itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1489
+ }
1490
+ scene3D.add(toolObj);
1491
+ };
1481
1492
  if (Math.abs(mouse.x - _this2.lastMousePosition.x) <= 0.02 && Math.abs(mouse.y - _this2.lastMousePosition.y) <= 0.02 || bMove) {
1482
1493
  if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1483
1494
  if (intersects[_i10] === undefined) {
@@ -1501,36 +1512,17 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1501
1512
  isSelected = true;
1502
1513
  setTimeout(function () {
1503
1514
  getDistances(layer);
1504
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1505
- if (isUndefined(selectedItem)) return;
1506
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1507
- var itemPos = selectedItem.position.clone();
1508
- if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1509
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1510
- } else {
1511
- toolObj.position.set(planData.plan.position.x + itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1512
- }
1513
- scene3D.add(toolObj);
1515
+ addItemToolObj();
1514
1516
  _this2.setState({
1515
1517
  toolObj: toolObj
1516
1518
  });
1517
1519
  // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1518
- var pointArray = [],
1519
- cnt = 0;
1520
- pointArray.push([fVLine[0].userData.distance, 90]);
1521
- pointArray.push([fVLine[1].userData.distance, -90]);
1522
- pointArray.push([fVLine[2].userData.distance, 180]);
1523
- pointArray.push([fVLine[3].userData.distance, 0]);
1524
- pointArray.forEach(function (pointElement, index) {
1525
- if (pointElement[0] == undefined) pointArray[index][0] = 0;
1526
- });
1527
- pointArray.forEach(function (pointElement) {
1528
- if (pointElement[0] == 0) cnt++;
1529
- });
1530
- if (cnt == 4 || cnt == 3) {
1531
- pointArray[0][0] = 100;
1532
- pointArray[1][0] = 100;
1533
- }
1520
+ var pointArray = [];
1521
+ // pointArray.push([fVLine[0].userData.distance, 90]);
1522
+ // pointArray.push([fVLine[1].userData.distance, -90]);
1523
+ // pointArray.push([fVLine[2].userData.distance, 180]);
1524
+ // pointArray.push([fVLine[3].userData.distance, 0]);
1525
+ pointArray = GeometryUtils.calcDistancesFromItemToWalls(selectedElement, layer).PointArray;
1534
1526
  actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1535
1527
  internalType = internalType ? internalType : INTERNAL_EVENT_SELECT_ELEMENT;
1536
1528
  sendInternalEvent(internalType, selectedElement, pointArray);
@@ -1541,16 +1533,17 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1541
1533
  var elementPrototype = null;
1542
1534
  switch (true) {
1543
1535
  case 'holeID' in selectedObject:
1544
- case 'lineID' in selectedObject:
1536
+ elementID = selectedObject.holeID;
1537
+ elementPrototype = 'holes';
1545
1538
  if (_this2.props.state.mode === MODE_DRAGGING_HOLE_3D) {
1546
1539
  actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1547
- internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1548
- elementID = selectedObject.holeID;
1549
- elementPrototype = 'holes';
1550
1540
  }
1551
1541
  break;
1542
+ case 'lineID' in selectedObject:
1543
+ elementID = selectedObject.lineID;
1544
+ elementPrototype = 'lines';
1545
+ break;
1552
1546
  case 'areaID' in selectedObject:
1553
- internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1554
1547
  elementID = selectedObject.areaID;
1555
1548
  elementPrototype = 'areas';
1556
1549
  break;
@@ -1562,15 +1555,20 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1562
1555
  isSelected = false;
1563
1556
  }
1564
1557
  } else {
1565
- isSelected = false;
1566
- _this2.context.projectActions.unselectAll();
1567
- switch (true) {
1568
- case 'holeID' in selectedObject:
1569
- actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1570
- break;
1571
- default:
1572
- _this2.context.itemsActions.removeReplacingSupport();
1573
- break;
1558
+ var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1559
+ if (bMove && !isEmpty(selectedItem)) {
1560
+ addItemToolObj();
1561
+ } else {
1562
+ isSelected = false;
1563
+ _this2.context.projectActions.unselectAll();
1564
+ switch (true) {
1565
+ case 'holeID' in selectedObject:
1566
+ actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1567
+ break;
1568
+ default:
1569
+ _this2.context.itemsActions.removeReplacingSupport();
1570
+ break;
1571
+ }
1574
1572
  }
1575
1573
  }
1576
1574
  bMove = false;
@@ -1581,6 +1579,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1581
1579
  selectedObj = allItemRect.cur;
1582
1580
  }
1583
1581
  } else {
1582
+ var _planData$sceneGraph2, _selectedObject2, _selectedObject3;
1584
1583
  visibleTransformBox(false);
1585
1584
  var alti = 0;
1586
1585
  if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
@@ -1590,18 +1589,9 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1590
1589
  alti = convert(alti).from(_unit2).to(_this2.props.state.scene.unit);
1591
1590
  }
1592
1591
  getPoint(event, alti);
1592
+ var _selectedItem = planData === null || planData === void 0 || (_planData$sceneGraph2 = planData.sceneGraph) === null || _planData$sceneGraph2 === void 0 || (_planData$sceneGraph2 = _planData$sceneGraph2.layers[(_selectedObject2 = selectedObject) === null || _selectedObject2 === void 0 ? void 0 : _selectedObject2.layerID]) === null || _planData$sceneGraph2 === void 0 ? void 0 : _planData$sceneGraph2.items[(_selectedObject3 = selectedObject) === null || _selectedObject3 === void 0 ? void 0 : _selectedObject3.itemID];
1593
+ if (isSelected && !isEmpty(_selectedItem)) addItemToolObj();
1593
1594
  if (bRotate) {
1594
- var _intersects$_i;
1595
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1596
- if (isUndefined(selectedItem)) return;
1597
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1598
- var itemPos = selectedItem.position.clone();
1599
- if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === selectedItem.userData.itemId) {
1600
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1601
- } else {
1602
- toolObj.position.set(planData.plan.position.x + itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1603
- }
1604
- scene3D.add(toolObj);
1605
1595
  _this2.setState({
1606
1596
  toolObj: toolObj
1607
1597
  });
@@ -1610,16 +1600,6 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1610
1600
  }
1611
1601
  if (bMove) {
1612
1602
  bMove = false;
1613
- var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1614
- if (isUndefined(_selectedItem)) return;
1615
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1616
- var _itemPos = _selectedItem.position.clone();
1617
- if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) {
1618
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1619
- } else {
1620
- toolObj.position.set(planData.plan.position.x + _itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + _selectedItem.children[0].position.y, planData.plan.position.z + _itemPos.z);
1621
- }
1622
- scene3D.add(toolObj);
1623
1603
  _this2.setState({
1624
1604
  toolObj: toolObj
1625
1605
  });
@@ -2086,7 +2066,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2086
2066
  if (minDis < snapDelta && !snapFlag) {
2087
2067
  _this2.snap(snapObj, layer);
2088
2068
  snapFlag = true;
2089
- getDistances(layer, true);
2069
+ getDistances(layer);
2090
2070
  var _i13 = 0;
2091
2071
  for (_i13 = 0; _i13 < fVLine.length; _i13++) {
2092
2072
  if (fVLine[_i13].userData.distance < snapDelta) {
@@ -2445,18 +2425,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2445
2425
  this.renderer.renderLists.dispose();
2446
2426
  }
2447
2427
  }, {
2448
- key: "componentDidUpdate",
2449
- value: function componentDidUpdate(prevProps) {
2428
+ key: "componentWillReceiveProps",
2429
+ value: function componentWillReceiveProps(nextProps) {
2450
2430
  var _this4 = this;
2451
- // Early return if downloadFlag and state are unchanged or scene is empty
2452
- if (this.props.downloadFlag && diff(prevProps.state, this.props.state).toJS().length == 0 || isEmpty(this.props.state.scene)) {
2453
- return;
2454
- }
2455
- var _this$props = this.props,
2456
- width = _this$props.width,
2457
- height = _this$props.height;
2458
- var selectedLayer = this.props.state.getIn(['scene', 'layers', this.props.state.scene.selectedLayer]);
2459
- var ceilHeight = convert(selectedLayer.ceilHeight).from(selectedLayer.unit).to(this.props.state.scene.unit);
2431
+ if (this.props.downloadFlag && diff(this.props.state, nextProps.state).toJS().length == 0 || isEmpty(nextProps.state.scene)) return;
2432
+ var width = nextProps.width,
2433
+ height = nextProps.height;
2434
+ var selectedLayer = nextProps.state.getIn(['scene', 'layers', nextProps.state.scene.selectedLayer]);
2435
+ var ceilHeight = convert(selectedLayer.ceilHeight).from(selectedLayer.unit).to(nextProps.state.scene.unit);
2460
2436
  var actions = {
2461
2437
  areaActions: this.context.areaActions,
2462
2438
  holesActions: this.context.holesActions,
@@ -2466,7 +2442,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2466
2442
  projectActions: this.context.projectActions,
2467
2443
  catalog: this.context.catalog
2468
2444
  };
2469
- var isLoadingCabinet = this.props.state.scene.isLoadingCabinet;
2445
+ var isLoadingCabinet = nextProps.state.scene.isLoadingCabinet;
2470
2446
  if (this.state.isLoadingCabinet !== isLoadingCabinet) this.setState({
2471
2447
  isLoadingCabinet: isLoadingCabinet
2472
2448
  });
@@ -2477,7 +2453,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2477
2453
  var allItemRect;
2478
2454
 
2479
2455
  // handle camera setting
2480
- switch (prevProps.state.mode) {
2456
+ switch (this.props.state.mode) {
2481
2457
  case MODE_ELEVATION_VIEW:
2482
2458
  // when Elevation mode (camera: Orthographic)
2483
2459
  var cameraRect = handleCamRect(width, height, ceilHeight, this.state.lineLength);
@@ -2495,12 +2471,12 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2495
2471
  break;
2496
2472
  }
2497
2473
  this.camera.updateProjectionMatrix();
2498
- var data = this.props.state.scene;
2474
+ var data = nextProps.state.scene;
2499
2475
  var layer = data.getIn(['layers', data.selectedLayer]);
2500
2476
  var self = this;
2501
2477
  function implementBacksplash() {
2502
- if (isElevationView(self.props.state.mode)) return;
2503
- var allItems = GeometryUtils.getAllItemSpecified(self.props.state.scene, actions.catalog, BASE_CABINET_LAYOUTPOS);
2478
+ if (isElevationView(self.props.state.mode)) return; // apply backsplash when just 3D_mode, not elevation_mode
2479
+ var allItems = GeometryUtils.getAllItemSpecified(nextProps.state.scene, actions.catalog, BASE_CABINET_LAYOUTPOS);
2504
2480
  var i,
2505
2481
  items = [];
2506
2482
  for (i = 0; i < allItems.others.length; i++) items.push(allItems.others[i]);
@@ -2509,7 +2485,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2509
2485
  var calcRect = GeometryUtils.getCalcRectFromItem3D(items[i]);
2510
2486
  var visible = GeometryUtils.isSnappedLine(calcRect, allLineRects);
2511
2487
  actions.itemsActions.setBacksplashVisible(items[i].itemInfo.id, visible);
2512
- createBacksplash(items[i], self.props.state.scene.getIn(['layers', self.props.state.scene.selectedLayer]), planData, self.props.state.scene);
2488
+ createBacksplash(items[i], nextProps.state.scene.getIn(['layers', nextProps.state.scene.selectedLayer]), planData, nextProps.state.scene);
2513
2489
  }
2514
2490
  }
2515
2491
  function implementWarningBox() {
@@ -2537,13 +2513,16 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2537
2513
  showflag: false
2538
2514
  });
2539
2515
  }
2540
- if (this.props.state.scene !== prevProps.state.scene || this.props.state.doorStyle && this.props.state.doorStyle.get('name') !== prevProps.state.doorStyle.get('name')) {
2541
- var changedValues = diff(prevProps.state.scene, this.props.state.scene);
2516
+ if (nextProps.state.scene !== this.props.state.scene || nextProps.state.doorStyle && nextProps.state.doorStyle.get('name') !== this.props.state.doorStyle.get('name')) {
2517
+ var changedValues = diff(this.props.state.scene, nextProps.state.scene);
2542
2518
  prepareSnapSpec(layer);
2543
- if (this.props.state.doorStyle && this.props.state.doorStyle.get('name') === prevProps.state.doorStyle.get('name')) {
2544
- self.setState({
2545
- isLoading: true
2546
- });
2519
+ var isInteractiveMove = nextProps.state.mode === MODE_DRAGGING_ITEM_3D || nextProps.state.mode === MODE_ROTATING_ITEM_3D || nextProps.state.mode === MODE_DRAWING_ITEM_3D || nextProps.state.mode === MODE_DRAGGING_HOLE_3D || nextProps.state.mode === MODE_IDLE_3D;
2520
+ if (nextProps.state.doorStyle && nextProps.state.doorStyle.get('name') === this.props.state.doorStyle.get('name')) {
2521
+ if (!isInteractiveMove) {
2522
+ self.setState({
2523
+ isLoading: true
2524
+ });
2525
+ }
2547
2526
  if (self.props.downloadFlag) {
2548
2527
  self.setState({
2549
2528
  waitForRender: 0
@@ -2559,7 +2538,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2559
2538
  }
2560
2539
  self.renderer.domElement.style.display = 'none';
2561
2540
  }
2562
- if (this.props.state.scene.showfg == true) {
2541
+ if (nextProps.state.scene.showfg == true) {
2563
2542
  implementBacksplash();
2564
2543
  implementWarningBox();
2565
2544
  } else {
@@ -2568,7 +2547,7 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2568
2547
  var _this$state = this.state,
2569
2548
  toolObj = _this$state.toolObj,
2570
2549
  angleObj = _this$state.angleObj;
2571
- var _updateScene = updateScene(this.planData, this.props.state.scene, prevProps.state.scene, changedValues.toJS(), actions, this.context.catalog, this.props.state.mode, toolObj, angleObj, this.props.state.draggingSupport),
2550
+ var _updateScene = updateScene(this.planData, nextProps.state.scene, this.props.state.scene, changedValues.toJS(), actions, this.context.catalog, nextProps.state.mode, toolObj, angleObj, nextProps.state.draggingSupport),
2572
2551
  promise = _updateScene.promise;
2573
2552
  self.setState();
2574
2553
  promise.then(function (p1Value) {
@@ -2580,8 +2559,8 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
2580
2559
  });
2581
2560
  self.renderer.domElement.style.display = 'block';
2582
2561
  });
2583
- if (this.props.state.getIn(['scene', 'isEndDragging'])) {
2584
- this.props.state.setIn(['scene', 'isEndDragging'], false);
2562
+ if (nextProps.state.getIn(['scene', 'isEndDragging'])) {
2563
+ nextProps.state.setIn(['scene', 'isEndDragging'], false);
2585
2564
  }
2586
2565
  }
2587
2566
  this.renderer.setSize(width, height);
@@ -2669,4 +2648,13 @@ Scene3DViewer.propTypes = {
2669
2648
  width: PropTypes.number.isRequired,
2670
2649
  height: PropTypes.number.isRequired,
2671
2650
  replaceCabinet: PropTypes.func.isRequired
2651
+ };
2652
+ Scene3DViewer.contextTypes = {
2653
+ areaActions: PropTypes.object.isRequired,
2654
+ holesActions: PropTypes.object.isRequired,
2655
+ itemsActions: PropTypes.object.isRequired,
2656
+ linesActions: PropTypes.object.isRequired,
2657
+ sceneActions: PropTypes.object.isRequired,
2658
+ projectActions: PropTypes.object.isRequired,
2659
+ catalog: PropTypes.object
2672
2660
  };
package/es/constants.js CHANGED
@@ -66,6 +66,7 @@ export var CHANGE_WALL_LENGTH_MEASURE = 'CHANGE_WALL_LENGTH_MEASURE';
66
66
  export var CHANGE_BASE_CABINET_MEASURE = 'CHANGE_BASE_CABINET_MEASURE';
67
67
  export var CHANGE_WALL_CABINET_MEASURE = 'CHANGE_WALL_CABINET_MEASURE';
68
68
  export var CHANGE_WINDOW_DOOR_MEASURE = 'CHANGE_WINDOW_DOOR_MEASURE';
69
+ export var CHANGE_MEASUREMENT_UNIT = 'CHANGE_MEASUREMENT_UNIT';
69
70
 
70
71
  //ACTIONS viewer3D
71
72
  export var SELECT_TOOL_3D_VIEW = 'SELECT_TOOL_3D_VIEW';
@@ -650,10 +651,11 @@ export var PROJECT_SETTING_OPTION = {
650
651
  CHANGE_WALL_LENGTH_MEASURE: CHANGE_WALL_LENGTH_MEASURE,
651
652
  CHANGE_BASE_CABINET_MEASURE: CHANGE_BASE_CABINET_MEASURE,
652
653
  CHANGE_WALL_CABINET_MEASURE: CHANGE_WALL_CABINET_MEASURE,
653
- CHANGE_WINDOW_DOOR_MEASURE: CHANGE_WINDOW_DOOR_MEASURE
654
+ CHANGE_WINDOW_DOOR_MEASURE: CHANGE_WINDOW_DOOR_MEASURE,
655
+ CHANGE_MEASUREMENT_UNIT: CHANGE_MEASUREMENT_UNIT
654
656
  };
655
657
  export var HOLE_NAMES = {
656
- WINDOW_CLEAR: 'Clear Window',
658
+ WINDOW_CLEAR: 'Window',
657
659
  WINDOW_CROSS: 'Cross Window',
658
660
  WINDOW_DOUBLE_HUNG: 'Double Hung Window',
659
661
  WINDOW_VERTICAL: 'window-vertical',
@@ -739,6 +741,7 @@ export var EXTERNAL_EVENT_UPDATE_ATTRIBUTE = 'EXTERNAL_EVENT_UPDATE_ATTRIBUTE';
739
741
  export var EXTERNAL_EVENT_UPDATE_PROPERTY = 'EXTERNAL_EVENT_UPDATE_PROPERTY'; // update the element's property (flip_doorhandle, open_doors...) in the property window
740
742
  export var EXTERNAL_EVENT_REPLACE_CABINET = 'EXTERNAL_EVENT_REPLACE_CABINET';
741
743
  export var EXTERNAL_EVENT_SET_FINISHING = 'EXTERNAL_EVENT_SET_FINISHING'; // set finishing(wallColor, floorStyle, doorHandle, backsplash, counterTop)
744
+ export var EXTERNAL_EVENT_ROTATE_PAN = 'EXTERNAL_EVENT_ROTATE_PAN'; // external event for rotate pan
742
745
 
743
746
  // internal event type
744
747
  export var INTERNAL_EVENT_UNSELECT_ALL = 'INTERNAL_EVENT_UNSELECT_ALL';
@@ -751,6 +754,7 @@ export var INTERNAL_EVENT_START_DRAW_WALL = 'INTERNAL_EVENT_START_DRAW_WALL';
751
754
 
752
755
  // room shape type
753
756
  export var ROOM_SHAPE_TYPE = {
757
+ CUSTOM: 'custom',
754
758
  RECTANGLE: 'rectangle',
755
759
  TWO_WALLS_LEFT_TOP: '2wLeftTop',
756
760
  TWO_WALLS_RIGHT_TOP: '2wRightTop',