kitchen-simulator 4.0.1-react-18 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +3 -0
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +156 -108
  4. package/es/LiteRenderer.js +159 -130
  5. package/es/actions/export.js +25 -12
  6. package/es/assets/gltf/door_sliding.bin +0 -0
  7. package/es/assets/img/png/helper/video_preview_start.png +0 -0
  8. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  9. package/es/catalog/catalog.js +21 -5
  10. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  11. package/es/catalog/properties/export.js +21 -0
  12. package/es/catalog/properties/property-checkbox.js +68 -0
  13. package/es/catalog/properties/property-color.js +39 -0
  14. package/es/catalog/properties/property-enum.js +50 -0
  15. package/es/catalog/properties/property-hidden.js +19 -0
  16. package/es/catalog/properties/property-lenght-measure.js +100 -0
  17. package/es/catalog/properties/property-length-measure.js +84 -0
  18. package/es/catalog/properties/property-length-measure_hole.js +100 -0
  19. package/es/catalog/properties/property-number.js +48 -0
  20. package/es/catalog/properties/property-read-only.js +26 -0
  21. package/es/catalog/properties/property-string.js +48 -0
  22. package/es/catalog/properties/property-toggle.js +39 -0
  23. package/es/catalog/properties/shared-property-style.js +14 -0
  24. package/es/catalog/utils/exporter.js +1 -0
  25. package/es/catalog/utils/item-loader.js +17 -12
  26. package/es/class/hole.js +0 -2
  27. package/es/class/item.js +95 -69
  28. package/es/class/line.js +4 -8
  29. package/es/class/project.js +91 -80
  30. package/es/components/content.js +5 -2
  31. package/es/components/export.js +4 -6
  32. package/es/components/style/button.js +106 -0
  33. package/es/components/style/cancel-button.js +21 -0
  34. package/es/components/style/content-container.js +30 -0
  35. package/es/components/style/content-title.js +25 -0
  36. package/es/components/style/delete-button.js +24 -0
  37. package/es/components/style/export.js +28 -2
  38. package/es/components/style/form-block.js +20 -0
  39. package/es/components/style/form-color-input.js +26 -0
  40. package/es/components/style/form-label.js +22 -0
  41. package/es/components/style/form-number-input.js +11 -22
  42. package/es/components/style/form-number-input_2.js +200 -0
  43. package/es/components/style/form-select.js +19 -0
  44. package/es/components/style/form-slider.js +60 -0
  45. package/es/components/style/form-submit-button.js +25 -0
  46. package/es/components/style/form-text-input.js +69 -0
  47. package/es/components/viewer2d/group.js +5 -4
  48. package/es/components/viewer2d/item.js +339 -299
  49. package/es/components/viewer2d/layer.js +1 -1
  50. package/es/components/viewer2d/line.js +17 -47
  51. package/es/components/viewer2d/ruler.js +5 -3
  52. package/es/components/viewer2d/rulerDist.js +8 -7
  53. package/es/components/viewer2d/rulerX.js +3 -0
  54. package/es/components/viewer2d/rulerY.js +3 -0
  55. package/es/components/viewer2d/scene.js +4 -1
  56. package/es/components/viewer2d/state.js +1 -1
  57. package/es/components/viewer2d/utils.js +2 -2
  58. package/es/components/viewer2d/viewer2d.js +51 -84
  59. package/es/components/viewer3d/scene-creator.js +51 -15
  60. package/es/components/viewer3d/viewer3d-first-person.js +8 -0
  61. package/es/components/viewer3d/viewer3d.js +80 -88
  62. package/es/constants.js +6 -2
  63. package/es/devLiteRenderer.js +491 -150
  64. package/es/index.js +567 -25
  65. package/es/models.js +2 -1
  66. package/es/plugins/SVGLoader.js +1414 -0
  67. package/es/plugins/console-debugger.js +0 -2
  68. package/es/styles/export.js +5 -0
  69. package/es/styles/tabs.css +40 -0
  70. package/es/utils/geometry.js +52 -96
  71. package/es/utils/helper.js +38 -1
  72. package/es/utils/isolate-event-handler.js +781 -577
  73. package/es/utils/molding.js +457 -11
  74. package/lib/AppContext.js +1 -1
  75. package/lib/LiteKitchenConfigurator.js +155 -108
  76. package/lib/LiteRenderer.js +158 -130
  77. package/lib/actions/export.js +35 -39
  78. package/lib/assets/gltf/door_sliding.bin +0 -0
  79. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  80. package/lib/assets/img/svg/bottombar/elevation.svg +12 -5
  81. package/lib/catalog/catalog.js +20 -4
  82. package/lib/catalog/holes/window-clear/planner-element.js +2 -2
  83. package/lib/catalog/properties/export.js +81 -0
  84. package/lib/catalog/properties/property-checkbox.js +76 -0
  85. package/lib/catalog/properties/property-color.js +47 -0
  86. package/lib/catalog/properties/property-enum.js +58 -0
  87. package/lib/catalog/properties/property-hidden.js +27 -0
  88. package/lib/catalog/properties/property-lenght-measure.js +108 -0
  89. package/lib/catalog/properties/property-length-measure.js +92 -0
  90. package/lib/catalog/properties/property-length-measure_hole.js +108 -0
  91. package/lib/catalog/properties/property-number.js +56 -0
  92. package/lib/catalog/properties/property-read-only.js +34 -0
  93. package/lib/catalog/properties/property-string.js +56 -0
  94. package/lib/catalog/properties/property-toggle.js +47 -0
  95. package/lib/catalog/properties/shared-property-style.js +21 -0
  96. package/lib/catalog/utils/exporter.js +1 -0
  97. package/lib/catalog/utils/item-loader.js +17 -12
  98. package/lib/class/hole.js +0 -2
  99. package/lib/class/item.js +93 -67
  100. package/lib/class/line.js +3 -7
  101. package/lib/class/project.js +91 -80
  102. package/lib/components/content.js +5 -2
  103. package/lib/components/export.js +6 -26
  104. package/lib/components/style/button.js +115 -0
  105. package/lib/components/style/cancel-button.js +29 -0
  106. package/lib/components/style/content-container.js +38 -0
  107. package/lib/components/style/content-title.js +35 -0
  108. package/lib/components/style/delete-button.js +34 -0
  109. package/lib/components/style/export.js +105 -1
  110. package/lib/components/style/form-block.js +28 -0
  111. package/lib/components/style/form-color-input.js +34 -0
  112. package/lib/components/style/form-label.js +30 -0
  113. package/lib/components/style/form-number-input.js +11 -22
  114. package/lib/components/style/form-number-input_2.js +209 -0
  115. package/lib/components/style/form-select.js +29 -0
  116. package/lib/components/style/form-slider.js +68 -0
  117. package/lib/components/style/form-submit-button.js +35 -0
  118. package/lib/components/style/form-text-input.js +78 -0
  119. package/lib/components/viewer2d/group.js +5 -4
  120. package/lib/components/viewer2d/item.js +337 -297
  121. package/lib/components/viewer2d/layer.js +1 -1
  122. package/lib/components/viewer2d/line.js +17 -47
  123. package/lib/components/viewer2d/ruler.js +4 -2
  124. package/lib/components/viewer2d/rulerDist.js +8 -7
  125. package/lib/components/viewer2d/rulerX.js +3 -0
  126. package/lib/components/viewer2d/rulerY.js +3 -0
  127. package/lib/components/viewer2d/scene.js +4 -1
  128. package/lib/components/viewer2d/state.js +1 -1
  129. package/lib/components/viewer2d/utils.js +2 -2
  130. package/lib/components/viewer2d/viewer2d.js +49 -81
  131. package/lib/components/viewer3d/scene-creator.js +49 -13
  132. package/lib/components/viewer3d/viewer3d-first-person.js +8 -0
  133. package/lib/components/viewer3d/viewer3d.js +77 -84
  134. package/lib/constants.js +11 -7
  135. package/lib/devLiteRenderer.js +489 -148
  136. package/lib/index.js +567 -25
  137. package/lib/models.js +2 -1
  138. package/lib/plugins/SVGLoader.js +1419 -0
  139. package/lib/plugins/console-debugger.js +0 -2
  140. package/lib/styles/export.js +13 -0
  141. package/lib/styles/tabs.css +40 -0
  142. package/lib/utils/geometry.js +52 -96
  143. package/lib/utils/helper.js +40 -1
  144. package/lib/utils/isolate-event-handler.js +781 -576
  145. package/lib/utils/molding.js +458 -9
  146. package/package.json +21 -16
  147. package/es/mocks/appliancePayload.json +0 -27
  148. package/es/mocks/cabinetPayload.json +0 -1914
  149. package/es/mocks/cabinetPayload2.json +0 -76
  150. package/es/mocks/dataBundle2.json +0 -4
  151. package/es/mocks/distancePayload.json +0 -6
  152. package/es/mocks/doorStylePayload2.json +0 -84
  153. package/es/mocks/furnishingPayload.json +0 -23
  154. package/es/mocks/itemCDSPayload.json +0 -27
  155. package/es/mocks/lightingPayload.json +0 -23
  156. package/es/mocks/mockProps.json +0 -43
  157. package/es/mocks/mockProps2.json +0 -9
  158. package/es/mocks/moldingPayload.json +0 -19
  159. package/es/mocks/projectItemsCatalog.json +0 -133
  160. package/es/mocks/rectangleShape.json +0 -238
  161. package/es/mocks/replaceCabinetPayload.json +0 -81
  162. package/es/mocks/roomShapePayload.json +0 -5
  163. package/es/useAppContext.js +0 -8
  164. package/lib/mocks/appliancePayload.json +0 -27
  165. package/lib/mocks/cabinetPayload.json +0 -1914
  166. package/lib/mocks/cabinetPayload2.json +0 -76
  167. package/lib/mocks/dataBundle2.json +0 -4
  168. package/lib/mocks/distancePayload.json +0 -6
  169. package/lib/mocks/doorStylePayload2.json +0 -84
  170. package/lib/mocks/furnishingPayload.json +0 -23
  171. package/lib/mocks/itemCDSPayload.json +0 -27
  172. package/lib/mocks/lightingPayload.json +0 -23
  173. package/lib/mocks/mockProps.json +0 -43
  174. package/lib/mocks/mockProps2.json +0 -9
  175. package/lib/mocks/moldingPayload.json +0 -19
  176. package/lib/mocks/projectItemsCatalog.json +0 -133
  177. package/lib/mocks/rectangleShape.json +0 -238
  178. package/lib/mocks/replaceCabinetPayload.json +0 -81
  179. package/lib/mocks/roomShapePayload.json +0 -5
  180. package/lib/useAppContext.js +0 -16
@@ -1,13 +1,12 @@
1
1
  import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
- import React, { useEffect, useMemo, useRef, useState } from 'react';
2
+ import React, { useState } from 'react';
3
3
  import PropTypes from 'prop-types';
4
4
  import RulerDist from "./rulerDist";
5
5
  import { convert } from "../../utils/convert-units-lite";
6
6
  import { GeometryUtils } from "../../utils/export";
7
7
  import { MODE_ROTATING_ITEM, WALL_CABINET_LAYOUTPOS } from "../../constants";
8
- import { isWarningItem } from "./utils";
8
+ import { isEmpty, isWarningItem, returnReplaceableDeepSearchType } from "./utils";
9
9
  import { findCatalogElement } from "../../utils/geometry";
10
- import { useAppContext } from "../../useAppContext";
11
10
  var STYLE_LINE = {
12
11
  fill: '#0096fd',
13
12
  stroke: '#0096fd'
@@ -22,15 +21,14 @@ var STYLE_CIRCLE2 = {
22
21
  stroke: '#0096fd',
23
22
  cursor: 'ew-resize'
24
23
  };
25
- export default function Item(_ref) {
24
+ export default function Item(_ref, _ref2) {
26
25
  var _element$render2D;
27
26
  var layer = _ref.layer,
28
27
  item = _ref.item,
29
28
  scene = _ref.scene,
30
29
  catalog = _ref.catalog,
31
30
  mode = _ref.mode;
32
- var _useAppContext = useAppContext(),
33
- itemsActions = _useAppContext.itemsActions;
31
+ var itemsActions = _ref2.itemsActions;
34
32
  var x = item.x,
35
33
  y = item.y,
36
34
  rotation = item.rotation,
@@ -38,8 +36,14 @@ export default function Item(_ref) {
38
36
  layoutpos = item.layoutpos;
39
37
  var showBaseCabinetMeasure = scene.showBaseCabinetMeasure,
40
38
  showWallCabinetMeasure = scene.showWallCabinetMeasure;
39
+ var vertices = layer.vertices;
41
40
  var layerID = scene.selectedLayer;
42
41
  var element = catalog.getElement(item.type);
42
+ var allLines;
43
+ var curiteminfo;
44
+ var allLineRects;
45
+ var allItemRect;
46
+ var width, height;
43
47
  var altitude = item.properties.getIn(['altitude', '_length']);
44
48
  var _useState = useState(false),
45
49
  _useState2 = _slicedToArray(_useState, 2),
@@ -49,79 +53,118 @@ export default function Item(_ref) {
49
53
  _useState4 = _slicedToArray(_useState3, 2),
50
54
  antiClockRotateState = _useState4[0],
51
55
  setAntiClockRotateState = _useState4[1];
52
-
53
- // ----- helpers -----
54
- function point(px, py) {
56
+ var val = {
57
+ pos: {
58
+ x: item.x,
59
+ y: item.y
60
+ },
61
+ rotRad: item.rotation / 180 * Math.PI
62
+ };
63
+ var tempWidth = item.properties.get('width');
64
+ var tempHeight = item.properties.get('depth');
65
+ if (tempWidth || tempHeight) {
66
+ width = convert(tempWidth.get('_length')).from(tempWidth.get('_unit')).to('cm');
67
+ height = convert(tempHeight.get('_length')).from(tempHeight.get('_unit')).to('cm');
68
+ } else {
69
+ width = convert(element.info.sizeinfo.width).from('in').to('cm');
70
+ height = convert(element.info.sizeinfo.depth).from('in').to('cm');
71
+ }
72
+ var angle = rotation + 90;
73
+ val.size = {
74
+ width: width,
75
+ height: height
76
+ };
77
+ function point(x, y) {
55
78
  return {
56
- x: px,
57
- y: py
79
+ x: x,
80
+ y: y
58
81
  };
59
82
  }
60
83
  function getCalcRectFromItem(items) {
61
- var ix = items.pos.x;
62
- var iy = items.pos.y;
84
+ var x = items.pos.x;
85
+ var y = items.pos.y;
63
86
  var w = items.size.width / 2;
64
87
  var h = items.size.height / 2;
65
88
  var rotRad = items.rotRad;
66
89
  var mh = 3 * h / 4;
67
- var mx = ix - w * Math.cos(rotRad) - mh * Math.sin(rotRad);
68
- var my = iy - w * Math.sin(rotRad) + mh * Math.cos(rotRad);
69
- var m2x = ix + w * Math.cos(rotRad) - mh * Math.sin(rotRad);
70
- var m2y = iy + w * Math.sin(rotRad) + mh * Math.cos(rotRad);
71
- var m3x = ix - h * Math.sin(rotRad);
72
- var m3y = iy + h * Math.cos(rotRad);
73
- var m1x = ix + h * Math.sin(rotRad);
74
- var m1y = iy - h * Math.cos(rotRad);
90
+ var mx = x - w * Math.cos(rotRad) - mh * Math.sin(rotRad);
91
+ var my = y - w * Math.sin(rotRad) + mh * Math.cos(rotRad);
92
+ var m2x = x + w * Math.cos(rotRad) - mh * Math.sin(rotRad);
93
+ var m2y = y + w * Math.sin(rotRad) + mh * Math.cos(rotRad);
94
+ var m3x = x - h * Math.sin(rotRad);
95
+ var m3y = y + h * Math.cos(rotRad);
96
+ var m1x = x + h * Math.sin(rotRad);
97
+ var m1y = y - h * Math.cos(rotRad);
98
+ var x0 = mx + h * Math.sin(rotRad);
99
+ var y0 = my - h * Math.cos(rotRad);
100
+ var x3 = mx * 2 - x0;
101
+ var y3 = my * 2 - y0;
102
+ var x1 = x * 2 - x3;
103
+ var y1 = y * 2 - y3;
104
+ var x2 = x * 2 - x0;
105
+ var y2 = y * 2 - y0;
75
106
  return {
76
107
  rectCenterPoint: [[point(mx, my), 180], [point(m1x, m1y), -90], [point(m2x, m2y), 0], [point(m3x, m3y), 90]]
77
108
  };
78
109
  }
79
- function getAllItemsRectangles(_ref2) {
80
- var layer = _ref2.layer,
81
- catalog = _ref2.catalog,
82
- layoutpos = _ref2.layoutpos,
83
- altitude = _ref2.altitude,
84
- tempHeightLen = _ref2.tempHeightLen;
110
+ function getAllItems() {
85
111
  var rectarray = [];
86
-
87
- // keeping your selectedItem logic (even though not used right now)
112
+ var currentItem;
113
+ var selectedItem;
88
114
  if (layer.selected.items.size > 0) {
89
- var selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
90
- var catid = selectedItem.type;
91
- findCatalogElement(catalog, catid);
115
+ selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
116
+ var _catid = selectedItem.type;
117
+ var _cat = findCatalogElement(catalog, _catid);
118
+ currentItem = {
119
+ selectedItem: selectedItem,
120
+ cat: _cat
121
+ };
92
122
  }
93
- layer.items.forEach(function (other) {
123
+ layer.items.forEach(function (item) {
94
124
  var val = {
95
125
  pos: {
96
- x: other.x,
97
- y: other.y
126
+ x: item.x,
127
+ y: item.y
98
128
  },
99
- rotRad: other.rotation / 180 * Math.PI
129
+ rotRad: item.rotation / 180 * Math.PI
100
130
  };
101
- var widthCm = convert(other.properties.getIn(['width', '_length'])).from('in').to('cm');
102
- var heightCm = convert(other.properties.getIn(['depth', '_length'])).from('in').to('cm');
131
+ var catid = item.type;
132
+ var cat = findCatalogElement(catalog, catid);
133
+ var width = convert(item.properties.getIn(['width', '_length'])).from('in').to('cm');
134
+ var height = convert(item.properties.getIn(['depth', '_length'])).from('in').to('cm');
135
+ // let width = cat.info.sizeinfo.width;
136
+ // let height = cat.info.sizeinfo.depth;
103
137
  val.size = {
104
- width: widthCm,
105
- height: heightCm
138
+ width: width,
139
+ height: height
106
140
  };
107
- if (!other.selected) {
108
- var detectObjectsAtSameAltitudeFlag = layoutpos === 'Base' ? other.properties.getIn(['altitude', '_length']) <= altitude + tempHeightLen : other.properties.getIn(['altitude', '_length']) + other.properties.getIn(['height', '_length']) >= altitude;
141
+ var otherItem = {
142
+ item: item,
143
+ cat: cat
144
+ };
145
+
146
+ // if (!GeometryUtils.needSnap(currentItem, otherItem)) {
147
+ // return;
148
+ // }
149
+
150
+ if (!item.selected) {
151
+ var detectObjectsAtSameAltitudeFlag = layoutpos === 'Base' ? item.properties.getIn(['altitude', '_length']) <= altitude + tempHeight.get('_length') : item.properties.getIn(['altitude', '_length']) + item.properties.getIn(['height', '_length']) >= altitude;
109
152
  if (detectObjectsAtSameAltitudeFlag) {
110
- var ox = val.pos.x;
111
- var oy = val.pos.y;
153
+ var _x = val.pos.x;
154
+ var _y = val.pos.y;
112
155
  var rotRad = val.rotRad;
113
156
  var w = val.size.width / 2;
114
157
  var h = val.size.height / 2;
115
- var mx = ox - w * Math.cos(rotRad);
116
- var my = oy - w * Math.sin(rotRad);
158
+ var mx = _x - w * Math.cos(rotRad);
159
+ var my = _y - w * Math.sin(rotRad);
117
160
  var x0 = mx + h * Math.sin(rotRad);
118
161
  var y0 = my - h * Math.cos(rotRad);
119
162
  var x3 = mx * 2 - x0;
120
163
  var y3 = my * 2 - y0;
121
- var x1 = ox * 2 - x3;
122
- var y1 = oy * 2 - y3;
123
- var x2 = ox * 2 - x0;
124
- var y2 = oy * 2 - y0;
164
+ var x1 = _x * 2 - x3;
165
+ var y1 = _y * 2 - y3;
166
+ var x2 = _x * 2 - x0;
167
+ var y2 = _y * 2 - y0;
125
168
  rectarray.push({
126
169
  rect: [point(x0, y0), point(x1, y1), point(x0, y0), point(x1, y1)]
127
170
  });
@@ -137,156 +180,150 @@ export default function Item(_ref) {
137
180
  }
138
181
  }
139
182
  });
140
- return {
141
- others: rectarray
142
- };
143
- }
144
183
 
145
- // ----- item size -----
146
- var tempWidth = item.properties.get('width');
147
- var tempHeight = item.properties.get('depth');
148
- var _useMemo = useMemo(function () {
149
- var w, h;
150
- if (tempWidth || tempHeight) {
151
- w = convert(tempWidth.get('_length')).from(tempWidth.get('_unit')).to('cm');
152
- h = convert(tempHeight.get('_length')).from(tempHeight.get('_unit')).to('cm');
153
- } else {
154
- w = convert(element.info.sizeinfo.width).from('in').to('cm');
155
- h = convert(element.info.sizeinfo.depth).from('in').to('cm');
156
- }
157
- return {
158
- width: w,
159
- height: h
160
- };
161
- }, [tempWidth, tempHeight, element]),
162
- width = _useMemo.width,
163
- height = _useMemo.height;
164
- var nw = width / 2;
165
- var nh = height / 2;
184
+ // layer.holes.forEach(hole => {
185
+ // let val = {pos:{x:hole.x, y:hole.y}, rotRad:hole.rotation};
186
+ // let catid = hole.type;
187
+ // let cat = catalog.elements[catid];
188
+ // let width = hole.properties.getIn(['width']).getIn(['length']);
189
+ // let height = hole.properties.getIn(['height']).getIn(['length']);
190
+ // val.size = {width, height};
191
+ // let otherItem = {
192
+ // hole,
193
+ // cat
194
+ // }
195
+
196
+ // // if (!GeometryUtils.needSnap(currentItem, otherItem)) {
197
+ // // return;
198
+ // // }
166
199
 
167
- // val used in geometry calc
168
- var val = useMemo(function () {
200
+ // if (!hole.selected) {
201
+ // let x = val.pos.x;
202
+ // let y = val.pos.y;
203
+ // let rotRad = val.rotRad;
204
+ // let w = val.size.width / 2;
205
+ // let mx = x - w * Math.cos(rotRad);
206
+ // let my = y - w * Math.sin(rotRad);
207
+ // let kx = x + w * Math.cos(rotRad);
208
+ // let ky = y + w * Math.sin(rotRad);
209
+ // let x0 = mx - 10 * Math.sin(rotRad);
210
+ // let y0 = my + 10 * Math.cos(rotRad);
211
+ // let x3 = mx + 10 * Math.sin(rotRad);
212
+ // let y3 = my - 10 * Math.cos(rotRad);
213
+ // let x1 = kx - 10 * Math.sin(rotRad);
214
+ // let y1 = ky + 10 * Math.cos(rotRad);
215
+ // let x2 = kx + 10 * Math.sin(rotRad);
216
+ // let y2 = ky - 10 * Math.cos(rotRad);
217
+ // rectarray.push({'rect':[point(x0,y0), point(x1,y1) ,point(x0,y0), point(x1,y1)]});
218
+ // rectarray.push({'rect':[point(x1,y1), point(x2,y2), point(x1,y1), point(x2,y2)]}); // right
219
+ // rectarray.push({'rect':[point(x2,y2), point(x3,y3), point(x2,y2), point(x3,y3)]}); // front
220
+ // rectarray.push({'rect':[point(x3,y3), point(x0,y0), point(x3,y3), point(x0,y0)]}); // left
221
+ // }
222
+ // });
169
223
  return {
170
- pos: {
171
- x: item.x,
172
- y: item.y
173
- },
174
- rotRad: item.rotation / 180 * Math.PI,
175
- size: {
176
- width: width,
177
- height: height
178
- }
224
+ others: rectarray
179
225
  };
180
- }, [item.x, item.y, item.rotation, width, height]);
226
+ }
227
+ allItemRect = getAllItems();
228
+ allLines = GeometryUtils.getAllLines(layer);
229
+ allLineRects = GeometryUtils.buildRectFromLines(layer, allLines);
230
+ var allRect = allLineRects.concat(allItemRect.others);
231
+ curiteminfo = getCalcRectFromItem(val);
181
232
 
182
- // ----- heavy geometry (memoized) -----
183
- var _useMemo2 = useMemo(function () {
184
- var allItemRect = getAllItemsRectangles({
185
- layer: layer,
186
- catalog: catalog,
187
- layoutpos: layoutpos,
188
- altitude: altitude,
189
- tempHeightLen: tempHeight ? tempHeight.get('_length') : 0
190
- });
191
- var allLines = GeometryUtils.getAllLines(layer);
192
- var allLineRects = GeometryUtils.buildRectFromLines(layer, allLines);
193
- var allRect = allLineRects.concat(allItemRect.others);
194
- var curiteminfo = getCalcRectFromItem(val);
195
- var getDistant = function getDistant(px, py, rotRad) {
196
- var center_h = 3 * height / 8;
197
- var center_x = px;
198
- var center_y = py;
199
- var center_x1 = px - center_h * Math.sin(rotRad);
200
- var center_y1 = py + center_h * Math.cos(rotRad);
201
- var PointArray = [];
202
- curiteminfo.rectCenterPoint.forEach(function (centerpoint) {
203
- var a;
204
- var RectLineFuction;
205
- if (centerpoint[1] === 180 || centerpoint[1] === 0) {
206
- RectLineFuction = GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x1, center_y1);
207
- } else {
208
- RectLineFuction = GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x, center_y);
209
- }
210
- var comparelength = [];
211
- allRect.forEach(function (linerect) {
212
- var p0 = GeometryUtils.clone_point(linerect.rect[2]);
213
- var p1 = GeometryUtils.clone_point(linerect.rect[3]);
214
- var lineFunction = {};
215
- if (p0.x !== p1.x || p0.y !== p1.y) {
216
- lineFunction = GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
233
+ /**
234
+ *
235
+ * @param x y position
236
+ * @param y x position
237
+ * @param rotRad item's rotation in radian
238
+ */
239
+ var getDistant = function getDistant(x, y, rotRad) {
240
+ var center_h = 3 * height / 8;
241
+ var center_x = x; // middle of front line of cabinet rect
242
+ var center_y = y;
243
+ var center_x1 = x - center_h * Math.sin(rotRad); // center point of cabinet rect
244
+ var center_y1 = y + center_h * Math.cos(rotRad);
245
+ var PointArray = [];
246
+ var _loop = function _loop(i) {
247
+ var centerpoint = curiteminfo.rectCenterPoint[i];
248
+ // [rectCenterPoint] has four middle points of cabinet rect edges
249
+ var comparelength = []; // distance array from rectCenterPoint[i] to other lines(walls, other cabinet rect edges)
250
+ var a;
251
+ var RectLineFuction; // normal line of cabinet rect edge
252
+ if (centerpoint[1] === 180 || centerpoint[1] === 0) RectLineFuction = GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x1, center_y1);else RectLineFuction = GeometryUtils.linePassingThroughTwoPoints(centerpoint[0].x, centerpoint[0].y, center_x, center_y);
253
+ allRect.forEach(function (linerect) {
254
+ // calc distance to all other lines
255
+ var p0 = GeometryUtils.clone_point(linerect.rect[2]);
256
+ var p1 = GeometryUtils.clone_point(linerect.rect[3]);
257
+ var lineFunction = {}; // other line function
258
+ if (p0.x !== p1.x || p0.y !== p1.y) lineFunction = GeometryUtils.linePassingThroughTwoPoints(p0.x, p0.y, p1.x, p1.y);
259
+ // intersection between normal line and other line
260
+ var coordinatePoint = GeometryUtils.twoLinesIntersection(lineFunction.a, lineFunction.b, lineFunction.c, RectLineFuction.a, RectLineFuction.b, RectLineFuction.c);
261
+ if (coordinatePoint !== undefined) {
262
+ if (
263
+ // intersection point is on the other line
264
+ GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
265
+ // check the intersection point is outside direction of edge
266
+ var isOutside = true;
267
+ for (var j = 0; j < curiteminfo.rectCenterPoint.length; j++) {
268
+ if (j === i) continue;
269
+ var otherCenterPoint = curiteminfo.rectCenterPoint[j];
270
+ if (GeometryUtils.isPointOnLineSegment(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y, otherCenterPoint[0].x, otherCenterPoint[0].y)) isOutside = false;
217
271
  }
218
- var coordinatePoint = GeometryUtils.twoLinesIntersection(lineFunction.a, lineFunction.b, lineFunction.c, RectLineFuction.a, RectLineFuction.b, RectLineFuction.c);
219
- if (coordinatePoint !== undefined) {
220
- if (GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > GeometryUtils.pointsDistance(p0.x, p0.y, coordinatePoint.x, coordinatePoint.y) && GeometryUtils.pointsDistance(p0.x, p0.y, p1.x, p1.y) > GeometryUtils.pointsDistance(p1.x, p1.y, coordinatePoint.x, coordinatePoint.y)) {
221
- if (GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
222
- comparelength.push(GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y));
223
- a = Math.min.apply(null, comparelength);
224
- }
225
- }
272
+ if (isOutside && GeometryUtils.pointsDistance(coordinatePoint.x, coordinatePoint.y, center_x, center_y) > GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y)) {
273
+ comparelength.push(GeometryUtils.pointsDistance(centerpoint[0].x, centerpoint[0].y, coordinatePoint.x, coordinatePoint.y));
274
+ a = Math.min.apply(null, comparelength);
226
275
  }
227
- });
228
- PointArray.push([a, centerpoint[1]]);
229
- });
230
- return {
231
- PointArray: PointArray
232
- };
233
- };
234
- var _getDistant = getDistant(x, y, val.rotRad),
235
- PointArray = _getDistant.PointArray;
236
- var catid = item.type;
237
- var catLocal = catalog.elements[catid];
238
-
239
- // normalize like your original code
240
- PointArray.forEach(function (pointElement, index) {
241
- if (pointElement[0] == undefined) PointArray[index][0] = 0;
242
- if (pointElement[1] === -90 && catLocal.info.is_corner !== 1) {
243
- PointArray[index][0] -= 4;
276
+ }
244
277
  }
245
278
  });
246
- return {
247
- pointArray: PointArray,
248
- cat: catLocal
249
- };
250
- }, [layer, catalog, layoutpos, altitude, tempHeight, item.type, x, y, val, height]),
251
- pointArray = _useMemo2.pointArray,
252
- cat = _useMemo2.cat;
253
-
254
- // ----- FIX: dispatch AFTER render (no setState/dispatch in render) -----
255
- var lastSigRef = useRef('');
256
- useEffect(function () {
257
- if (!Array.isArray(pointArray)) return;
258
-
259
- // small signature to prevent dispatching repeatedly with same values
260
- // rounding reduces noise from floating point jitter
261
- var sig = pointArray.map(function (_ref3) {
262
- var _ref4 = _slicedToArray(_ref3, 2),
263
- dist = _ref4[0],
264
- dir = _ref4[1];
265
- return "".concat(dir, ":").concat(Math.round((dist || 0) * 1000));
266
- }).join('|');
267
- if (sig === lastSigRef.current) return;
268
- lastSigRef.current = sig;
269
- itemsActions.storeDistArray(layerID, id, pointArray);
270
- }, [itemsActions, layerID, id, pointArray]);
271
-
272
- // ----- rulers -----
273
- var renderedRuler = useMemo(function () {
274
- var rulers = [];
275
- var ep = 0.1;
276
- if (!item.selected || !Array.isArray(pointArray)) return rulers;
277
- pointArray.forEach(function (element, key) {
279
+ PointArray.push([a, centerpoint[1]]);
280
+ };
281
+ for (var i = 0; i < curiteminfo.rectCenterPoint.length; i++) {
282
+ _loop(i);
283
+ }
284
+ return {
285
+ PointArray: PointArray
286
+ };
287
+ };
288
+ var nw = width / 2;
289
+ var nh = height / 2;
290
+ var _getDistant = getDistant(x, y, val.rotRad),
291
+ PointArray = _getDistant.PointArray;
292
+ var catid = item.type;
293
+ var cat = catalog.elements[catid];
294
+ PointArray.forEach(function (pointElement, index) {
295
+ if (pointElement[0] == undefined) PointArray[index][0] = 0;
296
+ // if (pointElement[1] === -90 && cat.info.is_corner !== 1) {
297
+ // PointArray[index][0] -= 4;
298
+ // }
299
+ });
300
+ var cnt = 0;
301
+ PointArray.forEach(function (pointElement) {
302
+ if (pointElement[0] == 0) cnt++;
303
+ });
304
+ if (cnt == 4 || cnt == 3) {
305
+ PointArray[0][0] = 100;
306
+ PointArray[1][0] = 100;
307
+ }
308
+ if (Array.isArray(PointArray)) {
309
+ itemsActions.storeDistArray(layerID, id, PointArray);
310
+ }
311
+ var renderedRuler = [];
312
+ var ep = 0.1;
313
+ if (item.selected) {
314
+ PointArray.forEach(function (element, key) {
278
315
  var itemDistanceFromLine = element[0];
279
- var dir = element[1];
316
+ var length = itemDistanceFromLine;
280
317
  if (itemDistanceFromLine > ep || itemDistanceFromLine < -ep) {
281
- rulers.push(/*#__PURE__*/React.createElement("g", {
318
+ renderedRuler.push(/*#__PURE__*/React.createElement("g", {
282
319
  "data-element-root": true,
283
320
  "data-prototype": "rulerDist",
284
321
  "data-id": item.id,
285
322
  "data-selected": item.selected,
286
323
  "data-layer": layer.id,
287
324
  key: key,
288
- "data-length": itemDistanceFromLine,
289
- "data-direct": dir
325
+ "data-length": length,
326
+ "data-direct": element[1]
290
327
  }, /*#__PURE__*/React.createElement(RulerDist, {
291
328
  key: key,
292
329
  layer: layer,
@@ -294,126 +331,126 @@ export default function Item(_ref) {
294
331
  rulerUnit: scene.rulerUnit,
295
332
  length: itemDistanceFromLine,
296
333
  angle: rotation,
297
- rotation: dir,
298
- transform: "translate(".concat(dir === 180 ? -nw : dir === 0 ? nw : 0, ", ").concat(dir === 90 ? nh : dir === -90 ? cat.info.is_corner !== 1 ? -(nh + 4) : -nh : 0, ") rotate(").concat(dir, ", 0, 0)")
334
+ rotation: element[1],
335
+ transform: "translate(".concat(element[1] === 180 ? -nw : element[1] === 0 ? nw : 0, ", ").concat(element[1] === 90 ? nh : element[1] === -90 ? cat.info.is_corner !== 1 ? -(nh + 4) : -nh : 0, ") rotate(").concat(element[1], ", 0, 0)")
299
336
  })));
300
337
  }
301
338
  });
302
- return rulers;
303
- }, [item.selected, pointArray, item.id, layer, scene.unit, scene.rulerUnit, rotation, nw, nh, cat]);
304
-
305
- // ----- rendered item -----
339
+ }
306
340
  var renderedItem = element === null || element === void 0 || (_element$render2D = element.render2D) === null || _element$render2D === void 0 ? void 0 : _element$render2D.call(element, item, layer, scene);
307
-
308
- // ----- action icons -----
309
- var parts = useMemo(function () {
310
- if (!item.selected) return [];
311
- return [/*#__PURE__*/React.createElement("g", {
312
- key: 0,
313
- "data-element-root": true,
314
- "data-prototype": item.prototype,
315
- "data-id": item.id,
316
- "data-selected": item.selected,
317
- "data-layer": layer.id,
318
- "data-part": "rotation-anchor",
319
- style: {
320
- cursor: 'w-resize'
321
- }
322
- }, /*#__PURE__*/React.createElement("image", {
323
- href: clockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
324
- style: {
325
- transform: "scale(-1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
326
- },
327
- height: "20",
328
- width: "20",
329
- onMouseEnter: function onMouseEnter() {
330
- setClockRotateState(true);
331
- setAntiClockRotateState(false);
332
- },
333
- onMouseLeave: function onMouseLeave() {
334
- return setClockRotateState(mode === MODE_ROTATING_ITEM ? true : false);
335
- }
336
- }), /*#__PURE__*/React.createElement("image", {
337
- href: antiClockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
338
- style: {
339
- transform: "scale(1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
340
- },
341
- height: "20",
342
- width: "20",
343
- onMouseEnter: function onMouseEnter() {
344
- setAntiClockRotateState(true);
345
- setClockRotateState(false);
346
- },
347
- onMouseLeave: function onMouseLeave() {
348
- return setAntiClockRotateState(mode === MODE_ROTATING_ITEM ? true : false);
349
- }
350
- })), /*#__PURE__*/React.createElement("g", {
351
- key: 1,
352
- style: {
353
- cursor: 'pointer',
354
- transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ", 0, "px)")
355
- },
356
- "data-element-root": true,
357
- "data-prototype": item.prototype,
358
- "data-id": item.id,
359
- "data-selected": item.selected,
360
- "data-layer": layer.id,
361
- "data-part": "duplicate"
362
- }, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("filter", {
363
- id: "shadow"
364
- }, /*#__PURE__*/React.createElement("feDropShadow", {
365
- dx: "0",
366
- dy: "0",
367
- stdDeviation: "0.6"
368
- }))), /*#__PURE__*/React.createElement("rect", {
369
- rx: "4",
370
- ry: "4",
371
- height: "22",
372
- width: "22",
373
- fill: "white",
374
- filter: "url(#shadow)"
375
- }), /*#__PURE__*/React.createElement("image", {
376
- href: "/assets/img/svg/duplicate.svg",
377
- x: "3",
378
- y: "-19",
379
- height: "16",
380
- width: "16",
381
- style: isWarningItem(item) ? {
382
- transform: 'rotateX(180deg)',
383
- opacity: 0.5
384
- } : {
385
- transform: 'rotateX(180deg)'
386
- }
387
- })), /*#__PURE__*/React.createElement("g", {
388
- key: 2,
389
- style: {
390
- cursor: 'pointer',
391
- transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ").concat(-27, "px)")
392
- },
393
- "data-element-root": true,
394
- "data-prototype": item.prototype,
395
- "data-id": item.id,
396
- "data-selected": item.selected,
397
- "data-layer": layer.id,
398
- "data-part": "remove"
399
- }, /*#__PURE__*/React.createElement("rect", {
400
- rx: "4",
401
- ry: "4",
402
- height: "22",
403
- width: "22",
404
- fill: "white",
405
- filter: "url(#shadow)"
406
- }), /*#__PURE__*/React.createElement("image", {
407
- href: "/assets/img/svg/delete.svg",
408
- x: "3",
409
- y: "-19",
410
- height: "16",
411
- width: "16",
412
- style: {
413
- transform: 'rotateX(180deg)'
414
- }
415
- }))];
416
- }, [item.selected, item.prototype, item.id, item.rotation, layer.id, clockRotateState, antiClockRotateState, width, height, mode, item]);
341
+ var isSmall = false;
342
+ if (width < 40) isSmall = true;
343
+ var parts = [];
344
+ var newWidth = item.toJS().properties.width.length;
345
+ if (item.selected) parts = [/*#__PURE__*/React.createElement("g", {
346
+ key: 0,
347
+ "data-element-root": true,
348
+ "data-prototype": item.prototype,
349
+ "data-id": item.id,
350
+ "data-selected": item.selected,
351
+ "data-layer": layer.id,
352
+ "data-part": "rotation-anchor",
353
+ style: {
354
+ cursor: 'w-resize'
355
+ }
356
+ }, /*#__PURE__*/React.createElement("image", {
357
+ href: clockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
358
+ style: {
359
+ transform: "scale(-1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
360
+ },
361
+ height: "20",
362
+ width: "20",
363
+ onMouseEnter: function onMouseEnter() {
364
+ setClockRotateState(true);
365
+ setAntiClockRotateState(false);
366
+ },
367
+ onMouseLeave: function onMouseLeave() {
368
+ return setClockRotateState(mode === MODE_ROTATING_ITEM ? true : false);
369
+ }
370
+ }), /*#__PURE__*/React.createElement("image", {
371
+ href: antiClockRotateState ? '/assets/img/svg/rotate.png' : '/assets/img/svg/blank_div.svg',
372
+ style: {
373
+ transform: "scale(1, -1) translate(".concat(width / 2, "px, ").concat(height / 2, "px) rotate(25deg)")
374
+ },
375
+ height: "20",
376
+ width: "20",
377
+ onMouseEnter: function onMouseEnter() {
378
+ setAntiClockRotateState(true);
379
+ setClockRotateState(false);
380
+ },
381
+ onMouseLeave: function onMouseLeave() {
382
+ return setAntiClockRotateState(mode === MODE_ROTATING_ITEM ? true : false);
383
+ }
384
+ })), /*#__PURE__*/React.createElement("g", {
385
+ key: 1
386
+ // transform={`translate(${-width / 2 - (!isSmall ? 40 : 0)},${height / 2 + 40})`}
387
+ ,
388
+ style: {
389
+ cursor: 'pointer',
390
+ transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ", 0, "px)")
391
+ },
392
+ "data-element-root": true,
393
+ "data-prototype": item.prototype,
394
+ "data-id": item.id,
395
+ "data-selected": item.selected,
396
+ "data-layer": layer.id,
397
+ "data-part": "duplicate"
398
+ }, /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("filter", {
399
+ id: "shadow"
400
+ }, /*#__PURE__*/React.createElement("feDropShadow", {
401
+ dx: "0",
402
+ dy: "0",
403
+ stdDeviation: "0.6"
404
+ }))), /*#__PURE__*/React.createElement("rect", {
405
+ rx: "4",
406
+ ry: "4",
407
+ height: "22",
408
+ width: "22",
409
+ fill: "white",
410
+ filter: "url(#shadow)"
411
+ }), /*#__PURE__*/React.createElement("image", {
412
+ href: "/assets/img/svg/duplicate.svg",
413
+ x: "3",
414
+ y: "-19",
415
+ height: "16",
416
+ width: "16",
417
+ style: isWarningItem(item) ? {
418
+ transform: 'rotateX(180deg)',
419
+ opacity: 0.5
420
+ } : {
421
+ transform: 'rotateX(180deg)'
422
+ }
423
+ })), /*#__PURE__*/React.createElement("g", {
424
+ key: 2
425
+ // transform={`translate(${-width / 2 - (!isSmall ? 40 : 0)},${height / 2})`}
426
+ ,
427
+ style: {
428
+ cursor: 'pointer',
429
+ transform: "rotate(".concat(360 - item.rotation, "deg) translate(").concat(-width / 2 - 27, "px, ").concat(-27, "px)")
430
+ },
431
+ "data-element-root": true,
432
+ "data-prototype": item.prototype,
433
+ "data-id": item.id,
434
+ "data-selected": item.selected,
435
+ "data-layer": layer.id,
436
+ "data-part": "remove"
437
+ }, /*#__PURE__*/React.createElement("rect", {
438
+ rx: "4",
439
+ ry: "4",
440
+ height: "22",
441
+ width: "22",
442
+ fill: "white",
443
+ filter: "url(#shadow)"
444
+ }), /*#__PURE__*/React.createElement("image", {
445
+ href: "/assets/img/svg/delete.svg",
446
+ x: "3",
447
+ y: "-19",
448
+ height: "16",
449
+ width: "16",
450
+ style: {
451
+ transform: 'rotateX(180deg)'
452
+ }
453
+ }))];
417
454
  var measure = item.layoutpos === WALL_CABINET_LAYOUTPOS ? showWallCabinetMeasure : showBaseCabinetMeasure;
418
455
  return /*#__PURE__*/React.createElement("g", {
419
456
  "data-element-root": true,
@@ -436,4 +473,7 @@ Item.propTypes = {
436
473
  layer: PropTypes.object.isRequired,
437
474
  scene: PropTypes.object.isRequired,
438
475
  catalog: PropTypes.object.isRequired
476
+ };
477
+ Item.contextTypes = {
478
+ itemsActions: PropTypes.object.isRequired
439
479
  };