kitchen-simulator 1.0.0-DIY-1119

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