kitchen-simulator 4.4.0 → 4.4.2

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.
@@ -1410,10 +1410,9 @@ export default function Viewer2D(_ref, _ref2) {
1410
1410
  detectAutoPan: mode2DetectAutopan(mode),
1411
1411
  onMouseDown: onMouseDown,
1412
1412
  onMouseMove: onMouseMove,
1413
- onMouseUp: onMouseUp
1414
- // miniaturePosition="none"
1415
- // toolbarPosition="none"
1416
- ,
1413
+ onMouseUp: onMouseUp,
1414
+ miniaturePosition: "none",
1415
+ toolbarPosition: "none",
1417
1416
  detectPinchGesture: false,
1418
1417
  disableDoubleClickZoomWithToolAuto: true,
1419
1418
  ref: Viewer
@@ -9,7 +9,7 @@ import { disposeObject } from "./three-memory-cleaner";
9
9
  import { ANIMATE_STEP_MAX, ANIMATE_STEP_MIN, ARRAY_3D_MODES, ARROW_TEXT_BACKCOLOR, ARROW_TEXT_FONTFACE, ARROW_TEXT_FORECOLOR, BASE_CABINET_LAYOUTPOS, BOTTOM_MOLDING_LOCATION, DECIMAL_PLACES_2, DIFFERENT_VALUES_PATH_LENGTH, DISTANCE_EPSILON, EPSILON, MIDDLE_MOLDING_LOCATION, MODE_DRAGGING_ITEM_3D, MODE_DRAWING_ITEM_3D, MODE_IDLE, MODE_IDLE_3D, MODE_ROTATING_ITEM_3D, OBJTYPE_MESH, SHADE_DARK_PURPLE_COLOR, TOP_MOLDING_LOCATION, UNIT_CENTIMETER, UNIT_FOOT, UNIT_INCH, UNIT_METER, WALL_CABINET_LAYOUTPOS } from "../../constants";
10
10
  import { GeometryUtils, IDBroker, MoldingUtils } from "../../utils/export";
11
11
  import { convert } from "../../utils/convert-units-lite";
12
- import { calcDistancesFromItemToWalls, getSnappedWallLines, verticesDistance } from "../../utils/geometry";
12
+ import { calcDistancesFromItemToWalls, getLineSnapPointsOfItem, getSnappedWallLines, isOverlappedTwoItemsOnOneLine, pointsDistance, verticesDistance } from "../../utils/geometry";
13
13
  import * as GeomUtils from "../../catalog/utils/geom-utils";
14
14
  import { loadTexture } from "../../catalog/utils/item-loader";
15
15
  import { returnReplaceableDeepSearchType } from "../viewer2d/utils";
@@ -3035,13 +3035,23 @@ export function createBacksplash(item, layer, planData, scene) {
3035
3035
  */
3036
3036
  var altItems = [],
3037
3037
  flag = false;
3038
+ var D0 = {},
3039
+ D1 = {};
3038
3040
  wallItems.map(function (wallItem) {
3039
3041
  var _wallItem$itemInfo, _wallItem$itemInfo2;
3040
3042
  var altitude = (_wallItem$itemInfo = wallItem.itemInfo) === null || _wallItem$itemInfo === void 0 || (_wallItem$itemInfo = _wallItem$itemInfo.properties) === null || _wallItem$itemInfo === void 0 ? void 0 : _wallItem$itemInfo.get('altitude').get('_length');
3041
3043
  var altitudeUnit = ((_wallItem$itemInfo2 = wallItem.itemInfo) === null || _wallItem$itemInfo2 === void 0 || (_wallItem$itemInfo2 = _wallItem$itemInfo2.properties) === null || _wallItem$itemInfo2 === void 0 ? void 0 : _wallItem$itemInfo2.get('altitude').get('_unit')) || 'cm';
3042
3044
  if (!isEmpty(altitude) && !isEmpty(altitudeUnit)) {
3043
3045
  altitude = convert(altitude).from(altitudeUnit).to('cm');
3046
+ var altPoints = getLineSnapPointsOfItem(layer, curLine, wallItem);
3047
+ if (altPoints.length > 1) {
3048
+ D0 = altPoints[0];
3049
+ D1 = altPoints[1];
3050
+ }
3044
3051
  altItems.push({
3052
+ D0: D0,
3053
+ // D0, D1: item's snapped points with line
3054
+ D1: D1,
3045
3055
  x: wallItem.pos.x,
3046
3056
  width: wallItem.size.width,
3047
3057
  altitude: altitude
@@ -3049,10 +3059,29 @@ export function createBacksplash(item, layer, planData, scene) {
3049
3059
  }
3050
3060
  });
3051
3061
  layer.holes.map(function (hole) {
3052
- var _hole$properties, _hole$properties2;
3062
+ var _hole$properties, _hole$properties2, _layer$lines, _layer$vertices, _line$vertices, _layer$vertices2, _line$vertices2;
3053
3063
  var width = (_hole$properties = hole.properties) === null || _hole$properties === void 0 ? void 0 : _hole$properties.getIn(['width', 'length']);
3054
3064
  var altitude = (_hole$properties2 = hole.properties) === null || _hole$properties2 === void 0 ? void 0 : _hole$properties2.getIn(['altitude', 'length']);
3065
+ var line = (_layer$lines = layer.lines) === null || _layer$lines === void 0 ? void 0 : _layer$lines.get(curLine === null || curLine === void 0 ? void 0 : curLine.id);
3066
+ var v0 = (_layer$vertices = layer.vertices) === null || _layer$vertices === void 0 ? void 0 : _layer$vertices.get(line === null || line === void 0 || (_line$vertices = line.vertices) === null || _line$vertices === void 0 ? void 0 : _line$vertices.get(0));
3067
+ var v1 = (_layer$vertices2 = layer.vertices) === null || _layer$vertices2 === void 0 ? void 0 : _layer$vertices2.get(line === null || line === void 0 || (_line$vertices2 = line.vertices) === null || _line$vertices2 === void 0 ? void 0 : _line$vertices2.get(1));
3068
+ if (!isEmpty(v0) || !isEmpty(v1)) {
3069
+ var lineLength = pointsDistance(v0.x, v0.y, v1.x, v1.y);
3070
+ var disD0 = lineLength * hole.offset - width / 2;
3071
+ var disD1 = lineLength * hole.offset + width / 2;
3072
+ D0 = {
3073
+ x: v0.x + disD0 * Math.cos(hole.rotRad),
3074
+ y: v0.y + disD0 * Math.sin(hole.rotRad)
3075
+ };
3076
+ D1 = {
3077
+ x: v0.x + disD1 * Math.cos(hole.rotRad),
3078
+ y: v0.y + disD1 * Math.sin(hole.rotRad)
3079
+ };
3080
+ }
3055
3081
  if (!isEmpty(width) && !isEmpty(altitude) && hole.line === (curLine === null || curLine === void 0 ? void 0 : curLine.id)) altItems.push({
3082
+ D0: D0,
3083
+ // D0, D1: hole's two points
3084
+ D1: D1,
3056
3085
  x: hole.x,
3057
3086
  width: width,
3058
3087
  altitude: altitude
@@ -3061,7 +3090,7 @@ export function createBacksplash(item, layer, planData, scene) {
3061
3090
  if (altItems.length > 0) {
3062
3091
  depth = altItems[0].altitude;
3063
3092
  altItems.map(function (altItem) {
3064
- if (item.pos.x + item.size.width / 2 >= altItem.x - altItem.width / 2 && item.pos.x - item.size.width / 2 <= altItem.x + altItem.width / 2) {
3093
+ if (isOverlappedTwoItemsOnOneLine(layer, curLine, item, altItem)) {
3065
3094
  if (depth >= altItem.altitude) {
3066
3095
  depth = altItem.altitude;
3067
3096
  flag = true;
@@ -3171,9 +3200,9 @@ export function createBacksplash(item, layer, planData, scene) {
3171
3200
  }
3172
3201
  itemToSave.info.id = item.itemInfo.id;
3173
3202
  deleteSpecifiedMeshObjects('backsplash' + item.itemInfo.id);
3174
- if (Math.abs(item.rotRad % (Math.PI / 2)) < EPSILON) planData.plan.add(backsplash);
3203
+ if (Math.abs(item.rotRad % (Math.PI / 2)) < EPSILON || Math.abs(item.rotRad % (Math.PI / 2) - Math.PI / 2) < EPSILON) planData.plan.add(backsplash);
3175
3204
  backsplash.name = name;
3176
- backsplash.visible = item.itemInfo.get('backsplashVisible') && backsplashApplied && Math.abs(item.rotRad % (Math.PI / 2)) < EPSILON;
3205
+ backsplash.visible = item.itemInfo.get('backsplashVisible') && backsplashApplied && Math.abs(item.rotRad % (Math.PI / 2)) < EPSILON || Math.abs(item.rotRad % (Math.PI / 2) - Math.PI / 2) < EPSILON;
3177
3206
 
3178
3207
  // Save to scene graph
3179
3208
 
package/es/constants.js CHANGED
@@ -778,4 +778,6 @@ export var SKIN_SKU_BSV_48 = 'BSV48'; // 48" x 34.5" : For base cabinets back-to
778
778
  export var SKIN_SKU_WSV_1242 = 'WSV1242'; // 11.25" x 42" : For 12" deep wall cabinets
779
779
  export var SKIN_SKU_WSV_2442 = 'WSV2442'; // 23.25" x 42" : For 24" deep wall cabinets
780
780
  export var SKIN_SKU_WSV_2460 = 'WSV2460'; // Usually used for CT3DR or CT2DR SKUs + stacked wall cabinets
781
- export var SKIN_SKU_USV245325 = 'USV2453.25'; // 23.25" x 53.25" : For tall cabinets
781
+ export var SKIN_SKU_USV245325 = 'USV2453.25'; // 23.25" x 53.25" : For tall cabinets
782
+
783
+ export var DEFAULT_MOLDING_PIECE_LENGTH = 96; // in inch, 8 feet, standard length for molding pieces
@@ -2845,4 +2845,83 @@ export function getSnappedWallLines(item, layer, catalog) {
2845
2845
  }
2846
2846
  }
2847
2847
  return snappedWallLines;
2848
+ }
2849
+ export function getLineSnapPointsOfItem(layer, curLine, item) {
2850
+ var _layer$lines2, _layer$vertices4, _line$vertices3, _layer$vertices5, _line$vertices4;
2851
+ // V0
2852
+ // /|
2853
+ // D0 /|-----------|
2854
+ // /| |
2855
+ // /| Item | ====> get D0, D1
2856
+ // /| |
2857
+ // D1 /|-----------|
2858
+ // /|
2859
+ // get v0, v1 of line
2860
+ var line = (_layer$lines2 = layer.lines) === null || _layer$lines2 === void 0 ? void 0 : _layer$lines2.get(curLine === null || curLine === void 0 ? void 0 : curLine.id);
2861
+ var v0 = (_layer$vertices4 = layer.vertices) === null || _layer$vertices4 === void 0 ? void 0 : _layer$vertices4.get(line === null || line === void 0 || (_line$vertices3 = line.vertices) === null || _line$vertices3 === void 0 ? void 0 : _line$vertices3.get(0));
2862
+ var v1 = (_layer$vertices5 = layer.vertices) === null || _layer$vertices5 === void 0 ? void 0 : _layer$vertices5.get(line === null || line === void 0 || (_line$vertices4 = line.vertices) === null || _line$vertices4 === void 0 ? void 0 : _line$vertices4.get(1));
2863
+ var pointGroup = [];
2864
+ if (isEmpty(v0) || isEmpty(v1)) return pointGroup;
2865
+ var itemRect = item === null || item === void 0 ? void 0 : item.rect;
2866
+ if (!isEmpty(itemRect)) {
2867
+ for (var i = 0; i < itemRect.length; i++) {
2868
+ if (distancePointFromLineSegment(v0, v1, itemRect[i].x, itemRect[i].y) < EPSILON) {
2869
+ pointGroup.push(itemRect[i]);
2870
+ }
2871
+ }
2872
+ }
2873
+ return pointGroup;
2874
+ }
2875
+ export function isOverlappedTwoItemsOnOneLine(layer, curLine, srcItem, desItem) {
2876
+ var _layer$lines3, _layer$vertices6, _line$vertices5, _layer$vertices7, _line$vertices6, _S, _S2, _S3, _S4;
2877
+ if (isEmpty(layer) || isEmpty(curLine) || isEmpty(srcItem) || isEmpty(desItem) || isEmpty(desItem.D0) || isEmpty(desItem.D1)) return false;
2878
+ // get v0, v1 of line
2879
+ var line = (_layer$lines3 = layer.lines) === null || _layer$lines3 === void 0 ? void 0 : _layer$lines3.get(curLine === null || curLine === void 0 ? void 0 : curLine.id);
2880
+ var v0 = (_layer$vertices6 = layer.vertices) === null || _layer$vertices6 === void 0 ? void 0 : _layer$vertices6.get(line === null || line === void 0 || (_line$vertices5 = line.vertices) === null || _line$vertices5 === void 0 ? void 0 : _line$vertices5.get(0));
2881
+ var v1 = (_layer$vertices7 = layer.vertices) === null || _layer$vertices7 === void 0 ? void 0 : _layer$vertices7.get(line === null || line === void 0 || (_line$vertices6 = line.vertices) === null || _line$vertices6 === void 0 ? void 0 : _line$vertices6.get(1));
2882
+ var S0,
2883
+ S1,
2884
+ D0 = desItem === null || desItem === void 0 ? void 0 : desItem.D0,
2885
+ D1 = desItem === null || desItem === void 0 ? void 0 : desItem.D1;
2886
+ if (isEmpty(v0) || isEmpty(v1)) return false;
2887
+ // get distance from v0 to srcItem's S0, S1 and desItem(item or hole)'s D0, D1 are placed on line
2888
+ var srcPoints = getLineSnapPointsOfItem(layer, curLine, srcItem);
2889
+ if (srcPoints.length > 1) {
2890
+ S0 = srcPoints[0];
2891
+ S1 = srcPoints[1];
2892
+ }
2893
+ var disV0S0 = pointsDistance(v0.x, v0.y, (_S = S0) === null || _S === void 0 ? void 0 : _S.x, (_S2 = S0) === null || _S2 === void 0 ? void 0 : _S2.y);
2894
+ var disV0S1 = pointsDistance(v0.x, v0.y, (_S3 = S1) === null || _S3 === void 0 ? void 0 : _S3.x, (_S4 = S1) === null || _S4 === void 0 ? void 0 : _S4.y);
2895
+ var disV0D0 = pointsDistance(v0.x, v0.y, D0.x, D0.y);
2896
+ var disV0D1 = pointsDistance(v0.x, v0.y, D1.x, D1.y);
2897
+ // detect two items are overlapped
2898
+ var maxDisV0S = Math.max(disV0S0, disV0S1);
2899
+ var minDisV0S = Math.min(disV0S0, disV0S1);
2900
+ var maxDisV0D = Math.max(disV0D0, disV0D1);
2901
+ var minDisV0D = Math.min(disV0D0, disV0D1);
2902
+ if (maxDisV0S > maxDisV0D && maxDisV0D - minDisV0S > EPSILON) {
2903
+ // d0 s0 d1 s1 ===> maxDisV0S: v0s1, minDisV0S: v0s0, maxDisV0D: v0d1, minDisV0D: v0d0
2904
+ // v0 __________________________ v1
2905
+ // | | | |
2906
+ // | | | |
2907
+ // |__DI__|__| |
2908
+ // |__SI__|
2909
+ /////////////////////////////////////////
2910
+ // s0 d0 d1 s1 ===> maxDisV0S: v0s1, minDisV0S: v0s0, maxDisV0D: v0d1, minDisV0D: v0d0
2911
+ // v0 __________________________ v1
2912
+ // | | | |
2913
+ // | |__DI__| |
2914
+ // |_________SI_______|
2915
+ return true;
2916
+ } else if (minDisV0S < minDisV0D && maxDisV0S - minDisV0D > EPSILON) {
2917
+ // s0 d0 s1 d1 ===> maxDisV0S: v0s1, minDisV0S: v0s0, maxDisV0D: v0d1, minDisV0D: v0d0
2918
+ // v0 __________________________ v1
2919
+ // | | | |
2920
+ // | |__DI__|
2921
+ // |__SI_____|
2922
+ //
2923
+ return true;
2924
+ } else {
2925
+ return false;
2926
+ }
2848
2927
  }
@@ -6,7 +6,7 @@ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbol
6
6
  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; }
7
7
  import _regeneratorRuntime from "@babel/runtime/regenerator";
8
8
  import { Map } from 'immutable';
9
- import { EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_MOVE_PAN, MODE_IDLE, MODE_2D_PAN, EXTERNAL_EVENT_ADD_ITEM, ARRAY_3D_MODES, MODE_IDLE_3D, MODE_ELEVATION_VIEW, MODE_DRAWING_LINE, TOP, BOTTOM, LEFT, RIGHT, EXTERNAL_EVENT_NEW_PROJECT, EXTERNAL_EVENT_CHANGE_DOORSTYLE, EXTERNAL_EVENT_ADD_ROOM_SHAPE, EXTERNAL_EVENT_ZOOM_IN, EXTERNAL_EVENT_ZOOM_OUT, EXTERNAL_EVENT_UNDO, EXTERNAL_EVENT_REDO, EXTERNAL_EVENT_SET_MOLDING, EXTERNAL_EVENT_PROJECT_SETTING, PROJECT_SETTING_OPTION, EXTERNAL_EVENT_SYNC_SCENE, INTERNAL_EVENT_SYNC_SCENE, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, ATT_ITEM_POS, ATT_LINE_LENGTH, ATT_VERTEXT_ONE, ATT_VERTEXT_TWO, ATT_HOLE_OFFSET_A, ATT_HOLE_OFFSET_B, UNIT_CENTIMETER, UNIT_INCH, EXTERNAL_EVENT_UPDATE_PROPERTY, PROP_FLIP_DOOR_HANDLE, PROP_OPEN_DOORS, EXTERNAL_EVENT_LOAD_PROJECT, INTERNAL_EVENT_ITEMS_CATALOG, EXTERNAL_EVENT_ADD_HOLE, EXTERNAL_EVENT_CENTERING_2D, EXTERNAL_EVENT_DUPLICATE_ELEMENT, EXTERNAL_EVENT_DELETE_ELEMENT, ELEMENT_HOLE, ELEMENT_ITEM, ELEMENT_LINE, EXTERNAL_EVENT_REPLACE_CABINET, FINISHING_TYPE, EXTERNAL_EVENT_SET_FINISHING, EXTERNAL_EVENT_ROTATE_PAN, DOORSTYLE_SCOPE_SINGLE, DOORSTYLE_SCOPE_ALL, DOORSTYLE_SCOPE_MULTIPLE } from "../constants";
9
+ import { EXTERNAL_EVENT_ADD_WALL, EXTERNAL_EVENT_TOGGLE_TO_3D, EXTERNAL_EVENT_TOGGLE_TO_2D, EXTERNAL_EVENT_TOGGLE_TO_ELEVATION, EXTERNAL_EVENT_MOVE_PAN, MODE_IDLE, MODE_2D_PAN, EXTERNAL_EVENT_ADD_ITEM, ARRAY_3D_MODES, MODE_IDLE_3D, MODE_ELEVATION_VIEW, MODE_DRAWING_LINE, TOP, BOTTOM, LEFT, RIGHT, EXTERNAL_EVENT_NEW_PROJECT, EXTERNAL_EVENT_CHANGE_DOORSTYLE, EXTERNAL_EVENT_ADD_ROOM_SHAPE, EXTERNAL_EVENT_ZOOM_IN, EXTERNAL_EVENT_ZOOM_OUT, EXTERNAL_EVENT_UNDO, EXTERNAL_EVENT_REDO, EXTERNAL_EVENT_SET_MOLDING, EXTERNAL_EVENT_PROJECT_SETTING, PROJECT_SETTING_OPTION, EXTERNAL_EVENT_SYNC_SCENE, INTERNAL_EVENT_SYNC_SCENE, EXTERNAL_EVENT_UPDATE_ATTRIBUTE, ATT_ITEM_POS, ATT_LINE_LENGTH, ATT_VERTEXT_ONE, ATT_VERTEXT_TWO, ATT_HOLE_OFFSET_A, ATT_HOLE_OFFSET_B, UNIT_CENTIMETER, UNIT_INCH, EXTERNAL_EVENT_UPDATE_PROPERTY, PROP_FLIP_DOOR_HANDLE, PROP_OPEN_DOORS, EXTERNAL_EVENT_LOAD_PROJECT, INTERNAL_EVENT_ITEMS_CATALOG, EXTERNAL_EVENT_ADD_HOLE, EXTERNAL_EVENT_CENTERING_2D, EXTERNAL_EVENT_DUPLICATE_ELEMENT, EXTERNAL_EVENT_DELETE_ELEMENT, ELEMENT_HOLE, ELEMENT_ITEM, ELEMENT_LINE, EXTERNAL_EVENT_REPLACE_CABINET, FINISHING_TYPE, EXTERNAL_EVENT_SET_FINISHING, EXTERNAL_EVENT_ROTATE_PAN, DOORSTYLE_SCOPE_SINGLE, DOORSTYLE_SCOPE_ALL, DOORSTYLE_SCOPE_MULTIPLE, DEFAULT_MOLDING_PIECE_LENGTH } from "../constants";
10
10
  import { isEmpty, updateViwer2D, centering2D } from "./helper";
11
11
  import exporter from "../catalog/utils/exporter";
12
12
  import { render2DItem, render3DItem, render3DApplianceItem, render3DLightingItem } from "../catalog/utils/item-loader";
@@ -1212,7 +1212,7 @@ export function handleExternalEvent(_x0) {
1212
1212
  function _handleExternalEvent() {
1213
1213
  _handleExternalEvent = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee0(props) {
1214
1214
  var _evt$payload3, _evt$payload4;
1215
- var evt, state, layerId, layer, _evt$payload, _state$catalog, cdsItems, itemKeys, _loop6, i, newScene, tempState, _props$onInternalEven, sLineCnt, element, _state$viewer2D, _evt$payload$initialP, mouseX, mouseY, v2d, vPosX, vPosY, layerID, defaulTitle, _evt$payload5, doorStyle, itemCDS, applyScope, _evt$payload5$itemIds, itemIds, _layerId, allItems, targetItems, idSet, selectedItemIds, _cdsItems, _loop7, _i2, _props$onInternalEven2, _evt$payload6, roomShapeType, width, height, measurementUnit, _doorStyle, value, _value, _evt$payload7, moldingInfo, isGlobal, distElement, _distElement, _evt$payload8, option, _value2, _layerId2, _layer, _layer$getIn, selectedLines, selectedHoles, selectedItems, _i4, _i5, _i6, _evt$payload9, _evt$payload0, _evt$payload1, _evt$payload10, _layerID, _layer2, orginalItemInfo, originalItem, originalItemPos, replaceItem, _props$onInternalEven3, sceneData, currentTexture, _t5, _t6, _t7;
1215
+ var evt, state, layerId, layer, _evt$payload, _state$catalog, cdsItems, itemKeys, _loop6, i, newScene, tempState, _props$onInternalEven, sLineCnt, element, _state$viewer2D, _evt$payload$initialP, mouseX, mouseY, v2d, vPosX, vPosY, layerID, defaulTitle, _evt$payload5, doorStyle, itemCDS, applyScope, _evt$payload5$itemIds, itemIds, _layerId, allItems, targetItems, idSet, selectedItemIds, _cdsItems, _loop7, _i2, _props$onInternalEven2, _evt$payload6, roomShapeType, width, height, measurementUnit, _doorStyle, value, _value, _evt$payload7, moldingInfo, isGlobal, distElement, _distElement, _evt$payload8, option, _value2, _layerId2, _layer, _layer$getIn, selectedLines, selectedHoles, selectedItems, _i4, _i5, _i6, _evt$payload9, _evt$payload0, _evt$payload1, _evt$payload10, _layerID, _layer2, orginalItemInfo, originalItem, originalItemPos, replaceItem, _props$configData$mol, _props$configData, _props$configData$ski, _props$configData2, _props$onInternalEven3, sceneData, currentTexture, moldingPieceLength, skinPanelExclusionSKUs, _t5, _t6, _t7;
1216
1216
  return _regeneratorRuntime.wrap(function (_context11) {
1217
1217
  while (1) switch (_context11.prev = _context11.next) {
1218
1218
  case 0:
@@ -1607,10 +1607,12 @@ function _handleExternalEvent() {
1607
1607
  case 48:
1608
1608
  sceneData = state.scene.toJS(); // get molding data for "ReviewForQuote"
1609
1609
  currentTexture = layer.doorStyle !== null || layer.doorStyle !== undefined ? layer.doorStyle : props.state.doorStyle.toJS();
1610
- sceneData.layers[layerId].moldingData = getMoldingDataOfScene2(layer, props.catalog, currentTexture);
1610
+ moldingPieceLength = (_props$configData$mol = props === null || props === void 0 || (_props$configData = props.configData) === null || _props$configData === void 0 ? void 0 : _props$configData.moldingPieceLength) !== null && _props$configData$mol !== void 0 ? _props$configData$mol : DEFAULT_MOLDING_PIECE_LENGTH;
1611
+ sceneData.layers[layerId].moldingData = getMoldingDataOfScene2(layer, props.catalog, currentTexture, moldingPieceLength);
1611
1612
 
1612
1613
  // get skin panel data
1613
- sceneData.layers[layerId].skinPanelData = computeSkinPanels(layer);
1614
+ skinPanelExclusionSKUs = (_props$configData$ski = props === null || props === void 0 || (_props$configData2 = props.configData) === null || _props$configData2 === void 0 ? void 0 : _props$configData2.skinPanelExclusionSKUs) !== null && _props$configData$ski !== void 0 ? _props$configData$ski : [];
1615
+ sceneData.layers[layerId].skinPanelData = computeSkinPanels(layer, skinPanelExclusionSKUs);
1614
1616
 
1615
1617
  // send scene object from 3DTool to HostApp using internalEvent
1616
1618
  (_props$onInternalEven3 = props.onInternalEvent) === null || _props$onInternalEven3 === void 0 || _props$onInternalEven3.call(props, {
@@ -939,7 +939,7 @@ export function createMonldingGroup(oldMG, layer, molding, catalog) {
939
939
  newMG = getMDPoints(newMG);
940
940
  return newMG;
941
941
  }
942
- export function getMoldingDataOfScene2(layer, catalog, doorStyle) {
942
+ export function getMoldingDataOfScene2(layer, catalog, doorStyle, moldingPieceLength) {
943
943
  var _layer$items;
944
944
  var moldingData = [];
945
945
  var items = layer === null || layer === void 0 || (_layer$items = layer.items) === null || _layer$items === void 0 ? void 0 : _layer$items.toArray();
@@ -1101,10 +1101,10 @@ export function getMoldingDataOfScene2(layer, catalog, doorStyle) {
1101
1101
  if (idx < 0) moldingData.push(_objectSpread(_objectSpread({}, ml.molding), {}, {
1102
1102
  doorStyle: ml.doorStyle,
1103
1103
  totalLength: mlLength,
1104
- count: Math.ceil(mlLength * 1.1 / 96)
1104
+ count: Math.ceil(mlLength * 1.1 / moldingPieceLength)
1105
1105
  }));else {
1106
1106
  moldingData[idx].totalLength += mlLength;
1107
- moldingData[idx].count = Math.ceil(moldingData[idx].totalLength * 1.1 / 96);
1107
+ moldingData[idx].count = Math.ceil(moldingData[idx].totalLength * 1.1 / moldingPieceLength);
1108
1108
  }
1109
1109
  };
1110
1110
  for (var k = 0; k < moldingLines.length; k++) {
@@ -1112,237 +1112,5 @@ export function getMoldingDataOfScene2(layer, catalog, doorStyle) {
1112
1112
  }
1113
1113
  // console.log('moldingData: ', moldingData);
1114
1114
 
1115
- return moldingData;
1116
- }
1117
- export function getMoldingDataOfScene(layer, catalog, doorStyle) {
1118
- var moldingData = [];
1119
- var items = layer.items.toArray();
1120
- var moldings = [];
1121
- // get all moldings info
1122
- items.forEach(function (itemCat) {
1123
- var _itemCat$molding;
1124
- itemCat === null || itemCat === void 0 || (_itemCat$molding = itemCat.molding) === null || _itemCat$molding === void 0 || _itemCat$molding.forEach(function (molding) {
1125
- if (!moldings.some(function (m) {
1126
- return m.name === molding.name;
1127
- })) moldings.push(molding);
1128
- });
1129
- });
1130
-
1131
- // calc normal molding
1132
- moldings.forEach(function (molding) {
1133
- var itemGroups = [];
1134
- var temp_items = [];
1135
- items.forEach(function (item) {
1136
- if (item.molding.some(function (mol) {
1137
- return mol.itemID === molding.itemID;
1138
- }) && isEnableItemForMolding(layer, item)) {
1139
- temp_items.push(item);
1140
- }
1141
- });
1142
- if (temp_items.length) {
1143
- while (temp_items.length > 0) {
1144
- var itemGroup = [temp_items[0]];
1145
- var _loop10 = function _loop10(_idx) {
1146
- if (!itemGroup.some(function (it) {
1147
- return it.id === temp_items[_idx].id;
1148
- }) && isItemSnappedGroup(temp_items[_idx], itemGroup)) {
1149
- itemGroup.push(temp_items[_idx]);
1150
- _idx = 0;
1151
- }
1152
- idx = _idx;
1153
- };
1154
- for (var idx = 0; idx < temp_items.length; idx++) {
1155
- _loop10(idx);
1156
- }
1157
- itemGroup.forEach(function (item) {
1158
- var index = temp_items.findIndex(function (it) {
1159
- return it.id === item.id;
1160
- });
1161
- if (index > -1) {
1162
- temp_items.splice(index, 1);
1163
- }
1164
- });
1165
- itemGroups.push(itemGroup);
1166
- }
1167
- var molding_totalLength = 0;
1168
- itemGroups.forEach(function (itemgroup) {
1169
- var allLineRects = GeometryUtils.buildRectFromLines(layer, GeometryUtils.getAllLines(layer));
1170
- var items = _toConsumableArray(itemgroup);
1171
- var MGlines = getLinesOfItem(items[0], allLineRects, catalog);
1172
- items = sortItemsByDistance(items, items[0]);
1173
- var _loop11 = function _loop11() {
1174
- var itemLines = getLinesOfItem(items[i], allLineRects, catalog);
1175
- var temp_MGLines = [];
1176
- MGlines.forEach(function (line) {
1177
- var idx = itemLines.findIndex(function (itemLine) {
1178
- return isLinesOverlapped(line, itemLine);
1179
- });
1180
- var curItemLine = itemLines[idx];
1181
- if (idx > -1) {
1182
- if (!(GeometryUtils.samePoints(line[0], curItemLine[0]) && GeometryUtils.samePoints(line[1], curItemLine[1]) || GeometryUtils.samePoints(line[0], curItemLine[1]) && GeometryUtils.samePoints(line[1], curItemLine[0]))) {
1183
- var MGLine = mergeOverlappedLines(line, curItemLine);
1184
- temp_MGLines.push(MGLine);
1185
- }
1186
- itemLines.splice(idx, 1);
1187
- } else {
1188
- temp_MGLines.push(line);
1189
- }
1190
- });
1191
- itemLines.forEach(function (itemLine) {
1192
- return temp_MGLines.push(itemLine);
1193
- });
1194
- MGlines = [].concat(temp_MGLines);
1195
- };
1196
- for (var i = 1; i < items.length; i++) {
1197
- _loop11();
1198
- }
1199
- MGlines.forEach(function (line) {
1200
- molding_totalLength += GeometryUtils.verticesDistance(line[0], line[1]);
1201
- });
1202
- });
1203
- molding_totalLength = convert(molding_totalLength).from('cm').to('in');
1204
- moldingData.push(_objectSpread(_objectSpread({}, molding), {}, {
1205
- doorStyle: doorStyle,
1206
- count: Math.ceil(molding_totalLength * 1.1 / 96)
1207
- }));
1208
- }
1209
- });
1210
-
1211
- // calc toe kick molding
1212
- var tmp = [];
1213
- items.forEach(function (item) {
1214
- if (item.category === 'cabinet' && !item.cabinet_category.toLowerCase().includes('microwave')) {
1215
- tmp.push(item);
1216
- }
1217
- });
1218
- var tmpMoldingData = [];
1219
- var toedoorStyles = [];
1220
- tmp.map(function (item) {
1221
- var _item$molding2;
1222
- if (item.layoutpos === BASE_CABINET_LAYOUTPOS && (isEmpty(item.molding) || ((_item$molding2 = item.molding) === null || _item$molding2 === void 0 ? void 0 : _item$molding2.length) < 1 || !isEnableItemForMolding(layer, item))) {
1223
- var w = item.properties.get('width').get('_length');
1224
- var wUnit = item.properties.get('width').get('_unit') || 'cm';
1225
- w = convert(w / 2).from(wUnit).to('cm');
1226
- var h = item.properties.get('depth').get('_length');
1227
- var hUnit = item.properties.get('depth').get('_unit') || 'cm';
1228
- h = convert(h / 2).from(hUnit).to('cm');
1229
- var outline = null;
1230
- var element = catalog.elements[item.get('type')];
1231
- if (!element) element = catalog.elements[returnReplaceableDeepSearchType(item.get('type'))];
1232
- outline = element.info.outline;
1233
- var len = 0;
1234
- if (outline) {
1235
- // Extract Points from `outline`
1236
- var outlinePaths = outline.paths;
1237
- var outlineWidth = outline.svgWidth;
1238
- var outlineHeight = outline.svgHeight;
1239
- var outlinePoints = []; // Hold Points Of SVG
1240
- var _iterator5 = _createForOfIteratorHelper(outlinePaths),
1241
- _step5;
1242
- try {
1243
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1244
- var path = _step5.value;
1245
- var _iterator6 = _createForOfIteratorHelper(path.subPaths),
1246
- _step6;
1247
- try {
1248
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1249
- var subPath = _step6.value;
1250
- outlinePoints = outlinePoints.concat(subPath.getPoints());
1251
- }
1252
- } catch (err) {
1253
- _iterator6.e(err);
1254
- } finally {
1255
- _iterator6.f();
1256
- }
1257
- }
1258
- } catch (err) {
1259
- _iterator5.e(err);
1260
- } finally {
1261
- _iterator5.f();
1262
- }
1263
- var maxX = outlinePoints[0].x,
1264
- minX = outlinePoints[0].x;
1265
- var maxY = outlinePoints[0].y,
1266
- minY = outlinePoints[0].y;
1267
- outlinePoints.forEach(function (point) {
1268
- if (point.x > maxX) {
1269
- maxX = point.x;
1270
- }
1271
- if (point.x < minX) {
1272
- minX = point.x;
1273
- }
1274
- if (point.y > maxY) {
1275
- maxY = point.y;
1276
- }
1277
- if (point.y < minY) {
1278
- minY = point.y;
1279
- }
1280
- });
1281
- outlinePoints.forEach(function (point) {
1282
- if (GeometryUtils.isPointInRect([{
1283
- x: minX,
1284
- y: minY
1285
- }, {
1286
- x: minX,
1287
- y: maxY
1288
- }, {
1289
- x: maxX,
1290
- y: maxY
1291
- }, {
1292
- x: maxX,
1293
- y: minY
1294
- }], point)) {
1295
- if (point.x > 10) len += (point.x / outlineWidth - 0.5) * w * 2 + h * 2 - (point.y / outlineHeight - 0.5) * h * 2;
1296
- }
1297
- });
1298
- len = convert(len).from('cm').to('in');
1299
- } else {
1300
- w = convert(w * 2).from('cm').to('in');
1301
- len += w;
1302
- }
1303
- var doorIndex = toedoorStyles.findIndex(function (a) {
1304
- var iDS = item === null || item === void 0 ? void 0 : item.doorStyle;
1305
- if (!iDS) return false;
1306
- if (!iDS.hasOwnProperty('id')) {
1307
- iDS = iDS.toJS();
1308
- }
1309
- return a.doorStyle.id === iDS.id && isEqualInstallationType(a.doorStyle, iDS);
1310
- });
1311
- if (doorIndex > -1) {
1312
- toedoorStyles[doorIndex].totalLength += len;
1313
- } else {
1314
- toedoorStyles.push({
1315
- doorStyle: item.doorStyle.hasOwnProperty('id') ? item.doorStyle : item.doorStyle && item.doorStyle.toJS(),
1316
- totalLength: len
1317
- });
1318
- }
1319
- }
1320
- });
1321
- toedoorStyles.forEach(function (doorStyle) {
1322
- var skuName = getToeKickSKU(doorStyle.doorStyle, catalog);
1323
- var thumbnail = skuName ? skuName : '';
1324
- // moldings.forEach(molding => {
1325
- // if (
1326
- // molding.name ===
1327
- // getToeKickSKU(
1328
- // doorStyle.doorStyle,
1329
- // catalog,
1330
- // true
1331
- // )
1332
- // )
1333
- // thumbnail = molding.thumbnail;
1334
- // });
1335
-
1336
- doorStyle.totalLength && tmpMoldingData.push({
1337
- name: TOE_KICK_MOLDING,
1338
- sku: getToeKickSKU(doorStyle.doorStyle, catalog),
1339
- thumbnail: thumbnail,
1340
- category: 'molding',
1341
- type: 'cabinet',
1342
- doorStyle: doorStyle.doorStyle,
1343
- count: Math.ceil(doorStyle.totalLength * 1.1 / 96)
1344
- });
1345
- });
1346
- if (tmpMoldingData.length > 0) moldingData = [].concat(_toConsumableArray(moldingData), tmpMoldingData);
1347
1115
  return moldingData;
1348
1116
  }
@@ -303,14 +303,27 @@ function buildSkinPanelData(faces) {
303
303
  }
304
304
  return result;
305
305
  }
306
+ function shouldExcludeSkinPanel(itemJS, exclusionSet) {
307
+ var _itemJS$doorStyle;
308
+ var cabinetSku = itemJS === null || itemJS === void 0 ? void 0 : itemJS.sku_number;
309
+ var doorColorSku = itemJS === null || itemJS === void 0 || (_itemJS$doorStyle = itemJS.doorStyle) === null || _itemJS$doorStyle === void 0 ? void 0 : _itemJS$doorStyle.sku;
310
+ if (!cabinetSku || !doorColorSku) return false;
311
+ return exclusionSet.has("".concat(cabinetSku, "-").concat(doorColorSku));
312
+ }
306
313
  export function computeSkinPanels(layer) {
314
+ var skinPanelExclusionSKUs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
315
+ var exclusionSet = new Set(skinPanelExclusionSKUs);
316
+
307
317
  // Get candidate skin panel items and other items
308
318
  var _collectLayerItems = collectLayerItems(layer),
309
319
  skinPanelItems = _collectLayerItems.skinPanelItems,
310
320
  otherItems = _collectLayerItems.otherItems;
321
+ var filteredSkinPanelItems = skinPanelItems.filter(function (item) {
322
+ return !shouldExcludeSkinPanel(item.toJS(), exclusionSet);
323
+ });
311
324
 
312
325
  // Get all skin face list of [skinPanelItems] & [otherItems]
313
- var skinFaces = collectFaces(skinPanelItems, layer);
326
+ var skinFaces = collectFaces(filteredSkinPanelItems, layer);
314
327
  var otherFaces = collectFaces(otherItems, layer);
315
328
  skinFaces = filterFacesBlockedByFaces(skinFaces, skinFaces);
316
329
  skinFaces = filterFacesBlockedByFaces(skinFaces, otherFaces);
@@ -1419,10 +1419,9 @@ function Viewer2D(_ref, _ref2) {
1419
1419
  detectAutoPan: mode2DetectAutopan(mode),
1420
1420
  onMouseDown: onMouseDown,
1421
1421
  onMouseMove: onMouseMove,
1422
- onMouseUp: onMouseUp
1423
- // miniaturePosition="none"
1424
- // toolbarPosition="none"
1425
- ,
1422
+ onMouseUp: onMouseUp,
1423
+ miniaturePosition: "none",
1424
+ toolbarPosition: "none",
1426
1425
  detectPinchGesture: false,
1427
1426
  disableDoubleClickZoomWithToolAuto: true,
1428
1427
  ref: Viewer
@@ -3070,13 +3070,23 @@ function createBacksplash(item, layer, planData, scene) {
3070
3070
  */
3071
3071
  var altItems = [],
3072
3072
  flag = false;
3073
+ var D0 = {},
3074
+ D1 = {};
3073
3075
  wallItems.map(function (wallItem) {
3074
3076
  var _wallItem$itemInfo, _wallItem$itemInfo2;
3075
3077
  var altitude = (_wallItem$itemInfo = wallItem.itemInfo) === null || _wallItem$itemInfo === void 0 || (_wallItem$itemInfo = _wallItem$itemInfo.properties) === null || _wallItem$itemInfo === void 0 ? void 0 : _wallItem$itemInfo.get('altitude').get('_length');
3076
3078
  var altitudeUnit = ((_wallItem$itemInfo2 = wallItem.itemInfo) === null || _wallItem$itemInfo2 === void 0 || (_wallItem$itemInfo2 = _wallItem$itemInfo2.properties) === null || _wallItem$itemInfo2 === void 0 ? void 0 : _wallItem$itemInfo2.get('altitude').get('_unit')) || 'cm';
3077
3079
  if (!(0, _helper.isEmpty)(altitude) && !(0, _helper.isEmpty)(altitudeUnit)) {
3078
3080
  altitude = (0, _convertUnitsLite.convert)(altitude).from(altitudeUnit).to('cm');
3081
+ var altPoints = (0, _geometry2.getLineSnapPointsOfItem)(layer, curLine, wallItem);
3082
+ if (altPoints.length > 1) {
3083
+ D0 = altPoints[0];
3084
+ D1 = altPoints[1];
3085
+ }
3079
3086
  altItems.push({
3087
+ D0: D0,
3088
+ // D0, D1: item's snapped points with line
3089
+ D1: D1,
3080
3090
  x: wallItem.pos.x,
3081
3091
  width: wallItem.size.width,
3082
3092
  altitude: altitude
@@ -3084,10 +3094,29 @@ function createBacksplash(item, layer, planData, scene) {
3084
3094
  }
3085
3095
  });
3086
3096
  layer.holes.map(function (hole) {
3087
- var _hole$properties, _hole$properties2;
3097
+ var _hole$properties, _hole$properties2, _layer$lines, _layer$vertices, _line$vertices, _layer$vertices2, _line$vertices2;
3088
3098
  var width = (_hole$properties = hole.properties) === null || _hole$properties === void 0 ? void 0 : _hole$properties.getIn(['width', 'length']);
3089
3099
  var altitude = (_hole$properties2 = hole.properties) === null || _hole$properties2 === void 0 ? void 0 : _hole$properties2.getIn(['altitude', 'length']);
3100
+ var line = (_layer$lines = layer.lines) === null || _layer$lines === void 0 ? void 0 : _layer$lines.get(curLine === null || curLine === void 0 ? void 0 : curLine.id);
3101
+ var v0 = (_layer$vertices = layer.vertices) === null || _layer$vertices === void 0 ? void 0 : _layer$vertices.get(line === null || line === void 0 || (_line$vertices = line.vertices) === null || _line$vertices === void 0 ? void 0 : _line$vertices.get(0));
3102
+ var v1 = (_layer$vertices2 = layer.vertices) === null || _layer$vertices2 === void 0 ? void 0 : _layer$vertices2.get(line === null || line === void 0 || (_line$vertices2 = line.vertices) === null || _line$vertices2 === void 0 ? void 0 : _line$vertices2.get(1));
3103
+ if (!(0, _helper.isEmpty)(v0) || !(0, _helper.isEmpty)(v1)) {
3104
+ var lineLength = (0, _geometry2.pointsDistance)(v0.x, v0.y, v1.x, v1.y);
3105
+ var disD0 = lineLength * hole.offset - width / 2;
3106
+ var disD1 = lineLength * hole.offset + width / 2;
3107
+ D0 = {
3108
+ x: v0.x + disD0 * Math.cos(hole.rotRad),
3109
+ y: v0.y + disD0 * Math.sin(hole.rotRad)
3110
+ };
3111
+ D1 = {
3112
+ x: v0.x + disD1 * Math.cos(hole.rotRad),
3113
+ y: v0.y + disD1 * Math.sin(hole.rotRad)
3114
+ };
3115
+ }
3090
3116
  if (!(0, _helper.isEmpty)(width) && !(0, _helper.isEmpty)(altitude) && hole.line === (curLine === null || curLine === void 0 ? void 0 : curLine.id)) altItems.push({
3117
+ D0: D0,
3118
+ // D0, D1: hole's two points
3119
+ D1: D1,
3091
3120
  x: hole.x,
3092
3121
  width: width,
3093
3122
  altitude: altitude
@@ -3096,7 +3125,7 @@ function createBacksplash(item, layer, planData, scene) {
3096
3125
  if (altItems.length > 0) {
3097
3126
  depth = altItems[0].altitude;
3098
3127
  altItems.map(function (altItem) {
3099
- if (item.pos.x + item.size.width / 2 >= altItem.x - altItem.width / 2 && item.pos.x - item.size.width / 2 <= altItem.x + altItem.width / 2) {
3128
+ if ((0, _geometry2.isOverlappedTwoItemsOnOneLine)(layer, curLine, item, altItem)) {
3100
3129
  if (depth >= altItem.altitude) {
3101
3130
  depth = altItem.altitude;
3102
3131
  flag = true;
@@ -3206,9 +3235,9 @@ function createBacksplash(item, layer, planData, scene) {
3206
3235
  }
3207
3236
  itemToSave.info.id = item.itemInfo.id;
3208
3237
  deleteSpecifiedMeshObjects('backsplash' + item.itemInfo.id);
3209
- if (Math.abs(item.rotRad % (Math.PI / 2)) < _constants.EPSILON) planData.plan.add(backsplash);
3238
+ if (Math.abs(item.rotRad % (Math.PI / 2)) < _constants.EPSILON || Math.abs(item.rotRad % (Math.PI / 2) - Math.PI / 2) < _constants.EPSILON) planData.plan.add(backsplash);
3210
3239
  backsplash.name = name;
3211
- backsplash.visible = item.itemInfo.get('backsplashVisible') && backsplashApplied && Math.abs(item.rotRad % (Math.PI / 2)) < _constants.EPSILON;
3240
+ backsplash.visible = item.itemInfo.get('backsplashVisible') && backsplashApplied && Math.abs(item.rotRad % (Math.PI / 2)) < _constants.EPSILON || Math.abs(item.rotRad % (Math.PI / 2) - Math.PI / 2) < _constants.EPSILON;
3212
3241
 
3213
3242
  // Save to scene graph
3214
3243
 
package/lib/constants.js CHANGED
@@ -3,11 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.END_DRAWING_LINE = exports.END_DRAWING_ITEM = exports.END_DRAWING_HOLE_3D = exports.END_DRAWING_HOLE = exports.END_DRAGGING_VERTEX = exports.END_DRAGGING_LINE = exports.END_DRAGGING_ITEM_3D = exports.END_DRAGGING_ITEM = exports.END_DRAGGING_HOLE_3D = exports.END_DRAGGING_HOLE = exports.END_CREATING_HOLE = exports.END_CREATING_CABINET = exports.ELEVATION_VIEW_TITLE = exports.ELEVATION_VIEW_RIGHT = exports.ELEVATION_VIEW_LEFT = exports.ELEVATION_VIEW_KEYWORD = exports.ELEVATION_VIEW_FRONT = exports.ELEVATION_VIEW_BACK = exports.ELEVATION_VIEW = exports.ELEMENT_VERTEX = exports.ELEMENT_LINE = exports.ELEMENT_ITEM = exports.ELEMENT_HOLE = exports.ELEMENT_AREA = exports.EDIT_WIDTH = exports.EDIT = exports.DUPLICATE_SELECTED = exports.DOORSTYLE_SCOPE_SINGLE = exports.DOORSTYLE_SCOPE_MULTIPLE = exports.DOORSTYLE_SCOPE_ALL = exports.DISTANCE_MEASUREMENT_LINE_COLOR = exports.DISTANCE_EPSILON = exports.DIFFERENT_VALUES_PATH_LENGTH = exports.DELTA = exports.DEFAULT_FONT_FAMILY = exports.DECIMAL_PLACES_3 = exports.DECIMAL_PLACES_2 = exports.DASH_LINE_COLOR = exports.CREATE_ROOM_WITH_SHAPE = exports.COPY_PROPERTIES = exports.CLIENTS_NAME = exports.CHANGE_WINDOW_DOOR_MEASURE = exports.CHANGE_WALL_LENGTH_MEASURE = exports.CHANGE_WALL_CABINET_MEASURE = exports.CHANGE_MEASUREMENT_UNIT = exports.CHANGE_CATALOG_PAGE = exports.CHANGE_BASE_CABINET_MEASURE = exports.CEIL_UNITS_LENGTH = exports.BROWN_COLOR = exports.BOTTOM_MOLDING_LOCATION = exports.BOTTOM = exports.BG_COLOR_OVERLAY = exports.BG_COLOR_HOVER = exports.BG_COLOR_1 = exports.BG_COLOR_0 = exports.BEGIN_UPLOADING_IMAGE = exports.BEGIN_ROTATING_ITEM_3D = exports.BEGIN_ROTATING_ITEM = exports.BEGIN_FITTING_IMAGE = exports.BEGIN_DRAWING_LINE = exports.BEGIN_DRAGGING_VERTEX = exports.BEGIN_DRAGGING_LINE = exports.BEGIN_DRAGGING_ITEM_3D = exports.BEGIN_DRAGGING_ITEM = exports.BEGIN_DRAGGING_HOLE_3D = exports.BEGIN_DRAGGING_HOLE = exports.BASE_ITEM_MEASUREMENT_LINE_COLOR = exports.BASE_CABINET_LAYOUTPOS = exports.BACK_DIST_ANG = exports.ATT_VERTEXT_TWO = exports.ATT_VERTEXT_ONE = exports.ATT_LINE_LENGTH = exports.ATT_ITEM_ROTATION = exports.ATT_ITEM_POS = exports.ATT_HOLE_OFFSET_B = exports.ATT_HOLE_OFFSET_A = exports.ARROW_TEXT_FORECOLOR = exports.ARROW_TEXT_FONTFACE = exports.ARROW_TEXT_BACKCOLOR = exports.ARROW_COLOR = exports.ARRAY_ELEVATION_VIEW_MODES = exports.ARRAY_3D_MODES = exports.AREA_ACTIONS = exports.API_SERVER_URL = exports.ANIMATE_STEP_MIN = exports.ANIMATE_STEP_MAX = exports.ANIMATE_OBJECT_OPEN_DOOR_ROTATION_UNIT = exports.ANIMATE_OBJECT = exports.ALTERATE_STATE = exports.ADD_VERTICAL_GUIDE = exports.ADD_TO_GROUP = exports.ADD_LAYER = exports.ADD_HORIZONTAL_GUIDE = exports.ADD_GROUP_FROM_SELECTED = exports.ADD_GROUP = exports.ADD_ELEMENT_TO_CATALOG = exports.ADD_CIRCULAR_GUIDE = exports.ADD_CABINETS = exports.ADD_APPLIANCES = exports.ACCENT_COLOR = void 0;
7
- exports.MODE_DRAGGING_VERTEX = exports.MODE_DRAGGING_LINE = exports.MODE_DRAGGING_ITEM_3D = exports.MODE_DRAGGING_ITEM = exports.MODE_DRAGGING_HOLE_3D = exports.MODE_DRAGGING_HOLE = exports.MODE_CONFIGURING_PROJECT = exports.MODE_BACK_ELEVATION_VIEW = exports.MODE_3D_VIEW = exports.MODE_3D_FIRST_PERSON = exports.MODE_2D_ZOOM_OUT = exports.MODE_2D_ZOOM_IN = exports.MODE_2D_PAN = exports.MODE = exports.MIN_ANGLE_DISALLOW_DRAW_WALL = exports.MIDDLE_MOLDING_LOCATION = exports.MEPSILON = exports.MAX_ZOOM_IN_SCALE = exports.MAX_ANGLE_SCALE = exports.MAKE_FLOOR_PLAN = exports.LOGOUT = exports.LOGIN_SUCCESS = exports.LOGIN_ERROR = exports.LOCAL_STORAGE_TOKEN_VALUE = exports.LOCAL_STORAGE_TOKEN_NAME = exports.LOCAL_STORAGE_ORIGINAL_TOKEN = exports.LOCAL_STORAGE_CUSTOMER_INFO = exports.LOCAL_STORAGE_CART_ACTION = exports.LOAD_PROJECT = exports.LIST_QUANTITIES = exports.LIST_PARTS = exports.LINE_THICKNESS = exports.LINE_ACTIONS = exports.LEFT_DIST_ANG = exports.LEFT = exports.LABEL_COLOR = exports.KITCHEN_KONFIGURATOR = exports.KEYBOARD_BUTTON_CODE = exports.ITEM_TYPE = exports.ITEM_MOVE_UP = exports.ITEMS_ACTIONS = exports.INVERT = exports.INTERNAL_EVENT_UNSELECT_ALL = exports.INTERNAL_EVENT_TOGGLE_TO_ELEVATION = exports.INTERNAL_EVENT_SYNC_SCENE = exports.INTERNAL_EVENT_START_DRAW_WALL = exports.INTERNAL_EVENT_SELECT_ELEMENT = exports.INTERNAL_EVENT_ROTATE_ELEMENT = exports.INTERNAL_EVENT_REPLACE_CABINET = exports.INTERNAL_EVENT_ITEMS_CATALOG = exports.INTERNAL_EVENT_DRAW_ELEMENT = exports.INTERNAL_EVENT_DRAG_ELEMENT = exports.INSTALLATION_TYPE_SKU_SUFFIX = exports.INSTALLATION_TYPE_NAME = exports.INSTALLATION_SUFFIX_TYPE = exports.INIT_CATALOG = exports.HOLE_NAMES = exports.HOLE_ACTIONS = exports.HDR_URLS = exports.HAS_LOADINGBAR = exports.GROUP_TRANSLATE = exports.GROUP_ROTATE = exports.GROUP_ACTIONS = exports.GO_BACK_TO_CATALOG_PAGE = exports.FRONT_DIST_ANG = exports.FINISHING_TYPE = exports.FINISHING_TOUCH = exports.EXTERNAL_EVENT_ZOOM_OUT = exports.EXTERNAL_EVENT_ZOOM_IN = exports.EXTERNAL_EVENT_UPDATE_PROPERTY = exports.EXTERNAL_EVENT_UPDATE_ATTRIBUTE = exports.EXTERNAL_EVENT_UNDO = exports.EXTERNAL_EVENT_TOGGLE_TO_ELEVATION = exports.EXTERNAL_EVENT_TOGGLE_TO_3D = exports.EXTERNAL_EVENT_TOGGLE_TO_2D = exports.EXTERNAL_EVENT_SYNC_SCENE = exports.EXTERNAL_EVENT_SET_MOLDING = exports.EXTERNAL_EVENT_SET_FINISHING = exports.EXTERNAL_EVENT_ROTATE_PAN = exports.EXTERNAL_EVENT_REPLACE_CABINET = exports.EXTERNAL_EVENT_REDO = exports.EXTERNAL_EVENT_PROJECT_SETTING = exports.EXTERNAL_EVENT_NEW_PROJECT = exports.EXTERNAL_EVENT_MOVE_PAN = exports.EXTERNAL_EVENT_LOAD_PROJECT = exports.EXTERNAL_EVENT_DUPLICATE_ELEMENT = exports.EXTERNAL_EVENT_DELETE_ELEMENT = exports.EXTERNAL_EVENT_CHANGE_DOORSTYLE = exports.EXTERNAL_EVENT_CENTERING_2D = exports.EXTERNAL_EVENT_ADD_WALL = exports.EXTERNAL_EVENT_ADD_ROOM_SHAPE = exports.EXTERNAL_EVENT_ADD_ITEM = exports.EXTERNAL_EVENT_ADD_HOLE = exports.ERROR_DATABASE = exports.EPSILON = exports.END_UPLOADING_IMAGE = exports.END_ROTATING_ITEM_3D = exports.END_ROTATING_ITEM = exports.END_LOADING = exports.END_FITTING_IMAGE = void 0;
8
- exports.SET_BACKSPLASH_VISIBLE = exports.SET_BACKSPLASH = exports.SET_APPLIANCE_MATERIAL = exports.SELECT_TOOL_ZOOM_OUT = exports.SELECT_TOOL_ZOOM_IN = exports.SELECT_TOOL_UPLOAD_IMAGE = exports.SELECT_TOOL_PAN = exports.SELECT_TOOL_EDIT = exports.SELECT_TOOL_DRAWING_LINE = exports.SELECT_TOOL_DRAWING_ITEM_3D = exports.SELECT_TOOL_DRAWING_ITEM = exports.SELECT_TOOL_DRAWING_HOLE_3D = exports.SELECT_TOOL_DRAWING_HOLE = exports.SELECT_TOOL_3D_VIEW = exports.SELECT_TOOL_3D_FIRST_PERSON = exports.SELECT_LINE = exports.SELECT_LAYER = exports.SELECT_ITEM = exports.SELECT_HOLE = exports.SELECT_GROUP = exports.SELECT_DOOR_STYLE = exports.SELECT_AREA = exports.SELECT_ALL = exports.SELECTALL = exports.SECONDARY_PURPLE_COLOR = exports.SECONDARY_BLUE_COLOR = exports.SCENE_ACTIONS = exports.SAVE_PROJECT = exports.SAVE_DESIGN = exports.ROOM_SHAPE_TYPE = exports.ROOM_SHAPE_MEASUREMENT_LINE_COLOR = exports.ROOM_ELEMENT_MEASUREMENT_LINE_COLOR = exports.ROLLBACK = exports.RIGHT_DIST_ANG = exports.RIGHT = exports.REVIEW_AND_QUOTE = exports.REQUEST_ASSISTANCE = exports.REPLACE_SUBMODULE = exports.REPLACE_ITEM = exports.REMOVE_VERTICAL_GUIDE = exports.REMOVE_REPLACE_SUBMODULE = exports.REMOVE_LINEAR = exports.REMOVE_LAYER = exports.REMOVE_HORIZONTAL_GUIDE = exports.REMOVE_GROUP_AND_DELETE_ELEMENTS = exports.REMOVE_GROUP = exports.REMOVE_FROM_GROUP = exports.REMOVE_DRAWING_SUPPORT = exports.REMOVE_CIRCULAR_GUIDE = exports.REMOVE = exports.REDO = exports.RECREATE = exports.PUSH_LAST_SELECTED_CATALOG_ELEMENT_TO_HISTORY = exports.PROP_RESIZE_WIDTH = exports.PROP_RESIZE_HEIGHT = exports.PROP_RESIZE_DEPTH = exports.PROP_OPEN_DOORS = exports.PROP_FLIP_DOOR_HANDLE = exports.PROP_ALTITUDE = exports.PROJECT_SETTING_OPTION = exports.PROJECT_RE_NAME = exports.PROJECT_NAME_LENGTH_LIMIT = exports.PROJECT_ACTIONS = exports.PRODUCT = exports.PRIMARY_GREEN_COLOR = exports.PASTE_PROPERTIES = exports.OVERLAP_SOME = exports.OVERLAP_SAME = exports.OVERLAP_NONE = exports.OVERLAP_LINK = exports.OVERLAP_INCLUDED = exports.OPEN_PROJECT_CONFIGURATOR = exports.OPEN_CATALOG = exports.OBJTYPE_MESH = exports.OBJTYPE_GROUP = exports.NO_DATA_DATABASE = exports.NEW_PROJECT_BTN = exports.NEW_PROJECT = exports.NEW_DESIGN = exports.MOVE_COMPONENT = exports.MOLDING_LOCATIONS = exports.MODE_WAITING_DRAWING_LINE = exports.MODE_VIEWING_CATALOG = exports.MODE_UPLOADING_IMAGE = exports.MODE_SNAPPING = exports.MODE_ROTATING_ITEM_3D = exports.MODE_ROTATING_ITEM = exports.MODE_RIGHT_ELEVATION_VIEW = exports.MODE_LEFT_ELEVATION_VIEW = exports.MODE_IDLE_3D = exports.MODE_IDLE = exports.MODE_FRONT_VIEW = exports.MODE_FRONT_ELEVATION_VIEW = exports.MODE_FITTING_IMAGE = exports.MODE_ELEVATION_VIEW = exports.MODE_DRAWING_LINE = exports.MODE_DRAWING_ITEM_3D = exports.MODE_DRAWING_ITEM = exports.MODE_DRAWING_HOLE_3D = exports.MODE_DRAWING_HOLE = void 0;
9
- exports.UPDATE_3D_CEIL_HEIGHT_UNIT = exports.UPDATE_3D_CEIL_HEIGHT = exports.UPDATE_2D_CAMERA = exports.UNSELECT_GROUP = exports.UNSELECT_ALL = exports.UNIT_MILLIMETER = exports.UNIT_MILE = exports.UNIT_METER = exports.UNIT_INCH_LONG = exports.UNIT_INCH = exports.UNIT_FOOT = exports.UNIT_CENTIMETER = exports.UNIT_ANGLE = exports.UNITS_LENGTH = exports.UNDO = exports.UNCREATE = exports.TWO_D_FLOOR_PLAN = exports.TOP_MOLDING_LOCATION = exports.TOP = exports.TOGGLE_SNAP = exports.TOGGLE_LOADING_CABINET = exports.TOE_KICK_MOLDING = exports.TITLE_SMALL_COLOR = exports.TITLE_COLOR = exports.THROW_WARNING = exports.THROW_ERROR = exports.TEXT_COLOR_NEUTRAL_7 = exports.TEXT_COLOR_NEUTRAL_6 = exports.TEXT_COLOR_NEUTRAL_5 = exports.TEXT_COLOR_NEUTRAL_4 = exports.TEXT_COLOR_NEUTRAL_3 = exports.TEXT_COLOR_NEUTRAL_2 = exports.TEXT_COLOR_NEUTRAL_1 = exports.TEXT_COLOR_NEUTRAL_0 = exports.TEXT_COLOR = exports.TECHNICAL_VIEW = exports.TALL_CABINET_LAYOUTPOS = exports.TAKE_PICTURE = exports.SUBTOTAL = exports.SUBMIT_REQUEST_ASSIST = exports.SUBMIT_DESIGN = exports.SUBMIT_ADD_CART = exports.STORE_DIST_ARRAY = exports.STOP_DRAWING_LINE = exports.STEP_CABINET_CHOOSE_PRODUCT = exports.STATUS_WARNING_LIGHT_COLOR = exports.STATUS_WARNING_COLOR = exports.STATUS_POSITIVE_LIGHT_COLOR = exports.STATUS_POSITIVE_COLOR = exports.STATUS_OVERDUE_LIGHT_COLOR = exports.STATUS_OVERDUE_COLOR = exports.STATUS_NEGATIVE_LIGHT_COLOR = exports.STATUS_NEGATIVE_COLOR = exports.STATUS_INFO_LIGHT_COLOR = exports.STATUS_INFO_COLOR = exports.SKIN_SKU_WSV_2460 = exports.SKIN_SKU_WSV_2442 = exports.SKIN_SKU_WSV_1242 = exports.SKIN_SKU_USV245325 = exports.SKIN_SKU_BSV_48 = exports.SKIN_SKU_BSV_24 = exports.SHIFT2DON = exports.SHIFT2DOFF = exports.SHAPE_SVG_WIDTH = exports.SHAPE_SVG_PADDING = exports.SHAPE_SVG_DEPTH = exports.SHADE_LIGHT_PURPLE_COLOR = exports.SHADE_LIGHT_GREEN_COLOR = exports.SHADE_LIGHT_BLUE_COLOR = exports.SHADE_DARK_PURPLE_COLOR = exports.SHADE_DARK_GREEN_COLOR = exports.SHADE_DARK_BLUE_COLOR = exports.SET_WALL_COLOR = exports.SET_USER_DATA = exports.SET_STATE_PROPERTIES = exports.SET_ROTATE_STATUS = exports.SET_RELATED_LINE = exports.SET_PROPERTIES = exports.SET_PROJECT_PROPERTIES = exports.SET_PROJECT_ID = exports.SET_MOVE_STATUS = exports.SET_MOLDING = exports.SET_MODELLING = exports.SET_MODE = exports.SET_LINES_ATTRIBUTES = exports.SET_LAYER_PROPERTIES = exports.SET_ITEMS_ATTRIBUTES = exports.SET_IS_HELP = exports.SET_IS_CABINET_DRAWING = exports.SET_INITIAL_DOOR_STYLE = exports.SET_HOLES_ATTRIBUTES = exports.SET_HANDLE_MATERIAL = exports.SET_GROUP_PROPERTIES = exports.SET_GROUP_BARYCENTER = exports.SET_GROUP_ATTRIBUTES = exports.SET_FLOOR_STYLES = exports.SET_DOOR_STYLE = exports.SET_DOOR_HANDLE = exports.SET_DISTANT = exports.SET_COUNTER_TOP = void 0;
10
- exports.ZOOM_VARIABLE = exports.WARRANTY_VIEW = exports.WARRANTY_SUPPORT = exports.WARNING_MESSAGE = exports.WALL_ITEM_MEASUREMENT_LINE_COLOR = exports.WALL_CABINET_LAYOUTPOS = exports.VIEWER3D_ACTIONS = exports.VIEWER2D_ACTIONS = exports.VERTEX_ACTIONS = exports.VANITY_CABINET_LAYOUTPOS = exports.VALIDATE_ITEM_POSTIONS = exports.USER_ACTIONS = exports.UPDATE_ZOOM_SCALE = exports.UPDATE_ROTATING_ITEM_CHANGED = exports.UPDATE_ROTATING_ITEM = exports.UPDATE_ROTATING = exports.UPDATE_POPUP_OPEN = exports.UPDATE_MOVING_STATE = exports.UPDATE_MOUSE_COORDS = exports.UPDATE_MOLDING = exports.UPDATE_ITEM_POSITION = exports.UPDATE_DRAWING_LINE = exports.UPDATE_DRAWING_ITEM = exports.UPDATE_DRAWING_HOLE_3D = exports.UPDATE_DRAWING_HOLE = exports.UPDATE_DRAGGING_VERTEX = exports.UPDATE_DRAGGING_LINE = exports.UPDATE_DRAGGING_ITEM_CHANGED = exports.UPDATE_DRAGGING_ITEM_3DY = exports.UPDATE_DRAGGING_ITEM_3DX = exports.UPDATE_DRAGGING_ITEM = exports.UPDATE_DRAGGING_HOLE_RULER_CHANGED = exports.UPDATE_DRAGGING_HOLE_CHANGED = exports.UPDATE_DRAGGING_HOLE_3D = exports.UPDATE_DRAGGING_HOLE = exports.UPDATE_CEIL_HEIGHT_UNIT = exports.UPDATE_CEIL_HEIGHT = void 0;
6
+ exports.END_DRAWING_ITEM = exports.END_DRAWING_HOLE_3D = exports.END_DRAWING_HOLE = exports.END_DRAGGING_VERTEX = exports.END_DRAGGING_LINE = exports.END_DRAGGING_ITEM_3D = exports.END_DRAGGING_ITEM = exports.END_DRAGGING_HOLE_3D = exports.END_DRAGGING_HOLE = exports.END_CREATING_HOLE = exports.END_CREATING_CABINET = exports.ELEVATION_VIEW_TITLE = exports.ELEVATION_VIEW_RIGHT = exports.ELEVATION_VIEW_LEFT = exports.ELEVATION_VIEW_KEYWORD = exports.ELEVATION_VIEW_FRONT = exports.ELEVATION_VIEW_BACK = exports.ELEVATION_VIEW = exports.ELEMENT_VERTEX = exports.ELEMENT_LINE = exports.ELEMENT_ITEM = exports.ELEMENT_HOLE = exports.ELEMENT_AREA = exports.EDIT_WIDTH = exports.EDIT = exports.DUPLICATE_SELECTED = exports.DOORSTYLE_SCOPE_SINGLE = exports.DOORSTYLE_SCOPE_MULTIPLE = exports.DOORSTYLE_SCOPE_ALL = exports.DISTANCE_MEASUREMENT_LINE_COLOR = exports.DISTANCE_EPSILON = exports.DIFFERENT_VALUES_PATH_LENGTH = exports.DELTA = exports.DEFAULT_MOLDING_PIECE_LENGTH = exports.DEFAULT_FONT_FAMILY = exports.DECIMAL_PLACES_3 = exports.DECIMAL_PLACES_2 = exports.DASH_LINE_COLOR = exports.CREATE_ROOM_WITH_SHAPE = exports.COPY_PROPERTIES = exports.CLIENTS_NAME = exports.CHANGE_WINDOW_DOOR_MEASURE = exports.CHANGE_WALL_LENGTH_MEASURE = exports.CHANGE_WALL_CABINET_MEASURE = exports.CHANGE_MEASUREMENT_UNIT = exports.CHANGE_CATALOG_PAGE = exports.CHANGE_BASE_CABINET_MEASURE = exports.CEIL_UNITS_LENGTH = exports.BROWN_COLOR = exports.BOTTOM_MOLDING_LOCATION = exports.BOTTOM = exports.BG_COLOR_OVERLAY = exports.BG_COLOR_HOVER = exports.BG_COLOR_1 = exports.BG_COLOR_0 = exports.BEGIN_UPLOADING_IMAGE = exports.BEGIN_ROTATING_ITEM_3D = exports.BEGIN_ROTATING_ITEM = exports.BEGIN_FITTING_IMAGE = exports.BEGIN_DRAWING_LINE = exports.BEGIN_DRAGGING_VERTEX = exports.BEGIN_DRAGGING_LINE = exports.BEGIN_DRAGGING_ITEM_3D = exports.BEGIN_DRAGGING_ITEM = exports.BEGIN_DRAGGING_HOLE_3D = exports.BEGIN_DRAGGING_HOLE = exports.BASE_ITEM_MEASUREMENT_LINE_COLOR = exports.BASE_CABINET_LAYOUTPOS = exports.BACK_DIST_ANG = exports.ATT_VERTEXT_TWO = exports.ATT_VERTEXT_ONE = exports.ATT_LINE_LENGTH = exports.ATT_ITEM_ROTATION = exports.ATT_ITEM_POS = exports.ATT_HOLE_OFFSET_B = exports.ATT_HOLE_OFFSET_A = exports.ARROW_TEXT_FORECOLOR = exports.ARROW_TEXT_FONTFACE = exports.ARROW_TEXT_BACKCOLOR = exports.ARROW_COLOR = exports.ARRAY_ELEVATION_VIEW_MODES = exports.ARRAY_3D_MODES = exports.AREA_ACTIONS = exports.API_SERVER_URL = exports.ANIMATE_STEP_MIN = exports.ANIMATE_STEP_MAX = exports.ANIMATE_OBJECT_OPEN_DOOR_ROTATION_UNIT = exports.ANIMATE_OBJECT = exports.ALTERATE_STATE = exports.ADD_VERTICAL_GUIDE = exports.ADD_TO_GROUP = exports.ADD_LAYER = exports.ADD_HORIZONTAL_GUIDE = exports.ADD_GROUP_FROM_SELECTED = exports.ADD_GROUP = exports.ADD_ELEMENT_TO_CATALOG = exports.ADD_CIRCULAR_GUIDE = exports.ADD_CABINETS = exports.ADD_APPLIANCES = exports.ACCENT_COLOR = void 0;
7
+ exports.MODE_DRAGGING_LINE = exports.MODE_DRAGGING_ITEM_3D = exports.MODE_DRAGGING_ITEM = exports.MODE_DRAGGING_HOLE_3D = exports.MODE_DRAGGING_HOLE = exports.MODE_CONFIGURING_PROJECT = exports.MODE_BACK_ELEVATION_VIEW = exports.MODE_3D_VIEW = exports.MODE_3D_FIRST_PERSON = exports.MODE_2D_ZOOM_OUT = exports.MODE_2D_ZOOM_IN = exports.MODE_2D_PAN = exports.MODE = exports.MIN_ANGLE_DISALLOW_DRAW_WALL = exports.MIDDLE_MOLDING_LOCATION = exports.MEPSILON = exports.MAX_ZOOM_IN_SCALE = exports.MAX_ANGLE_SCALE = exports.MAKE_FLOOR_PLAN = exports.LOGOUT = exports.LOGIN_SUCCESS = exports.LOGIN_ERROR = exports.LOCAL_STORAGE_TOKEN_VALUE = exports.LOCAL_STORAGE_TOKEN_NAME = exports.LOCAL_STORAGE_ORIGINAL_TOKEN = exports.LOCAL_STORAGE_CUSTOMER_INFO = exports.LOCAL_STORAGE_CART_ACTION = exports.LOAD_PROJECT = exports.LIST_QUANTITIES = exports.LIST_PARTS = exports.LINE_THICKNESS = exports.LINE_ACTIONS = exports.LEFT_DIST_ANG = exports.LEFT = exports.LABEL_COLOR = exports.KITCHEN_KONFIGURATOR = exports.KEYBOARD_BUTTON_CODE = exports.ITEM_TYPE = exports.ITEM_MOVE_UP = exports.ITEMS_ACTIONS = exports.INVERT = exports.INTERNAL_EVENT_UNSELECT_ALL = exports.INTERNAL_EVENT_TOGGLE_TO_ELEVATION = exports.INTERNAL_EVENT_SYNC_SCENE = exports.INTERNAL_EVENT_START_DRAW_WALL = exports.INTERNAL_EVENT_SELECT_ELEMENT = exports.INTERNAL_EVENT_ROTATE_ELEMENT = exports.INTERNAL_EVENT_REPLACE_CABINET = exports.INTERNAL_EVENT_ITEMS_CATALOG = exports.INTERNAL_EVENT_DRAW_ELEMENT = exports.INTERNAL_EVENT_DRAG_ELEMENT = exports.INSTALLATION_TYPE_SKU_SUFFIX = exports.INSTALLATION_TYPE_NAME = exports.INSTALLATION_SUFFIX_TYPE = exports.INIT_CATALOG = exports.HOLE_NAMES = exports.HOLE_ACTIONS = exports.HDR_URLS = exports.HAS_LOADINGBAR = exports.GROUP_TRANSLATE = exports.GROUP_ROTATE = exports.GROUP_ACTIONS = exports.GO_BACK_TO_CATALOG_PAGE = exports.FRONT_DIST_ANG = exports.FINISHING_TYPE = exports.FINISHING_TOUCH = exports.EXTERNAL_EVENT_ZOOM_OUT = exports.EXTERNAL_EVENT_ZOOM_IN = exports.EXTERNAL_EVENT_UPDATE_PROPERTY = exports.EXTERNAL_EVENT_UPDATE_ATTRIBUTE = exports.EXTERNAL_EVENT_UNDO = exports.EXTERNAL_EVENT_TOGGLE_TO_ELEVATION = exports.EXTERNAL_EVENT_TOGGLE_TO_3D = exports.EXTERNAL_EVENT_TOGGLE_TO_2D = exports.EXTERNAL_EVENT_SYNC_SCENE = exports.EXTERNAL_EVENT_SET_MOLDING = exports.EXTERNAL_EVENT_SET_FINISHING = exports.EXTERNAL_EVENT_ROTATE_PAN = exports.EXTERNAL_EVENT_REPLACE_CABINET = exports.EXTERNAL_EVENT_REDO = exports.EXTERNAL_EVENT_PROJECT_SETTING = exports.EXTERNAL_EVENT_NEW_PROJECT = exports.EXTERNAL_EVENT_MOVE_PAN = exports.EXTERNAL_EVENT_LOAD_PROJECT = exports.EXTERNAL_EVENT_DUPLICATE_ELEMENT = exports.EXTERNAL_EVENT_DELETE_ELEMENT = exports.EXTERNAL_EVENT_CHANGE_DOORSTYLE = exports.EXTERNAL_EVENT_CENTERING_2D = exports.EXTERNAL_EVENT_ADD_WALL = exports.EXTERNAL_EVENT_ADD_ROOM_SHAPE = exports.EXTERNAL_EVENT_ADD_ITEM = exports.EXTERNAL_EVENT_ADD_HOLE = exports.ERROR_DATABASE = exports.EPSILON = exports.END_UPLOADING_IMAGE = exports.END_ROTATING_ITEM_3D = exports.END_ROTATING_ITEM = exports.END_LOADING = exports.END_FITTING_IMAGE = exports.END_DRAWING_LINE = void 0;
8
+ exports.SET_BACKSPLASH = exports.SET_APPLIANCE_MATERIAL = exports.SELECT_TOOL_ZOOM_OUT = exports.SELECT_TOOL_ZOOM_IN = exports.SELECT_TOOL_UPLOAD_IMAGE = exports.SELECT_TOOL_PAN = exports.SELECT_TOOL_EDIT = exports.SELECT_TOOL_DRAWING_LINE = exports.SELECT_TOOL_DRAWING_ITEM_3D = exports.SELECT_TOOL_DRAWING_ITEM = exports.SELECT_TOOL_DRAWING_HOLE_3D = exports.SELECT_TOOL_DRAWING_HOLE = exports.SELECT_TOOL_3D_VIEW = exports.SELECT_TOOL_3D_FIRST_PERSON = exports.SELECT_LINE = exports.SELECT_LAYER = exports.SELECT_ITEM = exports.SELECT_HOLE = exports.SELECT_GROUP = exports.SELECT_DOOR_STYLE = exports.SELECT_AREA = exports.SELECT_ALL = exports.SELECTALL = exports.SECONDARY_PURPLE_COLOR = exports.SECONDARY_BLUE_COLOR = exports.SCENE_ACTIONS = exports.SAVE_PROJECT = exports.SAVE_DESIGN = exports.ROOM_SHAPE_TYPE = exports.ROOM_SHAPE_MEASUREMENT_LINE_COLOR = exports.ROOM_ELEMENT_MEASUREMENT_LINE_COLOR = exports.ROLLBACK = exports.RIGHT_DIST_ANG = exports.RIGHT = exports.REVIEW_AND_QUOTE = exports.REQUEST_ASSISTANCE = exports.REPLACE_SUBMODULE = exports.REPLACE_ITEM = exports.REMOVE_VERTICAL_GUIDE = exports.REMOVE_REPLACE_SUBMODULE = exports.REMOVE_LINEAR = exports.REMOVE_LAYER = exports.REMOVE_HORIZONTAL_GUIDE = exports.REMOVE_GROUP_AND_DELETE_ELEMENTS = exports.REMOVE_GROUP = exports.REMOVE_FROM_GROUP = exports.REMOVE_DRAWING_SUPPORT = exports.REMOVE_CIRCULAR_GUIDE = exports.REMOVE = exports.REDO = exports.RECREATE = exports.PUSH_LAST_SELECTED_CATALOG_ELEMENT_TO_HISTORY = exports.PROP_RESIZE_WIDTH = exports.PROP_RESIZE_HEIGHT = exports.PROP_RESIZE_DEPTH = exports.PROP_OPEN_DOORS = exports.PROP_FLIP_DOOR_HANDLE = exports.PROP_ALTITUDE = exports.PROJECT_SETTING_OPTION = exports.PROJECT_RE_NAME = exports.PROJECT_NAME_LENGTH_LIMIT = exports.PROJECT_ACTIONS = exports.PRODUCT = exports.PRIMARY_GREEN_COLOR = exports.PASTE_PROPERTIES = exports.OVERLAP_SOME = exports.OVERLAP_SAME = exports.OVERLAP_NONE = exports.OVERLAP_LINK = exports.OVERLAP_INCLUDED = exports.OPEN_PROJECT_CONFIGURATOR = exports.OPEN_CATALOG = exports.OBJTYPE_MESH = exports.OBJTYPE_GROUP = exports.NO_DATA_DATABASE = exports.NEW_PROJECT_BTN = exports.NEW_PROJECT = exports.NEW_DESIGN = exports.MOVE_COMPONENT = exports.MOLDING_LOCATIONS = exports.MODE_WAITING_DRAWING_LINE = exports.MODE_VIEWING_CATALOG = exports.MODE_UPLOADING_IMAGE = exports.MODE_SNAPPING = exports.MODE_ROTATING_ITEM_3D = exports.MODE_ROTATING_ITEM = exports.MODE_RIGHT_ELEVATION_VIEW = exports.MODE_LEFT_ELEVATION_VIEW = exports.MODE_IDLE_3D = exports.MODE_IDLE = exports.MODE_FRONT_VIEW = exports.MODE_FRONT_ELEVATION_VIEW = exports.MODE_FITTING_IMAGE = exports.MODE_ELEVATION_VIEW = exports.MODE_DRAWING_LINE = exports.MODE_DRAWING_ITEM_3D = exports.MODE_DRAWING_ITEM = exports.MODE_DRAWING_HOLE_3D = exports.MODE_DRAWING_HOLE = exports.MODE_DRAGGING_VERTEX = void 0;
9
+ exports.UPDATE_3D_CEIL_HEIGHT = exports.UPDATE_2D_CAMERA = exports.UNSELECT_GROUP = exports.UNSELECT_ALL = exports.UNIT_MILLIMETER = exports.UNIT_MILE = exports.UNIT_METER = exports.UNIT_INCH_LONG = exports.UNIT_INCH = exports.UNIT_FOOT = exports.UNIT_CENTIMETER = exports.UNIT_ANGLE = exports.UNITS_LENGTH = exports.UNDO = exports.UNCREATE = exports.TWO_D_FLOOR_PLAN = exports.TOP_MOLDING_LOCATION = exports.TOP = exports.TOGGLE_SNAP = exports.TOGGLE_LOADING_CABINET = exports.TOE_KICK_MOLDING = exports.TITLE_SMALL_COLOR = exports.TITLE_COLOR = exports.THROW_WARNING = exports.THROW_ERROR = exports.TEXT_COLOR_NEUTRAL_7 = exports.TEXT_COLOR_NEUTRAL_6 = exports.TEXT_COLOR_NEUTRAL_5 = exports.TEXT_COLOR_NEUTRAL_4 = exports.TEXT_COLOR_NEUTRAL_3 = exports.TEXT_COLOR_NEUTRAL_2 = exports.TEXT_COLOR_NEUTRAL_1 = exports.TEXT_COLOR_NEUTRAL_0 = exports.TEXT_COLOR = exports.TECHNICAL_VIEW = exports.TALL_CABINET_LAYOUTPOS = exports.TAKE_PICTURE = exports.SUBTOTAL = exports.SUBMIT_REQUEST_ASSIST = exports.SUBMIT_DESIGN = exports.SUBMIT_ADD_CART = exports.STORE_DIST_ARRAY = exports.STOP_DRAWING_LINE = exports.STEP_CABINET_CHOOSE_PRODUCT = exports.STATUS_WARNING_LIGHT_COLOR = exports.STATUS_WARNING_COLOR = exports.STATUS_POSITIVE_LIGHT_COLOR = exports.STATUS_POSITIVE_COLOR = exports.STATUS_OVERDUE_LIGHT_COLOR = exports.STATUS_OVERDUE_COLOR = exports.STATUS_NEGATIVE_LIGHT_COLOR = exports.STATUS_NEGATIVE_COLOR = exports.STATUS_INFO_LIGHT_COLOR = exports.STATUS_INFO_COLOR = exports.SKIN_SKU_WSV_2460 = exports.SKIN_SKU_WSV_2442 = exports.SKIN_SKU_WSV_1242 = exports.SKIN_SKU_USV245325 = exports.SKIN_SKU_BSV_48 = exports.SKIN_SKU_BSV_24 = exports.SHIFT2DON = exports.SHIFT2DOFF = exports.SHAPE_SVG_WIDTH = exports.SHAPE_SVG_PADDING = exports.SHAPE_SVG_DEPTH = exports.SHADE_LIGHT_PURPLE_COLOR = exports.SHADE_LIGHT_GREEN_COLOR = exports.SHADE_LIGHT_BLUE_COLOR = exports.SHADE_DARK_PURPLE_COLOR = exports.SHADE_DARK_GREEN_COLOR = exports.SHADE_DARK_BLUE_COLOR = exports.SET_WALL_COLOR = exports.SET_USER_DATA = exports.SET_STATE_PROPERTIES = exports.SET_ROTATE_STATUS = exports.SET_RELATED_LINE = exports.SET_PROPERTIES = exports.SET_PROJECT_PROPERTIES = exports.SET_PROJECT_ID = exports.SET_MOVE_STATUS = exports.SET_MOLDING = exports.SET_MODELLING = exports.SET_MODE = exports.SET_LINES_ATTRIBUTES = exports.SET_LAYER_PROPERTIES = exports.SET_ITEMS_ATTRIBUTES = exports.SET_IS_HELP = exports.SET_IS_CABINET_DRAWING = exports.SET_INITIAL_DOOR_STYLE = exports.SET_HOLES_ATTRIBUTES = exports.SET_HANDLE_MATERIAL = exports.SET_GROUP_PROPERTIES = exports.SET_GROUP_BARYCENTER = exports.SET_GROUP_ATTRIBUTES = exports.SET_FLOOR_STYLES = exports.SET_DOOR_STYLE = exports.SET_DOOR_HANDLE = exports.SET_DISTANT = exports.SET_COUNTER_TOP = exports.SET_BACKSPLASH_VISIBLE = void 0;
10
+ exports.ZOOM_VARIABLE = exports.WARRANTY_VIEW = exports.WARRANTY_SUPPORT = exports.WARNING_MESSAGE = exports.WALL_ITEM_MEASUREMENT_LINE_COLOR = exports.WALL_CABINET_LAYOUTPOS = exports.VIEWER3D_ACTIONS = exports.VIEWER2D_ACTIONS = exports.VERTEX_ACTIONS = exports.VANITY_CABINET_LAYOUTPOS = exports.VALIDATE_ITEM_POSTIONS = exports.USER_ACTIONS = exports.UPDATE_ZOOM_SCALE = exports.UPDATE_ROTATING_ITEM_CHANGED = exports.UPDATE_ROTATING_ITEM = exports.UPDATE_ROTATING = exports.UPDATE_POPUP_OPEN = exports.UPDATE_MOVING_STATE = exports.UPDATE_MOUSE_COORDS = exports.UPDATE_MOLDING = exports.UPDATE_ITEM_POSITION = exports.UPDATE_DRAWING_LINE = exports.UPDATE_DRAWING_ITEM = exports.UPDATE_DRAWING_HOLE_3D = exports.UPDATE_DRAWING_HOLE = exports.UPDATE_DRAGGING_VERTEX = exports.UPDATE_DRAGGING_LINE = exports.UPDATE_DRAGGING_ITEM_CHANGED = exports.UPDATE_DRAGGING_ITEM_3DY = exports.UPDATE_DRAGGING_ITEM_3DX = exports.UPDATE_DRAGGING_ITEM = exports.UPDATE_DRAGGING_HOLE_RULER_CHANGED = exports.UPDATE_DRAGGING_HOLE_CHANGED = exports.UPDATE_DRAGGING_HOLE_3D = exports.UPDATE_DRAGGING_HOLE = exports.UPDATE_CEIL_HEIGHT_UNIT = exports.UPDATE_CEIL_HEIGHT = exports.UPDATE_3D_CEIL_HEIGHT_UNIT = void 0;
11
11
  //API server
12
12
  // export const API_SERVER = 'http://localhost:3000/';
13
13
  // ACTIONS project
@@ -788,4 +788,6 @@ var SKIN_SKU_BSV_48 = exports.SKIN_SKU_BSV_48 = 'BSV48'; // 48" x 34.5" : For ba
788
788
  var SKIN_SKU_WSV_1242 = exports.SKIN_SKU_WSV_1242 = 'WSV1242'; // 11.25" x 42" : For 12" deep wall cabinets
789
789
  var SKIN_SKU_WSV_2442 = exports.SKIN_SKU_WSV_2442 = 'WSV2442'; // 23.25" x 42" : For 24" deep wall cabinets
790
790
  var SKIN_SKU_WSV_2460 = exports.SKIN_SKU_WSV_2460 = 'WSV2460'; // Usually used for CT3DR or CT2DR SKUs + stacked wall cabinets
791
- var SKIN_SKU_USV245325 = exports.SKIN_SKU_USV245325 = 'USV2453.25'; // 23.25" x 53.25" : For tall cabinets
791
+ var SKIN_SKU_USV245325 = exports.SKIN_SKU_USV245325 = 'USV2453.25'; // 23.25" x 53.25" : For tall cabinets
792
+
793
+ var DEFAULT_MOLDING_PIECE_LENGTH = exports.DEFAULT_MOLDING_PIECE_LENGTH = 96; // in inch, 8 feet, standard length for molding pieces
@@ -51,6 +51,7 @@ exports.getCentroidOfPolygon = getCentroidOfPolygon;
51
51
  exports.getHoleItems = getHoleItems;
52
52
  exports.getInterSect = getInterSect;
53
53
  exports.getLineInterSect = getLineInterSect;
54
+ exports.getLineSnapPointsOfItem = getLineSnapPointsOfItem;
54
55
  exports.getNormaline = getNormaline;
55
56
  exports.getPoylgonPoints = getPoylgonPoints;
56
57
  exports.getRelatedLines = void 0;
@@ -61,6 +62,7 @@ exports.intersectRect = intersectRect;
61
62
  exports.isBackWall = isBackWall;
62
63
  exports.isFrontWall = isFrontWall;
63
64
  exports.isLeftWall = isLeftWall;
65
+ exports.isOverlappedTwoItemsOnOneLine = isOverlappedTwoItemsOnOneLine;
64
66
  exports.isPointInArea = isPointInArea;
65
67
  exports.isPointInRect = isPointInRect;
66
68
  exports.isPointOnLineSegment = isPointOnLineSegment;
@@ -2947,4 +2949,83 @@ function getSnappedWallLines(item, layer, catalog) {
2947
2949
  }
2948
2950
  }
2949
2951
  return snappedWallLines;
2952
+ }
2953
+ function getLineSnapPointsOfItem(layer, curLine, item) {
2954
+ var _layer$lines2, _layer$vertices4, _line$vertices3, _layer$vertices5, _line$vertices4;
2955
+ // V0
2956
+ // /|
2957
+ // D0 /|-----------|
2958
+ // /| |
2959
+ // /| Item | ====> get D0, D1
2960
+ // /| |
2961
+ // D1 /|-----------|
2962
+ // /|
2963
+ // get v0, v1 of line
2964
+ var line = (_layer$lines2 = layer.lines) === null || _layer$lines2 === void 0 ? void 0 : _layer$lines2.get(curLine === null || curLine === void 0 ? void 0 : curLine.id);
2965
+ var v0 = (_layer$vertices4 = layer.vertices) === null || _layer$vertices4 === void 0 ? void 0 : _layer$vertices4.get(line === null || line === void 0 || (_line$vertices3 = line.vertices) === null || _line$vertices3 === void 0 ? void 0 : _line$vertices3.get(0));
2966
+ var v1 = (_layer$vertices5 = layer.vertices) === null || _layer$vertices5 === void 0 ? void 0 : _layer$vertices5.get(line === null || line === void 0 || (_line$vertices4 = line.vertices) === null || _line$vertices4 === void 0 ? void 0 : _line$vertices4.get(1));
2967
+ var pointGroup = [];
2968
+ if ((0, _helper.isEmpty)(v0) || (0, _helper.isEmpty)(v1)) return pointGroup;
2969
+ var itemRect = item === null || item === void 0 ? void 0 : item.rect;
2970
+ if (!(0, _helper.isEmpty)(itemRect)) {
2971
+ for (var i = 0; i < itemRect.length; i++) {
2972
+ if (distancePointFromLineSegment(v0, v1, itemRect[i].x, itemRect[i].y) < _constants.EPSILON) {
2973
+ pointGroup.push(itemRect[i]);
2974
+ }
2975
+ }
2976
+ }
2977
+ return pointGroup;
2978
+ }
2979
+ function isOverlappedTwoItemsOnOneLine(layer, curLine, srcItem, desItem) {
2980
+ var _layer$lines3, _layer$vertices6, _line$vertices5, _layer$vertices7, _line$vertices6, _S, _S2, _S3, _S4;
2981
+ if ((0, _helper.isEmpty)(layer) || (0, _helper.isEmpty)(curLine) || (0, _helper.isEmpty)(srcItem) || (0, _helper.isEmpty)(desItem) || (0, _helper.isEmpty)(desItem.D0) || (0, _helper.isEmpty)(desItem.D1)) return false;
2982
+ // get v0, v1 of line
2983
+ var line = (_layer$lines3 = layer.lines) === null || _layer$lines3 === void 0 ? void 0 : _layer$lines3.get(curLine === null || curLine === void 0 ? void 0 : curLine.id);
2984
+ var v0 = (_layer$vertices6 = layer.vertices) === null || _layer$vertices6 === void 0 ? void 0 : _layer$vertices6.get(line === null || line === void 0 || (_line$vertices5 = line.vertices) === null || _line$vertices5 === void 0 ? void 0 : _line$vertices5.get(0));
2985
+ var v1 = (_layer$vertices7 = layer.vertices) === null || _layer$vertices7 === void 0 ? void 0 : _layer$vertices7.get(line === null || line === void 0 || (_line$vertices6 = line.vertices) === null || _line$vertices6 === void 0 ? void 0 : _line$vertices6.get(1));
2986
+ var S0,
2987
+ S1,
2988
+ D0 = desItem === null || desItem === void 0 ? void 0 : desItem.D0,
2989
+ D1 = desItem === null || desItem === void 0 ? void 0 : desItem.D1;
2990
+ if ((0, _helper.isEmpty)(v0) || (0, _helper.isEmpty)(v1)) return false;
2991
+ // get distance from v0 to srcItem's S0, S1 and desItem(item or hole)'s D0, D1 are placed on line
2992
+ var srcPoints = getLineSnapPointsOfItem(layer, curLine, srcItem);
2993
+ if (srcPoints.length > 1) {
2994
+ S0 = srcPoints[0];
2995
+ S1 = srcPoints[1];
2996
+ }
2997
+ var disV0S0 = pointsDistance(v0.x, v0.y, (_S = S0) === null || _S === void 0 ? void 0 : _S.x, (_S2 = S0) === null || _S2 === void 0 ? void 0 : _S2.y);
2998
+ var disV0S1 = pointsDistance(v0.x, v0.y, (_S3 = S1) === null || _S3 === void 0 ? void 0 : _S3.x, (_S4 = S1) === null || _S4 === void 0 ? void 0 : _S4.y);
2999
+ var disV0D0 = pointsDistance(v0.x, v0.y, D0.x, D0.y);
3000
+ var disV0D1 = pointsDistance(v0.x, v0.y, D1.x, D1.y);
3001
+ // detect two items are overlapped
3002
+ var maxDisV0S = Math.max(disV0S0, disV0S1);
3003
+ var minDisV0S = Math.min(disV0S0, disV0S1);
3004
+ var maxDisV0D = Math.max(disV0D0, disV0D1);
3005
+ var minDisV0D = Math.min(disV0D0, disV0D1);
3006
+ if (maxDisV0S > maxDisV0D && maxDisV0D - minDisV0S > _constants.EPSILON) {
3007
+ // d0 s0 d1 s1 ===> maxDisV0S: v0s1, minDisV0S: v0s0, maxDisV0D: v0d1, minDisV0D: v0d0
3008
+ // v0 __________________________ v1
3009
+ // | | | |
3010
+ // | | | |
3011
+ // |__DI__|__| |
3012
+ // |__SI__|
3013
+ /////////////////////////////////////////
3014
+ // s0 d0 d1 s1 ===> maxDisV0S: v0s1, minDisV0S: v0s0, maxDisV0D: v0d1, minDisV0D: v0d0
3015
+ // v0 __________________________ v1
3016
+ // | | | |
3017
+ // | |__DI__| |
3018
+ // |_________SI_______|
3019
+ return true;
3020
+ } else if (minDisV0S < minDisV0D && maxDisV0S - minDisV0D > _constants.EPSILON) {
3021
+ // s0 d0 s1 d1 ===> maxDisV0S: v0s1, minDisV0S: v0s0, maxDisV0D: v0d1, minDisV0D: v0d0
3022
+ // v0 __________________________ v1
3023
+ // | | | |
3024
+ // | |__DI__|
3025
+ // |__SI_____|
3026
+ //
3027
+ return true;
3028
+ } else {
3029
+ return false;
3030
+ }
2950
3031
  }
@@ -1220,7 +1220,7 @@ function handleExternalEvent(_x0) {
1220
1220
  function _handleExternalEvent() {
1221
1221
  _handleExternalEvent = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0(props) {
1222
1222
  var _evt$payload3, _evt$payload4;
1223
- var evt, state, layerId, layer, _evt$payload, _state$catalog, cdsItems, itemKeys, _loop6, i, newScene, tempState, _props$onInternalEven, sLineCnt, element, _state$viewer2D, _evt$payload$initialP, mouseX, mouseY, v2d, vPosX, vPosY, layerID, defaulTitle, _evt$payload5, doorStyle, itemCDS, applyScope, _evt$payload5$itemIds, itemIds, _layerId, allItems, targetItems, idSet, selectedItemIds, _cdsItems, _loop7, _i2, _props$onInternalEven2, _evt$payload6, roomShapeType, width, height, measurementUnit, _doorStyle, value, _value, _evt$payload7, moldingInfo, isGlobal, distElement, _distElement, _evt$payload8, option, _value2, _layerId2, _layer, _layer$getIn, selectedLines, selectedHoles, selectedItems, _i4, _i5, _i6, _evt$payload9, _evt$payload0, _evt$payload1, _evt$payload10, _layerID, _layer2, orginalItemInfo, originalItem, originalItemPos, replaceItem, _props$onInternalEven3, sceneData, currentTexture, _t5, _t6, _t7;
1223
+ var evt, state, layerId, layer, _evt$payload, _state$catalog, cdsItems, itemKeys, _loop6, i, newScene, tempState, _props$onInternalEven, sLineCnt, element, _state$viewer2D, _evt$payload$initialP, mouseX, mouseY, v2d, vPosX, vPosY, layerID, defaulTitle, _evt$payload5, doorStyle, itemCDS, applyScope, _evt$payload5$itemIds, itemIds, _layerId, allItems, targetItems, idSet, selectedItemIds, _cdsItems, _loop7, _i2, _props$onInternalEven2, _evt$payload6, roomShapeType, width, height, measurementUnit, _doorStyle, value, _value, _evt$payload7, moldingInfo, isGlobal, distElement, _distElement, _evt$payload8, option, _value2, _layerId2, _layer, _layer$getIn, selectedLines, selectedHoles, selectedItems, _i4, _i5, _i6, _evt$payload9, _evt$payload0, _evt$payload1, _evt$payload10, _layerID, _layer2, orginalItemInfo, originalItem, originalItemPos, replaceItem, _props$configData$mol, _props$configData, _props$configData$ski, _props$configData2, _props$onInternalEven3, sceneData, currentTexture, moldingPieceLength, skinPanelExclusionSKUs, _t5, _t6, _t7;
1224
1224
  return _regenerator["default"].wrap(function (_context11) {
1225
1225
  while (1) switch (_context11.prev = _context11.next) {
1226
1226
  case 0:
@@ -1615,10 +1615,12 @@ function _handleExternalEvent() {
1615
1615
  case 48:
1616
1616
  sceneData = state.scene.toJS(); // get molding data for "ReviewForQuote"
1617
1617
  currentTexture = layer.doorStyle !== null || layer.doorStyle !== undefined ? layer.doorStyle : props.state.doorStyle.toJS();
1618
- sceneData.layers[layerId].moldingData = (0, _molding.getMoldingDataOfScene2)(layer, props.catalog, currentTexture);
1618
+ moldingPieceLength = (_props$configData$mol = props === null || props === void 0 || (_props$configData = props.configData) === null || _props$configData === void 0 ? void 0 : _props$configData.moldingPieceLength) !== null && _props$configData$mol !== void 0 ? _props$configData$mol : _constants.DEFAULT_MOLDING_PIECE_LENGTH;
1619
+ sceneData.layers[layerId].moldingData = (0, _molding.getMoldingDataOfScene2)(layer, props.catalog, currentTexture, moldingPieceLength);
1619
1620
 
1620
1621
  // get skin panel data
1621
- sceneData.layers[layerId].skinPanelData = (0, _skinPanelEngine.computeSkinPanels)(layer);
1622
+ skinPanelExclusionSKUs = (_props$configData$ski = props === null || props === void 0 || (_props$configData2 = props.configData) === null || _props$configData2 === void 0 ? void 0 : _props$configData2.skinPanelExclusionSKUs) !== null && _props$configData$ski !== void 0 ? _props$configData$ski : [];
1623
+ sceneData.layers[layerId].skinPanelData = (0, _skinPanelEngine.computeSkinPanels)(layer, skinPanelExclusionSKUs);
1622
1624
 
1623
1625
  // send scene object from 3DTool to HostApp using internalEvent
1624
1626
  (_props$onInternalEven3 = props.onInternalEvent) === null || _props$onInternalEven3 === void 0 || _props$onInternalEven3.call(props, {
@@ -13,7 +13,6 @@ exports.getLinesFromItems = getLinesFromItems;
13
13
  exports.getLinesFromItems2 = getLinesFromItems2;
14
14
  exports.getLinesOfItem = getLinesOfItem;
15
15
  exports.getLinesOfItem2 = getLinesOfItem2;
16
- exports.getMoldingDataOfScene = getMoldingDataOfScene;
17
16
  exports.getMoldingDataOfScene2 = getMoldingDataOfScene2;
18
17
  exports.hasMoldingLayout = hasMoldingLayout;
19
18
  exports.isAttachedWall = isAttachedWall;
@@ -968,7 +967,7 @@ function createMonldingGroup(oldMG, layer, molding, catalog) {
968
967
  newMG = getMDPoints(newMG);
969
968
  return newMG;
970
969
  }
971
- function getMoldingDataOfScene2(layer, catalog, doorStyle) {
970
+ function getMoldingDataOfScene2(layer, catalog, doorStyle, moldingPieceLength) {
972
971
  var _layer$items;
973
972
  var moldingData = [];
974
973
  var items = layer === null || layer === void 0 || (_layer$items = layer.items) === null || _layer$items === void 0 ? void 0 : _layer$items.toArray();
@@ -1130,10 +1129,10 @@ function getMoldingDataOfScene2(layer, catalog, doorStyle) {
1130
1129
  if (idx < 0) moldingData.push(_objectSpread(_objectSpread({}, ml.molding), {}, {
1131
1130
  doorStyle: ml.doorStyle,
1132
1131
  totalLength: mlLength,
1133
- count: Math.ceil(mlLength * 1.1 / 96)
1132
+ count: Math.ceil(mlLength * 1.1 / moldingPieceLength)
1134
1133
  }));else {
1135
1134
  moldingData[idx].totalLength += mlLength;
1136
- moldingData[idx].count = Math.ceil(moldingData[idx].totalLength * 1.1 / 96);
1135
+ moldingData[idx].count = Math.ceil(moldingData[idx].totalLength * 1.1 / moldingPieceLength);
1137
1136
  }
1138
1137
  };
1139
1138
  for (var k = 0; k < moldingLines.length; k++) {
@@ -1141,237 +1140,5 @@ function getMoldingDataOfScene2(layer, catalog, doorStyle) {
1141
1140
  }
1142
1141
  // console.log('moldingData: ', moldingData);
1143
1142
 
1144
- return moldingData;
1145
- }
1146
- function getMoldingDataOfScene(layer, catalog, doorStyle) {
1147
- var moldingData = [];
1148
- var items = layer.items.toArray();
1149
- var moldings = [];
1150
- // get all moldings info
1151
- items.forEach(function (itemCat) {
1152
- var _itemCat$molding;
1153
- itemCat === null || itemCat === void 0 || (_itemCat$molding = itemCat.molding) === null || _itemCat$molding === void 0 || _itemCat$molding.forEach(function (molding) {
1154
- if (!moldings.some(function (m) {
1155
- return m.name === molding.name;
1156
- })) moldings.push(molding);
1157
- });
1158
- });
1159
-
1160
- // calc normal molding
1161
- moldings.forEach(function (molding) {
1162
- var itemGroups = [];
1163
- var temp_items = [];
1164
- items.forEach(function (item) {
1165
- if (item.molding.some(function (mol) {
1166
- return mol.itemID === molding.itemID;
1167
- }) && isEnableItemForMolding(layer, item)) {
1168
- temp_items.push(item);
1169
- }
1170
- });
1171
- if (temp_items.length) {
1172
- while (temp_items.length > 0) {
1173
- var itemGroup = [temp_items[0]];
1174
- var _loop10 = function _loop10(_idx) {
1175
- if (!itemGroup.some(function (it) {
1176
- return it.id === temp_items[_idx].id;
1177
- }) && isItemSnappedGroup(temp_items[_idx], itemGroup)) {
1178
- itemGroup.push(temp_items[_idx]);
1179
- _idx = 0;
1180
- }
1181
- idx = _idx;
1182
- };
1183
- for (var idx = 0; idx < temp_items.length; idx++) {
1184
- _loop10(idx);
1185
- }
1186
- itemGroup.forEach(function (item) {
1187
- var index = temp_items.findIndex(function (it) {
1188
- return it.id === item.id;
1189
- });
1190
- if (index > -1) {
1191
- temp_items.splice(index, 1);
1192
- }
1193
- });
1194
- itemGroups.push(itemGroup);
1195
- }
1196
- var molding_totalLength = 0;
1197
- itemGroups.forEach(function (itemgroup) {
1198
- var allLineRects = _export.GeometryUtils.buildRectFromLines(layer, _export.GeometryUtils.getAllLines(layer));
1199
- var items = (0, _toConsumableArray2["default"])(itemgroup);
1200
- var MGlines = getLinesOfItem(items[0], allLineRects, catalog);
1201
- items = sortItemsByDistance(items, items[0]);
1202
- var _loop11 = function _loop11() {
1203
- var itemLines = getLinesOfItem(items[i], allLineRects, catalog);
1204
- var temp_MGLines = [];
1205
- MGlines.forEach(function (line) {
1206
- var idx = itemLines.findIndex(function (itemLine) {
1207
- return isLinesOverlapped(line, itemLine);
1208
- });
1209
- var curItemLine = itemLines[idx];
1210
- if (idx > -1) {
1211
- if (!(_export.GeometryUtils.samePoints(line[0], curItemLine[0]) && _export.GeometryUtils.samePoints(line[1], curItemLine[1]) || _export.GeometryUtils.samePoints(line[0], curItemLine[1]) && _export.GeometryUtils.samePoints(line[1], curItemLine[0]))) {
1212
- var MGLine = mergeOverlappedLines(line, curItemLine);
1213
- temp_MGLines.push(MGLine);
1214
- }
1215
- itemLines.splice(idx, 1);
1216
- } else {
1217
- temp_MGLines.push(line);
1218
- }
1219
- });
1220
- itemLines.forEach(function (itemLine) {
1221
- return temp_MGLines.push(itemLine);
1222
- });
1223
- MGlines = [].concat(temp_MGLines);
1224
- };
1225
- for (var i = 1; i < items.length; i++) {
1226
- _loop11();
1227
- }
1228
- MGlines.forEach(function (line) {
1229
- molding_totalLength += _export.GeometryUtils.verticesDistance(line[0], line[1]);
1230
- });
1231
- });
1232
- molding_totalLength = (0, _convertUnitsLite.convert)(molding_totalLength).from('cm').to('in');
1233
- moldingData.push(_objectSpread(_objectSpread({}, molding), {}, {
1234
- doorStyle: doorStyle,
1235
- count: Math.ceil(molding_totalLength * 1.1 / 96)
1236
- }));
1237
- }
1238
- });
1239
-
1240
- // calc toe kick molding
1241
- var tmp = [];
1242
- items.forEach(function (item) {
1243
- if (item.category === 'cabinet' && !item.cabinet_category.toLowerCase().includes('microwave')) {
1244
- tmp.push(item);
1245
- }
1246
- });
1247
- var tmpMoldingData = [];
1248
- var toedoorStyles = [];
1249
- tmp.map(function (item) {
1250
- var _item$molding2;
1251
- if (item.layoutpos === _constants.BASE_CABINET_LAYOUTPOS && ((0, _helper.isEmpty)(item.molding) || ((_item$molding2 = item.molding) === null || _item$molding2 === void 0 ? void 0 : _item$molding2.length) < 1 || !isEnableItemForMolding(layer, item))) {
1252
- var w = item.properties.get('width').get('_length');
1253
- var wUnit = item.properties.get('width').get('_unit') || 'cm';
1254
- w = (0, _convertUnitsLite.convert)(w / 2).from(wUnit).to('cm');
1255
- var h = item.properties.get('depth').get('_length');
1256
- var hUnit = item.properties.get('depth').get('_unit') || 'cm';
1257
- h = (0, _convertUnitsLite.convert)(h / 2).from(hUnit).to('cm');
1258
- var outline = null;
1259
- var element = catalog.elements[item.get('type')];
1260
- if (!element) element = catalog.elements[(0, _utils.returnReplaceableDeepSearchType)(item.get('type'))];
1261
- outline = element.info.outline;
1262
- var len = 0;
1263
- if (outline) {
1264
- // Extract Points from `outline`
1265
- var outlinePaths = outline.paths;
1266
- var outlineWidth = outline.svgWidth;
1267
- var outlineHeight = outline.svgHeight;
1268
- var outlinePoints = []; // Hold Points Of SVG
1269
- var _iterator5 = _createForOfIteratorHelper(outlinePaths),
1270
- _step5;
1271
- try {
1272
- for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
1273
- var path = _step5.value;
1274
- var _iterator6 = _createForOfIteratorHelper(path.subPaths),
1275
- _step6;
1276
- try {
1277
- for (_iterator6.s(); !(_step6 = _iterator6.n()).done;) {
1278
- var subPath = _step6.value;
1279
- outlinePoints = outlinePoints.concat(subPath.getPoints());
1280
- }
1281
- } catch (err) {
1282
- _iterator6.e(err);
1283
- } finally {
1284
- _iterator6.f();
1285
- }
1286
- }
1287
- } catch (err) {
1288
- _iterator5.e(err);
1289
- } finally {
1290
- _iterator5.f();
1291
- }
1292
- var maxX = outlinePoints[0].x,
1293
- minX = outlinePoints[0].x;
1294
- var maxY = outlinePoints[0].y,
1295
- minY = outlinePoints[0].y;
1296
- outlinePoints.forEach(function (point) {
1297
- if (point.x > maxX) {
1298
- maxX = point.x;
1299
- }
1300
- if (point.x < minX) {
1301
- minX = point.x;
1302
- }
1303
- if (point.y > maxY) {
1304
- maxY = point.y;
1305
- }
1306
- if (point.y < minY) {
1307
- minY = point.y;
1308
- }
1309
- });
1310
- outlinePoints.forEach(function (point) {
1311
- if (_export.GeometryUtils.isPointInRect([{
1312
- x: minX,
1313
- y: minY
1314
- }, {
1315
- x: minX,
1316
- y: maxY
1317
- }, {
1318
- x: maxX,
1319
- y: maxY
1320
- }, {
1321
- x: maxX,
1322
- y: minY
1323
- }], point)) {
1324
- if (point.x > 10) len += (point.x / outlineWidth - 0.5) * w * 2 + h * 2 - (point.y / outlineHeight - 0.5) * h * 2;
1325
- }
1326
- });
1327
- len = (0, _convertUnitsLite.convert)(len).from('cm').to('in');
1328
- } else {
1329
- w = (0, _convertUnitsLite.convert)(w * 2).from('cm').to('in');
1330
- len += w;
1331
- }
1332
- var doorIndex = toedoorStyles.findIndex(function (a) {
1333
- var iDS = item === null || item === void 0 ? void 0 : item.doorStyle;
1334
- if (!iDS) return false;
1335
- if (!iDS.hasOwnProperty('id')) {
1336
- iDS = iDS.toJS();
1337
- }
1338
- return a.doorStyle.id === iDS.id && (0, _utils.isEqualInstallationType)(a.doorStyle, iDS);
1339
- });
1340
- if (doorIndex > -1) {
1341
- toedoorStyles[doorIndex].totalLength += len;
1342
- } else {
1343
- toedoorStyles.push({
1344
- doorStyle: item.doorStyle.hasOwnProperty('id') ? item.doorStyle : item.doorStyle && item.doorStyle.toJS(),
1345
- totalLength: len
1346
- });
1347
- }
1348
- }
1349
- });
1350
- toedoorStyles.forEach(function (doorStyle) {
1351
- var skuName = (0, _utils.getToeKickSKU)(doorStyle.doorStyle, catalog);
1352
- var thumbnail = skuName ? skuName : '';
1353
- // moldings.forEach(molding => {
1354
- // if (
1355
- // molding.name ===
1356
- // getToeKickSKU(
1357
- // doorStyle.doorStyle,
1358
- // catalog,
1359
- // true
1360
- // )
1361
- // )
1362
- // thumbnail = molding.thumbnail;
1363
- // });
1364
-
1365
- doorStyle.totalLength && tmpMoldingData.push({
1366
- name: _constants.TOE_KICK_MOLDING,
1367
- sku: (0, _utils.getToeKickSKU)(doorStyle.doorStyle, catalog),
1368
- thumbnail: thumbnail,
1369
- category: 'molding',
1370
- type: 'cabinet',
1371
- doorStyle: doorStyle.doorStyle,
1372
- count: Math.ceil(doorStyle.totalLength * 1.1 / 96)
1373
- });
1374
- });
1375
- if (tmpMoldingData.length > 0) moldingData = [].concat((0, _toConsumableArray2["default"])(moldingData), tmpMoldingData);
1376
1143
  return moldingData;
1377
1144
  }
@@ -311,14 +311,27 @@ function buildSkinPanelData(faces) {
311
311
  }
312
312
  return result;
313
313
  }
314
+ function shouldExcludeSkinPanel(itemJS, exclusionSet) {
315
+ var _itemJS$doorStyle;
316
+ var cabinetSku = itemJS === null || itemJS === void 0 ? void 0 : itemJS.sku_number;
317
+ var doorColorSku = itemJS === null || itemJS === void 0 || (_itemJS$doorStyle = itemJS.doorStyle) === null || _itemJS$doorStyle === void 0 ? void 0 : _itemJS$doorStyle.sku;
318
+ if (!cabinetSku || !doorColorSku) return false;
319
+ return exclusionSet.has("".concat(cabinetSku, "-").concat(doorColorSku));
320
+ }
314
321
  function computeSkinPanels(layer) {
322
+ var skinPanelExclusionSKUs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
323
+ var exclusionSet = new Set(skinPanelExclusionSKUs);
324
+
315
325
  // Get candidate skin panel items and other items
316
326
  var _collectLayerItems = collectLayerItems(layer),
317
327
  skinPanelItems = _collectLayerItems.skinPanelItems,
318
328
  otherItems = _collectLayerItems.otherItems;
329
+ var filteredSkinPanelItems = skinPanelItems.filter(function (item) {
330
+ return !shouldExcludeSkinPanel(item.toJS(), exclusionSet);
331
+ });
319
332
 
320
333
  // Get all skin face list of [skinPanelItems] & [otherItems]
321
- var skinFaces = collectFaces(skinPanelItems, layer);
334
+ var skinFaces = collectFaces(filteredSkinPanelItems, layer);
322
335
  var otherFaces = collectFaces(otherItems, layer);
323
336
  skinFaces = filterFacesBlockedByFaces(skinFaces, skinFaces);
324
337
  skinFaces = filterFacesBlockedByFaces(skinFaces, otherFaces);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "kitchen-simulator",
3
- "version": "4.4.0",
3
+ "version": "4.4.2",
4
4
  "description": "It is a kitchen simulator (self-contained micro-frontend).",
5
5
  "license": "MIT",
6
6
  "main": "lib/index.js",