kitchen-simulator 5.10.1-react.18 → 5.10.2-react.18

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