kitchen-simulator 4.0.7-react-18 → 4.0.7

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 +590 -21
  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 +592 -21
  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
@@ -22,7 +22,7 @@ function Scene3D(_ref) {
22
22
  downloadFlag = _ref.downloadFlag;
23
23
  var layers = scene.layers;
24
24
  var selectedLayer = layers.get(scene.selectedLayer);
25
- var ceilHeight = selectedLayer.ceilHeight;
25
+ var ceilHeight = Number(selectedLayer.ceilHeight);
26
26
  var selectedLine = selectedLayer.lines.get(selectedLayer.selected.lines.toJS()[0]);
27
27
  var vertex0 = selectedLayer.vertices.get(selectedLine.vertices.get(0));
28
28
  var vertex1 = selectedLayer.vertices.get(selectedLine.vertices.get(1));
@@ -222,6 +222,31 @@ function createWarningObject() {
222
222
  warningObj.name = 'warningObj';
223
223
  return warningObj;
224
224
  }
225
+ function swapLengthProperty(diffs) {
226
+ var idx1 = diffs.findIndex(function (v) {
227
+ return v.path[v.path.length - 1] === 'length';
228
+ });
229
+ var idx2 = diffs.findIndex(function (v) {
230
+ return v.path[v.path.length - 1] === '_length';
231
+ });
232
+ if (idx1 < 0 || idx2 < 0) return diffs;
233
+ if (idx1 > idx2) return diffs;
234
+ if (diffs[idx1].op === diffs[idx2].op) {
235
+ var isSwap = true;
236
+ for (var i = 0; i < diffs[idx1].path.length - 2; i++) {
237
+ if (diffs[idx1].path[i] !== diffs[idx2].path[i]) {
238
+ isSwap = false;
239
+ break;
240
+ }
241
+ }
242
+ if (isSwap) {
243
+ var temp = diffs[idx1];
244
+ diffs[idx1] = diffs[idx2];
245
+ diffs[idx2] = temp;
246
+ }
247
+ }
248
+ return diffs;
249
+ }
225
250
  function updateScene(planData, sceneData, oldSceneData, diffArray, actions, catalog) {
226
251
  var _draggingItem$toJS, _filteredDiffs, _filteredDiffs2;
227
252
  var mode = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : null;
@@ -239,6 +264,9 @@ function updateScene(planData, sceneData, oldSceneData, diffArray, actions, cata
239
264
  value: el.value
240
265
  };
241
266
  });
267
+
268
+ // move "length" to after "_length"
269
+ splitted = swapLengthProperty(splitted);
242
270
  var filteredDiffs = filterDiffs(splitted, sceneData, oldSceneData);
243
271
  //***testing additional filter***
244
272
  filteredDiffs = filteredDiffs.filter(function (_ref) {
@@ -273,7 +301,7 @@ function updateScene(planData, sceneData, oldSceneData, diffArray, actions, cata
273
301
  * Every 'doorStyle' change has a 'door_style_id' change.
274
302
  * So, if door_style_id changes, it indicates 'doorStyle' change.
275
303
  */
276
- if (['id'].includes(path[path.length - 1])) isSettingDoorStyle = true;
304
+ if (path[1] === 'layers' && path[3] === 'molding' || path[path.length - 2] === 'doorStyle' && path[path.length - 1] === 'id' || ['id'].includes(path[path.length - 1])) isSettingDoorStyle = true;
277
305
 
278
306
  // If there are any molding change of layer
279
307
  if (path[1] === 'layers' && path[3] === 'molding') isUpdateMolding = true;
@@ -649,10 +677,10 @@ function replaceObject(modifiedPath, layer, planData, actions, sceneData, oldSce
649
677
  vLine3.material.depthTest = false;
650
678
  var uVec = new Three.Vector3(-posVec.x / scalevec.x, -posVec.y / scalevec.y, -posVec.z / scalevec.z);
651
679
  var blLighting = item.type.includes('Light');
652
- vLine.translateY(blLighting ? 1.6 : 0.1);
653
- vLine1.translateY(blLighting ? 1.6 : 0.1);
654
- vLine2.translateY(blLighting ? 1.6 : 0.1);
655
- vLine3.translateY(blLighting ? 1.6 : 0.1);
680
+ vLine.translateY(blLighting ? 1.6 : boundingBox.min.y + 0.1);
681
+ vLine1.translateY(blLighting ? 1.6 : boundingBox.min.y + 0.1);
682
+ vLine2.translateY(blLighting ? 1.6 : boundingBox.min.y + 0.1);
683
+ vLine3.translateY(blLighting ? 1.6 : boundingBox.min.y + 0.1);
656
684
  upObj.translateOnAxis(uVec, 1);
657
685
  upObj.translateY(max.y - min.y);
658
686
  _mBox.name = 'TransformBox';
@@ -958,9 +986,9 @@ function getLineDistance(obj, layer, isCalcWall, index) {
958
986
  obj.geometry.attributes.position.needsUpdate = true;
959
987
  obj.geometry.computeBoundingSphere();
960
988
  obj.geometry.computeBoundingBox();
961
- var dist = (0, _math.formatNumber)((0, _convertUnitsLite.convert)(intersects[i].distance).from('cm').to('in'), _constants.DECIMAL_PLACES_2);
989
+ var dist = (0, _convertUnitsLite.convert)(intersects[i].distance).from('cm').to('in');
962
990
  if (dist > 3) {
963
- var _canvas = getTextCanvas(dist);
991
+ var _canvas = getDistanceCanvas(dist, layer);
964
992
  var wid = _canvas.width / window.innerWidth * 30;
965
993
  var hei = _canvas.height / window.innerHeight * 30;
966
994
  var texture = new Three.Texture(_canvas);
@@ -1082,7 +1110,7 @@ function getLineDistance(obj, layer, isCalcWall, index) {
1082
1110
  obj.geometry.attributes.position.needsUpdate = true;
1083
1111
  var _dist = (0, _math.formatNumber)(distance, _constants.DECIMAL_PLACES_2);
1084
1112
  if (_dist > 3) {
1085
- var _canvas2 = getTextCanvas(_dist);
1113
+ var _canvas2 = getDistanceCanvas(_dist, layer);
1086
1114
  var _wid = _canvas2.width / window.innerWidth * 30;
1087
1115
  var _hei = _canvas2.height / window.innerHeight * 30;
1088
1116
  var _texture = new Three.Texture(_canvas2);
@@ -1210,12 +1238,18 @@ function getIntersectPoint(opX, opY, pX, pY) {
1210
1238
  function gcd(a, b) {
1211
1239
  return a % b ? gcd(b, a % b) : b;
1212
1240
  }
1213
- function getTextCanvas(text) {
1214
- var parameters = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
1241
+ function getDistanceCanvas(distance, layer) {
1242
+ var _layer$unit;
1243
+ var parameters = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};
1215
1244
  var canvas = document.createElement('canvas');
1216
1245
  var ctx = canvas.getContext('2d');
1246
+ var curUnit = (_layer$unit = layer === null || layer === void 0 ? void 0 : layer.unit) !== null && _layer$unit !== void 0 ? _layer$unit : _constants.UNIT_INCH;
1247
+ var fixedLength = (layer === null || layer === void 0 ? void 0 : layer.unit) === _constants.UNIT_METER || (layer === null || layer === void 0 ? void 0 : layer.unit) === _constants.UNIT_FOOT ? 2 : 0;
1248
+ var distText = String((Math.round((0, _convertUnitsLite.convert)(distance).from('in').to(curUnit) * 100) / 100).toFixed(fixedLength));
1217
1249
  var fontSize = 16;
1218
- var integral = String(text) + "''";
1250
+ var integral = distText + curUnit;
1251
+ // let integral = String(distance) + "''";
1252
+
1219
1253
  parameters.fontName = parameters.fontName || _constants.ARROW_TEXT_FONTFACE;
1220
1254
 
1221
1255
  // Prepare the font to be able to measure
@@ -3452,14 +3486,21 @@ function updateMoldingGroupArray(MGArray, selItem, planData, layer) {
3452
3486
  if (changeMoldings.length === 0 && isEnableMolding) {
3453
3487
  // refresh mesh of the updating molding groups
3454
3488
  new_MGArray.forEach(function (mg, index) {
3455
- if (mg.items[0].molding.some(function (mol) {
3456
- return mol.location_type === mg.location_type;
3489
+ var _mg$items$;
3490
+ if ((_mg$items$ = mg.items[0]) !== null && _mg$items$ !== void 0 && (_mg$items$ = _mg$items$.molding) !== null && _mg$items$ !== void 0 && _mg$items$.some(function (mol) {
3491
+ var _mol$toJS;
3492
+ return (0, _helper.isImmutable)(mol) ? (mol === null || mol === void 0 || (_mol$toJS = mol.toJS()) === null || _mol$toJS === void 0 ? void 0 : _mol$toJS.location_type) === mg.location_type : (mol === null || mol === void 0 ? void 0 : mol.location_type) === mg.location_type;
3457
3493
  })) {
3458
- var molding = mg.items[0].molding.filter(function (mol) {
3459
- return mol.location_type === mg.location_type;
3494
+ var _mg$items$2, _mg$items$3, _mg$items$4;
3495
+ var molding = (0, _helper.isImmutable)((_mg$items$2 = mg.items[0]) === null || _mg$items$2 === void 0 ? void 0 : _mg$items$2.molding) ? (_mg$items$3 = mg.items[0]) === null || _mg$items$3 === void 0 || (_mg$items$3 = _mg$items$3.molding) === null || _mg$items$3 === void 0 ? void 0 : _mg$items$3.filter(function (mol) {
3496
+ var _mol$toJS2;
3497
+ return (mol === null || mol === void 0 || (_mol$toJS2 = mol.toJS()) === null || _mol$toJS2 === void 0 ? void 0 : _mol$toJS2.location_type) === mg.location_type;
3498
+ }).toJS()[0] : (_mg$items$4 = mg.items[0]) === null || _mg$items$4 === void 0 || (_mg$items$4 = _mg$items$4.molding) === null || _mg$items$4 === void 0 ? void 0 : _mg$items$4.filter(function (mol) {
3499
+ return (mol === null || mol === void 0 ? void 0 : mol.location_type) === mg.location_type;
3460
3500
  })[0];
3461
3501
  if (mg.molding === null || mg.molding.itemID !== mol.itemID || mg.lines === null || mg.points === null) {
3462
- if (mg.molding !== null && mg.molding.itemID !== molding.itemID) {
3502
+ var _mg$molding;
3503
+ if (mg.molding !== null && ((_mg$molding = mg.molding) === null || _mg$molding === void 0 ? void 0 : _mg$molding.itemID) !== molding.itemID) {
3463
3504
  deleteMGMesh(mg, planData, mode);
3464
3505
  }
3465
3506
  mg = _export.MoldingUtils.createMonldingGroup(mg, layer, molding, planData.catalog);
@@ -261,12 +261,10 @@ var Viewer3DFirstPerson = exports["default"] = /*#__PURE__*/function (_React$Com
261
261
  this.renderer.renderLists.dispose();
262
262
  }
263
263
  }, {
264
- key: "componentDidUpdate",
265
- value: function componentDidUpdate(prevProps) {
266
- var _this$props = this.props,
267
- width = _this$props.width,
268
- height = _this$props.height,
269
- state = _this$props.state;
264
+ key: "componentWillReceiveProps",
265
+ value: function componentWillReceiveProps(nextProps) {
266
+ var width = nextProps.width,
267
+ height = nextProps.height;
270
268
  var camera = this.camera,
271
269
  renderer = this.renderer,
272
270
  scene3D = this.scene3D,
@@ -279,27 +277,19 @@ var Viewer3DFirstPerson = exports["default"] = /*#__PURE__*/function (_React$Com
279
277
  linesActions: this.context.linesActions,
280
278
  projectActions: this.context.projectActions
281
279
  };
282
-
283
- // Handle width/height changes
284
- if (width !== prevProps.width || height !== prevProps.height) {
285
- this.width = width;
286
- this.height = height;
287
- camera.aspect = width / height;
288
- camera.updateProjectionMatrix();
289
- renderer.setSize(width, height);
290
- }
291
-
292
- // Handle scene changes
293
- if (state.scene !== prevProps.state.scene) {
294
- var changedValues = (0, _immutablediff["default"])(prevProps.state.scene, state.scene);
295
- (0, _sceneCreator.updateScene)(planData, state.scene, prevProps.state.scene, changedValues.toJS(), actions, this.context.catalog);
280
+ this.width = width;
281
+ this.height = height;
282
+ camera.aspect = width / height;
283
+ camera.updateProjectionMatrix();
284
+ if (nextProps.scene !== this.props.state.scene) {
285
+ var changedValues = (0, _immutablediff["default"])(this.props.state.scene, nextProps.state.scene);
286
+ (0, _sceneCreator.updateScene)(planData, nextProps.state.scene, this.props.state.scene, changedValues.toJS(), actions, this.context.catalog);
296
287
  }
297
-
298
- // Always re-render after updates
299
- renderer.clear();
300
- renderer.render(scene3D, camera);
301
- renderer.clearDepth();
302
- renderer.render(sceneOnTop, camera);
288
+ renderer.setSize(width, height);
289
+ renderer.clear(); // clear buffers
290
+ renderer.render(scene3D, camera); // render scene 1
291
+ renderer.clearDepth(); // clear depth buffer
292
+ renderer.render(sceneOnTop, camera); // render scene 2
303
293
  }
304
294
  }, {
305
295
  key: "render",
@@ -315,4 +305,12 @@ Viewer3DFirstPerson.propTypes = {
315
305
  width: _propTypes["default"].number.isRequired,
316
306
  height: _propTypes["default"].number.isRequired
317
307
  };
308
+ Viewer3DFirstPerson.contextTypes = {
309
+ areaActions: _propTypes["default"].object.isRequired,
310
+ holesActions: _propTypes["default"].object.isRequired,
311
+ itemsActions: _propTypes["default"].object.isRequired,
312
+ linesActions: _propTypes["default"].object.isRequired,
313
+ projectActions: _propTypes["default"].object.isRequired,
314
+ catalog: _propTypes["default"].object
315
+ };
318
316
  module.exports = exports.default;
@@ -238,6 +238,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
238
238
  });
239
239
  self.renderer.domElement.style.display = 'block';
240
240
  }, 1500);
241
+ self.planData = planData;
241
242
  });
242
243
  var area = scene.getIn(['layers', scene.selectedLayer, 'areas']);
243
244
  var layer = scene.getIn(['layers', scene.selectedLayer]);
@@ -676,7 +677,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
676
677
  layer.lines.forEach(function (line) {
677
678
  line.holes.forEach(function (holeID) {
678
679
  var hole = layer.holes.get(holeID);
679
- holes.push(hole);
680
+ if (hole) holes.push(hole);
680
681
  });
681
682
  });
682
683
  var i = 0;
@@ -1192,18 +1193,10 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1192
1193
  };
1193
1194
  var sendInternalEvent = function sendInternalEvent(evtType, evtElement) {
1194
1195
  var pointArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1195
- if (!(0, _helper.isEmpty)(evtType)) {
1196
- var _this2$props$onIntern, _this2$props;
1197
- var payload = evtElement === null || evtElement === void 0 ? void 0 : evtElement.toJS();
1198
- if ((evtElement === null || evtElement === void 0 ? void 0 : evtElement.prototype) === 'items') {
1199
- // check this cabinet has warning box
1200
- payload.isWarning = (0, _utils.isWarningItem)(evtElement);
1201
- // check this item is available molding
1202
- payload.isMoldingAvailable = _export.MoldingUtils.isEnableItemForMolding(layer, evtElement); // check this item is snapped to wall
1203
- payload.isAttachedWall = _export.MoldingUtils.isAttachedWall(layer, evtElement);
1204
- // update distArray
1205
- if (pointArray) payload.distArray = pointArray;
1206
- }
1196
+ if (!(0, _helper.isEmpty)(evtType) && !(0, _helper.isEmpty)(evtElement)) {
1197
+ var _state$get, _this2$props$onIntern, _this2$props;
1198
+ var catalog = (_state$get = state.get('catalog')) === null || _state$get === void 0 ? void 0 : _state$get.toJS();
1199
+ var payload = (0, _helper.updatePayloadOfInternalEvent)(evtElement, layer, catalog, pointArray);
1207
1200
  (_this2$props$onIntern = (_this2$props = _this2.props).onInternalEvent) === null || _this2$props$onIntern === void 0 || _this2$props$onIntern.call(_this2$props, {
1208
1201
  type: evtType,
1209
1202
  value: payload
@@ -1361,11 +1354,6 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1361
1354
  if (selectedFlag || toolIntersects.length > 0 && !(0, _helper.isElevationView)(mode)) {
1362
1355
  cameraControls.mouseButtons.left = _cameraControls["default"].ACTION.NONE;
1363
1356
  selectedFlag = false;
1364
- } else {
1365
- isSelected = false;
1366
- _this2.context.projectActions.unselectAll();
1367
- scene3D.remove(toolObj);
1368
- _this2.context.itemsActions.removeReplacingSupport();
1369
1357
  }
1370
1358
  }
1371
1359
  } else {
@@ -1418,11 +1406,18 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1418
1406
  }
1419
1407
  switch (_this2.props.state.mode) {
1420
1408
  case _constants.MODE_DRAGGING_ITEM_3D:
1409
+ case _constants.MODE_DRAGGING_HOLE_3D:
1421
1410
  internalType = _constants.INTERNAL_EVENT_DRAG_ELEMENT;
1422
1411
  break;
1423
1412
  case _constants.MODE_ROTATING_ITEM_3D:
1424
1413
  internalType = _constants.INTERNAL_EVENT_ROTATE_ELEMENT;
1425
1414
  break;
1415
+ case _constants.MODE_DRAWING_HOLE_3D:
1416
+ internalType = _constants.INTERNAL_EVENT_DRAW_ELEMENT;
1417
+ break;
1418
+ case _constants.MODE_IDLE_3D:
1419
+ internalType = _constants.INTERNAL_EVENT_SELECT_ELEMENT;
1420
+ break;
1426
1421
  }
1427
1422
  if (_this2.props.state.mode == _constants.MODE_DRAGGING_ITEM_3D) {
1428
1423
  _this2.context.itemsActions.endDraggingItem3D();
@@ -1456,7 +1451,8 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1456
1451
  });
1457
1452
  });
1458
1453
  var intersects = raycaster.intersectObjects(meshes, true);
1459
- var _i10;
1454
+ var _i10; // index of warning object in intersects
1455
+
1460
1456
  if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1461
1457
  for (_i10 = 0; _i10 < intersects.length; _i10++) {
1462
1458
  if (intersects[_i10].object.name === 'warningObj') break;
@@ -1472,6 +1468,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1472
1468
  var replaceInfo = intersects[_i10].object.parent.parent.userData;
1473
1469
  _this2.context.itemsActions.selectItem(replaceInfo.layerId, replaceInfo.itemId);
1474
1470
  !_this2.props.downloadFlag && _this2.props.replaceCabinet(true);
1471
+ internalType = _constants.INTERNAL_EVENT_REPLACE_CABINET;
1472
+ var replaceElement = _this2.props.state.scene.layers.get(replaceInfo.layerId).items.get(replaceInfo.itemId);
1473
+ sendInternalEvent(internalType, replaceElement);
1475
1474
  return;
1476
1475
  }
1477
1476
  }
@@ -1484,6 +1483,19 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1484
1483
  }
1485
1484
  }
1486
1485
  gridMatrix.copy(gridPlane.matrixWorld).invert();
1486
+ var addItemToolObj = function addItemToolObj() {
1487
+ var _planData$sceneGraph, _selectedObject, _intersects$_i;
1488
+ 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];
1489
+ if ((0, _util.isUndefined)(selectedItem)) return;
1490
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1491
+ var itemPos = selectedItem.position.clone();
1492
+ 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) {
1493
+ toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1494
+ } else {
1495
+ 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);
1496
+ }
1497
+ scene3D.add(toolObj);
1498
+ };
1487
1499
  if (Math.abs(mouse.x - _this2.lastMousePosition.x) <= 0.02 && Math.abs(mouse.y - _this2.lastMousePosition.y) <= 0.02 || bMove) {
1488
1500
  if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1489
1501
  if (intersects[_i10] === undefined) {
@@ -1507,36 +1519,17 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1507
1519
  isSelected = true;
1508
1520
  setTimeout(function () {
1509
1521
  (0, _sceneCreator.getDistances)(layer);
1510
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1511
- if ((0, _util.isUndefined)(selectedItem)) return;
1512
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1513
- var itemPos = selectedItem.position.clone();
1514
- if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1515
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1516
- } else {
1517
- 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);
1518
- }
1519
- scene3D.add(toolObj);
1522
+ addItemToolObj();
1520
1523
  _this2.setState({
1521
1524
  toolObj: toolObj
1522
1525
  });
1523
1526
  // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1524
- var pointArray = [],
1525
- cnt = 0;
1526
- pointArray.push([_sceneCreator.fVLine[0].userData.distance, 90]);
1527
- pointArray.push([_sceneCreator.fVLine[1].userData.distance, -90]);
1528
- pointArray.push([_sceneCreator.fVLine[2].userData.distance, 180]);
1529
- pointArray.push([_sceneCreator.fVLine[3].userData.distance, 0]);
1530
- pointArray.forEach(function (pointElement, index) {
1531
- if (pointElement[0] == undefined) pointArray[index][0] = 0;
1532
- });
1533
- pointArray.forEach(function (pointElement) {
1534
- if (pointElement[0] == 0) cnt++;
1535
- });
1536
- if (cnt == 4 || cnt == 3) {
1537
- pointArray[0][0] = 100;
1538
- pointArray[1][0] = 100;
1539
- }
1527
+ var pointArray = [];
1528
+ // pointArray.push([fVLine[0].userData.distance, 90]);
1529
+ // pointArray.push([fVLine[1].userData.distance, -90]);
1530
+ // pointArray.push([fVLine[2].userData.distance, 180]);
1531
+ // pointArray.push([fVLine[3].userData.distance, 0]);
1532
+ pointArray = _export.GeometryUtils.calcDistancesFromItemToWalls(selectedElement, layer).PointArray;
1540
1533
  actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1541
1534
  internalType = internalType ? internalType : _constants.INTERNAL_EVENT_SELECT_ELEMENT;
1542
1535
  sendInternalEvent(internalType, selectedElement, pointArray);
@@ -1547,16 +1540,17 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1547
1540
  var elementPrototype = null;
1548
1541
  switch (true) {
1549
1542
  case 'holeID' in selectedObject:
1550
- case 'lineID' in selectedObject:
1543
+ elementID = selectedObject.holeID;
1544
+ elementPrototype = 'holes';
1551
1545
  if (_this2.props.state.mode === _constants.MODE_DRAGGING_HOLE_3D) {
1552
1546
  actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1553
- internalType = _constants.INTERNAL_EVENT_SELECT_ELEMENT;
1554
- elementID = selectedObject.holeID;
1555
- elementPrototype = 'holes';
1556
1547
  }
1557
1548
  break;
1549
+ case 'lineID' in selectedObject:
1550
+ elementID = selectedObject.lineID;
1551
+ elementPrototype = 'lines';
1552
+ break;
1558
1553
  case 'areaID' in selectedObject:
1559
- internalType = _constants.INTERNAL_EVENT_SELECT_ELEMENT;
1560
1554
  elementID = selectedObject.areaID;
1561
1555
  elementPrototype = 'areas';
1562
1556
  break;
@@ -1568,15 +1562,20 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1568
1562
  isSelected = false;
1569
1563
  }
1570
1564
  } else {
1571
- isSelected = false;
1572
- _this2.context.projectActions.unselectAll();
1573
- switch (true) {
1574
- case 'holeID' in selectedObject:
1575
- actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1576
- break;
1577
- default:
1578
- _this2.context.itemsActions.removeReplacingSupport();
1579
- break;
1565
+ var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1566
+ if (bMove && !(0, _helper.isEmpty)(selectedItem)) {
1567
+ addItemToolObj();
1568
+ } else {
1569
+ isSelected = false;
1570
+ _this2.context.projectActions.unselectAll();
1571
+ switch (true) {
1572
+ case 'holeID' in selectedObject:
1573
+ actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1574
+ break;
1575
+ default:
1576
+ _this2.context.itemsActions.removeReplacingSupport();
1577
+ break;
1578
+ }
1580
1579
  }
1581
1580
  }
1582
1581
  bMove = false;
@@ -1587,6 +1586,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1587
1586
  selectedObj = allItemRect.cur;
1588
1587
  }
1589
1588
  } else {
1589
+ var _planData$sceneGraph2, _selectedObject2, _selectedObject3;
1590
1590
  (0, _sceneCreator.visibleTransformBox)(false);
1591
1591
  var alti = 0;
1592
1592
  if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
@@ -1596,18 +1596,9 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1596
1596
  alti = (0, _convertUnitsLite.convert)(alti).from(_unit2).to(_this2.props.state.scene.unit);
1597
1597
  }
1598
1598
  getPoint(event, alti);
1599
+ 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];
1600
+ if (isSelected && !(0, _helper.isEmpty)(_selectedItem)) addItemToolObj();
1599
1601
  if (bRotate) {
1600
- var _intersects$_i;
1601
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1602
- if ((0, _util.isUndefined)(selectedItem)) return;
1603
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1604
- var itemPos = selectedItem.position.clone();
1605
- 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) {
1606
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1607
- } else {
1608
- 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);
1609
- }
1610
- scene3D.add(toolObj);
1611
1602
  _this2.setState({
1612
1603
  toolObj: toolObj
1613
1604
  });
@@ -1616,16 +1607,6 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
1616
1607
  }
1617
1608
  if (bMove) {
1618
1609
  bMove = false;
1619
- var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1620
- if ((0, _util.isUndefined)(_selectedItem)) return;
1621
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1622
- var _itemPos = _selectedItem.position.clone();
1623
- if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) {
1624
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1625
- } else {
1626
- 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);
1627
- }
1628
- scene3D.add(toolObj);
1629
1610
  _this2.setState({
1630
1611
  toolObj: toolObj
1631
1612
  });
@@ -2092,7 +2073,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2092
2073
  if (minDis < snapDelta && !snapFlag) {
2093
2074
  _this2.snap(snapObj, layer);
2094
2075
  snapFlag = true;
2095
- (0, _sceneCreator.getDistances)(layer, true);
2076
+ (0, _sceneCreator.getDistances)(layer);
2096
2077
  var _i13 = 0;
2097
2078
  for (_i13 = 0; _i13 < _sceneCreator.fVLine.length; _i13++) {
2098
2079
  if (_sceneCreator.fVLine[_i13].userData.distance < snapDelta) {
@@ -2451,18 +2432,14 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2451
2432
  this.renderer.renderLists.dispose();
2452
2433
  }
2453
2434
  }, {
2454
- key: "componentDidUpdate",
2455
- value: function componentDidUpdate(prevProps) {
2435
+ key: "componentWillReceiveProps",
2436
+ value: function componentWillReceiveProps(nextProps) {
2456
2437
  var _this4 = this;
2457
- // Early return if downloadFlag and state are unchanged or scene is empty
2458
- if (this.props.downloadFlag && (0, _immutablediff["default"])(prevProps.state, this.props.state).toJS().length == 0 || (0, _helper.isEmpty)(this.props.state.scene)) {
2459
- return;
2460
- }
2461
- var _this$props = this.props,
2462
- width = _this$props.width,
2463
- height = _this$props.height;
2464
- var selectedLayer = this.props.state.getIn(['scene', 'layers', this.props.state.scene.selectedLayer]);
2465
- var ceilHeight = (0, _convertUnitsLite.convert)(selectedLayer.ceilHeight).from(selectedLayer.unit).to(this.props.state.scene.unit);
2438
+ if (this.props.downloadFlag && (0, _immutablediff["default"])(this.props.state, nextProps.state).toJS().length == 0 || (0, _helper.isEmpty)(nextProps.state.scene)) return;
2439
+ var width = nextProps.width,
2440
+ height = nextProps.height;
2441
+ var selectedLayer = nextProps.state.getIn(['scene', 'layers', nextProps.state.scene.selectedLayer]);
2442
+ var ceilHeight = (0, _convertUnitsLite.convert)(selectedLayer.ceilHeight).from(selectedLayer.unit).to(nextProps.state.scene.unit);
2466
2443
  var actions = {
2467
2444
  areaActions: this.context.areaActions,
2468
2445
  holesActions: this.context.holesActions,
@@ -2472,7 +2449,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2472
2449
  projectActions: this.context.projectActions,
2473
2450
  catalog: this.context.catalog
2474
2451
  };
2475
- var isLoadingCabinet = this.props.state.scene.isLoadingCabinet;
2452
+ var isLoadingCabinet = nextProps.state.scene.isLoadingCabinet;
2476
2453
  if (this.state.isLoadingCabinet !== isLoadingCabinet) this.setState({
2477
2454
  isLoadingCabinet: isLoadingCabinet
2478
2455
  });
@@ -2483,7 +2460,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2483
2460
  var allItemRect;
2484
2461
 
2485
2462
  // handle camera setting
2486
- switch (prevProps.state.mode) {
2463
+ switch (this.props.state.mode) {
2487
2464
  case _constants.MODE_ELEVATION_VIEW:
2488
2465
  // when Elevation mode (camera: Orthographic)
2489
2466
  var cameraRect = (0, _helper.handleCamRect)(width, height, ceilHeight, this.state.lineLength);
@@ -2501,12 +2478,12 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2501
2478
  break;
2502
2479
  }
2503
2480
  this.camera.updateProjectionMatrix();
2504
- var data = this.props.state.scene;
2481
+ var data = nextProps.state.scene;
2505
2482
  var layer = data.getIn(['layers', data.selectedLayer]);
2506
2483
  var self = this;
2507
2484
  function implementBacksplash() {
2508
- if ((0, _helper.isElevationView)(self.props.state.mode)) return;
2509
- var allItems = _export.GeometryUtils.getAllItemSpecified(self.props.state.scene, actions.catalog, _constants.BASE_CABINET_LAYOUTPOS);
2485
+ if ((0, _helper.isElevationView)(self.props.state.mode)) return; // apply backsplash when just 3D_mode, not elevation_mode
2486
+ var allItems = _export.GeometryUtils.getAllItemSpecified(nextProps.state.scene, actions.catalog, _constants.BASE_CABINET_LAYOUTPOS);
2510
2487
  var i,
2511
2488
  items = [];
2512
2489
  for (i = 0; i < allItems.others.length; i++) items.push(allItems.others[i]);
@@ -2515,7 +2492,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2515
2492
  var calcRect = _export.GeometryUtils.getCalcRectFromItem3D(items[i]);
2516
2493
  var visible = _export.GeometryUtils.isSnappedLine(calcRect, allLineRects);
2517
2494
  actions.itemsActions.setBacksplashVisible(items[i].itemInfo.id, visible);
2518
- (0, _sceneCreator.createBacksplash)(items[i], self.props.state.scene.getIn(['layers', self.props.state.scene.selectedLayer]), planData, self.props.state.scene);
2495
+ (0, _sceneCreator.createBacksplash)(items[i], nextProps.state.scene.getIn(['layers', nextProps.state.scene.selectedLayer]), planData, nextProps.state.scene);
2519
2496
  }
2520
2497
  }
2521
2498
  function implementWarningBox() {
@@ -2543,13 +2520,16 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2543
2520
  showflag: false
2544
2521
  });
2545
2522
  }
2546
- if (this.props.state.scene !== prevProps.state.scene || this.props.state.doorStyle && this.props.state.doorStyle.get('name') !== prevProps.state.doorStyle.get('name')) {
2547
- var changedValues = (0, _immutablediff["default"])(prevProps.state.scene, this.props.state.scene);
2523
+ if (nextProps.state.scene !== this.props.state.scene || nextProps.state.doorStyle && nextProps.state.doorStyle.get('name') !== this.props.state.doorStyle.get('name')) {
2524
+ var changedValues = (0, _immutablediff["default"])(this.props.state.scene, nextProps.state.scene);
2548
2525
  prepareSnapSpec(layer);
2549
- if (this.props.state.doorStyle && this.props.state.doorStyle.get('name') === prevProps.state.doorStyle.get('name')) {
2550
- self.setState({
2551
- isLoading: true
2552
- });
2526
+ var isInteractiveMove = nextProps.state.mode === _constants.MODE_DRAGGING_ITEM_3D || nextProps.state.mode === _constants.MODE_ROTATING_ITEM_3D || nextProps.state.mode === _constants.MODE_DRAWING_ITEM_3D || nextProps.state.mode === _constants.MODE_DRAGGING_HOLE_3D || nextProps.state.mode === _constants.MODE_IDLE_3D;
2527
+ if (nextProps.state.doorStyle && nextProps.state.doorStyle.get('name') === this.props.state.doorStyle.get('name')) {
2528
+ if (!isInteractiveMove) {
2529
+ self.setState({
2530
+ isLoading: true
2531
+ });
2532
+ }
2553
2533
  if (self.props.downloadFlag) {
2554
2534
  self.setState({
2555
2535
  waitForRender: 0
@@ -2565,7 +2545,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2565
2545
  }
2566
2546
  self.renderer.domElement.style.display = 'none';
2567
2547
  }
2568
- if (this.props.state.scene.showfg == true) {
2548
+ if (nextProps.state.scene.showfg == true) {
2569
2549
  implementBacksplash();
2570
2550
  implementWarningBox();
2571
2551
  } else {
@@ -2574,7 +2554,7 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2574
2554
  var _this$state = this.state,
2575
2555
  toolObj = _this$state.toolObj,
2576
2556
  angleObj = _this$state.angleObj;
2577
- var _updateScene = (0, _sceneCreator.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),
2557
+ var _updateScene = (0, _sceneCreator.updateScene)(this.planData, nextProps.state.scene, this.props.state.scene, changedValues.toJS(), actions, this.context.catalog, nextProps.state.mode, toolObj, angleObj, nextProps.state.draggingSupport),
2578
2558
  promise = _updateScene.promise;
2579
2559
  self.setState();
2580
2560
  promise.then(function (p1Value) {
@@ -2586,8 +2566,8 @@ var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component
2586
2566
  });
2587
2567
  self.renderer.domElement.style.display = 'block';
2588
2568
  });
2589
- if (this.props.state.getIn(['scene', 'isEndDragging'])) {
2590
- this.props.state.setIn(['scene', 'isEndDragging'], false);
2569
+ if (nextProps.state.getIn(['scene', 'isEndDragging'])) {
2570
+ nextProps.state.setIn(['scene', 'isEndDragging'], false);
2591
2571
  }
2592
2572
  }
2593
2573
  this.renderer.setSize(width, height);
@@ -2675,4 +2655,13 @@ Scene3DViewer.propTypes = {
2675
2655
  height: _propTypes["default"].number.isRequired,
2676
2656
  replaceCabinet: _propTypes["default"].func.isRequired
2677
2657
  };
2658
+ Scene3DViewer.contextTypes = {
2659
+ areaActions: _propTypes["default"].object.isRequired,
2660
+ holesActions: _propTypes["default"].object.isRequired,
2661
+ itemsActions: _propTypes["default"].object.isRequired,
2662
+ linesActions: _propTypes["default"].object.isRequired,
2663
+ sceneActions: _propTypes["default"].object.isRequired,
2664
+ projectActions: _propTypes["default"].object.isRequired,
2665
+ catalog: _propTypes["default"].object
2666
+ };
2678
2667
  module.exports = exports.default;