kitchen-simulator 4.1.6-react-18 → 5.0.0-react.18

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 (662) hide show
  1. package/README.md +3 -0
  2. package/es/AppContext.js +1 -1
  3. package/es/LiteKitchenConfigurator.js +130 -103
  4. package/es/LiteRenderer.js +167 -127
  5. package/es/WorkSpace.js +854 -0
  6. package/es/assets/gltf/door_sliding.bin +0 -0
  7. package/es/assets/img/svg/bottombar/elevation.svg +12 -5
  8. package/es/catalog/catalog.js +21 -5
  9. package/es/catalog/factories/area-factory-3d.js +17 -17
  10. package/es/catalog/holes/window-clear/planner-element.js +2 -2
  11. package/es/catalog/properties/export.js +21 -0
  12. package/es/catalog/properties/property-checkbox.js +68 -0
  13. package/es/catalog/properties/property-color.js +39 -0
  14. package/es/catalog/properties/property-enum.js +50 -0
  15. package/es/catalog/properties/property-hidden.js +19 -0
  16. package/es/catalog/properties/property-lenght-measure.js +96 -0
  17. package/es/catalog/properties/property-length-measure.js +80 -0
  18. package/es/catalog/properties/property-length-measure_hole.js +96 -0
  19. package/es/catalog/properties/property-number.js +48 -0
  20. package/es/catalog/properties/property-read-only.js +26 -0
  21. package/es/catalog/properties/property-string.js +48 -0
  22. package/es/catalog/properties/property-toggle.js +39 -0
  23. package/es/catalog/properties/shared-property-style.js +14 -0
  24. package/es/catalog/utils/exporter.js +24 -11
  25. package/es/catalog/utils/item-loader.js +222 -213
  26. package/es/class/hole.js +0 -2
  27. package/es/class/item.js +89 -70
  28. package/es/class/layer.js +1 -1
  29. package/es/class/line.js +4 -8
  30. package/es/class/project.js +95 -80
  31. package/es/components/content.js +0 -92
  32. package/es/components/export.js +1 -1
  33. package/es/components/style/button.js +106 -0
  34. package/es/components/style/cancel-button.js +21 -0
  35. package/es/components/style/content-container.js +30 -0
  36. package/es/components/style/content-title.js +25 -0
  37. package/es/components/style/delete-button.js +24 -0
  38. package/es/components/style/export.js +28 -2
  39. package/es/components/style/form-block.js +20 -0
  40. package/es/components/style/form-color-input.js +26 -0
  41. package/es/components/style/form-label.js +22 -0
  42. package/es/components/style/form-number-input.js +52 -43
  43. package/es/components/style/form-number-input_2.js +238 -0
  44. package/es/components/style/form-select.js +19 -0
  45. package/es/components/style/form-slider.js +60 -0
  46. package/es/components/style/form-submit-button.js +25 -0
  47. package/es/components/style/form-text-input.js +69 -0
  48. package/es/components/viewer2d/grids/grid-streak.js +1 -1
  49. package/es/components/viewer2d/group.js +6 -10
  50. package/es/components/viewer2d/item.js +75 -272
  51. package/es/components/viewer2d/layer.js +1 -1
  52. package/es/components/viewer2d/line.js +19 -19
  53. package/es/components/viewer2d/ruler.js +5 -3
  54. package/es/components/viewer2d/rulerDist.js +8 -7
  55. package/es/components/viewer2d/rulerX.js +1 -2
  56. package/es/components/viewer2d/scene.js +44 -59
  57. package/es/components/viewer2d/utils.js +2 -2
  58. package/es/components/viewer2d/vertex.js +3 -2
  59. package/es/components/viewer2d/viewer2d.js +100 -131
  60. package/es/components/viewer3d/front3D.js +2 -1
  61. package/es/components/viewer3d/ruler-utils/scene3D.js +1 -1
  62. package/es/components/viewer3d/scene-creator.js +77 -39
  63. package/es/components/viewer3d/viewer3d-first-person.js +115 -119
  64. package/es/components/viewer3d/viewer3d.js +85 -127
  65. package/es/constants.js +7 -2
  66. package/es/index.html.ejs +264 -0
  67. package/es/index.js +589 -61
  68. package/es/models.js +13 -8
  69. package/es/plugins/SVGLoader.js +1414 -0
  70. package/es/plugins/console-debugger.js +34 -0
  71. package/es/plugins/export.js +7 -0
  72. package/es/plugins/keyboard.js +110 -0
  73. package/es/reducers/project-reducer.js +3 -0
  74. package/es/reducers/viewer2d-reducer.js +3 -1
  75. package/es/reducers/viewer3d-reducer.js +3 -1
  76. package/es/utils/geometry.js +77 -119
  77. package/es/utils/helper.js +38 -1
  78. package/es/utils/isolate-event-handler.js +831 -611
  79. package/es/utils/molding.js +457 -11
  80. package/package.json +7 -11
  81. package/es/analytics/ga4.js +0 -188
  82. package/es/analytics/posthog.js +0 -60
  83. package/es/devLiteRenderer.js +0 -542
  84. package/es/mocks/appliancePayload.json +0 -27
  85. package/es/mocks/cabinetPayload.json +0 -1914
  86. package/es/mocks/cabinetPayload2.json +0 -76
  87. package/es/mocks/dataBundle2.json +0 -4
  88. package/es/mocks/distancePayload.json +0 -6
  89. package/es/mocks/doorStylePayload2.json +0 -84
  90. package/es/mocks/furnishingPayload.json +0 -23
  91. package/es/mocks/itemCDSPayload.json +0 -27
  92. package/es/mocks/lightingPayload.json +0 -23
  93. package/es/mocks/mockProps.json +0 -43
  94. package/es/mocks/mockProps2.json +0 -9
  95. package/es/mocks/moldingPayload.json +0 -19
  96. package/es/mocks/projectItemsCatalog.json +0 -133
  97. package/es/mocks/rectangleShape.json +0 -238
  98. package/es/mocks/replaceCabinetPayload.json +0 -81
  99. package/es/mocks/roomShapePayload.json +0 -5
  100. package/es/useAppContext.js +0 -8
  101. package/lib/@history.js +0 -11
  102. package/lib/AppContext.js +0 -11
  103. package/lib/LiteKitchenConfigurator.js +0 -477
  104. package/lib/LiteRenderer.js +0 -330
  105. package/lib/actions/area-actions.js +0 -21
  106. package/lib/actions/export.js +0 -40
  107. package/lib/actions/groups-actions.js +0 -107
  108. package/lib/actions/holes-actions.js +0 -140
  109. package/lib/actions/items-actions.js +0 -367
  110. package/lib/actions/lines-actions.js +0 -98
  111. package/lib/actions/project-actions.js +0 -350
  112. package/lib/actions/scene-actions.js +0 -43
  113. package/lib/actions/vertices-actions.js +0 -35
  114. package/lib/actions/viewer2d-actions.js +0 -73
  115. package/lib/actions/viewer3d-actions.js +0 -32
  116. package/lib/analytics/ga4.js +0 -194
  117. package/lib/analytics/posthog.js +0 -68
  118. package/lib/assets/brown_photostudio_02_1k.hdr +0 -0
  119. package/lib/assets/fonts/Rene Bieder Milliard Black Italic.woff +0 -0
  120. package/lib/assets/fonts/Rene Bieder Milliard Black.woff +0 -0
  121. package/lib/assets/fonts/Rene Bieder Milliard Bold Italic.woff +0 -0
  122. package/lib/assets/fonts/Rene Bieder Milliard Bold.woff +0 -0
  123. package/lib/assets/fonts/Rene Bieder Milliard Book Italic.woff +0 -0
  124. package/lib/assets/fonts/Rene Bieder Milliard Book.woff +0 -0
  125. package/lib/assets/fonts/Rene Bieder Milliard ExtraBold Italic.woff +0 -0
  126. package/lib/assets/fonts/Rene Bieder Milliard ExtraBold.woff +0 -0
  127. package/lib/assets/fonts/Rene Bieder Milliard ExtraLight Italic.woff +0 -0
  128. package/lib/assets/fonts/Rene Bieder Milliard ExtraLight.woff +0 -0
  129. package/lib/assets/fonts/Rene Bieder Milliard Hairline Italic.woff +0 -0
  130. package/lib/assets/fonts/Rene Bieder Milliard Hairline.woff +0 -0
  131. package/lib/assets/fonts/Rene Bieder Milliard Heavy Italic.woff +0 -0
  132. package/lib/assets/fonts/Rene Bieder Milliard Heavy.woff +0 -0
  133. package/lib/assets/fonts/Rene Bieder Milliard Light Italic.woff +0 -0
  134. package/lib/assets/fonts/Rene Bieder Milliard Light.woff +0 -0
  135. package/lib/assets/fonts/Rene Bieder Milliard Medium Italic.woff +0 -0
  136. package/lib/assets/fonts/Rene Bieder Milliard Medium.woff +0 -0
  137. package/lib/assets/fonts/Rene Bieder Milliard SemiBold Italic.woff +0 -0
  138. package/lib/assets/fonts/Rene Bieder Milliard SemiBold.woff +0 -0
  139. package/lib/assets/fonts/Rene Bieder Milliard Thin Italic.woff +0 -0
  140. package/lib/assets/fonts/Rene Bieder Milliard Thin.woff +0 -0
  141. package/lib/assets/fonts/style.css +0 -177
  142. package/lib/assets/gltf/door_closet.bin +0 -0
  143. package/lib/assets/gltf/door_closet.fbx +0 -0
  144. package/lib/assets/gltf/door_closet.gltf +0 -1
  145. package/lib/assets/gltf/door_exterior.bin +0 -0
  146. package/lib/assets/gltf/door_exterior.fbx +0 -0
  147. package/lib/assets/gltf/door_exterior.gltf +0 -1
  148. package/lib/assets/gltf/door_interior.bin +0 -0
  149. package/lib/assets/gltf/door_interior.fbx +0 -0
  150. package/lib/assets/gltf/door_interior.gltf +0 -1
  151. package/lib/assets/gltf/door_sliding.fbx +0 -0
  152. package/lib/assets/gltf/door_sliding.gltf +0 -1
  153. package/lib/assets/gltf/doorway_framed.bin +0 -0
  154. package/lib/assets/gltf/doorway_framed.fbx +0 -0
  155. package/lib/assets/gltf/doorway_framed.gltf +0 -1
  156. package/lib/assets/gltf/window_clear.bin +0 -0
  157. package/lib/assets/gltf/window_clear.fbx +0 -0
  158. package/lib/assets/gltf/window_clear.gltf +0 -1
  159. package/lib/assets/gltf/window_cross.bin +0 -0
  160. package/lib/assets/gltf/window_cross.fbx +0 -0
  161. package/lib/assets/gltf/window_cross.gltf +0 -1
  162. package/lib/assets/gltf/window_double_hung.bin +0 -0
  163. package/lib/assets/gltf/window_double_hung.fbx +0 -0
  164. package/lib/assets/gltf/window_double_hung.gltf +0 -1
  165. package/lib/assets/gltf/window_vertical.bin +0 -0
  166. package/lib/assets/gltf/window_vertical.fbx +0 -0
  167. package/lib/assets/gltf/window_vertical.gltf +0 -1
  168. package/lib/assets/img/TKC_thumbnail.png +0 -0
  169. package/lib/assets/img/Toggle.png +0 -0
  170. package/lib/assets/img/loading/loading.gif +0 -0
  171. package/lib/assets/img/loading/loading_1.svg +0 -11
  172. package/lib/assets/img/loading_large.gif +0 -0
  173. package/lib/assets/img/png/door/closet.png +0 -0
  174. package/lib/assets/img/png/door/doorwaysframed.png +0 -0
  175. package/lib/assets/img/png/door/doorwaysframeles.png +0 -0
  176. package/lib/assets/img/png/door/doorwaysframeless.png +0 -0
  177. package/lib/assets/img/png/door/exterior.png +0 -0
  178. package/lib/assets/img/png/door/interior.png +0 -0
  179. package/lib/assets/img/png/door/sliding.png +0 -0
  180. package/lib/assets/img/png/helper/outcome.png +0 -0
  181. package/lib/assets/img/png/helper/video_preview_3d.png +0 -0
  182. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  183. package/lib/assets/img/project_img.png +0 -0
  184. package/lib/assets/img/rta/rta_logo_box_blue.jpg +0 -0
  185. package/lib/assets/img/rta/rta_logo_box_blue_ico.jpg +0 -0
  186. package/lib/assets/img/rta/rta_logo_box_blue_ico.svg +0 -55
  187. package/lib/assets/img/rta/rta_logo_box_darkGray.jpg +0 -0
  188. package/lib/assets/img/rta/rta_logo_box_lightblue.png +0 -0
  189. package/lib/assets/img/rta/rta_logo_box_lightmaroon.png +0 -0
  190. package/lib/assets/img/rta/rta_logo_box_maroon.png +0 -0
  191. package/lib/assets/img/rta/rta_logo_box_white.png +0 -0
  192. package/lib/assets/img/rta_menu.png +0 -0
  193. package/lib/assets/img/step2.jpg +0 -0
  194. package/lib/assets/img/step3.jpg +0 -0
  195. package/lib/assets/img/step4.jpg +0 -0
  196. package/lib/assets/img/step5.jpg +0 -0
  197. package/lib/assets/img/step6.jpg +0 -0
  198. package/lib/assets/img/step7.jpg +0 -0
  199. package/lib/assets/img/step8.jpg +0 -0
  200. package/lib/assets/img/svg/2d_delete_object.svg +0 -33
  201. package/lib/assets/img/svg/2d_delete_object1.svg +0 -33
  202. package/lib/assets/img/svg/2d_lock_object.svg +0 -33
  203. package/lib/assets/img/svg/3d_item_move.svg +0 -106
  204. package/lib/assets/img/svg/3d_item_rotation.svg +0 -76
  205. package/lib/assets/img/svg/3d_item_warning_edit.svg +0 -77
  206. package/lib/assets/img/svg/3d_item_warning_info.svg +0 -81
  207. package/lib/assets/img/svg/accessories.svg +0 -4
  208. package/lib/assets/img/svg/angle_icon.svg +0 -39
  209. package/lib/assets/img/svg/blank_div.svg +0 -14
  210. package/lib/assets/img/svg/bottombar/2d3d_button.svg +0 -3
  211. package/lib/assets/img/svg/bottombar/2d3d_button_active.svg +0 -3
  212. package/lib/assets/img/svg/bottombar/2d3d_toggle.svg +0 -4
  213. package/lib/assets/img/svg/bottombar/2d3d_toggle_active.svg +0 -4
  214. package/lib/assets/img/svg/bottombar/arrow-down.svg +0 -3
  215. package/lib/assets/img/svg/bottombar/arrow-left.svg +0 -3
  216. package/lib/assets/img/svg/bottombar/arrow-minus.svg +0 -3
  217. package/lib/assets/img/svg/bottombar/arrow-plus.svg +0 -11
  218. package/lib/assets/img/svg/bottombar/arrow-right.svg +0 -3
  219. package/lib/assets/img/svg/bottombar/arrow-up.svg +0 -3
  220. package/lib/assets/img/svg/bottombar/collapse.svg +0 -3
  221. package/lib/assets/img/svg/bottombar/elevation-back.svg +0 -6
  222. package/lib/assets/img/svg/bottombar/elevation-front.svg +0 -6
  223. package/lib/assets/img/svg/bottombar/elevation-left.svg +0 -6
  224. package/lib/assets/img/svg/bottombar/elevation-right.svg +0 -7
  225. package/lib/assets/img/svg/bottombar/elevation.svg +0 -6
  226. package/lib/assets/img/svg/bottombar/expand.svg +0 -3
  227. package/lib/assets/img/svg/bottombar/help.svg +0 -72
  228. package/lib/assets/img/svg/bottombar/incm_toggle.svg +0 -39
  229. package/lib/assets/img/svg/bottombar/pan_1.svg +0 -57
  230. package/lib/assets/img/svg/bottombar/pan_2.svg +0 -27
  231. package/lib/assets/img/svg/bottombar/pan_3.svg +0 -27
  232. package/lib/assets/img/svg/bottombar/pan_4.svg +0 -27
  233. package/lib/assets/img/svg/bottombar/pan_5.svg +0 -27
  234. package/lib/assets/img/svg/bottombar/settings.svg +0 -23
  235. package/lib/assets/img/svg/bottombar/spin-down.svg +0 -76
  236. package/lib/assets/img/svg/bottombar/spin-left.svg +0 -75
  237. package/lib/assets/img/svg/bottombar/spin-right.svg +0 -75
  238. package/lib/assets/img/svg/bottombar/spin-up.svg +0 -76
  239. package/lib/assets/img/svg/bottombar/spin_1.svg +0 -48
  240. package/lib/assets/img/svg/bottombar/spin_2.svg +0 -31
  241. package/lib/assets/img/svg/bottombar/spin_3.svg +0 -31
  242. package/lib/assets/img/svg/bottombar/spin_4.svg +0 -31
  243. package/lib/assets/img/svg/bottombar/spin_5.svg +0 -31
  244. package/lib/assets/img/svg/bottombar/zoomin.svg +0 -29
  245. package/lib/assets/img/svg/bottombar/zoomout.svg +0 -26
  246. package/lib/assets/img/svg/check.svg +0 -10
  247. package/lib/assets/img/svg/close.svg +0 -11
  248. package/lib/assets/img/svg/color/Black.svg +0 -3
  249. package/lib/assets/img/svg/color/Blue.svg +0 -3
  250. package/lib/assets/img/svg/color/Brown.svg +0 -9
  251. package/lib/assets/img/svg/color/Cream.svg +0 -3
  252. package/lib/assets/img/svg/color/Dark.svg +0 -9
  253. package/lib/assets/img/svg/color/Gray.svg +0 -3
  254. package/lib/assets/img/svg/color/Green.svg +0 -3
  255. package/lib/assets/img/svg/color/Light.svg +0 -9
  256. package/lib/assets/img/svg/color/Medium.svg +0 -9
  257. package/lib/assets/img/svg/color/Unfinished.svg +0 -9
  258. package/lib/assets/img/svg/color/White.svg +0 -3
  259. package/lib/assets/img/svg/color/White.svg.bak +0 -3
  260. package/lib/assets/img/svg/color/stone2.jpg +0 -0
  261. package/lib/assets/img/svg/color/wood2.jpg +0 -0
  262. package/lib/assets/img/svg/copy.svg +0 -11
  263. package/lib/assets/img/svg/delete.svg +0 -3
  264. package/lib/assets/img/svg/detail.svg +0 -77
  265. package/lib/assets/img/svg/disclaimer/background.svg +0 -758
  266. package/lib/assets/img/svg/disclaimer/logo-dots.svg +0 -11
  267. package/lib/assets/img/svg/door/Closet.svg +0 -11
  268. package/lib/assets/img/svg/door/Exterior.svg +0 -5
  269. package/lib/assets/img/svg/door/Framed_dorway.svg +0 -5
  270. package/lib/assets/img/svg/door/Frameless_dorway.svg +0 -5
  271. package/lib/assets/img/svg/door/Interior.svg +0 -7
  272. package/lib/assets/img/svg/door/Sliding.svg +0 -5
  273. package/lib/assets/img/svg/doors_closet.svg +0 -47
  274. package/lib/assets/img/svg/doors_exterior.svg +0 -25
  275. package/lib/assets/img/svg/doors_interior.svg +0 -29
  276. package/lib/assets/img/svg/doors_patio.svg +0 -26
  277. package/lib/assets/img/svg/duplicate.svg +0 -11
  278. package/lib/assets/img/svg/duplicate_object_left.svg +0 -32
  279. package/lib/assets/img/svg/duplicate_object_right.svg +0 -32
  280. package/lib/assets/img/svg/filtersActive.svg +0 -19
  281. package/lib/assets/img/svg/firstsetting/L.svg +0 -3
  282. package/lib/assets/img/svg/firstsetting/L2.svg +0 -3
  283. package/lib/assets/img/svg/firstsetting/Open.svg +0 -3
  284. package/lib/assets/img/svg/firstsetting/Square.svg +0 -3
  285. package/lib/assets/img/svg/firstsetting/bar-active.svg +0 -9
  286. package/lib/assets/img/svg/firstsetting/bar-normal.svg +0 -3
  287. package/lib/assets/img/svg/firstsetting/bullet-current.svg +0 -3
  288. package/lib/assets/img/svg/firstsetting/bullet-done.svg +0 -3
  289. package/lib/assets/img/svg/firstsetting/bullet-not-done.svg +0 -3
  290. package/lib/assets/img/svg/firstsetting/check-active.svg +0 -3
  291. package/lib/assets/img/svg/firstsetting/check-normal.svg +0 -3
  292. package/lib/assets/img/svg/firstsetting/pencil.svg +0 -11
  293. package/lib/assets/img/svg/green_checkmark.svg +0 -27
  294. package/lib/assets/img/svg/headerbar/assist.svg +0 -3
  295. package/lib/assets/img/svg/headerbar/cart.svg +0 -3
  296. package/lib/assets/img/svg/headerbar/check.svg +0 -10
  297. package/lib/assets/img/svg/headerbar/consult_designer.svg +0 -45
  298. package/lib/assets/img/svg/headerbar/edit_name.svg +0 -26
  299. package/lib/assets/img/svg/headerbar/file-dollar.svg +0 -13
  300. package/lib/assets/img/svg/headerbar/hamburger_menu.svg +0 -32
  301. package/lib/assets/img/svg/headerbar/plus.svg +0 -11
  302. package/lib/assets/img/svg/headerbar/review_quote.svg +0 -44
  303. package/lib/assets/img/svg/headerbar/ruler-measure.svg +0 -11
  304. package/lib/assets/img/svg/headerbar/save.svg +0 -3
  305. package/lib/assets/img/svg/headerbar/setting.svg +0 -75
  306. package/lib/assets/img/svg/help/check.svg +0 -10
  307. package/lib/assets/img/svg/help/search.svg +0 -76
  308. package/lib/assets/img/svg/intro/1-start-with-floorplan-whole.svg +0 -27
  309. package/lib/assets/img/svg/intro/1-start-with-floorplan.svg +0 -26
  310. package/lib/assets/img/svg/intro/2-start-from-scratch-whole.svg +0 -28
  311. package/lib/assets/img/svg/intro/2-start-from-scratch.svg +0 -27
  312. package/lib/assets/img/svg/intro/3-retrieve-project-whole.svg +0 -19
  313. package/lib/assets/img/svg/intro/3-retrieve-project.svg +0 -18
  314. package/lib/assets/img/svg/invert.svg +0 -127
  315. package/lib/assets/img/svg/lefttoolbar/appliance-active.svg +0 -13
  316. package/lib/assets/img/svg/lefttoolbar/appliance.svg +0 -13
  317. package/lib/assets/img/svg/lefttoolbar/cabinet-active.svg +0 -10
  318. package/lib/assets/img/svg/lefttoolbar/cabinet-category.svg +0 -3
  319. package/lib/assets/img/svg/lefttoolbar/cabinet-one.svg +0 -3
  320. package/lib/assets/img/svg/lefttoolbar/cabinet.svg +0 -10
  321. package/lib/assets/img/svg/lefttoolbar/disigner_assistance.svg +0 -89
  322. package/lib/assets/img/svg/lefttoolbar/door-style-active.svg +0 -20
  323. package/lib/assets/img/svg/lefttoolbar/door-style.svg +0 -20
  324. package/lib/assets/img/svg/lefttoolbar/door.svg +0 -12
  325. package/lib/assets/img/svg/lefttoolbar/error_icon.svg +0 -81
  326. package/lib/assets/img/svg/lefttoolbar/finishing-active.svg +0 -13
  327. package/lib/assets/img/svg/lefttoolbar/finishing.svg +0 -13
  328. package/lib/assets/img/svg/lefttoolbar/reviewforquote-active.svg +0 -86
  329. package/lib/assets/img/svg/lefttoolbar/reviewforquote.svg +0 -12
  330. package/lib/assets/img/svg/lefttoolbar/room-shape-L.svg +0 -3
  331. package/lib/assets/img/svg/lefttoolbar/room-shape-active.svg +0 -18
  332. package/lib/assets/img/svg/lefttoolbar/room-shape-custom.svg +0 -12
  333. package/lib/assets/img/svg/lefttoolbar/room-shape-irregular.svg +0 -3
  334. package/lib/assets/img/svg/lefttoolbar/room-shape-open.svg +0 -3
  335. package/lib/assets/img/svg/lefttoolbar/room-shape-square.svg +0 -3
  336. package/lib/assets/img/svg/lefttoolbar/room-shape.svg +0 -18
  337. package/lib/assets/img/svg/lefttoolbar/search.svg +0 -76
  338. package/lib/assets/img/svg/lefttoolbar/view_more.svg +0 -86
  339. package/lib/assets/img/svg/lefttoolbar/warning_icon.svg +0 -81
  340. package/lib/assets/img/svg/lefttoolbar/window.svg +0 -12
  341. package/lib/assets/img/svg/logo.svg +0 -11
  342. package/lib/assets/img/svg/logo_with_text.svg +0 -25
  343. package/lib/assets/img/svg/menubar/login.svg +0 -84
  344. package/lib/assets/img/svg/menubar/my_projects.svg +0 -85
  345. package/lib/assets/img/svg/menubar/new_project.svg +0 -110
  346. package/lib/assets/img/svg/menubar/save_project.svg +0 -84
  347. package/lib/assets/img/svg/options.svg +0 -3
  348. package/lib/assets/img/svg/positioning.svg +0 -3
  349. package/lib/assets/img/svg/rotate.png +0 -0
  350. package/lib/assets/img/svg/rotate.svg +0 -17
  351. package/lib/assets/img/svg/rotate_object_clockwise.svg +0 -26
  352. package/lib/assets/img/svg/rotate_object_counterclockwise.svg +0 -26
  353. package/lib/assets/img/svg/toggleFilters.svg +0 -19
  354. package/lib/assets/img/svg/toolbar/add_appliances_active.svg +0 -64
  355. package/lib/assets/img/svg/toolbar/add_appliances_inactive.svg +0 -52
  356. package/lib/assets/img/svg/toolbar/add_button.svg +0 -36
  357. package/lib/assets/img/svg/toolbar/add_cabinets_active.svg +0 -59
  358. package/lib/assets/img/svg/toolbar/add_cabinets_inactive.svg +0 -49
  359. package/lib/assets/img/svg/toolbar/add_items_doors.svg +0 -25
  360. package/lib/assets/img/svg/toolbar/add_items_doorways.svg +0 -24
  361. package/lib/assets/img/svg/toolbar/add_items_refrigerator.svg +0 -32
  362. package/lib/assets/img/svg/toolbar/add_items_windows.svg +0 -28
  363. package/lib/assets/img/svg/toolbar/apply_button.svg +0 -38
  364. package/lib/assets/img/svg/toolbar/arrow-plus.svg +0 -11
  365. package/lib/assets/img/svg/toolbar/backsplash.svg +0 -8
  366. package/lib/assets/img/svg/toolbar/cancel_button.svg +0 -37
  367. package/lib/assets/img/svg/toolbar/consult_a_designer_button.svg +0 -47
  368. package/lib/assets/img/svg/toolbar/countertop.svg +0 -7
  369. package/lib/assets/img/svg/toolbar/dcm.png +0 -0
  370. package/lib/assets/img/svg/toolbar/dcm_off.svg +0 -12
  371. package/lib/assets/img/svg/toolbar/dcm_on.svg +0 -474
  372. package/lib/assets/img/svg/toolbar/delete_button.svg +0 -37
  373. package/lib/assets/img/svg/toolbar/download.svg +0 -77
  374. package/lib/assets/img/svg/toolbar/draw_custom_floor.svg +0 -31
  375. package/lib/assets/img/svg/toolbar/edit_button.svg +0 -75
  376. package/lib/assets/img/svg/toolbar/email_quote_button.svg +0 -44
  377. package/lib/assets/img/svg/toolbar/fbm.png +0 -0
  378. package/lib/assets/img/svg/toolbar/finishing_touches_active.svg +0 -54
  379. package/lib/assets/img/svg/toolbar/finishing_touches_inactive.svg +0 -42
  380. package/lib/assets/img/svg/toolbar/floorstyle.svg +0 -9
  381. package/lib/assets/img/svg/toolbar/fmb.png +0 -0
  382. package/lib/assets/img/svg/toolbar/fmb_off.svg +0 -12
  383. package/lib/assets/img/svg/toolbar/fmb_on.svg +0 -489
  384. package/lib/assets/img/svg/toolbar/furnishings_icon.svg +0 -6
  385. package/lib/assets/img/svg/toolbar/get_started_button.svg +0 -41
  386. package/lib/assets/img/svg/toolbar/handles.svg +0 -5
  387. package/lib/assets/img/svg/toolbar/lighting.svg +0 -7
  388. package/lib/assets/img/svg/toolbar/lrm.png +0 -0
  389. package/lib/assets/img/svg/toolbar/lrm_off.svg +0 -12
  390. package/lib/assets/img/svg/toolbar/lrm_on.svg +0 -470
  391. package/lib/assets/img/svg/toolbar/make_floorplan_active.svg +0 -66
  392. package/lib/assets/img/svg/toolbar/make_floorplan_inactive.svg +0 -52
  393. package/lib/assets/img/svg/toolbar/predefined_room_l_shaped.svg +0 -20
  394. package/lib/assets/img/svg/toolbar/predefined_room_layout.svg +0 -20
  395. package/lib/assets/img/svg/toolbar/predefined_room_long_narrow.svg +0 -20
  396. package/lib/assets/img/svg/toolbar/predefined_room_open_l_shape.svg +0 -20
  397. package/lib/assets/img/svg/toolbar/predefined_room_open_pentagon.svg +0 -20
  398. package/lib/assets/img/svg/toolbar/predefined_room_open_rectangle.svg +0 -20
  399. package/lib/assets/img/svg/toolbar/predefined_room_open_rectangle_2.svg +0 -20
  400. package/lib/assets/img/svg/toolbar/predefined_room_pentagon.svg +0 -20
  401. package/lib/assets/img/svg/toolbar/predefined_room_rectangle.svg +0 -20
  402. package/lib/assets/img/svg/toolbar/predefined_room_rectangle_with_alcove.svg +0 -20
  403. package/lib/assets/img/svg/toolbar/redo_button.svg +0 -75
  404. package/lib/assets/img/svg/toolbar/redo_button1.svg +0 -75
  405. package/lib/assets/img/svg/toolbar/review_quote_active.svg +0 -14
  406. package/lib/assets/img/svg/toolbar/review_quote_inactive.svg +0 -44
  407. package/lib/assets/img/svg/toolbar/save_project_button.svg +0 -44
  408. package/lib/assets/img/svg/toolbar/select_doorstyle_active.svg +0 -67
  409. package/lib/assets/img/svg/toolbar/select_doorstyle_inactive.svg +0 -57
  410. package/lib/assets/img/svg/toolbar/shopping-cart.svg +0 -13
  411. package/lib/assets/img/svg/toolbar/style_change_button.svg +0 -47
  412. package/lib/assets/img/svg/toolbar/take_picture.svg +0 -75
  413. package/lib/assets/img/svg/toolbar/undo_button.svg +0 -76
  414. package/lib/assets/img/svg/toolbar/undo_button1.svg +0 -76
  415. package/lib/assets/img/svg/toolbar/use_button.svg +0 -37
  416. package/lib/assets/img/svg/toolbar/wall_color_icon.svg +0 -6
  417. package/lib/assets/img/svg/topbar/edit_active.svg +0 -10
  418. package/lib/assets/img/svg/topbar/edit_inactive.svg +0 -10
  419. package/lib/assets/img/svg/topbar/redo_active.svg +0 -42
  420. package/lib/assets/img/svg/topbar/redo_inactive.svg +0 -23
  421. package/lib/assets/img/svg/topbar/select_all_active.svg +0 -50
  422. package/lib/assets/img/svg/topbar/select_all_inactive.svg +0 -32
  423. package/lib/assets/img/svg/topbar/take_picture_active.svg +0 -51
  424. package/lib/assets/img/svg/topbar/take_picture_inactive.svg +0 -26
  425. package/lib/assets/img/svg/topbar/undo_active.svg +0 -42
  426. package/lib/assets/img/svg/topbar/undo_inactive.svg +0 -23
  427. package/lib/assets/img/svg/warning_info_2d.svg +0 -81
  428. package/lib/assets/img/svg/window/Clear.svg +0 -3
  429. package/lib/assets/img/svg/window/Cross.svg +0 -5
  430. package/lib/assets/img/svg/window/Double_hung.svg +0 -4
  431. package/lib/assets/img/svg/window/Vertical.svg +0 -4
  432. package/lib/assets/img/svg/windows_clear.svg +0 -23
  433. package/lib/assets/img/svg/windows_cross.svg +0 -28
  434. package/lib/assets/img/svg/windows_double_hung.svg +0 -24
  435. package/lib/assets/img/svg/windows_vertical.svg +0 -24
  436. package/lib/assets/img/svg/wizardstep/Custom.svg +0 -3
  437. package/lib/assets/img/svg/wizardstep/Dashed_line.svg +0 -3
  438. package/lib/assets/img/svg/wizardstep/L.svg +0 -3
  439. package/lib/assets/img/svg/wizardstep/L2.svg +0 -3
  440. package/lib/assets/img/svg/wizardstep/Open.svg +0 -3
  441. package/lib/assets/img/svg/wizardstep/Square.svg +0 -3
  442. package/lib/assets/img/svg/wizardstep/bar-active.svg +0 -9
  443. package/lib/assets/img/svg/wizardstep/bar-normal.svg +0 -3
  444. package/lib/assets/img/svg/wizardstep/bullet-current.svg +0 -3
  445. package/lib/assets/img/svg/wizardstep/bullet-done.svg +0 -3
  446. package/lib/assets/img/svg/wizardstep/bullet-not-done.svg +0 -3
  447. package/lib/assets/img/svg/wizardstep/check-active.svg +0 -3
  448. package/lib/assets/img/svg/wizardstep/check-normal.svg +0 -3
  449. package/lib/assets/img/svg/wizardstep/detail_view.svg +0 -87
  450. package/lib/assets/img/svg/wizardstep/pencil.svg +0 -11
  451. package/lib/assets/img/svg/wizardstep/tile_view.svg +0 -95
  452. package/lib/assets/img/texture/glass.jpg +0 -0
  453. package/lib/assets/img/texture/steel.jpg +0 -0
  454. package/lib/assets/img/texture/white1px.jpg +0 -0
  455. package/lib/assets/img/texture/wood.jpg +0 -0
  456. package/lib/assets/model/DCM.bin +0 -0
  457. package/lib/assets/model/DCM.fbx +0 -0
  458. package/lib/assets/model/DCM.gltf +0 -1
  459. package/lib/assets/model/FBM.bin +0 -0
  460. package/lib/assets/model/FBM.fbx +0 -0
  461. package/lib/assets/model/FBM.gltf +0 -1
  462. package/lib/assets/model/LRM.bin +0 -0
  463. package/lib/assets/model/LRM.fbx +0 -0
  464. package/lib/assets/model/LRM.gltf +0 -1
  465. package/lib/assets/rtastore_logo.png +0 -0
  466. package/lib/catalog/areas/area/planner-element.js +0 -53
  467. package/lib/catalog/areas/area/textures/ceramic-tile.jpg +0 -0
  468. package/lib/catalog/areas/area/textures/grass.jpg +0 -0
  469. package/lib/catalog/areas/area/textures/parquet.jpg +0 -0
  470. package/lib/catalog/areas/area/textures/strand-porcelain.jpg +0 -0
  471. package/lib/catalog/areas/area/textures/tile1.jpg +0 -0
  472. package/lib/catalog/back.png +0 -0
  473. package/lib/catalog/catalog.js +0 -256
  474. package/lib/catalog/doors.png +0 -0
  475. package/lib/catalog/doorways.png +0 -0
  476. package/lib/catalog/envMap/nx.hdr +0 -0
  477. package/lib/catalog/envMap/ny.hdr +0 -0
  478. package/lib/catalog/envMap/nz.hdr +0 -0
  479. package/lib/catalog/envMap/px.hdr +0 -0
  480. package/lib/catalog/envMap/py.hdr +0 -0
  481. package/lib/catalog/envMap/pz.hdr +0 -0
  482. package/lib/catalog/export.js +0 -1
  483. package/lib/catalog/factories/area-factory-3d.js +0 -191
  484. package/lib/catalog/factories/area-factory.js +0 -88
  485. package/lib/catalog/factories/export.js +0 -25
  486. package/lib/catalog/factories/wall-factory-3d.js +0 -212
  487. package/lib/catalog/factories/wall-factory.js +0 -279
  488. package/lib/catalog/holes/door-closet/planner-element.js +0 -232
  489. package/lib/catalog/holes/door-double/door_double.png +0 -0
  490. package/lib/catalog/holes/door-double/planner-element.js +0 -325
  491. package/lib/catalog/holes/door-exterior/planner-element.js +0 -225
  492. package/lib/catalog/holes/door-interior/planner-element.js +0 -237
  493. package/lib/catalog/holes/door-panic/panicDoor.png +0 -0
  494. package/lib/catalog/holes/door-panic/planner-element.js +0 -513
  495. package/lib/catalog/holes/door-panic-double/panicDoorDouble.png +0 -0
  496. package/lib/catalog/holes/door-panic-double/planner-element.js +0 -473
  497. package/lib/catalog/holes/door-sliding/planner-element.js +0 -235
  498. package/lib/catalog/holes/doorway-framed/planner-element.js +0 -155
  499. package/lib/catalog/holes/doorway-frameless/planner-element.js +0 -114
  500. package/lib/catalog/holes/export.js +0 -97
  501. package/lib/catalog/holes/gate/gate.jpg +0 -0
  502. package/lib/catalog/holes/window-clear/planner-element.js +0 -176
  503. package/lib/catalog/holes/window-clear/texture.png +0 -0
  504. package/lib/catalog/holes/window-cross/planner-element.js +0 -175
  505. package/lib/catalog/holes/window-cross/texture.png +0 -0
  506. package/lib/catalog/holes/window-double-hung/planner-element.js +0 -313
  507. package/lib/catalog/holes/window-double-hung/texture.png +0 -0
  508. package/lib/catalog/holes/window-vertical/planner-element.js +0 -286
  509. package/lib/catalog/holes/window-vertical/texture.png +0 -0
  510. package/lib/catalog/lines/wall/planner-element.js +0 -87
  511. package/lib/catalog/lines/wall/textures/bricks-normal.jpg +0 -0
  512. package/lib/catalog/lines/wall/textures/bricks-normal2.jpg +0 -0
  513. package/lib/catalog/lines/wall/textures/bricks.jpg +0 -0
  514. package/lib/catalog/lines/wall/textures/bricks2.jpg +0 -0
  515. package/lib/catalog/lines/wall/textures/bricks3.jpg +0 -0
  516. package/lib/catalog/lines/wall/textures/morden-normal.jpg +0 -0
  517. package/lib/catalog/lines/wall/textures/morden.jpg +0 -0
  518. package/lib/catalog/lines/wall/textures/painted-normal.jpg +0 -0
  519. package/lib/catalog/lines/wall/textures/painted.jpg +0 -0
  520. package/lib/catalog/lines/wall/textures/plaster-normal.jpg +0 -0
  521. package/lib/catalog/lines/wall/textures/plaster.jpg +0 -0
  522. package/lib/catalog/lines/wall/wall.png +0 -0
  523. package/lib/catalog/molding/molding-dcm/planner-element.js +0 -33
  524. package/lib/catalog/molding/molding-dcm/texture.png +0 -0
  525. package/lib/catalog/molding/molding-fbm/planner-element.js +0 -33
  526. package/lib/catalog/molding/molding-fbm/texture.png +0 -0
  527. package/lib/catalog/molding/molding-lrm/planner-element.js +0 -33
  528. package/lib/catalog/molding/molding-lrm/texture.png +0 -0
  529. package/lib/catalog/utils/FuseUtils.js +0 -87
  530. package/lib/catalog/utils/exporter.js +0 -156
  531. package/lib/catalog/utils/geom-utils.js +0 -205
  532. package/lib/catalog/utils/item-loader.js +0 -1613
  533. package/lib/catalog/utils/load-obj.js +0 -99
  534. package/lib/catalog/utils/mtl-loader.js +0 -366
  535. package/lib/catalog/utils/obj-loader.js +0 -486
  536. package/lib/catalog/windows.png +0 -0
  537. package/lib/class/FuseUtils.js +0 -87
  538. package/lib/class/area.js +0 -148
  539. package/lib/class/export.js +0 -96
  540. package/lib/class/group.js +0 -438
  541. package/lib/class/guide.js +0 -64
  542. package/lib/class/hole.js +0 -932
  543. package/lib/class/item.js +0 -1866
  544. package/lib/class/layer.js +0 -670
  545. package/lib/class/line.js +0 -1242
  546. package/lib/class/project.js +0 -931
  547. package/lib/class/vertex.js +0 -205
  548. package/lib/components/content.js +0 -238
  549. package/lib/components/export.js +0 -27
  550. package/lib/components/style/export.js +0 -17
  551. package/lib/components/style/form-number-input.js +0 -192
  552. package/lib/components/viewer2d/area.js +0 -89
  553. package/lib/components/viewer2d/export.js +0 -121
  554. package/lib/components/viewer2d/grids/grid-horizontal-streak.js +0 -44
  555. package/lib/components/viewer2d/grids/grid-streak.js +0 -44
  556. package/lib/components/viewer2d/grids/grid-vertical-streak.js +0 -44
  557. package/lib/components/viewer2d/grids/grids.js +0 -40
  558. package/lib/components/viewer2d/group.js +0 -62
  559. package/lib/components/viewer2d/item.js +0 -449
  560. package/lib/components/viewer2d/layer.js +0 -172
  561. package/lib/components/viewer2d/line.js +0 -1007
  562. package/lib/components/viewer2d/ruler.js +0 -87
  563. package/lib/components/viewer2d/rulerDist.js +0 -123
  564. package/lib/components/viewer2d/rulerX.js +0 -152
  565. package/lib/components/viewer2d/rulerY.js +0 -153
  566. package/lib/components/viewer2d/scene.js +0 -132
  567. package/lib/components/viewer2d/snap.js +0 -84
  568. package/lib/components/viewer2d/state.js +0 -83
  569. package/lib/components/viewer2d/utils.js +0 -207
  570. package/lib/components/viewer2d/vertex.js +0 -75
  571. package/lib/components/viewer2d/viewer2d.js +0 -1514
  572. package/lib/components/viewer3d/camera-controls-module/camera-controls.module.js +0 -2591
  573. package/lib/components/viewer3d/dcm.js +0 -408
  574. package/lib/components/viewer3d/fbm.js +0 -421
  575. package/lib/components/viewer3d/front3D.js +0 -71
  576. package/lib/components/viewer3d/grid-creator.js +0 -35
  577. package/lib/components/viewer3d/grids/grid-horizontal-streak.js +0 -45
  578. package/lib/components/viewer3d/grids/grid-streak.js +0 -36
  579. package/lib/components/viewer3d/grids/grid-vertical-streak.js +0 -45
  580. package/lib/components/viewer3d/libs/first-person-controls.js +0 -74
  581. package/lib/components/viewer3d/libs/helvetiker_regular.typeface.js +0 -1287
  582. package/lib/components/viewer3d/libs/mtl-loader.js +0 -366
  583. package/lib/components/viewer3d/libs/obj-loader.js +0 -471
  584. package/lib/components/viewer3d/libs/orbit-controls.js +0 -706
  585. package/lib/components/viewer3d/libs/pointer-lock-controls.js +0 -53
  586. package/lib/components/viewer3d/lrm.js +0 -312
  587. package/lib/components/viewer3d/model.js +0 -714
  588. package/lib/components/viewer3d/pointer-lock-navigation.js +0 -122
  589. package/lib/components/viewer3d/ruler-utils/itemRect.js +0 -69
  590. package/lib/components/viewer3d/ruler-utils/layer3D.js +0 -503
  591. package/lib/components/viewer3d/ruler-utils/ruler3D.js +0 -232
  592. package/lib/components/viewer3d/ruler-utils/scene3D.js +0 -67
  593. package/lib/components/viewer3d/ruler-utils/state3D.js +0 -26
  594. package/lib/components/viewer3d/scene-creator.js +0 -3652
  595. package/lib/components/viewer3d/three-memory-cleaner.js +0 -60
  596. package/lib/components/viewer3d/viewer3d-first-person.js +0 -322
  597. package/lib/components/viewer3d/viewer3d.js +0 -2697
  598. package/lib/constants.js +0 -773
  599. package/lib/devLiteRenderer.js +0 -546
  600. package/lib/index.js +0 -107
  601. package/lib/mocks/appliancePayload.json +0 -27
  602. package/lib/mocks/cabinetPayload.json +0 -1914
  603. package/lib/mocks/cabinetPayload2.json +0 -76
  604. package/lib/mocks/dataBundle2.json +0 -4
  605. package/lib/mocks/distancePayload.json +0 -6
  606. package/lib/mocks/doorStylePayload2.json +0 -84
  607. package/lib/mocks/furnishingPayload.json +0 -23
  608. package/lib/mocks/itemCDSPayload.json +0 -27
  609. package/lib/mocks/lightingPayload.json +0 -23
  610. package/lib/mocks/mockProps.json +0 -43
  611. package/lib/mocks/mockProps2.json +0 -9
  612. package/lib/mocks/moldingPayload.json +0 -19
  613. package/lib/mocks/projectItemsCatalog.json +0 -133
  614. package/lib/mocks/rectangleShape.json +0 -238
  615. package/lib/mocks/replaceCabinetPayload.json +0 -81
  616. package/lib/mocks/roomShapePayload.json +0 -5
  617. package/lib/models.js +0 -514
  618. package/lib/reducers/areas-reducer.js +0 -19
  619. package/lib/reducers/export.js +0 -97
  620. package/lib/reducers/groups-reducer.js +0 -45
  621. package/lib/reducers/holes-reducer.js +0 -69
  622. package/lib/reducers/items-reducer.js +0 -147
  623. package/lib/reducers/lines-reducer.js +0 -52
  624. package/lib/reducers/project-reducer.js +0 -140
  625. package/lib/reducers/reducer.js +0 -26
  626. package/lib/reducers/scene-reducer.js +0 -35
  627. package/lib/reducers/user-reducer.js +0 -48
  628. package/lib/reducers/vertices-reducer.js +0 -26
  629. package/lib/reducers/viewer2d-reducer.js +0 -82
  630. package/lib/reducers/viewer3d-reducer.js +0 -63
  631. package/lib/shared-style.js +0 -72
  632. package/lib/translator/en.js +0 -111
  633. package/lib/translator/it.js +0 -86
  634. package/lib/translator/ru.js +0 -86
  635. package/lib/translator/translator.js +0 -87
  636. package/lib/useAppContext.js +0 -16
  637. package/lib/utils/browser.js +0 -40
  638. package/lib/utils/convert-units-lite.js +0 -35
  639. package/lib/utils/email-validator.js +0 -10
  640. package/lib/utils/export.js +0 -56
  641. package/lib/utils/geometry.js +0 -2751
  642. package/lib/utils/get-edges-of-subgraphs.js +0 -33
  643. package/lib/utils/graph-cycles.js +0 -239
  644. package/lib/utils/graph-inner-cycles.js +0 -54
  645. package/lib/utils/graph.js +0 -153
  646. package/lib/utils/helper.js +0 -425
  647. package/lib/utils/history.js +0 -36
  648. package/lib/utils/id-broker.js +0 -22
  649. package/lib/utils/isolate-event-handler.js +0 -1409
  650. package/lib/utils/logger.js +0 -14
  651. package/lib/utils/math.js +0 -57
  652. package/lib/utils/molding.js +0 -895
  653. package/lib/utils/name-generator.js +0 -21
  654. package/lib/utils/objects-utils.js +0 -62
  655. package/lib/utils/phone-validator.js +0 -10
  656. package/lib/utils/process-black-list.js +0 -22
  657. package/lib/utils/react-if.js +0 -25
  658. package/lib/utils/snap-scene.js +0 -101
  659. package/lib/utils/snap.js +0 -245
  660. package/lib/utils/summarizeCart.js +0 -30
  661. package/lib/utils/threeCSG.es6.js +0 -504
  662. package/lib/version.js +0 -7
@@ -1,2697 +0,0 @@
1
- 'use strict';
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof = require("@babel/runtime/helpers/typeof");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports["default"] = void 0;
9
- var _readOnlyError2 = _interopRequireDefault(require("@babel/runtime/helpers/readOnlyError"));
10
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
11
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
12
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
13
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
14
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
- var _react = _interopRequireDefault(require("react"));
17
- var _propTypes = _interopRequireDefault(require("prop-types"));
18
- var _reactDom = _interopRequireDefault(require("react-dom"));
19
- var Three = _interopRequireWildcard(require("three"));
20
- var _sceneCreator = require("./scene-creator");
21
- var _threeMemoryCleaner = require("./three-memory-cleaner");
22
- var _immutablediff = _interopRequireDefault(require("immutablediff"));
23
- var SharedStyle = _interopRequireWildcard(require("../../shared-style"));
24
- var _constants = require("../../constants");
25
- var _util = require("util");
26
- var _geometry = require("../../utils/geometry");
27
- var _convertUnitsLite = require("../../utils/convert-units-lite");
28
- var _export = require("../../utils/export");
29
- var _helper = require("../../utils/helper");
30
- var _RGBELoader = require("three/examples/jsm/loaders/RGBELoader");
31
- var _cameraControls = _interopRequireDefault(require("camera-controls"));
32
- var _objectsUtils = require("../../utils/objects-utils");
33
- var _utils = require("../viewer2d/utils");
34
- var _AppContext = _interopRequireDefault(require("../../AppContext"));
35
- function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
36
- function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
37
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
38
- function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
39
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
40
- _cameraControls["default"].install({
41
- THREE: Three
42
- });
43
- var Scene3DViewer = exports["default"] = /*#__PURE__*/function (_React$Component) {
44
- function Scene3DViewer(props) {
45
- var _this;
46
- (0, _classCallCheck2["default"])(this, Scene3DViewer);
47
- _this = _callSuper(this, Scene3DViewer, [props]);
48
- _this.state = {
49
- isLoading: false,
50
- showflag: true,
51
- isLoadingCabinet: props.state.scene.isLoadingCabinet,
52
- toolObj: null,
53
- angleObj: null,
54
- waitForRender: 0,
55
- lineLength: null // when view wall's elevation, that wall's length
56
- };
57
- _this.lastMousePosition = {};
58
- _this.width = props.width;
59
- _this.height = props.height;
60
- _this.renderingID = 0;
61
- _this.canvasWrapperRef = /*#__PURE__*/_react["default"].createRef();
62
- var mode = props.state.mode;
63
- if (!window.__elevationRendererDownload) {
64
- window.__elevationRendererDownload = {};
65
- }
66
- switch (mode) {
67
- case _constants.MODE_IDLE_3D:
68
- _this.renderer = window.__threeRenderer || new Three.WebGLRenderer({
69
- preserveDrawingBuffer: true,
70
- alpha: true,
71
- antialias: true
72
- });
73
- break;
74
- case _constants.MODE_3D_VIEW:
75
- _this.renderer = window.__threeRendererDownload || new Three.WebGLRenderer({
76
- preserveDrawingBuffer: true,
77
- alpha: true,
78
- antialias: true
79
- });
80
- break;
81
- default:
82
- if (_this.props.downloadFlag) {
83
- _this.renderer = window.__elevationRendererDownload[mode] || new Three.WebGLRenderer({
84
- preserveDrawingBuffer: true,
85
- alpha: true,
86
- antialias: true
87
- });
88
- } else {
89
- _this.renderer = window.__elevationRenderer || new Three.WebGLRenderer({
90
- preserveDrawingBuffer: true,
91
- alpha: true,
92
- antialias: true
93
- });
94
- }
95
- break;
96
- }
97
- _this.renderer.shadowMap.enabled = true;
98
- _this.renderer.shadowMapSoft = true;
99
- if (mode == 'MODE_IDLE_3D') {
100
- window.__threeRenderer = _this.renderer;
101
- } else if (mode == 'MODE_3D_VIEW') {
102
- window.__threeRendererDownload = _this.renderer;
103
- } else {
104
- if (_this.props.downloadFlag) window.__elevationRendererDownload[mode] = _this.renderer;else window.__elevationRenderer = _this.renderer;
105
- }
106
- _this.renderer.domElement.style.display = 'none';
107
- return _this;
108
- }
109
- (0, _inherits2["default"])(Scene3DViewer, _React$Component);
110
- return (0, _createClass2["default"])(Scene3DViewer, [{
111
- key: "componentDidMount",
112
- value: function componentDidMount(nextProps) {
113
- var _this2 = this;
114
- var scene3D, camera, pivot, cameraControls, clock;
115
- var spotLight1, spotLightTarget;
116
- var actions = {
117
- areaActions: this.context.areaActions,
118
- holesActions: this.context.holesActions,
119
- itemsActions: this.context.itemsActions,
120
- sceneActions: this.context.sceneActions,
121
- linesActions: this.context.linesActions,
122
- projectActions: this.context.projectActions,
123
- catalog: this.context.catalog
124
- };
125
- var self = this;
126
- var state = this.props.state;
127
- var mode = state.mode,
128
- scene = state.scene;
129
- function setupLight(scene, inbBox) {
130
- if ((0, _helper.isElevationView)(mode)) {
131
- var ambilight = new Three.AmbientLight('0xffffff', 3);
132
- scene.add(ambilight);
133
- } else {
134
- var addDirLight = function addDirLight(inColor, inIntensity, inPosition) {
135
- var dirLight = new Three.DirectionalLight(inColor, inIntensity);
136
- dirLight.castShadow = true;
137
- dirLight.shadow.mapSize.x = shadowMapSize;
138
- dirLight.shadow.mapSize.y = shadowMapSize;
139
- dirLight.shadow.camera.near = 0;
140
- dirLight.shadow.camera.far = shadowCameraFar;
141
- dirLight.shadow.camera.top = shadowCameraSize * 1.5;
142
- dirLight.shadow.camera.bottom = -shadowCameraSize * 1.5;
143
- dirLight.shadow.camera.left = -shadowCameraSize * 1.5;
144
- dirLight.shadow.camera.right = shadowCameraSize * 1.5;
145
- dirLight.position.copy(inPosition);
146
- var targetObject = new Three.Object3D();
147
- targetObject.position.copy(bboxCenter);
148
- scene.add(targetObject);
149
- dirLight.target = targetObject;
150
- dirLight.target.updateMatrixWorld();
151
- scene.add(dirLight);
152
- };
153
- var addSpotLight = function addSpotLight(inColor, inIntensity, inPosition, inTarget, inDistance) {
154
- var spotLight = new Three.SpotLight();
155
- spotLight.intensity = inIntensity;
156
- spotLight.color.setHex(inColor);
157
- spotLight.position.copy(inPosition);
158
- spotLight.angle = 1.3;
159
- spotLight.distance = inDistance;
160
- spotLight.penumbra = 1.8;
161
- spotLight.decay = 0.01;
162
- spotLight.castShadow = true;
163
- spotLight.shadow.intensity = 2;
164
- spotLight.shadow.mapSize.width = 4096;
165
- spotLight.shadow.mapSize.height = 4096;
166
- var targetObject = new Three.Object3D();
167
- targetObject.position.copy(new Three.Vector3(inTarget.x, 0, inTarget.z));
168
- scene.add(targetObject);
169
- spotLight.target = targetObject;
170
- spotLight.target.updateMatrixWorld();
171
- scene.add(spotLight);
172
- };
173
- var shadowMapSize = 2048;
174
- var shadowCameraSize = Math.max(Math.abs(inbBox.min.x - inbBox.max.x), Math.abs(inbBox.min.y - inbBox.max.y), Math.abs(inbBox.min.z - inbBox.max.z)) / 2;
175
- var shadowCameraFar = shadowCameraSize * 10;
176
- var bboxCenter = new Three.Vector3((inbBox.min.x + inbBox.max.x) / 2, inbBox.min.y, (inbBox.min.z + inbBox.max.z) / 2);
177
- var dirLightPos = new Three.Vector3(inbBox.max.x, inbBox.max.y + 1.8 * Math.abs(inbBox.max.y - inbBox.min.y), inbBox.min.z - 0.5 * Math.abs(inbBox.max.z - inbBox.min.z));
178
- addDirLight('white', 1.5, dirLightPos);
179
- var ceiling = scene3D.getObjectByName('ceil');
180
- if (ceiling) {
181
- var ceilBBox = new Three.Box3().setFromObject(ceiling);
182
- var spot1 = new Three.Vector3(ceilBBox.min.x + Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4, ceilBBox.max.y - 0.5, ceilBBox.min.z + Math.abs(ceilBBox.min.z - inbBox.max.z) / 4);
183
- var spot2 = new Three.Vector3(ceilBBox.min.x + Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4, ceilBBox.max.y - 0.5, ceilBBox.max.z - Math.abs(ceilBBox.min.z - ceilBBox.max.z) / 4);
184
- var spot3 = new Three.Vector3(ceilBBox.max.x - Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4, ceilBBox.max.y - 0.5, ceilBBox.min.z + Math.abs(ceilBBox.min.z - ceilBBox.max.z) / 4);
185
- var spot4 = new Three.Vector3(ceilBBox.max.x - Math.abs(ceilBBox.min.x - ceilBBox.max.x) / 4, ceilBBox.max.y - 0.5, ceilBBox.max.z - Math.abs(ceilBBox.min.z - ceilBBox.max.z) / 4);
186
- var spotlightDis = 1.5 * Math.abs(inbBox.min.y - inbBox.max.y);
187
-
188
- // check if spotlight is inside the room
189
- (0, _objectsUtils.vectorIntersectWithMesh)(spot1, scene3D.getObjectByName('floor')) && addSpotLight('0xffffff', 0.8, spot1, spot1, spotlightDis);
190
- (0, _objectsUtils.vectorIntersectWithMesh)(spot2, scene3D.getObjectByName('floor')) && addSpotLight('0xffffff', 0.8, spot2, spot2, spotlightDis);
191
- (0, _objectsUtils.vectorIntersectWithMesh)(spot3, scene3D.getObjectByName('floor')) && addSpotLight('0xffffff', 0.8, spot3, spot3, spotlightDis);
192
- (0, _objectsUtils.vectorIntersectWithMesh)(spot4, scene3D.getObjectByName('floor')) && addSpotLight('0xffffff', 0.8, spot4, spot4, spotlightDis);
193
- }
194
- }
195
- }
196
-
197
- // Load data
198
- this.setState({
199
- isLoading: true
200
- });
201
- if (self.props.downloadFlag) {
202
- this.setState({
203
- waitForRender: 0
204
- });
205
-
206
- // set loading bar
207
- switch (self.props.state.mode) {
208
- case _constants.MODE_ELEVATION_VIEW:
209
- self.props.setIsLoadingElevation('front', true);
210
- break;
211
- case _constants.MODE_3D_VIEW:
212
- self.props.setIsLoading3D(true);
213
- break;
214
- }
215
- }
216
- var _parseData = (0, _sceneCreator.parseData)(scene, actions, this.context.catalog, camera, this.renderer, state.mode),
217
- promise = _parseData.promise,
218
- planData = _parseData.planData;
219
- promise.then(function () {
220
- var objToRemove = [];
221
- planData.plan.traverse(function (obj) {
222
- if (obj.geometry === null) {
223
- objToRemove.push(obj);
224
- }
225
- });
226
- objToRemove.forEach(function (obj) {
227
- obj.removeFromParent();
228
- });
229
- var bbox = new Three.Box3().setFromObject(planData.plan);
230
- if (!(0, _helper.isElevationView)(state.mode)) {
231
- cameraControls.fitToBox(bbox);
232
- }
233
- setupLight(scene3D, planData.boundingBox);
234
- self.setState({
235
- waitForRender: 1
236
- });
237
- setTimeout(function () {
238
- self.setState({
239
- isLoading: false
240
- });
241
- self.renderer.domElement.style.display = 'block';
242
- }, 1500);
243
- });
244
- var area = scene.getIn(['layers', scene.selectedLayer, 'areas']);
245
- var layer = scene.getIn(['layers', scene.selectedLayer]);
246
- var areas = [],
247
- lights = [];
248
- var snapBox = null;
249
-
250
- // Check for data
251
- var msg = '';
252
- scene.layers.forEach(function (layer) {
253
- if (layer.id === scene.selectedLayer || layer.visible) {
254
- layer.items.forEach(function (item) {
255
- if (item.doorStyle === null) {
256
- if (!msg.includes(item.name + "'s doorStyle is null.")) msg += item.name + "'s doorStyle is null.\n";
257
- }
258
- });
259
- }
260
- });
261
- if (msg !== '') {
262
- confirm(msg);
263
- }
264
- init();
265
- render();
266
-
267
- // area lightning(wall lightning)/////
268
-
269
- area.forEach(function (data) {
270
- areas.push(data);
271
- });
272
- var _loop = function _loop() {
273
- var aVertices = [];
274
- var lines = [];
275
- var height = 100;
276
- areas[i].vertices.forEach(function (data) {
277
- aVertices.push(data);
278
- });
279
- layer.lines.forEach(function (data) {
280
- lines.push(data);
281
- });
282
- var _loop3 = function _loop3() {
283
- var data = lines[_i15];
284
- var realVec = [];
285
- data.vertices.forEach(function (vec) {
286
- realVec.push(vec);
287
- });
288
- if (aVertices.includes(realVec[0]) && aVertices.includes(realVec[1])) {
289
- height = (0, _convertUnitsLite.convert)(layer.ceilHeight).from(layer.unit).to(_constants.UNIT_CENTIMETER);
290
- // height = data.properties.getIn(['height', 'length']);
291
- return 1; // break
292
- }
293
- };
294
- for (var _i15 = 0; _i15 < lines.length; _i15++) {
295
- if (_loop3()) break;
296
- }
297
- var vertices = [];
298
- areas[i].vertices.forEach(function (datas) {
299
- var vertex = scene.getIn(['layers', scene.selectedLayer, 'vertices', datas]);
300
- vertices.push(vertex);
301
- });
302
- vertices.push(vertices[0]);
303
- var fLen = vertices.length - 1;
304
- for (var _i16 = 0; _i16 < fLen; _i16++) {
305
- var sX = vertices[_i16].x;
306
- var sY = vertices[_i16].y;
307
- var eX = vertices[_i16 + 1].x;
308
- var eY = vertices[_i16 + 1].y;
309
- var len = Math.sqrt((eX - sX) * (eX - sX) + (eY - sY) * (eY - sY));
310
- for (var cLen = 200; cLen < len; cLen += 200) {
311
- var cX = sX + (eX - sX) * cLen / len;
312
- var cY = sY + (eY - sY) * cLen / len;
313
- var endLen = Math.sqrt((eX - cX) * (eX - cX) + (eY - cY) * (eY - cY));
314
- if (endLen <= 100) continue;
315
- var vec2 = new Three.Vector2(cX - sX, cY - sY);
316
- var angle = vec2.angle() + Math.PI / 2;
317
- cX = Math.cos(angle) * 30 + cX;
318
- cY = Math.sin(angle) * 30 + cY;
319
- var spotLight = new Three.SpotLight(0xeeeeee, 1.7);
320
- spotLight.angle = 0.76;
321
- spotLight.castShadow = true;
322
- spotLight.penumbra = 1;
323
- spotLight.decay = 1.7;
324
- spotLight.distance = height - 20;
325
- var target = new Three.Object3D();
326
- spotLight.target = target;
327
- lights.push({
328
- light: spotLight,
329
- target: target,
330
- x: cX,
331
- y: cY,
332
- height: height
333
- });
334
- }
335
- }
336
- };
337
- for (var i = 0; i < areas.length; i++) {
338
- _loop();
339
- }
340
- // //////////////////////////
341
-
342
- // OBJECT PICKING
343
- var toIntersect = [planData.plan];
344
- var mouse = new Three.Vector2();
345
- var gridPlane = planData.grid;
346
- var raycaster = new Three.Raycaster();
347
- var selectedObject = {};
348
- var selectedFlag = false;
349
- var currentObject = null;
350
- var isSelected = false;
351
- var bRotate = false;
352
- var bMove = false;
353
- var bMoveUP = false;
354
- /** Transformation matrix of grid */
355
- var gridMatrix = new Three.Matrix4();
356
- var rayDirection = new Three.Vector3();
357
- /** World position of grid plane */
358
- var gridPlanOrigin = new Three.Vector3();
359
- var Point = new Three.Vector2();
360
- var sPoint = new Three.Vector2();
361
-
362
- // SNAP FUNCTION VARIABLE
363
- var snapFlag = false;
364
- var snapAnimI = 0;
365
- var snapDelta = 6;
366
- var t_i = 0;
367
- var targetPoint = new Three.Vector3();
368
- var targetRot = 0;
369
- var targetUVec = new Three.Vector3();
370
- var targetCRotation = 0;
371
- var targetObj = null;
372
- var targetNumber = 0;
373
- var wallSlide = false;
374
- var pinFlag = false;
375
- var sFlag = false; //for all object move
376
- var endPoint = {};
377
- var allItemRect;
378
- var allItemSnap;
379
- var allLines;
380
- var allLineRects;
381
- var allLineSnap;
382
- var allRect;
383
- var allArea;
384
-
385
- // FLAG FOR initial phase of drawing an item
386
- var isInitialPhase = true;
387
-
388
- // end snap function variable///////////////////////
389
- var backsplashVisible = false;
390
- var holeItems = _export.GeometryUtils.getHoleItems(layer);
391
- var removeSnapBox = function removeSnapBox() {
392
- if (snapBox != null) {
393
- planData.plan.remove(snapBox);
394
- (0, _threeMemoryCleaner.disposeObject)(snapBox);
395
- snapBox = null;
396
- targetObj = null;
397
- snapFlag = false;
398
- }
399
- };
400
- var camToGrid = new Three.Vector3();
401
- var camPos = camera.position;
402
- var mapCursorPosition = function mapCursorPosition(e, altitude) {
403
- camToGrid.subVectors(gridPlanOrigin, camPos);
404
- var camD = camToGrid.y + (altitude ? altitude : 0);
405
- var rayD = rayDirection.y;
406
- var intersectPt = rayDirection.multiplyScalar(camD / rayD).add(camPos);
407
- intersectPt.y = gridPlanOrigin.y;
408
- intersectPt.applyMatrix4(gridMatrix);
409
- return {
410
- x: intersectPt.x,
411
- y: -intersectPt.z
412
- };
413
- };
414
-
415
- /* for Snap Functions*/
416
-
417
- var pointLineDistance = function pointLineDistance(point, line) {
418
- // return distance from point to line and directional point of line
419
- var pX = point.x;
420
- var pY = point.y;
421
- var l1x = line[0].x;
422
- var l1y = line[0].y;
423
- var l2x = line[1].x;
424
- var l2y = line[1].y;
425
- var pLine = new Three.Vector2(l1x - pX, l1y - pY);
426
- var Line = new Three.Vector2(l1x - l2x, l1y - l2y);
427
- var pAngle = pLine.angle();
428
- var lAngle = Line.angle();
429
- var pDistance = pLine.length();
430
- var oDistance = Line.length();
431
- var directDistance = Math.sin(pAngle - lAngle) * pDistance;
432
- var lineDistance = Math.cos(pAngle - lAngle) * pDistance;
433
- var dX = l1x + (l2x - l1x) * lineDistance / oDistance;
434
- var dY = l1y + (l2y - l1y) * lineDistance / oDistance;
435
- var dPoint = {
436
- x: dX,
437
- y: dY
438
- };
439
- return {
440
- distance: directDistance,
441
- point: dPoint
442
- };
443
- };
444
- var getInterSect = function getInterSect(shape1, shape2) {
445
- // return result of intersect of two shape
446
- var count = 0;
447
- for (var _i = 0; _i < shape1.length - 1; _i++) {
448
- var sl1 = {
449
- x: shape1[_i].x,
450
- y: shape1[_i].y
451
- };
452
- var sl2 = {
453
- x: shape1[_i + 1].x,
454
- y: shape1[_i + 1].y
455
- };
456
- for (var j = 0; j < shape2.length - 1; j++) {
457
- var el1 = {
458
- x: shape2[j].x,
459
- y: shape2[j].y
460
- };
461
- var el2 = {
462
- x: shape2[j + 1].x,
463
- y: shape2[j + 1].y
464
- };
465
- var flag = _export.GeometryUtils.getLineInterSect(sl1.x, sl1.y, sl2.x, sl2.y, el1.x, el1.y, el2.x, el2.y);
466
- if (flag) {
467
- count++;
468
- if (count > 1) return true;
469
- }
470
- }
471
- }
472
- return false;
473
- };
474
- this.getRectPoints = function (width, height, pos, rot) {
475
- // return 4 points from it's position, width, height, and rotation info
476
- var rX = width / 2;
477
- var rY = height / 2;
478
- var vertices = [];
479
- var cRot = rot;
480
- var pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
481
- var pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
482
- vertices.push({
483
- x: Math.floor(pX + 0.5),
484
- y: Math.floor(pY + 0.5)
485
- });
486
- rX = -rX;
487
- pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
488
- pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
489
- vertices.push({
490
- x: Math.floor(pX + 0.5),
491
- y: Math.floor(pY + 0.5)
492
- });
493
- rY = -rY;
494
- pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
495
- pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
496
- vertices.push({
497
- x: Math.floor(pX + 0.5),
498
- y: Math.floor(pY + 0.5)
499
- });
500
- rX = -rX;
501
- pX = pos.x + Math.cos(cRot) * rX + Math.cos(cRot + Math.PI / 2) * rY;
502
- pY = pos.y + Math.sin(cRot) * rX + Math.sin(cRot + Math.PI / 2) * rY;
503
- vertices.push({
504
- x: Math.floor(pX + 0.5),
505
- y: Math.floor(pY + 0.5)
506
- });
507
- vertices.push(vertices[0]);
508
- vertices.push(vertices[2]);
509
- return vertices;
510
- };
511
- var prepareSnap = function prepareSnap(layer) {
512
- allLines = _export.GeometryUtils.getAllLines(layer);
513
- allLineRects = _export.GeometryUtils.buildRectFromLines(layer, allLines);
514
- allItemRect = _export.GeometryUtils.getAllItems(_this2.props.state.scene, actions.catalog, allLineRects);
515
- allItemSnap = _export.GeometryUtils.getAllItemSnap(allItemRect);
516
- allLineSnap = _export.GeometryUtils.getAllLineSnap(allLineRects, allItemRect.cur);
517
- allRect = allItemRect.others.concat(allLineRects);
518
- allItemSnap = _export.GeometryUtils.validateSnaps(allItemSnap, allRect);
519
- allLineSnap = _export.GeometryUtils.validateSnaps(allLineSnap, allRect);
520
- allArea = _export.GeometryUtils.getAllArea(layer);
521
- };
522
- var prepareSnapSpec = function prepareSnapSpec(layer) {
523
- allLines = _export.GeometryUtils.getAllLines(layer);
524
- allLineRects = _export.GeometryUtils.buildRectFromLines(layer, allLines);
525
- allItemRect = _export.GeometryUtils.getAllItemSpecified(_this2.props.state.scene, actions.catalog, _constants.WALL_CABINET_LAYOUTPOS);
526
- // allItemSnap = GeometryUtils.getAllItemSnap(allItemRect);
527
- };
528
-
529
- // prepareSnapSpec(layer);
530
- var lineRect = function lineRect(layer) {
531
- var areainfo = [];
532
- layer.areas.forEach(function (area) {
533
- var sz = area.vertices.size;
534
- for (var i = 0; i < sz; i++) {
535
- areainfo.push(area.vertices.get(i));
536
- }
537
- });
538
- var rect = [];
539
- areainfo.forEach(function (area) {
540
- var vert = layer.vertices.get(area);
541
- rect.push(vert.x, vert.y);
542
- });
543
- return rect;
544
- };
545
- this.collisionCheck = function (obj, pos, rot, tObj) {
546
- var _this3 = this;
547
- var item = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
548
- var catalog = arguments.length > 5 ? arguments[5] : undefined;
549
- //collision check from one object to every other object excpet target object
550
- var layer = this.props.state.scene.getIn(['layers', obj.userData.layerId]);
551
- var layoutpos = 'utype';
552
- if (item !== null) {
553
- var catid = item.type;
554
- var cat = catalog.elements[catid];
555
- layoutpos = cat.info.layoutpos;
556
- }
557
- var oPos = new Three.Vector2(pos.clone().x, pos.clone().y);
558
- var sBounding = obj.children[0].userData;
559
- var width = sBounding.max.x - sBounding.min.x;
560
- var depth = sBounding.max.z - sBounding.min.z;
561
- var oVertices = this.getRectPoints(width, depth, oPos.clone(), rot % 360 / 180 * Math.PI);
562
- var datas = [];
563
- layer.items.forEach(function (data) {
564
- datas.push(data);
565
- });
566
- for (var _i2 = 0; _i2 < datas.length; _i2++) {
567
- var data = datas[_i2];
568
- if (data.id == obj.userData.itemId || data.id == tObj.userData.itemId) continue;
569
- var target = planData.sceneGraph.layers[obj.userData.layerId].items[data.id];
570
- if (target === undefined) {
571
- console.log(data.id + ' does not exist in viewer3d/viewer3d.js collisionCheck function');
572
- return false;
573
- }
574
- var _item = layer.items.getIn([data.id]);
575
- var ocatid = _item.type;
576
- var ocat = catalog.elements[ocatid];
577
- var olayoutpos = ocat.info.layoutpos;
578
- if (!(layoutpos === _constants.BASE_CABINET_LAYOUTPOS && olayoutpos === _constants.WALL_CABINET_LAYOUTPOS || layoutpos === _constants.WALL_CABINET_LAYOUTPOS && olayoutpos === _constants.BASE_CABINET_LAYOUTPOS)) {
579
- var tRot = _item.rotation;
580
- var tPos = new Three.Vector2(_item.x, _item.y);
581
- var tBounding = target.children[0].userData;
582
- var twidth = tBounding.max.x - tBounding.min.x;
583
- var tdepth = tBounding.max.z - tBounding.min.z;
584
- var tVertices = this.getRectPoints(twidth, tdepth, tPos.clone(), tRot % 360 / 180 * Math.PI);
585
- if (getInterSect(oVertices, tVertices)) {
586
- return false;
587
- }
588
- }
589
- }
590
- datas = [];
591
- layer.lines.forEach(function (data) {
592
- datas.push(data);
593
- });
594
- var _loop2 = function _loop2() {
595
- var data = datas[_i3];
596
- if (data.id == obj.userData.itemId || data.id == tObj.userData.itemId) return 0; // continue
597
- var item = layer.lines.getIn([data.id]);
598
- // let llayoutpos = catalog.elements[item.type].info.layoutpos;
599
- var vertices = [];
600
- item.vertices.forEach(function (data) {
601
- var vertex = layer.vertices.get(data);
602
- vertices.push({
603
- x: vertex.x,
604
- y: vertex.y
605
- });
606
- });
607
- var vec = new Three.Vector2(vertices[1].x - vertices[0].x, vertices[1].y - vertices[0].y);
608
- var tRot = vec.angle();
609
- var tPos = new Three.Vector2((vertices[0].x + vertices[1].x) / 2, (vertices[0].y + vertices[1].y) / 2);
610
- var tdepth = item.properties.getIn(['thickness', 'length']);
611
- var twidth = Math.sqrt(vec.x * vec.x + vec.y * vec.y);
612
- var tVertices = _this3.getRectPoints(twidth, tdepth, tPos.clone(), tRot);
613
- if (getInterSect(oVertices, tVertices)) {
614
- return {
615
- v: false
616
- };
617
- }
618
- },
619
- _ret;
620
- for (var _i3 = 0; _i3 < datas.length; _i3++) {
621
- _ret = _loop2();
622
- if (_ret === 0) continue;
623
- if (_ret) return _ret.v;
624
- }
625
- return true;
626
- };
627
- this.collisionHoleCheck = function (obj, pos, rot, tObj) {
628
- var item = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : null;
629
- var catalog = arguments.length > 5 ? arguments[5] : undefined;
630
- var layer = this.props.state.scene.getIn(['layers', obj.userData.layerId]);
631
- var currentItem;
632
- if (item !== null) {
633
- var catid = item.type;
634
- var cat = catalog.elements[catid];
635
- currentItem = {
636
- selectedItem: item,
637
- cat: cat
638
- };
639
- }
640
- var oPos = new Three.Vector2(pos.clone().x, pos.clone().y);
641
- var sBounding = obj.children[0].userData;
642
- var width = sBounding.max.x - sBounding.min.x;
643
- var depth = sBounding.max.z - sBounding.min.z;
644
- var oVertices = this.getRectPoints(width, depth, oPos.clone(), rot % 360 / 180 * Math.PI);
645
- var datas = [];
646
- layer.items.forEach(function (data) {
647
- datas.push(data);
648
- });
649
- for (var _i4 = 0; _i4 < datas.length; _i4++) {
650
- var data = datas[_i4];
651
- if (data.id == obj.userData.itemId || data.id == tObj.userData.itemId) continue;
652
- var target = planData.sceneGraph.layers[obj.userData.layerId].items[data.id];
653
- if (target === undefined) {
654
- console.log(data.id + ' does not exist in viewer3d/viewer3d.js collisionCheck function');
655
- return false;
656
- }
657
- var _item2 = layer.items.getIn([data.id]);
658
- var ocatid = _item2.type;
659
- var ocat = catalog.elements[ocatid];
660
- if (!ocat) ocat = catalog.elements[(0, _utils.returnReplaceableDeepSearchType)(ocatid)];
661
- var otherItem = {
662
- item: _item2,
663
- cat: ocat
664
- };
665
- if (_export.GeometryUtils.needSnap(currentItem, otherItem) && otherItem.cat.type != 'cabinet') {
666
- var tRot = _item2.rotation;
667
- var tPos = new Three.Vector2(_item2.x, _item2.y);
668
- var tBounding = target.children[0].userData;
669
- var twidth = tBounding.max.x - tBounding.min.x;
670
- var tdepth = tBounding.max.z - tBounding.min.z;
671
- var tVertices = this.getRectPoints(twidth, tdepth, tPos.clone(), tRot % 360 / 180 * Math.PI);
672
- if (getInterSect(oVertices, tVertices)) {
673
- return false;
674
- }
675
- }
676
- }
677
- var holes = [];
678
- layer.lines.forEach(function (line) {
679
- line.holes.forEach(function (holeID) {
680
- var hole = layer.holes.get(holeID);
681
- holes.push(hole);
682
- });
683
- });
684
- var i = 0;
685
- for (; i < holes.length; i++) {
686
- var _tPos = new Three.Vector2(holes[i].x, holes[i].y);
687
- var _twidth = holes[i].properties.getIn(['width', 'length']);
688
- var theight = holes[i].properties.getIn(['thickness', 'length']);
689
- var trot = holes[i].rotation;
690
- var _tVertices = this.getRectPoints(_twidth, theight, _tPos.clone(), trot);
691
- if (getInterSect(oVertices, _tVertices)) {
692
- return false;
693
- }
694
- }
695
- return true;
696
- };
697
- this.collisionSlide = function (item3D, originPos, layer, sVertices, tPos, item) {
698
- var items = [];
699
- var cur_category = '';
700
- var catalog = actions.catalog;
701
- if (layer.selected.items.size > 0) {
702
- var selectedItem = layer.getIn(['items', layer.selected.items.get(0)]);
703
- var catid = selectedItem.type;
704
- var cat = catalog.elements[catid];
705
- if (cat === undefined || cat === null) cat = catalog.getIn(['elements', catid]);
706
- cur_category = cat.obj.category;
707
- }
708
- layer.items.forEach(function (data) {
709
- if (data.id == selectedObject.itemID) {
710
- return;
711
- }
712
- items.push(data.toJS());
713
- });
714
- var oPos = new Three.Vector2(originPos.x, -originPos.z);
715
-
716
- // sort from distance
717
- for (var _i5 = 0; _i5 < items.length - 1; _i5++) {
718
- for (var j = _i5 + 1; j < items.length; j++) {
719
- if ((0, _geometry.verticesDistance)(oPos, new Three.Vector2(items[_i5].x, items[_i5].y)) > (0, _geometry.verticesDistance)(oPos, new Three.Vector2(items[j].x, items[j].y))) {
720
- var exchange = items[j];
721
- items[j] = items[_i5];
722
- items[_i5] = exchange;
723
- }
724
- }
725
- }
726
- var i = 0;
727
- for (; i < items.length; i++) {
728
- if (!items[i]) return;
729
- var _target = planData.sceneGraph.layers[selectedObject.layerID].items[items[i].id];
730
- if (_target === undefined) {
731
- return false;
732
- }
733
- var _targetData = layer.items.getIn([items[i].id]);
734
- var _tRot = _targetData.rotation;
735
- var _tPos2 = new Three.Vector2(_targetData.x, _targetData.y);
736
- var _tBounding = _target.children[0].userData;
737
- var _twidth2 = _tBounding.max.x - _tBounding.min.x;
738
- var _tdepth = _tBounding.max.z - _tBounding.min.z;
739
- var _tVertices2 = this.getRectPoints(_twidth2, _tdepth, _tPos2.clone(), _tRot % 360 / 180 * Math.PI);
740
- if (getInterSect(sVertices, _tVertices2)) {
741
- break;
742
- }
743
- }
744
- if (items.length == 0 || !items[i]) return;
745
- var target = planData.sceneGraph.layers[selectedObject.layerID].items[items[i].id];
746
- var targetData = layer.items.getIn([items[i].id]);
747
- var targetPos = new Three.Vector2(targetData.x, targetData.y);
748
- var tRot = targetData.rotation;
749
- var tBounding = target.children[0].userData;
750
- var twidth = tBounding.max.x - tBounding.min.x;
751
- var tdepth = tBounding.max.z - tBounding.min.z;
752
- var tVertices = this.getRectPoints(twidth, tdepth, targetPos.clone(), tRot % 360 / 180 * Math.PI);
753
- // ////////////////////////
754
- var vArray = [];
755
- var dteArray = [];
756
- var lineArray = [];
757
- var vdistanceArray = [];
758
- var cVecArray = [];
759
- var inFlag = false;
760
- for (var _i6 = 0; _i6 < 4; _i6++) {
761
- var v1 = tVertices[_i6];
762
- var v2 = tVertices[_i6 + 1];
763
- var data = pointLineDistance({
764
- x: tPos.x,
765
- y: tPos.y
766
- }, [{
767
- x: v1.x,
768
- y: v1.y
769
- }, {
770
- x: v2.x,
771
- y: v2.y
772
- }]);
773
- dteArray.push(data.distance);
774
- vArray.push(data.point);
775
- lineArray.push([v1, v2]);
776
- }
777
- // if tPos in target object
778
- var tPosDistance = Math.abs(pointLineDistance(tPos, lineArray[0]).distance) + Math.abs(pointLineDistance(tPos, lineArray[2]).distance);
779
- var realDistance = new Three.Vector2(lineArray[1][0].x - lineArray[1][1].x, lineArray[1][0].y - lineArray[1][1].y).length();
780
- var tPosDistance1 = Math.abs(pointLineDistance(tPos, lineArray[1]).distance) + Math.abs(pointLineDistance(tPos, lineArray[3]).distance);
781
- var realDistance1 = new Three.Vector2(lineArray[0][0].x - lineArray[0][1].x, lineArray[0][0].y - lineArray[0][1].y).length();
782
- if (Math.abs(Math.abs(tPosDistance) - Math.abs(realDistance)) < 0.01 && Math.abs(Math.abs(tPosDistance1) - Math.abs(realDistance1)) < 0.01) inFlag = true;
783
- // ////////////////////
784
- var key = 0;
785
- // sort distance from origin point
786
- for (var _j = 0; _j < dteArray.length - 1; _j++) {
787
- for (var k = _j + 1; k < dteArray.length; k++) {
788
- if (Math.abs(dteArray[_j]) > Math.abs(dteArray[k])) {
789
- var temp = dteArray[k];
790
- dteArray[_j] = dteArray[k];
791
- dteArray[k] = temp;
792
- var temp1 = vArray[k];
793
- vArray[_j] = vArray[k];
794
- vArray[k] = temp1;
795
- var temp2 = lineArray[k];
796
- lineArray[_j] = lineArray[k];
797
- lineArray[k] = temp2;
798
- }
799
- }
800
- }
801
- // //////////////////////////////
802
- for (var _i7 = 0; _i7 < 4; _i7++) {
803
- var _data = pointLineDistance(sVertices[_i7], lineArray[key]);
804
- vdistanceArray.push(_data.distance);
805
- cVecArray.push({
806
- x: _data.point.x - sVertices[_i7].x,
807
- y: _data.point.y - sVertices[_i7].y
808
- });
809
- }
810
- for (var _j2 = 0; _j2 < vdistanceArray.length; _j2++) {
811
- var tX = tPos.x + cVecArray[_j2].x;
812
- var tY = tPos.y + cVecArray[_j2].y;
813
- if (this.collisionCheck(item3D, new Three.Vector2(tX, tY), item.rotation, {
814
- userData: {
815
- itemId: null
816
- }
817
- }, item, this.context.catalog)) {
818
- item3D.position.set(tX, originPos.y, -tY);
819
- sPoint.set(tX, tY);
820
- break;
821
- }
822
- }
823
- };
824
- this.snap = function (obj, layer) {
825
- // snap operation
826
- var target = obj.userData.target;
827
- for (; target.parent != null;) {
828
- if (target.name == 'pivot') break;
829
- target = target.parent;
830
- }
831
- var source = obj.parent.parent.parent;
832
- if (target.userData.type == 'item') {
833
- var sRot = layer.getIn(['items', source.userData.itemId]).rotation;
834
- var tRot = layer.getIn(['items', target.userData.itemId]) ? layer.getIn(['items', target.userData.itemId]).rotation : 0;
835
- var item = layer.getIn(['items', source.userData.itemId]);
836
- var layoutType = item.layoutpos;
837
- var altitudeLength = (0, _convertUnitsLite.convert)(item.properties.getIn(['altitude', '_length'])).from('in').to('cm');
838
- var sBounding = source.children[0].userData;
839
- var tBounding = target.children[0].userData;
840
- var tPos = target.position.clone();
841
- var width = sBounding.max.x - sBounding.min.x;
842
- var height = sBounding.max.y - sBounding.min.y;
843
- var depth = sBounding.max.z - sBounding.min.z;
844
- var snapBoxGeom = new Three.BoxGeometry(width, height, depth);
845
- var snapBoxObj = new Three.Mesh(snapBoxGeom, new Three.MeshBasicMaterial({
846
- // color: 0x2cde6b,
847
- // opacity: 0.7,
848
- transparent: true,
849
- blending: Three.MultiplyBlending
850
- }));
851
- var removeSnapBoxObj = function removeSnapBoxObj() {
852
- if (snapBoxObj) {
853
- planData.plan.remove(snapBoxObj);
854
- (0, _threeMemoryCleaner.disposeObject)(snapBoxObj);
855
- }
856
- snapFlag = false;
857
- };
858
- var box = new Three.BoxHelper(snapBoxObj, 0xffffff);
859
- box.material.linewidth = 2;
860
- box.material.depthTest = false;
861
- box.renderOrder = 200;
862
- snapBoxObj.add(box);
863
- snapBoxObj.position.set(source.position.x, layoutType === _constants.WALL_CABINET_LAYOUTPOS ? altitudeLength + source.position.y + height / 2 : source.position.y + height / 2, source.position.z);
864
- snapBoxObj.rotation.set(source.rotation.x, source.rotation.y, source.rotation.z);
865
- snapBoxObj.name = 'TransformBox';
866
- planData.plan.add(snapBoxObj);
867
- var deltaX = (tBounding.max.x - tBounding.min.x) / 2 + (sBounding.max.x - sBounding.min.x) / 2;
868
- var deltaZ = (tBounding.max.z - tBounding.min.z) / 2 - (sBounding.max.z - sBounding.min.z) / 2;
869
- var sPos = snapBoxObj.position.clone();
870
- // avaliable snap place///////////////
871
- var tPoses = [];
872
- var pX = tPos.x + deltaX * Math.cos(tRot / 180 * Math.PI) + deltaZ * Math.sin(tRot / 180 * Math.PI);
873
- var pZ = tPos.z - deltaX * Math.sin(tRot / 180 * Math.PI) + deltaZ * Math.cos(tRot / 180 * Math.PI);
874
- tPoses.push(new Three.Vector3(pX, 0, pZ));
875
- deltaX = -deltaX;
876
- pX = tPos.x + deltaX * Math.cos(tRot / 180 * Math.PI) + deltaZ * Math.sin(tRot / 180 * Math.PI);
877
- pZ = tPos.z - deltaX * Math.sin(tRot / 180 * Math.PI) + deltaZ * Math.cos(tRot / 180 * Math.PI);
878
- tPoses.push(new Three.Vector3(pX, 0, pZ));
879
- deltaX = (tBounding.max.x - tBounding.min.x) / 2 - (sBounding.max.x - sBounding.min.x) / 2;
880
- deltaZ = -(tBounding.max.z - tBounding.min.z) / 2 - (sBounding.max.z - sBounding.min.z) / 2;
881
- pX = tPos.x + deltaX * Math.cos(tRot / 180 * Math.PI) + deltaZ * Math.sin(tRot / 180 * Math.PI);
882
- pZ = tPos.z - deltaX * Math.sin(tRot / 180 * Math.PI) + deltaZ * Math.cos(tRot / 180 * Math.PI);
883
- tPoses.push(new Three.Vector3(pX, 0, pZ));
884
- deltaX = -deltaX;
885
- pX = tPos.x + deltaX * Math.cos(tRot / 180 * Math.PI) + deltaZ * Math.sin(tRot / 180 * Math.PI);
886
- pZ = tPos.z - deltaX * Math.sin(tRot / 180 * Math.PI) + deltaZ * Math.cos(tRot / 180 * Math.PI);
887
- tPoses.push(new Three.Vector3(pX, 0, pZ));
888
- var distance = Math.sqrt((sPos.x - tPoses[0].x) * (sPos.x - tPoses[0].x) + (sPos.z - tPoses[0].z) * (sPos.z - tPoses[0].z));
889
- var tNum = 1;
890
- tPos = tPoses[0].clone();
891
- for (var _i8 = 1; _i8 < tPoses.length; _i8++) {
892
- var curDis = Math.sqrt((sPos.x - tPoses[_i8].x) * (sPos.x - tPoses[_i8].x) + (sPos.z - tPoses[_i8].z) * (sPos.z - tPoses[_i8].z));
893
- if (curDis < distance) {
894
- distance = curDis;
895
- tNum = _i8 + 1;
896
- tPos = tPoses[_i8].clone();
897
- }
898
- }
899
- // //////////////////////////////////
900
- if (targetObj != null && targetObj.userData.itemId == target.userData.itemId && tNum == targetNumber) {
901
- removeSnapBoxObj();
902
- return;
903
- } else {
904
- removeSnapBox();
905
- }
906
- // //////////////////////////////////
907
- if (tNum >= 3) tRot += 180;
908
- snapAnimI = 0;
909
- t_i = 0;
910
- targetObj = target;
911
- targetNumber = tNum;
912
- targetRot = tRot;
913
- targetPoint = tPos;
914
- snapBox = snapBoxObj;
915
- var cx = sPos.x - tPos.x;
916
- var cz = sPos.z - tPos.z;
917
- targetUVec = new Three.Vector3(cx, 0, cz);
918
- targetCRotation = (tRot - sRot) % 360 / 180 * Math.PI;
919
- } else {
920
- var _item3 = layer.getIn(['items', source.userData.itemId]);
921
- if (holeItems.length && selectedObj) {
922
- var _i9;
923
- for (_i9 = 0; _i9 < holeItems.length; _i9++) {
924
- var hole = holeItems[_i9];
925
- if (Math.abs(Math.sin(selectedObj.rotRad)) === 1) {
926
- if (_item3.y + selectedObj.size.width / 2 >= hole.y - hole.width / 2 && _item3.y - selectedObj.size.width / 2 <= hole.y + hole.width / 2 && (selectedObj.rotRad == 0 || selectedObj.rotRad == -Math.PI / 2 ? _item3.x <= hole.x && _item3.x + selectedObj.size.height >= hole.x : _item3.x >= hole.x && _item3.x - selectedObj.size.height <= hole.x)) break;
927
- } else {
928
- if (_item3.x + selectedObj.size.width / 2 >= hole.x - hole.width / 2 && _item3.x - selectedObj.size.width / 2 <= hole.x + hole.width / 2 && (selectedObj.rotRad == 0 || selectedObj.rotRad == -Math.PI / 2 ? _item3.y <= hole.y && _item3.y + selectedObj.size.height >= hole.y : _item3.y >= hole.y && _item3.y - selectedObj.size.height <= hole.y)) break;
929
- }
930
- }
931
- if (_i9 != holeItems.length) return;
932
- }
933
- if (target.userData.type == 'hole') {
934
- snapFlag = false;
935
- return;
936
- } else {
937
- var _layoutType = _item3.layoutpos;
938
- var _altitudeLength = (0, _convertUnitsLite.convert)(_item3.properties.getIn(['altitude', '_length'])).from('in').to('cm');
939
- var _sBounding = source.children[0].userData;
940
- var _width = _sBounding.max.x - _sBounding.min.x;
941
- var _height = _sBounding.max.y - _sBounding.min.y;
942
- var _depth = _sBounding.max.z - _sBounding.min.z;
943
- var _snapBoxGeom = new Three.BoxGeometry(_width, _height, _depth);
944
- var _snapBoxObj = new Three.Mesh(_snapBoxGeom, new Three.MeshBasicMaterial({
945
- // color: 0x2cde6b,
946
- // opacity: 0.7,
947
- transparent: true,
948
- blending: Three.MultiplyBlending
949
- }));
950
- var _removeSnapBoxObj = function _removeSnapBoxObj() {
951
- if (_snapBoxObj) {
952
- planData.plan.remove(_snapBoxObj);
953
- (0, _threeMemoryCleaner.disposeObject)(_snapBoxObj);
954
- }
955
- snapFlag = false;
956
- };
957
- var _box = new Three.BoxHelper(_snapBoxObj, 0xffffff);
958
- _box.material.linewidth = 2;
959
- _box.material.depthTest = false;
960
- _box.renderOrder = 100;
961
- _snapBoxObj.add(_box);
962
- _snapBoxObj.position.set(source.position.x, _layoutType === _constants.WALL_CABINET_LAYOUTPOS ? _altitudeLength + source.position.y + _height / 2 : source.position.y + _height / 2, source.position.z);
963
- _snapBoxObj.rotation.set(source.rotation.x, source.rotation.y, source.rotation.z);
964
- _snapBoxObj.name = 'TransformBox';
965
- planData.plan.add(_snapBoxObj);
966
- var snapLine = layer.getIn(['lines', target.userData.lineId]);
967
- // let snapLineThickness = snapLine.properties.getIn([
968
- // 'thickness',
969
- // 'length'
970
- // ]);
971
- var snapLineThickness = 10.64;
972
- var vertices = [];
973
- if (snapLine === undefined) return;
974
- snapLine.vertices.forEach(function (data) {
975
- var vec = layer.getIn(['vertices', data]);
976
- vertices.push(vec);
977
- });
978
- var iX = source.position.clone().x;
979
- var iY = -source.position.clone().z;
980
- var lineVec = new Three.Vector2(vertices[1].x - vertices[0].x, vertices[1].y - vertices[0].y);
981
- var oLength = Math.sqrt(lineVec.x * lineVec.x + lineVec.y * lineVec.y);
982
- lineVec.normalize();
983
- var vec2 = new Three.Vector2(iX - vertices[0].x, iY - vertices[0].y);
984
- var vec2Legnth = Math.sqrt(vec2.x * vec2.x + vec2.y * vec2.y);
985
- var angle = Math.abs(lineVec.angle() - vec2.angle());
986
- angle = angle > Math.PI ? 2 * Math.PI - angle : angle;
987
- var lineLength = Math.cos(angle) * vec2Legnth;
988
- var transLength = 0;
989
- if (lineLength < 100) {
990
- transLength = -lineLength + (snapLineThickness + _width) / 2;
991
- }
992
- if (lineLength > oLength - 100) {
993
- transLength = -lineLength - (snapLineThickness + _width) / 2 + oLength;
994
- }
995
- var directPoint = new Three.Vector2(lineVec.x * lineLength + vertices[0].x, lineVec.y * lineLength + vertices[0].y);
996
- var directLine = new Three.Vector2(directPoint.x - iX, directPoint.y - iY);
997
- var dLength = Math.sqrt((iX - directPoint.x) * (iX - directPoint.x) + (iY - directPoint.y) * (iY - directPoint.y));
998
- var reduceLen = (snapLineThickness + _depth) / 2;
999
- var scale = (dLength - reduceLen) / dLength;
1000
- var _tPos3 = new Three.Vector2(iX + (directPoint.x - iX) * scale + lineVec.x * transLength, iY + (directPoint.y - iY) * scale + lineVec.y * transLength);
1001
- var realAngle = directLine.angle() - Math.PI / 2;
1002
- var _tRot2 = realAngle * 180 / Math.PI;
1003
- var _sPos = new Three.Vector2(iX, iY);
1004
- var _sRot = _item3.rotation;
1005
- var _tNum = 0;
1006
- // //////////////////////////////////////
1007
- // check part////
1008
- var result = this.collisionCheck(source, _tPos3, _tRot2, target, _item3, this.context.catalog);
1009
- // console.log('result', result);
1010
- if (result == false) {
1011
- _removeSnapBoxObj();
1012
- removeSnapBox();
1013
- return;
1014
- }
1015
- // ////////////////
1016
- if (targetObj === target && snapBox !== null) {
1017
- _removeSnapBoxObj();
1018
- snapAnimI = 20;
1019
- targetPoint = new Three.Vector3(_tPos3.x, 0, -_tPos3.y);
1020
- var _sourcePos = snapBox.position.clone();
1021
- var _cx = _sourcePos.x - targetPoint.x;
1022
- var _cz = _sourcePos.z - targetPoint.z;
1023
- targetUVec = new Three.Vector3(_cx, 0, _cz);
1024
- targetRot = _tRot2;
1025
- targetCRotation = (_tRot2 - _sRot) % 360 / 180 * Math.PI;
1026
- snapFlag = false;
1027
- return;
1028
- } else {
1029
- removeSnapBox();
1030
- }
1031
- // //////////////////////////////////////
1032
- snapAnimI = 0;
1033
- t_i = 0;
1034
- targetObj = target;
1035
- targetNumber = _tNum;
1036
- targetRot = _tRot2;
1037
- targetPoint = new Three.Vector3(_tPos3.x, 0, -_tPos3.y);
1038
- snapBox = _snapBoxObj;
1039
- var sourcePos = snapBox.position.clone();
1040
- var _cx2 = sourcePos.x - targetPoint.x;
1041
- var _cz2 = sourcePos.z - targetPoint.z;
1042
- targetUVec = new Three.Vector3(_cx2, 0, _cz2);
1043
- targetRot = _tRot2;
1044
- targetCRotation = (_tRot2 - _sRot) % 360 / 180 * Math.PI;
1045
- }
1046
- }
1047
- };
1048
-
1049
- /*end of snap functions*/
1050
- var selectedObj = null;
1051
- var firstMove = false;
1052
- var prevX, prevY;
1053
- var selObj = null;
1054
- var createToolObject = function createToolObject() {
1055
- var canvas = document.createElement('canvas');
1056
- canvas.width = 100;
1057
- canvas.height = 200;
1058
- canvas.style.width = 50 + 'px';
1059
- canvas.style.height = 100 + 'px';
1060
- var ctx = canvas.getContext('2d');
1061
- ctx.fillStyle = '#FFFFFF';
1062
- ctx.strokeStyle = '#000000';
1063
- ctx.beginPath();
1064
- ctx.arc(50, 50, 40, 0, 4 * Math.PI);
1065
- ctx.fill();
1066
- ctx.stroke();
1067
- var img1 = new Image();
1068
- img1.crossOrigin = 'anonymous';
1069
- img1.src = '/assets/img/svg/3d_item_rotation.svg';
1070
- img1.onload = function () {
1071
- ctx.drawImage(img1, 16, 16, 68, 68);
1072
- };
1073
- ctx.beginPath();
1074
- ctx.arc(50, 150, 40, 0, 4 * Math.PI);
1075
- ctx.fill();
1076
- ctx.stroke();
1077
- var img2 = new Image();
1078
- img2.crossOrigin = 'anonymous';
1079
- img2.src = '/assets/img/svg/3d_item_move.svg';
1080
- img2.onload = function () {
1081
- ctx.drawImage(img2, 16, 116, 68, 68);
1082
- };
1083
- return canvas;
1084
- };
1085
- var clockWise = true;
1086
- var lastAngle = 0;
1087
- var createAngleObject = function createAngleObject(rotate) {
1088
- var canvas = document.createElement('canvas');
1089
- canvas.width = 100;
1090
- canvas.height = 100;
1091
- canvas.style.width = 100 + 'px';
1092
- canvas.style.height = 100 + 'px';
1093
- var ctx = canvas.getContext('2d');
1094
- ctx.strokeStyle = '#FFFFFF';
1095
- ctx.lineWidth = 10;
1096
- ctx.beginPath();
1097
- ctx.arc(50, 50, 45, 0, 2 * Math.PI);
1098
- ctx.stroke();
1099
- ctx.strokeStyle = _constants.SECONDARY_PURPLE_COLOR;
1100
- ctx.lineWidth = 6;
1101
- ctx.beginPath();
1102
- if (lastAngle < 15 && lastAngle > -15) {
1103
- if (rotate >= 0) {
1104
- clockWise = false;
1105
- } else {
1106
- clockWise = true;
1107
- }
1108
- if (lastAngle === 0) {
1109
- if (rotate > -180) {
1110
- clockWise = true;
1111
- } else {
1112
- clockWise = false;
1113
- }
1114
- }
1115
- }
1116
- ctx.arc(50, 50, 45, 0, rotate / 180.0 * Math.PI, clockWise);
1117
- ctx.stroke();
1118
- lastAngle = rotate;
1119
- return canvas;
1120
- };
1121
- var toolTexture = new Three.Texture(createToolObject());
1122
- toolTexture.needsUpdate = true;
1123
- var toolObj = new Three.Sprite(new Three.SpriteMaterial({
1124
- map: toolTexture,
1125
- sizeAttenuation: true
1126
- }));
1127
- toolObj.material.transparent = true;
1128
- toolObj.material.depthTest = false;
1129
- toolObj.scale.set(20, 40, 20);
1130
- toolObj.renderOrder = 3;
1131
- toolObj.name = 'toolObj';
1132
- var angleTexture = new Three.Texture(createAngleObject(0));
1133
- angleTexture.needsUpdate = true;
1134
- var angleObj = new Three.Sprite(new Three.SpriteMaterial({
1135
- map: angleTexture,
1136
- sizeAttenuation: false
1137
- }));
1138
- angleObj.scale.set(0.075, 0.075, 0.075);
1139
- angleObj.material.transparent = true;
1140
- angleObj.material.depthTest = false;
1141
- angleObj.renderOrder = 3;
1142
- angleObj.name = 'angleObj';
1143
-
1144
- /**
1145
- * Calculate plane point of mouse with `event` & `altitude`
1146
- * * Calculate mouse.x & mouse.y
1147
- * * Set raycaster from camera & Set raycaster direction
1148
- * * Calculate Point & dispatch an action
1149
- */
1150
- var getPoint = function getPoint(e, alti) {
1151
- mouse.x = e.offsetX / _this2.width * 2 - 1;
1152
- mouse.y = -e.offsetY / _this2.height * 2 + 1;
1153
- raycaster.setFromCamera(mouse, camera);
1154
- rayDirection = raycaster.ray.direction;
1155
- Point = mapCursorPosition(e, alti);
1156
- _this2.context.projectActions.updateMouseCoord(Point);
1157
- };
1158
- var getIntersectWallPoint = function getIntersectWallPoint(e) {
1159
- mouse.x = e.offsetX / _this2.width * 2 - 1;
1160
- mouse.y = -e.offsetY / _this2.height * 2 + 1;
1161
- raycaster.setFromCamera(mouse, camera);
1162
- rayDirection = raycaster.ray.direction;
1163
- var lines = planData.sceneGraph.layers[scene.selectedLayer].lines;
1164
- var keys = Object.keys(lines);
1165
- var arrMesh = [];
1166
- keys.forEach(function (key) {
1167
- lines[key].children[0].children.forEach(function (mesh) {
1168
- if (mesh.name == 'soul' && mesh.visible) arrMesh.push(mesh);
1169
- });
1170
- });
1171
- if (arrMesh.length > 0) {
1172
- var intersects = raycaster.intersectObjects(arrMesh);
1173
- if (intersects.length > 0) {
1174
- var intersectPt = intersects[0].point;
1175
- intersectPt.applyMatrix4(gridMatrix);
1176
- Point = {
1177
- x: intersectPt.x,
1178
- y: -intersectPt.z
1179
- };
1180
- _this2.context.projectActions.updateMouseCoord(Point);
1181
- return true;
1182
- }
1183
- }
1184
- return false;
1185
- };
1186
- var updateSelectedObject = function updateSelectedObject() {
1187
- // update the selected object
1188
- var selectedLayerId = _this2.props.state.scene.selectedLayer;
1189
- var selItemId = _this2.props.state.scene.getIn(['layers', selectedLayerId, 'selected', 'items']).toJS()[0];
1190
- selectedObject = {
1191
- layerID: selectedLayerId,
1192
- itemID: selItemId
1193
- };
1194
- };
1195
- var sendInternalEvent = function sendInternalEvent(evtType, evtElement) {
1196
- var pointArray = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
1197
- if (!(0, _helper.isEmpty)(evtType) && !(0, _helper.isEmpty)(evtElement)) {
1198
- var _currentObject, _this2$props$onIntern, _this2$props;
1199
- var payload = evtElement === null || evtElement === void 0 ? void 0 : evtElement.toJS();
1200
- if (((_currentObject = currentObject) === null || _currentObject === void 0 ? void 0 : _currentObject.prototype) === 'lines') {
1201
- // caculating length of selected line//
1202
- var v_a = layer.vertices.get(currentObject.vertices.get(0));
1203
- var v_b = layer.vertices.get(currentObject.vertices.get(1));
1204
- var distance = _export.GeometryUtils.pointsDistance(v_a.x, v_a.y, v_b.x, v_b.y);
1205
- var _length = (0, _convertUnitsLite.convert)(distance).from('cm').to('in');
1206
- payload.length = _length;
1207
- //////////////////////////////////////
1208
- } else if ((evtElement === null || evtElement === void 0 ? void 0 : evtElement.prototype) === 'items') {
1209
- // check this cabinet has warning box
1210
- payload.isWarning = (0, _utils.isWarningItem)(evtElement);
1211
- // check this item is available molding
1212
- payload.isMoldingAvailable = _export.MoldingUtils.isEnableItemForMolding(layer, evtElement); // check this item is snapped to wall
1213
- payload.isAttachedWall = _export.MoldingUtils.isAttachedWall(layer, evtElement);
1214
- // update distArray
1215
- if (pointArray) payload.distArray = pointArray;
1216
- }
1217
- (_this2$props$onIntern = (_this2$props = _this2.props).onInternalEvent) === null || _this2$props$onIntern === void 0 || _this2$props$onIntern.call(_this2$props, {
1218
- type: evtType,
1219
- value: payload
1220
- });
1221
- }
1222
- };
1223
- this.mouseDownEvent = function (event) {
1224
- gridPlanOrigin = gridPlane.position;
1225
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1226
- var altitude = 0;
1227
- if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1228
- var properties = allItemRect.cur.itemInfo.properties;
1229
- altitude = properties.getIn(['altitude', '_length']);
1230
- var unit = properties.getIn(['altitude', '_unit']) || 'in';
1231
- altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1232
- }
1233
- getPoint(event, altitude);
1234
- var state = _this2.props.state;
1235
- _this2.lastMousePosition.x = mouse.x;
1236
- _this2.lastMousePosition.y = mouse.y;
1237
- var layer = state.scene.getIn(['layers', state.scene.selectedLayer]);
1238
- var sCount = layer.selected.areas.size + layer.selected.holes.size + layer.selected.items.size + layer.selected.lines.size;
1239
- if (sCount <= 0) {
1240
- isSelected = false;
1241
- } else if (sCount >= 0 && selectedObject && 'holeID' in selectedObject) {
1242
- isSelected = true;
1243
- }
1244
- prevX = Point.x;
1245
- prevY = Point.y;
1246
-
1247
- /**
1248
- * 0 - rotate
1249
- * 1 - move up/down
1250
- * 2 - move x/y
1251
- * 3 - camera rotate
1252
- */
1253
- var transflag = 3;
1254
- raycaster.setFromCamera(mouse, camera);
1255
- var meshes = [];
1256
- toIntersect.forEach(function (object) {
1257
- if (!object) return;
1258
- object.traverse(function (o) {
1259
- if (o.isMesh) meshes.push(o);
1260
- });
1261
- });
1262
- var intersects = raycaster.intersectObjects(meshes, true);
1263
- var toolIntersects = raycaster.intersectObjects([toolObj], true);
1264
-
1265
- // This code is excuted when click the tool object(rotation or move icon).
1266
- if (toolIntersects.length > 0) {
1267
- updateSelectedObject();
1268
- // it determines whether mouse is over on rotation icon or move icon.
1269
- var distance = Math.sqrt(Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) + Math.pow((toolIntersects[0].uv.y - 0.25) * 100, 2));
1270
- // move icon selected
1271
- if (distance <= 20) {
1272
- transflag = 2;
1273
- } else {
1274
- distance = Math.sqrt(Math.pow((toolIntersects[0].uv.x - 0.5) * 50, 2) + Math.pow((toolIntersects[0].uv.y - 0.75) * 100, 2));
1275
- // rotation icon selected
1276
- if (distance <= 20) {
1277
- transflag = 0;
1278
- }
1279
- }
1280
- }
1281
- if (intersects.length > 0) {
1282
- var _i0 = 0,
1283
- length = intersects.length;
1284
- for (_i0 = 0; _i0 < length; _i0++) {
1285
- if (intersects[_i0].object.type !== 'BoxHelper' &&
1286
- // intersects[i].object.type === OBJTYPE_MESH &&
1287
- intersects[_i0].object.name !== 'lineText' && intersects[_i0].object.name !== 'soul' && !intersects[_i0].object.name.includes('WarningBox')) break;
1288
- }
1289
- if (intersects[_i0] !== undefined) {
1290
- if (intersects[_i0].object.name.indexOf('transUp') != -1) transflag = 1;
1291
- if (intersects[_i0].object.name.indexOf('transHole') != -1) transflag = 2;
1292
- } else {
1293
- console.log('intersects[i] is undefined in viewer3d/viewer3d.js');
1294
- }
1295
- }
1296
- if (_this2.props.state.mode == _constants.MODE_DRAWING_ITEM_3D) return;
1297
- if (isSelected) {
1298
- !_this2.props.downloadFlag && _this2.props.setToolbar('');
1299
- if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1300
- var _i1;
1301
- for (_i1 = 0; _i1 < intersects.length; _i1++) {
1302
- if (intersects[_i1].object instanceof Three.Mesh && intersects[_i1].object.name != 'TransformBox' && intersects[_i1].object.type != 'Line' && intersects[_i1].object.name != 'lineText' && intersects[_i1].object.name != 'countertops' && intersects[_i1].object.type != 'BoxHelper' && intersects[_i1].object.name != 'floor' && intersects[_i1].object.name != 'backFace' && intersects[_i1].object.name != 'soul' && !intersects[_i1].object.name.includes('backsplash') && !intersects[_i1].object.name.includes('WarningBox')) break;
1303
- }
1304
- if (intersects[_i1] === undefined) {
1305
- if (transflag !== 0 && transflag !== 2) {
1306
- isSelected = false;
1307
- // this.context.projectActions.unselectAll();
1308
- scene3D.remove(toolObj);
1309
- _this2.context.itemsActions.removeReplacingSupport();
1310
- return;
1311
- }
1312
- }
1313
- if (selectedObject !== undefined) {
1314
- // get selected object from planData.sceneGraph
1315
- var selectedItem = null;
1316
- switch (true) {
1317
- case 'itemID' in selectedObject:
1318
- selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1319
- break;
1320
- case 'holeID' in selectedObject:
1321
- selectedItem = planData.sceneGraph.layers[selectedObject.layerID].holes[selectedObject.holeID];
1322
- break;
1323
- default:
1324
- break;
1325
- }
1326
- sPoint.set(Point.x, Point.y);
1327
- if (transflag == 0) {
1328
- scene3D.remove(toolObj);
1329
- var alti = 0;
1330
- if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1331
- var _properties = allItemRect.cur.itemInfo.properties;
1332
- alti = _properties.getIn(['altitude', '_length']);
1333
- var _unit = _properties.getIn(['altitude', '_unit']) || 'in';
1334
- alti = (0, _convertUnitsLite.convert)(alti).from(_unit).to(_this2.props.state.scene.unit);
1335
- }
1336
- getPoint({
1337
- offsetX: event.offsetX - 50,
1338
- offsetY: event.offsetY
1339
- }, alti);
1340
- if ((0, _util.isUndefined)(selectedItem)) return;
1341
- var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1342
- lastAngle = 0;
1343
- angleObj.position.set(planData.plan.position.x + Point.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : selItem.properties.get('altitude').get('length') + planData.plan.position.y, planData.plan.position.z - Point.y);
1344
- angleTexture.image = createAngleObject(0);
1345
- angleTexture.needsUpdate = true;
1346
- scene3D.add(angleObj);
1347
- _this2.setState({
1348
- angleObj: angleObj
1349
- });
1350
- var centerPos = Point;
1351
- getPoint(event, alti);
1352
- _this2.context.itemsActions.beginRotatingItem3D(selectedObject.layerID, selectedObject.itemID, Point.x, Point.y, centerPos.x, centerPos.y);
1353
- bRotate = true;
1354
- } else if (transflag == 1) {
1355
- bMoveUP = true;
1356
- } else if (transflag == 2) {
1357
- switch (true) {
1358
- case 'holeID' in selectedObject:
1359
- _this2.context.holesActions.beginDraggingHole3D(selectedObject.layerID, selectedObject.holeID, Point.x, Point.y);
1360
- break;
1361
- default:
1362
- _this2.context.itemsActions.beginDraggingItem3D(selectedObject.layerID, selectedObject.itemID, Point.x, Point.y);
1363
- break;
1364
- }
1365
- bMove = true;
1366
- scene3D.remove(toolObj);
1367
- }
1368
- for (_i1 = 0; _i1 < intersects.length; _i1++) {
1369
- if (selectedItem != undefined && intersects[_i1].object.parent && intersects[_i1].object.parent.parent.userData.itemId === selectedItem.userData.itemId) selectedFlag = true;
1370
- }
1371
- if (selectedFlag || toolIntersects.length > 0 && !(0, _helper.isElevationView)(mode)) {
1372
- cameraControls.mouseButtons.left = _cameraControls["default"].ACTION.NONE;
1373
- selectedFlag = false;
1374
- } else {
1375
- isSelected = false;
1376
- // this.context.projectActions.unselectAll();
1377
- scene3D.remove(toolObj);
1378
- _this2.context.itemsActions.removeReplacingSupport();
1379
- }
1380
- }
1381
- } else {
1382
- isSelected = false;
1383
- // this.context.projectActions.unselectAll();
1384
- scene3D.remove(toolObj);
1385
- _this2.context.itemsActions.removeReplacingSupport();
1386
- return;
1387
- }
1388
- }
1389
- };
1390
- this.mouseUpEvent = function (event) {
1391
- var internalType = ''; // internalEvent type - select/drag/draw
1392
- var selectedElement; // internalEvent data
1393
- firstMove = 0;
1394
- var altitude = 0;
1395
- if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1396
- var properties = allItemRect.cur.itemInfo.properties;
1397
- altitude = properties.getIn(['altitude', '_length']);
1398
- var unit = properties.getIn(['altitude', '_unit']) || 'in';
1399
- altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1400
- }
1401
- scene3D.remove(angleObj);
1402
- scene3D.remove(toolObj);
1403
- if (!_this2.props.downloadFlag && !_this2.props.state.mode.includes('ING')) {
1404
- _this2.props.setToolbar('');
1405
- }
1406
- if (_this2.props.state.mode == _constants.MODE_DRAWING_ITEM_3D) {
1407
- if (Point.x > _this2.props.state.scene.width) Point.x = _this2.props.state.width;
1408
- if (Point.y > _this2.props.state.scene.height) Point.y = _this2.props.state.height;
1409
- if (Point.x < 0) Point.x = 0;
1410
- if (Point.y < 0) Point.y = 0;
1411
- if (snapBox == null) {
1412
- actions.itemsActions.endDrawingItem(_this2.props.state.scene.selectedLayer, sPoint.x, sPoint.y);
1413
- } else {
1414
- removeSnapBox();
1415
- var polygon = _export.GeometryUtils.getPoylgonPoints(layer);
1416
- // if cursor is outside of room
1417
- if (polygon.length > 0 && !_export.GeometryUtils.ContainsPoint(polygon, Point.x, Point.y)) {
1418
- actions.itemsActions.endDrawingItem(_this2.props.state.scene.selectedLayer, sPoint.x, sPoint.y);
1419
- } else {
1420
- actions.itemsActions.updateDraggingItemChanged(targetPoint.x, -targetPoint.z, selectedObject.layerID, selectedObject.itemID);
1421
- _this2.context.itemsActions.updateRotatingItemChanged(targetRot, selectedObject.layerID, selectedObject.itemID);
1422
- actions.itemsActions.endDrawingItem(_this2.props.state.scene.selectedLayer, Point.x, Point.y);
1423
- }
1424
- }
1425
- bMove = false;
1426
- isInitialPhase = true;
1427
- return;
1428
- }
1429
- switch (_this2.props.state.mode) {
1430
- case _constants.MODE_DRAGGING_ITEM_3D:
1431
- case _constants.MODE_DRAGGING_HOLE_3D:
1432
- internalType = _constants.INTERNAL_EVENT_DRAG_ELEMENT;
1433
- break;
1434
- case _constants.MODE_ROTATING_ITEM_3D:
1435
- internalType = _constants.INTERNAL_EVENT_ROTATE_ELEMENT;
1436
- break;
1437
- case _constants.MODE_DRAWING_HOLE_3D:
1438
- internalType = _constants.INTERNAL_EVENT_DRAW_ELEMENT;
1439
- break;
1440
- case _constants.MODE_IDLE_3D:
1441
- internalType = _constants.INTERNAL_EVENT_SELECT_ELEMENT;
1442
- break;
1443
- }
1444
- if (_this2.props.state.mode == _constants.MODE_DRAGGING_ITEM_3D) {
1445
- _this2.context.itemsActions.endDraggingItem3D();
1446
- }
1447
- if (_this2.props.state.mode == _constants.MODE_ROTATING_ITEM_3D) {
1448
- _this2.context.itemsActions.endRotatingItem3D(sPoint.x, sPoint.y);
1449
- }
1450
- getPoint(event, altitude);
1451
- if (_this2.props.state.mode == _constants.MODE_DRAWING_HOLE_3D) {
1452
- gridPlanOrigin = gridPlane.position;
1453
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1454
- camPos = camera.position;
1455
- if (!getIntersectWallPoint(event)) return;
1456
- actions.holesActions.endDrawingHole3D(_this2.props.state.scene.selectedLayer, Point.x, Point.y);
1457
- bMove = false;
1458
- return;
1459
- }
1460
- event.preventDefault();
1461
- if (event.button === 0) {
1462
- cameraControls.mouseButtons.left = _cameraControls["default"].ACTION.ROTATE;
1463
- mouse.x = event.offsetX / _this2.width * 2 - 1;
1464
- mouse.y = -(event.offsetY / _this2.height) * 2 + 1;
1465
- raycaster.setFromCamera(mouse, camera);
1466
- rayDirection = raycaster.ray.direction;
1467
- rayDirection = rayDirection.normalize();
1468
- var meshes = [];
1469
- toIntersect.forEach(function (object) {
1470
- if (!object) return;
1471
- object.traverse(function (o) {
1472
- if (o.isMesh) meshes.push(o);
1473
- });
1474
- });
1475
- var intersects = raycaster.intersectObjects(meshes, true);
1476
- var _i10;
1477
- if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1478
- for (_i10 = 0; _i10 < intersects.length; _i10++) {
1479
- if (intersects[_i10].object.name === 'warningObj') break;
1480
- }
1481
- if (intersects[_i10] !== undefined) {
1482
- var distance = Math.sqrt(Math.pow((intersects[_i10].uv.x - 0.5) * 50, 2) + Math.pow((intersects[_i10].uv.y - 0.25) * 100, 2));
1483
- if (distance <= 20) {
1484
- if (!bMove && !bRotate) {
1485
- isSelected = false;
1486
- _this2.context.projectActions.unselectAll();
1487
- scene3D.remove(toolObj);
1488
- _this2.context.itemsActions.removeReplacingSupport();
1489
- var replaceInfo = intersects[_i10].object.parent.parent.userData;
1490
- _this2.context.itemsActions.selectItem(replaceInfo.layerId, replaceInfo.itemId);
1491
- !_this2.props.downloadFlag && _this2.props.replaceCabinet(true);
1492
- return;
1493
- }
1494
- }
1495
- }
1496
- }
1497
- !_this2.props.downloadFlag && _this2.props.replaceCabinet(false);
1498
- if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1499
- for (_i10 = 0; _i10 < intersects.length; _i10++) {
1500
- if (intersects[_i10].object instanceof Three.Mesh && intersects[_i10].object.name != 'TransformBox' && intersects[_i10].object.type != 'Line' && intersects[_i10].object.name != 'lineText' && intersects[_i10].object.name != 'countertops' && intersects[_i10].object.type != 'BoxHelper' && intersects[_i10].object.name != 'soul' && !intersects[_i10].object.name.includes('backsplash') && !intersects[_i10].object.name.includes('WarningBox')) break;
1501
- }
1502
- }
1503
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1504
- if (Math.abs(mouse.x - _this2.lastMousePosition.x) <= 0.02 && Math.abs(mouse.y - _this2.lastMousePosition.y) <= 0.02 || bMove) {
1505
- if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
1506
- if (intersects[_i10] === undefined) {
1507
- if (!bMove) {
1508
- isSelected = false;
1509
- _this2.context.projectActions.unselectAll();
1510
- scene3D.remove(toolObj);
1511
- _this2.context.itemsActions.removeReplacingSupport();
1512
- return;
1513
- }
1514
- }
1515
- if (!bMove) {
1516
- selectedObject = intersects[_i10].object.interact && intersects[_i10].object.interact();
1517
- }
1518
- if (selectedObject !== undefined && 'itemID' in selectedObject) {
1519
- currentObject = intersects[_i10].object;
1520
- for (; currentObject.parent != null;) {
1521
- if (currentObject.name == 'pivot') break;
1522
- currentObject = currentObject.parent;
1523
- }
1524
- isSelected = true;
1525
- setTimeout(function () {
1526
- (0, _sceneCreator.getDistances)(layer);
1527
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1528
- if ((0, _util.isUndefined)(selectedItem)) return;
1529
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1530
- var itemPos = selectedItem.position.clone();
1531
- if (intersects[_i10].object.parent && intersects[_i10].object.parent.parent.userData.itemId === selectedItem.userData.itemId) {
1532
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1533
- } else {
1534
- toolObj.position.set(planData.plan.position.x + itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1535
- }
1536
- scene3D.add(toolObj);
1537
- _this2.setState({
1538
- toolObj: toolObj
1539
- });
1540
- // showItemButtons(layer.getIn(['items', selectedObject.itemID]), currentObject, event, camera, this.renderer);
1541
- var pointArray = [],
1542
- cnt = 0;
1543
- pointArray.push([_sceneCreator.fVLine[0].userData.distance, 90]);
1544
- pointArray.push([_sceneCreator.fVLine[1].userData.distance, -90]);
1545
- pointArray.push([_sceneCreator.fVLine[2].userData.distance, 180]);
1546
- pointArray.push([_sceneCreator.fVLine[3].userData.distance, 0]);
1547
- pointArray.forEach(function (pointElement, index) {
1548
- if (pointElement[0] == undefined) pointArray[index][0] = 0;
1549
- });
1550
- pointArray.forEach(function (pointElement) {
1551
- if (pointElement[0] == 0) cnt++;
1552
- });
1553
- if (cnt == 4 || cnt == 3) {
1554
- pointArray[0][0] = 100;
1555
- pointArray[1][0] = 100;
1556
- }
1557
- actions.itemsActions.storeDistArray(layer.id, selectedObject.itemID, pointArray);
1558
- internalType = internalType ? internalType : _constants.INTERNAL_EVENT_SELECT_ELEMENT;
1559
- sendInternalEvent(internalType, selectedElement, pointArray);
1560
- });
1561
- } else {
1562
- if (selectedObject) {
1563
- var elementID = null;
1564
- var elementPrototype = null;
1565
- switch (true) {
1566
- case 'holeID' in selectedObject:
1567
- elementID = selectedObject.holeID;
1568
- elementPrototype = 'holes';
1569
- if (_this2.props.state.mode === _constants.MODE_DRAGGING_HOLE_3D) {
1570
- actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1571
- }
1572
- break;
1573
- case 'lineID' in selectedObject:
1574
- elementID = selectedObject.lineID;
1575
- elementPrototype = 'lines';
1576
- break;
1577
- case 'areaID' in selectedObject:
1578
- elementID = selectedObject.areaID;
1579
- elementPrototype = 'areas';
1580
- break;
1581
- default:
1582
- break;
1583
- }
1584
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).getIn([elementPrototype, elementID]);
1585
- }
1586
- isSelected = false;
1587
- }
1588
- } else {
1589
- isSelected = false;
1590
- _this2.context.projectActions.unselectAll();
1591
- switch (true) {
1592
- case 'holeID' in selectedObject:
1593
- actions.holesActions.endDraggingHole3D(sPoint.x, sPoint.y);
1594
- break;
1595
- default:
1596
- _this2.context.itemsActions.removeReplacingSupport();
1597
- break;
1598
- }
1599
- }
1600
- bMove = false;
1601
- bRotate = false;
1602
- bMoveUP = false;
1603
- if (isSelected) {
1604
- prepareSnap(layer);
1605
- selectedObj = allItemRect.cur;
1606
- }
1607
- } else {
1608
- (0, _sceneCreator.visibleTransformBox)(false);
1609
- var alti = 0;
1610
- if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1611
- var _properties2 = allItemRect.cur.itemInfo.properties;
1612
- alti = _properties2.getIn(['altitude', '_length']);
1613
- var _unit2 = _properties2.getIn(['altitude', '_unit']) || 'in';
1614
- alti = (0, _convertUnitsLite.convert)(alti).from(_unit2).to(_this2.props.state.scene.unit);
1615
- }
1616
- getPoint(event, alti);
1617
- if (bRotate) {
1618
- var _intersects$_i;
1619
- var selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1620
- if ((0, _util.isUndefined)(selectedItem)) return;
1621
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1622
- var itemPos = selectedItem.position.clone();
1623
- if (((_intersects$_i = intersects[_i10]) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.object) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.parent) === null || _intersects$_i === void 0 || (_intersects$_i = _intersects$_i.userData) === null || _intersects$_i === void 0 ? void 0 : _intersects$_i.itemId) === selectedItem.userData.itemId) {
1624
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1625
- } else {
1626
- toolObj.position.set(planData.plan.position.x + itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + selectedItem.children[0].position.y, planData.plan.position.z + itemPos.z);
1627
- }
1628
- scene3D.add(toolObj);
1629
- _this2.setState({
1630
- toolObj: toolObj
1631
- });
1632
- _this2.context.itemsActions.endRotatingItem3D(Point.x, Point.y);
1633
- bRotate = false;
1634
- }
1635
- if (bMove) {
1636
- bMove = false;
1637
- var _selectedItem = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1638
- if ((0, _util.isUndefined)(_selectedItem)) return;
1639
- selectedElement = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
1640
- var _itemPos = _selectedItem.position.clone();
1641
- if (intersects[_i10].object.parent.parent.userData.itemId === _selectedItem.userData.itemId) {
1642
- toolObj.position.set(intersects[_i10].point.x, intersects[_i10].point.y, intersects[_i10].point.z);
1643
- } else {
1644
- toolObj.position.set(planData.plan.position.x + _itemPos.x, selectedElement.category === 'lighting' ? -planData.plan.position.y - selectedElement.properties.get('height').get('length') : planData.plan.position.y + _selectedItem.children[0].position.y, planData.plan.position.z + _itemPos.z);
1645
- }
1646
- scene3D.add(toolObj);
1647
- _this2.setState({
1648
- toolObj: toolObj
1649
- });
1650
- if (snapBox == null) {
1651
- var item3D = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1652
- if (!item3D) return;
1653
- item3D.visible = true;
1654
- var originPos = item3D.position.clone();
1655
- setTimeout(function () {
1656
- _this2.context.itemsActions.updateDraggingItemChanged(originPos.x, -originPos.z, selectedObject.layerID, selectedObject.itemID);
1657
- }, 50);
1658
- } else {
1659
- _this2.context.itemsActions.updateDraggingItemChanged(targetPoint.x, -targetPoint.z, selectedObject.layerID, selectedObject.itemID);
1660
- _this2.context.itemsActions.updateRotatingItemChanged(targetRot, selectedObject.layerID, selectedObject.itemID);
1661
- var _item3D = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1662
- _item3D.position.x = targetPoint.x;
1663
- _item3D.position.z = targetPoint.z;
1664
- _item3D.visible = true;
1665
- }
1666
- }
1667
- if (bMoveUP) {
1668
- bMoveUP = false;
1669
- }
1670
- }
1671
- removeSnapBox();
1672
- actions.sceneActions.updateMovingState(true);
1673
- if (isSelected === true) {
1674
- prepareSnap(layer);
1675
- selectedObj = allItemRect.cur;
1676
- }
1677
- }
1678
- sendInternalEvent(internalType, selectedElement);
1679
- };
1680
- this.mouseEnterEvent = function (event) {
1681
- if (_this2.props.state.mode !== _constants.MODE_DRAWING_ITEM_3D) return;
1682
- // if not initial moment of drawing an item
1683
- if (!isInitialPhase) return;
1684
- var bNormalFlow = true;
1685
- _this2.getSelectedObject();
1686
- var layer = _this2.props.state.scene.getIn(['layers', selectedObject.layerID]);
1687
- var mX = Point.x - sPoint.x;
1688
- var mY = Point.y - sPoint.y;
1689
- var item3D = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1690
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('TransformBox');
1691
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('WarningBox' + selectedObject.itemID);
1692
- var item = layer.getIn(['items', selectedObject.itemID]);
1693
- if (!item3D || !item) return;
1694
- if (item.counterTop.uri == '') item.counterTop.uri = layer.counterTop.uri;
1695
- var sRot = item.rotation;
1696
- var originPos = item3D.position.clone();
1697
- var tPos = new Three.Vector2(mX + originPos.x, mY - originPos.z);
1698
- var sBounding = item3D.children[0].userData;
1699
- var swidth = sBounding.max.x - sBounding.min.x;
1700
- var sdepth = sBounding.max.z - sBounding.min.z;
1701
- var sVertices = _this2.getRectPoints(swidth, sdepth, tPos.clone(), sRot % 360 / 180 * Math.PI);
1702
- prepareSnap(layer);
1703
-
1704
- // calc altitude
1705
- var altitude = 0;
1706
- if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1707
- var properties = allItemRect.cur.itemInfo.properties;
1708
- altitude = properties.getIn(['altitude', '_length']);
1709
- var unit = properties.getIn(['altitude', '_unit']) || 'in';
1710
- altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1711
- }
1712
- // We need to set cam position since when MODE_DRAWING_ITEM_3D mouse down event
1713
- // is not emited so cam position is not valid
1714
- gridPlanOrigin = gridPlane.position;
1715
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1716
- camPos = camera.position;
1717
-
1718
- // calc cursor position
1719
- getPoint(event, altitude);
1720
- var polygon = _export.GeometryUtils.getPoylgonPoints(layer);
1721
-
1722
- // if no wall (no area)
1723
- if (!polygon.length) {
1724
- // place the item at cursor position
1725
- actions.itemsActions.updateDraggingItemChanged(Point.x, Point.y, selectedObject.layerID, selectedObject.itemID);
1726
- return;
1727
- }
1728
-
1729
- // calc snap
1730
- var _GeometryUtils$calcCr = _export.GeometryUtils.calcCreateSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, polygon),
1731
- cx = _GeometryUtils$calcCr.cx,
1732
- cy = _GeometryUtils$calcCr.cy,
1733
- crot = _GeometryUtils$calcCr.crot,
1734
- rotRad = _GeometryUtils$calcCr.rotRad;
1735
- var finalPosition = {
1736
- x: cx,
1737
- y: cy,
1738
- rot: crot,
1739
- rotRad: rotRad
1740
- };
1741
-
1742
- // calc current item rect
1743
- var itemRect = _objectSpread(_objectSpread({}, allItemRect.cur), {}, {
1744
- pos: {
1745
- x: Point.x,
1746
- y: Point.y
1747
- }
1748
- });
1749
-
1750
- // if cursor position is inside the room
1751
- if (_export.GeometryUtils.ContainsPoint(polygon, Point.x, Point.y)) {
1752
- // if cursor position is available to place the item
1753
- if (_export.GeometryUtils.validRect(itemRect, allRect)) {
1754
- actions.itemsActions.updateDraggingItemChanged(Point.x, Point.y, selectedObject.layerID, selectedObject.itemID);
1755
- sPoint.set(Point.x, Point.y);
1756
- bNormalFlow = false;
1757
- }
1758
- } else {
1759
- // if cursor is outside the room and there is no snap candidate,
1760
- // then place the item at any free position inside the room.
1761
- if (!_export.GeometryUtils.ContainsPoint(polygon, cx, cy)) {
1762
- var points = [];
1763
- var point = [];
1764
-
1765
- // rebuild variable to be passed to getCentriodOfPolygon
1766
- // polygon: [ x0, y0, x1, y1, ... ] ==> points: [[x0, y0], [x1, y1], ...]
1767
- polygon === null || polygon === void 0 || polygon.forEach(function (value, index) {
1768
- point.push(value);
1769
- if (index % 2) {
1770
- points.push(point);
1771
- point = [];
1772
- }
1773
- });
1774
-
1775
- // calc center position of the room
1776
- var centerPos = _export.GeometryUtils.getCentroidOfPolygon(points);
1777
- var itemRect1 = _objectSpread(_objectSpread({}, allItemRect.cur), {}, {
1778
- pos: {
1779
- x: centerPos.x,
1780
- y: centerPos.y
1781
- }
1782
- });
1783
- var itemRect2 = _objectSpread(_objectSpread({}, allItemRect.cur), {}, {
1784
- pos: {
1785
- x: centerPos.x,
1786
- y: centerPos.y
1787
- },
1788
- rotRad: allItemRect.cur.rotRad + Math.PI / 2
1789
- });
1790
-
1791
- // find a free position in the room
1792
- if (_export.GeometryUtils.validRect(itemRect1, allRect)) {
1793
- actions.itemsActions.updateDraggingItemChanged(centerPos.x, centerPos.y, selectedObject.layerID, selectedObject.itemID);
1794
- sPoint.set(centerPos.x, centerPos.y);
1795
- bNormalFlow = false;
1796
- } else if (_export.GeometryUtils.validRect(itemRect2, allRect)) {
1797
- finalPosition = {
1798
- x: centerPos.x,
1799
- y: centerPos.y,
1800
- rotRad: itemRect2.rotRad,
1801
- rot: itemRect2.rotRad / Math.PI * 180
1802
- };
1803
- sPoint.set(centerPos.x, centerPos.y);
1804
- }
1805
- }
1806
- }
1807
- var nPos = new Three.Vector2(cx, cy);
1808
- if (!_this2.collisionHoleCheck(item3D, nPos, item.rotation, {
1809
- userData: {
1810
- itemId: null
1811
- }
1812
- }, item, _this2.context.catalog)) {
1813
- _this2.collisionSlide(item3D, originPos, layer, sVertices, tPos, item);
1814
- }
1815
- itemRect = _objectSpread(_objectSpread({}, allItemRect.cur), {}, {
1816
- pos: {
1817
- x: finalPosition.x,
1818
- y: finalPosition.y
1819
- },
1820
- rotRad: finalPosition.rotRad
1821
- });
1822
-
1823
- // if the room is fullfilled with items or can't calc snap correctly
1824
- if (!_export.GeometryUtils.validRect(itemRect, allRect)) {
1825
- // then place the item at cursor position
1826
- actions.itemsActions.updateDraggingItemChanged(Point.x, Point.y, selectedObject.layerID, selectedObject.itemID);
1827
- sPoint.set(Point.x, Point.y);
1828
- bNormalFlow = false;
1829
- }
1830
- if (bNormalFlow) {
1831
- actions.itemsActions.updateDraggingItemChanged(finalPosition.x, finalPosition.y, selectedObject.layerID, selectedObject.itemID);
1832
- actions.itemsActions.updateRotatingItemChanged(finalPosition.rot, selectedObject.layerID, selectedObject.itemID);
1833
- sPoint.set(finalPosition.x, finalPosition.y);
1834
- }
1835
- isInitialPhase = false;
1836
- _this2.handleAfterMovingItem();
1837
- };
1838
- this.mouseMoveEvent = function (event) {
1839
- event.preventDefault();
1840
- backsplashVisible = false;
1841
- var altitude = 0;
1842
- if (allItemRect && allItemRect.cur && allItemRect.cur.itemInfo !== undefined) {
1843
- var properties = allItemRect.cur.itemInfo.properties;
1844
- altitude = properties.getIn(['altitude', '_length']);
1845
- var unit = properties.getIn(['altitude', '_unit']) || 'in';
1846
- altitude = (0, _convertUnitsLite.convert)(altitude).from(unit).to(_this2.props.state.scene.unit);
1847
- }
1848
- if (_this2.props.state.mode === _constants.MODE_DRAWING_HOLE_3D) {
1849
- gridPlanOrigin = gridPlane.position;
1850
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1851
- camPos = camera.position;
1852
- if (!getIntersectWallPoint(event)) return;
1853
- var drawingSupport = _this2.props.state.drawingSupport;
1854
- if (!drawingSupport.has('currentID')) {
1855
- _this2.context.holesActions.updateDrawingHole3D(_this2.props.state.scene.selectedLayer, Point.x, Point.y);
1856
- sPoint.set(Point.x, Point.y);
1857
- } else {
1858
- var layerID = _this2.props.state.scene.selectedLayer;
1859
- var holeID = _this2.props.state.drawingSupport.get('currentID');
1860
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('WarningBox' + holeID);
1861
- prepareSnap(layer);
1862
-
1863
- // let {nx, ny, rot} = GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, allArea);
1864
- var nx = Point.x;
1865
- var ny = Point.y;
1866
- actions.holesActions.updateDrawingHole3D(layerID, nx, ny);
1867
- sPoint.set(nx, ny);
1868
- }
1869
- }
1870
- if (_this2.props.state.mode === _constants.MODE_DRAWING_ITEM_3D) {
1871
- // We need to set cam position since when MODE_DRAWING_ITEM_3D mouse down event
1872
- // is not emited so cam position is not valid
1873
- gridPlanOrigin = gridPlane.position;
1874
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1875
- camPos = camera.position;
1876
- getPoint(event, altitude);
1877
- if (Point.x > _this2.props.state.scene.width || Point.x < 0 || Point.y > _this2.props.state.scene.height || Point.y < 0) return;
1878
- _this2.getSelectedObject();
1879
- var _drawingSupport = _this2.props.state.drawingSupport;
1880
- if (!_drawingSupport.has('currentID')) {
1881
- _this2.context.itemsActions.updateDrawingItem(selectedObject.layerID, Point.x, Point.y);
1882
- sPoint.set(Point.x, Point.y);
1883
- } else {
1884
- var mX = Point.x - sPoint.x;
1885
- var mY = Point.y - sPoint.y;
1886
- var _layer = _this2.props.state.scene.getIn(['layers', selectedObject.layerID]);
1887
- var item3D = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1888
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('TransformBox');
1889
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('WarningBox' + selectedObject.itemID);
1890
- var item = _layer.getIn(['items', selectedObject.itemID]);
1891
- if (!item3D || !item) return;
1892
- if (item.counterTop.uri == '') item.counterTop.uri = _layer.counterTop.uri;
1893
- var sRot = item.rotation;
1894
- var originPos = item3D.position.clone();
1895
- var tPos = new Three.Vector2(mX + originPos.x, mY - originPos.z);
1896
- var sBounding = item3D.children[0].userData;
1897
- var swidth = sBounding.max.x - sBounding.min.x;
1898
- var sdepth = sBounding.max.z - sBounding.min.z;
1899
- var sVertices = _this2.getRectPoints(swidth, sdepth, tPos.clone(), sRot % 360 / 180 * Math.PI);
1900
- prepareSnap(_layer);
1901
- var _GeometryUtils$calcSn = _export.GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, allArea),
1902
- _nx = _GeometryUtils$calcSn.nx,
1903
- _ny = _GeometryUtils$calcSn.ny,
1904
- rot = _GeometryUtils$calcSn.rot;
1905
- var nPos = new Three.Vector2(_nx, _ny);
1906
- if (!_this2.collisionHoleCheck(item3D, nPos, item.rotation, {
1907
- userData: {
1908
- itemId: null
1909
- }
1910
- }, item, _this2.context.catalog)) {
1911
- _this2.collisionSlide(item3D, originPos, _layer, sVertices, tPos, item);
1912
- }
1913
- var polygonPoint = _export.GeometryUtils.getPoylgonPoints(_layer);
1914
- if (polygonPoint.length > 0) {
1915
- var PolygonSect = _export.GeometryUtils.ContainsPoint(polygonPoint, _nx, _ny);
1916
- if (!PolygonSect) {
1917
- var _GeometryUtils$calcCr2 = _export.GeometryUtils.calcCreateSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, polygonPoint),
1918
- cx = _GeometryUtils$calcCr2.cx,
1919
- cy = _GeometryUtils$calcCr2.cy,
1920
- crot = _GeometryUtils$calcCr2.crot;
1921
- _nx = cx;
1922
- _ny = cy;
1923
- rot = crot;
1924
- }
1925
- }
1926
- if (polygonPoint.length > 0) {
1927
- var isSect = _export.GeometryUtils.ContainsPoint(polygonPoint, _nx, _ny);
1928
- if (!isSect) return;
1929
- }
1930
- actions.itemsActions.updateDraggingItemChanged(_nx, _ny, selectedObject.layerID, selectedObject.itemID);
1931
- actions.itemsActions.updateRotatingItemChanged(rot, selectedObject.layerID, selectedObject.itemID);
1932
- sPoint.set(_nx, _ny);
1933
- _this2.handleAfterMovingItem();
1934
- }
1935
- }
1936
- if (bRotate) {
1937
- getPoint(event, altitude);
1938
- _this2.context.itemsActions.updateRotatingItem(Point.x, Point.y);
1939
- var _layer2 = _this2.props.state.scene.getIn(['layers', selectedObject.layerID]);
1940
- var _item4 = _layer2.items.getIn([selectedObject.itemID]);
1941
- var orginRot = _this2.props.state.rotatingSupport.get('originRotation');
1942
- angleTexture.image = createAngleObject((orginRot < 0 ? 360 - orginRot : orginRot) - _item4.rotation);
1943
- angleTexture.needsUpdate = true;
1944
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('WarningBox' + selectedObject.itemID);
1945
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('backsplash' + selectedObject.itemID);
1946
- actions.sceneActions.updateMovingState(false);
1947
- }
1948
- if (bMoveUP) {
1949
- _this2.context.itemsActions.updateItemsAltitude(selectedObject.layerID, selectedObject.itemID, event.movementY);
1950
- }
1951
- if (bMove) {
1952
- if ('holeID' in selectedObject) {
1953
- gridPlanOrigin = gridPlane.position;
1954
- gridMatrix.copy(gridPlane.matrixWorld).invert();
1955
- camPos = camera.position;
1956
- if (!getIntersectWallPoint(event)) return;
1957
- var draggingSupport = _this2.props.state.draggingSupport;
1958
- if (!draggingSupport.has('currentID')) {
1959
- _this2.context.holesActions.updateDraggingHole(Point.x, Point.y);
1960
- sPoint.set(Point.x, Point.y);
1961
- } else {
1962
- var _holeID = _this2.props.state.draggingSupport.get('currentID');
1963
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('WarningBox' + _holeID);
1964
- var _nx2 = Point.x;
1965
- var _ny2 = Point.y;
1966
- actions.holesActions.updateDraggingHole(_nx2, _ny2);
1967
- sPoint.set(_nx2, _ny2);
1968
- }
1969
- } else {
1970
- var _item3D2 = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
1971
- if (_item3D2 === undefined) return;
1972
- var _layer3 = _this2.props.state.scene.getIn(['layers', _item3D2.userData.layerId]);
1973
- var _item5 = _layer3.items.getIn([selectedObject.itemID]);
1974
- if (_item5.counterTop.uri == '') _item5.counterTop.uri = _layer3.counterTop.uri;
1975
- var _sRot2 = _item5.rotation;
1976
- var _mX = Point.x - sPoint.x;
1977
- var _mY = Point.y - sPoint.y;
1978
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('WarningBox' + selectedObject.itemID);
1979
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('backsplash' + selectedObject.itemID);
1980
- prepareSnap(_layer3);
1981
- getPoint(event, altitude);
1982
- var _originPos = _item3D2.position.clone();
1983
- var _tPos4 = new Three.Vector2(_mX + _originPos.x, _mY - _originPos.z);
1984
- var _sBounding2 = _item3D2.children[0].userData;
1985
- var _swidth = _sBounding2.max.x - _sBounding2.min.x;
1986
- var _sdepth = _sBounding2.max.z - _sBounding2.min.z;
1987
- var _sVertices = _this2.getRectPoints(_swidth, _sdepth, _tPos4.clone(), _sRot2 % 360 / 180 * Math.PI);
1988
- var _GeometryUtils$calcSn2 = _export.GeometryUtils.calcSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, allArea),
1989
- _nx3 = _GeometryUtils$calcSn2.nx,
1990
- _ny3 = _GeometryUtils$calcSn2.ny,
1991
- _rot = _GeometryUtils$calcSn2.rot;
1992
- var _nPos = new Three.Vector2(_nx3, _ny3);
1993
- if (!_this2.collisionHoleCheck(_item3D2, _nPos, _item5.rotation, {
1994
- userData: {
1995
- itemId: null
1996
- }
1997
- }, _item5, _this2.context.catalog)) {
1998
- _this2.collisionSlide(_item3D2, _originPos, _layer3, _sVertices, _tPos4, _item5);
1999
- //return;
2000
- }
2001
- var _polygonPoint = _export.GeometryUtils.getPoylgonPoints(_layer3);
2002
- if (_polygonPoint.length > 0) {
2003
- var _PolygonSect = _export.GeometryUtils.ContainsPoint(_polygonPoint, _nx3, _ny3);
2004
- if (!_PolygonSect) {
2005
- var _GeometryUtils$calcCr3 = _export.GeometryUtils.calcCreateSnap(allItemRect, allItemSnap, allLineRects, allLineSnap, allRect, Point.x, Point.y, _polygonPoint),
2006
- _cx3 = _GeometryUtils$calcCr3.cx,
2007
- _cy = _GeometryUtils$calcCr3.cy,
2008
- _crot = _GeometryUtils$calcCr3.crot;
2009
- _nx3 = _cx3;
2010
- _ny3 = _cy;
2011
- _rot = _crot;
2012
- }
2013
- }
2014
- var polygon = _export.GeometryUtils.getPoylgonPoints(_layer3);
2015
- if (polygon.length > 0) {
2016
- var Sect = _export.GeometryUtils.ContainsPoint(polygon, _nx3, _ny3);
2017
- if (!Sect) return;
2018
- }
2019
- actions.itemsActions.updateDraggingItemChanged(_nx3, _ny3, selectedObject.layerID, selectedObject.itemID);
2020
- actions.itemsActions.updateRotatingItemChanged(_rot, selectedObject.layerID, selectedObject.itemID);
2021
- sPoint.set(_nx3, _ny3);
2022
- _this2.handleAfterMovingItem();
2023
- }
2024
- }
2025
- if (!bMove && !bRotate && !bMoveUP) {
2026
- var curPos = {
2027
- x: event.offsetX / _this2.width * 2 - 1,
2028
- y: -(event.offsetY / _this2.height) * 2 + 1
2029
- };
2030
- raycaster.setFromCamera(curPos, camera);
2031
- rayDirection = raycaster.ray.direction;
2032
- rayDirection = rayDirection.normalize();
2033
- var meshes = (0, _objectsUtils.getAllMeshes)(toIntersect);
2034
- var intersects = raycaster.intersectObjects(meshes, true);
2035
- var _i11;
2036
- if (intersects.length > 0 && !isNaN(intersects[0].distance)) {
2037
- for (_i11 = 0; _i11 < intersects.length; _i11++) {
2038
- if (intersects[_i11].object.name === 'warningObj') break;
2039
- }
2040
- if (intersects[_i11] !== undefined) {
2041
- var distance = Math.sqrt(Math.pow((intersects[_i11].uv.x - 0.5) * 50, 2) + Math.pow((intersects[_i11].uv.y - 0.75) * 100, 2));
2042
- if (distance <= 20) {
2043
- var infoPos = {
2044
- x: 0,
2045
- y: 0
2046
- };
2047
- if (event.offsetY > 150) {
2048
- infoPos.y = event.offsetY - 60;
2049
- } else {
2050
- infoPos.y = event.offsetY + 10;
2051
- }
2052
- if (event.offsetX > _this2.width - 650) {
2053
- infoPos.x = event.offsetX - 650;
2054
- } else {
2055
- infoPos.x = event.offsetX;
2056
- }
2057
- if (!(0, _helper.isEmpty)(document.getElementById('warning_box_2d'))) {
2058
- document.getElementById('warning_box_2d').style.display = 'flex';
2059
- document.getElementById('warning_box_2d').style.top = "".concat(infoPos.y, "px");
2060
- document.getElementById('warning_box_2d').style.left = "".concat(infoPos.x, "px");
2061
- return;
2062
- }
2063
- }
2064
- }
2065
- }
2066
- }
2067
- if (!(0, _helper.isEmpty)(document.getElementById('warning_box_2d'))) document.getElementById('warning_box_2d').style.display = 'none';
2068
- };
2069
-
2070
- // handle snapBox, distArray, backsplash
2071
- this.handleAfterMovingItem = function () {
2072
- var layer = _this2.props.state.scene.getIn(['layers', selectedObject.layerID]);
2073
- var item3D = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
2074
- (0, _sceneCreator.getDistances)(layer);
2075
- var pointArray = [],
2076
- cnt = 0;
2077
- pointArray.push([_sceneCreator.fVLine[0].userData.distance, 90]);
2078
- pointArray.push([_sceneCreator.fVLine[1].userData.distance, -90]);
2079
- pointArray.push([_sceneCreator.fVLine[2].userData.distance, 180]);
2080
- pointArray.push([_sceneCreator.fVLine[3].userData.distance, 0]);
2081
- pointArray.forEach(function (pointElement, index) {
2082
- if (pointElement[0] == undefined) pointArray[index][0] = 0;
2083
- });
2084
- pointArray.forEach(function (pointElement) {
2085
- if (pointElement[0] == 0) cnt++;
2086
- });
2087
- if (cnt == 4 || cnt == 3) {
2088
- pointArray[0][0] = 100;
2089
- pointArray[1][0] = 100;
2090
- }
2091
- actions.itemsActions.storeDistArray(selectedObject.layerID, selectedObject.itemID, pointArray);
2092
- var minDis = _sceneCreator.fVLine[0].userData.distance;
2093
- var snapObj = _sceneCreator.fVLine[0];
2094
- var iPos = item3D.position.clone();
2095
- var snapDis = Math.sqrt((iPos.x - targetPoint.x) * (iPos.x - targetPoint.x) + (iPos.z - targetPoint.z) * (iPos.z - targetPoint.z));
2096
- if (snapDis >= 100 && snapObj != null) {
2097
- removeSnapBox();
2098
- backsplashVisible = false;
2099
- }
2100
- for (var _i12 = 1; _i12 < _sceneCreator.fVLine.length; _i12++) {
2101
- if (minDis > _sceneCreator.fVLine[_i12].userData.distance) {
2102
- minDis = _sceneCreator.fVLine[_i12].userData.distance;
2103
- snapObj = _sceneCreator.fVLine[_i12];
2104
- }
2105
- }
2106
- if (snapBox == null) {
2107
- snapFlag = false;
2108
- }
2109
- actions.sceneActions.updateMovingState(false);
2110
- if (minDis < snapDelta && !snapFlag) {
2111
- _this2.snap(snapObj, layer);
2112
- snapFlag = true;
2113
- (0, _sceneCreator.getDistances)(layer);
2114
- var _i13 = 0;
2115
- for (_i13 = 0; _i13 < _sceneCreator.fVLine.length; _i13++) {
2116
- if (_sceneCreator.fVLine[_i13].userData.distance < snapDelta) {
2117
- break;
2118
- }
2119
- }
2120
- if (_i13 === _sceneCreator.fVLine.length) backsplashVisible = false;else backsplashVisible = true;
2121
- }
2122
- actions.itemsActions.setBacksplashVisible(selectedObject.itemID, backsplashVisible);
2123
- };
2124
- this.onkeydown = function (event) {
2125
- if (_this2.props.keyDownEnable && !(0, _helper.isElevationView)(state.mode)) {
2126
- switch (event.keyCode) {
2127
- case 27:
2128
- // escape key
2129
- isSelected = false;
2130
- _this2.context.projectActions.unselectAll();
2131
- _this2.context.itemsActions.removeReplacingSupport();
2132
- _this2.context.itemsActions.setMoveStatus(false);
2133
- _this2.context.itemsActions.setRotateStatus(false);
2134
- bMoveUP = false;
2135
- removeSnapBox();
2136
- break;
2137
- case 65:
2138
- // w (move forward)
2139
- pivot.rotation.y -= 0.03;
2140
- break;
2141
- case 68:
2142
- // s (move backward)
2143
- pivot.rotation.y += 0.03;
2144
- break;
2145
- case 83:
2146
- // a (look left)
2147
- pivot.rotation.x += 0.03;
2148
- break;
2149
- case 87:
2150
- // d (look left)
2151
- pivot.rotation.x -= 0.03;
2152
- break;
2153
- case 37:
2154
- // left (move forward)
2155
- planData.plan.position.x += 10;
2156
- planData.grid.position.x += 10;
2157
- break;
2158
- case 38:
2159
- // Up (move backward)
2160
- planData.plan.position.y += 10;
2161
- planData.grid.position.y += 10;
2162
- break;
2163
- case 39:
2164
- // right arrow (look left)
2165
- planData.plan.position.x -= 10;
2166
- planData.grid.position.x -= 10;
2167
- break;
2168
- case 40:
2169
- // down arrow (look left)
2170
- planData.plan.position.y -= 10;
2171
- planData.grid.position.y -= 10;
2172
- break;
2173
- }
2174
- }
2175
- };
2176
- this.handleKeyDown = function (event) {
2177
- _this2.onkeydown(event);
2178
- };
2179
- this.getSelectedObject = function () {
2180
- var layerID = _this2.props.state.scene.selectedLayer;
2181
- var itemID = _this2.props.state.drawingSupport.get('currentID');
2182
- selectedObject = {
2183
- layerID: layerID,
2184
- itemID: itemID
2185
- };
2186
- };
2187
-
2188
- // Renderer & Event listener
2189
-
2190
- this.renderer.setClearColor(new Three.Color(SharedStyle.COLORS.white)); // 3D background color
2191
- this.renderer.setSize(this.width, this.height);
2192
- if (!this.props.downloadFlag) {
2193
- this.renderer.domElement.addEventListener('mousedown', this.mouseDownEvent);
2194
- this.renderer.domElement.addEventListener('mouseup', this.mouseUpEvent);
2195
- this.renderer.domElement.addEventListener('mouseenter', this.mouseEnterEvent);
2196
- this.renderer.domElement.addEventListener('mousemove', this.mouseMoveEvent);
2197
- window.addEventListener('keydown', this.onkeydown);
2198
- window.SPKeyDown = this.handleKeyDown;
2199
- window.tDKeyDown = this.handleKeyDown;
2200
- }
2201
-
2202
- // Add the output of the renderer to the html element
2203
- var canvasWrapper = this.canvasWrapperRef.current;
2204
- canvasWrapper && canvasWrapper.appendChild(this.renderer.domElement);
2205
-
2206
- //
2207
-
2208
- if (scene.getIn(['layers', scene.selectedLayer, 'selected', 'items']).size != 0) {
2209
- // if selected Object
2210
- isSelected = true;
2211
- selectedObject.layerID = scene.selectedLayer;
2212
- selectedObject.itemID = scene.getIn(['layers', scene.selectedLayer, 'selected', 'items']).toJS()[0];
2213
- setTimeout(function () {
2214
- try {
2215
- currentObject = planData.sceneGraph.layers[selectedObject.layerID].items[selectedObject.itemID];
2216
- if ((0, _util.isUndefined)(currentObject)) return;
2217
- var selItem = _this2.props.state.scene.layers.get(selectedObject.layerID).items.get(selectedObject.itemID);
2218
- var itemPos = currentObject.position.clone();
2219
- toolObj.position.set(planData.plan.position.x + itemPos.x, selItem.category === 'lighting' ? -planData.plan.position.y - selItem.properties.get('height').get('length') : planData.plan.position.y + currentObject.children[0].position.y, planData.plan.position.z + itemPos.z);
2220
- scene3D.add(toolObj);
2221
- _this2.setState({
2222
- toolObj: toolObj
2223
- });
2224
- } catch (err) {
2225
- console.log('selectedObject : ' + JSON.stringify(selectedObject) + '\nError: ' + err);
2226
- }
2227
- }, 2000);
2228
- }
2229
-
2230
- // Scene functions
2231
-
2232
- function init() {
2233
- clock = new Three.Clock();
2234
- scene3D = new Three.Scene();
2235
- if ((0, _helper.isElevationView)(state.mode)) scene3D.background = new Three.Color(0xffffff);
2236
- // change color about v1: 0x8791AB, v2: 0xC2C2C2, v3: 0xC3CADC
2237
- else scene3D.background = new Three.Color(0xe4ebfe); // change color about v1: 0x8791AB, v2: 0xC2C2C2, v3: 0xC3CADC
2238
- // scene3D.fog = new Three.Fog(0xC3CADC, 2000, 3500);
2239
- window.scene3D = scene3D;
2240
- // Camera
2241
- if ((0, _helper.isElevationView)(state.mode)) {
2242
- // In elevation view, set Orthographic camera's position, angle and rotation about selected line
2243
- var layers = scene.layers;
2244
- var selectedLayer = layers.get(scene.selectedLayer);
2245
- var ceilHeight = (0, _convertUnitsLite.convert)(selectedLayer.ceilHeight).from(selectedLayer.unit).to(scene.unit);
2246
- var lines = [];
2247
- var selectedLine = selectedLayer.lines.get(selectedLayer.selected.lines.toJS()[0]);
2248
- var vertex0 = selectedLayer.vertices.get(selectedLine.vertices.get(0));
2249
- var vertex1 = selectedLayer.vertices.get(selectedLine.vertices.get(1));
2250
- var x1 = vertex0.x,
2251
- y1 = vertex0.y;
2252
- var x2 = vertex1.x,
2253
- y2 = vertex1.y;
2254
- if (_export.GeometryUtils.compareVertices(vertex0, vertex1) >= 0 && vertex0.x !== vertex1.x) {
2255
- x1 = vertex1.x;
2256
- y1 = vertex1.y;
2257
- x2 = vertex0.x;
2258
- y2 = vertex0.y;
2259
- }
2260
- selectedLayer.lines.toArray().forEach(function (line) {
2261
- if (line.id === selectedLine) {
2262
- var data = line.toJS();
2263
- data = _objectSpread(_objectSpread({}, data), {}, {
2264
- l0: {
2265
- x: x1,
2266
- y: y1
2267
- },
2268
- l1: {
2269
- x: x2,
2270
- y: y2
2271
- }
2272
- });
2273
- lines.push(data);
2274
- }
2275
- });
2276
- var lineLength = _export.GeometryUtils.pointsDistance(x1, y1, x2, y2);
2277
- self.setState({
2278
- lineLength: lineLength
2279
- });
2280
- var cameraRect = (0, _helper.handleCamRect)(self.width, self.height, ceilHeight, lineLength);
2281
- camera = new Three.OrthographicCamera(-cameraRect.width / 2, cameraRect.width / 2, cameraRect.height / 2, -cameraRect.height / 2, 1, 1000);
2282
- var angle = Math.atan((y1 - y2) / (x1 - x2));
2283
- var r = 300;
2284
- if (Math.abs(angle) === Math.PI / 2) {
2285
- camera.position.set((x1 + x2) / 2 - Math.sin(angle) * r, ceilHeight / 2, -((y1 + y2) / 2 - Math.cos(angle) * r));
2286
- camera.rotation.set(0, -angle, 0);
2287
- } else if (vertex0.x > vertex1.x) {
2288
- camera.position.set((x1 + x2) / 2 + Math.sin(angle + Math.PI) * r, ceilHeight / 2, -((y1 + y2) / 2 - Math.cos(angle + Math.PI) * r));
2289
- camera.rotation.set(0, angle + Math.PI, 0);
2290
- } else {
2291
- camera.position.set((x1 + x2) / 2 + Math.sin(angle) * r, ceilHeight / 2, -((y1 + y2) / 2 - Math.cos(angle) * r));
2292
- camera.rotation.set(0, angle, 0);
2293
- }
2294
- } else {
2295
- var aspectRatio = self.width / self.height;
2296
- camera = new Three.PerspectiveCamera(45, aspectRatio, 1, 300000);
2297
- camera.position.set(0, 0, 1);
2298
- }
2299
- camera.layers.enable(1);
2300
- function loadENV() {
2301
- new _RGBELoader.RGBELoader().load('/assets/brown_photostudio_02_1k.hdr', function (texture) {
2302
- texture.mapping = Three.EquirectangularReflectionMapping;
2303
- scene3D.environment = texture;
2304
- texture.dispose();
2305
- });
2306
- }
2307
- // Camera Controls
2308
- if (!(0, _helper.isElevationView)(state.mode)) {
2309
- cameraControls = new _cameraControls["default"](camera, self.renderer.domElement);
2310
- cameraControls.dollyToCursor = true;
2311
- cameraControls.infinityDolly = true;
2312
- cameraControls.minDistance = 50;
2313
- cameraControls.maxDistance = Infinity;
2314
- cameraControls.zoomSpeed = 1;
2315
- loadENV();
2316
- }
2317
- scene3D.add(planData.plan);
2318
- scene3D.add(planData.grid);
2319
- scene3D.add(camera);
2320
- if ((0, _helper.isElevationView)(state.mode)) {
2321
- planData.cam.add(camera);
2322
- scene3D.add(planData.cam);
2323
- } else {
2324
- pivot = new Three.Object3D();
2325
- pivot.add(camera);
2326
- scene3D.add(pivot);
2327
- }
2328
-
2329
- // LIGHT
2330
-
2331
- var light = new Three.AmbientLight(0xbfbfbf, 0.9); // soft white light
2332
- }
2333
- function render() {
2334
- var delta = clock.getDelta(); // Get time delta for smooth updates
2335
- if (!(0, _helper.isElevationView)(state.mode)) cameraControls.update(delta);
2336
- for (var _i14 = 0; _i14 < lights.length; _i14++) {
2337
- lights[_i14].light.position.set(planData.plan.position.x + lights[_i14].x, planData.plan.position.y + lights[_i14].height - 10, planData.plan.position.z - lights[_i14].y);
2338
- lights[_i14].target.position.set(planData.plan.position.x + lights[_i14].x, planData.plan.position.y, planData.plan.position.z - lights[_i14].y);
2339
- }
2340
- camera.updateMatrix();
2341
- camera.updateMatrixWorld();
2342
- for (var elemID in planData.sceneGraph.LODs) {
2343
- planData.sceneGraph.LODs[elemID].update(camera);
2344
- }
2345
- if (snapBox !== null) {
2346
- if (snapAnimI >= 15) {
2347
- if ('x' in targetPoint) snapBox.position.set(targetPoint.x, snapBox.position.y, targetPoint.z);
2348
- snapFlag = false;
2349
- t_i++;
2350
- } else {
2351
- if (snapAnimI == 0) {
2352
- targetCRotation = (targetRot / 180 * Math.PI - snapBox.rotation.y + Math.PI) * 180 / Math.PI % 360;
2353
- if (targetCRotation > 180) targetCRotation -= 360;
2354
- if (targetCRotation < -180) targetCRotation += 360;
2355
- targetCRotation = targetCRotation / 180 * Math.PI;
2356
- }
2357
- if (snapAnimI < 10) {
2358
- snapBox.rotateY(targetCRotation / 10);
2359
- } else {
2360
- snapBox.position.set(snapBox.position.clone().x - targetUVec.x / 10, snapBox.position.clone().y - targetUVec.y / 10, snapBox.position.clone().z - targetUVec.z / 10);
2361
- }
2362
- snapAnimI++;
2363
- }
2364
- }
2365
- if (t_i === 20) {
2366
- //stop snap after 5s
2367
- removeSnapBox();
2368
- }
2369
-
2370
- // hide hole if wall is not visible
2371
- var layerID = self.props.state.scene.selectedLayer;
2372
- var layer = self.props.state.scene.layers.get(layerID);
2373
- layer.holes.forEach(function (data) {
2374
- var line = planData.sceneGraph.layers[layerID].lines[data.line];
2375
- var hole = planData.sceneGraph.layers[layerID].holes[data.id];
2376
- if (line instanceof Three.Object3D && !line.isMesh) {
2377
- line = line.children[0].children[0];
2378
- // index(faces) of the line
2379
- var indexAttribute = line.geometry.getIndex();
2380
- var firstFaceIndices = undefined;
2381
- if (indexAttribute && indexAttribute.length > 0) {
2382
- [indexAttribute.getX(0), indexAttribute.getX(1), indexAttribute.getX(2)], (0, _readOnlyError2["default"])("firstFaceIndices");
2383
- }
2384
- if (firstFaceIndices == undefined) return;
2385
- // normal vector of the line
2386
- var normalAttribute = line.geometry.attributes.normal;
2387
- var normal = new Three.Vector3().fromBufferAttribute(normalAttribute, 0).clone();
2388
- normal = normal.applyMatrix4(line.matrixWorld).sub(new Three.Vector3(0, 0, 0).applyMatrix4(line.matrixWorld)).normalize();
2389
- var vertices = layer.lines.get(data.line).vertices.toJS();
2390
- var vertex1 = layer.vertices.get(vertices[0]);
2391
- var vertex2 = layer.vertices.get(vertices[1]);
2392
- var cX = (vertex1.x + vertex2.x) / 2;
2393
- var cY = (vertex1.y + vertex2.y) / 2;
2394
- var posVec = new Three.Vector3(cX, 150, -cY);
2395
- posVec = posVec.add(planData.plan.position.clone());
2396
- var cameraLine = camera.position.clone().sub(posVec);
2397
- if (hole) {
2398
- hole.traverse(function (child) {
2399
- if (child.isMesh) {
2400
- child.material.opacity = cameraLine.dot(normal) > 0 ? 1 : 0;
2401
- child.material.transparent = cameraLine.dot(normal) > 0 ? false : true;
2402
- child.material.needsUpdate = true;
2403
- }
2404
- });
2405
- }
2406
- }
2407
- // /////////////////////////////////////
2408
- });
2409
- if (scene3D && camera) {
2410
- if (planData.elevationGroup) {
2411
- planData.elevationGroup.visible = true;
2412
- self.renderer.render(scene3D, camera);
2413
- self.renderer.autoClearDepth = false;
2414
- planData.elevationGroup.visible = false;
2415
- // console.log('---originalScene:', scene3D)
2416
- self.renderer.render(scene3D, camera);
2417
- self.renderer.autoClearDepth = true;
2418
- } else {
2419
- self.renderer.render(scene3D, camera);
2420
- }
2421
- }
2422
- self.renderingID = requestAnimationFrame(render);
2423
- if (self.props.downloadFlag) {
2424
- if (self.state.waitForRender > 0) {
2425
- self.state.waitForRender++;
2426
- if (self.state.waitForRender > 2) {
2427
- self.setState({
2428
- isLoading: false,
2429
- waitForRender: 0
2430
- });
2431
- if ((0, _helper.isElevationView)(self.props.state.mode)) {
2432
- setTimeout(function () {
2433
- self.props.setIsLoadingElevation('front', false);
2434
- }, 100);
2435
- }
2436
- self.renderer.domElement.style.display = 'block';
2437
- }
2438
- }
2439
- }
2440
- }
2441
-
2442
- //
2443
-
2444
- window.planData = planData;
2445
- this.planData = planData;
2446
- this.camera = camera;
2447
- this.cameraControls = cameraControls;
2448
- this.scene3D = scene3D;
2449
- prepareSnap(layer);
2450
- }
2451
- }, {
2452
- key: "componentWillUnmount",
2453
- value: function componentWillUnmount() {
2454
- cancelAnimationFrame(this.renderingID);
2455
- if (!(0, _helper.isElevationView)(this.props.state.mode)) {
2456
- if (this.cameraControls !== undefined) this.cameraControls.dispose();
2457
- }
2458
- if (!this.props.downloadFlag) {
2459
- this.renderer.domElement.removeEventListener('mousedown', this.mouseDownEvent);
2460
- this.renderer.domElement.removeEventListener('mouseup', this.mouseUpEvent);
2461
- }
2462
- (0, _threeMemoryCleaner.disposeScene)(this.scene3D);
2463
- this.scene3D.remove(this.planData.plan);
2464
- this.scene3D.remove(this.planData.grid);
2465
- this.scene3D = null;
2466
- this.planData = null;
2467
- this.camera = null;
2468
- this.cameraControls = null;
2469
- this.renderer.renderLists.dispose();
2470
- }
2471
- }, {
2472
- key: "componentDidUpdate",
2473
- value: function componentDidUpdate(prevProps) {
2474
- var _this4 = this;
2475
- // Early return if downloadFlag and state are unchanged or scene is empty
2476
- if (this.props.downloadFlag && (0, _immutablediff["default"])(prevProps.state, this.props.state).toJS().length == 0 || (0, _helper.isEmpty)(this.props.state.scene)) {
2477
- return;
2478
- }
2479
- var _this$props = this.props,
2480
- width = _this$props.width,
2481
- height = _this$props.height;
2482
- var selectedLayer = this.props.state.getIn(['scene', 'layers', this.props.state.scene.selectedLayer]);
2483
- var ceilHeight = (0, _convertUnitsLite.convert)(selectedLayer.ceilHeight).from(selectedLayer.unit).to(this.props.state.scene.unit);
2484
- var actions = {
2485
- areaActions: this.context.areaActions,
2486
- holesActions: this.context.holesActions,
2487
- itemsActions: this.context.itemsActions,
2488
- sceneActions: this.context.sceneActions,
2489
- linesActions: this.context.linesActions,
2490
- projectActions: this.context.projectActions,
2491
- catalog: this.context.catalog
2492
- };
2493
- var isLoadingCabinet = this.props.state.scene.isLoadingCabinet;
2494
- if (this.state.isLoadingCabinet !== isLoadingCabinet) this.setState({
2495
- isLoadingCabinet: isLoadingCabinet
2496
- });
2497
- this.width = width;
2498
- this.height = height;
2499
- var allLines;
2500
- var allLineRects;
2501
- var allItemRect;
2502
-
2503
- // handle camera setting
2504
- switch (prevProps.state.mode) {
2505
- case _constants.MODE_ELEVATION_VIEW:
2506
- // when Elevation mode (camera: Orthographic)
2507
- var cameraRect = (0, _helper.handleCamRect)(width, height, ceilHeight, this.state.lineLength);
2508
- // camera size
2509
- this.camera.left = -cameraRect.width / 2;
2510
- this.camera.right = cameraRect.width / 2;
2511
- this.camera.top = cameraRect.height / 2;
2512
- this.camera.bottom = -cameraRect.height / 2;
2513
- //camera position
2514
- this.camera.position.y = ceilHeight / 2;
2515
- break;
2516
- case _constants.MODE_3D_VIEW:
2517
- // when 3D mode (camera: Perspective)
2518
- this.camera.aspect = width / height;
2519
- break;
2520
- }
2521
- this.camera.updateProjectionMatrix();
2522
- var data = this.props.state.scene;
2523
- var layer = data.getIn(['layers', data.selectedLayer]);
2524
- var self = this;
2525
- function implementBacksplash() {
2526
- if ((0, _helper.isElevationView)(self.props.state.mode)) return;
2527
- var allItems = _export.GeometryUtils.getAllItemSpecified(self.props.state.scene, actions.catalog, _constants.BASE_CABINET_LAYOUTPOS);
2528
- var i,
2529
- items = [];
2530
- for (i = 0; i < allItems.others.length; i++) items.push(allItems.others[i]);
2531
- if (allItems.cur) items.push(allItems.cur);
2532
- for (i = 0; i < items.length; i++) {
2533
- var calcRect = _export.GeometryUtils.getCalcRectFromItem3D(items[i]);
2534
- var visible = _export.GeometryUtils.isSnappedLine(calcRect, allLineRects);
2535
- actions.itemsActions.setBacksplashVisible(items[i].itemInfo.id, visible);
2536
- (0, _sceneCreator.createBacksplash)(items[i], self.props.state.scene.getIn(['layers', self.props.state.scene.selectedLayer]), planData, self.props.state.scene);
2537
- }
2538
- }
2539
- function implementWarningBox() {
2540
- var holeItems = _export.GeometryUtils.getHoleItems(layer);
2541
- var i,
2542
- items = [];
2543
- for (i = 0; i < allItemRect.others.length; i++) items.push(allItemRect.others[i]);
2544
- if (allItemRect.cur) items.push(allItemRect.cur);
2545
- for (i = 0; i < items.length; i++) (0, _sceneCreator.checkCabinetOverlap)({
2546
- x: items[i].pos.x,
2547
- y: items[i].pos.y
2548
- }, items[i], holeItems, planData);
2549
- }
2550
- var prepareSnapSpec = function prepareSnapSpec(layer) {
2551
- allLines = _export.GeometryUtils.getAllLines(layer);
2552
- allLineRects = _export.GeometryUtils.buildRectFromLines(layer, allLines);
2553
- allItemRect = _export.GeometryUtils.getAllItemSpecified(_this4.props.state.scene, actions.catalog, [_constants.WALL_CABINET_LAYOUTPOS, _constants.TALL_CABINET_LAYOUTPOS]);
2554
- };
2555
- var layer1 = this.props.state.scene.getIn(['layers', data.selectedLayer]);
2556
- if (this.state.showflag) {
2557
- prepareSnapSpec(layer);
2558
- implementBacksplash();
2559
- implementWarningBox();
2560
- this.setState({
2561
- showflag: false
2562
- });
2563
- }
2564
- if (this.props.state.scene !== prevProps.state.scene || this.props.state.doorStyle && this.props.state.doorStyle.get('name') !== prevProps.state.doorStyle.get('name')) {
2565
- var changedValues = (0, _immutablediff["default"])(prevProps.state.scene, this.props.state.scene);
2566
- prepareSnapSpec(layer);
2567
- if (this.props.state.doorStyle && this.props.state.doorStyle.get('name') === prevProps.state.doorStyle.get('name')) {
2568
- self.setState({
2569
- isLoading: true
2570
- });
2571
- if (self.props.downloadFlag) {
2572
- self.setState({
2573
- waitForRender: 0
2574
- });
2575
- switch (self.props.state.mode) {
2576
- case _constants.MODE_ELEVATION_VIEW:
2577
- self.props.setIsLoadingElevation('front', true);
2578
- break;
2579
- case _constants.MODE_3D_VIEW:
2580
- self.props.setIsLoading3D(true);
2581
- break;
2582
- }
2583
- }
2584
- self.renderer.domElement.style.display = 'none';
2585
- }
2586
- if (this.props.state.scene.showfg == true) {
2587
- implementBacksplash();
2588
- implementWarningBox();
2589
- } else {
2590
- (0, _sceneCreator.deleteSpecifiedMeshObjects)('TransformBox');
2591
- }
2592
- var _this$state = this.state,
2593
- toolObj = _this$state.toolObj,
2594
- angleObj = _this$state.angleObj;
2595
- var _updateScene = (0, _sceneCreator.updateScene)(this.planData, this.props.state.scene, prevProps.state.scene, changedValues.toJS(), actions, this.context.catalog, this.props.state.mode, toolObj, angleObj, this.props.state.draggingSupport),
2596
- promise = _updateScene.promise;
2597
- self.setState();
2598
- promise.then(function (p1Value) {
2599
- self.setState({
2600
- isLoading: false
2601
- });
2602
- self.props.downloadFlag && self.setState({
2603
- waitForRender: 1
2604
- });
2605
- self.renderer.domElement.style.display = 'block';
2606
- });
2607
- if (this.props.state.getIn(['scene', 'isEndDragging'])) {
2608
- this.props.state.setIn(['scene', 'isEndDragging'], false);
2609
- }
2610
- }
2611
- this.renderer.setSize(width, height);
2612
- }
2613
- }, {
2614
- key: "render",
2615
- value: function render() {
2616
- var _this$state2 = this.state,
2617
- isLoading = _this$state2.isLoading,
2618
- isLoadingCabinet = _this$state2.isLoadingCabinet;
2619
- if (isLoading) {
2620
- if (this.props.downloadFlag) {
2621
- this.renderer.domElement.style.display = 'none';
2622
- return /*#__PURE__*/_react["default"].createElement("div", {
2623
- style: {
2624
- alignItems: ' center',
2625
- width: this.props.width,
2626
- height: this.props.height,
2627
- display: 'inline-flex',
2628
- justifyContent: 'center'
2629
- }
2630
- }, /*#__PURE__*/_react["default"].createElement("img", {
2631
- style: {
2632
- width: '70px',
2633
- height: '70px',
2634
- animation: 'spin 2s linear infinite'
2635
- },
2636
- src: '/assets/img/loading/loading.gif',
2637
- alt: "img"
2638
- }));
2639
- } else {
2640
- document.getElementById('front') && (document.getElementById('front').style.display = 'none');
2641
- this.renderer.domElement.style.display = 'none';
2642
- return /*#__PURE__*/_react["default"].createElement("div", {
2643
- style: {
2644
- textAlign: 'center',
2645
- width: '100%'
2646
- }
2647
- }, /*#__PURE__*/_react["default"].createElement("img", {
2648
- style: {
2649
- animation: 'spin 2s linear infinite',
2650
- position: "absolute",
2651
- top: "50%",
2652
- width: '70px',
2653
- height: '70px'
2654
- },
2655
- src: '/assets/img/loading/loading.gif',
2656
- alt: "img"
2657
- }));
2658
- }
2659
- } else if (isLoadingCabinet) {
2660
- this.renderer.domElement.style.pointerEvents = 'none';
2661
- document.getElementById('front') && (document.getElementById('front').style.display = 'none');
2662
- this.renderer.domElement.style.opacity = '0.4';
2663
- return /*#__PURE__*/_react["default"].createElement("div", {
2664
- style: {
2665
- textAlign: 'center',
2666
- width: '100%'
2667
- }
2668
- }, /*#__PURE__*/_react["default"].createElement("img", {
2669
- style: {
2670
- animation: 'spin 2s linear infinite',
2671
- position: "absolute",
2672
- top: "50%",
2673
- width: '70px',
2674
- height: '70px'
2675
- },
2676
- src: '/assets/img/loading/loading.gif',
2677
- alt: "img"
2678
- }));
2679
- } else {
2680
- this.renderer.domElement.style.pointerEvents = 'auto';
2681
- this.renderer.domElement.style.opacity = '1';
2682
- !this.props.downloadFlag && document.getElementById('front') && (document.getElementById('front').style.display = 'block');
2683
- return /*#__PURE__*/_react["default"].createElement('div', {
2684
- ref: this.canvasWrapperRef
2685
- });
2686
- }
2687
- }
2688
- }]);
2689
- }(_react["default"].Component);
2690
- (0, _defineProperty2["default"])(Scene3DViewer, "contextType", _AppContext["default"]);
2691
- Scene3DViewer.propTypes = {
2692
- state: _propTypes["default"].object.isRequired,
2693
- width: _propTypes["default"].number.isRequired,
2694
- height: _propTypes["default"].number.isRequired,
2695
- replaceCabinet: _propTypes["default"].func.isRequired
2696
- };
2697
- module.exports = exports.default;