kitchen-simulator 2.0.31 → 2.0.41

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.
@@ -78,11 +78,13 @@ export function selectToolDrawingItem3D(sceneComponentType) {
78
78
  };
79
79
  }
80
80
  export function updateDrawingItem(layerID, x, y) {
81
+ var isInitialPos = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
81
82
  return {
82
83
  type: UPDATE_DRAWING_ITEM,
83
84
  layerID: layerID,
84
85
  x: x,
85
- y: y
86
+ y: y,
87
+ isInitialPos: isInitialPos
86
88
  };
87
89
  }
88
90
  export function endDrawingItem(layerID, x, y) {
@@ -1,4 +1,4 @@
1
- import { NEW_PROJECT, LOAD_PROJECT, SAVE_PROJECT, OPEN_CATALOG, SELECT_TOOL_EDIT, UNSELECT_ALL, SET_PROPERTIES, SET_ITEMS_ATTRIBUTES, SET_LINES_ATTRIBUTES, SET_HOLES_ATTRIBUTES, REMOVE, INVERT, UNDO, REDO, UNCREATE, PROJECT_RE_NAME, RECREATE, ROLLBACK, OPEN_PROJECT_CONFIGURATOR, SET_PROJECT_PROPERTIES, SET_PROJECT_ID, INIT_CATALOG, UPDATE_MOUSE_COORDS, UPDATE_ZOOM_SCALE, TOGGLE_SNAP, CHANGE_CATALOG_PAGE, GO_BACK_TO_CATALOG_PAGE, THROW_ERROR, THROW_WARNING, COPY_PROPERTIES, PASTE_PROPERTIES, PUSH_LAST_SELECTED_CATALOG_ELEMENT_TO_HISTORY, ALTERATE_STATE, SET_MODE, ADD_HORIZONTAL_GUIDE, ADD_VERTICAL_GUIDE, ADD_CIRCULAR_GUIDE, REMOVE_HORIZONTAL_GUIDE, REMOVE_VERTICAL_GUIDE, REMOVE_CIRCULAR_GUIDE, REMOVE_DRAWING_SUPPORT, SELECT_ALL, SET_STATE_PROPERTIES, SHIFT2DOFF, SHIFT2DON, SET_IS_HELP, SET_IS_CABINET_DRAWING, ADD_ELEMENT_TO_CATALOG } from "../constants";
1
+ import { NEW_PROJECT, LOAD_PROJECT, SAVE_PROJECT, OPEN_CATALOG, SELECT_TOOL_EDIT, UNSELECT_ALL, SET_PROPERTIES, SET_ITEMS_ATTRIBUTES, SET_LINES_ATTRIBUTES, SET_HOLES_ATTRIBUTES, REMOVE, INVERT, UNDO, REDO, UNCREATE, PROJECT_RE_NAME, RECREATE, ROLLBACK, OPEN_PROJECT_CONFIGURATOR, SET_PROJECT_PROPERTIES, SET_PROJECT_ID, INIT_CATALOG, UPDATE_MOUSE_COORDS, UPDATE_ZOOM_SCALE, TOGGLE_SNAP, CHANGE_CATALOG_PAGE, GO_BACK_TO_CATALOG_PAGE, THROW_ERROR, THROW_WARNING, COPY_PROPERTIES, PASTE_PROPERTIES, PUSH_LAST_SELECTED_CATALOG_ELEMENT_TO_HISTORY, ALTERATE_STATE, SET_MODE, ADD_HORIZONTAL_GUIDE, ADD_VERTICAL_GUIDE, ADD_CIRCULAR_GUIDE, REMOVE_HORIZONTAL_GUIDE, REMOVE_VERTICAL_GUIDE, REMOVE_CIRCULAR_GUIDE, REMOVE_DRAWING_SUPPORT, SELECT_ALL, SET_STATE_PROPERTIES, SHIFT2DOFF, SHIFT2DON, SET_IS_HELP, SET_IS_CABINET_DRAWING, ADD_ELEMENT_TO_CATALOG, CREATE_ROOM_WITH_SHAPE } from "../constants";
2
2
  export function setIsHelp(isHelp) {
3
3
  return {
4
4
  type: SET_IS_HELP,
@@ -285,4 +285,12 @@ export function selectAll() {
285
285
  type: SELECT_ALL,
286
286
  value: value
287
287
  };
288
+ }
289
+ export function createRoomWithShape(roomShapeType, width, height) {
290
+ return {
291
+ type: CREATE_ROOM_WITH_SHAPE,
292
+ width: width,
293
+ height: height,
294
+ roomShapeType: roomShapeType
295
+ };
288
296
  }
@@ -76,7 +76,8 @@ export function createArea(element, layer, scene, textures) {
76
76
  color = SharedStyle.AREA_MESH_COLOR.unselected;
77
77
  }
78
78
  if (texture.uri === undefined || texture.uri == '') {
79
- texture.uri = layer.floorStyle.uri;
79
+ // @todo THIS IS A TEMPORARY FIX TO HAVE A DEFAULT FLOOR TEXTURE
80
+ texture.uri = layer.floorStyle.uri || 'https://media.test.diydesignspace.com/uploads/CountTop/202203162950_2/texture/oak-barcelona-s.jpg';
80
81
  }
81
82
  var shape = new Shape();
82
83
  shape.moveTo(vertices[0].x, vertices[0].y);
@@ -995,6 +995,8 @@ export function render3DItem(element, layer, scene, sizeinfo, structure_json, is
995
995
  try {
996
996
  counterTop = counterTop.toJS();
997
997
  } catch (error) {
998
+ //@todo THIS IS A TEMPORARY FIX FOR COUNTERTOP TEXTURE UNDEFINED ISSUE
999
+ counterTop.uri = 'https://media.test.diydesignspace.com/uploads/CountTop/202105074107_5/texture/Unique_Calcatta_texture.jpg';
998
1000
  console.log(error);
999
1001
  }
1000
1002
  }
package/es/class/item.js CHANGED
@@ -29,6 +29,7 @@ var Item = /*#__PURE__*/function () {
29
29
  key: "create",
30
30
  value: function create(state, layerID, type, x, y, width, height, rotation, isDuplication) {
31
31
  var molding = arguments.length > 9 && arguments[9] !== undefined ? arguments[9] : [];
32
+ var isInitialPos = arguments.length > 10 && arguments[10] !== undefined ? arguments[10] : false;
32
33
  var itemID = IDBroker.acquireID();
33
34
  var item = state.catalog.factoryElement(type, {
34
35
  id: itemID,
@@ -45,7 +46,8 @@ var Item = /*#__PURE__*/function () {
45
46
  x: x,
46
47
  y: y,
47
48
  rotation: rotation,
48
- isDuplication: isDuplication
49
+ isDuplication: isDuplication,
50
+ isInitialPos: isInitialPos ? isInitialPos : false
49
51
  }, null, state);
50
52
  if (item.category === 'cabinet') {
51
53
  var _state$doorStyle;
@@ -588,13 +590,15 @@ var Item = /*#__PURE__*/function () {
588
590
  }, {
589
591
  key: "updateDrawingItem",
590
592
  value: function updateDrawingItem(state, layerID, x, y) {
593
+ var isInitialPos = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
591
594
  if (state.hasIn(['drawingSupport', 'currentID'])) {
592
595
  var mode = state.get('mode');
593
596
  if ([MODE_DRAWING_ITEM_3D].includes(mode)) {
594
597
  state = state.updateIn(['scene', 'layers', layerID, 'items', state.getIn(['drawingSupport', 'currentID'])], function (item) {
595
598
  return item && item.merge({
596
599
  x: x,
597
- y: y
600
+ y: y,
601
+ isInitialPos: isInitialPos ? isInitialPos : false
598
602
  });
599
603
  });
600
604
  state = state.merge({
@@ -608,12 +612,13 @@ var Item = /*#__PURE__*/function () {
608
612
  state = state.updateIn(['scene', 'layers', layerID, 'items', state.getIn(['drawingSupport', 'currentID'])], function (item) {
609
613
  return item && item.merge({
610
614
  x: x,
611
- y: y
615
+ y: y,
616
+ isInitialPos: isInitialPos ? isInitialPos : false
612
617
  });
613
618
  });
614
619
  }
615
620
  } else {
616
- var _this$create5 = this.create(state, layerID, state.getIn(['drawingSupport', 'type']), x, y, 200, 100, 0, false),
621
+ var _this$create5 = this.create(state, layerID, state.getIn(['drawingSupport', 'type']), x, y, 200, 100, 0, false, [], isInitialPos),
617
622
  stateI = _this$create5.updatedState,
618
623
  item = _this$create5.item;
619
624
  if (item === null) {
@@ -649,7 +654,8 @@ var Item = /*#__PURE__*/function () {
649
654
  // tY = tY > 500 ? 500 : tY < 0 ? 0 : tY;
650
655
  item = item.merge({
651
656
  x: x,
652
- y: y
657
+ y: y,
658
+ isInitialPos: false
653
659
  });
654
660
  state = state.merge({
655
661
  scene: scene.mergeIn(['layers', layerID, 'items', itemID], item)
@@ -663,8 +669,8 @@ var Item = /*#__PURE__*/function () {
663
669
  }, {
664
670
  key: "endDrawingItem",
665
671
  value: function endDrawingItem(state, layerID, x, y) {
666
- var catalog = state.catalog;
667
- state = this.updateDrawingItem(state, layerID, x, y, catalog).updatedState;
672
+ // let catalog = state.catalog;
673
+ state = this.updateDrawingItem(state, layerID, x, y).updatedState;
668
674
  state = Layer.unselectAll(state, layerID).updatedState;
669
675
  var popup = state.get('popup');
670
676
  state = state.merge({
@@ -747,7 +753,8 @@ var Item = /*#__PURE__*/function () {
747
753
  tY = tY > scene.height ? scene.height : tY < 0 ? 0 : tY;
748
754
  item = item.merge({
749
755
  x: tX,
750
- y: tY
756
+ y: tY,
757
+ isInitialPos: false
751
758
  });
752
759
  state = state.merge({
753
760
  scene: scene.mergeIn(['layers', layerID, 'items', itemID], item)
@@ -10,7 +10,8 @@ import { State, Catalog, Scene, safeLoadMapList, CatalogElement } from "../model
10
10
  import { GeometryUtils, history } from "../utils/export";
11
11
  import { Layer, Group, Line, Hole, Item, Area, HorizontalGuide, VerticalGuide } from "../class/export";
12
12
  import * as viewer2DActions from "../actions/viewer2d-actions";
13
- import { isEmpty } from "../utils/helper";
13
+ import { centering2D, isEmpty } from "../utils/helper";
14
+ import { convert } from "../utils/convert-units-lite";
14
15
  var Project = /*#__PURE__*/function () {
15
16
  function Project() {
16
17
  _classCallCheck(this, Project);
@@ -822,6 +823,97 @@ var Project = /*#__PURE__*/function () {
822
823
  updatedState: state
823
824
  };
824
825
  }
826
+ }, {
827
+ key: "createRoomWithShape",
828
+ value: function createRoomWithShape(state, roomShapeType, width, height) {
829
+ var catalog = state.catalog;
830
+ state = this.newProject(state).updatedState;
831
+ state = state.merge({
832
+ catalog: catalog
833
+ });
834
+ var _viewer2D = state.viewer2D;
835
+ var viewer = _viewer2D.toJS();
836
+ width = convert(width).from('in').to('cm');
837
+ height = convert(height).from('in').to('cm');
838
+ var layerID = state.scene.selectedLayer;
839
+ if (isEmpty(viewer)) return {
840
+ updatedState: state
841
+ };
842
+ var halfWidth = width / 2;
843
+ var halfHeight = height / 2;
844
+ var viewerWidth = viewer.SVGWidth;
845
+ var viewerHeight = viewer.SVGHeight;
846
+ var centerPos = {
847
+ x: viewerWidth / 2,
848
+ y: viewerHeight / 2
849
+ };
850
+ var vtLB = {
851
+ x: centerPos.x - halfWidth,
852
+ y: centerPos.y - halfHeight
853
+ };
854
+ var vtRB = {
855
+ x: centerPos.x + halfWidth,
856
+ y: centerPos.y - halfHeight
857
+ };
858
+ var vtRT = {
859
+ x: centerPos.x + halfWidth,
860
+ y: centerPos.y + halfHeight
861
+ };
862
+ var vtLT = {
863
+ x: centerPos.x - halfWidth,
864
+ y: centerPos.y + halfHeight
865
+ };
866
+ var vertices = [];
867
+ switch (roomShapeType) {
868
+ case 'rectangle':
869
+ vertices = [vtLB, vtLT, vtRT, vtRB];
870
+ break;
871
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_RIGHT_BOTTOM:
872
+ vertices = [vtLB, vtRB, vtRT];
873
+ break;
874
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_RIGHT_TOP:
875
+ vertices = [vtRB, vtRT, vtLT];
876
+ break;
877
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_LEFT_TOP:
878
+ vertices = [vtRT, vtLT, vtLB];
879
+ break;
880
+ case constants.ROOM_SHAPE_TYPE.TWO_WALLS_LEFT_BOTTOM:
881
+ vertices = [vtLT, vtLB, vtRB];
882
+ break;
883
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_LEFT_TOP_RIGHT:
884
+ vertices = [vtRB, vtRT, vtLT, vtLB];
885
+ break;
886
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_TOP_RIGHT_BOTTOM:
887
+ vertices = [vtLB, vtRB, vtRT, vtLT];
888
+ break;
889
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_RIGHT_BOTTOM_LEFT:
890
+ vertices = [vtLT, vtLB, vtRB, vtRT];
891
+ break;
892
+ case constants.ROOM_SHAPE_TYPE.THREE_WALLS_BOTTOM_LEFT_TOP:
893
+ vertices = [vtRT, vtLT, vtLB, vtRB];
894
+ break;
895
+ }
896
+ for (var i = 0; i < vertices.length - 1; i++) {
897
+ state = Line.create(state, layerID, 'wall', vertices[i].x, vertices[i].y, vertices[i + 1].x, vertices[i + 1].y).updatedState;
898
+ }
899
+ if (roomShapeType === constants.ROOM_SHAPE_TYPE.RECTANGLE) {
900
+ state = Line.create(state, layerID, 'wall', vertices[vertices.length - 1].x, vertices[vertices.length - 1].y, vertices[0].x, vertices[0].y).updatedState;
901
+ }
902
+ var layer = state.getIn(['scene', 'layers', layerID]);
903
+ var lines = layer.getIn(['lines']).toJS();
904
+ var drawingInfo = {};
905
+ var lineKey = Object.keys(lines);
906
+ for (var _i = 0; _i < lineKey.length; _i++) {
907
+ if (!isEmpty(lineKey)) {
908
+ drawingInfo.drawingLine = layer.getIn(['lines', lineKey[_i]]);
909
+ }
910
+ state = Layer.detectAndUpdateAreas(state, layerID, drawingInfo).updatedState;
911
+ }
912
+ state = centering2D(state);
913
+ return {
914
+ updatedState: state
915
+ };
916
+ }
825
917
  }]);
826
918
  }();
827
919
  export { Project as default };
@@ -783,17 +783,13 @@ export default function Viewer2D(_ref, _ref2) {
783
783
  return;
784
784
  }
785
785
  }
786
- if (mode === constants.MODE_DRAWING_ITEM) {
787
- endPoint.x = x;
788
- endPoint.y = y;
789
- }
786
+ mouseDownPoint = {
787
+ x: x,
788
+ y: y
789
+ };
790
790
  if (mode === constants.MODE_IDLE) {
791
791
  var elementData = extractElementData(event.target);
792
792
  if (!elementData) return;
793
- mouseDownPoint = {
794
- x: x,
795
- y: y
796
- };
797
793
  if (sCount < 2) {
798
794
  switch (elementData.prototype) {
799
795
  case 'lines':
@@ -858,6 +854,7 @@ export default function Viewer2D(_ref, _ref2) {
858
854
  var _mapCursorPosition3 = mapCursorPosition(viewerEvent),
859
855
  x = _mapCursorPosition3.x,
860
856
  y = _mapCursorPosition3.y;
857
+ var draggingDistance = Math.sqrt((x - mouseDownPoint.x) * (x - mouseDownPoint.x) + (y - mouseDownPoint.y) * (y - mouseDownPoint.y));
861
858
  var vertices = state.getIn(['scene', 'layers', layerID, 'vertices']).toJS();
862
859
  var lines = state.getIn(['scene', 'layers', layerID, 'lines']).toJS();
863
860
  var elementData = extractElementData(event.target);
@@ -1233,7 +1230,10 @@ export default function Viewer2D(_ref, _ref2) {
1233
1230
  holesActions.endDrawingHole(layerID, x, y);
1234
1231
  break;
1235
1232
  case constants.MODE_DRAWING_ITEM:
1236
- itemsActions.endDrawingItem(layerID, endPoint.x, endPoint.y);
1233
+ {
1234
+ var itemData = state.getIn(['scene', 'layers', layerID, elementData === null || elementData === void 0 ? void 0 : elementData.prototype, elementData === null || elementData === void 0 ? void 0 : elementData.id]);
1235
+ itemsActions.endDrawingItem(layerID, itemData.isInitialPos ? itemData.x : endPoint.x, itemData.isInitialPos ? itemData.y : endPoint.y);
1236
+ }
1237
1237
  break;
1238
1238
  case constants.MODE_DRAGGING_LINE:
1239
1239
  linesActions.endDraggingLine(x, y, relatedLines, state.snapMask);
@@ -1256,23 +1256,18 @@ export default function Viewer2D(_ref, _ref2) {
1256
1256
  }
1257
1257
  if (internalType) {
1258
1258
  var _currentObject = null;
1259
- var draggingDistance = Math.sqrt((x - mouseDownPoint.x) * (x - mouseDownPoint.x) + (y - mouseDownPoint.y) * (y - mouseDownPoint.y));
1260
1259
  if (internalType === INTERNAL_EVENT_SELECT_ELEMENT || internalType === constants.INTERNAL_EVENT_REPLACE_CABINET) {
1260
+ var _currentObject2;
1261
1261
  _currentObject = state.getIn(['scene', 'layers', layerID, elementData === null || elementData === void 0 ? void 0 : elementData.prototype, elementData === null || elementData === void 0 ? void 0 : elementData.id]);
1262
- // if (
1263
- // internalType === INTERNAL_EVENT_SELECT_ELEMENT &&
1264
- // currentObject?.prototype === 'items' &&
1265
- // draggingDistance > constants.EPSILON
1266
- // )
1267
- // internalType = INTERNAL_EVENT_DRAG_ELEMENT;
1262
+ if (internalType === INTERNAL_EVENT_SELECT_ELEMENT && ((_currentObject2 = _currentObject) === null || _currentObject2 === void 0 ? void 0 : _currentObject2.prototype) === 'items' && draggingDistance > constants.EPSILON) internalType = INTERNAL_EVENT_DRAG_ELEMENT;
1268
1263
  } else if (draggingDistance > constants.EPSILON) {
1269
1264
  var elementID = state.getIn(['scene', 'layers', layerID, 'selected', elementPrototype]).first();
1270
1265
  _currentObject = state.getIn(['scene', 'layers', layerID, elementPrototype, elementID]);
1271
1266
  }
1272
1267
  if (_currentObject) {
1273
- var _currentObject2, _currentObject3, _currentObject4;
1274
- var payload = (_currentObject2 = _currentObject) === null || _currentObject2 === void 0 ? void 0 : _currentObject2.toJS();
1275
- if (((_currentObject3 = _currentObject) === null || _currentObject3 === void 0 ? void 0 : _currentObject3.prototype) === 'lines') {
1268
+ var _currentObject3, _currentObject4, _currentObject5;
1269
+ var payload = (_currentObject3 = _currentObject) === null || _currentObject3 === void 0 ? void 0 : _currentObject3.toJS();
1270
+ if (((_currentObject4 = _currentObject) === null || _currentObject4 === void 0 ? void 0 : _currentObject4.prototype) === 'lines') {
1276
1271
  // caculating length of selected line//
1277
1272
  var v_a = layer.vertices.get(_currentObject.vertices.get(0));
1278
1273
  var v_b = layer.vertices.get(_currentObject.vertices.get(1));
@@ -1280,7 +1275,7 @@ export default function Viewer2D(_ref, _ref2) {
1280
1275
  var _length3 = convert(distance).from('cm').to('in');
1281
1276
  payload.length = _length3;
1282
1277
  //////////////////////////////////////
1283
- } else if (((_currentObject4 = _currentObject) === null || _currentObject4 === void 0 ? void 0 : _currentObject4.prototype) === 'items') {
1278
+ } else if (((_currentObject5 = _currentObject) === null || _currentObject5 === void 0 ? void 0 : _currentObject5.prototype) === 'items') {
1284
1279
  // check this cabinet has warning box
1285
1280
  payload.isWarning = isWarningItem(_currentObject);
1286
1281
  }
package/es/constants.js CHANGED
@@ -55,6 +55,7 @@ export var REMOVE_CIRCULAR_GUIDE = 'REMOVE_CIRCULAR_GUIDE';
55
55
  export var REMOVE_DRAWING_SUPPORT = 'REMOVE_DRAWING_SUPPORT';
56
56
  export var SET_IS_HELP = 'SET_IS_HELP';
57
57
  export var SET_IS_CABINET_DRAWING = 'SET_IS_CABINET_DRAWING';
58
+ export var CREATE_ROOM_WITH_SHAPE = 'CREATE_ROOM_WITH_SHAPE';
58
59
 
59
60
  // ACTIONS viewer2D
60
61
  export var SELECT_TOOL_ZOOM_IN = 'SELECT_TOOL_ZOOM_IN';
@@ -244,7 +245,8 @@ export var PROJECT_ACTIONS = {
244
245
  SHIFT2DOFF: SHIFT2DOFF,
245
246
  SHIFT2DON: SHIFT2DON,
246
247
  SET_IS_HELP: SET_IS_HELP,
247
- SET_IS_CABINET_DRAWING: SET_IS_CABINET_DRAWING
248
+ SET_IS_CABINET_DRAWING: SET_IS_CABINET_DRAWING,
249
+ CREATE_ROOM_WITH_SHAPE: CREATE_ROOM_WITH_SHAPE
248
250
  };
249
251
  export var VIEWER2D_ACTIONS = {
250
252
  SELECT_TOOL_ZOOM_IN: SELECT_TOOL_ZOOM_IN,
@@ -654,11 +656,11 @@ export var HOLE_NAMES = {
654
656
  WINDOW_CLEAR: 'Window',
655
657
  WINDOW_CROSS: 'Cross Window',
656
658
  WINDOW_DOUBLE_HUNG: 'Double Hung Window',
657
- WINDOW_VERTICAL: 'Vertical Window',
658
- DOOR_CLOSET: 'Closet Door',
659
- DOOR_EXTERIOR: 'Exterior Door',
660
- DOOR_INTERIOR: 'Interior Door',
661
- DOOR_SLIDING: 'Sliding Door',
659
+ WINDOW_VERTICAL: 'window-vertical',
660
+ DOOR_CLOSET: 'Closet',
661
+ DOOR_EXTERIOR: 'Exterior',
662
+ DOOR_INTERIOR: 'Interior',
663
+ DOOR_SLIDING: 'Sliding',
662
664
  DOOR_FRAMED: 'Framed Doorway',
663
665
  DOOR_FRAMELESS: 'FrameLess Doorway'
664
666
  };
@@ -735,4 +737,17 @@ export var INTERNAL_EVENT_SELECT_ELEMENT = 'INTERNAL_EVENT_SELECT_ELEMENT';
735
737
  export var INTERNAL_EVENT_DRAG_ELEMENT = 'INTERNAL_EVENT_DRAG_ELEMENT';
736
738
  export var INTERNAL_EVENT_DRAW_ELEMENT = 'INTERNAL_EVENT_DRAW_ELEMENT';
737
739
  export var INTERNAL_EVENT_ROTATE_ELEMENT = 'INTERNAL_EVENT_ROTATE_ELEMENT';
738
- export var INTERNAL_EVENT_REPLACE_CABINET = 'INTERNAL_EVENT_REPLACE_CABINET';
740
+ export var INTERNAL_EVENT_REPLACE_CABINET = 'INTERNAL_EVENT_REPLACE_CABINET';
741
+
742
+ // room shape type
743
+ export var ROOM_SHAPE_TYPE = {
744
+ RECTANGLE: 'rectangle',
745
+ TWO_WALLS_LEFT_TOP: '2wLeftTop',
746
+ TWO_WALLS_RIGHT_TOP: '2wRightTop',
747
+ TWO_WALLS_LEFT_BOTTOM: '2wLeftBottom',
748
+ TWO_WALLS_RIGHT_BOTTOM: '2wRightBottom',
749
+ THREE_WALLS_LEFT_TOP_RIGHT: '3wLeftTopRight',
750
+ THREE_WALLS_TOP_RIGHT_BOTTOM: '3wTopRightBottom',
751
+ THREE_WALLS_RIGHT_BOTTOM_LEFT: '3wRightBottomLeft',
752
+ THREE_WALLS_BOTTOM_LEFT_TOP: '3wBottomLeftTop'
753
+ };
@@ -9,6 +9,7 @@ import mockProps from "./mocks/mockProps.json";
9
9
  import cabinetPaylod from "./mocks/cabinetPayload2.json";
10
10
  import appliancePaylod from "./mocks/appliancePayload.json";
11
11
  import doorStylePaylod2 from "./mocks/doorStylePayload2.json";
12
+ import roomShapePayload from "./mocks/roomShapePayload.json";
12
13
  import itemCDSPayload from "./mocks/itemCDSPayload.json";
13
14
  import lightingPayload from "./mocks/lightingPayload.json";
14
15
  import furnishingPayload from "./mocks/furnishingPayload.json";
@@ -507,7 +508,16 @@ function WorkSpace(props) {
507
508
  };
508
509
  setExternalEvent(evt);
509
510
  }
510
- }, "Replace cabinet to B12")), /*#__PURE__*/React.createElement(LiteRenderer, {
511
+ }, "Replace cabinet to B12"), /*#__PURE__*/React.createElement(Button, {
512
+ actionType: "danger",
513
+ onClick: function onClick() {
514
+ var evt = {
515
+ type: EXTERNAL_EVENT_ADD_ROOM_SHAPE,
516
+ payload: roomShapePayload
517
+ };
518
+ setExternalEvent(evt);
519
+ }
520
+ }, "Add room shape from width, height")), /*#__PURE__*/React.createElement(LiteRenderer, {
511
521
  width: props.width,
512
522
  height: props.height,
513
523
  configData: mockProps.configData,
package/es/models.js CHANGED
@@ -39,7 +39,7 @@ export var DefaultGrids = new Map({
39
39
  type: 'horizontal-streak',
40
40
  properties: {
41
41
  step: 30,
42
- colors: ['rgb(169, 183, 223)']
42
+ colors: ['rgb(115, 125, 153)']
43
43
  }
44
44
  }),
45
45
  v1: new Grid({
@@ -199,6 +199,8 @@ export var Item = /*#__PURE__*/function (_Record7) {
199
199
  uri: ''
200
200
  },
201
201
  molding: [],
202
+ isInitialPos: false,
203
+ //current {x,y} is the initial position from host?
202
204
  backsplashVisible: false,
203
205
  applianceMaterial: {
204
206
  roughness: 0.4,
@@ -32,7 +32,7 @@ export default function (state, action) {
32
32
  case REPLACE_ITEM:
33
33
  return Item.replaceItem(state, action.selectedPos, action.currentObject, action.selectedObject).updatedState;
34
34
  case UPDATE_DRAWING_ITEM:
35
- return Item.updateDrawingItem(state, action.layerID, action.x, action.y).updatedState;
35
+ return Item.updateDrawingItem(state, action.layerID, action.x, action.y, action.isInitialPos).updatedState;
36
36
  case END_DRAWING_ITEM:
37
37
  state = state.merge({
38
38
  sceneHistory: history.historyPush(state.sceneHistory, state.scene)
@@ -1,5 +1,5 @@
1
1
  import { history } from "../utils/export";
2
- import { LOAD_PROJECT, NEW_PROJECT, OPEN_CATALOG, SELECT_TOOL_EDIT, MODE_IDLE, UNSELECT_ALL, SELECT_ALL, SET_PROPERTIES, SET_ITEMS_ATTRIBUTES, SET_LINES_ATTRIBUTES, SET_HOLES_ATTRIBUTES, REMOVE, INVERT, UNDO, REDO, RECREATE, UNCREATE, PROJECT_RE_NAME, ROLLBACK, SET_PROJECT_PROPERTIES, SET_PROJECT_ID, OPEN_PROJECT_CONFIGURATOR, INIT_CATALOG, UPDATE_MOUSE_COORDS, UPDATE_ZOOM_SCALE, TOGGLE_SNAP, CHANGE_CATALOG_PAGE, GO_BACK_TO_CATALOG_PAGE, THROW_ERROR, THROW_WARNING, COPY_PROPERTIES, PASTE_PROPERTIES, PUSH_LAST_SELECTED_CATALOG_ELEMENT_TO_HISTORY, ALTERATE_STATE, SET_MODE, ADD_HORIZONTAL_GUIDE, ADD_VERTICAL_GUIDE, ADD_CIRCULAR_GUIDE, REMOVE_HORIZONTAL_GUIDE, REMOVE_VERTICAL_GUIDE, REMOVE_CIRCULAR_GUIDE, REMOVE_DRAWING_SUPPORT, SET_STATE_PROPERTIES, SHIFT2DON, SHIFT2DOFF, MODE_DRAWING_LINE, SET_IS_HELP, SET_IS_CABINET_DRAWING, ADD_ELEMENT_TO_CATALOG } from "../constants";
2
+ import { LOAD_PROJECT, NEW_PROJECT, OPEN_CATALOG, SELECT_TOOL_EDIT, MODE_IDLE, UNSELECT_ALL, SELECT_ALL, SET_PROPERTIES, SET_ITEMS_ATTRIBUTES, SET_LINES_ATTRIBUTES, SET_HOLES_ATTRIBUTES, REMOVE, INVERT, UNDO, REDO, RECREATE, UNCREATE, PROJECT_RE_NAME, ROLLBACK, SET_PROJECT_PROPERTIES, SET_PROJECT_ID, OPEN_PROJECT_CONFIGURATOR, INIT_CATALOG, UPDATE_MOUSE_COORDS, UPDATE_ZOOM_SCALE, TOGGLE_SNAP, CHANGE_CATALOG_PAGE, GO_BACK_TO_CATALOG_PAGE, THROW_ERROR, THROW_WARNING, COPY_PROPERTIES, PASTE_PROPERTIES, PUSH_LAST_SELECTED_CATALOG_ELEMENT_TO_HISTORY, ALTERATE_STATE, SET_MODE, ADD_HORIZONTAL_GUIDE, ADD_VERTICAL_GUIDE, ADD_CIRCULAR_GUIDE, REMOVE_HORIZONTAL_GUIDE, REMOVE_VERTICAL_GUIDE, REMOVE_CIRCULAR_GUIDE, REMOVE_DRAWING_SUPPORT, SET_STATE_PROPERTIES, SHIFT2DON, SHIFT2DOFF, MODE_DRAWING_LINE, SET_IS_HELP, SET_IS_CABINET_DRAWING, ADD_ELEMENT_TO_CATALOG, CREATE_ROOM_WITH_SHAPE } from "../constants";
3
3
  import { Project } from "../class/export";
4
4
  export default function (state, action) {
5
5
  switch (action.type) {
@@ -125,6 +125,8 @@ export default function (state, action) {
125
125
  return Project.setIsHelp(state, action.isHelp).updatedState;
126
126
  case SET_IS_CABINET_DRAWING:
127
127
  return Project.setIsCabinetDrawing(state, action.isCabinetDrawing).updatedState;
128
+ case CREATE_ROOM_WITH_SHAPE:
129
+ return Project.createRoomWithShape(state, action.roomShapeType, action.width, action.height).updatedState;
128
130
  default:
129
131
  return state;
130
132
  }
@@ -3,7 +3,7 @@ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
3
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
4
4
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
5
5
  import { HDRCubeTextureLoader } from 'three/examples/jsm/loaders/HDRCubeTextureLoader.js';
6
- import { ANIMATE_OBJECT_OPEN_DOOR_ROTATION_UNIT, ANIMATE_STEP_MAX, DECIMAL_PLACES_2, HDR_URLS, MODE_ELEVATION_VIEW } from "../constants";
6
+ import { ANIMATE_OBJECT_OPEN_DOOR_ROTATION_UNIT, ANIMATE_STEP_MAX, DECIMAL_PLACES_2, HDR_URLS, MAX_ZOOM_IN_SCALE, MODE_ELEVATION_VIEW, ZOOM_VARIABLE } from "../constants";
7
7
  import * as Three from 'three';
8
8
  import { returnReplaceableDeepSearchType } from "./../components/viewer2d/utils";
9
9
  import { convert } from "./convert-units-lite";
@@ -331,4 +331,69 @@ export function isImmutable(maybeImmutable) {
331
331
  }
332
332
  export function debugUtil() {
333
333
  return new Date();
334
+ }
335
+ export var compareSVGRect = function compareSVGRect(value) {
336
+ return value.e <= 10 && value.e + value.a * value.SVGWidth + 10 >= value.viewerWidth && value.f <= 80 && value.f + value.d * value.SVGHeight + 10 >= value.viewerHeight ? true : false;
337
+ };
338
+ export var updateViwer2D = function updateViwer2D(value) {
339
+ var viewer2DActions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
340
+ var _zoomValue = parseInt((value.a - 0.5) / ZOOM_VARIABLE);
341
+ if (_zoomValue > MAX_ZOOM_IN_SCALE) return;
342
+ if (_zoomValue < 0 || Number.isNaN(_zoomValue)) return;
343
+
344
+ // modify e, f to fit to SVG
345
+ while (!(value.e <= 10)) {
346
+ value.e -= 0.1;
347
+ }
348
+ while (!(value.e + value.a * value.SVGWidth + 10 >= value.viewerWidth)) {
349
+ value.e += 0.1;
350
+ }
351
+ while (!(value.f <= 80)) {
352
+ value.f -= 0.1;
353
+ }
354
+ while (!(value.f + value.a * value.SVGHeight + 10 >= value.viewerHeight)) {
355
+ value.f += 0.1;
356
+ }
357
+ if (viewer2DActions && compareSVGRect(value)) viewer2DActions.updateCameraView(value);
358
+ };
359
+ export function centering2D(state) {
360
+ var viewer2DActions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
361
+ // calculate the bounding box of all elements in plan
362
+ var layer = state.scene.getIn(['layers', state.scene.selectedLayer]);
363
+ var bb = {
364
+ minX: Infinity,
365
+ maxX: -Infinity,
366
+ minY: Infinity,
367
+ maxY: -Infinity
368
+ };
369
+ bb = layer.vertices.reduce(function (pre, cur) {
370
+ pre.minX = Math.min(pre.minX, cur.x);
371
+ pre.maxX = Math.max(pre.maxX, cur.x);
372
+ pre.minY = Math.min(pre.minY, cur.y);
373
+ pre.maxY = Math.max(pre.maxY, cur.y);
374
+ return pre;
375
+ }, bb);
376
+ var w = bb.maxX - bb.minX;
377
+ var h = bb.maxY - bb.minY;
378
+
379
+ // calc scale and offset to fit view
380
+ var viewer = state.getIn(['viewer2D']).toJS();
381
+ if (w != 0 && Math.abs(w) != Infinity && h != 0 && Math.abs(h) != Infinity) {
382
+ // elements are exist && bounding box size > 0
383
+ viewer.a = viewer.viewerHeight < h ? viewer.viewerHeight / h : viewer.viewerHeight / h * 3 / 5 / ZOOM_VARIABLE > MAX_ZOOM_IN_SCALE ? viewer.viewerHeight / h * MAX_ZOOM_IN_SCALE / (viewer.viewerHeight / h / ZOOM_VARIABLE) : viewer.viewerHeight / h * 3 / 5;
384
+ viewer.d = viewer.a;
385
+ viewer.e = (viewer.viewerWidth - (bb.maxX + bb.minX) * viewer.a) / 2;
386
+ viewer.f = (viewer.viewerHeight - (bb.maxY + bb.minY) * viewer.a) / 2;
387
+ } else {
388
+ // there is no any element && bounding box size == 0
389
+ viewer.e = viewer.viewerWidth / 2 - viewer.SVGWidth / 2;
390
+ viewer.f = viewer.viewerHeight / 2 - viewer.SVGHeight / 2;
391
+ viewer.a = 0.99;
392
+ viewer.d = 0.99;
393
+ }
394
+ state = state.merge({
395
+ viewer2D: viewer
396
+ });
397
+ if (viewer2DActions) updateViwer2D(viewer, viewer2DActions);
398
+ return state;
334
399
  }