kitchen-simulator 5.0.0-test.5 → 5.0.0-test.6

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 (1096) hide show
  1. package/package.json +24 -41
  2. package/src/@history.js +3 -0
  3. package/src/AppContext.js +5 -0
  4. package/src/KitchenConfigurator.jsx +1517 -0
  5. package/src/KitchenConfiguratorApp.jsx +443 -0
  6. package/src/actions/area-actions.js +15 -0
  7. package/src/actions/export.js +38 -0
  8. package/src/actions/groups-actions.js +102 -0
  9. package/src/actions/holes-actions.js +152 -0
  10. package/src/actions/items-actions.js +393 -0
  11. package/src/actions/lines-actions.js +103 -0
  12. package/src/actions/project-actions.js +391 -0
  13. package/src/actions/scene-actions.js +44 -0
  14. package/src/actions/user-actions.js +75 -0
  15. package/src/actions/vertices-actions.js +34 -0
  16. package/src/actions/viewer2d-actions.js +79 -0
  17. package/src/actions/viewer3d-actions.js +32 -0
  18. package/src/catalog/areas/area/planner-element.jsx +43 -0
  19. package/src/catalog/catalog.js +258 -0
  20. package/src/catalog/factories/area-factory-3d.js +252 -0
  21. package/src/catalog/factories/area-factory.jsx +102 -0
  22. package/src/catalog/factories/export.js +9 -0
  23. package/src/catalog/factories/wall-factory-3d.js +296 -0
  24. package/src/catalog/factories/wall-factory.jsx +321 -0
  25. package/src/catalog/holes/door-closet/planner-element.jsx +251 -0
  26. package/src/catalog/holes/door-double/planner-element.jsx +391 -0
  27. package/src/catalog/holes/door-exterior/planner-element.jsx +245 -0
  28. package/src/catalog/holes/door-interior/planner-element.jsx +256 -0
  29. package/src/catalog/holes/door-panic/planner-element.jsx +594 -0
  30. package/src/catalog/holes/door-panic-double/planner-element.jsx +574 -0
  31. package/src/catalog/holes/door-sliding/planner-element.jsx +256 -0
  32. package/src/catalog/holes/doorway-framed/planner-element.jsx +169 -0
  33. package/src/catalog/holes/doorway-frameless/planner-element.jsx +116 -0
  34. package/src/catalog/holes/window-clear/planner-element.jsx +181 -0
  35. package/src/catalog/holes/window-cross/planner-element.jsx +180 -0
  36. package/src/catalog/holes/window-double-hung/planner-element.jsx +366 -0
  37. package/src/catalog/holes/window-vertical/planner-element.jsx +290 -0
  38. package/src/catalog/lines/wall/planner-element.jsx +73 -0
  39. package/src/catalog/molding/molding-dcm/planner-element.jsx +35 -0
  40. package/src/catalog/molding/molding-fbm/planner-element.jsx +35 -0
  41. package/src/catalog/molding/molding-lrm/planner-element.jsx +35 -0
  42. package/src/catalog/properties/export.js +33 -0
  43. package/src/catalog/properties/property-checkbox.jsx +123 -0
  44. package/src/catalog/properties/property-color.jsx +52 -0
  45. package/src/catalog/properties/property-enum.jsx +87 -0
  46. package/src/catalog/properties/property-hidden.jsx +22 -0
  47. package/src/catalog/properties/property-lenght-measure.jsx +113 -0
  48. package/src/catalog/properties/property-length-measure.jsx +129 -0
  49. package/src/catalog/properties/property-length-measure_hole.jsx +110 -0
  50. package/src/catalog/properties/property-number.jsx +63 -0
  51. package/src/catalog/properties/property-read-only.jsx +37 -0
  52. package/src/catalog/properties/property-string.jsx +59 -0
  53. package/src/catalog/properties/property-toggle.jsx +51 -0
  54. package/src/catalog/properties/shared-property-style.js +13 -0
  55. package/src/catalog/utils/FuseUtils.js +61 -0
  56. package/src/catalog/utils/exporter.js +173 -0
  57. package/src/catalog/utils/geom-utils.js +301 -0
  58. package/src/catalog/utils/item-loader.jsx +2122 -0
  59. package/src/catalog/utils/load-obj.js +113 -0
  60. package/src/catalog/utils/mtl-loader.js +462 -0
  61. package/src/catalog/utils/obj-loader.js +544 -0
  62. package/src/class/FuseUtils.js +61 -0
  63. package/src/class/area.js +159 -0
  64. package/src/class/export.js +37 -0
  65. package/src/class/group.js +565 -0
  66. package/src/class/guide.js +44 -0
  67. package/src/class/hole.js +1359 -0
  68. package/src/class/item.js +2050 -0
  69. package/src/class/layer.js +926 -0
  70. package/src/class/line.js +1780 -0
  71. package/src/class/project.js +875 -0
  72. package/src/class/vertex.js +409 -0
  73. package/src/components/atoms/Snackbar/index.jsx +43 -0
  74. package/src/components/atoms/radio-button/index.jsx +20 -0
  75. package/src/components/atoms/radio-button/styles.js +56 -0
  76. package/src/components/button/MainButton.jsx +157 -0
  77. package/src/components/button/ToggleMeasureButton.jsx +65 -0
  78. package/src/components/catalog-view/catalog-breadcrumb.jsx +53 -0
  79. package/src/components/catalog-view/catalog-item.jsx +229 -0
  80. package/src/components/catalog-view/catalog-list.jsx +173 -0
  81. package/src/components/catalog-view/catalog-page-item.jsx +110 -0
  82. package/src/components/catalog-view/catalog-turn-back-page-item.jsx +80 -0
  83. package/src/components/configurator/custom-configurator.jsx +77 -0
  84. package/src/components/configurator/project-configurator.jsx +120 -0
  85. package/src/components/content.jsx +136 -0
  86. package/src/components/export.js +36 -0
  87. package/src/components/firstsetting/button/styles.js +223 -0
  88. package/src/components/firstsetting/export.js +9 -0
  89. package/src/components/firstsetting/firstsetting-content-button.jsx +198 -0
  90. package/src/components/firstsetting/firstsetting-toggle-button.jsx +101 -0
  91. package/src/components/firstsetting/firstsetting.jsx +814 -0
  92. package/src/components/footerbar/button/ControlButton.jsx +43 -0
  93. package/src/components/footerbar/button/DirectionButton.jsx +54 -0
  94. package/src/components/footerbar/button/DirectionPanSpinButton.jsx +36 -0
  95. package/src/components/footerbar/button/ToggleButton.jsx +58 -0
  96. package/src/components/footerbar/button/ToggleConvertButton.jsx +48 -0
  97. package/src/components/footerbar/button/ToggleMeasureButton.jsx +33 -0
  98. package/src/components/footerbar/button/styles.js +217 -0
  99. package/src/components/footerbar/export.js +9 -0
  100. package/src/components/footerbar/footer-content-button.jsx +198 -0
  101. package/src/components/footerbar/footer-toggle-button.jsx +101 -0
  102. package/src/components/footerbar/footerbar.jsx +1103 -0
  103. package/src/components/footerbar/styles.js +263 -0
  104. package/src/components/header/button/MenuButton.jsx +46 -0
  105. package/src/components/header/button/SaveButton.jsx +54 -0
  106. package/src/components/header/button/styles.js +181 -0
  107. package/src/components/header/export.js +5 -0
  108. package/src/components/header/header.jsx +631 -0
  109. package/src/components/header/styles.js +320 -0
  110. package/src/components/login/Login.js +77 -0
  111. package/src/components/login/LoginForm/index.js +108 -0
  112. package/src/components/login/Register.js +83 -0
  113. package/src/components/login/RegisterForm/index.js +171 -0
  114. package/src/components/login/jwtService.js +201 -0
  115. package/src/components/molecules/slider/index.jsx +15 -0
  116. package/src/components/molecules/slider/styles.js +0 -0
  117. package/src/components/myprojects/export.js +5 -0
  118. package/src/components/myprojects/index.jsx +445 -0
  119. package/src/components/myprojects/styles.js +241 -0
  120. package/src/components/sidebar/custom-accordion.jsx +48 -0
  121. package/src/components/sidebar/export.js +15 -0
  122. package/src/components/sidebar/panel-element-editor/attributes-editor/attributes-editor.jsx +73 -0
  123. package/src/components/sidebar/panel-element-editor/attributes-editor/confirm-popup.jsx +101 -0
  124. package/src/components/sidebar/panel-element-editor/attributes-editor/hole-attributes-editor.jsx +149 -0
  125. package/src/components/sidebar/panel-element-editor/attributes-editor/item-attributes-editor.jsx +316 -0
  126. package/src/components/sidebar/panel-element-editor/attributes-editor/line-attributes-editor.jsx +108 -0
  127. package/src/components/sidebar/panel-element-editor/element-editor.jsx +1070 -0
  128. package/src/components/sidebar/panel-element-editor/multi-elements-editor.jsx +0 -0
  129. package/src/components/sidebar/panel-element-editor/panel-element-editor.jsx +104 -0
  130. package/src/components/sidebar/panel-element-editor/panel-multi-elements-editor.jsx +155 -0
  131. package/src/components/sidebar/panel-group-editor.jsx +272 -0
  132. package/src/components/sidebar/panel-groups.jsx +310 -0
  133. package/src/components/sidebar/panel-guides.jsx +192 -0
  134. package/src/components/sidebar/panel-layer-elements.jsx +298 -0
  135. package/src/components/sidebar/panel-layers.jsx +381 -0
  136. package/src/components/sidebar/panel.jsx +71 -0
  137. package/src/components/sidebar/sidebar.jsx +106 -0
  138. package/src/components/sidebar/toolbar-panel.jsx +139 -0
  139. package/src/components/sign/export.js +7 -0
  140. package/src/components/sign/main/index.jsx +523 -0
  141. package/src/components/sign/main/styles.js +163 -0
  142. package/src/components/style/button.jsx +95 -0
  143. package/src/components/style/cancel-button.jsx +20 -0
  144. package/src/components/style/content-container.jsx +29 -0
  145. package/src/components/style/content-title.jsx +20 -0
  146. package/src/components/style/delete-button.jsx +23 -0
  147. package/src/components/style/export.jsx +48 -0
  148. package/src/components/style/form-block.jsx +13 -0
  149. package/src/components/style/form-color-input.jsx +27 -0
  150. package/src/components/style/form-label.jsx +15 -0
  151. package/src/components/style/form-number-input.jsx +196 -0
  152. package/src/components/style/form-number-input_2.jsx +191 -0
  153. package/src/components/style/form-select.jsx +38 -0
  154. package/src/components/style/form-slider.jsx +36 -0
  155. package/src/components/style/form-submit-button.jsx +23 -0
  156. package/src/components/style/form-text-input.jsx +65 -0
  157. package/src/components/toolbar/button/ControlButton.jsx +41 -0
  158. package/src/components/toolbar/button/DirectionButton.jsx +34 -0
  159. package/src/components/toolbar/button/RightButton.jsx +103 -0
  160. package/src/components/toolbar/button/ToggleButton.jsx +41 -0
  161. package/src/components/toolbar/button/index.jsx +55 -0
  162. package/src/components/toolbar/button/styles.js +127 -0
  163. package/src/components/toolbar/components/DoorStyleMenu.jsx +103 -0
  164. package/src/components/toolbar/components/Pricing.jsx +126 -0
  165. package/src/components/toolbar/components/ReviewForQuote.jsx +635 -0
  166. package/src/components/toolbar/export.js +21 -0
  167. package/src/components/toolbar/main/Alert.js +122 -0
  168. package/src/components/toolbar/main/TakePictureModal.jsx +104 -0
  169. package/src/components/toolbar/main/confirm-popup.jsx +99 -0
  170. package/src/components/toolbar/main/index.jsx +5687 -0
  171. package/src/components/toolbar/main/myComponents.js +123 -0
  172. package/src/components/toolbar/main/styles.js +696 -0
  173. package/src/components/toolbar/plugin-item.jsx +123 -0
  174. package/src/components/toolbar/popup/appliance/appliance-category/index.jsx +73 -0
  175. package/src/components/toolbar/popup/appliance/choose-appliance/index.jsx +102 -0
  176. package/src/components/toolbar/popup/appliance/index.jsx +83 -0
  177. package/src/components/toolbar/popup/autosaveprompt/index.jsx +150 -0
  178. package/src/components/toolbar/popup/autosaveprompt/styles.js +40 -0
  179. package/src/components/toolbar/popup/cabinet/cabinet-category/index.jsx +73 -0
  180. package/src/components/toolbar/popup/cabinet/choose-product/index.jsx +119 -0
  181. package/src/components/toolbar/popup/cabinet/index.jsx +85 -0
  182. package/src/components/toolbar/popup/doorStyle/choose-style/index.jsx +63 -0
  183. package/src/components/toolbar/popup/doorStyle/index.jsx +71 -0
  184. package/src/components/toolbar/popup/doorStyle/style-category/index.jsx +139 -0
  185. package/src/components/toolbar/popup/downloadsummary/downloadSummaryContext.js +2 -0
  186. package/src/components/toolbar/popup/downloadsummary/downloadSummaryTemp.jsx +157 -0
  187. package/src/components/toolbar/popup/downloadsummary/index.jsx +643 -0
  188. package/src/components/toolbar/popup/downloadsummary/show2D/show2DView.jsx +51 -0
  189. package/src/components/toolbar/popup/downloadsummary/show2D/viewer2DDownLoad.jsx +175 -0
  190. package/src/components/toolbar/popup/downloadsummary/show3D/show3DView.jsx +283 -0
  191. package/src/components/toolbar/popup/downloadsummary/show3D/viewer3DDownLoad.jsx +2257 -0
  192. package/src/components/toolbar/popup/downloadsummary/showCabinetInfo.js +93 -0
  193. package/src/components/toolbar/popup/downloadsummary/showElevation/showElevationView.jsx +132 -0
  194. package/src/components/toolbar/popup/downloadsummary/showElevation/viewer3DElevationDownload.jsx +2198 -0
  195. package/src/components/toolbar/popup/downloadsummary/showElevation/viewerElevationDownload.jsx +152 -0
  196. package/src/components/toolbar/popup/downloadsummary/showWarranty.jsx +149 -0
  197. package/src/components/toolbar/popup/downloadsummary/styles.js +453 -0
  198. package/src/components/toolbar/popup/finishingtouch/category/index.jsx +34 -0
  199. package/src/components/toolbar/popup/finishingtouch/index.jsx +58 -0
  200. package/src/components/toolbar/popup/finishingtouch/material-edit.jsx +112 -0
  201. package/src/components/toolbar/popup/finishingtouch/product/index.jsx +116 -0
  202. package/src/components/toolbar/popup/floorplan/choose-floor/confirm-popup.jsx +101 -0
  203. package/src/components/toolbar/popup/floorplan/choose-floor/index.jsx +254 -0
  204. package/src/components/toolbar/popup/floorplan/choose-floor/styles.js +86 -0
  205. package/src/components/toolbar/popup/floorplan/floor-category/index.jsx +109 -0
  206. package/src/components/toolbar/popup/floorplan/index.jsx +60 -0
  207. package/src/components/toolbar/popup/index.jsx +241 -0
  208. package/src/components/toolbar/popup/newproject/index.jsx +59 -0
  209. package/src/components/toolbar/popup/newproject/styles.js +41 -0
  210. package/src/components/toolbar/popup/product/appliance.jsx +54 -0
  211. package/src/components/toolbar/popup/product/cabinetproduct.jsx +15 -0
  212. package/src/components/toolbar/popup/product/doorstyle.jsx +58 -0
  213. package/src/components/toolbar/popup/product/doorstyleproduct.jsx +47 -0
  214. package/src/components/toolbar/popup/product/floor.jsx +36 -0
  215. package/src/components/toolbar/popup/product/floorproduct.jsx +42 -0
  216. package/src/components/toolbar/popup/product/index.jsx +36 -0
  217. package/src/components/toolbar/popup/product/primary.jsx +77 -0
  218. package/src/components/toolbar/popup/product/productline.jsx +93 -0
  219. package/src/components/toolbar/popup/product/reviewItem.jsx +427 -0
  220. package/src/components/toolbar/popup/product/reviewMolding.jsx +310 -0
  221. package/src/components/toolbar/popup/product/styles.js +260 -0
  222. package/src/components/toolbar/popup/savedesign/FullPictureForm.jsx +146 -0
  223. package/src/components/toolbar/popup/savedesign/index.jsx +495 -0
  224. package/src/components/toolbar/popup/savedesign/styles.js +151 -0
  225. package/src/components/toolbar/popup/setDoorStyleOption/index.jsx +87 -0
  226. package/src/components/toolbar/popup/styles.js +909 -0
  227. package/src/components/toolbar/popup/submitforquote/AddToCartOptions.jsx +192 -0
  228. package/src/components/toolbar/popup/submitforquote/CustomerRequestsForm.jsx +96 -0
  229. package/src/components/toolbar/popup/submitforquote/SkipDesignerReview.jsx +54 -0
  230. package/src/components/toolbar/popup/submitforquote/StepDots.jsx +25 -0
  231. package/src/components/toolbar/popup/submitforquote/cart-choice.jsx +116 -0
  232. package/src/components/toolbar/popup/submitforquote/doorstyle-menus.js +38 -0
  233. package/src/components/toolbar/popup/submitforquote/index.jsx +698 -0
  234. package/src/components/toolbar/popup/submitforquote/styles.js +294 -0
  235. package/src/components/toolbar/popup/submitprompt/index.jsx +89 -0
  236. package/src/components/toolbar/popup/submitprompt/styles.js +42 -0
  237. package/src/components/toolbar/toolbar-button.jsx +90 -0
  238. package/src/components/toolbar/toolbar-load-button.jsx +36 -0
  239. package/src/components/toolbar/toolbar-save-button.jsx +32 -0
  240. package/src/components/tutorial-view/Modal.jsx +584 -0
  241. package/src/components/tutorial-view/styles.js +65 -0
  242. package/src/components/viewer2d/area.jsx +98 -0
  243. package/src/components/viewer2d/export.js +48 -0
  244. package/src/components/viewer2d/grids/grid-horizontal-streak.jsx +40 -0
  245. package/src/components/viewer2d/grids/grid-streak.jsx +32 -0
  246. package/src/components/viewer2d/grids/grid-vertical-streak.jsx +41 -0
  247. package/src/components/viewer2d/grids/grids.jsx +30 -0
  248. package/src/components/viewer2d/group.jsx +57 -0
  249. package/src/components/viewer2d/item.jsx +618 -0
  250. package/src/components/viewer2d/layer.jsx +214 -0
  251. package/src/components/viewer2d/line.jsx +1358 -0
  252. package/src/components/viewer2d/ruler.jsx +136 -0
  253. package/src/components/viewer2d/rulerDist.jsx +192 -0
  254. package/src/components/viewer2d/rulerX.jsx +141 -0
  255. package/src/components/viewer2d/rulerY.jsx +138 -0
  256. package/src/components/viewer2d/scene.jsx +94 -0
  257. package/src/components/viewer2d/snap.jsx +118 -0
  258. package/src/components/viewer2d/state.jsx +77 -0
  259. package/src/components/viewer2d/utils.js +195 -0
  260. package/src/components/viewer2d/vertex.jsx +76 -0
  261. package/src/components/viewer2d/viewer2d.jsx +1830 -0
  262. package/src/components/viewer3d/camera-controls-module/camera-controls.module.js +3078 -0
  263. package/src/components/viewer3d/dcm.js +226 -0
  264. package/src/components/viewer3d/fbm.js +383 -0
  265. package/src/components/viewer3d/front3D.jsx +63 -0
  266. package/src/components/viewer3d/grid-creator.js +25 -0
  267. package/src/components/viewer3d/grids/grid-horizontal-streak.js +41 -0
  268. package/src/components/viewer3d/grids/grid-streak.js +34 -0
  269. package/src/components/viewer3d/grids/grid-vertical-streak.js +42 -0
  270. package/src/components/viewer3d/libs/first-person-controls.js +70 -0
  271. package/src/components/viewer3d/libs/helvetiker_regular.typeface.js +1265 -0
  272. package/src/components/viewer3d/libs/mtl-loader.js +462 -0
  273. package/src/components/viewer3d/libs/obj-loader.js +653 -0
  274. package/src/components/viewer3d/libs/orbit-controls.js +945 -0
  275. package/src/components/viewer3d/libs/pointer-lock-controls.js +67 -0
  276. package/src/components/viewer3d/lrm.js +358 -0
  277. package/src/components/viewer3d/model.js +830 -0
  278. package/src/components/viewer3d/pointer-lock-navigation.js +140 -0
  279. package/src/components/viewer3d/ruler-utils/itemRect.jsx +91 -0
  280. package/src/components/viewer3d/ruler-utils/layer3D.jsx +528 -0
  281. package/src/components/viewer3d/ruler-utils/ruler3D.jsx +218 -0
  282. package/src/components/viewer3d/ruler-utils/scene3D.jsx +87 -0
  283. package/src/components/viewer3d/ruler-utils/state3D.jsx +25 -0
  284. package/src/components/viewer3d/scene-creator.js +5172 -0
  285. package/src/components/viewer3d/three-memory-cleaner.js +65 -0
  286. package/src/components/viewer3d/viewer3d-first-person.js +395 -0
  287. package/src/components/viewer3d/viewer3d.js +3376 -0
  288. package/src/components/wizardstep/button/styles.js +677 -0
  289. package/src/components/wizardstep/export.js +5 -0
  290. package/src/components/wizardstep/index.jsx +1372 -0
  291. package/src/components/wizardstep/styles.js +688 -0
  292. package/src/components/wizardstep/wizardstep-content-button.jsx +198 -0
  293. package/src/components/wizardstep/wizardstep-toggle-button.jsx +101 -0
  294. package/src/constants.js +731 -0
  295. package/src/hooks/useCheckCart.js +38 -0
  296. package/src/hooks/useGetPricesBySku.js +59 -0
  297. package/src/hooks/useValidateToken.js +181 -0
  298. package/src/index.js +32 -0
  299. package/src/models.js +541 -0
  300. package/src/plugins/SVGLoader.js +1991 -0
  301. package/src/plugins/autosave.js +39 -0
  302. package/src/plugins/console-debugger.js +36 -0
  303. package/src/plugins/export.js +11 -0
  304. package/src/plugins/keyboard.js +194 -0
  305. package/src/reducers/areas-reducer.js +13 -0
  306. package/src/reducers/export.js +39 -0
  307. package/src/reducers/groups-reducer.js +73 -0
  308. package/src/reducers/holes-reducer.js +125 -0
  309. package/src/reducers/items-reducer.js +286 -0
  310. package/src/reducers/lines-reducer.js +96 -0
  311. package/src/reducers/project-reducer.js +239 -0
  312. package/src/reducers/reducer.js +59 -0
  313. package/src/reducers/scene-reducer.js +41 -0
  314. package/src/reducers/user-reducer.js +30 -0
  315. package/src/reducers/vertices-reducer.js +34 -0
  316. package/src/reducers/viewer2d-reducer.js +81 -0
  317. package/src/reducers/viewer3d-reducer.js +65 -0
  318. package/src/shared-style.js +72 -0
  319. package/src/styles/export.js +7 -0
  320. package/src/translator/en.js +106 -0
  321. package/src/translator/it.js +80 -0
  322. package/src/translator/ru.js +80 -0
  323. package/src/translator/translator.js +81 -0
  324. package/src/utils/browser.js +36 -0
  325. package/src/utils/email-validator.js +5 -0
  326. package/src/utils/export.js +39 -0
  327. package/src/utils/geometry.js +2572 -0
  328. package/src/utils/get-edges-of-subgraphs.js +29 -0
  329. package/src/utils/graph-cycles.js +259 -0
  330. package/src/utils/graph-inner-cycles.js +49 -0
  331. package/src/utils/graph.js +147 -0
  332. package/src/utils/helper.js +431 -0
  333. package/src/utils/history.js +37 -0
  334. package/src/utils/id-broker.js +9 -0
  335. package/src/utils/logger.js +8 -0
  336. package/src/utils/math.js +51 -0
  337. package/src/utils/molding.js +973 -0
  338. package/src/utils/name-generator.js +5 -0
  339. package/src/utils/objects-utils.js +56 -0
  340. package/src/utils/phone-validator.js +4 -0
  341. package/src/utils/process-black-list.js +10 -0
  342. package/src/utils/react-if.jsx +20 -0
  343. package/src/utils/snap-scene.js +102 -0
  344. package/src/utils/snap.js +184 -0
  345. package/src/utils/threeCSG.es6.js +578 -0
  346. package/src/version.js +1 -0
  347. package/es/@history.js +0 -3
  348. package/es/@history.js.map +0 -1
  349. package/es/AppContext.js +0 -4
  350. package/es/AppContext.js.map +0 -1
  351. package/es/KitchenConfigurator.js +0 -1345
  352. package/es/KitchenConfigurator.js.map +0 -1
  353. package/es/KitchenConfiguratorApp.js +0 -532
  354. package/es/KitchenConfiguratorApp.js.map +0 -1
  355. package/es/actions/area-actions.js +0 -15
  356. package/es/actions/area-actions.js.map +0 -1
  357. package/es/actions/export.js +0 -26
  358. package/es/actions/export.js.map +0 -1
  359. package/es/actions/groups-actions.js +0 -90
  360. package/es/actions/groups-actions.js.map +0 -1
  361. package/es/actions/holes-actions.js +0 -120
  362. package/es/actions/holes-actions.js.map +0 -1
  363. package/es/actions/items-actions.js +0 -314
  364. package/es/actions/items-actions.js.map +0 -1
  365. package/es/actions/lines-actions.js +0 -83
  366. package/es/actions/lines-actions.js.map +0 -1
  367. package/es/actions/project-actions.js +0 -282
  368. package/es/actions/project-actions.js.map +0 -1
  369. package/es/actions/scene-actions.js +0 -34
  370. package/es/actions/scene-actions.js.map +0 -1
  371. package/es/actions/user-actions.js +0 -59
  372. package/es/actions/user-actions.js.map +0 -1
  373. package/es/actions/vertices-actions.js +0 -28
  374. package/es/actions/vertices-actions.js.map +0 -1
  375. package/es/actions/viewer2d-actions.js +0 -59
  376. package/es/actions/viewer2d-actions.js.map +0 -1
  377. package/es/actions/viewer3d-actions.js +0 -24
  378. package/es/actions/viewer3d-actions.js.map +0 -1
  379. package/es/catalog/areas/area/planner-element.js +0 -41
  380. package/es/catalog/areas/area/planner-element.js.map +0 -1
  381. package/es/catalog/catalog.js +0 -278
  382. package/es/catalog/catalog.js.map +0 -1
  383. package/es/catalog/factories/area-factory-3d.js +0 -183
  384. package/es/catalog/factories/area-factory-3d.js.map +0 -1
  385. package/es/catalog/factories/area-factory.js +0 -82
  386. package/es/catalog/factories/area-factory.js.map +0 -1
  387. package/es/catalog/factories/export.js +0 -8
  388. package/es/catalog/factories/export.js.map +0 -1
  389. package/es/catalog/factories/wall-factory-3d.js +0 -203
  390. package/es/catalog/factories/wall-factory-3d.js.map +0 -1
  391. package/es/catalog/factories/wall-factory.js +0 -269
  392. package/es/catalog/factories/wall-factory.js.map +0 -1
  393. package/es/catalog/holes/door-closet/planner-element.js +0 -223
  394. package/es/catalog/holes/door-closet/planner-element.js.map +0 -1
  395. package/es/catalog/holes/door-double/planner-element.js +0 -316
  396. package/es/catalog/holes/door-double/planner-element.js.map +0 -1
  397. package/es/catalog/holes/door-exterior/planner-element.js +0 -216
  398. package/es/catalog/holes/door-exterior/planner-element.js.map +0 -1
  399. package/es/catalog/holes/door-interior/planner-element.js +0 -228
  400. package/es/catalog/holes/door-interior/planner-element.js.map +0 -1
  401. package/es/catalog/holes/door-panic/planner-element.js +0 -504
  402. package/es/catalog/holes/door-panic/planner-element.js.map +0 -1
  403. package/es/catalog/holes/door-panic-double/planner-element.js +0 -464
  404. package/es/catalog/holes/door-panic-double/planner-element.js.map +0 -1
  405. package/es/catalog/holes/door-sliding/planner-element.js +0 -226
  406. package/es/catalog/holes/door-sliding/planner-element.js.map +0 -1
  407. package/es/catalog/holes/doorway-framed/planner-element.js +0 -146
  408. package/es/catalog/holes/doorway-framed/planner-element.js.map +0 -1
  409. package/es/catalog/holes/doorway-frameless/planner-element.js +0 -105
  410. package/es/catalog/holes/doorway-frameless/planner-element.js.map +0 -1
  411. package/es/catalog/holes/window-clear/planner-element.js +0 -167
  412. package/es/catalog/holes/window-clear/planner-element.js.map +0 -1
  413. package/es/catalog/holes/window-cross/planner-element.js +0 -166
  414. package/es/catalog/holes/window-cross/planner-element.js.map +0 -1
  415. package/es/catalog/holes/window-double-hung/planner-element.js +0 -304
  416. package/es/catalog/holes/window-double-hung/planner-element.js.map +0 -1
  417. package/es/catalog/holes/window-vertical/planner-element.js +0 -277
  418. package/es/catalog/holes/window-vertical/planner-element.js.map +0 -1
  419. package/es/catalog/lines/wall/planner-element.js +0 -71
  420. package/es/catalog/lines/wall/planner-element.js.map +0 -1
  421. package/es/catalog/molding/molding-dcm/planner-element.js +0 -30
  422. package/es/catalog/molding/molding-dcm/planner-element.js.map +0 -1
  423. package/es/catalog/molding/molding-fbm/planner-element.js +0 -30
  424. package/es/catalog/molding/molding-fbm/planner-element.js.map +0 -1
  425. package/es/catalog/molding/molding-lrm/planner-element.js +0 -30
  426. package/es/catalog/molding/molding-lrm/planner-element.js.map +0 -1
  427. package/es/catalog/properties/export.js +0 -22
  428. package/es/catalog/properties/export.js.map +0 -1
  429. package/es/catalog/properties/property-checkbox.js +0 -72
  430. package/es/catalog/properties/property-checkbox.js.map +0 -1
  431. package/es/catalog/properties/property-color.js +0 -40
  432. package/es/catalog/properties/property-color.js.map +0 -1
  433. package/es/catalog/properties/property-enum.js +0 -56
  434. package/es/catalog/properties/property-enum.js.map +0 -1
  435. package/es/catalog/properties/property-hidden.js +0 -20
  436. package/es/catalog/properties/property-hidden.js.map +0 -1
  437. package/es/catalog/properties/property-lenght-measure.js +0 -102
  438. package/es/catalog/properties/property-lenght-measure.js.map +0 -1
  439. package/es/catalog/properties/property-length-measure.js +0 -86
  440. package/es/catalog/properties/property-length-measure.js.map +0 -1
  441. package/es/catalog/properties/property-length-measure_hole.js +0 -102
  442. package/es/catalog/properties/property-length-measure_hole.js.map +0 -1
  443. package/es/catalog/properties/property-number.js +0 -49
  444. package/es/catalog/properties/property-number.js.map +0 -1
  445. package/es/catalog/properties/property-read-only.js +0 -27
  446. package/es/catalog/properties/property-read-only.js.map +0 -1
  447. package/es/catalog/properties/property-string.js +0 -49
  448. package/es/catalog/properties/property-string.js.map +0 -1
  449. package/es/catalog/properties/property-toggle.js +0 -40
  450. package/es/catalog/properties/property-toggle.js.map +0 -1
  451. package/es/catalog/properties/shared-property-style.js +0 -15
  452. package/es/catalog/properties/shared-property-style.js.map +0 -1
  453. package/es/catalog/utils/FuseUtils.js +0 -83
  454. package/es/catalog/utils/FuseUtils.js.map +0 -1
  455. package/es/catalog/utils/exporter.js +0 -149
  456. package/es/catalog/utils/exporter.js.map +0 -1
  457. package/es/catalog/utils/geom-utils.js +0 -190
  458. package/es/catalog/utils/geom-utils.js.map +0 -1
  459. package/es/catalog/utils/item-loader.js +0 -1522
  460. package/es/catalog/utils/item-loader.js.map +0 -1
  461. package/es/catalog/utils/load-obj.js +0 -92
  462. package/es/catalog/utils/load-obj.js.map +0 -1
  463. package/es/catalog/utils/mtl-loader.js +0 -358
  464. package/es/catalog/utils/mtl-loader.js.map +0 -1
  465. package/es/catalog/utils/obj-loader.js +0 -477
  466. package/es/catalog/utils/obj-loader.js.map +0 -1
  467. package/es/class/FuseUtils.js +0 -83
  468. package/es/class/FuseUtils.js.map +0 -1
  469. package/es/class/area.js +0 -146
  470. package/es/class/area.js.map +0 -1
  471. package/es/class/export.js +0 -25
  472. package/es/class/export.js.map +0 -1
  473. package/es/class/group.js +0 -441
  474. package/es/class/group.js.map +0 -1
  475. package/es/class/guide.js +0 -63
  476. package/es/class/guide.js.map +0 -1
  477. package/es/class/hole.js +0 -931
  478. package/es/class/hole.js.map +0 -1
  479. package/es/class/item.js +0 -1888
  480. package/es/class/item.js.map +0 -1
  481. package/es/class/layer.js +0 -668
  482. package/es/class/layer.js.map +0 -1
  483. package/es/class/line.js +0 -1290
  484. package/es/class/line.js.map +0 -1
  485. package/es/class/project.js +0 -823
  486. package/es/class/project.js.map +0 -1
  487. package/es/class/vertex.js +0 -267
  488. package/es/class/vertex.js.map +0 -1
  489. package/es/components/atoms/Snackbar/index.js +0 -50
  490. package/es/components/atoms/Snackbar/index.js.map +0 -1
  491. package/es/components/atoms/radio-button/index.js +0 -26
  492. package/es/components/atoms/radio-button/index.js.map +0 -1
  493. package/es/components/atoms/radio-button/styles.js +0 -5
  494. package/es/components/atoms/radio-button/styles.js.map +0 -1
  495. package/es/components/button/MainButton.js +0 -92
  496. package/es/components/button/MainButton.js.map +0 -1
  497. package/es/components/button/ToggleMeasureButton.js +0 -56
  498. package/es/components/button/ToggleMeasureButton.js.map +0 -1
  499. package/es/components/catalog-view/catalog-breadcrumb.js +0 -53
  500. package/es/components/catalog-view/catalog-breadcrumb.js.map +0 -1
  501. package/es/components/catalog-view/catalog-item.js +0 -226
  502. package/es/components/catalog-view/catalog-item.js.map +0 -1
  503. package/es/components/catalog-view/catalog-list.js +0 -182
  504. package/es/components/catalog-view/catalog-list.js.map +0 -1
  505. package/es/components/catalog-view/catalog-page-item.js +0 -130
  506. package/es/components/catalog-view/catalog-page-item.js.map +0 -1
  507. package/es/components/catalog-view/catalog-turn-back-page-item.js +0 -106
  508. package/es/components/catalog-view/catalog-turn-back-page-item.js.map +0 -1
  509. package/es/components/configurator/custom-configurator.js +0 -94
  510. package/es/components/configurator/custom-configurator.js.map +0 -1
  511. package/es/components/configurator/project-configurator.js +0 -131
  512. package/es/components/configurator/project-configurator.js.map +0 -1
  513. package/es/components/content.js +0 -123
  514. package/es/components/content.js.map +0 -1
  515. package/es/components/export.js +0 -24
  516. package/es/components/export.js.map +0 -1
  517. package/es/components/firstsetting/button/styles.js +0 -27
  518. package/es/components/firstsetting/button/styles.js.map +0 -1
  519. package/es/components/firstsetting/export.js +0 -9
  520. package/es/components/firstsetting/export.js.map +0 -1
  521. package/es/components/firstsetting/firstsetting-content-button.js +0 -217
  522. package/es/components/firstsetting/firstsetting-content-button.js.map +0 -1
  523. package/es/components/firstsetting/firstsetting-toggle-button.js +0 -126
  524. package/es/components/firstsetting/firstsetting-toggle-button.js.map +0 -1
  525. package/es/components/firstsetting/firstsetting.js +0 -626
  526. package/es/components/firstsetting/firstsetting.js.map +0 -1
  527. package/es/components/footerbar/button/ControlButton.js +0 -72
  528. package/es/components/footerbar/button/ControlButton.js.map +0 -1
  529. package/es/components/footerbar/button/DirectionButton.js +0 -69
  530. package/es/components/footerbar/button/DirectionButton.js.map +0 -1
  531. package/es/components/footerbar/button/DirectionPanSpinButton.js +0 -50
  532. package/es/components/footerbar/button/DirectionPanSpinButton.js.map +0 -1
  533. package/es/components/footerbar/button/ToggleButton.js +0 -76
  534. package/es/components/footerbar/button/ToggleButton.js.map +0 -1
  535. package/es/components/footerbar/button/ToggleConvertButton.js +0 -73
  536. package/es/components/footerbar/button/ToggleConvertButton.js.map +0 -1
  537. package/es/components/footerbar/button/ToggleMeasureButton.js +0 -52
  538. package/es/components/footerbar/button/ToggleMeasureButton.js.map +0 -1
  539. package/es/components/footerbar/button/styles.js +0 -22
  540. package/es/components/footerbar/button/styles.js.map +0 -1
  541. package/es/components/footerbar/export.js +0 -9
  542. package/es/components/footerbar/export.js.map +0 -1
  543. package/es/components/footerbar/footer-content-button.js +0 -217
  544. package/es/components/footerbar/footer-content-button.js.map +0 -1
  545. package/es/components/footerbar/footer-toggle-button.js +0 -126
  546. package/es/components/footerbar/footer-toggle-button.js.map +0 -1
  547. package/es/components/footerbar/footerbar.js +0 -801
  548. package/es/components/footerbar/footerbar.js.map +0 -1
  549. package/es/components/footerbar/styles.js +0 -34
  550. package/es/components/footerbar/styles.js.map +0 -1
  551. package/es/components/header/button/MenuButton.js +0 -70
  552. package/es/components/header/button/MenuButton.js.map +0 -1
  553. package/es/components/header/button/SaveButton.js +0 -48
  554. package/es/components/header/button/SaveButton.js.map +0 -1
  555. package/es/components/header/button/styles.js +0 -59
  556. package/es/components/header/button/styles.js.map +0 -1
  557. package/es/components/header/export.js +0 -5
  558. package/es/components/header/export.js.map +0 -1
  559. package/es/components/header/header.js +0 -550
  560. package/es/components/header/header.js.map +0 -1
  561. package/es/components/header/styles.js +0 -41
  562. package/es/components/header/styles.js.map +0 -1
  563. package/es/components/login/Login.js +0 -86
  564. package/es/components/login/Login.js.map +0 -1
  565. package/es/components/login/LoginForm/index.js +0 -132
  566. package/es/components/login/LoginForm/index.js.map +0 -1
  567. package/es/components/login/Register.js +0 -96
  568. package/es/components/login/Register.js.map +0 -1
  569. package/es/components/login/RegisterForm/index.js +0 -230
  570. package/es/components/login/RegisterForm/index.js.map +0 -1
  571. package/es/components/login/jwtService.js +0 -232
  572. package/es/components/login/jwtService.js.map +0 -1
  573. package/es/components/molecules/slider/index.js +0 -13
  574. package/es/components/molecules/slider/index.js.map +0 -1
  575. package/es/components/molecules/slider/styles.js +0 -2
  576. package/es/components/molecules/slider/styles.js.map +0 -1
  577. package/es/components/myprojects/export.js +0 -5
  578. package/es/components/myprojects/export.js.map +0 -1
  579. package/es/components/myprojects/index.js +0 -446
  580. package/es/components/myprojects/index.js.map +0 -1
  581. package/es/components/myprojects/styles.js +0 -24
  582. package/es/components/myprojects/styles.js.map +0 -1
  583. package/es/components/sidebar/custom-accordion.js +0 -38
  584. package/es/components/sidebar/custom-accordion.js.map +0 -1
  585. package/es/components/sidebar/export.js +0 -14
  586. package/es/components/sidebar/export.js.map +0 -1
  587. package/es/components/sidebar/panel-element-editor/attributes-editor/attributes-editor.js +0 -65
  588. package/es/components/sidebar/panel-element-editor/attributes-editor/attributes-editor.js.map +0 -1
  589. package/es/components/sidebar/panel-element-editor/attributes-editor/confirm-popup.js +0 -116
  590. package/es/components/sidebar/panel-element-editor/attributes-editor/confirm-popup.js.map +0 -1
  591. package/es/components/sidebar/panel-element-editor/attributes-editor/hole-attributes-editor.js +0 -126
  592. package/es/components/sidebar/panel-element-editor/attributes-editor/hole-attributes-editor.js.map +0 -1
  593. package/es/components/sidebar/panel-element-editor/attributes-editor/item-attributes-editor.js +0 -251
  594. package/es/components/sidebar/panel-element-editor/attributes-editor/item-attributes-editor.js.map +0 -1
  595. package/es/components/sidebar/panel-element-editor/attributes-editor/line-attributes-editor.js +0 -75
  596. package/es/components/sidebar/panel-element-editor/attributes-editor/line-attributes-editor.js.map +0 -1
  597. package/es/components/sidebar/panel-element-editor/element-editor.js +0 -878
  598. package/es/components/sidebar/panel-element-editor/element-editor.js.map +0 -1
  599. package/es/components/sidebar/panel-element-editor/multi-elements-editor.js +0 -2
  600. package/es/components/sidebar/panel-element-editor/multi-elements-editor.js.map +0 -1
  601. package/es/components/sidebar/panel-element-editor/panel-element-editor.js +0 -49
  602. package/es/components/sidebar/panel-element-editor/panel-element-editor.js.map +0 -1
  603. package/es/components/sidebar/panel-element-editor/panel-multi-elements-editor.js +0 -118
  604. package/es/components/sidebar/panel-element-editor/panel-multi-elements-editor.js.map +0 -1
  605. package/es/components/sidebar/panel-group-editor.js +0 -211
  606. package/es/components/sidebar/panel-group-editor.js.map +0 -1
  607. package/es/components/sidebar/panel-groups.js +0 -267
  608. package/es/components/sidebar/panel-groups.js.map +0 -1
  609. package/es/components/sidebar/panel-guides.js +0 -185
  610. package/es/components/sidebar/panel-guides.js.map +0 -1
  611. package/es/components/sidebar/panel-layer-elements.js +0 -251
  612. package/es/components/sidebar/panel-layer-elements.js.map +0 -1
  613. package/es/components/sidebar/panel-layers.js +0 -340
  614. package/es/components/sidebar/panel-layers.js.map +0 -1
  615. package/es/components/sidebar/panel.js +0 -103
  616. package/es/components/sidebar/panel.js.map +0 -1
  617. package/es/components/sidebar/sidebar.js +0 -109
  618. package/es/components/sidebar/sidebar.js.map +0 -1
  619. package/es/components/sidebar/toolbar-panel.js +0 -164
  620. package/es/components/sidebar/toolbar-panel.js.map +0 -1
  621. package/es/components/sign/export.js +0 -6
  622. package/es/components/sign/export.js.map +0 -1
  623. package/es/components/sign/main/index.js +0 -560
  624. package/es/components/sign/main/index.js.map +0 -1
  625. package/es/components/sign/main/styles.js +0 -20
  626. package/es/components/sign/main/styles.js.map +0 -1
  627. package/es/components/style/button.js +0 -114
  628. package/es/components/style/button.js.map +0 -1
  629. package/es/components/style/cancel-button.js +0 -23
  630. package/es/components/style/cancel-button.js.map +0 -1
  631. package/es/components/style/content-container.js +0 -34
  632. package/es/components/style/content-container.js.map +0 -1
  633. package/es/components/style/content-title.js +0 -30
  634. package/es/components/style/content-title.js.map +0 -1
  635. package/es/components/style/delete-button.js +0 -26
  636. package/es/components/style/delete-button.js.map +0 -1
  637. package/es/components/style/export.js +0 -32
  638. package/es/components/style/export.js.map +0 -1
  639. package/es/components/style/form-block.js +0 -25
  640. package/es/components/style/form-block.js.map +0 -1
  641. package/es/components/style/form-color-input.js +0 -28
  642. package/es/components/style/form-color-input.js.map +0 -1
  643. package/es/components/style/form-label.js +0 -27
  644. package/es/components/style/form-label.js.map +0 -1
  645. package/es/components/style/form-number-input.js +0 -190
  646. package/es/components/style/form-number-input.js.map +0 -1
  647. package/es/components/style/form-number-input_2.js +0 -207
  648. package/es/components/style/form-number-input_2.js.map +0 -1
  649. package/es/components/style/form-select.js +0 -21
  650. package/es/components/style/form-select.js.map +0 -1
  651. package/es/components/style/form-slider.js +0 -46
  652. package/es/components/style/form-slider.js.map +0 -1
  653. package/es/components/style/form-submit-button.js +0 -27
  654. package/es/components/style/form-submit-button.js.map +0 -1
  655. package/es/components/style/form-text-input.js +0 -77
  656. package/es/components/style/form-text-input.js.map +0 -1
  657. package/es/components/toolbar/button/ControlButton.js +0 -69
  658. package/es/components/toolbar/button/ControlButton.js.map +0 -1
  659. package/es/components/toolbar/button/DirectionButton.js +0 -50
  660. package/es/components/toolbar/button/DirectionButton.js.map +0 -1
  661. package/es/components/toolbar/button/RightButton.js +0 -133
  662. package/es/components/toolbar/button/RightButton.js.map +0 -1
  663. package/es/components/toolbar/button/ToggleButton.js +0 -59
  664. package/es/components/toolbar/button/ToggleButton.js.map +0 -1
  665. package/es/components/toolbar/button/index.js +0 -88
  666. package/es/components/toolbar/button/index.js.map +0 -1
  667. package/es/components/toolbar/button/styles.js +0 -14
  668. package/es/components/toolbar/button/styles.js.map +0 -1
  669. package/es/components/toolbar/components/DoorStyleMenu.js +0 -105
  670. package/es/components/toolbar/components/DoorStyleMenu.js.map +0 -1
  671. package/es/components/toolbar/components/Pricing.js +0 -101
  672. package/es/components/toolbar/components/Pricing.js.map +0 -1
  673. package/es/components/toolbar/components/ReviewForQuote.js +0 -476
  674. package/es/components/toolbar/components/ReviewForQuote.js.map +0 -1
  675. package/es/components/toolbar/export.js +0 -14
  676. package/es/components/toolbar/export.js.map +0 -1
  677. package/es/components/toolbar/main/Alert.js +0 -125
  678. package/es/components/toolbar/main/Alert.js.map +0 -1
  679. package/es/components/toolbar/main/TakePictureModal.js +0 -100
  680. package/es/components/toolbar/main/TakePictureModal.js.map +0 -1
  681. package/es/components/toolbar/main/confirm-popup.js +0 -88
  682. package/es/components/toolbar/main/confirm-popup.js.map +0 -1
  683. package/es/components/toolbar/main/index.js +0 -4612
  684. package/es/components/toolbar/main/index.js.map +0 -1
  685. package/es/components/toolbar/main/myComponents.js +0 -118
  686. package/es/components/toolbar/main/myComponents.js.map +0 -1
  687. package/es/components/toolbar/main/styles.js +0 -64
  688. package/es/components/toolbar/main/styles.js.map +0 -1
  689. package/es/components/toolbar/plugin-item.js +0 -150
  690. package/es/components/toolbar/plugin-item.js.map +0 -1
  691. package/es/components/toolbar/popup/appliance/appliance-category/index.js +0 -77
  692. package/es/components/toolbar/popup/appliance/appliance-category/index.js.map +0 -1
  693. package/es/components/toolbar/popup/appliance/choose-appliance/index.js +0 -76
  694. package/es/components/toolbar/popup/appliance/choose-appliance/index.js.map +0 -1
  695. package/es/components/toolbar/popup/appliance/index.js +0 -81
  696. package/es/components/toolbar/popup/appliance/index.js.map +0 -1
  697. package/es/components/toolbar/popup/autosaveprompt/index.js +0 -91
  698. package/es/components/toolbar/popup/autosaveprompt/index.js.map +0 -1
  699. package/es/components/toolbar/popup/autosaveprompt/styles.js +0 -9
  700. package/es/components/toolbar/popup/autosaveprompt/styles.js.map +0 -1
  701. package/es/components/toolbar/popup/cabinet/cabinet-category/index.js +0 -77
  702. package/es/components/toolbar/popup/cabinet/cabinet-category/index.js.map +0 -1
  703. package/es/components/toolbar/popup/cabinet/choose-product/index.js +0 -98
  704. package/es/components/toolbar/popup/cabinet/choose-product/index.js.map +0 -1
  705. package/es/components/toolbar/popup/cabinet/index.js +0 -83
  706. package/es/components/toolbar/popup/cabinet/index.js.map +0 -1
  707. package/es/components/toolbar/popup/doorStyle/choose-style/index.js +0 -50
  708. package/es/components/toolbar/popup/doorStyle/choose-style/index.js.map +0 -1
  709. package/es/components/toolbar/popup/doorStyle/index.js +0 -61
  710. package/es/components/toolbar/popup/doorStyle/index.js.map +0 -1
  711. package/es/components/toolbar/popup/doorStyle/style-category/index.js +0 -143
  712. package/es/components/toolbar/popup/doorStyle/style-category/index.js.map +0 -1
  713. package/es/components/toolbar/popup/downloadsummary/downloadSummaryContext.js +0 -3
  714. package/es/components/toolbar/popup/downloadsummary/downloadSummaryContext.js.map +0 -1
  715. package/es/components/toolbar/popup/downloadsummary/downloadSummaryTemp.js +0 -119
  716. package/es/components/toolbar/popup/downloadsummary/downloadSummaryTemp.js.map +0 -1
  717. package/es/components/toolbar/popup/downloadsummary/index.js +0 -564
  718. package/es/components/toolbar/popup/downloadsummary/index.js.map +0 -1
  719. package/es/components/toolbar/popup/downloadsummary/show2D/show2DView.js +0 -51
  720. package/es/components/toolbar/popup/downloadsummary/show2D/show2DView.js.map +0 -1
  721. package/es/components/toolbar/popup/downloadsummary/show2D/viewer2DDownLoad.js +0 -191
  722. package/es/components/toolbar/popup/downloadsummary/show2D/viewer2DDownLoad.js.map +0 -1
  723. package/es/components/toolbar/popup/downloadsummary/show3D/show3DView.js +0 -245
  724. package/es/components/toolbar/popup/downloadsummary/show3D/show3DView.js.map +0 -1
  725. package/es/components/toolbar/popup/downloadsummary/show3D/viewer3DDownLoad.js +0 -1758
  726. package/es/components/toolbar/popup/downloadsummary/show3D/viewer3DDownLoad.js.map +0 -1
  727. package/es/components/toolbar/popup/downloadsummary/showCabinetInfo.js +0 -87
  728. package/es/components/toolbar/popup/downloadsummary/showCabinetInfo.js.map +0 -1
  729. package/es/components/toolbar/popup/downloadsummary/showElevation/showElevationView.js +0 -116
  730. package/es/components/toolbar/popup/downloadsummary/showElevation/showElevationView.js.map +0 -1
  731. package/es/components/toolbar/popup/downloadsummary/showElevation/viewer3DElevationDownload.js +0 -1710
  732. package/es/components/toolbar/popup/downloadsummary/showElevation/viewer3DElevationDownload.js.map +0 -1
  733. package/es/components/toolbar/popup/downloadsummary/showElevation/viewerElevationDownload.js +0 -175
  734. package/es/components/toolbar/popup/downloadsummary/showElevation/viewerElevationDownload.js.map +0 -1
  735. package/es/components/toolbar/popup/downloadsummary/showWarranty.js +0 -106
  736. package/es/components/toolbar/popup/downloadsummary/showWarranty.js.map +0 -1
  737. package/es/components/toolbar/popup/downloadsummary/styles.js +0 -40
  738. package/es/components/toolbar/popup/downloadsummary/styles.js.map +0 -1
  739. package/es/components/toolbar/popup/finishingtouch/category/index.js +0 -35
  740. package/es/components/toolbar/popup/finishingtouch/category/index.js.map +0 -1
  741. package/es/components/toolbar/popup/finishingtouch/index.js +0 -47
  742. package/es/components/toolbar/popup/finishingtouch/index.js.map +0 -1
  743. package/es/components/toolbar/popup/finishingtouch/material-edit.js +0 -156
  744. package/es/components/toolbar/popup/finishingtouch/material-edit.js.map +0 -1
  745. package/es/components/toolbar/popup/finishingtouch/product/index.js +0 -56
  746. package/es/components/toolbar/popup/finishingtouch/product/index.js.map +0 -1
  747. package/es/components/toolbar/popup/floorplan/choose-floor/confirm-popup.js +0 -116
  748. package/es/components/toolbar/popup/floorplan/choose-floor/confirm-popup.js.map +0 -1
  749. package/es/components/toolbar/popup/floorplan/choose-floor/index.js +0 -246
  750. package/es/components/toolbar/popup/floorplan/choose-floor/index.js.map +0 -1
  751. package/es/components/toolbar/popup/floorplan/choose-floor/styles.js +0 -11
  752. package/es/components/toolbar/popup/floorplan/choose-floor/styles.js.map +0 -1
  753. package/es/components/toolbar/popup/floorplan/floor-category/index.js +0 -90
  754. package/es/components/toolbar/popup/floorplan/floor-category/index.js.map +0 -1
  755. package/es/components/toolbar/popup/floorplan/index.js +0 -49
  756. package/es/components/toolbar/popup/floorplan/index.js.map +0 -1
  757. package/es/components/toolbar/popup/index.js +0 -188
  758. package/es/components/toolbar/popup/index.js.map +0 -1
  759. package/es/components/toolbar/popup/newproject/index.js +0 -67
  760. package/es/components/toolbar/popup/newproject/index.js.map +0 -1
  761. package/es/components/toolbar/popup/newproject/styles.js +0 -9
  762. package/es/components/toolbar/popup/newproject/styles.js.map +0 -1
  763. package/es/components/toolbar/popup/product/appliance.js +0 -65
  764. package/es/components/toolbar/popup/product/appliance.js.map +0 -1
  765. package/es/components/toolbar/popup/product/cabinetproduct.js +0 -25
  766. package/es/components/toolbar/popup/product/cabinetproduct.js.map +0 -1
  767. package/es/components/toolbar/popup/product/doorstyle.js +0 -50
  768. package/es/components/toolbar/popup/product/doorstyle.js.map +0 -1
  769. package/es/components/toolbar/popup/product/doorstyleproduct.js +0 -51
  770. package/es/components/toolbar/popup/product/doorstyleproduct.js.map +0 -1
  771. package/es/components/toolbar/popup/product/floor.js +0 -52
  772. package/es/components/toolbar/popup/product/floor.js.map +0 -1
  773. package/es/components/toolbar/popup/product/floorproduct.js +0 -61
  774. package/es/components/toolbar/popup/product/floorproduct.js.map +0 -1
  775. package/es/components/toolbar/popup/product/index.js +0 -52
  776. package/es/components/toolbar/popup/product/index.js.map +0 -1
  777. package/es/components/toolbar/popup/product/primary.js +0 -63
  778. package/es/components/toolbar/popup/product/primary.js.map +0 -1
  779. package/es/components/toolbar/popup/product/productline.js +0 -120
  780. package/es/components/toolbar/popup/product/productline.js.map +0 -1
  781. package/es/components/toolbar/popup/product/reviewItem.js +0 -338
  782. package/es/components/toolbar/popup/product/reviewItem.js.map +0 -1
  783. package/es/components/toolbar/popup/product/reviewMolding.js +0 -282
  784. package/es/components/toolbar/popup/product/reviewMolding.js.map +0 -1
  785. package/es/components/toolbar/popup/product/styles.js +0 -71
  786. package/es/components/toolbar/popup/product/styles.js.map +0 -1
  787. package/es/components/toolbar/popup/savedesign/FullPictureForm.js +0 -161
  788. package/es/components/toolbar/popup/savedesign/FullPictureForm.js.map +0 -1
  789. package/es/components/toolbar/popup/savedesign/index.js +0 -508
  790. package/es/components/toolbar/popup/savedesign/index.js.map +0 -1
  791. package/es/components/toolbar/popup/savedesign/styles.js +0 -19
  792. package/es/components/toolbar/popup/savedesign/styles.js.map +0 -1
  793. package/es/components/toolbar/popup/setDoorStyleOption/index.js +0 -57
  794. package/es/components/toolbar/popup/setDoorStyleOption/index.js.map +0 -1
  795. package/es/components/toolbar/popup/styles.js +0 -98
  796. package/es/components/toolbar/popup/styles.js.map +0 -1
  797. package/es/components/toolbar/popup/submitforquote/AddToCartOptions.js +0 -157
  798. package/es/components/toolbar/popup/submitforquote/AddToCartOptions.js.map +0 -1
  799. package/es/components/toolbar/popup/submitforquote/CustomerRequestsForm.js +0 -85
  800. package/es/components/toolbar/popup/submitforquote/CustomerRequestsForm.js.map +0 -1
  801. package/es/components/toolbar/popup/submitforquote/SkipDesignerReview.js +0 -36
  802. package/es/components/toolbar/popup/submitforquote/SkipDesignerReview.js.map +0 -1
  803. package/es/components/toolbar/popup/submitforquote/StepDots.js +0 -33
  804. package/es/components/toolbar/popup/submitforquote/StepDots.js.map +0 -1
  805. package/es/components/toolbar/popup/submitforquote/cart-choice.js +0 -132
  806. package/es/components/toolbar/popup/submitforquote/cart-choice.js.map +0 -1
  807. package/es/components/toolbar/popup/submitforquote/doorstyle-menus.js +0 -43
  808. package/es/components/toolbar/popup/submitforquote/doorstyle-menus.js.map +0 -1
  809. package/es/components/toolbar/popup/submitforquote/index.js +0 -690
  810. package/es/components/toolbar/popup/submitforquote/index.js.map +0 -1
  811. package/es/components/toolbar/popup/submitforquote/styles.js +0 -31
  812. package/es/components/toolbar/popup/submitforquote/styles.js.map +0 -1
  813. package/es/components/toolbar/popup/submitprompt/index.js +0 -71
  814. package/es/components/toolbar/popup/submitprompt/index.js.map +0 -1
  815. package/es/components/toolbar/popup/submitprompt/styles.js +0 -9
  816. package/es/components/toolbar/popup/submitprompt/styles.js.map +0 -1
  817. package/es/components/toolbar/toolbar-button.js +0 -105
  818. package/es/components/toolbar/toolbar-button.js.map +0 -1
  819. package/es/components/toolbar/toolbar-load-button.js +0 -29
  820. package/es/components/toolbar/toolbar-load-button.js.map +0 -1
  821. package/es/components/toolbar/toolbar-save-button.js +0 -27
  822. package/es/components/toolbar/toolbar-save-button.js.map +0 -1
  823. package/es/components/tutorial-view/Modal.js +0 -498
  824. package/es/components/tutorial-view/Modal.js.map +0 -1
  825. package/es/components/tutorial-view/styles.js +0 -6
  826. package/es/components/tutorial-view/styles.js.map +0 -1
  827. package/es/components/viewer2d/area.js +0 -83
  828. package/es/components/viewer2d/area.js.map +0 -1
  829. package/es/components/viewer2d/export.js +0 -32
  830. package/es/components/viewer2d/export.js.map +0 -1
  831. package/es/components/viewer2d/grids/grid-horizontal-streak.js +0 -38
  832. package/es/components/viewer2d/grids/grid-horizontal-streak.js.map +0 -1
  833. package/es/components/viewer2d/grids/grid-streak.js +0 -38
  834. package/es/components/viewer2d/grids/grid-streak.js.map +0 -1
  835. package/es/components/viewer2d/grids/grid-vertical-streak.js +0 -38
  836. package/es/components/viewer2d/grids/grid-vertical-streak.js.map +0 -1
  837. package/es/components/viewer2d/grids/grids.js +0 -36
  838. package/es/components/viewer2d/grids/grids.js.map +0 -1
  839. package/es/components/viewer2d/group.js +0 -54
  840. package/es/components/viewer2d/group.js.map +0 -1
  841. package/es/components/viewer2d/item.js +0 -514
  842. package/es/components/viewer2d/item.js.map +0 -1
  843. package/es/components/viewer2d/layer.js +0 -165
  844. package/es/components/viewer2d/layer.js.map +0 -1
  845. package/es/components/viewer2d/line.js +0 -889
  846. package/es/components/viewer2d/line.js.map +0 -1
  847. package/es/components/viewer2d/ruler.js +0 -101
  848. package/es/components/viewer2d/ruler.js.map +0 -1
  849. package/es/components/viewer2d/rulerDist.js +0 -147
  850. package/es/components/viewer2d/rulerDist.js.map +0 -1
  851. package/es/components/viewer2d/rulerX.js +0 -152
  852. package/es/components/viewer2d/rulerX.js.map +0 -1
  853. package/es/components/viewer2d/rulerY.js +0 -154
  854. package/es/components/viewer2d/rulerY.js.map +0 -1
  855. package/es/components/viewer2d/scene.js +0 -141
  856. package/es/components/viewer2d/scene.js.map +0 -1
  857. package/es/components/viewer2d/snap.js +0 -75
  858. package/es/components/viewer2d/snap.js.map +0 -1
  859. package/es/components/viewer2d/state.js +0 -79
  860. package/es/components/viewer2d/state.js.map +0 -1
  861. package/es/components/viewer2d/utils.js +0 -163
  862. package/es/components/viewer2d/utils.js.map +0 -1
  863. package/es/components/viewer2d/vertex.js +0 -67
  864. package/es/components/viewer2d/vertex.js.map +0 -1
  865. package/es/components/viewer2d/viewer2d.js +0 -1402
  866. package/es/components/viewer2d/viewer2d.js.map +0 -1
  867. package/es/components/viewer3d/camera-controls-module/camera-controls.module.js +0 -2593
  868. package/es/components/viewer3d/camera-controls-module/camera-controls.module.js.map +0 -1
  869. package/es/components/viewer3d/dcm.js +0 -402
  870. package/es/components/viewer3d/dcm.js.map +0 -1
  871. package/es/components/viewer3d/fbm.js +0 -415
  872. package/es/components/viewer3d/fbm.js.map +0 -1
  873. package/es/components/viewer3d/front3D.js +0 -67
  874. package/es/components/viewer3d/front3D.js.map +0 -1
  875. package/es/components/viewer3d/grid-creator.js +0 -26
  876. package/es/components/viewer3d/grid-creator.js.map +0 -1
  877. package/es/components/viewer3d/grids/grid-horizontal-streak.js +0 -37
  878. package/es/components/viewer3d/grids/grid-horizontal-streak.js.map +0 -1
  879. package/es/components/viewer3d/grids/grid-streak.js +0 -28
  880. package/es/components/viewer3d/grids/grid-streak.js.map +0 -1
  881. package/es/components/viewer3d/grids/grid-vertical-streak.js +0 -37
  882. package/es/components/viewer3d/grids/grid-vertical-streak.js.map +0 -1
  883. package/es/components/viewer3d/libs/first-person-controls.js +0 -68
  884. package/es/components/viewer3d/libs/first-person-controls.js.map +0 -1
  885. package/es/components/viewer3d/libs/helvetiker_regular.typeface.js +0 -1282
  886. package/es/components/viewer3d/libs/helvetiker_regular.typeface.js.map +0 -1
  887. package/es/components/viewer3d/libs/mtl-loader.js +0 -358
  888. package/es/components/viewer3d/libs/mtl-loader.js.map +0 -1
  889. package/es/components/viewer3d/libs/obj-loader.js +0 -463
  890. package/es/components/viewer3d/libs/obj-loader.js.map +0 -1
  891. package/es/components/viewer3d/libs/orbit-controls.js +0 -699
  892. package/es/components/viewer3d/libs/orbit-controls.js.map +0 -1
  893. package/es/components/viewer3d/libs/pointer-lock-controls.js +0 -46
  894. package/es/components/viewer3d/libs/pointer-lock-controls.js.map +0 -1
  895. package/es/components/viewer3d/lrm.js +0 -306
  896. package/es/components/viewer3d/lrm.js.map +0 -1
  897. package/es/components/viewer3d/model.js +0 -709
  898. package/es/components/viewer3d/model.js.map +0 -1
  899. package/es/components/viewer3d/pointer-lock-navigation.js +0 -116
  900. package/es/components/viewer3d/pointer-lock-navigation.js.map +0 -1
  901. package/es/components/viewer3d/ruler-utils/itemRect.js +0 -62
  902. package/es/components/viewer3d/ruler-utils/itemRect.js.map +0 -1
  903. package/es/components/viewer3d/ruler-utils/layer3D.js +0 -496
  904. package/es/components/viewer3d/ruler-utils/layer3D.js.map +0 -1
  905. package/es/components/viewer3d/ruler-utils/ruler3D.js +0 -228
  906. package/es/components/viewer3d/ruler-utils/ruler3D.js.map +0 -1
  907. package/es/components/viewer3d/ruler-utils/scene3D.js +0 -62
  908. package/es/components/viewer3d/ruler-utils/scene3D.js.map +0 -1
  909. package/es/components/viewer3d/ruler-utils/state3D.js +0 -19
  910. package/es/components/viewer3d/ruler-utils/state3D.js.map +0 -1
  911. package/es/components/viewer3d/scene-creator.js +0 -3607
  912. package/es/components/viewer3d/scene-creator.js.map +0 -1
  913. package/es/components/viewer3d/three-memory-cleaner.js +0 -52
  914. package/es/components/viewer3d/three-memory-cleaner.js.map +0 -1
  915. package/es/components/viewer3d/viewer3d-first-person.js +0 -316
  916. package/es/components/viewer3d/viewer3d-first-person.js.map +0 -1
  917. package/es/components/viewer3d/viewer3d.js +0 -2504
  918. package/es/components/viewer3d/viewer3d.js.map +0 -1
  919. package/es/components/wizardstep/button/styles.js +0 -60
  920. package/es/components/wizardstep/button/styles.js.map +0 -1
  921. package/es/components/wizardstep/export.js +0 -5
  922. package/es/components/wizardstep/export.js.map +0 -1
  923. package/es/components/wizardstep/index.js +0 -971
  924. package/es/components/wizardstep/index.js.map +0 -1
  925. package/es/components/wizardstep/styles.js +0 -61
  926. package/es/components/wizardstep/styles.js.map +0 -1
  927. package/es/components/wizardstep/wizardstep-content-button.js +0 -217
  928. package/es/components/wizardstep/wizardstep-content-button.js.map +0 -1
  929. package/es/components/wizardstep/wizardstep-toggle-button.js +0 -126
  930. package/es/components/wizardstep/wizardstep-toggle-button.js.map +0 -1
  931. package/es/constants.js +0 -637
  932. package/es/constants.js.map +0 -1
  933. package/es/hooks/useCheckCart.js +0 -53
  934. package/es/hooks/useCheckCart.js.map +0 -1
  935. package/es/hooks/useGetPricesBySku.js +0 -74
  936. package/es/hooks/useGetPricesBySku.js.map +0 -1
  937. package/es/hooks/useValidateToken.js +0 -201
  938. package/es/hooks/useValidateToken.js.map +0 -1
  939. package/es/index.js +0 -17
  940. package/es/index.js.map +0 -1
  941. package/es/models.js +0 -511
  942. package/es/models.js.map +0 -1
  943. package/es/plugins/SVGLoader.js +0 -1413
  944. package/es/plugins/SVGLoader.js.map +0 -1
  945. package/es/plugins/autosave.js +0 -34
  946. package/es/plugins/autosave.js.map +0 -1
  947. package/es/plugins/console-debugger.js +0 -38
  948. package/es/plugins/console-debugger.js.map +0 -1
  949. package/es/plugins/export.js +0 -10
  950. package/es/plugins/export.js.map +0 -1
  951. package/es/plugins/keyboard.js +0 -102
  952. package/es/plugins/keyboard.js.map +0 -1
  953. package/es/reducers/areas-reducer.js +0 -13
  954. package/es/reducers/areas-reducer.js.map +0 -1
  955. package/es/reducers/export.js +0 -26
  956. package/es/reducers/export.js.map +0 -1
  957. package/es/reducers/groups-reducer.js +0 -39
  958. package/es/reducers/groups-reducer.js.map +0 -1
  959. package/es/reducers/holes-reducer.js +0 -63
  960. package/es/reducers/holes-reducer.js.map +0 -1
  961. package/es/reducers/items-reducer.js +0 -144
  962. package/es/reducers/items-reducer.js.map +0 -1
  963. package/es/reducers/lines-reducer.js +0 -46
  964. package/es/reducers/lines-reducer.js.map +0 -1
  965. package/es/reducers/project-reducer.js +0 -130
  966. package/es/reducers/project-reducer.js.map +0 -1
  967. package/es/reducers/reducer.js +0 -20
  968. package/es/reducers/reducer.js.map +0 -1
  969. package/es/reducers/scene-reducer.js +0 -29
  970. package/es/reducers/scene-reducer.js.map +0 -1
  971. package/es/reducers/user-reducer.js +0 -42
  972. package/es/reducers/user-reducer.js.map +0 -1
  973. package/es/reducers/vertices-reducer.js +0 -20
  974. package/es/reducers/vertices-reducer.js.map +0 -1
  975. package/es/reducers/viewer2d-reducer.js +0 -76
  976. package/es/reducers/viewer2d-reducer.js.map +0 -1
  977. package/es/reducers/viewer3d-reducer.js +0 -57
  978. package/es/reducers/viewer3d-reducer.js.map +0 -1
  979. package/es/shared-style.js +0 -67
  980. package/es/shared-style.js.map +0 -1
  981. package/es/styles/export.js +0 -6
  982. package/es/styles/export.js.map +0 -1
  983. package/es/translator/en.js +0 -105
  984. package/es/translator/en.js.map +0 -1
  985. package/es/translator/it.js +0 -80
  986. package/es/translator/it.js.map +0 -1
  987. package/es/translator/ru.js +0 -80
  988. package/es/translator/ru.js.map +0 -1
  989. package/es/translator/translator.js +0 -85
  990. package/es/translator/translator.js.map +0 -1
  991. package/es/utils/browser.js +0 -34
  992. package/es/utils/browser.js.map +0 -1
  993. package/es/utils/email-validator.js +0 -5
  994. package/es/utils/email-validator.js.map +0 -1
  995. package/es/utils/export.js +0 -26
  996. package/es/utils/export.js.map +0 -1
  997. package/es/utils/geometry.js +0 -2237
  998. package/es/utils/geometry.js.map +0 -1
  999. package/es/utils/get-edges-of-subgraphs.js +0 -27
  1000. package/es/utils/get-edges-of-subgraphs.js.map +0 -1
  1001. package/es/utils/graph-cycles.js +0 -239
  1002. package/es/utils/graph-cycles.js.map +0 -1
  1003. package/es/utils/graph-inner-cycles.js +0 -47
  1004. package/es/utils/graph-inner-cycles.js.map +0 -1
  1005. package/es/utils/graph.js +0 -150
  1006. package/es/utils/graph.js.map +0 -1
  1007. package/es/utils/helper.js +0 -337
  1008. package/es/utils/helper.js.map +0 -1
  1009. package/es/utils/history.js +0 -30
  1010. package/es/utils/history.js.map +0 -1
  1011. package/es/utils/id-broker.js +0 -20
  1012. package/es/utils/id-broker.js.map +0 -1
  1013. package/es/utils/logger.js +0 -9
  1014. package/es/utils/logger.js.map +0 -1
  1015. package/es/utils/math.js +0 -51
  1016. package/es/utils/math.js.map +0 -1
  1017. package/es/utils/molding.js +0 -840
  1018. package/es/utils/molding.js.map +0 -1
  1019. package/es/utils/name-generator.js +0 -19
  1020. package/es/utils/name-generator.js.map +0 -1
  1021. package/es/utils/objects-utils.js +0 -51
  1022. package/es/utils/objects-utils.js.map +0 -1
  1023. package/es/utils/phone-validator.js +0 -5
  1024. package/es/utils/phone-validator.js.map +0 -1
  1025. package/es/utils/process-black-list.js +0 -19
  1026. package/es/utils/process-black-list.js.map +0 -1
  1027. package/es/utils/react-if.js +0 -19
  1028. package/es/utils/react-if.js.map +0 -1
  1029. package/es/utils/snap-scene.js +0 -100
  1030. package/es/utils/snap-scene.js.map +0 -1
  1031. package/es/utils/snap.js +0 -238
  1032. package/es/utils/snap.js.map +0 -1
  1033. package/es/utils/threeCSG.es6.js +0 -499
  1034. package/es/utils/threeCSG.es6.js.map +0 -1
  1035. package/es/version.js +0 -2
  1036. package/es/version.js.map +0 -1
  1037. /package/{es → src}/catalog/areas/area/textures/ceramic-tile.jpg +0 -0
  1038. /package/{es → src}/catalog/areas/area/textures/grass.jpg +0 -0
  1039. /package/{es → src}/catalog/areas/area/textures/parquet.jpg +0 -0
  1040. /package/{es → src}/catalog/areas/area/textures/strand-porcelain.jpg +0 -0
  1041. /package/{es → src}/catalog/areas/area/textures/tile1.jpg +0 -0
  1042. /package/{es → src}/catalog/back.png +0 -0
  1043. /package/{es → src}/catalog/doors.png +0 -0
  1044. /package/{es → src}/catalog/doorways.png +0 -0
  1045. /package/{es → src}/catalog/envMap/nx.hdr +0 -0
  1046. /package/{es → src}/catalog/envMap/ny.hdr +0 -0
  1047. /package/{es → src}/catalog/envMap/nz.hdr +0 -0
  1048. /package/{es → src}/catalog/envMap/px.hdr +0 -0
  1049. /package/{es → src}/catalog/envMap/py.hdr +0 -0
  1050. /package/{es → src}/catalog/envMap/pz.hdr +0 -0
  1051. /package/{es → src}/catalog/holes/door-double/door_double.png +0 -0
  1052. /package/{es → src}/catalog/holes/door-panic/panicDoor.png +0 -0
  1053. /package/{es → src}/catalog/holes/door-panic-double/panicDoorDouble.png +0 -0
  1054. /package/{es → src}/catalog/holes/gate/gate.jpg +0 -0
  1055. /package/{es → src}/catalog/holes/window-clear/texture.png +0 -0
  1056. /package/{es → src}/catalog/holes/window-cross/texture.png +0 -0
  1057. /package/{es → src}/catalog/holes/window-double-hung/texture.png +0 -0
  1058. /package/{es → src}/catalog/holes/window-vertical/texture.png +0 -0
  1059. /package/{es → src}/catalog/lines/wall/textures/bricks-normal.jpg +0 -0
  1060. /package/{es → src}/catalog/lines/wall/textures/bricks-normal2.jpg +0 -0
  1061. /package/{es → src}/catalog/lines/wall/textures/bricks.jpg +0 -0
  1062. /package/{es → src}/catalog/lines/wall/textures/bricks2.jpg +0 -0
  1063. /package/{es → src}/catalog/lines/wall/textures/bricks3.jpg +0 -0
  1064. /package/{es → src}/catalog/lines/wall/textures/morden-normal.jpg +0 -0
  1065. /package/{es → src}/catalog/lines/wall/textures/morden.jpg +0 -0
  1066. /package/{es → src}/catalog/lines/wall/textures/painted-normal.jpg +0 -0
  1067. /package/{es → src}/catalog/lines/wall/textures/painted.jpg +0 -0
  1068. /package/{es → src}/catalog/lines/wall/textures/plaster-normal.jpg +0 -0
  1069. /package/{es → src}/catalog/lines/wall/textures/plaster.jpg +0 -0
  1070. /package/{es → src}/catalog/lines/wall/wall.png +0 -0
  1071. /package/{es → src}/catalog/molding/molding-dcm/texture.png +0 -0
  1072. /package/{es → src}/catalog/molding/molding-fbm/texture.png +0 -0
  1073. /package/{es → src}/catalog/molding/molding-lrm/texture.png +0 -0
  1074. /package/{es → src}/catalog/windows.png +0 -0
  1075. /package/{es → src}/components/header/header.style.css +0 -0
  1076. /package/{es → src}/components/login/style.css +0 -0
  1077. /package/{es → src}/components/login/style.scss +0 -0
  1078. /package/{es → src}/components/molecules/slider/styles.scss +0 -0
  1079. /package/{es → src}/components/toolbar/main/lShaped.json +0 -0
  1080. /package/{es → src}/components/toolbar/main/longNarrow.json +0 -0
  1081. /package/{es → src}/components/toolbar/main/oRectangle.json +0 -0
  1082. /package/{es → src}/components/toolbar/main/rectangle.json +0 -0
  1083. /package/{es → src}/components/toolbar/main/style.css +0 -0
  1084. /package/{es → src}/components/toolbar/popup/autosaveprompt/styles.css +0 -0
  1085. /package/{es → src}/components/toolbar/popup/downloadsummary/styles.css +0 -0
  1086. /package/{es → src}/components/toolbar/popup/floorplan/choose-floor/lShaped.json +0 -0
  1087. /package/{es → src}/components/toolbar/popup/floorplan/choose-floor/longNarrow.json +0 -0
  1088. /package/{es → src}/components/toolbar/popup/floorplan/choose-floor/oRectangle.json +0 -0
  1089. /package/{es → src}/components/toolbar/popup/floorplan/choose-floor/rectangle.json +0 -0
  1090. /package/{es → src}/components/toolbar/popup/newproject/styles.css +0 -0
  1091. /package/{es → src}/components/toolbar/popup/product/style.css +0 -0
  1092. /package/{es → src}/components/toolbar/popup/savedesign/savedesign.style.css +0 -0
  1093. /package/{es → src}/components/toolbar/popup/submitforquote/styles.css +0 -0
  1094. /package/{es → src}/components/toolbar/popup/submitprompt/styles.css +0 -0
  1095. /package/{es → src}/components/tutorial-view/style.css +0 -0
  1096. /package/{es → src}/styles/tabs.css +0 -0
@@ -0,0 +1,3376 @@
1
+ 'use strict';
2
+
3
+ import React from 'react';
4
+ import PropTypes from 'prop-types';
5
+ import ReactDOM from 'react-dom';
6
+ import * as Three from 'three';
7
+ import {
8
+ parseData,
9
+ updateScene,
10
+ visibleTransformBox,
11
+ getDistances,
12
+ fVLine,
13
+ deleteSpecifiedMeshObjects,
14
+ createBacksplash,
15
+ checkCabinetOverlap
16
+ } from './scene-creator';
17
+ import { disposeScene } from './three-memory-cleaner';
18
+ import { disposeObject } from './three-memory-cleaner';
19
+ import diff from 'immutablediff';
20
+ import * as SharedStyle from '../../shared-style';
21
+ import {
22
+ MODE_DRAWING_ITEM_3D,
23
+ MODE_IDLE_3D,
24
+ MODE_3D_VIEW,
25
+ UNIT_CENTIMETER,
26
+ MODE_DRAWING_HOLE_3D,
27
+ SECONDARY_PURPLE_COLOR,
28
+ MODE_ELEVATION_VIEW,
29
+ MODE_DRAGGING_ITEM_3D,
30
+ MODE_ROTATING_ITEM_3D,
31
+ WALL_CABINET_LAYOUTPOS,
32
+ BASE_CABINET_LAYOUTPOS,
33
+ TALL_CABINET_LAYOUTPOS
34
+ } from '../../constants';
35
+
36
+ import { isUndefined } from 'util';
37
+ import { verticesDistance } from '../../utils/geometry';
38
+ import convert from 'convert-units';
39
+ import { GeometryUtils } from '../../utils/export';
40
+ import { handleCamRect, isElevationView, isEmpty } from '../../utils/helper';
41
+ import { RGBELoader } from 'three/examples/jsm/loaders/RGBELoader';
42
+ import CameraControls from 'camera-controls';
43
+ CameraControls.install({ THREE: Three });
44
+ import { returnReplaceableDeepSearchType } from '../viewer2d/utils';
45
+ import {
46
+ getAllMeshes,
47
+ vectorIntersectWithMesh
48
+ } from '../../utils/objects-utils';
49
+
50
+ export default class Scene3DViewer extends React.Component {
51
+ constructor(props) {
52
+ super(props);
53
+ this.state = {
54
+ isLoading: false,
55
+ showflag: true,
56
+ isLoadingCabinet: props.state.scene.isLoadingCabinet,
57
+ toolObj: null,
58
+ angleObj: null,
59
+ waitForRender: 0,
60
+ lineLength: null // when view wall's elevation, that wall's length
61
+ };
62
+ this.lastMousePosition = {};
63
+ this.width = props.width;
64
+ this.height = props.height;
65
+ this.renderingID = 0;
66
+
67
+ let { mode } = props.state;
68
+
69
+ if (!window.__elevationRendererDownload) {
70
+ window.__elevationRendererDownload = {};
71
+ }
72
+
73
+ switch (mode) {
74
+ case MODE_IDLE_3D:
75
+ this.renderer =
76
+ window.__threeRenderer ||
77
+ new Three.WebGLRenderer({
78
+ preserveDrawingBuffer: true,
79
+ alpha: true,
80
+ antialias: true
81
+ });
82
+ break;
83
+ case MODE_3D_VIEW:
84
+ this.renderer =
85
+ window.__threeRendererDownload ||
86
+ new Three.WebGLRenderer({
87
+ preserveDrawingBuffer: true,
88
+ alpha: true,
89
+ antialias: true
90
+ });
91
+ break;
92
+ default:
93
+ if (this.props.downloadFlag) {
94
+ this.renderer =
95
+ window.__elevationRendererDownload[mode] ||
96
+ new Three.WebGLRenderer({
97
+ preserveDrawingBuffer: true,
98
+ alpha: true,
99
+ antialias: true
100
+ });
101
+ } else {
102
+ this.renderer =
103
+ window.__elevationRenderer ||
104
+ new Three.WebGLRenderer({
105
+ preserveDrawingBuffer: true,
106
+ alpha: true,
107
+ antialias: true
108
+ });
109
+ }
110
+
111
+ break;
112
+ }
113
+
114
+ this.renderer.shadowMap.enabled = true;
115
+ this.renderer.shadowMapSoft = true;
116
+ if (mode == 'MODE_IDLE_3D') {
117
+ window.__threeRenderer = this.renderer;
118
+ } else if (mode == 'MODE_3D_VIEW') {
119
+ window.__threeRendererDownload = this.renderer;
120
+ } else {
121
+ if (this.props.downloadFlag)
122
+ window.__elevationRendererDownload[mode] = this.renderer;
123
+ else window.__elevationRenderer = this.renderer;
124
+ }
125
+
126
+ this.renderer.domElement.style.display = 'none';
127
+ }
128
+
129
+ componentDidMount(nextProps) {
130
+ let scene3D, camera, pivot, cameraControls, clock;
131
+ let spotLight1, spotLightTarget;
132
+
133
+ const actions = {
134
+ areaActions: this.context.areaActions,
135
+ holesActions: this.context.holesActions,
136
+ itemsActions: this.context.itemsActions,
137
+ sceneActions: this.context.sceneActions,
138
+ linesActions: this.context.linesActions,
139
+ projectActions: this.context.projectActions,
140
+ catalog: this.context.catalog
141
+ };
142
+
143
+ const self = this;
144
+ const { state } = this.props;
145
+ const { mode, scene } = state;
146
+ function setupLight(scene, inbBox) {
147
+ if (isElevationView(mode)) {
148
+ const ambilight = new Three.AmbientLight('0xffffff', 3);
149
+ scene.add(ambilight);
150
+ } else {
151
+ const shadowMapSize = 2048;
152
+ const shadowCameraSize =
153
+ Math.max(
154
+ Math.abs(inbBox.min.x - inbBox.max.x),
155
+ Math.abs(inbBox.min.y - inbBox.max.y),
156
+ Math.abs(inbBox.min.z - inbBox.max.z)
157
+ ) / 2;
158
+ const shadowCameraFar = shadowCameraSize * 10;
159
+ const bboxCenter = new Three.Vector3(
160
+ (inbBox.min.x + inbBox.max.x) / 2,
161
+ inbBox.min.y,
162
+ (inbBox.min.z + inbBox.max.z) / 2
163
+ );
164
+ function addDirLight(inColor, inIntensity, inPosition) {
165
+ const dirLight = new Three.DirectionalLight(inColor, inIntensity);
166
+ dirLight.castShadow = true;
167
+ dirLight.shadow.mapSize.x = shadowMapSize;
168
+ dirLight.shadow.mapSize.y = shadowMapSize;
169
+ dirLight.shadow.camera.near = 0;
170
+ dirLight.shadow.camera.far = shadowCameraFar;
171
+
172
+ dirLight.shadow.camera.top = shadowCameraSize * 1.5;
173
+ dirLight.shadow.camera.bottom = -shadowCameraSize * 1.5;
174
+ dirLight.shadow.camera.left = -shadowCameraSize * 1.5;
175
+ dirLight.shadow.camera.right = shadowCameraSize * 1.5;
176
+ dirLight.position.copy(inPosition);
177
+
178
+ const targetObject = new Three.Object3D();
179
+ targetObject.position.copy(bboxCenter);
180
+ scene.add(targetObject);
181
+
182
+ dirLight.target = targetObject;
183
+ dirLight.target.updateMatrixWorld();
184
+
185
+ scene.add(dirLight);
186
+ }
187
+ function addSpotLight(
188
+ inColor,
189
+ inIntensity,
190
+ inPosition,
191
+ inTarget,
192
+ inDistance
193
+ ) {
194
+ const spotLight = new Three.SpotLight();
195
+ spotLight.intensity = inIntensity;
196
+ spotLight.color.setHex(inColor);
197
+ spotLight.position.copy(inPosition);
198
+ spotLight.angle = 1.3;
199
+ spotLight.distance = inDistance;
200
+ spotLight.penumbra = 1.8;
201
+ spotLight.decay = 0.01;
202
+
203
+ spotLight.castShadow = true;
204
+ spotLight.shadow.intensity = 2;
205
+ spotLight.shadow.mapSize.width = 4096;
206
+ spotLight.shadow.mapSize.height = 4096;
207
+
208
+ const targetObject = new Three.Object3D();
209
+ targetObject.position.copy(
210
+ new Three.Vector3(inTarget.x, 0, inTarget.z)
211
+ );
212
+ scene.add(targetObject);
213
+
214
+ spotLight.target = targetObject;
215
+ spotLight.target.updateMatrixWorld();
216
+ scene.add(spotLight);
217
+ }
218
+
219
+ const dirLightPos = new Three.Vector3(
220
+ inbBox.max.x,
221
+ inbBox.max.y + 1.8 * Math.abs(inbBox.max.y - inbBox.min.y),
222
+ inbBox.min.z - 0.5 * Math.abs(inbBox.max.z - inbBox.min.z)
223
+ );
224
+
225
+ addDirLight('white', 1.5, dirLightPos);
226
+
227
+ const ceiling = scene3D.getObjectByName('ceil');
228
+ if (ceiling) {
229
+ const ceilBBox = new Three.Box3().setFromObject(ceiling);
230
+
231
+ const spot1 = new Three.Vector3(
232
+ ceilBBox.min.x + Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4,
233
+ ceilBBox.max.y - 0.5,
234
+ ceilBBox.min.z + Math.abs(ceilBBox.min.z - inbBox.max.z) / 4
235
+ );
236
+ const spot2 = new Three.Vector3(
237
+ ceilBBox.min.x + Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4,
238
+ ceilBBox.max.y - 0.5,
239
+ ceilBBox.max.z - Math.abs(ceilBBox.min.z - ceilBBox.max.z) / 4
240
+ );
241
+
242
+ const spot3 = new Three.Vector3(
243
+ ceilBBox.max.x - Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4,
244
+ ceilBBox.max.y - 0.5,
245
+ ceilBBox.min.z + Math.abs(ceilBBox.min.z - ceilBBox.max.z) / 4
246
+ );
247
+ const spot4 = new Three.Vector3(
248
+ ceilBBox.max.x - Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4,
249
+ ceilBBox.max.y - 0.5,
250
+ ceilBBox.max.z - Math.abs(ceilBBox.min.z - ceilBBox.max.z) / 4
251
+ );
252
+
253
+ const spotlightDis = 1.5 * Math.abs(inbBox.min.y - inbBox.max.y);
254
+
255
+ // check if spotlight is inside the room
256
+ vectorIntersectWithMesh(spot1, scene3D.getObjectByName('floor')) &&
257
+ addSpotLight('0xffffff', 0.8, spot1, spot1, spotlightDis);
258
+ vectorIntersectWithMesh(spot2, scene3D.getObjectByName('floor')) &&
259
+ addSpotLight('0xffffff', 0.8, spot2, spot2, spotlightDis);
260
+ vectorIntersectWithMesh(spot3, scene3D.getObjectByName('floor')) &&
261
+ addSpotLight('0xffffff', 0.8, spot3, spot3, spotlightDis);
262
+ vectorIntersectWithMesh(spot4, scene3D.getObjectByName('floor')) &&
263
+ addSpotLight('0xffffff', 0.8, spot4, spot4, spotlightDis);
264
+ }
265
+ }
266
+ }
267
+
268
+ // Load data
269
+ this.setState({ isLoading: true });
270
+ if (self.props.downloadFlag) {
271
+ this.setState({ waitForRender: 0 });
272
+
273
+ // set loading bar
274
+ switch (self.props.state.mode) {
275
+ case MODE_ELEVATION_VIEW:
276
+ self.props.setIsLoadingElevation('front', true);
277
+ break;
278
+ case MODE_3D_VIEW:
279
+ self.props.setIsLoading3D(true);
280
+ break;
281
+ }
282
+ }
283
+
284
+ const { promise, planData } = parseData(
285
+ scene,
286
+ actions,
287
+ this.context.catalog,
288
+ camera,
289
+ this.renderer,
290
+ state.mode
291
+ );
292
+
293
+ promise.then(() => {
294
+ let objToRemove = [];
295
+ planData.plan.traverse(obj => {
296
+ if (obj.geometry === null) {
297
+ objToRemove.push(obj);
298
+ }
299
+ });
300
+ objToRemove.forEach(obj => {
301
+ obj.removeFromParent();
302
+ });
303
+ const bbox = new Three.Box3().setFromObject(planData.plan);
304
+ if (!isElevationView(state.mode)) {
305
+ cameraControls.fitToBox(bbox);
306
+ }
307
+ setupLight(scene3D, planData.boundingBox);
308
+
309
+ self.setState({ waitForRender: 1 });
310
+ setTimeout(() => {
311
+ self.setState({ isLoading: false });
312
+ self.renderer.domElement.style.display = 'block';
313
+ }, 1500);
314
+ });
315
+
316
+ const area = scene.getIn(['layers', scene.selectedLayer, 'areas']);
317
+ const layer = scene.getIn(['layers', scene.selectedLayer]);
318
+ const areas = [],
319
+ lights = [];
320
+
321
+ let snapBox = null;
322
+
323
+ // Check for data
324
+ let msg = '';
325
+ scene.layers.forEach(layer => {
326
+ if (layer.id === scene.selectedLayer || layer.visible) {
327
+ layer.items.forEach(item => {
328
+ if (item.doorStyle === null) {
329
+ if (!msg.includes(item.name + "'s doorStyle is null."))
330
+ msg += item.name + "'s doorStyle is null.\n";
331
+ }
332
+ });
333
+ }
334
+ });
335
+ if (msg !== '') {
336
+ confirm(msg);
337
+ }
338
+
339
+ init();
340
+ render();
341
+
342
+ // area lightning(wall lightning)/////
343
+
344
+ area.forEach(data => {
345
+ areas.push(data);
346
+ });
347
+ for (let i = 0; i < areas.length; i++) {
348
+ let aVertices = [];
349
+ let lines = [];
350
+ let height = 100;
351
+ areas[i].vertices.forEach(data => {
352
+ aVertices.push(data);
353
+ });
354
+ layer.lines.forEach(data => {
355
+ lines.push(data);
356
+ });
357
+ for (let i = 0; i < lines.length; i++) {
358
+ let data = lines[i];
359
+ let realVec = [];
360
+ data.vertices.forEach(vec => {
361
+ realVec.push(vec);
362
+ });
363
+ if (aVertices.includes(realVec[0]) && aVertices.includes(realVec[1])) {
364
+ height = convert(layer.ceilHeight)
365
+ .from(layer.unit)
366
+ .to(UNIT_CENTIMETER);
367
+ // height = data.properties.getIn(['height', 'length']);
368
+ break;
369
+ }
370
+ }
371
+ let vertices = [];
372
+ areas[i].vertices.forEach(datas => {
373
+ let vertex = scene.getIn([
374
+ 'layers',
375
+ scene.selectedLayer,
376
+ 'vertices',
377
+ datas
378
+ ]);
379
+ vertices.push(vertex);
380
+ });
381
+ vertices.push(vertices[0]);
382
+ let fLen = vertices.length - 1;
383
+ for (let i = 0; i < fLen; i++) {
384
+ let sX = vertices[i].x;
385
+ let sY = vertices[i].y;
386
+ let eX = vertices[i + 1].x;
387
+ let eY = vertices[i + 1].y;
388
+ let len = Math.sqrt((eX - sX) * (eX - sX) + (eY - sY) * (eY - sY));
389
+ for (let cLen = 200; cLen < len; cLen += 200) {
390
+ let cX = sX + ((eX - sX) * cLen) / len;
391
+ let cY = sY + ((eY - sY) * cLen) / len;
392
+ let endLen = Math.sqrt((eX - cX) * (eX - cX) + (eY - cY) * (eY - cY));
393
+ if (endLen <= 100) continue;
394
+ let vec2 = new Three.Vector2(cX - sX, cY - sY);
395
+ let angle = vec2.angle() + Math.PI / 2;
396
+ cX = Math.cos(angle) * 30 + cX;
397
+ cY = Math.sin(angle) * 30 + cY;
398
+ let spotLight = new Three.SpotLight(0xeeeeee, 1.7);
399
+ spotLight.angle = 0.76;
400
+ spotLight.castShadow = true;
401
+ spotLight.penumbra = 1;
402
+ spotLight.decay = 1.7;
403
+ spotLight.distance = height - 20;
404
+ let target = new Three.Object3D();
405
+ spotLight.target = target;
406
+ lights.push({
407
+ light: spotLight,
408
+ target: target,
409
+ x: cX,
410
+ y: cY,
411
+ height: height
412
+ });
413
+ }
414
+ }
415
+ }
416
+ // //////////////////////////
417
+
418
+ // OBJECT PICKING
419
+ let toIntersect = [planData.plan];
420
+ let mouse = new Three.Vector2();
421
+ let gridPlane = planData.grid;
422
+ let raycaster = new Three.Raycaster();
423
+ let selectedObject = {};
424
+ let selectedFlag = false;
425
+ let currentObject = null;
426
+ let isSelected = false;
427
+ let bRotate = false;
428
+ let bMove = false;
429
+ let bMoveUP = false;
430
+ /** Transformation matrix of grid */
431
+ const gridMatrix = new Three.Matrix4();
432
+ let rayDirection = new Three.Vector3();
433
+ /** World position of grid plane */
434
+ let gridPlanOrigin = new Three.Vector3();
435
+ let Point = new Three.Vector2();
436
+ let sPoint = new Three.Vector2();
437
+
438
+ // SNAP FUNCTION VARIABLE
439
+ let snapFlag = false;
440
+ let snapAnimI = 0;
441
+ let snapDelta = 6;
442
+ let t_i = 0;
443
+ let targetPoint = new Three.Vector3();
444
+ let targetRot = 0;
445
+ let targetUVec = new Three.Vector3();
446
+ let targetCRotation = 0;
447
+ let targetObj = null;
448
+ let targetNumber = 0;
449
+ let wallSlide = false;
450
+
451
+ let pinFlag = false;
452
+ let sFlag = false; //for all object move
453
+ let endPoint = {};
454
+ let allItemRect;
455
+ let allItemSnap;
456
+ let allLines;
457
+ let allLineRects;
458
+ let allLineSnap;
459
+ let allRect;
460
+ let allArea;
461
+
462
+ // end snap function variable///////////////////////
463
+ let backsplashVisible = false;
464
+ let holeItems = GeometryUtils.getHoleItems(layer);
465
+
466
+ let removeSnapBox = () => {
467
+ if (snapBox != null) {
468
+ planData.plan.remove(snapBox);
469
+ disposeObject(snapBox);
470
+ snapBox = null;
471
+ targetObj = null;
472
+ snapFlag = false;
473
+ }
474
+ };
475
+
476
+ const camToGrid = new Three.Vector3();
477
+ let camPos = camera.position;
478
+
479
+ const mapCursorPosition = (e, altitude) => {
480
+ camToGrid.subVectors(gridPlanOrigin, camPos);
481
+
482
+ let camD = camToGrid.y + (altitude ? altitude : 0);
483
+ let rayD = rayDirection.y;
484
+
485
+ const intersectPt = rayDirection.multiplyScalar(camD / rayD).add(camPos);
486
+ intersectPt.y = gridPlanOrigin.y;
487
+ intersectPt.applyMatrix4(gridMatrix);
488
+
489
+ return { x: intersectPt.x, y: -intersectPt.z };
490
+ };
491
+
492
+ /* for Snap Functions*/
493
+
494
+ let pointLineDistance = function (point, line) {
495
+ // return distance from point to line and directional point of line
496
+ let pX = point.x;
497
+ let pY = point.y;
498
+ let l1x = line[0].x;
499
+ let l1y = line[0].y;
500
+ let l2x = line[1].x;
501
+ let l2y = line[1].y;
502
+ let pLine = new Three.Vector2(l1x - pX, l1y - pY);
503
+ let Line = new Three.Vector2(l1x - l2x, l1y - l2y);
504
+ let pAngle = pLine.angle();
505
+ let lAngle = Line.angle();
506
+ let pDistance = pLine.length();
507
+ let oDistance = Line.length();
508
+ let directDistance = Math.sin(pAngle - lAngle) * pDistance;
509
+ let lineDistance = Math.cos(pAngle - lAngle) * pDistance;
510
+ let dX = l1x + ((l2x - l1x) * lineDistance) / oDistance;
511
+ let dY = l1y + ((l2y - l1y) * lineDistance) / oDistance;
512
+ let dPoint = { x: dX, y: dY };
513
+ return { distance: directDistance, point: dPoint };
514
+ };
515
+ let getInterSect = function (shape1, shape2) {
516
+ // return result of intersect of two shape
517
+ let count = 0;
518
+ for (let i = 0; i < shape1.length - 1; i++) {
519
+ let sl1 = { x: shape1[i].x, y: shape1[i].y };
520
+ let sl2 = { x: shape1[i + 1].x, y: shape1[i + 1].y };
521
+ for (let j = 0; j < shape2.length - 1; j++) {
522
+ let el1 = { x: shape2[j].x, y: shape2[j].y };
523
+ let el2 = { x: shape2[j + 1].x, y: shape2[j + 1].y };
524
+ let flag = GeometryUtils.getLineInterSect(
525
+ sl1.x,
526
+ sl1.y,
527
+ sl2.x,
528
+ sl2.y,
529
+ el1.x,
530
+ el1.y,
531
+ el2.x,
532
+ el2.y
533
+ );
534
+ if (flag) {
535
+ count++;
536
+ if (count > 1) return true;
537
+ }
538
+ }
539
+ }
540
+ return false;
541
+ };
542
+
543
+ this.getRectPoints = function (width, height, pos, rot) {
544
+ // return 4 points from it's position, width, height, and rotation info
545
+ let rX = width / 2;
546
+ let rY = height / 2;
547
+ let vertices = [];
548
+ let cRot = rot;
549
+ let pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
550
+ let pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
551
+ vertices.push({ x: Math.floor(pX + 0.5), y: Math.floor(pY + 0.5) });
552
+ rX = -rX;
553
+ pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
554
+ pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
555
+ vertices.push({ x: Math.floor(pX + 0.5), y: Math.floor(pY + 0.5) });
556
+ rY = -rY;
557
+ pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
558
+ pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
559
+ vertices.push({ x: Math.floor(pX + 0.5), y: Math.floor(pY + 0.5) });
560
+ rX = -rX;
561
+ pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
562
+ pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
563
+ vertices.push({ x: Math.floor(pX + 0.5), y: Math.floor(pY + 0.5) });
564
+ vertices.push(vertices[0]);
565
+ vertices.push(vertices[2]);
566
+ return vertices;
567
+ };
568
+
569
+ const prepareSnap = layer => {
570
+ allLines = GeometryUtils.getAllLines(layer);
571
+ allLineRects = GeometryUtils.buildRectFromLines(layer, allLines);
572
+ allItemRect = GeometryUtils.getAllItems(
573
+ this.props.state.scene,
574
+ actions.catalog,
575
+ allLineRects
576
+ );
577
+ allItemSnap = GeometryUtils.getAllItemSnap(allItemRect);
578
+ allLineSnap = GeometryUtils.getAllLineSnap(allLineRects, allItemRect.cur);
579
+ allRect = allItemRect.others.concat(allLineRects);
580
+ allItemSnap = GeometryUtils.validateSnaps(allItemSnap, allRect);
581
+ allLineSnap = GeometryUtils.validateSnaps(allLineSnap, allRect);
582
+ allArea = GeometryUtils.getAllArea(layer);
583
+ };
584
+
585
+ let prepareSnapSpec = layer => {
586
+ allLines = GeometryUtils.getAllLines(layer);
587
+ allLineRects = GeometryUtils.buildRectFromLines(layer, allLines);
588
+ allItemRect = GeometryUtils.getAllItemSpecified(
589
+ this.props.state.scene,
590
+ actions.catalog,
591
+ WALL_CABINET_LAYOUTPOS
592
+ );
593
+ // allItemSnap = GeometryUtils.getAllItemSnap(allItemRect);
594
+ };
595
+
596
+ // prepareSnapSpec(layer);
597
+ let lineRect = layer => {
598
+ let areainfo = [];
599
+ layer.areas.forEach(area => {
600
+ let sz = area.vertices.size;
601
+ for (var i = 0; i < sz; i++) {
602
+ areainfo.push(area.vertices.get(i));
603
+ }
604
+ });
605
+ let rect = [];
606
+ areainfo.forEach(area => {
607
+ let vert = layer.vertices.get(area);
608
+ rect.push(vert.x, vert.y);
609
+ });
610
+ return rect;
611
+ };
612
+
613
+ this.collisionCheck = function (obj, pos, rot, tObj, item = null, catalog) {
614
+ //collision check from one object to every other object excpet target object
615
+ let layer = this.props.state.scene.getIn([
616
+ 'layers',
617
+ obj.userData.layerId
618
+ ]);
619
+ let layoutpos = 'utype';
620
+ if (item !== null) {
621
+ let catid = item.type;
622
+ let cat = catalog.elements[catid];
623
+ layoutpos = cat.info.layoutpos;
624
+ }
625
+ let oPos = new Three.Vector2(pos.clone().x, pos.clone().y);
626
+ let sBounding = obj.children[0].userData;
627
+ let width = sBounding.max.x - sBounding.min.x;
628
+ let depth = sBounding.max.z - sBounding.min.z;
629
+ let oVertices = this.getRectPoints(
630
+ width,
631
+ depth,
632
+ oPos.clone(),
633
+ ((rot % 360) / 180) * Math.PI
634
+ );
635
+ let datas = [];
636
+ layer.items.forEach(data => {
637
+ datas.push(data);
638
+ });
639
+ for (let i = 0; i < datas.length; i++) {
640
+ let data = datas[i];
641
+ if (data.id == obj.userData.itemId || data.id == tObj.userData.itemId)
642
+ continue;
643
+ let target =
644
+ planData.sceneGraph.layers[obj.userData.layerId].items[data.id];
645
+ if (target === undefined) {
646
+ console.log(
647
+ data.id +
648
+ ' does not exist in viewer3d/viewer3d.js collisionCheck function'
649
+ );
650
+ return false;
651
+ }
652
+ let item = layer.items.getIn([data.id]);
653
+ let ocatid = item.type;
654
+ let ocat = catalog.elements[ocatid];
655
+ let olayoutpos = ocat.info.layoutpos;
656
+ if (
657
+ !(
658
+ (layoutpos === BASE_CABINET_LAYOUTPOS &&
659
+ olayoutpos === WALL_CABINET_LAYOUTPOS) ||
660
+ (layoutpos === WALL_CABINET_LAYOUTPOS &&
661
+ olayoutpos === BASE_CABINET_LAYOUTPOS)
662
+ )
663
+ ) {
664
+ let tRot = item.rotation;
665
+ let tPos = new Three.Vector2(item.x, item.y);
666
+ let tBounding = target.children[0].userData;
667
+ let twidth = tBounding.max.x - tBounding.min.x;
668
+ let tdepth = tBounding.max.z - tBounding.min.z;
669
+ let tVertices = this.getRectPoints(
670
+ twidth,
671
+ tdepth,
672
+ tPos.clone(),
673
+ ((tRot % 360) / 180) * Math.PI
674
+ );
675
+ if (getInterSect(oVertices, tVertices)) {
676
+ return false;
677
+ }
678
+ }
679
+ }
680
+ datas = [];
681
+ layer.lines.forEach(data => {
682
+ datas.push(data);
683
+ });
684
+ for (let i = 0; i < datas.length; i++) {
685
+ let data = datas[i];
686
+ if (data.id == obj.userData.itemId || data.id == tObj.userData.itemId)
687
+ continue;
688
+ let item = layer.lines.getIn([data.id]);
689
+ // let llayoutpos = catalog.elements[item.type].info.layoutpos;
690
+ let vertices = [];
691
+ item.vertices.forEach(data => {
692
+ let vertex = layer.vertices.get(data);
693
+ vertices.push({ x: vertex.x, y: vertex.y });
694
+ });
695
+ let vec = new Three.Vector2(
696
+ vertices[1].x - vertices[0].x,
697
+ vertices[1].y - vertices[0].y
698
+ );
699
+ let tRot = vec.angle();
700
+ let tPos = new Three.Vector2(
701
+ (vertices[0].x + vertices[1].x) / 2,
702
+ (vertices[0].y + vertices[1].y) / 2
703
+ );
704
+ let tdepth = item.properties.getIn(['thickness', 'length']);
705
+ let twidth = Math.sqrt(vec.x * vec.x + vec.y * vec.y);
706
+ let tVertices = this.getRectPoints(twidth, tdepth, tPos.clone(), tRot);
707
+ if (getInterSect(oVertices, tVertices)) {
708
+ return false;
709
+ }
710
+ }
711
+ return true;
712
+ };
713
+
714
+ this.collisionHoleCheck = function (
715
+ obj,
716
+ pos,
717
+ rot,
718
+ tObj,
719
+ item = null,
720
+ catalog
721
+ ) {
722
+ let layer = this.props.state.scene.getIn([
723
+ 'layers',
724
+ obj.userData.layerId
725
+ ]);
726
+ let currentItem;
727
+ if (item !== null) {
728
+ let catid = item.type;
729
+ let cat = catalog.elements[catid];
730
+ currentItem = {
731
+ selectedItem: item,
732
+ cat
733
+ };
734
+ }
735
+ let oPos = new Three.Vector2(pos.clone().x, pos.clone().y);
736
+ let sBounding = obj.children[0].userData;
737
+ let width = sBounding.max.x - sBounding.min.x;
738
+ let depth = sBounding.max.z - sBounding.min.z;
739
+ let oVertices = this.getRectPoints(
740
+ width,
741
+ depth,
742
+ oPos.clone(),
743
+ ((rot % 360) / 180) * Math.PI
744
+ );
745
+
746
+ let datas = [];
747
+ layer.items.forEach(data => {
748
+ datas.push(data);
749
+ });
750
+ for (let i = 0; i < datas.length; i++) {
751
+ let data = datas[i];
752
+ if (data.id == obj.userData.itemId || data.id == tObj.userData.itemId)
753
+ continue;
754
+ let target =
755
+ planData.sceneGraph.layers[obj.userData.layerId].items[data.id];
756
+ if (target === undefined) {
757
+ console.log(
758
+ data.id +
759
+ ' does not exist in viewer3d/viewer3d.js collisionCheck function'
760
+ );
761
+ return false;
762
+ }
763
+ let item = layer.items.getIn([data.id]);
764
+ let ocatid = item.type;
765
+ let ocat = catalog.elements[ocatid];
766
+ if (!ocat)
767
+ ocat = catalog.elements[returnReplaceableDeepSearchType(ocatid)];
768
+ let otherItem = {
769
+ item,
770
+ cat: ocat
771
+ };
772
+
773
+ if (
774
+ GeometryUtils.needSnap(currentItem, otherItem) &&
775
+ otherItem.cat.type != 'cabinet'
776
+ ) {
777
+ let tRot = item.rotation;
778
+ let tPos = new Three.Vector2(item.x, item.y);
779
+ let tBounding = target.children[0].userData;
780
+ let twidth = tBounding.max.x - tBounding.min.x;
781
+ let tdepth = tBounding.max.z - tBounding.min.z;
782
+ let tVertices = this.getRectPoints(
783
+ twidth,
784
+ tdepth,
785
+ tPos.clone(),
786
+ ((tRot % 360) / 180) * Math.PI
787
+ );
788
+ if (getInterSect(oVertices, tVertices)) {
789
+ return false;
790
+ }
791
+ }
792
+ }
793
+
794
+ let holes = [];
795
+ layer.lines.forEach(line => {
796
+ line.holes.forEach(holeID => {
797
+ let hole = layer.holes.get(holeID);
798
+ holes.push(hole);
799
+ });
800
+ });
801
+ let i = 0;
802
+ for (; i < holes.length; i++) {
803
+ let tPos = new Three.Vector2(holes[i].x, holes[i].y);
804
+ let twidth = holes[i].properties.getIn(['width', 'length']);
805
+ let theight = holes[i].properties.getIn(['thickness', 'length']);
806
+ let trot = holes[i].rotation;
807
+ let tVertices = this.getRectPoints(twidth, theight, tPos.clone(), trot);
808
+ if (getInterSect(oVertices, tVertices)) {
809
+ return false;
810
+ }
811
+ }
812
+ return true;
813
+ };
814
+
815
+ this.collisionSlide = function (
816
+ item3D,
817
+ originPos,
818
+ layer,
819
+ sVertices,
820
+ tPos,
821
+ item
822
+ ) {
823
+ let items = [];
824
+
825
+ let cur_category = '';
826
+ let catalog = actions.catalog;
827
+ if (layer.selected.items.size > 0) {
828
+ let selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
829
+ let catid = selectedItem.type;
830
+ let cat = catalog.elements[catid];
831
+ if (cat === undefined || cat === null)
832
+ cat = catalog.getIn(['elements', catid]);
833
+ cur_category = cat.obj.category;
834
+ }
835
+
836
+ layer.items.forEach(data => {
837
+ if (data.id == selectedObject.itemID) {
838
+ return;
839
+ }
840
+
841
+ items.push(data.toJS());
842
+ });
843
+ let oPos = new Three.Vector2(originPos.x, -originPos.z);
844
+
845
+ // sort from distance
846
+ for (let i = 0; i < items.length - 1; i++) {
847
+ for (let j = i + 1; j < items.length; j++) {
848
+ if (
849
+ verticesDistance(oPos, new Three.Vector2(items[i].x, items[i].y)) >
850
+ verticesDistance(oPos, new Three.Vector2(items[j].x, items[j].y))
851
+ ) {
852
+ let exchange = items[j];
853
+ items[j] = items[i];
854
+ items[i] = exchange;
855
+ }
856
+ }
857
+ }
858
+ let i = 0;
859
+
860
+ for (; i < items.length; i++) {
861
+ if (!items[i]) return;
862
+ let target =
863
+ planData.sceneGraph.layers[selectedObject.layerID].items[items[i].id];
864
+ if (target === undefined) {
865
+ return false;
866
+ }
867
+ let targetData = layer.items.getIn([items[i].id]);
868
+ let tRot = targetData.rotation;
869
+ let tPos = new Three.Vector2(targetData.x, targetData.y);
870
+ let tBounding = target.children[0].userData;
871
+ let twidth = tBounding.max.x - tBounding.min.x;
872
+ let tdepth = tBounding.max.z - tBounding.min.z;
873
+ let tVertices = this.getRectPoints(
874
+ twidth,
875
+ tdepth,
876
+ tPos.clone(),
877
+ ((tRot % 360) / 180) * Math.PI
878
+ );
879
+ if (getInterSect(sVertices, tVertices)) {
880
+ break;
881
+ }
882
+ }
883
+ if (items.length == 0 || !items[i]) return;
884
+ let target =
885
+ planData.sceneGraph.layers[selectedObject.layerID].items[items[i].id];
886
+ let targetData = layer.items.getIn([items[i].id]);
887
+ let targetPos = new Three.Vector2(targetData.x, targetData.y);
888
+ let tRot = targetData.rotation;
889
+ let tBounding = target.children[0].userData;
890
+ let twidth = tBounding.max.x - tBounding.min.x;
891
+ let tdepth = tBounding.max.z - tBounding.min.z;
892
+ let tVertices = this.getRectPoints(
893
+ twidth,
894
+ tdepth,
895
+ targetPos.clone(),
896
+ ((tRot % 360) / 180) * Math.PI
897
+ );
898
+ // ////////////////////////
899
+ let vArray = [];
900
+ let dteArray = [];
901
+ let lineArray = [];
902
+ let vdistanceArray = [];
903
+ let cVecArray = [];
904
+ let inFlag = false;
905
+ for (let i = 0; i < 4; i++) {
906
+ let v1 = tVertices[i];
907
+ let v2 = tVertices[i + 1];
908
+ let data = pointLineDistance({ x: tPos.x, y: tPos.y }, [
909
+ { x: v1.x, y: v1.y },
910
+ { x: v2.x, y: v2.y }
911
+ ]);
912
+ dteArray.push(data.distance);
913
+ vArray.push(data.point);
914
+ lineArray.push([v1, v2]);
915
+ }
916
+ // if tPos in target object
917
+ let tPosDistance =
918
+ Math.abs(pointLineDistance(tPos, lineArray[0]).distance) +
919
+ Math.abs(pointLineDistance(tPos, lineArray[2]).distance);
920
+ let realDistance = new Three.Vector2(
921
+ lineArray[1][0].x - lineArray[1][1].x,
922
+ lineArray[1][0].y - lineArray[1][1].y
923
+ ).length();
924
+ let tPosDistance1 =
925
+ Math.abs(pointLineDistance(tPos, lineArray[1]).distance) +
926
+ Math.abs(pointLineDistance(tPos, lineArray[3]).distance);
927
+ let realDistance1 = new Three.Vector2(
928
+ lineArray[0][0].x - lineArray[0][1].x,
929
+ lineArray[0][0].y - lineArray[0][1].y
930
+ ).length();
931
+ if (
932
+ Math.abs(Math.abs(tPosDistance) - Math.abs(realDistance)) < 0.01 &&
933
+ Math.abs(Math.abs(tPosDistance1) - Math.abs(realDistance1)) < 0.01
934
+ )
935
+ inFlag = true;
936
+ // ////////////////////
937
+ let key = 0;
938
+ // sort distance from origin point
939
+ for (let j = 0; j < dteArray.length - 1; j++) {
940
+ for (let k = j + 1; k < dteArray.length; k++) {
941
+ if (Math.abs(dteArray[j]) > Math.abs(dteArray[k])) {
942
+ let temp = dteArray[k];
943
+ dteArray[j] = dteArray[k];
944
+ dteArray[k] = temp;
945
+ let temp1 = vArray[k];
946
+ vArray[j] = vArray[k];
947
+ vArray[k] = temp1;
948
+ let temp2 = lineArray[k];
949
+ lineArray[j] = lineArray[k];
950
+ lineArray[k] = temp2;
951
+ }
952
+ }
953
+ }
954
+ // //////////////////////////////
955
+ for (let i = 0; i < 4; i++) {
956
+ let data = pointLineDistance(sVertices[i], lineArray[key]);
957
+ vdistanceArray.push(data.distance);
958
+ cVecArray.push({
959
+ x: data.point.x - sVertices[i].x,
960
+ y: data.point.y - sVertices[i].y
961
+ });
962
+ }
963
+
964
+ for (let j = 0; j < vdistanceArray.length; j++) {
965
+ let tX = tPos.x + cVecArray[j].x;
966
+ let tY = tPos.y + cVecArray[j].y;
967
+ if (
968
+ this.collisionCheck(
969
+ item3D,
970
+ new Three.Vector2(tX, tY),
971
+ item.rotation,
972
+ {
973
+ userData: { itemId: null }
974
+ },
975
+ item,
976
+ this.context.catalog
977
+ )
978
+ ) {
979
+ item3D.position.set(tX, originPos.y, -tY);
980
+ sPoint.set(tX, tY);
981
+ break;
982
+ }
983
+ }
984
+ };
985
+
986
+ this.snap = function (obj, layer) {
987
+ // snap operation
988
+ let target = obj.userData.target;
989
+ for (; target.parent != null; ) {
990
+ if (target.name == 'pivot') break;
991
+ target = target.parent;
992
+ }
993
+ let source = obj.parent.parent.parent;
994
+ if (target.userData.type == 'item') {
995
+ let sRot = layer.getIn(['items', source.userData.itemId]).rotation;
996
+ let tRot = layer.getIn(['items', target.userData.itemId])
997
+ ? layer.getIn(['items', target.userData.itemId]).rotation
998
+ : 0;
999
+ let item = layer.getIn(['items', source.userData.itemId]);
1000
+ let layoutType = item.layoutpos;
1001
+ let altitudeLength = convert(
1002
+ item.properties.getIn(['altitude', '_length'])
1003
+ )
1004
+ .from('in')
1005
+ .to('cm');
1006
+ let sBounding = source.children[0].userData;
1007
+ let tBounding = target.children[0].userData;
1008
+ let tPos = target.position.clone();
1009
+ let width = sBounding.max.x - sBounding.min.x;
1010
+ let height = sBounding.max.y - sBounding.min.y;
1011
+ let depth = sBounding.max.z - sBounding.min.z;
1012
+ let snapBoxGeom = new Three.BoxGeometry(width, height, depth);
1013
+ let snapBoxObj = new Three.Mesh(
1014
+ snapBoxGeom,
1015
+ new Three.MeshBasicMaterial({
1016
+ // color: 0x2cde6b,
1017
+ // opacity: 0.7,
1018
+ transparent: true,
1019
+ blending: Three.MultiplyBlending
1020
+ })
1021
+ );
1022
+ let removeSnapBoxObj = () => {
1023
+ if (snapBoxObj) {
1024
+ planData.plan.remove(snapBoxObj);
1025
+ disposeObject(snapBoxObj);
1026
+ }
1027
+ snapFlag = false;
1028
+ };
1029
+ let box = new Three.BoxHelper(snapBoxObj, 0xffffff);
1030
+ box.material.linewidth = 2;
1031
+ box.material.depthTest = false;
1032
+ box.renderOrder = 200;
1033
+ snapBoxObj.add(box);
1034
+ snapBoxObj.position.set(
1035
+ source.position.x,
1036
+ layoutType === WALL_CABINET_LAYOUTPOS
1037
+ ? altitudeLength + source.position.y + height / 2
1038
+ : source.position.y + height / 2,
1039
+ source.position.z
1040
+ );
1041
+ snapBoxObj.rotation.set(
1042
+ source.rotation.x,
1043
+ source.rotation.y,
1044
+ source.rotation.z
1045
+ );
1046
+ snapBoxObj.name = 'TransformBox';
1047
+ planData.plan.add(snapBoxObj);
1048
+ let deltaX =
1049
+ (tBounding.max.x - tBounding.min.x) / 2 +
1050
+ (sBounding.max.x - sBounding.min.x) / 2;
1051
+ let deltaZ =
1052
+ (tBounding.max.z - tBounding.min.z) / 2 -
1053
+ (sBounding.max.z - sBounding.min.z) / 2;
1054
+ let sPos = snapBoxObj.position.clone();
1055
+ // avaliable snap place///////////////
1056
+ let tPoses = [];
1057
+ let pX =
1058
+ tPos.x +
1059
+ deltaX * Math.cos((tRot / 180) * Math.PI) +
1060
+ deltaZ * Math.sin((tRot / 180) * Math.PI);
1061
+ let pZ =
1062
+ tPos.z -
1063
+ deltaX * Math.sin((tRot / 180) * Math.PI) +
1064
+ deltaZ * Math.cos((tRot / 180) * Math.PI);
1065
+ tPoses.push(new Three.Vector3(pX, 0, pZ));
1066
+ deltaX = -deltaX;
1067
+ pX =
1068
+ tPos.x +
1069
+ deltaX * Math.cos((tRot / 180) * Math.PI) +
1070
+ deltaZ * Math.sin((tRot / 180) * Math.PI);
1071
+ pZ =
1072
+ tPos.z -
1073
+ deltaX * Math.sin((tRot / 180) * Math.PI) +
1074
+ deltaZ * Math.cos((tRot / 180) * Math.PI);
1075
+ tPoses.push(new Three.Vector3(pX, 0, pZ));
1076
+ deltaX =
1077
+ (tBounding.max.x - tBounding.min.x) / 2 -
1078
+ (sBounding.max.x - sBounding.min.x) / 2;
1079
+ deltaZ =
1080
+ -(tBounding.max.z - tBounding.min.z) / 2 -
1081
+ (sBounding.max.z - sBounding.min.z) / 2;
1082
+ pX =
1083
+ tPos.x +
1084
+ deltaX * Math.cos((tRot / 180) * Math.PI) +
1085
+ deltaZ * Math.sin((tRot / 180) * Math.PI);
1086
+ pZ =
1087
+ tPos.z -
1088
+ deltaX * Math.sin((tRot / 180) * Math.PI) +
1089
+ deltaZ * Math.cos((tRot / 180) * Math.PI);
1090
+ tPoses.push(new Three.Vector3(pX, 0, pZ));
1091
+ deltaX = -deltaX;
1092
+ pX =
1093
+ tPos.x +
1094
+ deltaX * Math.cos((tRot / 180) * Math.PI) +
1095
+ deltaZ * Math.sin((tRot / 180) * Math.PI);
1096
+ pZ =
1097
+ tPos.z -
1098
+ deltaX * Math.sin((tRot / 180) * Math.PI) +
1099
+ deltaZ * Math.cos((tRot / 180) * Math.PI);
1100
+ tPoses.push(new Three.Vector3(pX, 0, pZ));
1101
+ let distance = Math.sqrt(
1102
+ (sPos.x - tPoses[0].x) * (sPos.x - tPoses[0].x) +
1103
+ (sPos.z - tPoses[0].z) * (sPos.z - tPoses[0].z)
1104
+ );
1105
+ let tNum = 1;
1106
+ tPos = tPoses[0].clone();
1107
+ for (let i = 1; i < tPoses.length; i++) {
1108
+ let curDis = Math.sqrt(
1109
+ (sPos.x - tPoses[i].x) * (sPos.x - tPoses[i].x) +
1110
+ (sPos.z - tPoses[i].z) * (sPos.z - tPoses[i].z)
1111
+ );
1112
+ if (curDis < distance) {
1113
+ distance = curDis;
1114
+ tNum = i + 1;
1115
+ tPos = tPoses[i].clone();
1116
+ }
1117
+ }
1118
+ // //////////////////////////////////
1119
+ if (
1120
+ targetObj != null &&
1121
+ targetObj.userData.itemId == target.userData.itemId &&
1122
+ tNum == targetNumber
1123
+ ) {
1124
+ removeSnapBoxObj();
1125
+ return;
1126
+ } else {
1127
+ removeSnapBox();
1128
+ }
1129
+ // //////////////////////////////////
1130
+ if (tNum >= 3) tRot += 180;
1131
+
1132
+ snapAnimI = 0;
1133
+ t_i = 0;
1134
+ targetObj = target;
1135
+ targetNumber = tNum;
1136
+ targetRot = tRot;
1137
+ targetPoint = tPos;
1138
+ snapBox = snapBoxObj;
1139
+ let cx = sPos.x - tPos.x;
1140
+ let cz = sPos.z - tPos.z;
1141
+ targetUVec = new Three.Vector3(cx, 0, cz);
1142
+ targetCRotation = (((tRot - sRot) % 360) / 180) * Math.PI;
1143
+ } else {
1144
+ let item = layer.getIn(['items', source.userData.itemId]);
1145
+ if (holeItems.length && selectedObj) {
1146
+ let i;
1147
+ for (i = 0; i < holeItems.length; i++) {
1148
+ let hole = holeItems[i];
1149
+ if (Math.abs(Math.sin(selectedObj.rotRad)) === 1) {
1150
+ if (
1151
+ item.y + selectedObj.size.width / 2 >=
1152
+ hole.y - hole.width / 2 &&
1153
+ item.y - selectedObj.size.width / 2 <=
1154
+ hole.y + hole.width / 2 &&
1155
+ (selectedObj.rotRad == 0 || selectedObj.rotRad == -Math.PI / 2
1156
+ ? item.x <= hole.x &&
1157
+ item.x + selectedObj.size.height >= hole.x
1158
+ : item.x >= hole.x &&
1159
+ item.x - selectedObj.size.height <= hole.x)
1160
+ )
1161
+ break;
1162
+ } else {
1163
+ if (
1164
+ item.x + selectedObj.size.width / 2 >=
1165
+ hole.x - hole.width / 2 &&
1166
+ item.x - selectedObj.size.width / 2 <=
1167
+ hole.x + hole.width / 2 &&
1168
+ (selectedObj.rotRad == 0 || selectedObj.rotRad == -Math.PI / 2
1169
+ ? item.y <= hole.y &&
1170
+ item.y + selectedObj.size.height >= hole.y
1171
+ : item.y >= hole.y &&
1172
+ item.y - selectedObj.size.height <= hole.y)
1173
+ )
1174
+ break;
1175
+ }
1176
+ }
1177
+ if (i != holeItems.length) return;
1178
+ }
1179
+ if (target.userData.type == 'hole') {
1180
+ snapFlag = false;
1181
+ return;
1182
+ } else {
1183
+ let layoutType = item.layoutpos;
1184
+ let altitudeLength = convert(
1185
+ item.properties.getIn(['altitude', '_length'])
1186
+ )
1187
+ .from('in')
1188
+ .to('cm');
1189
+ let sBounding = source.children[0].userData;
1190
+ let width = sBounding.max.x - sBounding.min.x;
1191
+ let height = sBounding.max.y - sBounding.min.y;
1192
+ let depth = sBounding.max.z - sBounding.min.z;
1193
+ let snapBoxGeom = new Three.BoxGeometry(width, height, depth);
1194
+ let snapBoxObj = new Three.Mesh(
1195
+ snapBoxGeom,
1196
+ new Three.MeshBasicMaterial({
1197
+ // color: 0x2cde6b,
1198
+ // opacity: 0.7,
1199
+ transparent: true,
1200
+ blending: Three.MultiplyBlending
1201
+ })
1202
+ );
1203
+ let removeSnapBoxObj = () => {
1204
+ if (snapBoxObj) {
1205
+ planData.plan.remove(snapBoxObj);
1206
+ disposeObject(snapBoxObj);
1207
+ }
1208
+ snapFlag = false;
1209
+ };
1210
+ let box = new Three.BoxHelper(snapBoxObj, 0xffffff);
1211
+ box.material.linewidth = 2;
1212
+ box.material.depthTest = false;
1213
+ box.renderOrder = 100;
1214
+ snapBoxObj.add(box);
1215
+
1216
+ snapBoxObj.position.set(
1217
+ source.position.x,
1218
+ layoutType === WALL_CABINET_LAYOUTPOS
1219
+ ? altitudeLength + source.position.y + height / 2
1220
+ : source.position.y + height / 2,
1221
+ source.position.z
1222
+ );
1223
+ snapBoxObj.rotation.set(
1224
+ source.rotation.x,
1225
+ source.rotation.y,
1226
+ source.rotation.z
1227
+ );
1228
+ snapBoxObj.name = 'TransformBox';
1229
+ planData.plan.add(snapBoxObj);
1230
+
1231
+ let snapLine = layer.getIn(['lines', target.userData.lineId]);
1232
+ // let snapLineThickness = snapLine.properties.getIn([
1233
+ // 'thickness',
1234
+ // 'length'
1235
+ // ]);
1236
+ let snapLineThickness = 10.64;
1237
+ let vertices = [];
1238
+ if (snapLine === undefined) return;
1239
+ snapLine.vertices.forEach(data => {
1240
+ let vec = layer.getIn(['vertices', data]);
1241
+ vertices.push(vec);
1242
+ });
1243
+ let iX = source.position.clone().x;
1244
+ let iY = -source.position.clone().z;
1245
+ let lineVec = new Three.Vector2(
1246
+ vertices[1].x - vertices[0].x,
1247
+ vertices[1].y - vertices[0].y
1248
+ );
1249
+ let oLength = Math.sqrt(
1250
+ lineVec.x * lineVec.x + lineVec.y * lineVec.y
1251
+ );
1252
+ lineVec.normalize();
1253
+ let vec2 = new Three.Vector2(iX - vertices[0].x, iY - vertices[0].y);
1254
+ let vec2Legnth = Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y);
1255
+ let angle = Math.abs(lineVec.angle() - vec2.angle());
1256
+ angle = angle > Math.PI ? 2 * Math.PI - angle : angle;
1257
+ let lineLength = Math.cos(angle) * vec2Legnth;
1258
+ let transLength = 0;
1259
+ if (lineLength < 100) {
1260
+ transLength = -lineLength + (snapLineThickness + width) / 2;
1261
+ }
1262
+ if (lineLength > oLength - 100) {
1263
+ transLength =
1264
+ -lineLength - (snapLineThickness + width) / 2 + oLength;
1265
+ }
1266
+ let directPoint = new Three.Vector2(
1267
+ lineVec.x * lineLength + vertices[0].x,
1268
+ lineVec.y * lineLength + vertices[0].y
1269
+ );
1270
+ let directLine = new Three.Vector2(
1271
+ directPoint.x - iX,
1272
+ directPoint.y - iY
1273
+ );
1274
+ let dLength = Math.sqrt(
1275
+ (iX - directPoint.x) * (iX - directPoint.x) +
1276
+ (iY - directPoint.y) * (iY - directPoint.y)
1277
+ );
1278
+ let reduceLen = (snapLineThickness + depth) / 2;
1279
+ let scale = (dLength - reduceLen) / dLength;
1280
+ let tPos = new Three.Vector2(
1281
+ iX + (directPoint.x - iX) * scale + lineVec.x * transLength,
1282
+ iY + (directPoint.y - iY) * scale + lineVec.y * transLength
1283
+ );
1284
+ let realAngle = directLine.angle() - Math.PI / 2;
1285
+ let tRot = (realAngle * 180) / Math.PI;
1286
+ let sPos = new Three.Vector2(iX, iY);
1287
+ let sRot = item.rotation;
1288
+ let tNum = 0;
1289
+ // //////////////////////////////////////
1290
+ // check part////
1291
+ let result = this.collisionCheck(
1292
+ source,
1293
+ tPos,
1294
+ tRot,
1295
+ target,
1296
+ item,
1297
+ this.context.catalog
1298
+ );
1299
+ // console.log('result', result);
1300
+ if (result == false) {
1301
+ removeSnapBoxObj();
1302
+ removeSnapBox();
1303
+ return;
1304
+ }
1305
+ // ////////////////
1306
+ if (targetObj === target && snapBox !== null) {
1307
+ removeSnapBoxObj();
1308
+ snapAnimI = 20;
1309
+ targetPoint = new Three.Vector3(tPos.x, 0, -tPos.y);
1310
+ let sourcePos = snapBox.position.clone();
1311
+ let cx = sourcePos.x - targetPoint.x;
1312
+ let cz = sourcePos.z - targetPoint.z;
1313
+ targetUVec = new Three.Vector3(cx, 0, cz);
1314
+ targetRot = tRot;
1315
+ targetCRotation = (((tRot - sRot) % 360) / 180) * Math.PI;
1316
+ snapFlag = false;
1317
+ return;
1318
+ } else {
1319
+ removeSnapBox();
1320
+ }
1321
+ // //////////////////////////////////////
1322
+ snapAnimI = 0;
1323
+ t_i = 0;
1324
+ targetObj = target;
1325
+ targetNumber = tNum;
1326
+ targetRot = tRot;
1327
+ targetPoint = new Three.Vector3(tPos.x, 0, -tPos.y);
1328
+ snapBox = snapBoxObj;
1329
+ let sourcePos = snapBox.position.clone();
1330
+ let cx = sourcePos.x - targetPoint.x;
1331
+ let cz = sourcePos.z - targetPoint.z;
1332
+ targetUVec = new Three.Vector3(cx, 0, cz);
1333
+ targetRot = tRot;
1334
+ targetCRotation = (((tRot - sRot) % 360) / 180) * Math.PI;
1335
+ }
1336
+ }
1337
+ };
1338
+
1339
+ /*end of snap functions*/
1340
+ let selectedObj = null;
1341
+ let firstMove = false;
1342
+ let prevX, prevY;
1343
+
1344
+ let selObj = null;
1345
+
1346
+ let createToolObject = () => {
1347
+ const canvas = document.createElement('canvas');
1348
+ canvas.width = 100;
1349
+ canvas.height = 200;
1350
+ canvas.style.width = 50 + 'px';
1351
+ canvas.style.height = 100 + 'px';
1352
+ const ctx = canvas.getContext('2d');
1353
+ ctx.fillStyle = '#FFFFFF';
1354
+ ctx.strokeStyle = '#000000';
1355
+ ctx.beginPath();
1356
+ ctx.arc(50, 50, 40, 0, 4 * Math.PI);
1357
+ ctx.fill();
1358
+ ctx.stroke();
1359
+ let img1 = new Image();
1360
+ img1.crossOrigin = 'anonymous';
1361
+ img1.src = '/assets/img/svg/3d_item_rotation.svg';
1362
+ img1.onload = function () {
1363
+ ctx.drawImage(img1, 16, 16, 68, 68);
1364
+ };
1365
+
1366
+ ctx.beginPath();
1367
+ ctx.arc(50, 150, 40, 0, 4 * Math.PI);
1368
+ ctx.fill();
1369
+ ctx.stroke();
1370
+ let img2 = new Image();
1371
+ img2.crossOrigin = 'anonymous';
1372
+ img2.src = '/assets/img/svg/3d_item_move.svg';
1373
+ img2.onload = function () {
1374
+ ctx.drawImage(img2, 16, 116, 68, 68);
1375
+ };
1376
+
1377
+ return canvas;
1378
+ };
1379
+
1380
+ let clockWise = true;
1381
+ let lastAngle = 0;
1382
+
1383
+ let createAngleObject = rotate => {
1384
+ const canvas = document.createElement('canvas');
1385
+ canvas.width = 100;
1386
+ canvas.height = 100;
1387
+ canvas.style.width = 100 + 'px';
1388
+ canvas.style.height = 100 + 'px';
1389
+ const ctx = canvas.getContext('2d');
1390
+ ctx.strokeStyle = '#FFFFFF';
1391
+ ctx.lineWidth = 10;
1392
+ ctx.beginPath();
1393
+ ctx.arc(50, 50, 45, 0, 2 * Math.PI);
1394
+ ctx.stroke();
1395
+
1396
+ ctx.strokeStyle = SECONDARY_PURPLE_COLOR;
1397
+ ctx.lineWidth = 6;
1398
+ ctx.beginPath();
1399
+ if (lastAngle < 15 && lastAngle > -15) {
1400
+ if (rotate >= 0) {
1401
+ clockWise = false;
1402
+ } else {
1403
+ clockWise = true;
1404
+ }
1405
+ if (lastAngle === 0) {
1406
+ if (rotate > -180) {
1407
+ clockWise = true;
1408
+ } else {
1409
+ clockWise = false;
1410
+ }
1411
+ }
1412
+ }
1413
+
1414
+ ctx.arc(50, 50, 45, 0, (rotate / 180.0) * Math.PI, clockWise);
1415
+ ctx.stroke();
1416
+
1417
+ lastAngle = rotate;
1418
+
1419
+ return canvas;
1420
+ };
1421
+
1422
+ let toolTexture = new Three.Texture(createToolObject());
1423
+ toolTexture.needsUpdate = true;
1424
+
1425
+ let toolObj = new Three.Sprite(
1426
+ new Three.SpriteMaterial({ map: toolTexture, sizeAttenuation: true })
1427
+ );
1428
+ toolObj.material.transparent = true;
1429
+ toolObj.material.depthTest = false;
1430
+ toolObj.scale.set(20, 40, 20);
1431
+ toolObj.renderOrder = 3;
1432
+ toolObj.name = 'toolObj';
1433
+
1434
+ let angleTexture = new Three.Texture(createAngleObject(0));
1435
+ angleTexture.needsUpdate = true;
1436
+
1437
+ let angleObj = new Three.Sprite(
1438
+ new Three.SpriteMaterial({ map: angleTexture, sizeAttenuation: false })
1439
+ );
1440
+
1441
+ angleObj.scale.set(0.075, 0.075, 0.075);
1442
+ angleObj.material.transparent = true;
1443
+ angleObj.material.depthTest = false;
1444
+ angleObj.renderOrder = 3;
1445
+ angleObj.name = 'angleObj';
1446
+
1447
+ /**
1448
+ * Calculate plane point of mouse with `event` & `altitude`
1449
+ * * Calculate mouse.x & mouse.y
1450
+ * * Set raycaster from camera & Set raycaster direction
1451
+ * * Calculate Point & dispatch an action
1452
+ */
1453
+ const getPoint = (e, alti) => {
1454
+ mouse.x = (e.offsetX / this.width) * 2 - 1;
1455
+ mouse.y = (-e.offsetY / this.height) * 2 + 1;
1456
+
1457
+ raycaster.setFromCamera(mouse, camera);
1458
+ rayDirection = raycaster.ray.direction;
1459
+
1460
+ Point = mapCursorPosition(e, alti);
1461
+ this.context.projectActions.updateMouseCoord(Point);
1462
+ };
1463
+
1464
+ const getIntersectWallPoint = e => {
1465
+ mouse.x = (e.offsetX / this.width) * 2 - 1;
1466
+ mouse.y = (-e.offsetY / this.height) * 2 + 1;
1467
+
1468
+ raycaster.setFromCamera(mouse, camera);
1469
+ rayDirection = raycaster.ray.direction;
1470
+
1471
+ let lines = planData.sceneGraph.layers[scene.selectedLayer].lines;
1472
+ let keys = Object.keys(lines);
1473
+ let arrMesh = [];
1474
+ keys.forEach(key => {
1475
+ lines[key].children[0].children.forEach(mesh => {
1476
+ if (mesh.name == 'soul' && mesh.visible) arrMesh.push(mesh);
1477
+ });
1478
+ });
1479
+ if (arrMesh.length > 0) {
1480
+ const intersects = raycaster.intersectObjects(arrMesh);
1481
+ if (intersects.length > 0) {
1482
+ let intersectPt = intersects[0].point;
1483
+ intersectPt.applyMatrix4(gridMatrix);
1484
+
1485
+ Point = { x: intersectPt.x, y: -intersectPt.z };
1486
+ this.context.projectActions.updateMouseCoord(Point);
1487
+ return true;
1488
+ }
1489
+ }
1490
+
1491
+ return false;
1492
+ };
1493
+
1494
+ const updateSelectedObject = () => {
1495
+ // update the selected object
1496
+ let selectedLayerId = this.props.state.scene.selectedLayer;
1497
+ let selItemId = this.props.state.scene
1498
+ .getIn(['layers', selectedLayerId, 'selected', 'items'])
1499
+ .toJS()[0];
1500
+ selectedObject = {
1501
+ layerID: selectedLayerId,
1502
+ itemID: selItemId
1503
+ };
1504
+ };
1505
+
1506
+ this.mouseDownEvent = event => {
1507
+ gridPlanOrigin = gridPlane.position;
1508
+ gridMatrix.copy(gridPlane.matrixWorld).invert();
1509
+ let altitude = 0;
1510
+ if (
1511
+ allItemRect &&
1512
+ allItemRect.cur &&
1513
+ allItemRect.cur.itemInfo !== undefined
1514
+ ) {
1515
+ let properties = allItemRect.cur.itemInfo.properties;
1516
+ altitude = properties.getIn(['altitude', '_length']);
1517
+ let unit = properties.getIn(['altitude', '_unit']) || 'in';
1518
+ altitude = convert(altitude).from(unit).to(this.props.state.scene.unit);
1519
+ }
1520
+ getPoint(event, altitude);
1521
+
1522
+ const state = this.props.state;
1523
+
1524
+ this.lastMousePosition.x = mouse.x;
1525
+ this.lastMousePosition.y = mouse.y;
1526
+
1527
+ const layer = state.scene.getIn(['layers', state.scene.selectedLayer]);
1528
+ const sCount =
1529
+ layer.selected.areas.size +
1530
+ layer.selected.holes.size +
1531
+ layer.selected.items.size +
1532
+ layer.selected.lines.size;
1533
+
1534
+ if (sCount <= 0) {
1535
+ isSelected = false;
1536
+ } else if (sCount >= 0 && selectedObject && 'holeID' in selectedObject) {
1537
+ isSelected = true;
1538
+ }
1539
+
1540
+ prevX = Point.x;
1541
+ prevY = Point.y;
1542
+
1543
+ /**
1544
+ * 0 - rotate
1545
+ * 1 - move up/down
1546
+ * 2 - move x/y
1547
+ * 3 - camera rotate
1548
+ */
1549
+ let transflag = 3;
1550
+ raycaster.setFromCamera(mouse, camera);
1551
+ const meshes = [];
1552
+ toIntersect.forEach(object => {
1553
+ if (!object) return;
1554
+ object.traverse(o => {
1555
+ if (o.isMesh) meshes.push(o);
1556
+ });
1557
+ });
1558
+ let intersects = raycaster.intersectObjects(meshes, true);
1559
+
1560
+ let toolIntersects = raycaster.intersectObjects([toolObj], true);
1561
+
1562
+ // This code is excuted when click the tool object(rotation or move icon).
1563
+ if (toolIntersects.length > 0) {
1564
+ updateSelectedObject();
1565
+ // it determines whether mouse is over on rotation icon or move icon.
1566
+ let distance = Math.sqrt(
1567
+ Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) +
1568
+ Math.pow((toolIntersects[0].uv.y - 0.25) * 100, 2)
1569
+ );
1570
+ // move icon selected
1571
+ if (distance <= 20) {
1572
+ transflag = 2;
1573
+ } else {
1574
+ distance = Math.sqrt(
1575
+ Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) +
1576
+ Math.pow((toolIntersects[0].uv.y - 0.75) * 100, 2)
1577
+ );
1578
+ // rotation icon selected
1579
+ if (distance <= 20) {
1580
+ transflag = 0;
1581
+ }
1582
+ }
1583
+ }
1584
+
1585
+ if (intersects.length > 0) {
1586
+ let i = 0,
1587
+ length = intersects.length;
1588
+ for (i = 0; i < length; i++) {
1589
+ if (
1590
+ intersects[i].object.type !== 'BoxHelper' &&
1591
+ // intersects[i].object.type === OBJTYPE_MESH &&
1592
+ intersects[i].object.name !== 'lineText' &&
1593
+ intersects[i].object.name !== 'soul' &&
1594
+ !intersects[i].object.name.includes('WarningBox')
1595
+ )
1596
+ break;
1597
+ }
1598
+
1599
+ if (intersects[i] !== undefined) {
1600
+ if (intersects[i].object.name.indexOf('transUp') != -1) transflag = 1;
1601
+ if (intersects[i].object.name.indexOf('transHole') != -1)
1602
+ transflag = 2;
1603
+ } else {
1604
+ console.log('intersects[i] is undefined in viewer3d/viewer3d.js');
1605
+ }
1606
+ }
1607
+
1608
+ if (this.props.state.mode == MODE_DRAWING_ITEM_3D) return;
1609
+
1610
+ if (isSelected) {
1611
+ !this.props.downloadFlag && this.props.setToolbar('');
1612
+
1613
+ if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1614
+ let i;
1615
+ for (i = 0; i < intersects.length; i++) {
1616
+ if (
1617
+ intersects[i].object instanceof Three.Mesh &&
1618
+ intersects[i].object.name != 'TransformBox' &&
1619
+ intersects[i].object.type != 'Line' &&
1620
+ intersects[i].object.name != 'lineText' &&
1621
+ intersects[i].object.name != 'countertops' &&
1622
+ intersects[i].object.type != 'BoxHelper' &&
1623
+ intersects[i].object.name != 'floor' &&
1624
+ intersects[i].object.name != 'backFace' &&
1625
+ intersects[i].object.name != 'soul' &&
1626
+ !intersects[i].object.name.includes('backsplash') &&
1627
+ !intersects[i].object.name.includes('WarningBox')
1628
+ )
1629
+ break;
1630
+ }
1631
+ if (intersects[i] === undefined) {
1632
+ if (transflag !== 0 && transflag !== 2) {
1633
+ isSelected = false;
1634
+ this.context.projectActions.unselectAll();
1635
+ scene3D.remove(toolObj);
1636
+ this.context.itemsActions.removeReplacingSupport();
1637
+ return;
1638
+ }
1639
+ }
1640
+ if (selectedObject !== undefined) {
1641
+ let selectedItem =
1642
+ planData.sceneGraph.layers[selectedObject.layerID].items[
1643
+ selectedObject.itemID
1644
+ ];
1645
+ sPoint.set(Point.x, Point.y);
1646
+ if (transflag == 0) {
1647
+ scene3D.remove(toolObj);
1648
+ let alti = 0;
1649
+ if (
1650
+ allItemRect &&
1651
+ allItemRect.cur &&
1652
+ allItemRect.cur.itemInfo !== undefined
1653
+ ) {
1654
+ let properties = allItemRect.cur.itemInfo.properties;
1655
+ alti = properties.getIn(['altitude', '_length']);
1656
+ let unit = properties.getIn(['altitude', '_unit']) || 'in';
1657
+ alti = convert(alti).from(unit).to(this.props.state.scene.unit);
1658
+ }
1659
+ getPoint(
1660
+ { offsetX: event.offsetX - 50, offsetY: event.offsetY },
1661
+ alti
1662
+ );
1663
+ if (isUndefined(selectedItem)) return;
1664
+ const selItem = this.props.state.scene.layers
1665
+ .get(selectedObject.layerID)
1666
+ .items.get(selectedObject.itemID);
1667
+
1668
+ lastAngle = 0;
1669
+
1670
+ angleObj.position.set(
1671
+ planData.plan.position.x + Point.x,
1672
+ selItem.category === 'lighting'
1673
+ ? -planData.plan.position.y -
1674
+ selItem.properties.get('height').get('length')
1675
+ : selItem.properties.get('altitude').get('length') +
1676
+ planData.plan.position.y,
1677
+ planData.plan.position.z - Point.y
1678
+ );
1679
+
1680
+ angleTexture.image = createAngleObject(0);
1681
+ angleTexture.needsUpdate = true;
1682
+
1683
+ scene3D.add(angleObj);
1684
+ this.setState({ angleObj: angleObj });
1685
+ let centerPos = Point;
1686
+ getPoint(event, alti);
1687
+
1688
+ this.context.itemsActions.beginRotatingItem3D(
1689
+ selectedObject.layerID,
1690
+ selectedObject.itemID,
1691
+ Point.x,
1692
+ Point.y,
1693
+ centerPos.x,
1694
+ centerPos.y
1695
+ );
1696
+ bRotate = true;
1697
+ } else if (transflag == 1) {
1698
+ bMoveUP = true;
1699
+ } else if (transflag == 2) {
1700
+ switch (true) {
1701
+ case 'holeID' in selectedObject:
1702
+ this.context.holesActions.beginDraggingHole3D(
1703
+ selectedObject.layerID,
1704
+ selectedObject.holeID,
1705
+ Point.x,
1706
+ Point.y
1707
+ );
1708
+ break;
1709
+ default:
1710
+ this.context.itemsActions.beginDraggingItem3D(
1711
+ selectedObject.layerID,
1712
+ selectedObject.itemID,
1713
+ Point.x,
1714
+ Point.y
1715
+ );
1716
+ break;
1717
+ }
1718
+ bMove = true;
1719
+ scene3D.remove(toolObj);
1720
+ }
1721
+ for (i = 0; i < intersects.length; i++) {
1722
+ if (
1723
+ selectedItem != undefined &&
1724
+ intersects[i].object.parent &&
1725
+ intersects[i].object.parent.parent.userData.itemId ===
1726
+ selectedItem.userData.itemId
1727
+ )
1728
+ selectedFlag = true;
1729
+ }
1730
+ if (
1731
+ selectedFlag ||
1732
+ (toolIntersects.length > 0 && !isElevationView(mode))
1733
+ ) {
1734
+ cameraControls.mouseButtons.left = CameraControls.ACTION.NONE;
1735
+ selectedFlag = false;
1736
+ } else {
1737
+ isSelected = false;
1738
+ this.context.projectActions.unselectAll();
1739
+ scene3D.remove(toolObj);
1740
+ this.context.itemsActions.removeReplacingSupport();
1741
+ }
1742
+ }
1743
+ } else {
1744
+ isSelected = false;
1745
+ this.context.projectActions.unselectAll();
1746
+ scene3D.remove(toolObj);
1747
+ this.context.itemsActions.removeReplacingSupport();
1748
+ return;
1749
+ }
1750
+ }
1751
+ };
1752
+
1753
+ this.mouseUpEvent = event => {
1754
+ firstMove = 0;
1755
+ let altitude = 0;
1756
+ if (
1757
+ allItemRect &&
1758
+ allItemRect.cur &&
1759
+ allItemRect.cur.itemInfo !== undefined
1760
+ ) {
1761
+ let properties = allItemRect.cur.itemInfo.properties;
1762
+ altitude = properties.getIn(['altitude', '_length']);
1763
+ let unit = properties.getIn(['altitude', '_unit']) || 'in';
1764
+ altitude = convert(altitude).from(unit).to(this.props.state.scene.unit);
1765
+ }
1766
+ scene3D.remove(angleObj);
1767
+ scene3D.remove(toolObj);
1768
+ if (!this.props.downloadFlag && !this.props.state.mode.includes('ING')) {
1769
+ this.props.setToolbar('');
1770
+ }
1771
+ getPoint(event, altitude);
1772
+ if (this.props.state.mode == MODE_DRAWING_ITEM_3D) {
1773
+ if (Point.x > this.props.state.scene.width)
1774
+ Point.x = this.props.state.width;
1775
+ if (Point.y > this.props.state.scene.height)
1776
+ Point.y = this.props.state.height;
1777
+ if (Point.x < 0) Point.x = 0;
1778
+ if (Point.y < 0) Point.y = 0;
1779
+ if (snapBox == null) {
1780
+ actions.itemsActions.endDrawingItem(
1781
+ this.props.state.scene.selectedLayer,
1782
+ sPoint.x,
1783
+ sPoint.y
1784
+ );
1785
+ } else {
1786
+ actions.itemsActions.updateDraggingItemChanged(
1787
+ targetPoint.x,
1788
+ -targetPoint.z,
1789
+ selectedObject.layerID,
1790
+ selectedObject.itemID
1791
+ );
1792
+ this.context.itemsActions.updateRotatingItemChanged(
1793
+ targetRot,
1794
+ selectedObject.layerID,
1795
+ selectedObject.itemID
1796
+ );
1797
+ removeSnapBox();
1798
+
1799
+ actions.itemsActions.endDrawingItem(
1800
+ this.props.state.scene.selectedLayer,
1801
+ Point.x,
1802
+ Point.y
1803
+ );
1804
+ }
1805
+ bMove = false;
1806
+ return;
1807
+ }
1808
+
1809
+ if (this.props.state.mode == MODE_DRAGGING_ITEM_3D) {
1810
+ this.context.itemsActions.endDraggingItem3D();
1811
+ }
1812
+
1813
+ if (this.props.state.mode == MODE_ROTATING_ITEM_3D) {
1814
+ this.context.itemsActions.endRotatingItem3D(sPoint.x, sPoint.y);
1815
+ }
1816
+
1817
+ if (this.props.state.mode == MODE_DRAWING_HOLE_3D) {
1818
+ gridPlanOrigin = gridPlane.position;
1819
+ gridMatrix.copy(gridPlane.matrixWorld).invert();
1820
+ camPos = camera.position;
1821
+ if (!getIntersectWallPoint(event)) return;
1822
+ actions.holesActions.endDrawingHole3D(
1823
+ this.props.state.scene.selectedLayer,
1824
+ Point.x,
1825
+ Point.y
1826
+ );
1827
+ bMove = false;
1828
+ return;
1829
+ }
1830
+
1831
+ event.preventDefault();
1832
+ if (event.button === 0) {
1833
+ cameraControls.mouseButtons.left = CameraControls.ACTION.ROTATE;
1834
+ mouse.x = (event.offsetX / this.width) * 2 - 1;
1835
+ mouse.y = -(event.offsetY / this.height) * 2 + 1;
1836
+
1837
+ raycaster.setFromCamera(mouse, camera);
1838
+ rayDirection = raycaster.ray.direction;
1839
+ rayDirection = rayDirection.normalize();
1840
+
1841
+ const meshes = [];
1842
+ toIntersect.forEach(object => {
1843
+ if (!object) return;
1844
+ object.traverse(o => {
1845
+ if (o.isMesh) meshes.push(o);
1846
+ });
1847
+ });
1848
+
1849
+ let intersects = raycaster.intersectObjects(meshes, true);
1850
+ let i;
1851
+
1852
+ if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1853
+ for (i = 0; i < intersects.length; i++) {
1854
+ if (intersects[i].object.name === 'warningObj') break;
1855
+ }
1856
+ if (intersects[i] !== undefined) {
1857
+ let distance = Math.sqrt(
1858
+ Math.pow((intersects[i].uv.x - 0.5) * 50, 2) +
1859
+ Math.pow((intersects[i].uv.y - 0.25) * 100, 2)
1860
+ );
1861
+ if (distance <= 20) {
1862
+ if (!bMove && !bRotate) {
1863
+ isSelected = false;
1864
+ this.context.projectActions.unselectAll();
1865
+ scene3D.remove(toolObj);
1866
+ this.context.itemsActions.removeReplacingSupport();
1867
+
1868
+ let replaceInfo = intersects[i].object.parent.parent.userData;
1869
+ this.context.itemsActions.selectItem(
1870
+ replaceInfo.layerId,
1871
+ replaceInfo.itemId
1872
+ );
1873
+ !this.props.downloadFlag && this.props.replaceCabinet(true);
1874
+
1875
+ return;
1876
+ }
1877
+ }
1878
+ }
1879
+ }
1880
+ !this.props.downloadFlag && this.props.replaceCabinet(false);
1881
+ if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1882
+ for (i = 0; i < intersects.length; i++) {
1883
+ if (
1884
+ intersects[i].object instanceof Three.Mesh &&
1885
+ intersects[i].object.name != 'TransformBox' &&
1886
+ intersects[i].object.type != 'Line' &&
1887
+ intersects[i].object.name != 'lineText' &&
1888
+ intersects[i].object.name != 'countertops' &&
1889
+ intersects[i].object.type != 'BoxHelper' &&
1890
+ intersects[i].object.name != 'soul' &&
1891
+ !intersects[i].object.name.includes('backsplash') &&
1892
+ !intersects[i].object.name.includes('WarningBox')
1893
+ )
1894
+ break;
1895
+ }
1896
+ }
1897
+ gridMatrix.copy(gridPlane.matrixWorld).invert();
1898
+ if (
1899
+ (Math.abs(mouse.x - this.lastMousePosition.x) <= 0.02 &&
1900
+ Math.abs(mouse.y - this.lastMousePosition.y) <= 0.02) ||
1901
+ bMove
1902
+ ) {
1903
+ if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1904
+ if (intersects[i] === undefined) {
1905
+ if (!bMove) {
1906
+ isSelected = false;
1907
+ this.context.projectActions.unselectAll();
1908
+ scene3D.remove(toolObj);
1909
+ this.context.itemsActions.removeReplacingSupport();
1910
+ return;
1911
+ }
1912
+ }
1913
+
1914
+ if (!bMove) {
1915
+ selectedObject =
1916
+ intersects[i].object.interact &&
1917
+ intersects[i].object.interact();
1918
+ }
1919
+
1920
+ if (selectedObject !== undefined && 'itemID' in selectedObject) {
1921
+ currentObject = intersects[i].object;
1922
+ for (; currentObject.parent != null; ) {
1923
+ if (currentObject.name == 'pivot') break;
1924
+ currentObject = currentObject.parent;
1925
+ }
1926
+ isSelected = true;
1927
+ setTimeout(() => {
1928
+ getDistances(layer);
1929
+ let selectedItem =
1930
+ planData.sceneGraph.layers[selectedObject.layerID].items[
1931
+ selectedObject.itemID
1932
+ ];
1933
+ if (isUndefined(selectedItem)) return;
1934
+ const selItem = this.props.state.scene.layers
1935
+ .get(selectedObject.layerID)
1936
+ .items.get(selectedObject.itemID);
1937
+ let itemPos = selectedItem.position.clone();
1938
+
1939
+ if (
1940
+ intersects[i].object.parent &&
1941
+ intersects[i].object.parent.parent.userData.itemId ===
1942
+ selectedItem.userData.itemId
1943
+ ) {
1944
+ toolObj.position.set(
1945
+ intersects[i].point.x,
1946
+ intersects[i].point.y,
1947
+ intersects[i].point.z
1948
+ );
1949
+ } else {
1950
+ toolObj.position.set(
1951
+ planData.plan.position.x + itemPos.x,
1952
+ selItem.category === 'lighting'
1953
+ ? -planData.plan.position.y -
1954
+ selItem.properties.get('height').get('length')
1955
+ : planData.plan.position.y +
1956
+ selectedItem.children[0].position.y,
1957
+ planData.plan.position.z + itemPos.z
1958
+ );
1959
+ }
1960
+ scene3D.add(toolObj);
1961
+ this.setState({ toolObj: toolObj });
1962
+ // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1963
+ let pointArray = [],
1964
+ cnt = 0;
1965
+ pointArray.push([fVLine[0].userData.distance, 90]);
1966
+ pointArray.push([fVLine[1].userData.distance, -90]);
1967
+ pointArray.push([fVLine[2].userData.distance, 180]);
1968
+ pointArray.push([fVLine[3].userData.distance, 0]);
1969
+ pointArray.forEach((pointElement, index) => {
1970
+ if (pointElement[0] == undefined) pointArray[index][0] = 0;
1971
+ });
1972
+ pointArray.forEach(pointElement => {
1973
+ if (pointElement[0] == 0) cnt++;
1974
+ });
1975
+ if (cnt == 4 || cnt == 3) {
1976
+ pointArray[0][0] = 100;
1977
+ pointArray[1][0] = 100;
1978
+ }
1979
+ actions.itemsActions.storeDistArray(
1980
+ layer.id,
1981
+ selectedObject.itemID,
1982
+ pointArray
1983
+ );
1984
+ });
1985
+ } else {
1986
+ if (selectedObject) {
1987
+ switch (true) {
1988
+ case 'holeID' in selectedObject:
1989
+ if (selObj?.object?.name.includes('transHole')) {
1990
+ actions.holesActions.endDraggingHole3D(
1991
+ sPoint.x,
1992
+ sPoint.y
1993
+ );
1994
+ }
1995
+ break;
1996
+ case 'lineID' in selectedObject:
1997
+ if (selObj?.object?.name.includes('transHole')) {
1998
+ actions.holesActions.endDraggingHole3D(
1999
+ sPoint.x,
2000
+ sPoint.y
2001
+ );
2002
+ }
2003
+ break;
2004
+ default:
2005
+ break;
2006
+ }
2007
+ }
2008
+ isSelected = false;
2009
+ }
2010
+ } else {
2011
+ isSelected = false;
2012
+ this.context.projectActions.unselectAll();
2013
+ switch (true) {
2014
+ case 'holeID' in selectedObject:
2015
+ actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
2016
+ break;
2017
+ default:
2018
+ this.context.itemsActions.removeReplacingSupport();
2019
+ break;
2020
+ }
2021
+ }
2022
+ bMove = false;
2023
+ bRotate = false;
2024
+ bMoveUP = false;
2025
+ if (isSelected) {
2026
+ prepareSnap(layer);
2027
+ selectedObj = allItemRect.cur;
2028
+ }
2029
+ } else {
2030
+ visibleTransformBox(false);
2031
+ let alti = 0;
2032
+ if (
2033
+ allItemRect &&
2034
+ allItemRect.cur &&
2035
+ allItemRect.cur.itemInfo !== undefined
2036
+ ) {
2037
+ let properties = allItemRect.cur.itemInfo.properties;
2038
+ alti = properties.getIn(['altitude', '_length']);
2039
+ let unit = properties.getIn(['altitude', '_unit']) || 'in';
2040
+ alti = convert(alti).from(unit).to(this.props.state.scene.unit);
2041
+ }
2042
+ getPoint(event, alti);
2043
+ if (bRotate) {
2044
+ let selectedItem =
2045
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2046
+ selectedObject.itemID
2047
+ ];
2048
+ if (isUndefined(selectedItem)) return;
2049
+ const selItem = this.props.state.scene.layers
2050
+ .get(selectedObject.layerID)
2051
+ .items.get(selectedObject.itemID);
2052
+ let itemPos = selectedItem.position.clone();
2053
+
2054
+ if (
2055
+ intersects[i]?.object?.parent?.parent?.userData?.itemId ===
2056
+ selectedItem.userData.itemId
2057
+ ) {
2058
+ toolObj.position.set(
2059
+ intersects[i].point.x,
2060
+ intersects[i].point.y,
2061
+ intersects[i].point.z
2062
+ );
2063
+ } else {
2064
+ toolObj.position.set(
2065
+ planData.plan.position.x + itemPos.x,
2066
+ selItem.category === 'lighting'
2067
+ ? -planData.plan.position.y -
2068
+ selItem.properties.get('height').get('length')
2069
+ : planData.plan.position.y +
2070
+ selectedItem.children[0].position.y,
2071
+ planData.plan.position.z + itemPos.z
2072
+ );
2073
+ }
2074
+
2075
+ scene3D.add(toolObj);
2076
+ this.setState({ toolObj: toolObj });
2077
+ this.context.itemsActions.endRotatingItem3D(Point.x, Point.y);
2078
+ bRotate = false;
2079
+ }
2080
+ if (bMove) {
2081
+ bMove = false;
2082
+ let selectedItem =
2083
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2084
+ selectedObject.itemID
2085
+ ];
2086
+ if (isUndefined(selectedItem)) return;
2087
+ const selItem = this.props.state.scene.layers
2088
+ .get(selectedObject.layerID)
2089
+ .items.get(selectedObject.itemID);
2090
+ let itemPos = selectedItem.position.clone();
2091
+ if (
2092
+ intersects[i].object.parent.parent.userData.itemId ===
2093
+ selectedItem.userData.itemId
2094
+ ) {
2095
+ toolObj.position.set(
2096
+ intersects[i].point.x,
2097
+ intersects[i].point.y,
2098
+ intersects[i].point.z
2099
+ );
2100
+ } else {
2101
+ toolObj.position.set(
2102
+ planData.plan.position.x + itemPos.x,
2103
+ selItem.category === 'lighting'
2104
+ ? -planData.plan.position.y -
2105
+ selItem.properties.get('height').get('length')
2106
+ : planData.plan.position.y +
2107
+ selectedItem.children[0].position.y,
2108
+ planData.plan.position.z + itemPos.z
2109
+ );
2110
+ }
2111
+
2112
+ scene3D.add(toolObj);
2113
+ this.setState({ toolObj: toolObj });
2114
+ if (snapBox == null) {
2115
+ let item3D =
2116
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2117
+ selectedObject.itemID
2118
+ ];
2119
+ if (!item3D) return;
2120
+ item3D.visible = true;
2121
+ let originPos = item3D.position.clone();
2122
+ setTimeout(() => {
2123
+ this.context.itemsActions.updateDraggingItemChanged(
2124
+ originPos.x,
2125
+ -originPos.z,
2126
+ selectedObject.layerID,
2127
+ selectedObject.itemID
2128
+ );
2129
+ }, 50);
2130
+ } else {
2131
+ this.context.itemsActions.updateDraggingItemChanged(
2132
+ targetPoint.x,
2133
+ -targetPoint.z,
2134
+ selectedObject.layerID,
2135
+ selectedObject.itemID
2136
+ );
2137
+ this.context.itemsActions.updateRotatingItemChanged(
2138
+ targetRot,
2139
+ selectedObject.layerID,
2140
+ selectedObject.itemID
2141
+ );
2142
+ let item3D =
2143
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2144
+ selectedObject.itemID
2145
+ ];
2146
+ item3D.position.x = targetPoint.x;
2147
+ item3D.position.z = targetPoint.z;
2148
+ item3D.visible = true;
2149
+ }
2150
+ }
2151
+ if (bMoveUP) {
2152
+ bMoveUP = false;
2153
+ }
2154
+ }
2155
+ removeSnapBox();
2156
+
2157
+ actions.sceneActions.updateMovingState(true);
2158
+ if (isSelected === true) {
2159
+ prepareSnap(layer);
2160
+ selectedObj = allItemRect.cur;
2161
+ }
2162
+ }
2163
+ };
2164
+
2165
+ this.mouseMoveEvent = event => {
2166
+ event.preventDefault();
2167
+ backsplashVisible = false;
2168
+
2169
+ let altitude = 0;
2170
+ if (
2171
+ allItemRect &&
2172
+ allItemRect.cur &&
2173
+ allItemRect.cur.itemInfo !== undefined
2174
+ ) {
2175
+ let properties = allItemRect.cur.itemInfo.properties;
2176
+ altitude = properties.getIn(['altitude', '_length']);
2177
+ let unit = properties.getIn(['altitude', '_unit']) || 'in';
2178
+ altitude = convert(altitude).from(unit).to(this.props.state.scene.unit);
2179
+ }
2180
+
2181
+ if (this.props.state.mode === MODE_DRAWING_HOLE_3D) {
2182
+ gridPlanOrigin = gridPlane.position;
2183
+ gridMatrix.copy(gridPlane.matrixWorld).invert();
2184
+ camPos = camera.position;
2185
+ if (!getIntersectWallPoint(event)) return;
2186
+
2187
+ let drawingSupport = this.props.state.drawingSupport;
2188
+ if (!drawingSupport.has('currentID')) {
2189
+ this.context.holesActions.updateDrawingHole3D(
2190
+ this.props.state.scene.selectedLayer,
2191
+ Point.x,
2192
+ Point.y
2193
+ );
2194
+ sPoint.set(Point.x, Point.y);
2195
+ } else {
2196
+ let layerID = this.props.state.scene.selectedLayer;
2197
+ let holeID = this.props.state.drawingSupport.get('currentID');
2198
+
2199
+ deleteSpecifiedMeshObjects('WarningBox' + holeID);
2200
+ prepareSnap(layer);
2201
+
2202
+ // let {nx, ny, rot} = GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, allArea);
2203
+ let nx = Point.x;
2204
+ let ny = Point.y;
2205
+ actions.holesActions.updateDrawingHole3D(layerID, nx, ny);
2206
+ sPoint.set(nx, ny);
2207
+ }
2208
+ }
2209
+
2210
+ if (this.props.state.mode === MODE_DRAWING_ITEM_3D) {
2211
+ // We need to set cam position since when MODE_DRAWING_ITEM_3D mouse down event
2212
+ // is not emited so cam position is not valid
2213
+ gridPlanOrigin = gridPlane.position;
2214
+ gridMatrix.copy(gridPlane.matrixWorld).invert();
2215
+ camPos = camera.position;
2216
+ getPoint(event, altitude);
2217
+ if (
2218
+ Point.x > this.props.state.scene.width ||
2219
+ Point.x < 0 ||
2220
+ Point.y > this.props.state.scene.height ||
2221
+ Point.y < 0
2222
+ )
2223
+ return;
2224
+ let drawingSupport = this.props.state.drawingSupport;
2225
+ if (!drawingSupport.has('currentID')) {
2226
+ this.context.itemsActions.updateDrawingItem(
2227
+ this.props.state.scene.selectedLayer,
2228
+ Point.x,
2229
+ Point.y
2230
+ );
2231
+ sPoint.set(Point.x, Point.y);
2232
+ } else {
2233
+ let layerID = this.props.state.scene.selectedLayer;
2234
+ let itemID = this.props.state.drawingSupport.get('currentID');
2235
+ selectedObject = { layerID: layerID, itemID: itemID };
2236
+ let mX = Point.x - sPoint.x;
2237
+ let mY = Point.y - sPoint.y;
2238
+ let item3D =
2239
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2240
+ selectedObject.itemID
2241
+ ];
2242
+ let layer = this.props.state.scene.getIn([
2243
+ 'layers',
2244
+ selectedObject.layerID
2245
+ ]);
2246
+
2247
+ deleteSpecifiedMeshObjects('TransformBox');
2248
+ deleteSpecifiedMeshObjects('WarningBox' + itemID);
2249
+ prepareSnap(layer);
2250
+
2251
+ let item = layer.items.getIn([selectedObject.itemID]);
2252
+ if (item.counterTop.uri == '')
2253
+ item.counterTop.uri = layer.counterTop.uri;
2254
+ let sRot = item.rotation;
2255
+
2256
+ if (!item3D) return;
2257
+
2258
+ let originPos = item3D.position.clone();
2259
+ let tPos = new Three.Vector2(mX + originPos.x, mY - originPos.z);
2260
+ let sBounding = item3D.children[0].userData;
2261
+ let swidth = sBounding.max.x - sBounding.min.x;
2262
+ let sdepth = sBounding.max.z - sBounding.min.z;
2263
+ let sVertices = this.getRectPoints(
2264
+ swidth,
2265
+ sdepth,
2266
+ tPos.clone(),
2267
+ ((sRot % 360) / 180) * Math.PI
2268
+ );
2269
+ let { nx, ny, rot } = GeometryUtils.calcSnap(
2270
+ allItemRect,
2271
+ allItemSnap,
2272
+ allLineRects,
2273
+ allLineSnap,
2274
+ allRect,
2275
+ Point.x,
2276
+ Point.y,
2277
+ allArea
2278
+ );
2279
+ let nPos = new Three.Vector2(nx, ny);
2280
+ if (
2281
+ !this.collisionHoleCheck(
2282
+ item3D,
2283
+ nPos,
2284
+ item.rotation,
2285
+ {
2286
+ userData: { itemId: null }
2287
+ },
2288
+ item,
2289
+ this.context.catalog
2290
+ )
2291
+ ) {
2292
+ this.collisionSlide(
2293
+ item3D,
2294
+ originPos,
2295
+ layer,
2296
+ sVertices,
2297
+ tPos,
2298
+ item
2299
+ );
2300
+ //return;
2301
+ }
2302
+ let polygonPoint = lineRect(layer);
2303
+ if (polygonPoint.length > 0) {
2304
+ let PolygonSect = GeometryUtils.ContainsPoint(polygonPoint, nx, ny);
2305
+ if (!PolygonSect) {
2306
+ let { cx, cy, crot } = GeometryUtils.calcCreateSnap(
2307
+ allItemRect,
2308
+ allItemSnap,
2309
+ allLineRects,
2310
+ allLineSnap,
2311
+ allRect,
2312
+ Point.x,
2313
+ Point.y,
2314
+ polygonPoint
2315
+ );
2316
+ nx = cx;
2317
+ ny = cy;
2318
+ rot = crot;
2319
+ }
2320
+ }
2321
+ let polygon = lineRect(layer);
2322
+ if (polygon.length > 0) {
2323
+ let Sect = GeometryUtils.ContainsPoint(polygon, nx, ny);
2324
+ if (!Sect) return;
2325
+ }
2326
+ actions.itemsActions.updateDraggingItemChanged(
2327
+ nx,
2328
+ ny,
2329
+ selectedObject.layerID,
2330
+ selectedObject.itemID
2331
+ );
2332
+ actions.itemsActions.updateRotatingItemChanged(
2333
+ rot,
2334
+ selectedObject.layerID,
2335
+ selectedObject.itemID
2336
+ );
2337
+ sPoint.set(nx, ny);
2338
+ getDistances(layer);
2339
+ let pointArray = [],
2340
+ cnt = 0;
2341
+ pointArray.push([fVLine[0].userData.distance, 90]);
2342
+ pointArray.push([fVLine[1].userData.distance, -90]);
2343
+ pointArray.push([fVLine[2].userData.distance, 180]);
2344
+ pointArray.push([fVLine[3].userData.distance, 0]);
2345
+ pointArray.forEach((pointElement, index) => {
2346
+ if (pointElement[0] == undefined) pointArray[index][0] = 0;
2347
+ });
2348
+ pointArray.forEach(pointElement => {
2349
+ if (pointElement[0] == 0) cnt++;
2350
+ });
2351
+ if (cnt == 4 || cnt == 3) {
2352
+ pointArray[0][0] = 100;
2353
+ pointArray[1][0] = 100;
2354
+ }
2355
+ actions.itemsActions.storeDistArray(layer.id, item.id, pointArray);
2356
+ let minDis = fVLine[0].userData.distance;
2357
+ let snapObj = fVLine[0];
2358
+ let iPos = item3D.position.clone();
2359
+ let snapDis = Math.sqrt(
2360
+ (iPos.x - targetPoint.x) * (iPos.x - targetPoint.x) +
2361
+ (iPos.z - targetPoint.z) * (iPos.z - targetPoint.z)
2362
+ );
2363
+ if (snapDis >= 100 && snapObj != null) {
2364
+ removeSnapBox();
2365
+ backsplashVisible = false;
2366
+ //console.log('1 snap no');
2367
+ }
2368
+ for (let i = 1; i < fVLine.length; i++) {
2369
+ if (minDis > fVLine[i].userData.distance) {
2370
+ minDis = fVLine[i].userData.distance;
2371
+ snapObj = fVLine[i];
2372
+ }
2373
+ }
2374
+ if (snapBox == null) {
2375
+ snapFlag = false;
2376
+ }
2377
+ actions.sceneActions.updateMovingState(false);
2378
+ if (minDis < snapDelta && !snapFlag) {
2379
+ this.snap(snapObj, layer);
2380
+ snapFlag = true;
2381
+ //console.log('1 snap Yes')
2382
+ getDistances(layer, true);
2383
+ let i = 0;
2384
+ for (i = 0; i < fVLine.length; i++) {
2385
+ if (fVLine[i].userData.distance < snapDelta) {
2386
+ break;
2387
+ }
2388
+ }
2389
+ if (i === fVLine.length) backsplashVisible = false;
2390
+ else backsplashVisible = true;
2391
+ }
2392
+ actions.itemsActions.setBacksplashVisible(
2393
+ selectedObject.itemID,
2394
+ backsplashVisible
2395
+ );
2396
+ }
2397
+ }
2398
+
2399
+ if (bRotate) {
2400
+ getPoint(event, altitude);
2401
+ this.context.itemsActions.updateRotatingItem(Point.x, Point.y);
2402
+
2403
+ let layer = this.props.state.scene.getIn([
2404
+ 'layers',
2405
+ selectedObject.layerID
2406
+ ]);
2407
+ let item = layer.items.getIn([selectedObject.itemID]);
2408
+
2409
+ let orginRot = this.props.state.rotatingSupport.get('originRotation');
2410
+
2411
+ angleTexture.image = createAngleObject(
2412
+ (orginRot < 0 ? 360 - orginRot : orginRot) - item.rotation
2413
+ );
2414
+ angleTexture.needsUpdate = true;
2415
+
2416
+ deleteSpecifiedMeshObjects('WarningBox' + selectedObject.itemID);
2417
+ deleteSpecifiedMeshObjects('backsplash' + selectedObject.itemID);
2418
+
2419
+ actions.sceneActions.updateMovingState(false);
2420
+ }
2421
+
2422
+ if (bMoveUP) {
2423
+ this.context.itemsActions.updateItemsAltitude(
2424
+ selectedObject.layerID,
2425
+ selectedObject.itemID,
2426
+ event.movementY
2427
+ );
2428
+ }
2429
+
2430
+ if (bMove) {
2431
+ if ('holeID' in selectedObject) {
2432
+ gridPlanOrigin = gridPlane.position;
2433
+ gridMatrix.copy(gridPlane.matrixWorld).invert();
2434
+ camPos = camera.position;
2435
+ if (!getIntersectWallPoint(event)) return;
2436
+ let draggingSupport = this.props.state.draggingSupport;
2437
+ if (!draggingSupport.has('currentID')) {
2438
+ this.context.holesActions.updateDraggingHole(Point.x, Point.y);
2439
+ sPoint.set(Point.x, Point.y);
2440
+ } else {
2441
+ let holeID = this.props.state.draggingSupport.get('currentID');
2442
+ deleteSpecifiedMeshObjects('WarningBox' + holeID);
2443
+ let nx = Point.x;
2444
+ let ny = Point.y;
2445
+ actions.holesActions.updateDraggingHole(nx, ny);
2446
+ sPoint.set(nx, ny);
2447
+ }
2448
+ } else {
2449
+ const item3D =
2450
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2451
+ selectedObject.itemID
2452
+ ];
2453
+
2454
+ if (item3D === undefined) return;
2455
+
2456
+ const layer = this.props.state.scene.getIn([
2457
+ 'layers',
2458
+ item3D.userData.layerId
2459
+ ]);
2460
+
2461
+ const item = layer.items.getIn([selectedObject.itemID]);
2462
+ if (item.counterTop.uri == '')
2463
+ item.counterTop.uri = layer.counterTop.uri;
2464
+
2465
+ let sRot = item.rotation;
2466
+ let mX = Point.x - sPoint.x;
2467
+ let mY = Point.y - sPoint.y;
2468
+
2469
+ deleteSpecifiedMeshObjects('WarningBox' + selectedObject.itemID);
2470
+ deleteSpecifiedMeshObjects('backsplash' + selectedObject.itemID);
2471
+ prepareSnap(layer);
2472
+
2473
+ getPoint(event, altitude);
2474
+
2475
+ let originPos = item3D.position.clone();
2476
+ let tPos = new Three.Vector2(mX + originPos.x, mY - originPos.z);
2477
+ let sBounding = item3D.children[0].userData;
2478
+ let swidth = sBounding.max.x - sBounding.min.x;
2479
+ let sdepth = sBounding.max.z - sBounding.min.z;
2480
+ let sVertices = this.getRectPoints(
2481
+ swidth,
2482
+ sdepth,
2483
+ tPos.clone(),
2484
+ ((sRot % 360) / 180) * Math.PI
2485
+ );
2486
+ let { nx, ny, rot } = GeometryUtils.calcSnap(
2487
+ allItemRect,
2488
+ allItemSnap,
2489
+ allLineRects,
2490
+ allLineSnap,
2491
+ allRect,
2492
+ Point.x,
2493
+ Point.y,
2494
+ allArea
2495
+ );
2496
+ let nPos = new Three.Vector2(nx, ny);
2497
+ if (
2498
+ !this.collisionHoleCheck(
2499
+ item3D,
2500
+ nPos,
2501
+ item.rotation,
2502
+ {
2503
+ userData: { itemId: null }
2504
+ },
2505
+ item,
2506
+ this.context.catalog
2507
+ )
2508
+ ) {
2509
+ this.collisionSlide(
2510
+ item3D,
2511
+ originPos,
2512
+ layer,
2513
+ sVertices,
2514
+ tPos,
2515
+ item
2516
+ );
2517
+ //return;
2518
+ }
2519
+ let polygonPoint = lineRect(layer);
2520
+ if (polygonPoint.length > 0) {
2521
+ let PolygonSect = GeometryUtils.ContainsPoint(polygonPoint, nx, ny);
2522
+ if (!PolygonSect) {
2523
+ let { cx, cy, crot } = GeometryUtils.calcCreateSnap(
2524
+ allItemRect,
2525
+ allItemSnap,
2526
+ allLineRects,
2527
+ allLineSnap,
2528
+ allRect,
2529
+ Point.x,
2530
+ Point.y,
2531
+ polygonPoint
2532
+ );
2533
+ nx = cx;
2534
+ ny = cy;
2535
+ rot = crot;
2536
+ }
2537
+ }
2538
+ let polygon = lineRect(layer);
2539
+ if (polygon.length > 0) {
2540
+ let Sect = GeometryUtils.ContainsPoint(polygon, nx, ny);
2541
+ if (!Sect) return;
2542
+ }
2543
+ actions.itemsActions.updateDraggingItemChanged(
2544
+ nx,
2545
+ ny,
2546
+ selectedObject.layerID,
2547
+ selectedObject.itemID
2548
+ );
2549
+ actions.itemsActions.updateRotatingItemChanged(
2550
+ rot,
2551
+ selectedObject.layerID,
2552
+ selectedObject.itemID
2553
+ );
2554
+ sPoint.set(nx, ny);
2555
+ getDistances(layer);
2556
+ let pointArray = [],
2557
+ cnt = 0;
2558
+ pointArray.push([fVLine[0].userData.distance, 90]);
2559
+ pointArray.push([fVLine[1].userData.distance, -90]);
2560
+ pointArray.push([fVLine[2].userData.distance, 180]);
2561
+ pointArray.push([fVLine[3].userData.distance, 0]);
2562
+ pointArray.forEach((pointElement, index) => {
2563
+ if (pointElement[0] == undefined) pointArray[index][0] = 0;
2564
+ });
2565
+ pointArray.forEach(pointElement => {
2566
+ if (pointElement[0] == 0) cnt++;
2567
+ });
2568
+ if (cnt == 4 || cnt == 3) {
2569
+ pointArray[0][0] = 100;
2570
+ pointArray[1][0] = 100;
2571
+ }
2572
+ actions.itemsActions.storeDistArray(layer.id, item.id, pointArray);
2573
+ let minDis = fVLine[0].userData.distance;
2574
+ let snapObj = fVLine[0];
2575
+ let iPos = item3D.position.clone();
2576
+ let snapDis = Math.sqrt(
2577
+ (iPos.x - targetPoint.x) * (iPos.x - targetPoint.x) +
2578
+ (iPos.z - targetPoint.z) * (iPos.z - targetPoint.z)
2579
+ );
2580
+ if (snapDis >= 100 && snapObj != null) {
2581
+ removeSnapBox();
2582
+ backsplashVisible = false;
2583
+ //console.log('1 snap no');
2584
+ }
2585
+ for (let i = 1; i < fVLine.length; i++) {
2586
+ if (minDis > fVLine[i].userData.distance) {
2587
+ minDis = fVLine[i].userData.distance;
2588
+ snapObj = fVLine[i];
2589
+ }
2590
+ }
2591
+ if (snapBox == null) {
2592
+ snapFlag = false;
2593
+ }
2594
+ actions.sceneActions.updateMovingState(false);
2595
+ if (minDis < snapDelta && !snapFlag) {
2596
+ this.snap(snapObj, layer);
2597
+ snapFlag = true;
2598
+ //console.log('1 snap Yes')
2599
+ getDistances(layer, true);
2600
+
2601
+ let i = 0;
2602
+ for (i = 0; i < fVLine.length; i++) {
2603
+ if (fVLine[i].userData.distance < snapDelta) {
2604
+ break;
2605
+ }
2606
+ }
2607
+ if (i === fVLine.length) backsplashVisible = false;
2608
+ else backsplashVisible = true;
2609
+ }
2610
+ actions.itemsActions.setBacksplashVisible(
2611
+ selectedObject.itemID,
2612
+ backsplashVisible
2613
+ );
2614
+ }
2615
+ }
2616
+
2617
+ if (!bMove && !bRotate && !bMoveUP) {
2618
+ let curPos = {
2619
+ x: (event.offsetX / this.width) * 2 - 1,
2620
+ y: -(event.offsetY / this.height) * 2 + 1
2621
+ };
2622
+
2623
+ raycaster.setFromCamera(curPos, camera);
2624
+ rayDirection = raycaster.ray.direction;
2625
+ rayDirection = rayDirection.normalize();
2626
+
2627
+ const meshes = getAllMeshes(toIntersect);
2628
+ let intersects = raycaster.intersectObjects(meshes, true);
2629
+ let i;
2630
+ if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
2631
+ for (i = 0; i < intersects.length; i++) {
2632
+ if (intersects[i].object.name === 'warningObj') break;
2633
+ }
2634
+ if (intersects[i] !== undefined) {
2635
+ let distance = Math.sqrt(
2636
+ Math.pow((intersects[i].uv.x - 0.5) * 50, 2) +
2637
+ Math.pow((intersects[i].uv.y - 0.75) * 100, 2)
2638
+ );
2639
+ if (distance <= 20) {
2640
+ let infoPos = { x: 0, y: 0 };
2641
+ if (event.offsetY > 150) {
2642
+ infoPos.y = event.offsetY - 60;
2643
+ } else {
2644
+ infoPos.y = event.offsetY + 10;
2645
+ }
2646
+ if (event.offsetX > this.width - 650) {
2647
+ infoPos.x = event.offsetX - 650;
2648
+ } else {
2649
+ infoPos.x = event.offsetX;
2650
+ }
2651
+ document.getElementById('warning_box_2d').style.display = 'flex';
2652
+ document.getElementById('warning_box_2d').style.top =
2653
+ `${infoPos.y}px`;
2654
+ document.getElementById('warning_box_2d').style.left =
2655
+ `${infoPos.x}px`;
2656
+ return;
2657
+ }
2658
+ }
2659
+ }
2660
+ }
2661
+ document.getElementById('warning_box_2d').style.display = 'none';
2662
+ };
2663
+
2664
+ this.onkeydown = event => {
2665
+ if (this.props.keyDownEnable && !isElevationView(state.mode)) {
2666
+ switch (event.keyCode) {
2667
+ case 27: // escape key
2668
+ isSelected = false;
2669
+ this.context.projectActions.unselectAll();
2670
+ this.context.itemsActions.removeReplacingSupport();
2671
+ this.context.itemsActions.setMoveStatus(false);
2672
+ this.context.itemsActions.setRotateStatus(false);
2673
+ bMoveUP = false;
2674
+ removeSnapBox();
2675
+ break;
2676
+ case 65: // w (move forward)
2677
+ pivot.rotation.y -= 0.03;
2678
+ break;
2679
+ case 68: // s (move backward)
2680
+ pivot.rotation.y += 0.03;
2681
+ break;
2682
+ case 83: // a (look left)
2683
+ pivot.rotation.x += 0.03;
2684
+ break;
2685
+ case 87: // d (look left)
2686
+ pivot.rotation.x -= 0.03;
2687
+ break;
2688
+ case 37: // left (move forward)
2689
+ planData.plan.position.x += 10;
2690
+ planData.grid.position.x += 10;
2691
+ break;
2692
+ case 38: // Up (move backward)
2693
+ planData.plan.position.y += 10;
2694
+ planData.grid.position.y += 10;
2695
+ break;
2696
+ case 39: // right arrow (look left)
2697
+ planData.plan.position.x -= 10;
2698
+ planData.grid.position.x -= 10;
2699
+ break;
2700
+ case 40: // down arrow (look left)
2701
+ planData.plan.position.y -= 10;
2702
+ planData.grid.position.y -= 10;
2703
+ break;
2704
+ }
2705
+ }
2706
+ };
2707
+
2708
+ this.handleKeyDown = event => {
2709
+ this.onkeydown(event);
2710
+ };
2711
+
2712
+ // Renderer & Event listener
2713
+
2714
+ this.renderer.setClearColor(new Three.Color(SharedStyle.COLORS.white)); // 3D background color
2715
+ this.renderer.setSize(this.width, this.height);
2716
+
2717
+ if (!this.props.downloadFlag) {
2718
+ this.renderer.domElement.addEventListener(
2719
+ 'mousedown',
2720
+ this.mouseDownEvent
2721
+ );
2722
+ this.renderer.domElement.addEventListener('mouseup', this.mouseUpEvent);
2723
+ this.renderer.domElement.addEventListener(
2724
+ 'mousemove',
2725
+ this.mouseMoveEvent
2726
+ );
2727
+
2728
+ window.addEventListener('keydown', this.onkeydown);
2729
+ window.SPKeyDown = this.handleKeyDown;
2730
+ window.tDKeyDown = this.handleKeyDown;
2731
+ }
2732
+
2733
+ // Add the output of the renderer to the html element
2734
+ const canvasWrapper = ReactDOM.findDOMNode(this.refs.canvasWrapper);
2735
+ canvasWrapper && canvasWrapper.appendChild(this.renderer.domElement);
2736
+
2737
+ //
2738
+
2739
+ if (
2740
+ scene.getIn(['layers', scene.selectedLayer, 'selected', 'items']).size !=
2741
+ 0
2742
+ ) {
2743
+ // if selected Object
2744
+ isSelected = true;
2745
+ selectedObject.layerID = scene.selectedLayer;
2746
+ selectedObject.itemID = scene
2747
+ .getIn(['layers', scene.selectedLayer, 'selected', 'items'])
2748
+ .toJS()[0];
2749
+ setTimeout(() => {
2750
+ try {
2751
+ currentObject =
2752
+ planData.sceneGraph.layers[selectedObject.layerID].items[
2753
+ selectedObject.itemID
2754
+ ];
2755
+ if (isUndefined(currentObject)) return;
2756
+ const selItem = this.props.state.scene.layers
2757
+ .get(selectedObject.layerID)
2758
+ .items.get(selectedObject.itemID);
2759
+ let itemPos = currentObject.position.clone();
2760
+ toolObj.position.set(
2761
+ planData.plan.position.x + itemPos.x,
2762
+ selItem.category === 'lighting'
2763
+ ? -planData.plan.position.y -
2764
+ selItem.properties.get('height').get('length')
2765
+ : planData.plan.position.y + currentObject.children[0].position.y,
2766
+ planData.plan.position.z + itemPos.z
2767
+ );
2768
+
2769
+ scene3D.add(toolObj);
2770
+ this.setState({ toolObj: toolObj });
2771
+ } catch (err) {
2772
+ console.log(
2773
+ 'selectedObject : ' +
2774
+ JSON.stringify(selectedObject) +
2775
+ '\nError: ' +
2776
+ err
2777
+ );
2778
+ }
2779
+ }, 2000);
2780
+ }
2781
+
2782
+ // Scene functions
2783
+
2784
+ function init() {
2785
+ clock = new Three.Clock();
2786
+ scene3D = new Three.Scene();
2787
+ if (isElevationView(state.mode))
2788
+ scene3D.background = new Three.Color(0xffffff);
2789
+ // change color about v1: 0x8791AB, v2: 0xC2C2C2, v3: 0xC3CADC
2790
+ else scene3D.background = new Three.Color(0xc3cadc); // change color about v1: 0x8791AB, v2: 0xC2C2C2, v3: 0xC3CADC
2791
+ // scene3D.fog = new Three.Fog(0xC3CADC, 2000, 3500);
2792
+ window.scene3D = scene3D;
2793
+ // Camera
2794
+ if (isElevationView(state.mode)) {
2795
+ // In elevation view, set Orthographic camera's position, angle and rotation about selected line
2796
+ let { layers } = scene;
2797
+ let selectedLayer = layers.get(scene.selectedLayer);
2798
+ let ceilHeight = convert(selectedLayer.ceilHeight)
2799
+ .from(selectedLayer.unit)
2800
+ .to(scene.unit);
2801
+ let lines = [];
2802
+ let selectedLine = selectedLayer.lines.get(
2803
+ selectedLayer.selected.lines.toJS()[0]
2804
+ );
2805
+ let vertex0 = selectedLayer.vertices.get(selectedLine.vertices.get(0));
2806
+ let vertex1 = selectedLayer.vertices.get(selectedLine.vertices.get(1));
2807
+ let { x: x1, y: y1 } = vertex0;
2808
+ let { x: x2, y: y2 } = vertex1;
2809
+ if (
2810
+ GeometryUtils.compareVertices(vertex0, vertex1) >= 0 &&
2811
+ vertex0.x !== vertex1.x
2812
+ ) {
2813
+ ({ x: x1, y: y1 } = vertex1);
2814
+ ({ x: x2, y: y2 } = vertex0);
2815
+ }
2816
+ selectedLayer.lines.toArray().forEach(line => {
2817
+ if (line.id === selectedLine) {
2818
+ let data = line.toJS();
2819
+ data = { ...data, l0: { x: x1, y: y1 }, l1: { x: x2, y: y2 } };
2820
+ lines.push(data);
2821
+ }
2822
+ });
2823
+ let lineLength = GeometryUtils.pointsDistance(x1, y1, x2, y2);
2824
+ self.setState({ lineLength: lineLength });
2825
+ let cameraRect = handleCamRect(
2826
+ self.width,
2827
+ self.height,
2828
+ ceilHeight,
2829
+ lineLength
2830
+ );
2831
+ camera = new Three.OrthographicCamera(
2832
+ -cameraRect.width / 2,
2833
+ cameraRect.width / 2,
2834
+ cameraRect.height / 2,
2835
+ -cameraRect.height / 2,
2836
+ 1,
2837
+ 1000
2838
+ );
2839
+ const angle = Math.atan((y1 - y2) / (x1 - x2));
2840
+ let r = 300;
2841
+ if (Math.abs(angle) === Math.PI / 2) {
2842
+ camera.position.set(
2843
+ (x1 + x2) / 2 - Math.sin(angle) * r,
2844
+ ceilHeight / 2,
2845
+ -((y1 + y2) / 2 - Math.cos(angle) * r)
2846
+ );
2847
+ camera.rotation.set(0, -angle, 0);
2848
+ } else if (vertex0.x > vertex1.x) {
2849
+ camera.position.set(
2850
+ (x1 + x2) / 2 + Math.sin(angle + Math.PI) * r,
2851
+ ceilHeight / 2,
2852
+ -((y1 + y2) / 2 - Math.cos(angle + Math.PI) * r)
2853
+ );
2854
+ camera.rotation.set(0, angle + Math.PI, 0);
2855
+ } else {
2856
+ camera.position.set(
2857
+ (x1 + x2) / 2 + Math.sin(angle) * r,
2858
+ ceilHeight / 2,
2859
+ -((y1 + y2) / 2 - Math.cos(angle) * r)
2860
+ );
2861
+ camera.rotation.set(0, angle, 0);
2862
+ }
2863
+ } else {
2864
+ const aspectRatio = self.width / self.height;
2865
+ camera = new Three.PerspectiveCamera(45, aspectRatio, 1, 300000);
2866
+ camera.position.set(0, 0, 1);
2867
+ }
2868
+ camera.layers.enable(1);
2869
+
2870
+ function loadENV() {
2871
+ new RGBELoader().load(
2872
+ '/assets/brown_photostudio_02_1k.hdr',
2873
+ function (texture) {
2874
+ texture.mapping = Three.EquirectangularReflectionMapping;
2875
+ scene3D.environment = texture;
2876
+ texture.dispose();
2877
+ }
2878
+ );
2879
+ }
2880
+ // Camera Controls
2881
+ if (!isElevationView(state.mode)) {
2882
+ cameraControls = new CameraControls(camera, self.renderer.domElement);
2883
+ cameraControls.dollyToCursor = true;
2884
+ cameraControls.infinityDolly = true;
2885
+ cameraControls.minDistance = 50;
2886
+ cameraControls.maxDistance = Infinity;
2887
+ cameraControls.zoomSpeed = 1;
2888
+
2889
+ loadENV();
2890
+ }
2891
+
2892
+ scene3D.add(planData.plan);
2893
+ scene3D.add(planData.grid);
2894
+ scene3D.add(camera);
2895
+ if (isElevationView(state.mode)) {
2896
+ planData.cam.add(camera);
2897
+ scene3D.add(planData.cam);
2898
+ } else {
2899
+ pivot = new Three.Object3D();
2900
+ pivot.add(camera);
2901
+ scene3D.add(pivot);
2902
+ }
2903
+
2904
+ // LIGHT
2905
+
2906
+ let light = new Three.AmbientLight(0xbfbfbf, 0.9); // soft white light
2907
+ }
2908
+
2909
+ function render() {
2910
+ const delta = clock.getDelta(); // Get time delta for smooth updates
2911
+ if (!isElevationView(state.mode)) cameraControls.update(delta);
2912
+ for (let i = 0; i < lights.length; i++) {
2913
+ lights[i].light.position.set(
2914
+ planData.plan.position.x + lights[i].x,
2915
+ planData.plan.position.y + lights[i].height - 10,
2916
+ planData.plan.position.z - lights[i].y
2917
+ );
2918
+ lights[i].target.position.set(
2919
+ planData.plan.position.x + lights[i].x,
2920
+ planData.plan.position.y,
2921
+ planData.plan.position.z - lights[i].y
2922
+ );
2923
+ }
2924
+
2925
+ camera.updateMatrix();
2926
+ camera.updateMatrixWorld();
2927
+
2928
+ for (let elemID in planData.sceneGraph.LODs) {
2929
+ planData.sceneGraph.LODs[elemID].update(camera);
2930
+ }
2931
+ if (snapBox !== null) {
2932
+ if (snapAnimI >= 15) {
2933
+ if ('x' in targetPoint)
2934
+ snapBox.position.set(
2935
+ targetPoint.x,
2936
+ snapBox.position.y,
2937
+ targetPoint.z
2938
+ );
2939
+ snapFlag = false;
2940
+ t_i++;
2941
+ } else {
2942
+ if (snapAnimI == 0) {
2943
+ targetCRotation =
2944
+ ((((targetRot / 180) * Math.PI - snapBox.rotation.y + Math.PI) *
2945
+ 180) /
2946
+ Math.PI) %
2947
+ 360;
2948
+ if (targetCRotation > 180) targetCRotation -= 360;
2949
+ if (targetCRotation < -180) targetCRotation += 360;
2950
+ targetCRotation = (targetCRotation / 180) * Math.PI;
2951
+ }
2952
+ if (snapAnimI < 10) {
2953
+ snapBox.rotateY(targetCRotation / 10);
2954
+ } else {
2955
+ snapBox.position.set(
2956
+ snapBox.position.clone().x - targetUVec.x / 10,
2957
+ snapBox.position.clone().y - targetUVec.y / 10,
2958
+ snapBox.position.clone().z - targetUVec.z / 10
2959
+ );
2960
+ }
2961
+ snapAnimI++;
2962
+ }
2963
+ }
2964
+
2965
+ if (t_i === 20) {
2966
+ //stop snap after 5s
2967
+ removeSnapBox();
2968
+ }
2969
+
2970
+ // hide hole if wall is not visible
2971
+ let layerID = self.props.state.scene.selectedLayer;
2972
+ let layer = self.props.state.scene.layers.get(layerID);
2973
+ layer.holes.forEach(data => {
2974
+ let line = planData.sceneGraph.layers[layerID].lines[data.line];
2975
+ let hole = planData.sceneGraph.layers[layerID].holes[data.id];
2976
+
2977
+ if (line instanceof Three.Object3D && !line.isMesh) {
2978
+ line = line.children[0].children[0];
2979
+ // index(faces) of the line
2980
+ const indexAttribute = line.geometry.getIndex();
2981
+ const firstFaceIndices = undefined;
2982
+ if (indexAttribute && indexAttribute.length > 0) {
2983
+ firstFaceIndices = [
2984
+ indexAttribute.getX(0),
2985
+ indexAttribute.getX(1),
2986
+ indexAttribute.getX(2)
2987
+ ];
2988
+ }
2989
+
2990
+ if (firstFaceIndices == undefined) return;
2991
+ // normal vector of the line
2992
+ const normalAttribute = line.geometry.attributes.normal;
2993
+ let normal = new Three.Vector3()
2994
+ .fromBufferAttribute(normalAttribute, 0)
2995
+ .clone();
2996
+ normal = normal
2997
+ .applyMatrix4(line.matrixWorld)
2998
+ .sub(new Three.Vector3(0, 0, 0).applyMatrix4(line.matrixWorld))
2999
+ .normalize();
3000
+ let vertices = layer.lines.get(data.line).vertices.toJS();
3001
+ let vertex1 = layer.vertices.get(vertices[0]);
3002
+ let vertex2 = layer.vertices.get(vertices[1]);
3003
+ let cX = (vertex1.x + vertex2.x) / 2;
3004
+ let cY = (vertex1.y + vertex2.y) / 2;
3005
+ let posVec = new Three.Vector3(cX, 150, -cY);
3006
+ posVec = posVec.add(planData.plan.position.clone());
3007
+ let cameraLine = camera.position.clone().sub(posVec);
3008
+ if (hole) {
3009
+ hole.traverse(child => {
3010
+ if (child.isMesh) {
3011
+ child.material.opacity = cameraLine.dot(normal) > 0 ? 1 : 0;
3012
+ child.material.transparent =
3013
+ cameraLine.dot(normal) > 0 ? false : true;
3014
+ child.material.needsUpdate = true;
3015
+ }
3016
+ });
3017
+ }
3018
+ }
3019
+ // /////////////////////////////////////
3020
+ });
3021
+
3022
+ if (scene3D && camera) {
3023
+ if (planData.elevationGroup) {
3024
+ planData.elevationGroup.visible = true;
3025
+ self.renderer.render(scene3D, camera);
3026
+
3027
+ self.renderer.autoClearDepth = false;
3028
+ planData.elevationGroup.visible = false;
3029
+ // console.log('---originalScene:', scene3D)
3030
+ self.renderer.render(scene3D, camera);
3031
+ self.renderer.autoClearDepth = true;
3032
+ } else {
3033
+ self.renderer.render(scene3D, camera);
3034
+ }
3035
+ }
3036
+ self.renderingID = requestAnimationFrame(render);
3037
+
3038
+ if (self.props.downloadFlag) {
3039
+ if (self.state.waitForRender > 0) {
3040
+ self.state.waitForRender++;
3041
+ if (self.state.waitForRender > 2) {
3042
+ self.setState({ isLoading: false, waitForRender: 0 });
3043
+ if (isElevationView(self.props.state.mode)) {
3044
+ setTimeout(() => {
3045
+ self.props.setIsLoadingElevation('front', false);
3046
+ }, 100);
3047
+ }
3048
+ self.renderer.domElement.style.display = 'block';
3049
+ }
3050
+ }
3051
+ }
3052
+ }
3053
+
3054
+ //
3055
+
3056
+ window.planData = planData;
3057
+ this.planData = planData;
3058
+ this.camera = camera;
3059
+ this.cameraControls = cameraControls;
3060
+ this.scene3D = scene3D;
3061
+
3062
+ prepareSnap(layer);
3063
+ }
3064
+
3065
+ componentWillUnmount() {
3066
+ cancelAnimationFrame(this.renderingID);
3067
+
3068
+ if (!isElevationView(this.props.state.mode)) {
3069
+ if (this.cameraControls !== undefined) this.cameraControls.dispose();
3070
+ }
3071
+
3072
+ if (!this.props.downloadFlag) {
3073
+ this.renderer.domElement.removeEventListener(
3074
+ 'mousedown',
3075
+ this.mouseDownEvent
3076
+ );
3077
+ this.renderer.domElement.removeEventListener(
3078
+ 'mouseup',
3079
+ this.mouseUpEvent
3080
+ );
3081
+ }
3082
+
3083
+ disposeScene(this.scene3D);
3084
+ this.scene3D.remove(this.planData.plan);
3085
+ this.scene3D.remove(this.planData.grid);
3086
+
3087
+ this.scene3D = null;
3088
+ this.planData = null;
3089
+ this.camera = null;
3090
+ this.cameraControls = null;
3091
+ this.renderer.renderLists.dispose();
3092
+ }
3093
+
3094
+ componentWillReceiveProps(nextProps) {
3095
+ if (
3096
+ (this.props.downloadFlag &&
3097
+ diff(this.props.state, nextProps.state).toJS().length == 0) ||
3098
+ isEmpty(nextProps.state.scene)
3099
+ )
3100
+ return;
3101
+
3102
+ let { width, height } = nextProps;
3103
+ let selectedLayer = nextProps.state.getIn([
3104
+ 'scene',
3105
+ 'layers',
3106
+ nextProps.state.scene.selectedLayer
3107
+ ]);
3108
+ let ceilHeight = convert(selectedLayer.ceilHeight)
3109
+ .from(selectedLayer.unit)
3110
+ .to(nextProps.state.scene.unit);
3111
+ let actions = {
3112
+ areaActions: this.context.areaActions,
3113
+ holesActions: this.context.holesActions,
3114
+ itemsActions: this.context.itemsActions,
3115
+ sceneActions: this.context.sceneActions,
3116
+ linesActions: this.context.linesActions,
3117
+ projectActions: this.context.projectActions,
3118
+ catalog: this.context.catalog
3119
+ };
3120
+
3121
+ let isLoadingCabinet = nextProps.state.scene.isLoadingCabinet;
3122
+ if (this.state.isLoadingCabinet !== isLoadingCabinet)
3123
+ this.setState({ isLoadingCabinet });
3124
+
3125
+ this.width = width;
3126
+ this.height = height;
3127
+
3128
+ let allLines;
3129
+ let allLineRects;
3130
+ let allItemRect;
3131
+
3132
+ // handle camera setting
3133
+ switch (this.props.state.mode) {
3134
+ case MODE_ELEVATION_VIEW:
3135
+ // when Elevation mode (camera: Orthographic)
3136
+ let cameraRect = handleCamRect(
3137
+ width,
3138
+ height,
3139
+ ceilHeight,
3140
+ this.state.lineLength
3141
+ );
3142
+ // camera size
3143
+ this.camera.left = -cameraRect.width / 2;
3144
+ this.camera.right = cameraRect.width / 2;
3145
+ this.camera.top = cameraRect.height / 2;
3146
+ this.camera.bottom = -cameraRect.height / 2;
3147
+ //camera position
3148
+ this.camera.position.y = ceilHeight / 2;
3149
+ break;
3150
+ case MODE_3D_VIEW:
3151
+ // when 3D mode (camera: Perspective)
3152
+ this.camera.aspect = width / height;
3153
+ break;
3154
+ }
3155
+ this.camera.updateProjectionMatrix();
3156
+
3157
+ let data = nextProps.state.scene;
3158
+ let layer = data.getIn(['layers', data.selectedLayer]);
3159
+ const self = this;
3160
+
3161
+ function implementBacksplash() {
3162
+ if (isElevationView(self.props.state.mode)) return; // apply backsplash when just 3D_mode, not elevation_mode
3163
+ let allItems = GeometryUtils.getAllItemSpecified(
3164
+ nextProps.state.scene,
3165
+ actions.catalog,
3166
+ BASE_CABINET_LAYOUTPOS
3167
+ );
3168
+ let i,
3169
+ items = [];
3170
+ for (i = 0; i < allItems.others.length; i++)
3171
+ items.push(allItems.others[i]);
3172
+ if (allItems.cur) items.push(allItems.cur);
3173
+
3174
+ for (i = 0; i < items.length; i++) {
3175
+ let calcRect = GeometryUtils.getCalcRectFromItem3D(items[i]);
3176
+ let visible = GeometryUtils.isSnappedLine(calcRect, allLineRects);
3177
+ actions.itemsActions.setBacksplashVisible(
3178
+ items[i].itemInfo.id,
3179
+ visible
3180
+ );
3181
+
3182
+ createBacksplash(
3183
+ items[i],
3184
+ nextProps.state.scene.getIn([
3185
+ 'layers',
3186
+ nextProps.state.scene.selectedLayer
3187
+ ]),
3188
+ planData,
3189
+ nextProps.state.scene
3190
+ );
3191
+ }
3192
+ }
3193
+ function implementWarningBox() {
3194
+ let holeItems = GeometryUtils.getHoleItems(layer);
3195
+ let i,
3196
+ items = [];
3197
+ for (i = 0; i < allItemRect.others.length; i++)
3198
+ items.push(allItemRect.others[i]);
3199
+ if (allItemRect.cur) items.push(allItemRect.cur);
3200
+
3201
+ for (i = 0; i < items.length; i++)
3202
+ checkCabinetOverlap(
3203
+ { x: items[i].pos.x, y: items[i].pos.y },
3204
+ items[i],
3205
+ holeItems,
3206
+ planData
3207
+ );
3208
+ }
3209
+
3210
+ let prepareSnapSpec = layer => {
3211
+ allLines = GeometryUtils.getAllLines(layer);
3212
+ allLineRects = GeometryUtils.buildRectFromLines(layer, allLines);
3213
+ allItemRect = GeometryUtils.getAllItemSpecified(
3214
+ this.props.state.scene,
3215
+ actions.catalog,
3216
+ [WALL_CABINET_LAYOUTPOS, TALL_CABINET_LAYOUTPOS]
3217
+ );
3218
+ };
3219
+
3220
+ let layer1 = this.props.state.scene.getIn(['layers', data.selectedLayer]);
3221
+
3222
+ if (this.state.showflag) {
3223
+ prepareSnapSpec(layer);
3224
+ implementBacksplash();
3225
+ implementWarningBox();
3226
+ this.setState({ showflag: false });
3227
+ }
3228
+ if (
3229
+ nextProps.state.scene !== this.props.state.scene ||
3230
+ (nextProps.state.doorStyle &&
3231
+ nextProps.state.doorStyle.get('name') !==
3232
+ this.props.state.doorStyle.get('name'))
3233
+ ) {
3234
+ let changedValues = diff(this.props.state.scene, nextProps.state.scene);
3235
+ prepareSnapSpec(layer);
3236
+ if (
3237
+ nextProps.state.doorStyle &&
3238
+ nextProps.state.doorStyle.get('name') ===
3239
+ this.props.state.doorStyle.get('name')
3240
+ ) {
3241
+ self.setState({ isLoading: true });
3242
+
3243
+ if (self.props.downloadFlag) {
3244
+ self.setState({ waitForRender: 0 });
3245
+ switch (self.props.state.mode) {
3246
+ case MODE_ELEVATION_VIEW:
3247
+ self.props.setIsLoadingElevation('front', true);
3248
+ break;
3249
+ case MODE_3D_VIEW:
3250
+ self.props.setIsLoading3D(true);
3251
+ break;
3252
+ }
3253
+ }
3254
+
3255
+ self.renderer.domElement.style.display = 'none';
3256
+ }
3257
+ if (nextProps.state.scene.showfg == true) {
3258
+ implementBacksplash();
3259
+ implementWarningBox();
3260
+ } else {
3261
+ deleteSpecifiedMeshObjects('TransformBox');
3262
+ }
3263
+ let { toolObj, angleObj } = this.state;
3264
+ var { promise } = updateScene(
3265
+ this.planData,
3266
+ nextProps.state.scene,
3267
+ this.props.state.scene,
3268
+ changedValues.toJS(),
3269
+ actions,
3270
+ this.context.catalog,
3271
+ nextProps.state.mode,
3272
+ toolObj,
3273
+ angleObj,
3274
+ nextProps.state.draggingSupport
3275
+ );
3276
+ self.setState();
3277
+ promise.then(p1Value => {
3278
+ self.setState({ isLoading: false });
3279
+ self.props.downloadFlag && self.setState({ waitForRender: 1 });
3280
+ self.renderer.domElement.style.display = 'block';
3281
+ });
3282
+ if (nextProps.state.getIn(['scene', 'isEndDragging'])) {
3283
+ nextProps.state.setIn(['scene', 'isEndDragging'], false);
3284
+ }
3285
+ }
3286
+ this.renderer.setSize(width, height);
3287
+ }
3288
+
3289
+ render() {
3290
+ const { isLoading, isLoadingCabinet } = this.state;
3291
+ if (isLoading) {
3292
+ if (this.props.downloadFlag) {
3293
+ this.renderer.domElement.style.display = 'none';
3294
+ return (
3295
+ <div
3296
+ style={{
3297
+ alignItems: ' center',
3298
+ width: this.props.width,
3299
+ height: this.props.height,
3300
+ display: 'inline-flex',
3301
+ justifyContent: 'center'
3302
+ }}
3303
+ >
3304
+ <img
3305
+ style={{
3306
+ width: '70px',
3307
+ height: '70px',
3308
+ animation: 'spin 2s linear infinite'
3309
+ }}
3310
+ src={'/assets/img/loading_large.gif'}
3311
+ alt="img"
3312
+ />
3313
+ </div>
3314
+ );
3315
+ } else {
3316
+ document.getElementById('front') &&
3317
+ (document.getElementById('front').style.display = 'none');
3318
+ document.getElementById('error').style.display = 'none';
3319
+ this.renderer.domElement.style.display = 'none';
3320
+ return (
3321
+ <div style={{ textAlign: 'center', width: '100%' }}>
3322
+ <img
3323
+ style={{ animation: 'spin 2s linear infinite', marginTop: `22%` }}
3324
+ src={'/assets/img/loading_large.gif'}
3325
+ alt="img"
3326
+ />
3327
+ </div>
3328
+ );
3329
+ }
3330
+ } else if (isLoadingCabinet) {
3331
+ this.renderer.domElement.style.pointerEvents = 'none';
3332
+ document.getElementById('front') &&
3333
+ (document.getElementById('front').style.display = 'none');
3334
+ this.renderer.domElement.style.opacity = '0.4';
3335
+ return (
3336
+ <div style={{ textAlign: 'center', width: '100%' }}>
3337
+ <img
3338
+ style={{
3339
+ animation: 'spin 2s linear infinite',
3340
+ position: `absolute`,
3341
+ top: `50%`
3342
+ }}
3343
+ src={'/assets/img/loading_large.gif'}
3344
+ alt="img"
3345
+ />
3346
+ </div>
3347
+ );
3348
+ } else {
3349
+ !this.props.downloadFlag &&
3350
+ (document.getElementById('error').style.display = 'block');
3351
+ this.renderer.domElement.style.pointerEvents = 'auto';
3352
+ this.renderer.domElement.style.opacity = '1';
3353
+ !this.props.downloadFlag &&
3354
+ document.getElementById('front') &&
3355
+ (document.getElementById('front').style.display = 'block');
3356
+ return React.createElement('div', { ref: 'canvasWrapper' });
3357
+ }
3358
+ }
3359
+ }
3360
+
3361
+ Scene3DViewer.propTypes = {
3362
+ state: PropTypes.object.isRequired,
3363
+ width: PropTypes.number.isRequired,
3364
+ height: PropTypes.number.isRequired,
3365
+ replaceCabinet: PropTypes.func.isRequired
3366
+ };
3367
+
3368
+ Scene3DViewer.contextTypes = {
3369
+ areaActions: PropTypes.object.isRequired,
3370
+ holesActions: PropTypes.object.isRequired,
3371
+ itemsActions: PropTypes.object.isRequired,
3372
+ linesActions: PropTypes.object.isRequired,
3373
+ sceneActions: PropTypes.object.isRequired,
3374
+ projectActions: PropTypes.object.isRequired,
3375
+ catalog: PropTypes.object
3376
+ };