kitchen-simulator 1.0.0-clark.71 → 1.0.0-clark.90

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 (41) hide show
  1. package/es/LiteKitchenConfigurator.js +35 -16
  2. package/es/LiteRenderer.js +5 -2
  3. package/es/assets/img/svg/logo.svg +11 -0
  4. package/es/assets/img/svg/logo_with_text.svg +25 -0
  5. package/es/catalog/factories/wall-factory.js +8 -8
  6. package/es/catalog/utils/item-loader.js +114 -39
  7. package/es/components/content.js +10 -5
  8. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  9. package/es/components/viewer2d/item.js +6 -77
  10. package/es/components/viewer2d/line.js +243 -315
  11. package/es/components/viewer2d/ruler.js +36 -16
  12. package/es/components/viewer2d/rulerDist.js +32 -18
  13. package/es/components/viewer2d/viewer2d.js +85 -32
  14. package/es/components/viewer3d/viewer3d.js +86 -53
  15. package/es/constants.js +15 -7
  16. package/es/devLiteRenderer.js +31 -3
  17. package/es/models.js +4 -4
  18. package/es/shared-style.js +4 -4
  19. package/es/utils/geometry.js +6 -6
  20. package/es/utils/isolate-event-handler.js +35 -18
  21. package/lib/LiteKitchenConfigurator.js +35 -16
  22. package/lib/LiteRenderer.js +5 -2
  23. package/lib/assets/img/svg/logo.svg +11 -0
  24. package/lib/assets/img/svg/logo_with_text.svg +25 -0
  25. package/lib/catalog/factories/wall-factory.js +8 -8
  26. package/lib/catalog/utils/item-loader.js +113 -39
  27. package/lib/components/content.js +10 -5
  28. package/lib/components/viewer2d/grids/grid-streak.js +1 -1
  29. package/lib/components/viewer2d/item.js +6 -77
  30. package/lib/components/viewer2d/line.js +242 -315
  31. package/lib/components/viewer2d/ruler.js +35 -15
  32. package/lib/components/viewer2d/rulerDist.js +32 -18
  33. package/lib/components/viewer2d/viewer2d.js +84 -31
  34. package/lib/components/viewer3d/viewer3d.js +85 -52
  35. package/lib/constants.js +19 -11
  36. package/lib/devLiteRenderer.js +30 -2
  37. package/lib/models.js +4 -4
  38. package/lib/shared-style.js +4 -4
  39. package/lib/utils/geometry.js +6 -6
  40. package/lib/utils/isolate-event-handler.js +34 -17
  41. package/package.json +1 -1
@@ -2,8 +2,7 @@ import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { convert } from "../../utils/convert-units-lite";
4
4
  import IDBroker from "../../utils/id-broker";
5
- import { TEXT_COLOR_NEUTRAL_7 } from "../../constants";
6
- import { STYLE_ROOM_SHAPE } from "./line";
5
+ import { LINE_THICKNESS, SHADE_LIGHT_BLUE_COLOR, TEXT_COLOR_NEUTRAL_7 } from "../../constants";
7
6
  var STYLE = {
8
7
  stroke: TEXT_COLOR_NEUTRAL_7,
9
8
  strokeWidth: '1px'
@@ -16,7 +15,6 @@ var STYLE_TEXT = {
16
15
  textAnchor: 'middle',
17
16
  fontSize: '12px',
18
17
  pointerEvents: 'none',
19
- fill: '#455A64',
20
18
  //http://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting-using-css
21
19
  WebkitTouchCallout: 'none' /* iOS Safari */,
22
20
  WebkitUserSelect: 'none' /* Chrome/Safari/Opera */,
@@ -30,9 +28,37 @@ export default function Ruler(_ref) {
30
28
  unit = _ref.unit,
31
29
  rulerUnit = _ref.rulerUnit,
32
30
  transform = _ref.transform,
33
- style = _ref.style;
31
+ flag = _ref.flag;
32
+ var update = function update(lengthInput, unitInput, type) {
33
+ var newLength = toFixedFloat(lengthInput);
34
+ var merged = null;
35
+ if (type === 0) {
36
+ merged = value.merge({
37
+ _length: newLength,
38
+ length: convert(newLength).from(unitInput).to('cm')
39
+ });
40
+ } else {
41
+ merged = value.merge({
42
+ _length: convert(newLength).from(UNIT_INCH).to(unitInput),
43
+ _unit: unitInput
44
+ });
45
+ }
46
+ // if (hook) {
47
+ // return hook(merged, sourceElement, internalState, state).then(val => {
48
+ // return onUpdate(val);
49
+ // });
50
+ // }
51
+ // return onUpdate(merged);
52
+ };
53
+ // let _unit = "in";
54
+ // let distanceText = convert(length).from(unit).to(rulerUnit);
34
55
  var distanceText = convert(length).from(unit).to(rulerUnit).toFixed(0);
35
- var textLength = (distanceText.length + layer.unit.length) * 9;
56
+ var thickness = convert(LINE_THICKNESS).from(unit).to(rulerUnit).toFixed(0);
57
+ // let _ft_len = convert(_length).from('in').to('ft');
58
+ // let _ft_val = Math.floor(_ft_len); _ft_len -= _ft_val;
59
+ // let _in_val = convert(_ft_len).from('ft').to('in').toFixed(0);
60
+ // let distanceText = `${_ft_val}'${_in_val}"`;
61
+ var textLength = (distanceText.length + layer.unit.length) * 18;
36
62
  return /*#__PURE__*/React.createElement("g", {
37
63
  transform: transform
38
64
  }, /*#__PURE__*/React.createElement("g", {
@@ -53,24 +79,18 @@ export default function Ruler(_ref) {
53
79
  style: STYLE_TEXT,
54
80
  fill: TEXT_COLOR_NEUTRAL_7
55
81
  }, Math.round(convert(distanceText).from('in').to(layer.unit) * 100) / 100, layer.unit === 'in' ? '"' : layer.unit)), /*#__PURE__*/React.createElement("line", {
56
- x1: style === STYLE_ROOM_SHAPE ? 0 : 4,
82
+ x1: "0",
57
83
  y1: "0",
58
84
  x2: (length - textLength) / 2 < 0 ? 0 : (length - textLength) / 2,
59
85
  y2: "0",
60
- style: style
86
+ style: STYLE
61
87
  }), /*#__PURE__*/React.createElement("line", {
62
88
  x1: (length + textLength) / 2 < 0 ? 0 : (length + textLength) / 2 < length ? (length + textLength) / 2 : length,
63
89
  y1: "0",
64
- x2: style === STYLE_ROOM_SHAPE ? length : length - 4,
90
+ x2: length,
65
91
  y2: "0",
66
- style: style
67
- }), style !== STYLE_ROOM_SHAPE && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("polygon", {
68
- points: "3, 0, 6.5, -2, 6.5, 2 ",
69
- style: style
70
- }), /*#__PURE__*/React.createElement("polygon", {
71
- points: "".concat(length - 3, ", 0, ").concat(length - 6.5, ", 2, ").concat(length - 6.5, ", -2"),
72
- style: style
73
- })));
92
+ style: STYLE
93
+ }));
74
94
  }
75
95
  Ruler.propTypes = {
76
96
  length: PropTypes.number.isRequired,
@@ -7,15 +7,13 @@ var ARROW_STYLE = {
7
7
  strokeLinecap: 'round'
8
8
  };
9
9
  var STYLE = {
10
- stroke: '#455A64',
11
- fill: '#455A64',
12
- strokeWidth: '1.5px'
10
+ stroke: 'black',
11
+ strokeWidth: '1.1px'
13
12
  };
14
13
  var STYLE_TEXT = {
15
14
  textAnchor: 'middle',
16
15
  fontSize: '10px',
17
16
  pointerEvents: 'none',
18
- fill: '#455A64',
19
17
  //http://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting-using-css
20
18
  WebkitTouchCallout: 'none' /* iOS Safari */,
21
19
  WebkitUserSelect: 'none' /* Chrome/Safari/Opera */,
@@ -77,24 +75,32 @@ export default function RulerDist(_ref) {
77
75
  y: "0",
78
76
  transform: "translate(".concat(length / 2, ",").concat(ay, ") scale(1, -1) rotate(").concat(textRotation, ")"),
79
77
  style: STYLE_TEXT
80
- }, Math.round(convert(distanceText).from('in').to(layer.unit) * 100) / 100, layer.unit === 'in' ? '"' : layer.unit)), /*#__PURE__*/React.createElement("line", {
78
+ }, Math.round(convert(distanceText).from('in').to(layer.unit) * 100) / 100, layer.unit)), /*#__PURE__*/React.createElement("circle", {
79
+ cx: "1",
80
+ cy: "0",
81
+ fill: "white",
82
+ r: "1.1",
83
+ stroke: "black",
84
+ strokeWidth: "0.6"
85
+ }), /*#__PURE__*/React.createElement("line", {
81
86
  x1: "2",
82
87
  y1: "0",
83
88
  x2: (length - textLength) / 2 < 0 ? 0 : length,
84
89
  y2: "0",
85
90
  style: STYLE
86
- }), /*#__PURE__*/React.createElement("polygon", {
87
- points: "1, 0, 4.5, -2, 4.5, 2 ",
88
- style: STYLE
89
91
  }), /*#__PURE__*/React.createElement("line", {
90
92
  x1: (length + textLength) / 2 < 0 ? 0 : (length + textLength) / 2 < length ? (length + textLength) / 2 : length,
91
93
  y1: "0",
92
94
  x2: length,
93
95
  y2: "0",
94
96
  style: STYLE
95
- }), /*#__PURE__*/React.createElement("polygon", {
96
- points: "".concat(length - 1, ", 0, ").concat(length - 4.5, ", 2, ").concat(length - 4.5, ", -2"),
97
- style: STYLE
97
+ }), /*#__PURE__*/React.createElement("circle", {
98
+ cx: length - 1,
99
+ cy: "0",
100
+ fill: "white",
101
+ r: "1.1",
102
+ stroke: "black",
103
+ strokeWidth: "0.6"
98
104
  }));
99
105
  } else {
100
106
  return /*#__PURE__*/React.createElement("g", {
@@ -104,24 +110,32 @@ export default function RulerDist(_ref) {
104
110
  y: "0",
105
111
  transform: "translate(".concat(length / 2, ",").concat(ay, ") scale(1, -1) rotate(").concat(textRotation, ")"),
106
112
  style: STYLE_TEXT
107
- }, Math.round(convert(distanceText).from('in').to(layer.unit) * 100) / 100, layer.unit === 'in' ? '"' : layer.unit)), /*#__PURE__*/React.createElement("line", {
113
+ }, Math.round(convert(distanceText).from('in').to(layer.unit) * 100) / 100, layer.unit)), /*#__PURE__*/React.createElement("circle", {
114
+ cx: "1",
115
+ cy: "0",
116
+ fill: "white",
117
+ r: "1.1",
118
+ stroke: "black",
119
+ strokeWidth: "0.6"
120
+ }), /*#__PURE__*/React.createElement("line", {
108
121
  x1: "2",
109
122
  y1: "0",
110
123
  x2: (length - textLength) / 2 < 0 ? 0 : (length - textLength) / 2,
111
124
  y2: "0",
112
125
  style: STYLE
113
- }), /*#__PURE__*/React.createElement("polygon", {
114
- points: "1, 0, 4.5, -2, 4.5, 2 ",
115
- style: STYLE
116
126
  }), /*#__PURE__*/React.createElement("line", {
117
127
  x1: (length + textLength) / 2 < 0 ? 0 : (length + textLength) / 2 < length ? (length + textLength) / 2 : length,
118
128
  y1: "0",
119
129
  x2: length,
120
130
  y2: "0",
121
131
  style: STYLE
122
- }), /*#__PURE__*/React.createElement("polygon", {
123
- points: "".concat(length - 1, ", 0, ").concat(length - 4.5, ", 2, ").concat(length - 4.5, ", -2"),
124
- style: STYLE
132
+ }), /*#__PURE__*/React.createElement("circle", {
133
+ cx: length - 1,
134
+ cy: "0",
135
+ fill: "white",
136
+ r: "1.1",
137
+ stroke: "black",
138
+ strokeWidth: "0.6"
125
139
  }));
126
140
  }
127
141
  }
@@ -6,7 +6,7 @@ import React, { useEffect, useRef, useState } from 'react';
6
6
  import PropTypes from 'prop-types';
7
7
  import { ReactSVGPanZoom, TOOL_AUTO, TOOL_NONE, TOOL_PAN, TOOL_ZOOM_IN, TOOL_ZOOM_OUT } from 'react-svg-pan-zoom';
8
8
  import * as constants from "../../constants";
9
- import { DECIMAL_PLACES_2, LINE_THICKNESS, MIN_ANGLE_DISALLOW_DRAW_WALL, MODE_ELEVATION_VIEW, MODE_IDLE, UNIT_ANGLE } from "../../constants";
9
+ import { DECIMAL_PLACES_2, LINE_THICKNESS, MIN_ANGLE_DISALLOW_DRAW_WALL, MODE_ELEVATION_VIEW, MODE_IDLE, UNIT_ANGLE, INTERNAL_EVENT_SELECT_ELEMENT, INTERNAL_EVENT_DRAG_ELEMENT, INTERNAL_EVENT_DRAW_ELEMENT, INTERNAL_EVENT_ROTATE_ELEMENT } from "../../constants";
10
10
  import State from "./state";
11
11
  import * as SharedStyle from "../../shared-style";
12
12
  import { RulerX, RulerY } from "./export";
@@ -123,7 +123,8 @@ export default function Viewer2D(_ref, _ref2) {
123
123
  width = _ref.width,
124
124
  height = _ref.height,
125
125
  setToolbar = _ref.setToolbar,
126
- replaceCabinet = _ref.replaceCabinet;
126
+ replaceCabinet = _ref.replaceCabinet,
127
+ onInternalEvent = _ref.onInternalEvent;
127
128
  var viewer2DActions = _ref2.viewer2DActions,
128
129
  linesActions = _ref2.linesActions,
129
130
  holesActions = _ref2.holesActions,
@@ -780,35 +781,42 @@ export default function Viewer2D(_ref, _ref2) {
780
781
  if (mode === constants.MODE_IDLE) {
781
782
  var elementData = extractElementData(event.target);
782
783
  if (!elementData) return;
783
- if (sCount < 2) switch (elementData.prototype) {
784
- case 'lines':
785
- if (elementData.selected) {
786
- if (elementData.part === 'remove') break;else if (elementData.part === 'elevation') break;
787
- linesActions.beginDraggingLine(elementData.layer, elementData.id, x, y, state.snapMask);
788
- }
789
- break;
790
- case 'vertices':
791
- verticesActions.beginDraggingVertex(elementData.layer, elementData.id, x, y, state.snapMask);
792
- break;
793
- case 'items':
794
- setToolbar('');
795
- current_sel_obj_id = elementData.id;
796
- if (elementData.part === 'rotation-anchor') itemsActions.beginRotatingItem(elementData.layer, elementData.id, x, y);else if (elementData.part === 'remove') break;else if (elementData.part === 'duplicate') break;else if (elementData.part === 'warning_edit') break;else {
797
- // closes the setting dialog
798
- if (document.getElementById('setting_dialog')) {
799
- document.getElementById('setting_dialog').style.display = 'none';
784
+ if (sCount < 2) {
785
+ switch (elementData.prototype) {
786
+ case 'lines':
787
+ if (elementData.selected) {
788
+ if (elementData.part === 'remove') break;else if (elementData.part === 'elevation') break;
789
+ linesActions.beginDraggingLine(elementData.layer, elementData.id, x, y, state.snapMask);
800
790
  }
801
- itemsActions.selectItem(elementData.layer, elementData.id);
802
- // projectActions.setMode(constants.MODE_DRAGGING_ITEM);
803
- itemsActions.beginDraggingItem(elementData.layer, elementData.id, x, y);
804
- replaceCabinet(false);
805
- }
806
- break;
807
- case 'holes':
808
- if (elementData.selected) holesActions.beginDraggingHole(elementData.layer, elementData.id, x, y);
809
- break;
810
- default:
811
- break;
791
+ break;
792
+ case 'vertices':
793
+ verticesActions.beginDraggingVertex(elementData.layer, elementData.id, x, y, state.snapMask);
794
+ break;
795
+ case 'items':
796
+ setToolbar('');
797
+ current_sel_obj_id = elementData.id;
798
+ if (elementData.part === 'rotation-anchor') itemsActions.beginRotatingItem(elementData.layer, elementData.id, x, y);else if (elementData.part === 'remove') break;else if (elementData.part === 'duplicate') break;else if (elementData.part === 'warning_edit') break;else {
799
+ // closes the setting dialog
800
+ if (document.getElementById('setting_dialog')) {
801
+ document.getElementById('setting_dialog').style.display = 'none';
802
+ }
803
+ itemsActions.selectItem(elementData.layer, elementData.id);
804
+ // projectActions.setMode(constants.MODE_DRAGGING_ITEM);
805
+ itemsActions.beginDraggingItem(elementData.layer, elementData.id, x, y);
806
+ replaceCabinet(false);
807
+ }
808
+ break;
809
+ case 'holes':
810
+ if (elementData.selected) holesActions.beginDraggingHole(elementData.layer, elementData.id, x, y);
811
+ break;
812
+ default:
813
+ break;
814
+ }
815
+ var currentObject = state.getIn(['scene', 'layers', layerID, elementData.prototype, elementData.id]);
816
+ onInternalEvent === null || onInternalEvent === void 0 || onInternalEvent({
817
+ type: INTERNAL_EVENT_SELECT_ELEMENT,
818
+ value: currentObject.toJS()
819
+ });
812
820
  } else {
813
821
  sPoint.x = x;
814
822
  sPoint.y = y;
@@ -844,10 +852,47 @@ export default function Viewer2D(_ref, _ref2) {
844
852
  y = _mapCursorPosition3.y;
845
853
  var vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
846
854
  var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
855
+ var elementData = extractElementData(event.target);
856
+ var selectedLayer = scene.getIn(['layers', layerID]);
857
+ var elementPrototype = null;
858
+ var elementID = null;
859
+ var internalType = '';
860
+ switch (mode) {
861
+ case constants.MODE_DRAWING_LINE:
862
+ elementPrototype = 'lines';
863
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
864
+ break;
865
+ case constants.MODE_DRAWING_HOLE:
866
+ elementPrototype = 'holes';
867
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
868
+ break;
869
+ case constants.MODE_DRAWING_ITEM:
870
+ elementPrototype = 'items';
871
+ internalType = INTERNAL_EVENT_DRAW_ELEMENT;
872
+ break;
873
+ case constants.MODE_DRAGGING_LINE:
874
+ elementPrototype = 'lines';
875
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
876
+ break;
877
+ case constants.MODE_DRAGGING_HOLE:
878
+ elementPrototype = 'holes';
879
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
880
+ break;
881
+ case constants.MODE_DRAGGING_ITEM:
882
+ elementPrototype = 'items';
883
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
884
+ break;
885
+ case constants.MODE_DRAGGING_VERTEX:
886
+ elementPrototype = 'lines';
887
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
888
+ break;
889
+ case constants.MODE_ROTATING_ITEM:
890
+ elementPrototype = 'items';
891
+ internalType = INTERNAL_EVENT_ROTATE_ELEMENT;
892
+ break;
893
+ }
847
894
  switch (mode) {
848
895
  case constants.MODE_IDLE:
849
- var elementData = extractElementData(event.target);
850
- var selectedLayer = scene.getIn(['layers', layerID]);
851
896
  switch (elementData ? elementData.prototype : 'none') {
852
897
  case 'areas':
853
898
  if (document.getElementById('setting_dialog')) {
@@ -1187,6 +1232,14 @@ export default function Viewer2D(_ref, _ref2) {
1187
1232
  itemsActions.endRotatingItem(x, y);
1188
1233
  break;
1189
1234
  }
1235
+ if (elementPrototype) {
1236
+ elementID = state.getIn(['scene', 'layers', layerID, 'selected', elementPrototype]).first();
1237
+ var _currentObject = state.getIn(['scene', 'layers', layerID, elementPrototype, elementID]);
1238
+ onInternalEvent === null || onInternalEvent === void 0 || onInternalEvent({
1239
+ type: internalType,
1240
+ value: _currentObject.toJS()
1241
+ });
1242
+ }
1190
1243
  event.stopPropagation();
1191
1244
  };
1192
1245
  var onChangeValue = function onChangeValue(value) {
@@ -19,7 +19,7 @@ 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 } 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 } from "../../constants";
23
23
  import { isUndefined } from 'util';
24
24
  import { verticesDistance } from "../../utils/geometry";
25
25
  import { convert } from "../../utils/convert-units-lite";
@@ -1274,7 +1274,18 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1274
1274
  }
1275
1275
  }
1276
1276
  if (selectedObject !== undefined) {
1277
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1277
+ // get selected object from planData.sceneGraph
1278
+ var selectedItem = null;
1279
+ switch (true) {
1280
+ case 'itemID' in selectedObject:
1281
+ selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1282
+ break;
1283
+ case 'holeID' in selectedObject:
1284
+ selectedItem = planData.sceneGraph.layers[selectedObject.layerID].holes[selectedObject.holeID];
1285
+ break;
1286
+ default:
1287
+ break;
1288
+ }
1278
1289
  sPoint.set(Point.x, Point.y);
1279
1290
  if (transflag == 0) {
1280
1291
  scene3D.remove(toolObj);
@@ -1340,7 +1351,8 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1340
1351
  }
1341
1352
  };
1342
1353
  this.mouseUpEvent = function (event) {
1343
- var _selObj$object, _selObj$object2;
1354
+ var internalType = ''; // internalEvent type - select/drag/draw
1355
+ var selectedElement; // internalEvent data
1344
1356
  firstMove = 0;
1345
1357
  var altitude = 0;
1346
1358
  if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
@@ -1377,6 +1389,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1377
1389
  isInitialPhase = true;
1378
1390
  return;
1379
1391
  }
1392
+ switch (_this2.props.state.mode) {
1393
+ case MODE_DRAGGING_ITEM_3D:
1394
+ internalType = INTERNAL_EVENT_DRAG_ELEMENT;
1395
+ break;
1396
+ case MODE_ROTATING_ITEM_3D:
1397
+ internalType = INTERNAL_EVENT_ROTATE_ELEMENT;
1398
+ break;
1399
+ }
1380
1400
  if (_this2.props.state.mode == MODE_DRAGGING_ITEM_3D) {
1381
1401
  _this2.context.itemsActions.endDraggingItem3D();
1382
1402
  }
@@ -1458,56 +1478,62 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1458
1478
  currentObject = currentObject.parent;
1459
1479
  }
1460
1480
  isSelected = true;
1461
- setTimeout(function () {
1462
- getDistances(layer);
1463
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1464
- if (isUndefined(selectedItem)) return;
1465
- var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1466
- var itemPos = selectedItem.position.clone();
1467
- if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1468
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1469
- } else {
1470
- toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1471
- }
1472
- scene3D.add(toolObj);
1473
- _this2.setState({
1474
- toolObj: toolObj
1475
- });
1476
- // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1477
- var pointArray = [],
1478
- cnt = 0;
1479
- pointArray.push([fVLine[0].userData.distance, 90]);
1480
- pointArray.push([fVLine[1].userData.distance, -90]);
1481
- pointArray.push([fVLine[2].userData.distance, 180]);
1482
- pointArray.push([fVLine[3].userData.distance, 0]);
1483
- pointArray.forEach(function (pointElement, index) {
1484
- if (pointElement[0] == undefined) pointArray[index][0] = 0;
1485
- });
1486
- pointArray.forEach(function (pointElement) {
1487
- if (pointElement[0] == 0) cnt++;
1488
- });
1489
- if (cnt == 4 || cnt == 3) {
1490
- pointArray[0][0] = 100;
1491
- pointArray[1][0] = 100;
1492
- }
1493
- actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1481
+ getDistances(layer);
1482
+ var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1483
+ if (isUndefined(selectedItem)) return;
1484
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1485
+ var itemPos = selectedItem.position.clone();
1486
+ if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1487
+ toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1488
+ } else {
1489
+ 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);
1490
+ }
1491
+ scene3D.add(toolObj);
1492
+ _this2.setState({
1493
+ toolObj: toolObj
1494
+ });
1495
+ // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1496
+ var pointArray = [],
1497
+ cnt = 0;
1498
+ pointArray.push([fVLine[0].userData.distance, 90]);
1499
+ pointArray.push([fVLine[1].userData.distance, -90]);
1500
+ pointArray.push([fVLine[2].userData.distance, 180]);
1501
+ pointArray.push([fVLine[3].userData.distance, 0]);
1502
+ pointArray.forEach(function (pointElement, index) {
1503
+ if (pointElement[0] == undefined) pointArray[index][0] = 0;
1494
1504
  });
1505
+ pointArray.forEach(function (pointElement) {
1506
+ if (pointElement[0] == 0) cnt++;
1507
+ });
1508
+ if (cnt == 4 || cnt == 3) {
1509
+ pointArray[0][0] = 100;
1510
+ pointArray[1][0] = 100;
1511
+ }
1512
+ actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1513
+ internalType = internalType ? internalType : INTERNAL_EVENT_SELECT_ELEMENT;
1495
1514
  } else {
1496
1515
  if (selectedObject) {
1516
+ var elementID = null;
1517
+ var elementPrototype = null;
1497
1518
  switch (true) {
1498
1519
  case 'holeID' in selectedObject:
1499
- if (selObj !== null && selObj !== void 0 && (_selObj$object = selObj.object) !== null && _selObj$object !== void 0 && _selObj$object.name.includes('transHole')) {
1500
- actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1501
- }
1502
- break;
1503
1520
  case 'lineID' in selectedObject:
1504
- if (selObj !== null && selObj !== void 0 && (_selObj$object2 = selObj.object) !== null && _selObj$object2 !== void 0 && _selObj$object2.name.includes('transHole')) {
1521
+ if (_this2.props.state.mode === MODE_DRAGGING_HOLE_3D) {
1505
1522
  actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1523
+ internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1524
+ elementID = selectedObject.holeID;
1525
+ elementPrototype = 'holeID';
1506
1526
  }
1507
1527
  break;
1528
+ case 'areaID' in selectedObject:
1529
+ internalType = INTERNAL_EVENT_SELECT_ELEMENT;
1530
+ elementID = selectedObject.areaID;
1531
+ elementPrototype = 'areas';
1532
+ break;
1508
1533
  default:
1509
1534
  break;
1510
1535
  }
1536
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).getIn([elementPrototype, elementID]);
1511
1537
  }
1512
1538
  isSelected = false;
1513
1539
  }
@@ -1542,14 +1568,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1542
1568
  getPoint(event, alti);
1543
1569
  if (bRotate) {
1544
1570
  var _intersects$_i;
1545
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1546
- if (isUndefined(selectedItem)) return;
1547
- var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1548
- var itemPos = selectedItem.position.clone();
1549
- 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) {
1571
+ var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1572
+ if (isUndefined(_selectedItem)) return;
1573
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1574
+ var _itemPos = _selectedItem.position.clone();
1575
+ 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) {
1550
1576
  toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1551
1577
  } else {
1552
- toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1578
+ 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);
1553
1579
  }
1554
1580
  scene3D.add(toolObj);
1555
1581
  _this2.setState({
@@ -1560,14 +1586,14 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1560
1586
  }
1561
1587
  if (bMove) {
1562
1588
  bMove = false;
1563
- var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1564
- if (isUndefined(_selectedItem)) return;
1565
- var _selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1566
- var _itemPos = _selectedItem.position.clone();
1567
- if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) {
1589
+ var _selectedItem2 = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1590
+ if (isUndefined(_selectedItem2)) return;
1591
+ selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1592
+ var _itemPos2 = _selectedItem2.position.clone();
1593
+ if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem2.userData.itemId) {
1568
1594
  toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1569
1595
  } else {
1570
- toolObj.position.set(planData.plan.position.x + _itemPos.x, _selItem.category === 'lighting' ? -planData.plan.position.y - _selItem.properties.get('height').get('length') : planData.plan.position.y + _selectedItem.children[0].position.y, planData.plan.position.z + _itemPos.z);
1596
+ toolObj.position.set(planData.plan.position.x + _itemPos2.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + _selectedItem2.children[0].position.y, planData.plan.position.z + _itemPos2.z);
1571
1597
  }
1572
1598
  scene3D.add(toolObj);
1573
1599
  _this2.setState({
@@ -1601,6 +1627,13 @@ var Scene3DViewer = /*#__PURE__*/function (_React$Component) {
1601
1627
  selectedObj = allItemRect.cur;
1602
1628
  }
1603
1629
  }
1630
+ if (!isEmpty(internalType)) {
1631
+ var _this2$props$onIntern, _this2$props;
1632
+ (_this2$props$onIntern = (_this2$props = _this2.props).onInternalEvent) === null || _this2$props$onIntern === void 0 || _this2$props$onIntern.call(_this2$props, {
1633
+ type: internalType,
1634
+ value: selectedElement.toJS()
1635
+ });
1636
+ }
1604
1637
  };
1605
1638
  this.mouseEnterEvent = function (event) {
1606
1639
  if (_this2.props.state.mode !== MODE_DRAWING_ITEM_3D) return;
package/es/constants.js CHANGED
@@ -545,12 +545,6 @@ export var LABEL_COLOR = '#6E7191';
545
545
  export var TEXT_COLOR = '#000000';
546
546
  export var ACCENT_COLOR = '#AD00FF';
547
547
  export var BROWN_COLOR = '#624100';
548
- export var ROOM_SHAPE_MEASUREMENT_LINE_COLOR = '#455A64';
549
- export var ROOM_ELEMENT_MEASUREMENT_LINE_COLOR = '#B0BEC5';
550
- export var BASE_ITEM_MEASUREMENT_LINE_COLOR = '#0277BD';
551
- export var WALL_ITEM_MEASUREMENT_LINE_COLOR = '#00897B';
552
- export var DISTANCE_MEASUREMENT_LINE_COLOR = '#7B1FA2';
553
- export var DASH_LINE_COLOR = '#78909C';
554
548
  export var DEFAULT_FONT_FAMILY = 'Open Sans';
555
549
 
556
550
  // Download summary
@@ -643,6 +637,13 @@ export var ITEM_TYPE = {
643
637
  LIGHTING: 'lighting',
644
638
  FURNISHING: 'furnishing'
645
639
  };
640
+ export var PROJECT_SETTING_OPTION = {
641
+ UPDATE_CEIL_HEIGHT: UPDATE_CEIL_HEIGHT,
642
+ CHANGE_WALL_LENGTH_MEASURE: CHANGE_WALL_LENGTH_MEASURE,
643
+ CHANGE_BASE_CABINET_MEASURE: CHANGE_BASE_CABINET_MEASURE,
644
+ CHANGE_WALL_CABINET_MEASURE: CHANGE_WALL_CABINET_MEASURE,
645
+ CHANGE_WINDOW_DOOR_MEASURE: CHANGE_WINDOW_DOOR_MEASURE
646
+ };
646
647
 
647
648
  // direction type
648
649
  export var LEFT = 'Left';
@@ -665,4 +666,11 @@ export var EXTERNAL_EVENT_ZOOM_IN = 'EXTERNAL_EVENT_ZOOM_IN';
665
666
  export var EXTERNAL_EVENT_ZOOM_OUT = 'EXTERNAL_EVENT_ZOOM_OUT';
666
667
  export var EXTERNAL_EVENT_UNDO = 'EXTERNAL_EVENT_UNDO';
667
668
  export var EXTERNAL_EVENT_REDO = 'EXTERNAL_EVENT_REDO';
668
- export var EXTERNAL_EVENT_SET_MOLDING = 'EXTERNAL_EVENT_SET_MOLDING';
669
+ export var EXTERNAL_EVENT_SET_MOLDING = 'EXTERNAL_EVENT_SET_MOLDING';
670
+ export var EXTERNAL_EVENT_PROJECT_SETTING = 'EXTERNAL_EVENT_PROJECT_SETTING';
671
+
672
+ // internal event type
673
+ export var INTERNAL_EVENT_SELECT_ELEMENT = 'INTERNAL_EVENT_SELECT_ELEMENT';
674
+ export var INTERNAL_EVENT_DRAG_ELEMENT = 'INTERNAL_EVENT_DRAG_ELEMENT';
675
+ export var INTERNAL_EVENT_DRAW_ELEMENT = 'INTERNAL_EVENT_DRAW_ELEMENT';
676
+ export var INTERNAL_EVENT_ROTATE_ELEMENT = 'INTERNAL_EVENT_ROTATE_ELEMENT';