kitchen-simulator 2.0.0 → 2.0.1-dot-color

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 (1165) hide show
  1. package/README.md +24 -1
  2. package/es/@history.js +2 -0
  3. package/es/AppContext.js +3 -0
  4. package/es/LiteKitchenConfigurator.js +480 -0
  5. package/es/LiteRenderer.js +503 -0
  6. package/es/actions/area-actions.js +14 -0
  7. package/es/actions/export.js +36 -0
  8. package/es/actions/groups-actions.js +89 -0
  9. package/es/actions/holes-actions.js +119 -0
  10. package/es/actions/items-actions.js +318 -0
  11. package/es/actions/lines-actions.js +81 -0
  12. package/es/actions/project-actions.js +286 -0
  13. package/es/actions/scene-actions.js +33 -0
  14. package/es/actions/vertices-actions.js +27 -0
  15. package/es/actions/viewer2d-actions.js +58 -0
  16. package/es/actions/viewer3d-actions.js +23 -0
  17. package/es/analytics/ga4.js +188 -0
  18. package/es/analytics/posthog.js +60 -0
  19. package/es/assets/Window.hdr +2100 -0
  20. package/es/assets/brown_photostudio_02_1k.hdr +0 -0
  21. package/es/assets/fonts/Rene Bieder Milliard Black Italic.woff +0 -0
  22. package/es/assets/fonts/Rene Bieder Milliard Black.woff +0 -0
  23. package/es/assets/fonts/Rene Bieder Milliard Bold Italic.woff +0 -0
  24. package/es/assets/fonts/Rene Bieder Milliard Bold.woff +0 -0
  25. package/es/assets/fonts/Rene Bieder Milliard Book Italic.woff +0 -0
  26. package/es/assets/fonts/Rene Bieder Milliard Book.woff +0 -0
  27. package/es/assets/fonts/Rene Bieder Milliard ExtraBold Italic.woff +0 -0
  28. package/es/assets/fonts/Rene Bieder Milliard ExtraBold.woff +0 -0
  29. package/es/assets/fonts/Rene Bieder Milliard ExtraLight Italic.woff +0 -0
  30. package/es/assets/fonts/Rene Bieder Milliard ExtraLight.woff +0 -0
  31. package/es/assets/fonts/Rene Bieder Milliard Hairline Italic.woff +0 -0
  32. package/es/assets/fonts/Rene Bieder Milliard Hairline.woff +0 -0
  33. package/es/assets/fonts/Rene Bieder Milliard Heavy Italic.woff +0 -0
  34. package/es/assets/fonts/Rene Bieder Milliard Heavy.woff +0 -0
  35. package/es/assets/fonts/Rene Bieder Milliard Light Italic.woff +0 -0
  36. package/es/assets/fonts/Rene Bieder Milliard Light.woff +0 -0
  37. package/es/assets/fonts/Rene Bieder Milliard Medium Italic.woff +0 -0
  38. package/es/assets/fonts/Rene Bieder Milliard Medium.woff +0 -0
  39. package/es/assets/fonts/Rene Bieder Milliard SemiBold Italic.woff +0 -0
  40. package/es/assets/fonts/Rene Bieder Milliard SemiBold.woff +0 -0
  41. package/es/assets/fonts/Rene Bieder Milliard Thin Italic.woff +0 -0
  42. package/es/assets/fonts/Rene Bieder Milliard Thin.woff +0 -0
  43. package/es/assets/fonts/style.css +177 -0
  44. package/es/assets/gltf/door_closet.bin +0 -0
  45. package/es/assets/gltf/door_closet.fbx +0 -0
  46. package/es/assets/gltf/door_closet.gltf +1 -0
  47. package/es/assets/gltf/door_exterior.bin +0 -0
  48. package/es/assets/gltf/door_exterior.fbx +0 -0
  49. package/es/assets/gltf/door_exterior.gltf +1 -0
  50. package/es/assets/gltf/door_interior.bin +0 -0
  51. package/es/assets/gltf/door_interior.fbx +0 -0
  52. package/es/assets/gltf/door_interior.gltf +1 -0
  53. package/es/assets/gltf/door_sliding.bin +0 -0
  54. package/es/assets/gltf/door_sliding.fbx +0 -0
  55. package/es/assets/gltf/door_sliding.gltf +1 -0
  56. package/es/assets/gltf/doorway_framed.bin +0 -0
  57. package/es/assets/gltf/doorway_framed.fbx +0 -0
  58. package/es/assets/gltf/doorway_framed.gltf +1 -0
  59. package/es/assets/gltf/window_clear.bin +0 -0
  60. package/es/assets/gltf/window_clear.fbx +0 -0
  61. package/es/assets/gltf/window_clear.gltf +1 -0
  62. package/es/assets/gltf/window_cross.bin +0 -0
  63. package/es/assets/gltf/window_cross.fbx +0 -0
  64. package/es/assets/gltf/window_cross.gltf +1 -0
  65. package/es/assets/gltf/window_double_hung.bin +0 -0
  66. package/es/assets/gltf/window_double_hung.fbx +0 -0
  67. package/es/assets/gltf/window_double_hung.gltf +1 -0
  68. package/es/assets/gltf/window_vertical.bin +0 -0
  69. package/es/assets/gltf/window_vertical.fbx +0 -0
  70. package/es/assets/gltf/window_vertical.gltf +1 -0
  71. package/es/assets/img/1.jpg +0 -0
  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 +11 -0
  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 +55 -0
  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 +33 -0
  105. package/es/assets/img/svg/2d_delete_object1.svg +33 -0
  106. package/es/assets/img/svg/2d_lock_object.svg +33 -0
  107. package/es/assets/img/svg/3d_item_move.svg +106 -0
  108. package/es/assets/img/svg/3d_item_rotation.svg +76 -0
  109. package/es/assets/img/svg/3d_item_warning_edit.svg +77 -0
  110. package/es/assets/img/svg/3d_item_warning_info.svg +81 -0
  111. package/es/assets/img/svg/accessories.svg +4 -0
  112. package/es/assets/img/svg/angle_icon.svg +39 -0
  113. package/es/assets/img/svg/blank_div.svg +14 -0
  114. package/es/assets/img/svg/bottombar/2d3d_button.svg +3 -0
  115. package/es/assets/img/svg/bottombar/2d3d_button_active.svg +3 -0
  116. package/es/assets/img/svg/bottombar/2d3d_toggle.svg +4 -0
  117. package/es/assets/img/svg/bottombar/2d3d_toggle_active.svg +4 -0
  118. package/es/assets/img/svg/bottombar/arrow-down.svg +3 -0
  119. package/es/assets/img/svg/bottombar/arrow-left.svg +3 -0
  120. package/es/assets/img/svg/bottombar/arrow-minus.svg +3 -0
  121. package/es/assets/img/svg/bottombar/arrow-plus.svg +11 -0
  122. package/es/assets/img/svg/bottombar/arrow-right.svg +3 -0
  123. package/es/assets/img/svg/bottombar/arrow-up.svg +3 -0
  124. package/es/assets/img/svg/bottombar/collapse.svg +3 -0
  125. package/es/assets/img/svg/bottombar/elevation-back.svg +6 -0
  126. package/es/assets/img/svg/bottombar/elevation-front.svg +6 -0
  127. package/es/assets/img/svg/bottombar/elevation-left.svg +6 -0
  128. package/es/assets/img/svg/bottombar/elevation-right.svg +7 -0
  129. package/es/assets/img/svg/bottombar/elevation.svg +6 -0
  130. package/es/assets/img/svg/bottombar/expand.svg +3 -0
  131. package/es/assets/img/svg/bottombar/help.svg +72 -0
  132. package/es/assets/img/svg/bottombar/incm_toggle.svg +39 -0
  133. package/es/assets/img/svg/bottombar/pan_1.svg +57 -0
  134. package/es/assets/img/svg/bottombar/pan_2.svg +27 -0
  135. package/es/assets/img/svg/bottombar/pan_3.svg +27 -0
  136. package/es/assets/img/svg/bottombar/pan_4.svg +27 -0
  137. package/es/assets/img/svg/bottombar/pan_5.svg +27 -0
  138. package/es/assets/img/svg/bottombar/settings.svg +23 -0
  139. package/es/assets/img/svg/bottombar/spin-down.svg +76 -0
  140. package/es/assets/img/svg/bottombar/spin-left.svg +75 -0
  141. package/es/assets/img/svg/bottombar/spin-right.svg +75 -0
  142. package/es/assets/img/svg/bottombar/spin-up.svg +76 -0
  143. package/es/assets/img/svg/bottombar/spin_1.svg +48 -0
  144. package/es/assets/img/svg/bottombar/spin_2.svg +31 -0
  145. package/es/assets/img/svg/bottombar/spin_3.svg +31 -0
  146. package/es/assets/img/svg/bottombar/spin_4.svg +31 -0
  147. package/es/assets/img/svg/bottombar/spin_5.svg +31 -0
  148. package/es/assets/img/svg/bottombar/zoomin.svg +29 -0
  149. package/es/assets/img/svg/bottombar/zoomout.svg +26 -0
  150. package/es/assets/img/svg/check.svg +10 -0
  151. package/es/assets/img/svg/close.svg +11 -0
  152. package/es/assets/img/svg/color/Black.svg +3 -0
  153. package/es/assets/img/svg/color/Blue.svg +3 -0
  154. package/es/assets/img/svg/color/Brown.svg +9 -0
  155. package/es/assets/img/svg/color/Cream.svg +3 -0
  156. package/es/assets/img/svg/color/Dark.svg +9 -0
  157. package/es/assets/img/svg/color/Gray.svg +3 -0
  158. package/es/assets/img/svg/color/Green.svg +3 -0
  159. package/es/assets/img/svg/color/Light.svg +9 -0
  160. package/es/assets/img/svg/color/Medium.svg +9 -0
  161. package/es/assets/img/svg/color/Unfinished.svg +9 -0
  162. package/es/assets/img/svg/color/White.svg +3 -0
  163. package/es/assets/img/svg/color/White.svg.bak +3 -0
  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 +11 -0
  167. package/es/assets/img/svg/delete.svg +3 -0
  168. package/es/assets/img/svg/detail.svg +77 -0
  169. package/es/assets/img/svg/disclaimer/background.svg +758 -0
  170. package/es/assets/img/svg/disclaimer/logo-dots.svg +11 -0
  171. package/es/assets/img/svg/door/Closet.svg +11 -0
  172. package/es/assets/img/svg/door/Exterior.svg +5 -0
  173. package/es/assets/img/svg/door/Framed_dorway.svg +5 -0
  174. package/es/assets/img/svg/door/Frameless_dorway.svg +5 -0
  175. package/es/assets/img/svg/door/Interior.svg +7 -0
  176. package/es/assets/img/svg/door/Sliding.svg +5 -0
  177. package/es/assets/img/svg/doors_closet.svg +47 -0
  178. package/es/assets/img/svg/doors_exterior.svg +25 -0
  179. package/es/assets/img/svg/doors_interior.svg +29 -0
  180. package/es/assets/img/svg/doors_patio.svg +26 -0
  181. package/es/assets/img/svg/duplicate.svg +11 -0
  182. package/es/assets/img/svg/duplicate_object_left.svg +32 -0
  183. package/es/assets/img/svg/duplicate_object_right.svg +32 -0
  184. package/es/assets/img/svg/filtersActive.svg +19 -0
  185. package/es/assets/img/svg/firstsetting/L.svg +3 -0
  186. package/es/assets/img/svg/firstsetting/L2.svg +3 -0
  187. package/es/assets/img/svg/firstsetting/Open.svg +3 -0
  188. package/es/assets/img/svg/firstsetting/Square.svg +3 -0
  189. package/es/assets/img/svg/firstsetting/bar-active.svg +9 -0
  190. package/es/assets/img/svg/firstsetting/bar-normal.svg +3 -0
  191. package/es/assets/img/svg/firstsetting/bullet-current.svg +3 -0
  192. package/es/assets/img/svg/firstsetting/bullet-done.svg +3 -0
  193. package/es/assets/img/svg/firstsetting/bullet-not-done.svg +3 -0
  194. package/es/assets/img/svg/firstsetting/check-active.svg +3 -0
  195. package/es/assets/img/svg/firstsetting/check-normal.svg +3 -0
  196. package/es/assets/img/svg/firstsetting/pencil.svg +11 -0
  197. package/es/assets/img/svg/green_checkmark.svg +27 -0
  198. package/es/assets/img/svg/headerbar/assist.svg +3 -0
  199. package/es/assets/img/svg/headerbar/cart.svg +3 -0
  200. package/es/assets/img/svg/headerbar/check.svg +10 -0
  201. package/es/assets/img/svg/headerbar/consult_designer.svg +45 -0
  202. package/es/assets/img/svg/headerbar/edit_name.svg +26 -0
  203. package/es/assets/img/svg/headerbar/file-dollar.svg +13 -0
  204. package/es/assets/img/svg/headerbar/hamburger_menu.svg +32 -0
  205. package/es/assets/img/svg/headerbar/plus.svg +11 -0
  206. package/es/assets/img/svg/headerbar/review_quote.svg +44 -0
  207. package/es/assets/img/svg/headerbar/ruler-measure.svg +11 -0
  208. package/es/assets/img/svg/headerbar/save.svg +3 -0
  209. package/es/assets/img/svg/headerbar/setting.svg +75 -0
  210. package/es/assets/img/svg/help/check.svg +10 -0
  211. package/es/assets/img/svg/help/search.svg +76 -0
  212. package/es/assets/img/svg/intro/1-start-with-floorplan-whole.svg +27 -0
  213. package/es/assets/img/svg/intro/1-start-with-floorplan.svg +26 -0
  214. package/es/assets/img/svg/intro/2-start-from-scratch-whole.svg +28 -0
  215. package/es/assets/img/svg/intro/2-start-from-scratch.svg +27 -0
  216. package/es/assets/img/svg/intro/3-retrieve-project-whole.svg +19 -0
  217. package/es/assets/img/svg/intro/3-retrieve-project.svg +18 -0
  218. package/es/assets/img/svg/invert.svg +127 -0
  219. package/es/assets/img/svg/lefttoolbar/appliance-active.svg +13 -0
  220. package/es/assets/img/svg/lefttoolbar/appliance.svg +13 -0
  221. package/es/assets/img/svg/lefttoolbar/cabinet-active.svg +10 -0
  222. package/es/assets/img/svg/lefttoolbar/cabinet-category.svg +3 -0
  223. package/es/assets/img/svg/lefttoolbar/cabinet-one.svg +3 -0
  224. package/es/assets/img/svg/lefttoolbar/cabinet.svg +10 -0
  225. package/es/assets/img/svg/lefttoolbar/disigner_assistance.svg +89 -0
  226. package/es/assets/img/svg/lefttoolbar/door-style-active.svg +20 -0
  227. package/es/assets/img/svg/lefttoolbar/door-style.svg +20 -0
  228. package/es/assets/img/svg/lefttoolbar/door.svg +12 -0
  229. package/es/assets/img/svg/lefttoolbar/error_icon.svg +81 -0
  230. package/es/assets/img/svg/lefttoolbar/finishing-active.svg +13 -0
  231. package/es/assets/img/svg/lefttoolbar/finishing.svg +13 -0
  232. package/es/assets/img/svg/lefttoolbar/reviewforquote-active.svg +86 -0
  233. package/es/assets/img/svg/lefttoolbar/reviewforquote.svg +12 -0
  234. package/es/assets/img/svg/lefttoolbar/room-shape-L.svg +3 -0
  235. package/es/assets/img/svg/lefttoolbar/room-shape-active.svg +18 -0
  236. package/es/assets/img/svg/lefttoolbar/room-shape-custom.svg +12 -0
  237. package/es/assets/img/svg/lefttoolbar/room-shape-irregular.svg +3 -0
  238. package/es/assets/img/svg/lefttoolbar/room-shape-open.svg +3 -0
  239. package/es/assets/img/svg/lefttoolbar/room-shape-square.svg +3 -0
  240. package/es/assets/img/svg/lefttoolbar/room-shape.svg +18 -0
  241. package/es/assets/img/svg/lefttoolbar/search.svg +76 -0
  242. package/es/assets/img/svg/lefttoolbar/view_more.svg +86 -0
  243. package/es/assets/img/svg/lefttoolbar/warning_icon.svg +81 -0
  244. package/es/assets/img/svg/lefttoolbar/window.svg +12 -0
  245. package/es/assets/img/svg/logo.svg +11 -0
  246. package/es/assets/img/svg/logo_with_text.svg +25 -0
  247. package/es/assets/img/svg/menubar/login.svg +84 -0
  248. package/es/assets/img/svg/menubar/my_projects.svg +85 -0
  249. package/es/assets/img/svg/menubar/new_project.svg +110 -0
  250. package/es/assets/img/svg/menubar/save_project.svg +84 -0
  251. package/es/assets/img/svg/options.svg +3 -0
  252. package/es/assets/img/svg/positioning.svg +3 -0
  253. package/es/assets/img/svg/rotate.png +0 -0
  254. package/es/assets/img/svg/rotate.svg +17 -0
  255. package/es/assets/img/svg/rotate_object_clockwise.svg +26 -0
  256. package/es/assets/img/svg/rotate_object_counterclockwise.svg +26 -0
  257. package/es/assets/img/svg/toggleFilters.svg +19 -0
  258. package/es/assets/img/svg/toolbar/add_appliances_active.svg +64 -0
  259. package/es/assets/img/svg/toolbar/add_appliances_inactive.svg +52 -0
  260. package/es/assets/img/svg/toolbar/add_button.svg +36 -0
  261. package/es/assets/img/svg/toolbar/add_cabinets_active.svg +59 -0
  262. package/es/assets/img/svg/toolbar/add_cabinets_inactive.svg +49 -0
  263. package/es/assets/img/svg/toolbar/add_items_doors.svg +25 -0
  264. package/es/assets/img/svg/toolbar/add_items_doorways.svg +24 -0
  265. package/es/assets/img/svg/toolbar/add_items_refrigerator.svg +32 -0
  266. package/es/assets/img/svg/toolbar/add_items_windows.svg +28 -0
  267. package/es/assets/img/svg/toolbar/apply_button.svg +38 -0
  268. package/es/assets/img/svg/toolbar/arrow-plus.svg +11 -0
  269. package/es/assets/img/svg/toolbar/backsplash.svg +8 -0
  270. package/es/assets/img/svg/toolbar/cancel_button.svg +37 -0
  271. package/es/assets/img/svg/toolbar/consult_a_designer_button.svg +47 -0
  272. package/es/assets/img/svg/toolbar/countertop.svg +7 -0
  273. package/es/assets/img/svg/toolbar/dcm.png +0 -0
  274. package/es/assets/img/svg/toolbar/dcm_off.svg +12 -0
  275. package/es/assets/img/svg/toolbar/dcm_on.svg +474 -0
  276. package/es/assets/img/svg/toolbar/delete_button.svg +37 -0
  277. package/es/assets/img/svg/toolbar/download.svg +77 -0
  278. package/es/assets/img/svg/toolbar/draw_custom_floor.svg +31 -0
  279. package/es/assets/img/svg/toolbar/edit_button.svg +75 -0
  280. package/es/assets/img/svg/toolbar/email_quote_button.svg +44 -0
  281. package/es/assets/img/svg/toolbar/fbm.png +0 -0
  282. package/es/assets/img/svg/toolbar/finishing_touches_active.svg +54 -0
  283. package/es/assets/img/svg/toolbar/finishing_touches_inactive.svg +42 -0
  284. package/es/assets/img/svg/toolbar/floorstyle.svg +9 -0
  285. package/es/assets/img/svg/toolbar/fmb.png +0 -0
  286. package/es/assets/img/svg/toolbar/fmb_off.svg +12 -0
  287. package/es/assets/img/svg/toolbar/fmb_on.svg +489 -0
  288. package/es/assets/img/svg/toolbar/furnishings_icon.svg +6 -0
  289. package/es/assets/img/svg/toolbar/get_started_button.svg +41 -0
  290. package/es/assets/img/svg/toolbar/handles.svg +5 -0
  291. package/es/assets/img/svg/toolbar/lighting.svg +7 -0
  292. package/es/assets/img/svg/toolbar/lrm.png +0 -0
  293. package/es/assets/img/svg/toolbar/lrm_off.svg +12 -0
  294. package/es/assets/img/svg/toolbar/lrm_on.svg +470 -0
  295. package/es/assets/img/svg/toolbar/make_floorplan_active.svg +66 -0
  296. package/es/assets/img/svg/toolbar/make_floorplan_inactive.svg +52 -0
  297. package/es/assets/img/svg/toolbar/predefined_room_l_shaped.svg +20 -0
  298. package/es/assets/img/svg/toolbar/predefined_room_layout.svg +20 -0
  299. package/es/assets/img/svg/toolbar/predefined_room_long_narrow.svg +20 -0
  300. package/es/assets/img/svg/toolbar/predefined_room_open_l_shape.svg +20 -0
  301. package/es/assets/img/svg/toolbar/predefined_room_open_pentagon.svg +20 -0
  302. package/es/assets/img/svg/toolbar/predefined_room_open_rectangle.svg +20 -0
  303. package/es/assets/img/svg/toolbar/predefined_room_open_rectangle_2.svg +20 -0
  304. package/es/assets/img/svg/toolbar/predefined_room_pentagon.svg +20 -0
  305. package/es/assets/img/svg/toolbar/predefined_room_rectangle.svg +20 -0
  306. package/es/assets/img/svg/toolbar/predefined_room_rectangle_with_alcove.svg +20 -0
  307. package/es/assets/img/svg/toolbar/redo_button.svg +75 -0
  308. package/es/assets/img/svg/toolbar/redo_button1.svg +75 -0
  309. package/es/assets/img/svg/toolbar/review_quote_active.svg +14 -0
  310. package/es/assets/img/svg/toolbar/review_quote_inactive.svg +44 -0
  311. package/es/assets/img/svg/toolbar/save_project_button.svg +44 -0
  312. package/es/assets/img/svg/toolbar/select_doorstyle_active.svg +67 -0
  313. package/es/assets/img/svg/toolbar/select_doorstyle_inactive.svg +57 -0
  314. package/es/assets/img/svg/toolbar/shopping-cart.svg +13 -0
  315. package/es/assets/img/svg/toolbar/style_change_button.svg +47 -0
  316. package/es/assets/img/svg/toolbar/take_picture.svg +75 -0
  317. package/es/assets/img/svg/toolbar/undo_button.svg +76 -0
  318. package/es/assets/img/svg/toolbar/undo_button1.svg +76 -0
  319. package/es/assets/img/svg/toolbar/use_button.svg +37 -0
  320. package/es/assets/img/svg/toolbar/wall_color_icon.svg +6 -0
  321. package/es/assets/img/svg/topbar/edit_active.svg +10 -0
  322. package/es/assets/img/svg/topbar/edit_inactive.svg +10 -0
  323. package/es/assets/img/svg/topbar/redo_active.svg +42 -0
  324. package/es/assets/img/svg/topbar/redo_inactive.svg +23 -0
  325. package/es/assets/img/svg/topbar/select_all_active.svg +50 -0
  326. package/es/assets/img/svg/topbar/select_all_inactive.svg +32 -0
  327. package/es/assets/img/svg/topbar/take_picture_active.svg +51 -0
  328. package/es/assets/img/svg/topbar/take_picture_inactive.svg +26 -0
  329. package/es/assets/img/svg/topbar/undo_active.svg +42 -0
  330. package/es/assets/img/svg/topbar/undo_inactive.svg +23 -0
  331. package/es/assets/img/svg/warning_info_2d.svg +81 -0
  332. package/es/assets/img/svg/window/Clear.svg +3 -0
  333. package/es/assets/img/svg/window/Cross.svg +5 -0
  334. package/es/assets/img/svg/window/Double_hung.svg +4 -0
  335. package/es/assets/img/svg/window/Vertical.svg +4 -0
  336. package/es/assets/img/svg/windows_clear.svg +23 -0
  337. package/es/assets/img/svg/windows_cross.svg +28 -0
  338. package/es/assets/img/svg/windows_double_hung.svg +24 -0
  339. package/es/assets/img/svg/windows_vertical.svg +24 -0
  340. package/es/assets/img/svg/wizardstep/Custom.svg +3 -0
  341. package/es/assets/img/svg/wizardstep/Dashed_line.svg +3 -0
  342. package/es/assets/img/svg/wizardstep/L.svg +3 -0
  343. package/es/assets/img/svg/wizardstep/L2.svg +3 -0
  344. package/es/assets/img/svg/wizardstep/Open.svg +3 -0
  345. package/es/assets/img/svg/wizardstep/Square.svg +3 -0
  346. package/es/assets/img/svg/wizardstep/bar-active.svg +9 -0
  347. package/es/assets/img/svg/wizardstep/bar-normal.svg +3 -0
  348. package/es/assets/img/svg/wizardstep/bullet-current.svg +3 -0
  349. package/es/assets/img/svg/wizardstep/bullet-done.svg +3 -0
  350. package/es/assets/img/svg/wizardstep/bullet-not-done.svg +3 -0
  351. package/es/assets/img/svg/wizardstep/check-active.svg +3 -0
  352. package/es/assets/img/svg/wizardstep/check-normal.svg +3 -0
  353. package/es/assets/img/svg/wizardstep/detail_view.svg +87 -0
  354. package/es/assets/img/svg/wizardstep/pencil.svg +11 -0
  355. package/es/assets/img/svg/wizardstep/tile_view.svg +95 -0
  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 +1 -0
  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 +1 -0
  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 +1 -0
  369. package/es/assets/rtastore_logo.png +0 -0
  370. package/es/catalog/areas/area/planner-element.js +45 -0
  371. package/es/catalog/areas/area/textures/ceramic-tile.jpg +0 -0
  372. package/es/catalog/areas/area/textures/grass.jpg +0 -0
  373. package/es/catalog/areas/area/textures/parquet.jpg +0 -0
  374. package/es/catalog/areas/area/textures/strand-porcelain.jpg +0 -0
  375. package/es/catalog/areas/area/textures/tile1.jpg +0 -0
  376. package/es/catalog/back.png +0 -0
  377. package/es/catalog/catalog.js +265 -0
  378. package/es/catalog/doors.png +0 -0
  379. package/es/catalog/doorways.png +0 -0
  380. package/es/catalog/envMap/nx.hdr +0 -0
  381. package/es/catalog/envMap/ny.hdr +0 -0
  382. package/es/catalog/envMap/nz.hdr +0 -0
  383. package/es/catalog/envMap/px.hdr +0 -0
  384. package/es/catalog/envMap/py.hdr +0 -0
  385. package/es/catalog/envMap/pz.hdr +0 -0
  386. package/es/catalog/export.js +0 -0
  387. package/es/catalog/factories/area-factory-3d.js +181 -0
  388. package/es/catalog/factories/area-factory.js +78 -0
  389. package/es/catalog/factories/export.js +7 -0
  390. package/es/catalog/factories/wall-factory-3d.js +202 -0
  391. package/es/catalog/factories/wall-factory.js +267 -0
  392. package/es/catalog/holes/door-closet/planner-element.js +222 -0
  393. package/es/catalog/holes/door-double/door_double.png +0 -0
  394. package/es/catalog/holes/door-double/planner-element.js +315 -0
  395. package/es/catalog/holes/door-exterior/planner-element.js +215 -0
  396. package/es/catalog/holes/door-interior/planner-element.js +227 -0
  397. package/es/catalog/holes/door-panic/panicDoor.png +0 -0
  398. package/es/catalog/holes/door-panic/planner-element.js +503 -0
  399. package/es/catalog/holes/door-panic-double/panicDoorDouble.png +0 -0
  400. package/es/catalog/holes/door-panic-double/planner-element.js +463 -0
  401. package/es/catalog/holes/door-sliding/planner-element.js +225 -0
  402. package/es/catalog/holes/doorway-framed/planner-element.js +145 -0
  403. package/es/catalog/holes/doorway-frameless/planner-element.js +104 -0
  404. package/es/catalog/holes/export.js +13 -0
  405. package/es/catalog/holes/gate/gate.jpg +0 -0
  406. package/es/catalog/holes/window-clear/planner-element.js +166 -0
  407. package/es/catalog/holes/window-clear/texture.png +0 -0
  408. package/es/catalog/holes/window-cross/planner-element.js +165 -0
  409. package/es/catalog/holes/window-cross/texture.png +0 -0
  410. package/es/catalog/holes/window-double-hung/planner-element.js +303 -0
  411. package/es/catalog/holes/window-double-hung/texture.png +0 -0
  412. package/es/catalog/holes/window-vertical/planner-element.js +276 -0
  413. package/es/catalog/holes/window-vertical/texture.png +0 -0
  414. package/es/catalog/lines/wall/planner-element.js +79 -0
  415. package/es/catalog/lines/wall/textures/bricks-normal.jpg +0 -0
  416. package/es/catalog/lines/wall/textures/bricks-normal2.jpg +0 -0
  417. package/es/catalog/lines/wall/textures/bricks.jpg +0 -0
  418. package/es/catalog/lines/wall/textures/bricks2.jpg +0 -0
  419. package/es/catalog/lines/wall/textures/bricks3.jpg +0 -0
  420. package/es/catalog/lines/wall/textures/morden-normal.jpg +0 -0
  421. package/es/catalog/lines/wall/textures/morden.jpg +0 -0
  422. package/es/catalog/lines/wall/textures/painted-normal.jpg +0 -0
  423. package/es/catalog/lines/wall/textures/painted.jpg +0 -0
  424. package/es/catalog/lines/wall/textures/plaster-normal.jpg +0 -0
  425. package/es/catalog/lines/wall/textures/plaster.jpg +0 -0
  426. package/es/catalog/lines/wall/wall.png +0 -0
  427. package/es/catalog/molding/molding-dcm/planner-element.js +26 -0
  428. package/es/catalog/molding/molding-dcm/texture.png +0 -0
  429. package/es/catalog/molding/molding-fbm/planner-element.js +26 -0
  430. package/es/catalog/molding/molding-fbm/texture.png +0 -0
  431. package/es/catalog/molding/molding-lrm/planner-element.js +26 -0
  432. package/es/catalog/molding/molding-lrm/texture.png +0 -0
  433. package/es/catalog/properties/export.js +21 -0
  434. package/es/catalog/properties/property-checkbox.js +68 -0
  435. package/es/catalog/properties/property-color.js +39 -0
  436. package/es/catalog/properties/property-enum.js +50 -0
  437. package/es/catalog/properties/property-hidden.js +19 -0
  438. package/es/catalog/properties/property-lenght-measure.js +100 -0
  439. package/es/catalog/properties/property-length-measure.js +84 -0
  440. package/es/catalog/properties/property-length-measure_hole.js +100 -0
  441. package/es/catalog/properties/property-number.js +48 -0
  442. package/es/catalog/properties/property-read-only.js +26 -0
  443. package/es/catalog/properties/property-string.js +48 -0
  444. package/es/catalog/properties/property-toggle.js +39 -0
  445. package/es/catalog/properties/shared-property-style.js +14 -0
  446. package/es/catalog/utils/FuseUtils.js +79 -0
  447. package/es/catalog/utils/exporter.js +149 -0
  448. package/es/catalog/utils/geom-utils.js +189 -0
  449. package/es/catalog/utils/item-loader.js +1594 -0
  450. package/es/catalog/utils/load-obj.js +91 -0
  451. package/es/catalog/utils/mtl-loader.js +357 -0
  452. package/es/catalog/utils/obj-loader.js +476 -0
  453. package/es/catalog/windows.png +0 -0
  454. package/es/class/FuseUtils.js +79 -0
  455. package/es/class/area.js +141 -0
  456. package/es/class/export.js +24 -0
  457. package/es/class/group.js +431 -0
  458. package/es/class/guide.js +58 -0
  459. package/es/class/hole.js +926 -0
  460. package/es/class/item.js +1845 -0
  461. package/es/class/layer.js +663 -0
  462. package/es/class/line.js +1221 -0
  463. package/es/class/project.js +795 -0
  464. package/es/class/vertex.js +198 -0
  465. package/es/components/content.js +131 -0
  466. package/es/components/export.js +7 -0
  467. package/es/components/style/button.js +106 -0
  468. package/es/components/style/cancel-button.js +21 -0
  469. package/es/components/style/content-container.js +30 -0
  470. package/es/components/style/content-title.js +25 -0
  471. package/es/components/style/delete-button.js +24 -0
  472. package/es/components/style/export.js +31 -0
  473. package/es/components/style/form-block.js +20 -0
  474. package/es/components/style/form-color-input.js +26 -0
  475. package/es/components/style/form-label.js +22 -0
  476. package/es/components/style/form-number-input.js +183 -0
  477. package/es/components/style/form-number-input_2.js +200 -0
  478. package/es/components/style/form-select.js +19 -0
  479. package/es/components/style/form-slider.js +60 -0
  480. package/es/components/style/form-submit-button.js +25 -0
  481. package/es/components/style/form-text-input.js +69 -0
  482. package/es/components/viewer2d/area.js +81 -0
  483. package/es/components/viewer2d/export.js +31 -0
  484. package/es/components/viewer2d/grids/grid-horizontal-streak.js +36 -0
  485. package/es/components/viewer2d/grids/grid-streak.js +36 -0
  486. package/es/components/viewer2d/grids/grid-vertical-streak.js +36 -0
  487. package/es/components/viewer2d/grids/grids.js +30 -0
  488. package/es/components/viewer2d/group.js +53 -0
  489. package/es/components/viewer2d/item.js +447 -0
  490. package/es/components/viewer2d/layer.js +164 -0
  491. package/es/components/viewer2d/line.js +964 -0
  492. package/es/components/viewer2d/ruler.js +79 -0
  493. package/es/components/viewer2d/rulerDist.js +132 -0
  494. package/es/components/viewer2d/rulerX.js +145 -0
  495. package/es/components/viewer2d/rulerY.js +147 -0
  496. package/es/components/viewer2d/scene.js +128 -0
  497. package/es/components/viewer2d/snap.js +74 -0
  498. package/es/components/viewer2d/state.js +73 -0
  499. package/es/components/viewer2d/utils.js +187 -0
  500. package/es/components/viewer2d/vertex.js +65 -0
  501. package/es/components/viewer2d/viewer2d.js +1433 -0
  502. package/es/components/viewer3d/camera-controls-module/camera-controls.module.js +2585 -0
  503. package/es/components/viewer3d/dcm.js +401 -0
  504. package/es/components/viewer3d/fbm.js +414 -0
  505. package/es/components/viewer3d/front3D.js +61 -0
  506. package/es/components/viewer3d/grid-creator.js +25 -0
  507. package/es/components/viewer3d/grids/grid-horizontal-streak.js +36 -0
  508. package/es/components/viewer3d/grids/grid-streak.js +27 -0
  509. package/es/components/viewer3d/grids/grid-vertical-streak.js +36 -0
  510. package/es/components/viewer3d/libs/first-person-controls.js +67 -0
  511. package/es/components/viewer3d/libs/helvetiker_regular.typeface.js +1281 -0
  512. package/es/components/viewer3d/libs/mtl-loader.js +357 -0
  513. package/es/components/viewer3d/libs/obj-loader.js +462 -0
  514. package/es/components/viewer3d/libs/orbit-controls.js +697 -0
  515. package/es/components/viewer3d/libs/pointer-lock-controls.js +44 -0
  516. package/es/components/viewer3d/lrm.js +305 -0
  517. package/es/components/viewer3d/model.js +708 -0
  518. package/es/components/viewer3d/pointer-lock-navigation.js +115 -0
  519. package/es/components/viewer3d/ruler-utils/itemRect.js +61 -0
  520. package/es/components/viewer3d/ruler-utils/layer3D.js +495 -0
  521. package/es/components/viewer3d/ruler-utils/ruler3D.js +224 -0
  522. package/es/components/viewer3d/ruler-utils/scene3D.js +59 -0
  523. package/es/components/viewer3d/ruler-utils/state3D.js +18 -0
  524. package/es/components/viewer3d/scene-creator.js +3617 -0
  525. package/es/components/viewer3d/three-memory-cleaner.js +51 -0
  526. package/es/components/viewer3d/viewer3d-first-person.js +309 -0
  527. package/es/components/viewer3d/viewer3d.js +2654 -0
  528. package/es/constants.js +688 -0
  529. package/es/devLiteRenderer.js +316 -0
  530. package/es/index.js +56 -0
  531. package/es/models.js +506 -0
  532. package/es/plugins/SVGLoader.js +1412 -0
  533. package/es/plugins/console-debugger.js +34 -0
  534. package/es/plugins/export.js +7 -0
  535. package/es/plugins/keyboard.js +101 -0
  536. package/es/reducers/areas-reducer.js +12 -0
  537. package/es/reducers/export.js +25 -0
  538. package/es/reducers/groups-reducer.js +38 -0
  539. package/es/reducers/holes-reducer.js +62 -0
  540. package/es/reducers/items-reducer.js +147 -0
  541. package/es/reducers/lines-reducer.js +45 -0
  542. package/es/reducers/project-reducer.js +131 -0
  543. package/es/reducers/reducer.js +19 -0
  544. package/es/reducers/scene-reducer.js +28 -0
  545. package/es/reducers/user-reducer.js +41 -0
  546. package/es/reducers/vertices-reducer.js +19 -0
  547. package/es/reducers/viewer2d-reducer.js +75 -0
  548. package/es/reducers/viewer3d-reducer.js +56 -0
  549. package/es/shared-style.js +66 -0
  550. package/es/styles/export.js +5 -0
  551. package/es/styles/tabs.css +40 -0
  552. package/es/translator/en.js +104 -0
  553. package/es/translator/it.js +79 -0
  554. package/es/translator/ru.js +79 -0
  555. package/es/translator/translator.js +80 -0
  556. package/es/utils/browser.js +33 -0
  557. package/es/utils/convert-units-lite.js +29 -0
  558. package/es/utils/email-validator.js +4 -0
  559. package/es/utils/export.js +25 -0
  560. package/es/utils/geometry.js +2446 -0
  561. package/es/utils/get-edges-of-subgraphs.js +26 -0
  562. package/es/utils/graph-cycles.js +238 -0
  563. package/es/utils/graph-inner-cycles.js +46 -0
  564. package/es/utils/graph.js +145 -0
  565. package/es/utils/helper.js +334 -0
  566. package/es/utils/history.js +29 -0
  567. package/es/utils/id-broker.js +15 -0
  568. package/es/utils/isolate-event-handler.js +683 -0
  569. package/es/utils/logger.js +8 -0
  570. package/es/utils/math.js +50 -0
  571. package/es/utils/molding.js +865 -0
  572. package/es/utils/name-generator.js +14 -0
  573. package/es/utils/objects-utils.js +50 -0
  574. package/es/utils/phone-validator.js +4 -0
  575. package/es/utils/process-black-list.js +15 -0
  576. package/es/utils/react-if.js +18 -0
  577. package/es/utils/snap-scene.js +94 -0
  578. package/es/utils/snap.js +231 -0
  579. package/es/utils/summarizeCart.js +24 -0
  580. package/es/utils/threeCSG.es6.js +494 -0
  581. package/es/version.js +1 -0
  582. package/lib/@history.js +11 -0
  583. package/lib/AppContext.js +11 -0
  584. package/lib/LiteKitchenConfigurator.js +490 -0
  585. package/lib/LiteRenderer.js +513 -0
  586. package/lib/actions/area-actions.js +21 -0
  587. package/lib/actions/export.js +36 -0
  588. package/lib/actions/groups-actions.js +107 -0
  589. package/lib/actions/holes-actions.js +140 -0
  590. package/lib/actions/items-actions.js +370 -0
  591. package/lib/actions/lines-actions.js +96 -0
  592. package/lib/actions/project-actions.js +338 -0
  593. package/lib/actions/scene-actions.js +43 -0
  594. package/lib/actions/vertices-actions.js +35 -0
  595. package/lib/actions/viewer2d-actions.js +73 -0
  596. package/lib/actions/viewer3d-actions.js +32 -0
  597. package/lib/analytics/ga4.js +194 -0
  598. package/lib/analytics/posthog.js +68 -0
  599. package/lib/assets/Window.hdr +2100 -0
  600. package/lib/assets/brown_photostudio_02_1k.hdr +0 -0
  601. package/lib/assets/fonts/Rene Bieder Milliard Black Italic.woff +0 -0
  602. package/lib/assets/fonts/Rene Bieder Milliard Black.woff +0 -0
  603. package/lib/assets/fonts/Rene Bieder Milliard Bold Italic.woff +0 -0
  604. package/lib/assets/fonts/Rene Bieder Milliard Bold.woff +0 -0
  605. package/lib/assets/fonts/Rene Bieder Milliard Book Italic.woff +0 -0
  606. package/lib/assets/fonts/Rene Bieder Milliard Book.woff +0 -0
  607. package/lib/assets/fonts/Rene Bieder Milliard ExtraBold Italic.woff +0 -0
  608. package/lib/assets/fonts/Rene Bieder Milliard ExtraBold.woff +0 -0
  609. package/lib/assets/fonts/Rene Bieder Milliard ExtraLight Italic.woff +0 -0
  610. package/lib/assets/fonts/Rene Bieder Milliard ExtraLight.woff +0 -0
  611. package/lib/assets/fonts/Rene Bieder Milliard Hairline Italic.woff +0 -0
  612. package/lib/assets/fonts/Rene Bieder Milliard Hairline.woff +0 -0
  613. package/lib/assets/fonts/Rene Bieder Milliard Heavy Italic.woff +0 -0
  614. package/lib/assets/fonts/Rene Bieder Milliard Heavy.woff +0 -0
  615. package/lib/assets/fonts/Rene Bieder Milliard Light Italic.woff +0 -0
  616. package/lib/assets/fonts/Rene Bieder Milliard Light.woff +0 -0
  617. package/lib/assets/fonts/Rene Bieder Milliard Medium Italic.woff +0 -0
  618. package/lib/assets/fonts/Rene Bieder Milliard Medium.woff +0 -0
  619. package/lib/assets/fonts/Rene Bieder Milliard SemiBold Italic.woff +0 -0
  620. package/lib/assets/fonts/Rene Bieder Milliard SemiBold.woff +0 -0
  621. package/lib/assets/fonts/Rene Bieder Milliard Thin Italic.woff +0 -0
  622. package/lib/assets/fonts/Rene Bieder Milliard Thin.woff +0 -0
  623. package/lib/assets/fonts/style.css +177 -0
  624. package/lib/assets/gltf/door_closet.bin +0 -0
  625. package/lib/assets/gltf/door_closet.fbx +0 -0
  626. package/lib/assets/gltf/door_closet.gltf +1 -0
  627. package/lib/assets/gltf/door_exterior.bin +0 -0
  628. package/lib/assets/gltf/door_exterior.fbx +0 -0
  629. package/lib/assets/gltf/door_exterior.gltf +1 -0
  630. package/lib/assets/gltf/door_interior.bin +0 -0
  631. package/lib/assets/gltf/door_interior.fbx +0 -0
  632. package/lib/assets/gltf/door_interior.gltf +1 -0
  633. package/lib/assets/gltf/door_sliding.bin +0 -0
  634. package/lib/assets/gltf/door_sliding.fbx +0 -0
  635. package/lib/assets/gltf/door_sliding.gltf +1 -0
  636. package/lib/assets/gltf/doorway_framed.bin +0 -0
  637. package/lib/assets/gltf/doorway_framed.fbx +0 -0
  638. package/lib/assets/gltf/doorway_framed.gltf +1 -0
  639. package/lib/assets/gltf/window_clear.bin +0 -0
  640. package/lib/assets/gltf/window_clear.fbx +0 -0
  641. package/lib/assets/gltf/window_clear.gltf +1 -0
  642. package/lib/assets/gltf/window_cross.bin +0 -0
  643. package/lib/assets/gltf/window_cross.fbx +0 -0
  644. package/lib/assets/gltf/window_cross.gltf +1 -0
  645. package/lib/assets/gltf/window_double_hung.bin +0 -0
  646. package/lib/assets/gltf/window_double_hung.fbx +0 -0
  647. package/lib/assets/gltf/window_double_hung.gltf +1 -0
  648. package/lib/assets/gltf/window_vertical.bin +0 -0
  649. package/lib/assets/gltf/window_vertical.fbx +0 -0
  650. package/lib/assets/gltf/window_vertical.gltf +1 -0
  651. package/lib/assets/img/1.jpg +0 -0
  652. package/lib/assets/img/TKC_thumbnail.png +0 -0
  653. package/lib/assets/img/Toggle.png +0 -0
  654. package/lib/assets/img/loading/loading.gif +0 -0
  655. package/lib/assets/img/loading/loading_1.svg +11 -0
  656. package/lib/assets/img/loading_large.gif +0 -0
  657. package/lib/assets/img/png/door/closet.png +0 -0
  658. package/lib/assets/img/png/door/doorwaysframed.png +0 -0
  659. package/lib/assets/img/png/door/doorwaysframeles.png +0 -0
  660. package/lib/assets/img/png/door/doorwaysframeless.png +0 -0
  661. package/lib/assets/img/png/door/exterior.png +0 -0
  662. package/lib/assets/img/png/door/interior.png +0 -0
  663. package/lib/assets/img/png/door/sliding.png +0 -0
  664. package/lib/assets/img/png/helper/outcome.png +0 -0
  665. package/lib/assets/img/png/helper/video_preview_3d.png +0 -0
  666. package/lib/assets/img/png/helper/video_preview_start.png +0 -0
  667. package/lib/assets/img/project_img.png +0 -0
  668. package/lib/assets/img/rta/rta_logo_box_blue.jpg +0 -0
  669. package/lib/assets/img/rta/rta_logo_box_blue_ico.jpg +0 -0
  670. package/lib/assets/img/rta/rta_logo_box_blue_ico.svg +55 -0
  671. package/lib/assets/img/rta/rta_logo_box_darkGray.jpg +0 -0
  672. package/lib/assets/img/rta/rta_logo_box_lightblue.png +0 -0
  673. package/lib/assets/img/rta/rta_logo_box_lightmaroon.png +0 -0
  674. package/lib/assets/img/rta/rta_logo_box_maroon.png +0 -0
  675. package/lib/assets/img/rta/rta_logo_box_white.png +0 -0
  676. package/lib/assets/img/rta_menu.png +0 -0
  677. package/lib/assets/img/step2.jpg +0 -0
  678. package/lib/assets/img/step3.jpg +0 -0
  679. package/lib/assets/img/step4.jpg +0 -0
  680. package/lib/assets/img/step5.jpg +0 -0
  681. package/lib/assets/img/step6.jpg +0 -0
  682. package/lib/assets/img/step7.jpg +0 -0
  683. package/lib/assets/img/step8.jpg +0 -0
  684. package/lib/assets/img/svg/2d_delete_object.svg +33 -0
  685. package/lib/assets/img/svg/2d_delete_object1.svg +33 -0
  686. package/lib/assets/img/svg/2d_lock_object.svg +33 -0
  687. package/lib/assets/img/svg/3d_item_move.svg +106 -0
  688. package/lib/assets/img/svg/3d_item_rotation.svg +76 -0
  689. package/lib/assets/img/svg/3d_item_warning_edit.svg +77 -0
  690. package/lib/assets/img/svg/3d_item_warning_info.svg +81 -0
  691. package/lib/assets/img/svg/accessories.svg +4 -0
  692. package/lib/assets/img/svg/angle_icon.svg +39 -0
  693. package/lib/assets/img/svg/blank_div.svg +14 -0
  694. package/lib/assets/img/svg/bottombar/2d3d_button.svg +3 -0
  695. package/lib/assets/img/svg/bottombar/2d3d_button_active.svg +3 -0
  696. package/lib/assets/img/svg/bottombar/2d3d_toggle.svg +4 -0
  697. package/lib/assets/img/svg/bottombar/2d3d_toggle_active.svg +4 -0
  698. package/lib/assets/img/svg/bottombar/arrow-down.svg +3 -0
  699. package/lib/assets/img/svg/bottombar/arrow-left.svg +3 -0
  700. package/lib/assets/img/svg/bottombar/arrow-minus.svg +3 -0
  701. package/lib/assets/img/svg/bottombar/arrow-plus.svg +11 -0
  702. package/lib/assets/img/svg/bottombar/arrow-right.svg +3 -0
  703. package/lib/assets/img/svg/bottombar/arrow-up.svg +3 -0
  704. package/lib/assets/img/svg/bottombar/collapse.svg +3 -0
  705. package/lib/assets/img/svg/bottombar/elevation-back.svg +6 -0
  706. package/lib/assets/img/svg/bottombar/elevation-front.svg +6 -0
  707. package/lib/assets/img/svg/bottombar/elevation-left.svg +6 -0
  708. package/lib/assets/img/svg/bottombar/elevation-right.svg +7 -0
  709. package/lib/assets/img/svg/bottombar/elevation.svg +6 -0
  710. package/lib/assets/img/svg/bottombar/expand.svg +3 -0
  711. package/lib/assets/img/svg/bottombar/help.svg +72 -0
  712. package/lib/assets/img/svg/bottombar/incm_toggle.svg +39 -0
  713. package/lib/assets/img/svg/bottombar/pan_1.svg +57 -0
  714. package/lib/assets/img/svg/bottombar/pan_2.svg +27 -0
  715. package/lib/assets/img/svg/bottombar/pan_3.svg +27 -0
  716. package/lib/assets/img/svg/bottombar/pan_4.svg +27 -0
  717. package/lib/assets/img/svg/bottombar/pan_5.svg +27 -0
  718. package/lib/assets/img/svg/bottombar/settings.svg +23 -0
  719. package/lib/assets/img/svg/bottombar/spin-down.svg +76 -0
  720. package/lib/assets/img/svg/bottombar/spin-left.svg +75 -0
  721. package/lib/assets/img/svg/bottombar/spin-right.svg +75 -0
  722. package/lib/assets/img/svg/bottombar/spin-up.svg +76 -0
  723. package/lib/assets/img/svg/bottombar/spin_1.svg +48 -0
  724. package/lib/assets/img/svg/bottombar/spin_2.svg +31 -0
  725. package/lib/assets/img/svg/bottombar/spin_3.svg +31 -0
  726. package/lib/assets/img/svg/bottombar/spin_4.svg +31 -0
  727. package/lib/assets/img/svg/bottombar/spin_5.svg +31 -0
  728. package/lib/assets/img/svg/bottombar/zoomin.svg +29 -0
  729. package/lib/assets/img/svg/bottombar/zoomout.svg +26 -0
  730. package/lib/assets/img/svg/check.svg +10 -0
  731. package/lib/assets/img/svg/close.svg +11 -0
  732. package/lib/assets/img/svg/color/Black.svg +3 -0
  733. package/lib/assets/img/svg/color/Blue.svg +3 -0
  734. package/lib/assets/img/svg/color/Brown.svg +9 -0
  735. package/lib/assets/img/svg/color/Cream.svg +3 -0
  736. package/lib/assets/img/svg/color/Dark.svg +9 -0
  737. package/lib/assets/img/svg/color/Gray.svg +3 -0
  738. package/lib/assets/img/svg/color/Green.svg +3 -0
  739. package/lib/assets/img/svg/color/Light.svg +9 -0
  740. package/lib/assets/img/svg/color/Medium.svg +9 -0
  741. package/lib/assets/img/svg/color/Unfinished.svg +9 -0
  742. package/lib/assets/img/svg/color/White.svg +3 -0
  743. package/lib/assets/img/svg/color/White.svg.bak +3 -0
  744. package/lib/assets/img/svg/color/stone2.jpg +0 -0
  745. package/lib/assets/img/svg/color/wood2.jpg +0 -0
  746. package/lib/assets/img/svg/copy.svg +11 -0
  747. package/lib/assets/img/svg/delete.svg +3 -0
  748. package/lib/assets/img/svg/detail.svg +77 -0
  749. package/lib/assets/img/svg/disclaimer/background.svg +758 -0
  750. package/lib/assets/img/svg/disclaimer/logo-dots.svg +11 -0
  751. package/lib/assets/img/svg/door/Closet.svg +11 -0
  752. package/lib/assets/img/svg/door/Exterior.svg +5 -0
  753. package/lib/assets/img/svg/door/Framed_dorway.svg +5 -0
  754. package/lib/assets/img/svg/door/Frameless_dorway.svg +5 -0
  755. package/lib/assets/img/svg/door/Interior.svg +7 -0
  756. package/lib/assets/img/svg/door/Sliding.svg +5 -0
  757. package/lib/assets/img/svg/doors_closet.svg +47 -0
  758. package/lib/assets/img/svg/doors_exterior.svg +25 -0
  759. package/lib/assets/img/svg/doors_interior.svg +29 -0
  760. package/lib/assets/img/svg/doors_patio.svg +26 -0
  761. package/lib/assets/img/svg/duplicate.svg +11 -0
  762. package/lib/assets/img/svg/duplicate_object_left.svg +32 -0
  763. package/lib/assets/img/svg/duplicate_object_right.svg +32 -0
  764. package/lib/assets/img/svg/filtersActive.svg +19 -0
  765. package/lib/assets/img/svg/firstsetting/L.svg +3 -0
  766. package/lib/assets/img/svg/firstsetting/L2.svg +3 -0
  767. package/lib/assets/img/svg/firstsetting/Open.svg +3 -0
  768. package/lib/assets/img/svg/firstsetting/Square.svg +3 -0
  769. package/lib/assets/img/svg/firstsetting/bar-active.svg +9 -0
  770. package/lib/assets/img/svg/firstsetting/bar-normal.svg +3 -0
  771. package/lib/assets/img/svg/firstsetting/bullet-current.svg +3 -0
  772. package/lib/assets/img/svg/firstsetting/bullet-done.svg +3 -0
  773. package/lib/assets/img/svg/firstsetting/bullet-not-done.svg +3 -0
  774. package/lib/assets/img/svg/firstsetting/check-active.svg +3 -0
  775. package/lib/assets/img/svg/firstsetting/check-normal.svg +3 -0
  776. package/lib/assets/img/svg/firstsetting/pencil.svg +11 -0
  777. package/lib/assets/img/svg/green_checkmark.svg +27 -0
  778. package/lib/assets/img/svg/headerbar/assist.svg +3 -0
  779. package/lib/assets/img/svg/headerbar/cart.svg +3 -0
  780. package/lib/assets/img/svg/headerbar/check.svg +10 -0
  781. package/lib/assets/img/svg/headerbar/consult_designer.svg +45 -0
  782. package/lib/assets/img/svg/headerbar/edit_name.svg +26 -0
  783. package/lib/assets/img/svg/headerbar/file-dollar.svg +13 -0
  784. package/lib/assets/img/svg/headerbar/hamburger_menu.svg +32 -0
  785. package/lib/assets/img/svg/headerbar/plus.svg +11 -0
  786. package/lib/assets/img/svg/headerbar/review_quote.svg +44 -0
  787. package/lib/assets/img/svg/headerbar/ruler-measure.svg +11 -0
  788. package/lib/assets/img/svg/headerbar/save.svg +3 -0
  789. package/lib/assets/img/svg/headerbar/setting.svg +75 -0
  790. package/lib/assets/img/svg/help/check.svg +10 -0
  791. package/lib/assets/img/svg/help/search.svg +76 -0
  792. package/lib/assets/img/svg/intro/1-start-with-floorplan-whole.svg +27 -0
  793. package/lib/assets/img/svg/intro/1-start-with-floorplan.svg +26 -0
  794. package/lib/assets/img/svg/intro/2-start-from-scratch-whole.svg +28 -0
  795. package/lib/assets/img/svg/intro/2-start-from-scratch.svg +27 -0
  796. package/lib/assets/img/svg/intro/3-retrieve-project-whole.svg +19 -0
  797. package/lib/assets/img/svg/intro/3-retrieve-project.svg +18 -0
  798. package/lib/assets/img/svg/invert.svg +127 -0
  799. package/lib/assets/img/svg/lefttoolbar/appliance-active.svg +13 -0
  800. package/lib/assets/img/svg/lefttoolbar/appliance.svg +13 -0
  801. package/lib/assets/img/svg/lefttoolbar/cabinet-active.svg +10 -0
  802. package/lib/assets/img/svg/lefttoolbar/cabinet-category.svg +3 -0
  803. package/lib/assets/img/svg/lefttoolbar/cabinet-one.svg +3 -0
  804. package/lib/assets/img/svg/lefttoolbar/cabinet.svg +10 -0
  805. package/lib/assets/img/svg/lefttoolbar/disigner_assistance.svg +89 -0
  806. package/lib/assets/img/svg/lefttoolbar/door-style-active.svg +20 -0
  807. package/lib/assets/img/svg/lefttoolbar/door-style.svg +20 -0
  808. package/lib/assets/img/svg/lefttoolbar/door.svg +12 -0
  809. package/lib/assets/img/svg/lefttoolbar/error_icon.svg +81 -0
  810. package/lib/assets/img/svg/lefttoolbar/finishing-active.svg +13 -0
  811. package/lib/assets/img/svg/lefttoolbar/finishing.svg +13 -0
  812. package/lib/assets/img/svg/lefttoolbar/reviewforquote-active.svg +86 -0
  813. package/lib/assets/img/svg/lefttoolbar/reviewforquote.svg +12 -0
  814. package/lib/assets/img/svg/lefttoolbar/room-shape-L.svg +3 -0
  815. package/lib/assets/img/svg/lefttoolbar/room-shape-active.svg +18 -0
  816. package/lib/assets/img/svg/lefttoolbar/room-shape-custom.svg +12 -0
  817. package/lib/assets/img/svg/lefttoolbar/room-shape-irregular.svg +3 -0
  818. package/lib/assets/img/svg/lefttoolbar/room-shape-open.svg +3 -0
  819. package/lib/assets/img/svg/lefttoolbar/room-shape-square.svg +3 -0
  820. package/lib/assets/img/svg/lefttoolbar/room-shape.svg +18 -0
  821. package/lib/assets/img/svg/lefttoolbar/search.svg +76 -0
  822. package/lib/assets/img/svg/lefttoolbar/view_more.svg +86 -0
  823. package/lib/assets/img/svg/lefttoolbar/warning_icon.svg +81 -0
  824. package/lib/assets/img/svg/lefttoolbar/window.svg +12 -0
  825. package/lib/assets/img/svg/logo.svg +11 -0
  826. package/lib/assets/img/svg/logo_with_text.svg +25 -0
  827. package/lib/assets/img/svg/menubar/login.svg +84 -0
  828. package/lib/assets/img/svg/menubar/my_projects.svg +85 -0
  829. package/lib/assets/img/svg/menubar/new_project.svg +110 -0
  830. package/lib/assets/img/svg/menubar/save_project.svg +84 -0
  831. package/lib/assets/img/svg/options.svg +3 -0
  832. package/lib/assets/img/svg/positioning.svg +3 -0
  833. package/lib/assets/img/svg/rotate.png +0 -0
  834. package/lib/assets/img/svg/rotate.svg +17 -0
  835. package/lib/assets/img/svg/rotate_object_clockwise.svg +26 -0
  836. package/lib/assets/img/svg/rotate_object_counterclockwise.svg +26 -0
  837. package/lib/assets/img/svg/toggleFilters.svg +19 -0
  838. package/lib/assets/img/svg/toolbar/add_appliances_active.svg +64 -0
  839. package/lib/assets/img/svg/toolbar/add_appliances_inactive.svg +52 -0
  840. package/lib/assets/img/svg/toolbar/add_button.svg +36 -0
  841. package/lib/assets/img/svg/toolbar/add_cabinets_active.svg +59 -0
  842. package/lib/assets/img/svg/toolbar/add_cabinets_inactive.svg +49 -0
  843. package/lib/assets/img/svg/toolbar/add_items_doors.svg +25 -0
  844. package/lib/assets/img/svg/toolbar/add_items_doorways.svg +24 -0
  845. package/lib/assets/img/svg/toolbar/add_items_refrigerator.svg +32 -0
  846. package/lib/assets/img/svg/toolbar/add_items_windows.svg +28 -0
  847. package/lib/assets/img/svg/toolbar/apply_button.svg +38 -0
  848. package/lib/assets/img/svg/toolbar/arrow-plus.svg +11 -0
  849. package/lib/assets/img/svg/toolbar/backsplash.svg +8 -0
  850. package/lib/assets/img/svg/toolbar/cancel_button.svg +37 -0
  851. package/lib/assets/img/svg/toolbar/consult_a_designer_button.svg +47 -0
  852. package/lib/assets/img/svg/toolbar/countertop.svg +7 -0
  853. package/lib/assets/img/svg/toolbar/dcm.png +0 -0
  854. package/lib/assets/img/svg/toolbar/dcm_off.svg +12 -0
  855. package/lib/assets/img/svg/toolbar/dcm_on.svg +474 -0
  856. package/lib/assets/img/svg/toolbar/delete_button.svg +37 -0
  857. package/lib/assets/img/svg/toolbar/download.svg +77 -0
  858. package/lib/assets/img/svg/toolbar/draw_custom_floor.svg +31 -0
  859. package/lib/assets/img/svg/toolbar/edit_button.svg +75 -0
  860. package/lib/assets/img/svg/toolbar/email_quote_button.svg +44 -0
  861. package/lib/assets/img/svg/toolbar/fbm.png +0 -0
  862. package/lib/assets/img/svg/toolbar/finishing_touches_active.svg +54 -0
  863. package/lib/assets/img/svg/toolbar/finishing_touches_inactive.svg +42 -0
  864. package/lib/assets/img/svg/toolbar/floorstyle.svg +9 -0
  865. package/lib/assets/img/svg/toolbar/fmb.png +0 -0
  866. package/lib/assets/img/svg/toolbar/fmb_off.svg +12 -0
  867. package/lib/assets/img/svg/toolbar/fmb_on.svg +489 -0
  868. package/lib/assets/img/svg/toolbar/furnishings_icon.svg +6 -0
  869. package/lib/assets/img/svg/toolbar/get_started_button.svg +41 -0
  870. package/lib/assets/img/svg/toolbar/handles.svg +5 -0
  871. package/lib/assets/img/svg/toolbar/lighting.svg +7 -0
  872. package/lib/assets/img/svg/toolbar/lrm.png +0 -0
  873. package/lib/assets/img/svg/toolbar/lrm_off.svg +12 -0
  874. package/lib/assets/img/svg/toolbar/lrm_on.svg +470 -0
  875. package/lib/assets/img/svg/toolbar/make_floorplan_active.svg +66 -0
  876. package/lib/assets/img/svg/toolbar/make_floorplan_inactive.svg +52 -0
  877. package/lib/assets/img/svg/toolbar/predefined_room_l_shaped.svg +20 -0
  878. package/lib/assets/img/svg/toolbar/predefined_room_layout.svg +20 -0
  879. package/lib/assets/img/svg/toolbar/predefined_room_long_narrow.svg +20 -0
  880. package/lib/assets/img/svg/toolbar/predefined_room_open_l_shape.svg +20 -0
  881. package/lib/assets/img/svg/toolbar/predefined_room_open_pentagon.svg +20 -0
  882. package/lib/assets/img/svg/toolbar/predefined_room_open_rectangle.svg +20 -0
  883. package/lib/assets/img/svg/toolbar/predefined_room_open_rectangle_2.svg +20 -0
  884. package/lib/assets/img/svg/toolbar/predefined_room_pentagon.svg +20 -0
  885. package/lib/assets/img/svg/toolbar/predefined_room_rectangle.svg +20 -0
  886. package/lib/assets/img/svg/toolbar/predefined_room_rectangle_with_alcove.svg +20 -0
  887. package/lib/assets/img/svg/toolbar/redo_button.svg +75 -0
  888. package/lib/assets/img/svg/toolbar/redo_button1.svg +75 -0
  889. package/lib/assets/img/svg/toolbar/review_quote_active.svg +14 -0
  890. package/lib/assets/img/svg/toolbar/review_quote_inactive.svg +44 -0
  891. package/lib/assets/img/svg/toolbar/save_project_button.svg +44 -0
  892. package/lib/assets/img/svg/toolbar/select_doorstyle_active.svg +67 -0
  893. package/lib/assets/img/svg/toolbar/select_doorstyle_inactive.svg +57 -0
  894. package/lib/assets/img/svg/toolbar/shopping-cart.svg +13 -0
  895. package/lib/assets/img/svg/toolbar/style_change_button.svg +47 -0
  896. package/lib/assets/img/svg/toolbar/take_picture.svg +75 -0
  897. package/lib/assets/img/svg/toolbar/undo_button.svg +76 -0
  898. package/lib/assets/img/svg/toolbar/undo_button1.svg +76 -0
  899. package/lib/assets/img/svg/toolbar/use_button.svg +37 -0
  900. package/lib/assets/img/svg/toolbar/wall_color_icon.svg +6 -0
  901. package/lib/assets/img/svg/topbar/edit_active.svg +10 -0
  902. package/lib/assets/img/svg/topbar/edit_inactive.svg +10 -0
  903. package/lib/assets/img/svg/topbar/redo_active.svg +42 -0
  904. package/lib/assets/img/svg/topbar/redo_inactive.svg +23 -0
  905. package/lib/assets/img/svg/topbar/select_all_active.svg +50 -0
  906. package/lib/assets/img/svg/topbar/select_all_inactive.svg +32 -0
  907. package/lib/assets/img/svg/topbar/take_picture_active.svg +51 -0
  908. package/lib/assets/img/svg/topbar/take_picture_inactive.svg +26 -0
  909. package/lib/assets/img/svg/topbar/undo_active.svg +42 -0
  910. package/lib/assets/img/svg/topbar/undo_inactive.svg +23 -0
  911. package/lib/assets/img/svg/warning_info_2d.svg +81 -0
  912. package/lib/assets/img/svg/window/Clear.svg +3 -0
  913. package/lib/assets/img/svg/window/Cross.svg +5 -0
  914. package/lib/assets/img/svg/window/Double_hung.svg +4 -0
  915. package/lib/assets/img/svg/window/Vertical.svg +4 -0
  916. package/lib/assets/img/svg/windows_clear.svg +23 -0
  917. package/lib/assets/img/svg/windows_cross.svg +28 -0
  918. package/lib/assets/img/svg/windows_double_hung.svg +24 -0
  919. package/lib/assets/img/svg/windows_vertical.svg +24 -0
  920. package/lib/assets/img/svg/wizardstep/Custom.svg +3 -0
  921. package/lib/assets/img/svg/wizardstep/Dashed_line.svg +3 -0
  922. package/lib/assets/img/svg/wizardstep/L.svg +3 -0
  923. package/lib/assets/img/svg/wizardstep/L2.svg +3 -0
  924. package/lib/assets/img/svg/wizardstep/Open.svg +3 -0
  925. package/lib/assets/img/svg/wizardstep/Square.svg +3 -0
  926. package/lib/assets/img/svg/wizardstep/bar-active.svg +9 -0
  927. package/lib/assets/img/svg/wizardstep/bar-normal.svg +3 -0
  928. package/lib/assets/img/svg/wizardstep/bullet-current.svg +3 -0
  929. package/lib/assets/img/svg/wizardstep/bullet-done.svg +3 -0
  930. package/lib/assets/img/svg/wizardstep/bullet-not-done.svg +3 -0
  931. package/lib/assets/img/svg/wizardstep/check-active.svg +3 -0
  932. package/lib/assets/img/svg/wizardstep/check-normal.svg +3 -0
  933. package/lib/assets/img/svg/wizardstep/detail_view.svg +87 -0
  934. package/lib/assets/img/svg/wizardstep/pencil.svg +11 -0
  935. package/lib/assets/img/svg/wizardstep/tile_view.svg +95 -0
  936. package/lib/assets/img/texture/glass.jpg +0 -0
  937. package/lib/assets/img/texture/steel.jpg +0 -0
  938. package/lib/assets/img/texture/white1px.jpg +0 -0
  939. package/lib/assets/img/texture/wood.jpg +0 -0
  940. package/lib/assets/model/DCM.bin +0 -0
  941. package/lib/assets/model/DCM.fbx +0 -0
  942. package/lib/assets/model/DCM.gltf +1 -0
  943. package/lib/assets/model/FBM.bin +0 -0
  944. package/lib/assets/model/FBM.fbx +0 -0
  945. package/lib/assets/model/FBM.gltf +1 -0
  946. package/lib/assets/model/LRM.bin +0 -0
  947. package/lib/assets/model/LRM.fbx +0 -0
  948. package/lib/assets/model/LRM.gltf +1 -0
  949. package/lib/assets/rtastore_logo.png +0 -0
  950. package/lib/catalog/areas/area/planner-element.js +53 -0
  951. package/lib/catalog/areas/area/textures/ceramic-tile.jpg +0 -0
  952. package/lib/catalog/areas/area/textures/grass.jpg +0 -0
  953. package/lib/catalog/areas/area/textures/parquet.jpg +0 -0
  954. package/lib/catalog/areas/area/textures/strand-porcelain.jpg +0 -0
  955. package/lib/catalog/areas/area/textures/tile1.jpg +0 -0
  956. package/lib/catalog/back.png +0 -0
  957. package/lib/catalog/catalog.js +272 -0
  958. package/lib/catalog/doors.png +0 -0
  959. package/lib/catalog/doorways.png +0 -0
  960. package/lib/catalog/envMap/nx.hdr +0 -0
  961. package/lib/catalog/envMap/ny.hdr +0 -0
  962. package/lib/catalog/envMap/nz.hdr +0 -0
  963. package/lib/catalog/envMap/px.hdr +0 -0
  964. package/lib/catalog/envMap/py.hdr +0 -0
  965. package/lib/catalog/envMap/pz.hdr +0 -0
  966. package/lib/catalog/export.js +1 -0
  967. package/lib/catalog/factories/area-factory-3d.js +190 -0
  968. package/lib/catalog/factories/area-factory.js +88 -0
  969. package/lib/catalog/factories/export.js +25 -0
  970. package/lib/catalog/factories/wall-factory-3d.js +212 -0
  971. package/lib/catalog/factories/wall-factory.js +279 -0
  972. package/lib/catalog/holes/door-closet/planner-element.js +232 -0
  973. package/lib/catalog/holes/door-double/door_double.png +0 -0
  974. package/lib/catalog/holes/door-double/planner-element.js +325 -0
  975. package/lib/catalog/holes/door-exterior/planner-element.js +225 -0
  976. package/lib/catalog/holes/door-interior/planner-element.js +237 -0
  977. package/lib/catalog/holes/door-panic/panicDoor.png +0 -0
  978. package/lib/catalog/holes/door-panic/planner-element.js +513 -0
  979. package/lib/catalog/holes/door-panic-double/panicDoorDouble.png +0 -0
  980. package/lib/catalog/holes/door-panic-double/planner-element.js +473 -0
  981. package/lib/catalog/holes/door-sliding/planner-element.js +235 -0
  982. package/lib/catalog/holes/doorway-framed/planner-element.js +155 -0
  983. package/lib/catalog/holes/doorway-frameless/planner-element.js +114 -0
  984. package/lib/catalog/holes/export.js +97 -0
  985. package/lib/catalog/holes/gate/gate.jpg +0 -0
  986. package/lib/catalog/holes/window-clear/planner-element.js +176 -0
  987. package/lib/catalog/holes/window-clear/texture.png +0 -0
  988. package/lib/catalog/holes/window-cross/planner-element.js +175 -0
  989. package/lib/catalog/holes/window-cross/texture.png +0 -0
  990. package/lib/catalog/holes/window-double-hung/planner-element.js +313 -0
  991. package/lib/catalog/holes/window-double-hung/texture.png +0 -0
  992. package/lib/catalog/holes/window-vertical/planner-element.js +286 -0
  993. package/lib/catalog/holes/window-vertical/texture.png +0 -0
  994. package/lib/catalog/lines/wall/planner-element.js +87 -0
  995. package/lib/catalog/lines/wall/textures/bricks-normal.jpg +0 -0
  996. package/lib/catalog/lines/wall/textures/bricks-normal2.jpg +0 -0
  997. package/lib/catalog/lines/wall/textures/bricks.jpg +0 -0
  998. package/lib/catalog/lines/wall/textures/bricks2.jpg +0 -0
  999. package/lib/catalog/lines/wall/textures/bricks3.jpg +0 -0
  1000. package/lib/catalog/lines/wall/textures/morden-normal.jpg +0 -0
  1001. package/lib/catalog/lines/wall/textures/morden.jpg +0 -0
  1002. package/lib/catalog/lines/wall/textures/painted-normal.jpg +0 -0
  1003. package/lib/catalog/lines/wall/textures/painted.jpg +0 -0
  1004. package/lib/catalog/lines/wall/textures/plaster-normal.jpg +0 -0
  1005. package/lib/catalog/lines/wall/textures/plaster.jpg +0 -0
  1006. package/lib/catalog/lines/wall/wall.png +0 -0
  1007. package/lib/catalog/molding/molding-dcm/planner-element.js +33 -0
  1008. package/lib/catalog/molding/molding-dcm/texture.png +0 -0
  1009. package/lib/catalog/molding/molding-fbm/planner-element.js +33 -0
  1010. package/lib/catalog/molding/molding-fbm/texture.png +0 -0
  1011. package/lib/catalog/molding/molding-lrm/planner-element.js +33 -0
  1012. package/lib/catalog/molding/molding-lrm/texture.png +0 -0
  1013. package/lib/catalog/properties/export.js +81 -0
  1014. package/lib/catalog/properties/property-checkbox.js +76 -0
  1015. package/lib/catalog/properties/property-color.js +47 -0
  1016. package/lib/catalog/properties/property-enum.js +58 -0
  1017. package/lib/catalog/properties/property-hidden.js +27 -0
  1018. package/lib/catalog/properties/property-lenght-measure.js +108 -0
  1019. package/lib/catalog/properties/property-length-measure.js +92 -0
  1020. package/lib/catalog/properties/property-length-measure_hole.js +108 -0
  1021. package/lib/catalog/properties/property-number.js +56 -0
  1022. package/lib/catalog/properties/property-read-only.js +34 -0
  1023. package/lib/catalog/properties/property-string.js +56 -0
  1024. package/lib/catalog/properties/property-toggle.js +47 -0
  1025. package/lib/catalog/properties/shared-property-style.js +21 -0
  1026. package/lib/catalog/utils/FuseUtils.js +87 -0
  1027. package/lib/catalog/utils/exporter.js +157 -0
  1028. package/lib/catalog/utils/geom-utils.js +205 -0
  1029. package/lib/catalog/utils/item-loader.js +1608 -0
  1030. package/lib/catalog/utils/load-obj.js +99 -0
  1031. package/lib/catalog/utils/mtl-loader.js +366 -0
  1032. package/lib/catalog/utils/obj-loader.js +486 -0
  1033. package/lib/catalog/windows.png +0 -0
  1034. package/lib/class/FuseUtils.js +87 -0
  1035. package/lib/class/area.js +148 -0
  1036. package/lib/class/export.js +96 -0
  1037. package/lib/class/group.js +438 -0
  1038. package/lib/class/guide.js +64 -0
  1039. package/lib/class/hole.js +932 -0
  1040. package/lib/class/item.js +1852 -0
  1041. package/lib/class/layer.js +670 -0
  1042. package/lib/class/line.js +1230 -0
  1043. package/lib/class/project.js +804 -0
  1044. package/lib/class/vertex.js +205 -0
  1045. package/lib/components/content.js +142 -0
  1046. package/lib/components/export.js +7 -0
  1047. package/lib/components/style/button.js +115 -0
  1048. package/lib/components/style/cancel-button.js +29 -0
  1049. package/lib/components/style/content-container.js +38 -0
  1050. package/lib/components/style/content-title.js +35 -0
  1051. package/lib/components/style/delete-button.js +34 -0
  1052. package/lib/components/style/export.js +121 -0
  1053. package/lib/components/style/form-block.js +28 -0
  1054. package/lib/components/style/form-color-input.js +34 -0
  1055. package/lib/components/style/form-label.js +30 -0
  1056. package/lib/components/style/form-number-input.js +192 -0
  1057. package/lib/components/style/form-number-input_2.js +209 -0
  1058. package/lib/components/style/form-select.js +29 -0
  1059. package/lib/components/style/form-slider.js +68 -0
  1060. package/lib/components/style/form-submit-button.js +35 -0
  1061. package/lib/components/style/form-text-input.js +78 -0
  1062. package/lib/components/viewer2d/area.js +89 -0
  1063. package/lib/components/viewer2d/export.js +121 -0
  1064. package/lib/components/viewer2d/grids/grid-horizontal-streak.js +44 -0
  1065. package/lib/components/viewer2d/grids/grid-streak.js +44 -0
  1066. package/lib/components/viewer2d/grids/grid-vertical-streak.js +44 -0
  1067. package/lib/components/viewer2d/grids/grids.js +40 -0
  1068. package/lib/components/viewer2d/group.js +63 -0
  1069. package/lib/components/viewer2d/item.js +457 -0
  1070. package/lib/components/viewer2d/layer.js +172 -0
  1071. package/lib/components/viewer2d/line.js +975 -0
  1072. package/lib/components/viewer2d/ruler.js +87 -0
  1073. package/lib/components/viewer2d/rulerDist.js +140 -0
  1074. package/lib/components/viewer2d/rulerX.js +154 -0
  1075. package/lib/components/viewer2d/rulerY.js +156 -0
  1076. package/lib/components/viewer2d/scene.js +137 -0
  1077. package/lib/components/viewer2d/snap.js +84 -0
  1078. package/lib/components/viewer2d/state.js +83 -0
  1079. package/lib/components/viewer2d/utils.js +200 -0
  1080. package/lib/components/viewer2d/vertex.js +75 -0
  1081. package/lib/components/viewer2d/viewer2d.js +1444 -0
  1082. package/lib/components/viewer3d/camera-controls-module/camera-controls.module.js +2591 -0
  1083. package/lib/components/viewer3d/dcm.js +408 -0
  1084. package/lib/components/viewer3d/fbm.js +421 -0
  1085. package/lib/components/viewer3d/front3D.js +71 -0
  1086. package/lib/components/viewer3d/grid-creator.js +35 -0
  1087. package/lib/components/viewer3d/grids/grid-horizontal-streak.js +45 -0
  1088. package/lib/components/viewer3d/grids/grid-streak.js +36 -0
  1089. package/lib/components/viewer3d/grids/grid-vertical-streak.js +45 -0
  1090. package/lib/components/viewer3d/libs/first-person-controls.js +74 -0
  1091. package/lib/components/viewer3d/libs/helvetiker_regular.typeface.js +1287 -0
  1092. package/lib/components/viewer3d/libs/mtl-loader.js +366 -0
  1093. package/lib/components/viewer3d/libs/obj-loader.js +471 -0
  1094. package/lib/components/viewer3d/libs/orbit-controls.js +706 -0
  1095. package/lib/components/viewer3d/libs/pointer-lock-controls.js +53 -0
  1096. package/lib/components/viewer3d/lrm.js +312 -0
  1097. package/lib/components/viewer3d/model.js +714 -0
  1098. package/lib/components/viewer3d/pointer-lock-navigation.js +122 -0
  1099. package/lib/components/viewer3d/ruler-utils/itemRect.js +69 -0
  1100. package/lib/components/viewer3d/ruler-utils/layer3D.js +503 -0
  1101. package/lib/components/viewer3d/ruler-utils/ruler3D.js +232 -0
  1102. package/lib/components/viewer3d/ruler-utils/scene3D.js +67 -0
  1103. package/lib/components/viewer3d/ruler-utils/state3D.js +26 -0
  1104. package/lib/components/viewer3d/scene-creator.js +3652 -0
  1105. package/lib/components/viewer3d/three-memory-cleaner.js +60 -0
  1106. package/lib/components/viewer3d/viewer3d-first-person.js +316 -0
  1107. package/lib/components/viewer3d/viewer3d.js +2661 -0
  1108. package/lib/constants.js +697 -0
  1109. package/lib/devLiteRenderer.js +320 -0
  1110. package/lib/index.js +64 -0
  1111. package/lib/models.js +513 -0
  1112. package/lib/plugins/SVGLoader.js +1417 -0
  1113. package/lib/plugins/console-debugger.js +42 -0
  1114. package/lib/plugins/export.js +25 -0
  1115. package/lib/plugins/keyboard.js +108 -0
  1116. package/lib/reducers/areas-reducer.js +19 -0
  1117. package/lib/reducers/export.js +97 -0
  1118. package/lib/reducers/groups-reducer.js +45 -0
  1119. package/lib/reducers/holes-reducer.js +69 -0
  1120. package/lib/reducers/items-reducer.js +151 -0
  1121. package/lib/reducers/lines-reducer.js +52 -0
  1122. package/lib/reducers/project-reducer.js +138 -0
  1123. package/lib/reducers/reducer.js +26 -0
  1124. package/lib/reducers/scene-reducer.js +35 -0
  1125. package/lib/reducers/user-reducer.js +48 -0
  1126. package/lib/reducers/vertices-reducer.js +26 -0
  1127. package/lib/reducers/viewer2d-reducer.js +82 -0
  1128. package/lib/reducers/viewer3d-reducer.js +63 -0
  1129. package/lib/shared-style.js +72 -0
  1130. package/lib/styles/export.js +13 -0
  1131. package/lib/styles/tabs.css +40 -0
  1132. package/lib/translator/en.js +111 -0
  1133. package/lib/translator/it.js +86 -0
  1134. package/lib/translator/ru.js +86 -0
  1135. package/lib/translator/translator.js +87 -0
  1136. package/lib/utils/browser.js +40 -0
  1137. package/lib/utils/convert-units-lite.js +35 -0
  1138. package/lib/utils/email-validator.js +10 -0
  1139. package/lib/utils/export.js +56 -0
  1140. package/lib/utils/geometry.js +2545 -0
  1141. package/lib/utils/get-edges-of-subgraphs.js +33 -0
  1142. package/lib/utils/graph-cycles.js +239 -0
  1143. package/lib/utils/graph-inner-cycles.js +54 -0
  1144. package/lib/utils/graph.js +153 -0
  1145. package/lib/utils/helper.js +358 -0
  1146. package/lib/utils/history.js +36 -0
  1147. package/lib/utils/id-broker.js +22 -0
  1148. package/lib/utils/isolate-event-handler.js +691 -0
  1149. package/lib/utils/logger.js +14 -0
  1150. package/lib/utils/math.js +57 -0
  1151. package/lib/utils/molding.js +890 -0
  1152. package/lib/utils/name-generator.js +21 -0
  1153. package/lib/utils/objects-utils.js +62 -0
  1154. package/lib/utils/phone-validator.js +10 -0
  1155. package/lib/utils/process-black-list.js +22 -0
  1156. package/lib/utils/react-if.js +25 -0
  1157. package/lib/utils/snap-scene.js +101 -0
  1158. package/lib/utils/snap.js +245 -0
  1159. package/lib/utils/summarizeCart.js +30 -0
  1160. package/lib/utils/threeCSG.es6.js +504 -0
  1161. package/lib/version.js +7 -0
  1162. package/package.json +93 -86
  1163. package/dist/index.js +0 -3
  1164. package/dist/index.js.LICENSE.txt +0 -55
  1165. package/dist/index.js.map +0 -1
@@ -0,0 +1,2585 @@
1
+ import _possibleConstructorReturn from "@babel/runtime/helpers/esm/possibleConstructorReturn";
2
+ import _getPrototypeOf from "@babel/runtime/helpers/esm/getPrototypeOf";
3
+ import _get from "@babel/runtime/helpers/esm/get";
4
+ import _inherits from "@babel/runtime/helpers/esm/inherits";
5
+ import _classCallCheck from "@babel/runtime/helpers/esm/classCallCheck";
6
+ import _createClass from "@babel/runtime/helpers/esm/createClass";
7
+ function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
8
+ function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
9
+ function _superPropGet(t, o, e, r) { var p = _get(_getPrototypeOf(1 & r ? t.prototype : t), o, e); return 2 & r && "function" == typeof p ? function (t) { return p.apply(e, t); } : p; }
10
+ /*!
11
+ * camera-controls
12
+ * https://github.com/yomotsu/camera-controls
13
+ * (c) 2017 @yomotsu
14
+ * Released under the MIT License.
15
+ */
16
+ // see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#value
17
+ var MOUSE_BUTTON = {
18
+ LEFT: 1,
19
+ RIGHT: 2,
20
+ MIDDLE: 4
21
+ };
22
+ var ACTION = Object.freeze({
23
+ NONE: 0,
24
+ ROTATE: 1,
25
+ TRUCK: 2,
26
+ OFFSET: 4,
27
+ DOLLY: 8,
28
+ ZOOM: 16,
29
+ TOUCH_ROTATE: 32,
30
+ TOUCH_TRUCK: 64,
31
+ TOUCH_OFFSET: 128,
32
+ TOUCH_DOLLY: 256,
33
+ TOUCH_ZOOM: 512,
34
+ TOUCH_DOLLY_TRUCK: 1024,
35
+ TOUCH_DOLLY_OFFSET: 2048,
36
+ TOUCH_DOLLY_ROTATE: 4096,
37
+ TOUCH_ZOOM_TRUCK: 8192,
38
+ TOUCH_ZOOM_OFFSET: 16384,
39
+ TOUCH_ZOOM_ROTATE: 32768
40
+ });
41
+ var DOLLY_DIRECTION = {
42
+ NONE: 0,
43
+ IN: 1,
44
+ OUT: -1
45
+ };
46
+ function isPerspectiveCamera(camera) {
47
+ return camera.isPerspectiveCamera;
48
+ }
49
+ function isOrthographicCamera(camera) {
50
+ return camera.isOrthographicCamera;
51
+ }
52
+ var PI_2 = Math.PI * 2;
53
+ var PI_HALF = Math.PI / 2;
54
+ var EPSILON = 1e-5;
55
+ var DEG2RAD = Math.PI / 180;
56
+ function clamp(value, min, max) {
57
+ return Math.max(min, Math.min(max, value));
58
+ }
59
+ function approxZero(number) {
60
+ var error = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : EPSILON;
61
+ return Math.abs(number) < error;
62
+ }
63
+ function approxEquals(a, b) {
64
+ var error = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : EPSILON;
65
+ return approxZero(a - b, error);
66
+ }
67
+ function roundToStep(value, step) {
68
+ return Math.round(value / step) * step;
69
+ }
70
+ function infinityToMaxNumber(value) {
71
+ if (isFinite(value)) return value;
72
+ if (value < 0) return -Number.MAX_VALUE;
73
+ return Number.MAX_VALUE;
74
+ }
75
+ function maxNumberToInfinity(value) {
76
+ if (Math.abs(value) < Number.MAX_VALUE) return value;
77
+ return value * Infinity;
78
+ }
79
+ // https://docs.unity3d.com/ScriptReference/Mathf.SmoothDamp.html
80
+ // https://github.com/Unity-Technologies/UnityCsReference/blob/a2bdfe9b3c4cd4476f44bf52f848063bfaf7b6b9/Runtime/Export/Math/Mathf.cs#L308
81
+ function smoothDamp(current, target, currentVelocityRef, smoothTime) {
82
+ var maxSpeed = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Infinity;
83
+ var deltaTime = arguments.length > 5 ? arguments[5] : undefined;
84
+ // Based on Game Programming Gems 4 Chapter 1.10
85
+ smoothTime = Math.max(0.0001, smoothTime);
86
+ var omega = 2 / smoothTime;
87
+ var x = omega * deltaTime;
88
+ var exp = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);
89
+ var change = current - target;
90
+ var originalTo = target;
91
+ // Clamp maximum speed
92
+ var maxChange = maxSpeed * smoothTime;
93
+ change = clamp(change, -maxChange, maxChange);
94
+ target = current - change;
95
+ var temp = (currentVelocityRef.value + omega * change) * deltaTime;
96
+ currentVelocityRef.value = (currentVelocityRef.value - omega * temp) * exp;
97
+ var output = target + (change + temp) * exp;
98
+ // Prevent overshooting
99
+ if (originalTo - current > 0.0 === output > originalTo) {
100
+ output = originalTo;
101
+ currentVelocityRef.value = (output - originalTo) / deltaTime;
102
+ }
103
+ return output;
104
+ }
105
+ // https://docs.unity3d.com/ScriptReference/Vector3.SmoothDamp.html
106
+ // https://github.com/Unity-Technologies/UnityCsReference/blob/a2bdfe9b3c4cd4476f44bf52f848063bfaf7b6b9/Runtime/Export/Math/Vector3.cs#L97
107
+ function smoothDampVec3(current, target, currentVelocityRef, smoothTime) {
108
+ var maxSpeed = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : Infinity;
109
+ var deltaTime = arguments.length > 5 ? arguments[5] : undefined;
110
+ var out = arguments.length > 6 ? arguments[6] : undefined;
111
+ // Based on Game Programming Gems 4 Chapter 1.10
112
+ smoothTime = Math.max(0.0001, smoothTime);
113
+ var omega = 2 / smoothTime;
114
+ var x = omega * deltaTime;
115
+ var exp = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);
116
+ var targetX = target.x;
117
+ var targetY = target.y;
118
+ var targetZ = target.z;
119
+ var changeX = current.x - targetX;
120
+ var changeY = current.y - targetY;
121
+ var changeZ = current.z - targetZ;
122
+ var originalToX = targetX;
123
+ var originalToY = targetY;
124
+ var originalToZ = targetZ;
125
+ // Clamp maximum speed
126
+ var maxChange = maxSpeed * smoothTime;
127
+ var maxChangeSq = maxChange * maxChange;
128
+ var magnitudeSq = changeX * changeX + changeY * changeY + changeZ * changeZ;
129
+ if (magnitudeSq > maxChangeSq) {
130
+ var magnitude = Math.sqrt(magnitudeSq);
131
+ changeX = changeX / magnitude * maxChange;
132
+ changeY = changeY / magnitude * maxChange;
133
+ changeZ = changeZ / magnitude * maxChange;
134
+ }
135
+ targetX = current.x - changeX;
136
+ targetY = current.y - changeY;
137
+ targetZ = current.z - changeZ;
138
+ var tempX = (currentVelocityRef.x + omega * changeX) * deltaTime;
139
+ var tempY = (currentVelocityRef.y + omega * changeY) * deltaTime;
140
+ var tempZ = (currentVelocityRef.z + omega * changeZ) * deltaTime;
141
+ currentVelocityRef.x = (currentVelocityRef.x - omega * tempX) * exp;
142
+ currentVelocityRef.y = (currentVelocityRef.y - omega * tempY) * exp;
143
+ currentVelocityRef.z = (currentVelocityRef.z - omega * tempZ) * exp;
144
+ out.x = targetX + (changeX + tempX) * exp;
145
+ out.y = targetY + (changeY + tempY) * exp;
146
+ out.z = targetZ + (changeZ + tempZ) * exp;
147
+ // Prevent overshooting
148
+ var origMinusCurrentX = originalToX - current.x;
149
+ var origMinusCurrentY = originalToY - current.y;
150
+ var origMinusCurrentZ = originalToZ - current.z;
151
+ var outMinusOrigX = out.x - originalToX;
152
+ var outMinusOrigY = out.y - originalToY;
153
+ var outMinusOrigZ = out.z - originalToZ;
154
+ if (origMinusCurrentX * outMinusOrigX + origMinusCurrentY * outMinusOrigY + origMinusCurrentZ * outMinusOrigZ > 0) {
155
+ out.x = originalToX;
156
+ out.y = originalToY;
157
+ out.z = originalToZ;
158
+ currentVelocityRef.x = (out.x - originalToX) / deltaTime;
159
+ currentVelocityRef.y = (out.y - originalToY) / deltaTime;
160
+ currentVelocityRef.z = (out.z - originalToZ) / deltaTime;
161
+ }
162
+ return out;
163
+ }
164
+ function extractClientCoordFromEvent(pointers, out) {
165
+ out.set(0, 0);
166
+ pointers.forEach(function (pointer) {
167
+ out.x += pointer.clientX;
168
+ out.y += pointer.clientY;
169
+ });
170
+ out.x /= pointers.length;
171
+ out.y /= pointers.length;
172
+ }
173
+ function notSupportedInOrthographicCamera(camera, message) {
174
+ if (isOrthographicCamera(camera)) {
175
+ console.warn("".concat(message, " is not supported in OrthographicCamera"));
176
+ return true;
177
+ }
178
+ return false;
179
+ }
180
+ var EventDispatcher = /*#__PURE__*/function () {
181
+ function EventDispatcher() {
182
+ _classCallCheck(this, EventDispatcher);
183
+ this._listeners = {};
184
+ }
185
+ /**
186
+ * Adds the specified event listener.
187
+ * @param type event name
188
+ * @param listener handler function
189
+ * @category Methods
190
+ */
191
+ return _createClass(EventDispatcher, [{
192
+ key: "addEventListener",
193
+ value: function addEventListener(type, listener) {
194
+ var listeners = this._listeners;
195
+ if (listeners[type] === undefined) listeners[type] = [];
196
+ if (listeners[type].indexOf(listener) === -1) listeners[type].push(listener);
197
+ }
198
+ /**
199
+ * Presence of the specified event listener.
200
+ * @param type event name
201
+ * @param listener handler function
202
+ * @category Methods
203
+ */
204
+ }, {
205
+ key: "hasEventListener",
206
+ value: function hasEventListener(type, listener) {
207
+ var listeners = this._listeners;
208
+ return listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1;
209
+ }
210
+ /**
211
+ * Removes the specified event listener
212
+ * @param type event name
213
+ * @param listener handler function
214
+ * @category Methods
215
+ */
216
+ }, {
217
+ key: "removeEventListener",
218
+ value: function removeEventListener(type, listener) {
219
+ var listeners = this._listeners;
220
+ var listenerArray = listeners[type];
221
+ if (listenerArray !== undefined) {
222
+ var index = listenerArray.indexOf(listener);
223
+ if (index !== -1) listenerArray.splice(index, 1);
224
+ }
225
+ }
226
+ /**
227
+ * Removes all event listeners
228
+ * @param type event name
229
+ * @category Methods
230
+ */
231
+ }, {
232
+ key: "removeAllEventListeners",
233
+ value: function removeAllEventListeners(type) {
234
+ if (!type) {
235
+ this._listeners = {};
236
+ return;
237
+ }
238
+ if (Array.isArray(this._listeners[type])) this._listeners[type].length = 0;
239
+ }
240
+ /**
241
+ * Fire an event type.
242
+ * @param event DispatcherEvent
243
+ * @category Methods
244
+ */
245
+ }, {
246
+ key: "dispatchEvent",
247
+ value: function dispatchEvent(event) {
248
+ var listeners = this._listeners;
249
+ var listenerArray = listeners[event.type];
250
+ if (listenerArray !== undefined) {
251
+ event.target = this;
252
+ var array = listenerArray.slice(0);
253
+ for (var i = 0, l = array.length; i < l; i++) {
254
+ array[i].call(this, event);
255
+ }
256
+ }
257
+ }
258
+ }]);
259
+ }();
260
+ var _a;
261
+ var VERSION = '2.8.4'; // will be replaced with `version` in package.json during the build process.
262
+ var TOUCH_DOLLY_FACTOR = 1 / 8;
263
+ var isMac = /Mac/.test((_a = globalThis === null || globalThis === void 0 ? void 0 : globalThis.navigator) === null || _a === void 0 ? void 0 : _a.platform);
264
+ var THREE;
265
+ var _ORIGIN;
266
+ var _AXIS_Y;
267
+ var _AXIS_Z;
268
+ var _v2;
269
+ var _v3A;
270
+ var _v3B;
271
+ var _v3C;
272
+ var _cameraDirection;
273
+ var _xColumn;
274
+ var _yColumn;
275
+ var _zColumn;
276
+ var _deltaTarget;
277
+ var _deltaOffset;
278
+ var _sphericalA;
279
+ var _sphericalB;
280
+ var _box3A;
281
+ var _box3B;
282
+ var _sphere;
283
+ var _quaternionA;
284
+ var _quaternionB;
285
+ var _rotationMatrix;
286
+ var _raycaster;
287
+ var CameraControls = /*#__PURE__*/function (_EventDispatcher) {
288
+ /**
289
+ * Creates a `CameraControls` instance.
290
+ *
291
+ * Note:
292
+ * You **must install** three.js before using camera-controls. see [#install](#install)
293
+ * Not doing so will lead to runtime errors (`undefined` references to THREE).
294
+ *
295
+ * e.g.
296
+ * ```
297
+ * CameraControls.install( { THREE } );
298
+ * const cameraControls = new CameraControls( camera, domElement );
299
+ * ```
300
+ *
301
+ * @param camera A `THREE.PerspectiveCamera` or `THREE.OrthographicCamera` to be controlled.
302
+ * @param domElement A `HTMLElement` for the draggable area, usually `renderer.domElement`.
303
+ * @category Constructor
304
+ */
305
+ function CameraControls(camera, domElement) {
306
+ var _this;
307
+ _classCallCheck(this, CameraControls);
308
+ _this = _callSuper(this, CameraControls);
309
+ /**
310
+ * Minimum vertical angle in radians.
311
+ * The angle has to be between `0` and `.maxPolarAngle` inclusive.
312
+ * The default value is `0`.
313
+ *
314
+ * e.g.
315
+ * ```
316
+ * cameraControls.maxPolarAngle = 0;
317
+ * ```
318
+ * @category Properties
319
+ */
320
+ _this.minPolarAngle = 0; // radians
321
+ /**
322
+ * Maximum vertical angle in radians.
323
+ * The angle has to be between `.maxPolarAngle` and `Math.PI` inclusive.
324
+ * The default value is `Math.PI`.
325
+ *
326
+ * e.g.
327
+ * ```
328
+ * cameraControls.maxPolarAngle = Math.PI;
329
+ * ```
330
+ * @category Properties
331
+ */
332
+ _this.maxPolarAngle = Math.PI; // radians
333
+ /**
334
+ * Minimum horizontal angle in radians.
335
+ * The angle has to be less than `.maxAzimuthAngle`.
336
+ * The default value is `- Infinity`.
337
+ *
338
+ * e.g.
339
+ * ```
340
+ * cameraControls.minAzimuthAngle = - Infinity;
341
+ * ```
342
+ * @category Properties
343
+ */
344
+ _this.minAzimuthAngle = -Infinity; // radians
345
+ /**
346
+ * Maximum horizontal angle in radians.
347
+ * The angle has to be greater than `.minAzimuthAngle`.
348
+ * The default value is `Infinity`.
349
+ *
350
+ * e.g.
351
+ * ```
352
+ * cameraControls.maxAzimuthAngle = Infinity;
353
+ * ```
354
+ * @category Properties
355
+ */
356
+ _this.maxAzimuthAngle = Infinity; // radians
357
+ // How far you can dolly in and out ( PerspectiveCamera only )
358
+ /**
359
+ * Minimum distance for dolly. The value must be higher than `0`. Default is `Number.EPSILON`.
360
+ * PerspectiveCamera only.
361
+ * @category Properties
362
+ */
363
+ _this.minDistance = Number.EPSILON;
364
+ /**
365
+ * Maximum distance for dolly. The value must be higher than `minDistance`. Default is `Infinity`.
366
+ * PerspectiveCamera only.
367
+ * @category Properties
368
+ */
369
+ _this.maxDistance = Infinity;
370
+ /**
371
+ * `true` to enable Infinity Dolly for wheel and pinch. Use this with `minDistance` and `maxDistance`
372
+ * If the Dolly distance is less (or over) than the `minDistance` (or `maxDistance`), `infinityDolly` will keep the distance and pushes the target position instead.
373
+ * @category Properties
374
+ */
375
+ _this.infinityDolly = false;
376
+ /**
377
+ * Minimum camera zoom.
378
+ * @category Properties
379
+ */
380
+ _this.minZoom = 0.01;
381
+ /**
382
+ * Maximum camera zoom.
383
+ * @category Properties
384
+ */
385
+ _this.maxZoom = Infinity;
386
+ /**
387
+ * Approximate time in seconds to reach the target. A smaller value will reach the target faster.
388
+ * @category Properties
389
+ */
390
+ _this.smoothTime = 0.25;
391
+ /**
392
+ * the smoothTime while dragging
393
+ * @category Properties
394
+ */
395
+ _this.draggingSmoothTime = 0.125;
396
+ /**
397
+ * Max transition speed in unit-per-seconds
398
+ * @category Properties
399
+ */
400
+ _this.maxSpeed = Infinity;
401
+ /**
402
+ * Speed of azimuth (horizontal) rotation.
403
+ * @category Properties
404
+ */
405
+ _this.azimuthRotateSpeed = 1.0;
406
+ /**
407
+ * Speed of polar (vertical) rotation.
408
+ * @category Properties
409
+ */
410
+ _this.polarRotateSpeed = 1.0;
411
+ /**
412
+ * Speed of mouse-wheel dollying.
413
+ * @category Properties
414
+ */
415
+ _this.dollySpeed = 1.0;
416
+ /**
417
+ * `true` to invert direction when dollying or zooming via drag
418
+ * @category Properties
419
+ */
420
+ _this.dollyDragInverted = false;
421
+ /**
422
+ * Speed of drag for truck and pedestal.
423
+ * @category Properties
424
+ */
425
+ _this.truckSpeed = 2.0;
426
+ /**
427
+ * `true` to enable Dolly-in to the mouse cursor coords.
428
+ * @category Properties
429
+ */
430
+ _this.dollyToCursor = false;
431
+ /**
432
+ * @category Properties
433
+ */
434
+ _this.dragToOffset = false;
435
+ /**
436
+ * The same as `.screenSpacePanning` in three.js's OrbitControls.
437
+ * @category Properties
438
+ */
439
+ _this.verticalDragToForward = false;
440
+ /**
441
+ * Friction ratio of the boundary.
442
+ * @category Properties
443
+ */
444
+ _this.boundaryFriction = 0.0;
445
+ /**
446
+ * Controls how soon the `rest` event fires as the camera slows.
447
+ * @category Properties
448
+ */
449
+ _this.restThreshold = 0.01;
450
+ /**
451
+ * An array of Meshes to collide with camera.
452
+ * Be aware colliderMeshes may decrease performance. The collision test uses 4 raycasters from the camera since the near plane has 4 corners.
453
+ * @category Properties
454
+ */
455
+ _this.colliderMeshes = [];
456
+ /**
457
+ * Force cancel user dragging.
458
+ * @category Methods
459
+ */
460
+ // cancel will be overwritten in the constructor.
461
+ _this.cancel = function () {};
462
+ _this._enabled = true;
463
+ _this._state = ACTION.NONE;
464
+ _this._viewport = null;
465
+ _this._changedDolly = 0;
466
+ _this._changedZoom = 0;
467
+ _this._hasRested = true;
468
+ _this._boundaryEnclosesCamera = false;
469
+ _this._needsUpdate = true;
470
+ _this._updatedLastTime = false;
471
+ _this._elementRect = new DOMRect();
472
+ _this._isDragging = false;
473
+ _this._dragNeedsUpdate = true;
474
+ _this._activePointers = [];
475
+ _this._lockedPointer = null;
476
+ _this._interactiveArea = new DOMRect(0, 0, 1, 1);
477
+ // Use draggingSmoothTime over smoothTime while true.
478
+ // set automatically true on user-dragging start.
479
+ // set automatically false on programmable methods call.
480
+ _this._isUserControllingRotate = false;
481
+ _this._isUserControllingDolly = false;
482
+ _this._isUserControllingTruck = false;
483
+ _this._isUserControllingOffset = false;
484
+ _this._isUserControllingZoom = false;
485
+ _this._lastDollyDirection = DOLLY_DIRECTION.NONE;
486
+ // velocities for smoothDamp
487
+ _this._thetaVelocity = {
488
+ value: 0
489
+ };
490
+ _this._phiVelocity = {
491
+ value: 0
492
+ };
493
+ _this._radiusVelocity = {
494
+ value: 0
495
+ };
496
+ _this._targetVelocity = new THREE.Vector3();
497
+ _this._focalOffsetVelocity = new THREE.Vector3();
498
+ _this._zoomVelocity = {
499
+ value: 0
500
+ };
501
+ _this._truckInternal = function (deltaX, deltaY, dragToOffset) {
502
+ var truckX;
503
+ var pedestalY;
504
+ if (isPerspectiveCamera(_this._camera)) {
505
+ var offset = _v3A.copy(_this._camera.position).sub(_this._target);
506
+ // half of the fov is center to top of screen
507
+ var fov = _this._camera.getEffectiveFOV() * DEG2RAD;
508
+ var targetDistance = offset.length() * Math.tan(fov * 0.5);
509
+ truckX = _this.truckSpeed * deltaX * targetDistance / _this._elementRect.height;
510
+ pedestalY = _this.truckSpeed * deltaY * targetDistance / _this._elementRect.height;
511
+ } else if (isOrthographicCamera(_this._camera)) {
512
+ var _camera = _this._camera;
513
+ truckX = deltaX * (_camera.right - _camera.left) / _camera.zoom / _this._elementRect.width;
514
+ pedestalY = deltaY * (_camera.top - _camera.bottom) / _camera.zoom / _this._elementRect.height;
515
+ } else {
516
+ return;
517
+ }
518
+ if (_this.verticalDragToForward) {
519
+ dragToOffset ? _this.setFocalOffset(_this._focalOffsetEnd.x + truckX, _this._focalOffsetEnd.y, _this._focalOffsetEnd.z, true) : _this.truck(truckX, 0, true);
520
+ _this.forward(-pedestalY, true);
521
+ } else {
522
+ dragToOffset ? _this.setFocalOffset(_this._focalOffsetEnd.x + truckX, _this._focalOffsetEnd.y + pedestalY, _this._focalOffsetEnd.z, true) : _this.truck(truckX, pedestalY, true);
523
+ }
524
+ };
525
+ _this._rotateInternal = function (deltaX, deltaY) {
526
+ var theta = PI_2 * _this.azimuthRotateSpeed * deltaX / _this._elementRect.height; // divide by *height* to refer the resolution
527
+ var phi = PI_2 * _this.polarRotateSpeed * deltaY / _this._elementRect.height;
528
+ _this.rotate(theta, phi, true);
529
+ };
530
+ _this._dollyInternal = function (delta, x, y) {
531
+ var dollyScale = Math.pow(0.95, -delta * _this.dollySpeed);
532
+ var lastDistance = _this._sphericalEnd.radius;
533
+ var distance = _this._sphericalEnd.radius * dollyScale;
534
+ var clampedDistance = clamp(distance, _this.minDistance, _this.maxDistance);
535
+ var overflowedDistance = clampedDistance - distance;
536
+ if (_this.infinityDolly && _this.dollyToCursor) {
537
+ _this._dollyToNoClamp(distance, true);
538
+ } else if (_this.infinityDolly && !_this.dollyToCursor) {
539
+ _this.dollyInFixed(overflowedDistance, true);
540
+ _this._dollyToNoClamp(clampedDistance, true);
541
+ } else {
542
+ _this._dollyToNoClamp(clampedDistance, true);
543
+ }
544
+ if (_this.dollyToCursor) {
545
+ _this._changedDolly += (_this.infinityDolly ? distance : clampedDistance) - lastDistance;
546
+ _this._dollyControlCoord.set(x, y);
547
+ }
548
+ _this._lastDollyDirection = Math.sign(-delta);
549
+ };
550
+ _this._zoomInternal = function (delta, x, y) {
551
+ var zoomScale = Math.pow(0.95, delta * _this.dollySpeed);
552
+ var lastZoom = _this._zoom;
553
+ var zoom = _this._zoom * zoomScale;
554
+ // for both PerspectiveCamera and OrthographicCamera
555
+ _this.zoomTo(zoom, true);
556
+ if (_this.dollyToCursor) {
557
+ _this._changedZoom += zoom - lastZoom;
558
+ _this._dollyControlCoord.set(x, y);
559
+ }
560
+ };
561
+ // Check if the user has installed THREE
562
+ if (typeof THREE === 'undefined') {
563
+ console.error('camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information.');
564
+ }
565
+ _this._camera = camera;
566
+ _this._yAxisUpSpace = new THREE.Quaternion().setFromUnitVectors(_this._camera.up, _AXIS_Y);
567
+ // this._yAxisUpSpaceInverse = this._yAxisUpSpace.clone().invert();
568
+ _this._yAxisUpSpaceInverse = _this._yAxisUpSpace.clone();
569
+ _this._state = ACTION.NONE;
570
+ // the location
571
+ _this._target = new THREE.Vector3();
572
+ _this._targetEnd = _this._target.clone();
573
+ _this._focalOffset = new THREE.Vector3();
574
+ _this._focalOffsetEnd = _this._focalOffset.clone();
575
+ // rotation
576
+ _this._spherical = new THREE.Spherical().setFromVector3(_v3A.copy(_this._camera.position).applyQuaternion(_this._yAxisUpSpace));
577
+ _this._sphericalEnd = _this._spherical.clone();
578
+ _this._lastDistance = _this._spherical.radius;
579
+ _this._zoom = _this._camera.zoom;
580
+ _this._zoomEnd = _this._zoom;
581
+ _this._lastZoom = _this._zoom;
582
+ // collisionTest uses nearPlane.s
583
+ _this._nearPlaneCorners = [new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3(), new THREE.Vector3()];
584
+ _this._updateNearPlaneCorners();
585
+ // Target cannot move outside of this box
586
+ _this._boundary = new THREE.Box3(new THREE.Vector3(-Infinity, -Infinity, -Infinity), new THREE.Vector3(Infinity, Infinity, Infinity));
587
+ // reset
588
+ _this._cameraUp0 = _this._camera.up.clone();
589
+ _this._target0 = _this._target.clone();
590
+ _this._position0 = _this._camera.position.clone();
591
+ _this._zoom0 = _this._zoom;
592
+ _this._focalOffset0 = _this._focalOffset.clone();
593
+ _this._dollyControlCoord = new THREE.Vector2();
594
+ // configs
595
+ _this.mouseButtons = {
596
+ left: ACTION.ROTATE,
597
+ middle: ACTION.DOLLY,
598
+ right: ACTION.TRUCK,
599
+ wheel: isPerspectiveCamera(_this._camera) ? ACTION.DOLLY : isOrthographicCamera(_this._camera) ? ACTION.ZOOM : ACTION.NONE
600
+ };
601
+ _this.touches = {
602
+ one: ACTION.TOUCH_ROTATE,
603
+ two: isPerspectiveCamera(_this._camera) ? ACTION.TOUCH_DOLLY_TRUCK : isOrthographicCamera(_this._camera) ? ACTION.TOUCH_ZOOM_TRUCK : ACTION.NONE,
604
+ three: ACTION.TOUCH_TRUCK
605
+ };
606
+ var dragStartPosition = new THREE.Vector2();
607
+ var lastDragPosition = new THREE.Vector2();
608
+ var dollyStart = new THREE.Vector2();
609
+ var onPointerDown = function onPointerDown(event) {
610
+ if (!_this._enabled || !_this._domElement) return;
611
+ if (_this._interactiveArea.left !== 0 || _this._interactiveArea.top !== 0 || _this._interactiveArea.width !== 1 || _this._interactiveArea.height !== 1) {
612
+ var elRect = _this._domElement.getBoundingClientRect();
613
+ var left = event.clientX / elRect.width;
614
+ var top = event.clientY / elRect.height;
615
+ // check if the interactiveArea contains the drag start position.
616
+ if (left < _this._interactiveArea.left || left > _this._interactiveArea.right || top < _this._interactiveArea.top || top > _this._interactiveArea.bottom) return;
617
+ }
618
+ // Don't call `event.preventDefault()` on the pointerdown event
619
+ // to keep receiving pointermove evens outside dragging iframe
620
+ // https://taye.me/blog/tips/2015/11/16/mouse-drag-outside-iframe/
621
+ var mouseButton = event.pointerType !== 'mouse' ? null : (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT ? MOUSE_BUTTON.LEFT : (event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE ? MOUSE_BUTTON.MIDDLE : (event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT ? MOUSE_BUTTON.RIGHT : null;
622
+ if (mouseButton !== null) {
623
+ var zombiePointer = _this._findPointerByMouseButton(mouseButton);
624
+ zombiePointer && _this._disposePointer(zombiePointer);
625
+ }
626
+ if ((event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT && _this._lockedPointer) return;
627
+ var pointer = {
628
+ pointerId: event.pointerId,
629
+ clientX: event.clientX,
630
+ clientY: event.clientY,
631
+ deltaX: 0,
632
+ deltaY: 0,
633
+ mouseButton: mouseButton
634
+ };
635
+ _this._activePointers.push(pointer);
636
+ // eslint-disable-next-line no-undef
637
+ _this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, {
638
+ passive: false
639
+ });
640
+ _this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);
641
+ _this._domElement.ownerDocument.addEventListener('pointermove', onPointerMove, {
642
+ passive: false
643
+ });
644
+ _this._domElement.ownerDocument.addEventListener('pointerup', onPointerUp);
645
+ _this._isDragging = true;
646
+ startDragging(event);
647
+ };
648
+ var onPointerMove = function onPointerMove(event) {
649
+ if (event.cancelable) event.preventDefault();
650
+ var pointerId = event.pointerId;
651
+ var pointer = _this._lockedPointer || _this._findPointerById(pointerId);
652
+ if (!pointer) return;
653
+ pointer.clientX = event.clientX;
654
+ pointer.clientY = event.clientY;
655
+ pointer.deltaX = event.movementX;
656
+ pointer.deltaY = event.movementY;
657
+ _this._state = 0;
658
+ if (event.pointerType === 'touch') {
659
+ switch (_this._activePointers.length) {
660
+ case 1:
661
+ _this._state = _this.touches.one;
662
+ break;
663
+ case 2:
664
+ _this._state = _this.touches.two;
665
+ break;
666
+ case 3:
667
+ _this._state = _this.touches.three;
668
+ break;
669
+ }
670
+ } else {
671
+ if (!_this._isDragging && _this._lockedPointer || _this._isDragging && (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT) {
672
+ _this._state = _this._state | _this.mouseButtons.left;
673
+ }
674
+ if (_this._isDragging && (event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE) {
675
+ _this._state = _this._state | _this.mouseButtons.middle;
676
+ }
677
+ if (_this._isDragging && (event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT) {
678
+ _this._state = _this._state | _this.mouseButtons.right;
679
+ }
680
+ }
681
+ dragging();
682
+ };
683
+ var onPointerUp = function onPointerUp(event) {
684
+ var pointer = _this._findPointerById(event.pointerId);
685
+ if (pointer && pointer === _this._lockedPointer) return;
686
+ pointer && _this._disposePointer(pointer);
687
+ if (event.pointerType === 'touch') {
688
+ switch (_this._activePointers.length) {
689
+ case 0:
690
+ _this._state = ACTION.NONE;
691
+ break;
692
+ case 1:
693
+ _this._state = _this.touches.one;
694
+ break;
695
+ case 2:
696
+ _this._state = _this.touches.two;
697
+ break;
698
+ case 3:
699
+ _this._state = _this.touches.three;
700
+ break;
701
+ }
702
+ } else {
703
+ _this._state = ACTION.NONE;
704
+ }
705
+ endDragging();
706
+ };
707
+ var lastScrollTimeStamp = -1;
708
+ var onMouseWheel = function onMouseWheel(event) {
709
+ if (!_this._domElement) return;
710
+ if (!_this._enabled || _this.mouseButtons.wheel === ACTION.NONE) return;
711
+ if (_this._interactiveArea.left !== 0 || _this._interactiveArea.top !== 0 || _this._interactiveArea.width !== 1 || _this._interactiveArea.height !== 1) {
712
+ var elRect = _this._domElement.getBoundingClientRect();
713
+ var left = event.clientX / elRect.width;
714
+ var top = event.clientY / elRect.height;
715
+ // check if the interactiveArea contains the drag start position.
716
+ if (left < _this._interactiveArea.left || left > _this._interactiveArea.right || top < _this._interactiveArea.top || top > _this._interactiveArea.bottom) return;
717
+ }
718
+ event.preventDefault();
719
+ if (_this.dollyToCursor || _this.mouseButtons.wheel === ACTION.ROTATE || _this.mouseButtons.wheel === ACTION.TRUCK) {
720
+ var now = performance.now();
721
+ // only need to fire this at scroll start.
722
+ if (lastScrollTimeStamp - now < 1000) _this._getClientRect(_this._elementRect);
723
+ lastScrollTimeStamp = now;
724
+ }
725
+ // Ref: https://github.com/cedricpinson/osgjs/blob/00e5a7e9d9206c06fdde0436e1d62ab7cb5ce853/sources/osgViewer/input/source/InputSourceMouse.js#L89-L103
726
+ var deltaYFactor = isMac ? -1 : -3;
727
+ var delta = event.deltaMode === 1 ? event.deltaY / deltaYFactor : event.deltaY / (deltaYFactor * 10);
728
+ var x = _this.dollyToCursor ? (event.clientX - _this._elementRect.x) / _this._elementRect.width * 2 - 1 : 0;
729
+ var y = _this.dollyToCursor ? (event.clientY - _this._elementRect.y) / _this._elementRect.height * -2 + 1 : 0;
730
+ switch (_this.mouseButtons.wheel) {
731
+ case ACTION.ROTATE:
732
+ {
733
+ _this._rotateInternal(event.deltaX, event.deltaY);
734
+ _this._isUserControllingRotate = true;
735
+ break;
736
+ }
737
+ case ACTION.TRUCK:
738
+ {
739
+ _this._truckInternal(event.deltaX, event.deltaY, false);
740
+ _this._isUserControllingTruck = true;
741
+ break;
742
+ }
743
+ case ACTION.OFFSET:
744
+ {
745
+ _this._truckInternal(event.deltaX, event.deltaY, true);
746
+ _this._isUserControllingOffset = true;
747
+ break;
748
+ }
749
+ case ACTION.DOLLY:
750
+ {
751
+ _this._dollyInternal(-delta, x, y);
752
+ _this._isUserControllingDolly = true;
753
+ break;
754
+ }
755
+ case ACTION.ZOOM:
756
+ {
757
+ _this._zoomInternal(-delta, x, y);
758
+ _this._isUserControllingZoom = true;
759
+ break;
760
+ }
761
+ }
762
+ _this.dispatchEvent({
763
+ type: 'control'
764
+ });
765
+ };
766
+ var onContextMenu = function onContextMenu(event) {
767
+ if (!_this._domElement || !_this._enabled) return;
768
+ // contextmenu event is fired right after pointerdown
769
+ // remove attached handlers and active pointer, if interrupted by contextmenu.
770
+ if (_this.mouseButtons.right === CameraControls.ACTION.NONE) {
771
+ var pointerId = event instanceof PointerEvent ? event.pointerId : 0;
772
+ var pointer = _this._findPointerById(pointerId);
773
+ pointer && _this._disposePointer(pointer);
774
+ // eslint-disable-next-line no-undef
775
+ _this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, {
776
+ passive: false
777
+ });
778
+ _this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);
779
+ return;
780
+ }
781
+ event.preventDefault();
782
+ };
783
+ var startDragging = function startDragging(event) {
784
+ if (!_this._enabled) return;
785
+ extractClientCoordFromEvent(_this._activePointers, _v2);
786
+ _this._getClientRect(_this._elementRect);
787
+ dragStartPosition.copy(_v2);
788
+ lastDragPosition.copy(_v2);
789
+ var isMultiTouch = _this._activePointers.length >= 2;
790
+ if (isMultiTouch) {
791
+ // 2 finger pinch
792
+ var dx = _v2.x - _this._activePointers[1].clientX;
793
+ var dy = _v2.y - _this._activePointers[1].clientY;
794
+ var distance = Math.sqrt(dx * dx + dy * dy);
795
+ dollyStart.set(0, distance);
796
+ // center coords of 2 finger truck
797
+ var x = (_this._activePointers[0].clientX + _this._activePointers[1].clientX) * 0.5;
798
+ var y = (_this._activePointers[0].clientY + _this._activePointers[1].clientY) * 0.5;
799
+ lastDragPosition.set(x, y);
800
+ }
801
+ _this._state = 0;
802
+ if (!event) {
803
+ if (_this._lockedPointer) _this._state = _this._state | _this.mouseButtons.left;
804
+ } else if ('pointerType' in event && event.pointerType === 'touch') {
805
+ switch (_this._activePointers.length) {
806
+ case 1:
807
+ _this._state = _this.touches.one;
808
+ break;
809
+ case 2:
810
+ _this._state = _this.touches.two;
811
+ break;
812
+ case 3:
813
+ _this._state = _this.touches.three;
814
+ break;
815
+ }
816
+ } else {
817
+ if (!_this._lockedPointer && (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT) {
818
+ _this._state = _this._state | _this.mouseButtons.left;
819
+ }
820
+ if ((event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE) {
821
+ _this._state = _this._state | _this.mouseButtons.middle;
822
+ }
823
+ if ((event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT) {
824
+ _this._state = _this._state | _this.mouseButtons.right;
825
+ }
826
+ }
827
+ // stop current movement on drag start
828
+ if ((_this._state & ACTION.ROTATE) === ACTION.ROTATE || (_this._state & ACTION.TOUCH_ROTATE) === ACTION.TOUCH_ROTATE || (_this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE || (_this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {
829
+ _this._sphericalEnd.theta = _this._spherical.theta;
830
+ _this._sphericalEnd.phi = _this._spherical.phi;
831
+ _this._thetaVelocity.value = 0;
832
+ _this._phiVelocity.value = 0;
833
+ }
834
+ if ((_this._state & ACTION.TRUCK) === ACTION.TRUCK || (_this._state & ACTION.TOUCH_TRUCK) === ACTION.TOUCH_TRUCK || (_this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK || (_this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK) {
835
+ _this._targetEnd.copy(_this._target);
836
+ _this._targetVelocity.set(0, 0, 0);
837
+ }
838
+ if ((_this._state & ACTION.DOLLY) === ACTION.DOLLY || (_this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY || (_this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK || (_this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET || (_this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE) {
839
+ _this._sphericalEnd.radius = _this._spherical.radius;
840
+ _this._radiusVelocity.value = 0;
841
+ }
842
+ if ((_this._state & ACTION.ZOOM) === ACTION.ZOOM || (_this._state & ACTION.TOUCH_ZOOM) === ACTION.TOUCH_ZOOM || (_this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK || (_this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET || (_this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {
843
+ _this._zoomEnd = _this._zoom;
844
+ _this._zoomVelocity.value = 0;
845
+ }
846
+ if ((_this._state & ACTION.OFFSET) === ACTION.OFFSET || (_this._state & ACTION.TOUCH_OFFSET) === ACTION.TOUCH_OFFSET || (_this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET || (_this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET) {
847
+ _this._focalOffsetEnd.copy(_this._focalOffset);
848
+ _this._focalOffsetVelocity.set(0, 0, 0);
849
+ }
850
+ _this.dispatchEvent({
851
+ type: 'controlstart'
852
+ });
853
+ };
854
+ var dragging = function dragging() {
855
+ if (!_this._enabled || !_this._dragNeedsUpdate) return;
856
+ _this._dragNeedsUpdate = false;
857
+ extractClientCoordFromEvent(_this._activePointers, _v2);
858
+ // When pointer lock is enabled clientX, clientY, screenX, and screenY remain 0.
859
+ // If pointer lock is enabled, use the Delta directory, and assume active-pointer is not multiple.
860
+ var isPointerLockActive = _this._domElement && _this._domElement.ownerDocument.pointerLockElement === _this._domElement;
861
+ var lockedPointer = isPointerLockActive ? _this._lockedPointer || _this._activePointers[0] : null;
862
+ var deltaX = lockedPointer ? -lockedPointer.deltaX : lastDragPosition.x - _v2.x;
863
+ var deltaY = lockedPointer ? -lockedPointer.deltaY : lastDragPosition.y - _v2.y;
864
+ lastDragPosition.copy(_v2);
865
+ if ((_this._state & ACTION.ROTATE) === ACTION.ROTATE || (_this._state & ACTION.TOUCH_ROTATE) === ACTION.TOUCH_ROTATE || (_this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE || (_this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {
866
+ _this._rotateInternal(deltaX, deltaY);
867
+ _this._isUserControllingRotate = true;
868
+ }
869
+ if ((_this._state & ACTION.DOLLY) === ACTION.DOLLY || (_this._state & ACTION.ZOOM) === ACTION.ZOOM) {
870
+ var dollyX = _this.dollyToCursor ? (dragStartPosition.x - _this._elementRect.x) / _this._elementRect.width * 2 - 1 : 0;
871
+ var dollyY = _this.dollyToCursor ? (dragStartPosition.y - _this._elementRect.y) / _this._elementRect.height * -2 + 1 : 0;
872
+ var dollyDirection = _this.dollyDragInverted ? -1 : 1;
873
+ if ((_this._state & ACTION.DOLLY) === ACTION.DOLLY) {
874
+ _this._dollyInternal(dollyDirection * deltaY * TOUCH_DOLLY_FACTOR, dollyX, dollyY);
875
+ _this._isUserControllingDolly = true;
876
+ } else {
877
+ _this._zoomInternal(dollyDirection * deltaY * TOUCH_DOLLY_FACTOR, dollyX, dollyY);
878
+ _this._isUserControllingZoom = true;
879
+ }
880
+ }
881
+ if ((_this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY || (_this._state & ACTION.TOUCH_ZOOM) === ACTION.TOUCH_ZOOM || (_this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK || (_this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK || (_this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET || (_this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET || (_this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE || (_this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {
882
+ var dx = _v2.x - _this._activePointers[1].clientX;
883
+ var dy = _v2.y - _this._activePointers[1].clientY;
884
+ var distance = Math.sqrt(dx * dx + dy * dy);
885
+ var dollyDelta = dollyStart.y - distance;
886
+ dollyStart.set(0, distance);
887
+ var _dollyX = _this.dollyToCursor ? (lastDragPosition.x - _this._elementRect.x) / _this._elementRect.width * 2 - 1 : 0;
888
+ var _dollyY = _this.dollyToCursor ? (lastDragPosition.y - _this._elementRect.y) / _this._elementRect.height * -2 + 1 : 0;
889
+ if ((_this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY || (_this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE || (_this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK || (_this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET) {
890
+ _this._dollyInternal(dollyDelta * TOUCH_DOLLY_FACTOR, _dollyX, _dollyY);
891
+ _this._isUserControllingDolly = true;
892
+ } else {
893
+ _this._zoomInternal(dollyDelta * TOUCH_DOLLY_FACTOR, _dollyX, _dollyY);
894
+ _this._isUserControllingZoom = true;
895
+ }
896
+ }
897
+ if ((_this._state & ACTION.TRUCK) === ACTION.TRUCK || (_this._state & ACTION.TOUCH_TRUCK) === ACTION.TOUCH_TRUCK || (_this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK || (_this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK) {
898
+ _this._truckInternal(deltaX, deltaY, false);
899
+ _this._isUserControllingTruck = true;
900
+ }
901
+ if ((_this._state & ACTION.OFFSET) === ACTION.OFFSET || (_this._state & ACTION.TOUCH_OFFSET) === ACTION.TOUCH_OFFSET || (_this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET || (_this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET) {
902
+ _this._truckInternal(deltaX, deltaY, true);
903
+ _this._isUserControllingOffset = true;
904
+ }
905
+ _this.dispatchEvent({
906
+ type: 'control'
907
+ });
908
+ };
909
+ var endDragging = function endDragging() {
910
+ extractClientCoordFromEvent(_this._activePointers, _v2);
911
+ lastDragPosition.copy(_v2);
912
+ _this._dragNeedsUpdate = false;
913
+ if (_this._activePointers.length === 0 || _this._activePointers.length === 1 && _this._activePointers[0] === _this._lockedPointer) {
914
+ _this._isDragging = false;
915
+ }
916
+ if (_this._activePointers.length === 0 && _this._domElement) {
917
+ // eslint-disable-next-line no-undef
918
+ _this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, {
919
+ passive: false
920
+ });
921
+ _this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);
922
+ _this.dispatchEvent({
923
+ type: 'controlend'
924
+ });
925
+ }
926
+ };
927
+ _this.lockPointer = function () {
928
+ if (!_this._enabled || !_this._domElement) return;
929
+ _this.cancel();
930
+ // Element.requestPointerLock is allowed to happen without any pointer active - create a faux one for compatibility with controls
931
+ _this._lockedPointer = {
932
+ pointerId: -1,
933
+ clientX: 0,
934
+ clientY: 0,
935
+ deltaX: 0,
936
+ deltaY: 0,
937
+ mouseButton: null
938
+ };
939
+ _this._activePointers.push(_this._lockedPointer);
940
+ // eslint-disable-next-line no-undef
941
+ _this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, {
942
+ passive: false
943
+ });
944
+ _this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);
945
+ _this._domElement.requestPointerLock();
946
+ _this._domElement.ownerDocument.addEventListener('pointerlockchange', onPointerLockChange);
947
+ _this._domElement.ownerDocument.addEventListener('pointerlockerror', onPointerLockError);
948
+ _this._domElement.ownerDocument.addEventListener('pointermove', onPointerMove, {
949
+ passive: false
950
+ });
951
+ _this._domElement.ownerDocument.addEventListener('pointerup', onPointerUp);
952
+ startDragging();
953
+ };
954
+ _this.unlockPointer = function () {
955
+ var _a, _b, _c;
956
+ if (_this._lockedPointer !== null) {
957
+ _this._disposePointer(_this._lockedPointer);
958
+ _this._lockedPointer = null;
959
+ }
960
+ (_a = _this._domElement) === null || _a === void 0 ? void 0 : _a.ownerDocument.exitPointerLock();
961
+ (_b = _this._domElement) === null || _b === void 0 ? void 0 : _b.ownerDocument.removeEventListener('pointerlockchange', onPointerLockChange);
962
+ (_c = _this._domElement) === null || _c === void 0 ? void 0 : _c.ownerDocument.removeEventListener('pointerlockerror', onPointerLockError);
963
+ _this.cancel();
964
+ };
965
+ var onPointerLockChange = function onPointerLockChange() {
966
+ var isPointerLockActive = _this._domElement && _this._domElement.ownerDocument.pointerLockElement === _this._domElement;
967
+ if (!isPointerLockActive) _this.unlockPointer();
968
+ };
969
+ var onPointerLockError = function onPointerLockError() {
970
+ _this.unlockPointer();
971
+ };
972
+ _this._addAllEventListeners = function (domElement) {
973
+ _this._domElement = domElement;
974
+ _this._domElement.style.touchAction = 'none';
975
+ _this._domElement.style.userSelect = 'none';
976
+ _this._domElement.style.webkitUserSelect = 'none';
977
+ _this._domElement.addEventListener('pointerdown', onPointerDown);
978
+ _this._domElement.addEventListener('pointercancel', onPointerUp);
979
+ _this._domElement.addEventListener('wheel', onMouseWheel, {
980
+ passive: false
981
+ });
982
+ _this._domElement.addEventListener('contextmenu', onContextMenu);
983
+ };
984
+ _this._removeAllEventListeners = function () {
985
+ if (!_this._domElement) return;
986
+ _this._domElement.style.touchAction = '';
987
+ _this._domElement.style.userSelect = '';
988
+ _this._domElement.style.webkitUserSelect = '';
989
+ _this._domElement.removeEventListener('pointerdown', onPointerDown);
990
+ _this._domElement.removeEventListener('pointercancel', onPointerUp);
991
+ // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#matching_event_listeners_for_removal
992
+ // > it's probably wise to use the same values used for the call to `addEventListener()` when calling `removeEventListener()`
993
+ // see https://github.com/microsoft/TypeScript/issues/32912#issuecomment-522142969
994
+ // eslint-disable-next-line no-undef
995
+ _this._domElement.removeEventListener('wheel', onMouseWheel, {
996
+ passive: false
997
+ });
998
+ _this._domElement.removeEventListener('contextmenu', onContextMenu);
999
+ // eslint-disable-next-line no-undef
1000
+ _this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, {
1001
+ passive: false
1002
+ });
1003
+ _this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);
1004
+ _this._domElement.ownerDocument.removeEventListener('pointerlockchange', onPointerLockChange);
1005
+ _this._domElement.ownerDocument.removeEventListener('pointerlockerror', onPointerLockError);
1006
+ };
1007
+ _this.cancel = function () {
1008
+ if (_this._state === ACTION.NONE) return;
1009
+ _this._state = ACTION.NONE;
1010
+ _this._activePointers.length = 0;
1011
+ endDragging();
1012
+ };
1013
+ if (domElement) _this.connect(domElement);
1014
+ _this.update(0);
1015
+ return _this;
1016
+ }
1017
+ /**
1018
+ * The camera to be controlled
1019
+ * @category Properties
1020
+ */
1021
+ _inherits(CameraControls, _EventDispatcher);
1022
+ return _createClass(CameraControls, [{
1023
+ key: "camera",
1024
+ get: function get() {
1025
+ return this._camera;
1026
+ },
1027
+ set: function set(camera) {
1028
+ this._camera = camera;
1029
+ this.updateCameraUp();
1030
+ this._camera.updateProjectionMatrix();
1031
+ this._updateNearPlaneCorners();
1032
+ this._needsUpdate = true;
1033
+ }
1034
+ /**
1035
+ * Whether or not the controls are enabled.
1036
+ * `false` to disable user dragging/touch-move, but all methods works.
1037
+ * @category Properties
1038
+ */
1039
+ }, {
1040
+ key: "enabled",
1041
+ get: function get() {
1042
+ return this._enabled;
1043
+ },
1044
+ set: function set(enabled) {
1045
+ this._enabled = enabled;
1046
+ if (!this._domElement) return;
1047
+ if (enabled) {
1048
+ this._domElement.style.touchAction = 'none';
1049
+ this._domElement.style.userSelect = 'none';
1050
+ this._domElement.style.webkitUserSelect = 'none';
1051
+ } else {
1052
+ this.cancel();
1053
+ this._domElement.style.touchAction = '';
1054
+ this._domElement.style.userSelect = '';
1055
+ this._domElement.style.webkitUserSelect = '';
1056
+ }
1057
+ }
1058
+ /**
1059
+ * Returns `true` if the controls are active updating.
1060
+ * readonly value.
1061
+ * @category Properties
1062
+ */
1063
+ }, {
1064
+ key: "active",
1065
+ get: function get() {
1066
+ return !this._hasRested;
1067
+ }
1068
+ /**
1069
+ * Getter for the current `ACTION`.
1070
+ * readonly value.
1071
+ * @category Properties
1072
+ */
1073
+ }, {
1074
+ key: "currentAction",
1075
+ get: function get() {
1076
+ return this._state;
1077
+ }
1078
+ /**
1079
+ * get/set Current distance.
1080
+ * @category Properties
1081
+ */
1082
+ }, {
1083
+ key: "distance",
1084
+ get: function get() {
1085
+ return this._spherical.radius;
1086
+ },
1087
+ set: function set(distance) {
1088
+ if (this._spherical.radius === distance && this._sphericalEnd.radius === distance) return;
1089
+ this._spherical.radius = distance;
1090
+ this._sphericalEnd.radius = distance;
1091
+ this._needsUpdate = true;
1092
+ }
1093
+ // horizontal angle
1094
+ /**
1095
+ * get/set the azimuth angle (horizontal) in radians.
1096
+ * Every 360 degrees turn is added to `.azimuthAngle` value, which is accumulative.
1097
+ * @category Properties
1098
+ */
1099
+ }, {
1100
+ key: "azimuthAngle",
1101
+ get: function get() {
1102
+ return this._spherical.theta;
1103
+ },
1104
+ set: function set(azimuthAngle) {
1105
+ if (this._spherical.theta === azimuthAngle && this._sphericalEnd.theta === azimuthAngle) return;
1106
+ this._spherical.theta = azimuthAngle;
1107
+ this._sphericalEnd.theta = azimuthAngle;
1108
+ this._needsUpdate = true;
1109
+ }
1110
+ // vertical angle
1111
+ /**
1112
+ * get/set the polar angle (vertical) in radians.
1113
+ * @category Properties
1114
+ */
1115
+ }, {
1116
+ key: "polarAngle",
1117
+ get: function get() {
1118
+ return this._spherical.phi;
1119
+ },
1120
+ set: function set(polarAngle) {
1121
+ if (this._spherical.phi === polarAngle && this._sphericalEnd.phi === polarAngle) return;
1122
+ this._spherical.phi = polarAngle;
1123
+ this._sphericalEnd.phi = polarAngle;
1124
+ this._needsUpdate = true;
1125
+ }
1126
+ /**
1127
+ * Whether camera position should be enclosed in the boundary or not.
1128
+ * @category Properties
1129
+ */
1130
+ }, {
1131
+ key: "boundaryEnclosesCamera",
1132
+ get: function get() {
1133
+ return this._boundaryEnclosesCamera;
1134
+ },
1135
+ set: function set(boundaryEnclosesCamera) {
1136
+ this._boundaryEnclosesCamera = boundaryEnclosesCamera;
1137
+ this._needsUpdate = true;
1138
+ }
1139
+ /**
1140
+ * Set drag-start, touches and wheel enable area in the domElement.
1141
+ * each values are between `0` and `1` inclusive, where `0` is left/top and `1` is right/bottom of the screen.
1142
+ * e.g. `{ x: 0, y: 0, width: 1, height: 1 }` for entire area.
1143
+ * @category Properties
1144
+ */
1145
+ }, {
1146
+ key: "interactiveArea",
1147
+ set: function set(interactiveArea) {
1148
+ this._interactiveArea.width = clamp(interactiveArea.width, 0, 1);
1149
+ this._interactiveArea.height = clamp(interactiveArea.height, 0, 1);
1150
+ this._interactiveArea.x = clamp(interactiveArea.x, 0, 1 - this._interactiveArea.width);
1151
+ this._interactiveArea.y = clamp(interactiveArea.y, 0, 1 - this._interactiveArea.height);
1152
+ }
1153
+ /**
1154
+ * Adds the specified event listener.
1155
+ * Applicable event types (which is `K`) are:
1156
+ * | Event name | Timing |
1157
+ * | ------------------- | ------ |
1158
+ * | `'controlstart'` | When the user starts to control the camera via mouse / touches. ¹ |
1159
+ * | `'control'` | When the user controls the camera (dragging). |
1160
+ * | `'controlend'` | When the user ends to control the camera. ¹ |
1161
+ * | `'transitionstart'` | When any kind of transition starts, either user control or using a method with `enableTransition = true` |
1162
+ * | `'update'` | When the camera position is updated. |
1163
+ * | `'wake'` | When the camera starts moving. |
1164
+ * | `'rest'` | When the camera movement is below `.restThreshold` ². |
1165
+ * | `'sleep'` | When the camera end moving. |
1166
+ *
1167
+ * 1. `mouseButtons.wheel` (Mouse wheel control) does not emit `'controlstart'` and `'controlend'`. `mouseButtons.wheel` uses scroll-event internally, and scroll-event happens intermittently. That means "start" and "end" cannot be detected.
1168
+ * 2. Due to damping, `sleep` will usually fire a few seconds after the camera _appears_ to have stopped moving. If you want to do something (e.g. enable UI, perform another transition) at the point when the camera has stopped, you probably want the `rest` event. This can be fine tuned using the `.restThreshold` parameter. See the [Rest and Sleep Example](https://yomotsu.github.io/camera-controls/examples/rest-and-sleep.html).
1169
+ *
1170
+ * e.g.
1171
+ * ```
1172
+ * cameraControl.addEventListener( 'controlstart', myCallbackFunction );
1173
+ * ```
1174
+ * @param type event name
1175
+ * @param listener handler function
1176
+ * @category Methods
1177
+ */
1178
+ }, {
1179
+ key: "addEventListener",
1180
+ value: function addEventListener(type, listener) {
1181
+ _superPropGet(CameraControls, "addEventListener", this, 3)([type, listener]);
1182
+ }
1183
+ /**
1184
+ * Removes the specified event listener
1185
+ * e.g.
1186
+ * ```
1187
+ * cameraControl.addEventListener( 'controlstart', myCallbackFunction );
1188
+ * ```
1189
+ * @param type event name
1190
+ * @param listener handler function
1191
+ * @category Methods
1192
+ */
1193
+ }, {
1194
+ key: "removeEventListener",
1195
+ value: function removeEventListener(type, listener) {
1196
+ _superPropGet(CameraControls, "removeEventListener", this, 3)([type, listener]);
1197
+ }
1198
+ /**
1199
+ * Rotate azimuthal angle(horizontal) and polar angle(vertical).
1200
+ * Every value is added to the current value.
1201
+ * @param azimuthAngle Azimuth rotate angle. In radian.
1202
+ * @param polarAngle Polar rotate angle. In radian.
1203
+ * @param enableTransition Whether to move smoothly or immediately
1204
+ * @category Methods
1205
+ */
1206
+ }, {
1207
+ key: "rotate",
1208
+ value: function rotate(azimuthAngle, polarAngle) {
1209
+ var enableTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1210
+ return this.rotateTo(this._sphericalEnd.theta + azimuthAngle, this._sphericalEnd.phi + polarAngle, enableTransition);
1211
+ }
1212
+ /**
1213
+ * Rotate azimuthal angle(horizontal) to the given angle and keep the same polar angle(vertical) target.
1214
+ *
1215
+ * e.g.
1216
+ * ```
1217
+ * cameraControls.rotateAzimuthTo( 30 * THREE.MathUtils.DEG2RAD, true );
1218
+ * ```
1219
+ * @param azimuthAngle Azimuth rotate angle. In radian.
1220
+ * @param enableTransition Whether to move smoothly or immediately
1221
+ * @category Methods
1222
+ */
1223
+ }, {
1224
+ key: "rotateAzimuthTo",
1225
+ value: function rotateAzimuthTo(azimuthAngle) {
1226
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1227
+ return this.rotateTo(azimuthAngle, this._sphericalEnd.phi, enableTransition);
1228
+ }
1229
+ /**
1230
+ * Rotate polar angle(vertical) to the given angle and keep the same azimuthal angle(horizontal) target.
1231
+ *
1232
+ * e.g.
1233
+ * ```
1234
+ * cameraControls.rotatePolarTo( 30 * THREE.MathUtils.DEG2RAD, true );
1235
+ * ```
1236
+ * @param polarAngle Polar rotate angle. In radian.
1237
+ * @param enableTransition Whether to move smoothly or immediately
1238
+ * @category Methods
1239
+ */
1240
+ }, {
1241
+ key: "rotatePolarTo",
1242
+ value: function rotatePolarTo(polarAngle) {
1243
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1244
+ return this.rotateTo(this._sphericalEnd.theta, polarAngle, enableTransition);
1245
+ }
1246
+ /**
1247
+ * Rotate azimuthal angle(horizontal) and polar angle(vertical) to the given angle.
1248
+ * Camera view will rotate over the orbit pivot absolutely:
1249
+ *
1250
+ * azimuthAngle
1251
+ * ```
1252
+ * 0º
1253
+ * \
1254
+ * 90º -----+----- -90º
1255
+ * \
1256
+ * 180º
1257
+ * ```
1258
+ * | direction | angle |
1259
+ * | --------- | ---------------------- |
1260
+ * | front | 0º |
1261
+ * | left | 90º (`Math.PI / 2`) |
1262
+ * | right | -90º (`- Math.PI / 2`) |
1263
+ * | back | 180º (`Math.PI`) |
1264
+ *
1265
+ * polarAngle
1266
+ * ```
1267
+ * 180º
1268
+ * |
1269
+ * 90º
1270
+ * |
1271
+ * 0º
1272
+ * ```
1273
+ * | direction | angle |
1274
+ * | -------------------- | ---------------------- |
1275
+ * | top/sky | 180º (`Math.PI`) |
1276
+ * | horizontal from view | 90º (`Math.PI / 2`) |
1277
+ * | bottom/floor | 0º |
1278
+ *
1279
+ * @param azimuthAngle Azimuth rotate angle to. In radian.
1280
+ * @param polarAngle Polar rotate angle to. In radian.
1281
+ * @param enableTransition Whether to move smoothly or immediately
1282
+ * @category Methods
1283
+ */
1284
+ }, {
1285
+ key: "rotateTo",
1286
+ value: function rotateTo(azimuthAngle, polarAngle) {
1287
+ var enableTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1288
+ this._isUserControllingRotate = false;
1289
+ var theta = clamp(azimuthAngle, this.minAzimuthAngle, this.maxAzimuthAngle);
1290
+ var phi = clamp(polarAngle, this.minPolarAngle, this.maxPolarAngle);
1291
+ this._sphericalEnd.theta = theta;
1292
+ this._sphericalEnd.phi = phi;
1293
+ this._sphericalEnd.makeSafe();
1294
+ this._needsUpdate = true;
1295
+ if (!enableTransition) {
1296
+ this._spherical.theta = this._sphericalEnd.theta;
1297
+ this._spherical.phi = this._sphericalEnd.phi;
1298
+ }
1299
+ var resolveImmediately = !enableTransition || approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) && approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold);
1300
+ return this._createOnRestPromise(resolveImmediately);
1301
+ }
1302
+ /**
1303
+ * Dolly in/out camera position.
1304
+ * @param distance Distance of dollyIn. Negative number for dollyOut.
1305
+ * @param enableTransition Whether to move smoothly or immediately.
1306
+ * @category Methods
1307
+ */
1308
+ }, {
1309
+ key: "dolly",
1310
+ value: function dolly(distance) {
1311
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1312
+ return this.dollyTo(this._sphericalEnd.radius - distance, enableTransition);
1313
+ }
1314
+ /**
1315
+ * Dolly in/out camera position to given distance.
1316
+ * @param distance Distance of dolly.
1317
+ * @param enableTransition Whether to move smoothly or immediately.
1318
+ * @category Methods
1319
+ */
1320
+ }, {
1321
+ key: "dollyTo",
1322
+ value: function dollyTo(distance) {
1323
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1324
+ this._isUserControllingDolly = false;
1325
+ this._lastDollyDirection = DOLLY_DIRECTION.NONE;
1326
+ this._changedDolly = 0;
1327
+ return this._dollyToNoClamp(clamp(distance, this.minDistance, this.maxDistance), enableTransition);
1328
+ }
1329
+ }, {
1330
+ key: "_dollyToNoClamp",
1331
+ value: function _dollyToNoClamp(distance) {
1332
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1333
+ var lastRadius = this._sphericalEnd.radius;
1334
+ var hasCollider = this.colliderMeshes.length >= 1;
1335
+ if (hasCollider) {
1336
+ var maxDistanceByCollisionTest = this._collisionTest();
1337
+ var isCollided = approxEquals(maxDistanceByCollisionTest, this._spherical.radius);
1338
+ var isDollyIn = lastRadius > distance;
1339
+ if (!isDollyIn && isCollided) return Promise.resolve();
1340
+ this._sphericalEnd.radius = Math.min(distance, maxDistanceByCollisionTest);
1341
+ } else {
1342
+ this._sphericalEnd.radius = distance;
1343
+ }
1344
+ this._needsUpdate = true;
1345
+ if (!enableTransition) {
1346
+ this._spherical.radius = this._sphericalEnd.radius;
1347
+ }
1348
+ var resolveImmediately = !enableTransition || approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);
1349
+ return this._createOnRestPromise(resolveImmediately);
1350
+ }
1351
+ /**
1352
+ * Dolly in, but does not change the distance between the target and the camera, and moves the target position instead.
1353
+ * Specify a negative value for dolly out.
1354
+ * @param distance Distance of dolly.
1355
+ * @param enableTransition Whether to move smoothly or immediately.
1356
+ * @category Methods
1357
+ */
1358
+ }, {
1359
+ key: "dollyInFixed",
1360
+ value: function dollyInFixed(distance) {
1361
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1362
+ this._targetEnd.add(this._getCameraDirection(_cameraDirection).multiplyScalar(distance));
1363
+ if (!enableTransition) {
1364
+ this._target.copy(this._targetEnd);
1365
+ }
1366
+ var resolveImmediately = !enableTransition || approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) && approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) && approxEquals(this._target.z, this._targetEnd.z, this.restThreshold);
1367
+ return this._createOnRestPromise(resolveImmediately);
1368
+ }
1369
+ /**
1370
+ * Zoom in/out camera. The value is added to camera zoom.
1371
+ * Limits set with `.minZoom` and `.maxZoom`
1372
+ * @param zoomStep zoom scale
1373
+ * @param enableTransition Whether to move smoothly or immediately
1374
+ * @category Methods
1375
+ */
1376
+ }, {
1377
+ key: "zoom",
1378
+ value: function zoom(zoomStep) {
1379
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1380
+ return this.zoomTo(this._zoomEnd + zoomStep, enableTransition);
1381
+ }
1382
+ /**
1383
+ * Zoom in/out camera to given scale. The value overwrites camera zoom.
1384
+ * Limits set with .minZoom and .maxZoom
1385
+ * @param zoom
1386
+ * @param enableTransition
1387
+ * @category Methods
1388
+ */
1389
+ }, {
1390
+ key: "zoomTo",
1391
+ value: function zoomTo(zoom) {
1392
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1393
+ this._isUserControllingZoom = false;
1394
+ this._zoomEnd = clamp(zoom, this.minZoom, this.maxZoom);
1395
+ this._needsUpdate = true;
1396
+ if (!enableTransition) {
1397
+ this._zoom = this._zoomEnd;
1398
+ }
1399
+ var resolveImmediately = !enableTransition || approxEquals(this._zoom, this._zoomEnd, this.restThreshold);
1400
+ this._changedZoom = 0;
1401
+ return this._createOnRestPromise(resolveImmediately);
1402
+ }
1403
+ /**
1404
+ * @deprecated `pan()` has been renamed to `truck()`
1405
+ * @category Methods
1406
+ */
1407
+ }, {
1408
+ key: "pan",
1409
+ value: function pan(x, y) {
1410
+ var enableTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1411
+ console.warn('`pan` has been renamed to `truck`');
1412
+ return this.truck(x, y, enableTransition);
1413
+ }
1414
+ /**
1415
+ * Truck and pedestal camera using current azimuthal angle
1416
+ * @param x Horizontal translate amount
1417
+ * @param y Vertical translate amount
1418
+ * @param enableTransition Whether to move smoothly or immediately
1419
+ * @category Methods
1420
+ */
1421
+ }, {
1422
+ key: "truck",
1423
+ value: function truck(x, y) {
1424
+ var enableTransition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
1425
+ this._camera.updateMatrix();
1426
+ _xColumn.setFromMatrixColumn(this._camera.matrix, 0);
1427
+ _yColumn.setFromMatrixColumn(this._camera.matrix, 1);
1428
+ _xColumn.multiplyScalar(x);
1429
+ _yColumn.multiplyScalar(-y);
1430
+ var offset = _v3A.copy(_xColumn).add(_yColumn);
1431
+ var to = _v3B.copy(this._targetEnd).add(offset);
1432
+ return this.moveTo(to.x, to.y, to.z, enableTransition);
1433
+ }
1434
+ /**
1435
+ * Move forward / backward.
1436
+ * @param distance Amount to move forward / backward. Negative value to move backward
1437
+ * @param enableTransition Whether to move smoothly or immediately
1438
+ * @category Methods
1439
+ */
1440
+ }, {
1441
+ key: "forward",
1442
+ value: function forward(distance) {
1443
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1444
+ _v3A.setFromMatrixColumn(this._camera.matrix, 0);
1445
+ _v3A.crossVectors(this._camera.up, _v3A);
1446
+ _v3A.multiplyScalar(distance);
1447
+ var to = _v3B.copy(this._targetEnd).add(_v3A);
1448
+ return this.moveTo(to.x, to.y, to.z, enableTransition);
1449
+ }
1450
+ /**
1451
+ * Move up / down.
1452
+ * @param height Amount to move up / down. Negative value to move down
1453
+ * @param enableTransition Whether to move smoothly or immediately
1454
+ * @category Methods
1455
+ */
1456
+ }, {
1457
+ key: "elevate",
1458
+ value: function elevate(height) {
1459
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
1460
+ _v3A.copy(this._camera.up).multiplyScalar(height);
1461
+ return this.moveTo(this._targetEnd.x + _v3A.x, this._targetEnd.y + _v3A.y, this._targetEnd.z + _v3A.z, enableTransition);
1462
+ }
1463
+ /**
1464
+ * Move target position to given point.
1465
+ * @param x x coord to move center position
1466
+ * @param y y coord to move center position
1467
+ * @param z z coord to move center position
1468
+ * @param enableTransition Whether to move smoothly or immediately
1469
+ * @category Methods
1470
+ */
1471
+ }, {
1472
+ key: "moveTo",
1473
+ value: function moveTo(x, y, z) {
1474
+ var enableTransition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1475
+ this._isUserControllingTruck = false;
1476
+ var offset = _v3A.set(x, y, z).sub(this._targetEnd);
1477
+ this._encloseToBoundary(this._targetEnd, offset, this.boundaryFriction);
1478
+ this._needsUpdate = true;
1479
+ if (!enableTransition) {
1480
+ this._target.copy(this._targetEnd);
1481
+ }
1482
+ var resolveImmediately = !enableTransition || approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) && approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) && approxEquals(this._target.z, this._targetEnd.z, this.restThreshold);
1483
+ return this._createOnRestPromise(resolveImmediately);
1484
+ }
1485
+ /**
1486
+ * Look in the given point direction.
1487
+ * @param x point x.
1488
+ * @param y point y.
1489
+ * @param z point z.
1490
+ * @param enableTransition Whether to move smoothly or immediately.
1491
+ * @returns Transition end promise
1492
+ * @category Methods
1493
+ */
1494
+ }, {
1495
+ key: "lookInDirectionOf",
1496
+ value: function lookInDirectionOf(x, y, z) {
1497
+ var enableTransition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1498
+ var point = _v3A.set(x, y, z);
1499
+ var direction = point.sub(this._targetEnd).normalize();
1500
+ var position = direction.multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);
1501
+ return this.setPosition(position.x, position.y, position.z, enableTransition);
1502
+ }
1503
+ /**
1504
+ * Fit the viewport to the box or the bounding box of the object, using the nearest axis. paddings are in unit.
1505
+ * set `cover: true` to fill enter screen.
1506
+ * e.g.
1507
+ * ```
1508
+ * cameraControls.fitToBox( myMesh );
1509
+ * ```
1510
+ * @param box3OrObject Axis aligned bounding box to fit the view.
1511
+ * @param enableTransition Whether to move smoothly or immediately.
1512
+ * @param options | `<object>` { cover: boolean, paddingTop: number, paddingLeft: number, paddingBottom: number, paddingRight: number }
1513
+ * @returns Transition end promise
1514
+ * @category Methods
1515
+ */
1516
+ }, {
1517
+ key: "fitToBox",
1518
+ value: function fitToBox(box3OrObject, enableTransition) {
1519
+ var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {},
1520
+ _ref$cover = _ref.cover,
1521
+ cover = _ref$cover === void 0 ? false : _ref$cover,
1522
+ _ref$paddingLeft = _ref.paddingLeft,
1523
+ paddingLeft = _ref$paddingLeft === void 0 ? 0 : _ref$paddingLeft,
1524
+ _ref$paddingRight = _ref.paddingRight,
1525
+ paddingRight = _ref$paddingRight === void 0 ? 0 : _ref$paddingRight,
1526
+ _ref$paddingBottom = _ref.paddingBottom,
1527
+ paddingBottom = _ref$paddingBottom === void 0 ? 0 : _ref$paddingBottom,
1528
+ _ref$paddingTop = _ref.paddingTop,
1529
+ paddingTop = _ref$paddingTop === void 0 ? 0 : _ref$paddingTop;
1530
+ var promises = [];
1531
+ var aabb = box3OrObject.isBox3 ? _box3A.copy(box3OrObject) : _box3A.setFromObject(box3OrObject);
1532
+ if (aabb.isEmpty()) {
1533
+ console.warn('camera-controls: fitTo() cannot be used with an empty box. Aborting');
1534
+ Promise.resolve();
1535
+ }
1536
+ // round to closest axis ( forward | backward | right | left | top | bottom )
1537
+ var theta = roundToStep(this._sphericalEnd.theta, PI_HALF);
1538
+ var phi = roundToStep(this._sphericalEnd.phi, PI_HALF);
1539
+ promises.push(this.rotateTo(theta, phi, enableTransition));
1540
+ var normal = _v3A.setFromSpherical(this._sphericalEnd).normalize();
1541
+ var rotation = _quaternionA.setFromUnitVectors(normal, _AXIS_Z);
1542
+ var viewFromPolar = approxEquals(Math.abs(normal.y), 1);
1543
+ if (viewFromPolar) {
1544
+ rotation.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y, theta));
1545
+ }
1546
+ rotation.multiply(this._yAxisUpSpaceInverse);
1547
+ // make oriented bounding box
1548
+ var bb = _box3B.makeEmpty();
1549
+ // left bottom back corner
1550
+ _v3B.copy(aabb.min).applyQuaternion(rotation);
1551
+ bb.expandByPoint(_v3B);
1552
+ // right bottom back corner
1553
+ _v3B.copy(aabb.min).setX(aabb.max.x).applyQuaternion(rotation);
1554
+ bb.expandByPoint(_v3B);
1555
+ // left top back corner
1556
+ _v3B.copy(aabb.min).setY(aabb.max.y).applyQuaternion(rotation);
1557
+ bb.expandByPoint(_v3B);
1558
+ // right top back corner
1559
+ _v3B.copy(aabb.max).setZ(aabb.min.z).applyQuaternion(rotation);
1560
+ bb.expandByPoint(_v3B);
1561
+ // left bottom front corner
1562
+ _v3B.copy(aabb.min).setZ(aabb.max.z).applyQuaternion(rotation);
1563
+ bb.expandByPoint(_v3B);
1564
+ // right bottom front corner
1565
+ _v3B.copy(aabb.max).setY(aabb.min.y).applyQuaternion(rotation);
1566
+ bb.expandByPoint(_v3B);
1567
+ // left top front corner
1568
+ _v3B.copy(aabb.max).setX(aabb.min.x).applyQuaternion(rotation);
1569
+ bb.expandByPoint(_v3B);
1570
+ // right top front corner
1571
+ _v3B.copy(aabb.max).applyQuaternion(rotation);
1572
+ bb.expandByPoint(_v3B);
1573
+ // add padding
1574
+ bb.min.x -= paddingLeft;
1575
+ bb.min.y -= paddingBottom;
1576
+ bb.max.x += paddingRight;
1577
+ bb.max.y += paddingTop;
1578
+ rotation.setFromUnitVectors(_AXIS_Z, normal);
1579
+ if (viewFromPolar) {
1580
+ rotation.premultiply(_quaternionB.invert());
1581
+ }
1582
+ rotation.premultiply(this._yAxisUpSpace);
1583
+ var bbSize = bb.getSize(_v3A);
1584
+ var center = bb.getCenter(_v3B).applyQuaternion(rotation);
1585
+ if (isPerspectiveCamera(this._camera)) {
1586
+ var distance = this.getDistanceToFitBox(bbSize.x, bbSize.y, bbSize.z, cover);
1587
+ promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));
1588
+ promises.push(this.dollyTo(distance, enableTransition));
1589
+ promises.push(this.setFocalOffset(0, 0, 0, enableTransition));
1590
+ } else if (isOrthographicCamera(this._camera)) {
1591
+ var camera = this._camera;
1592
+ var width = camera.right - camera.left;
1593
+ var height = camera.top - camera.bottom;
1594
+ var zoom = cover ? Math.max(width / bbSize.x, height / bbSize.y) : Math.min(width / bbSize.x, height / bbSize.y);
1595
+ promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));
1596
+ promises.push(this.zoomTo(zoom, enableTransition));
1597
+ promises.push(this.setFocalOffset(0, 0, 0, enableTransition));
1598
+ }
1599
+ return Promise.all(promises);
1600
+ }
1601
+ /**
1602
+ * Fit the viewport to the sphere or the bounding sphere of the object.
1603
+ * @param sphereOrMesh
1604
+ * @param enableTransition
1605
+ * @category Methods
1606
+ */
1607
+ }, {
1608
+ key: "fitToSphere",
1609
+ value: function fitToSphere(sphereOrMesh, enableTransition) {
1610
+ var promises = [];
1611
+ var isSphere = 'isSphere' in sphereOrMesh;
1612
+ var boundingSphere = isSphere ? _sphere.copy(sphereOrMesh) : CameraControls.createBoundingSphere(sphereOrMesh, _sphere);
1613
+ promises.push(this.moveTo(boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z, enableTransition));
1614
+ if (isPerspectiveCamera(this._camera)) {
1615
+ var distanceToFit = this.getDistanceToFitSphere(boundingSphere.radius);
1616
+ promises.push(this.dollyTo(distanceToFit, enableTransition));
1617
+ } else if (isOrthographicCamera(this._camera)) {
1618
+ var width = this._camera.right - this._camera.left;
1619
+ var height = this._camera.top - this._camera.bottom;
1620
+ var diameter = 2 * boundingSphere.radius;
1621
+ var zoom = Math.min(width / diameter, height / diameter);
1622
+ promises.push(this.zoomTo(zoom, enableTransition));
1623
+ }
1624
+ promises.push(this.setFocalOffset(0, 0, 0, enableTransition));
1625
+ return Promise.all(promises);
1626
+ }
1627
+ /**
1628
+ * Look at the `target` from the `position`.
1629
+ * @param positionX
1630
+ * @param positionY
1631
+ * @param positionZ
1632
+ * @param targetX
1633
+ * @param targetY
1634
+ * @param targetZ
1635
+ * @param enableTransition
1636
+ * @category Methods
1637
+ */
1638
+ }, {
1639
+ key: "setLookAt",
1640
+ value: function setLookAt(positionX, positionY, positionZ, targetX, targetY, targetZ) {
1641
+ var enableTransition = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : false;
1642
+ this._isUserControllingRotate = false;
1643
+ this._isUserControllingDolly = false;
1644
+ this._isUserControllingTruck = false;
1645
+ this._lastDollyDirection = DOLLY_DIRECTION.NONE;
1646
+ this._changedDolly = 0;
1647
+ var target = _v3B.set(targetX, targetY, targetZ);
1648
+ var position = _v3A.set(positionX, positionY, positionZ);
1649
+ this._targetEnd.copy(target);
1650
+ this._sphericalEnd.setFromVector3(position.sub(target).applyQuaternion(this._yAxisUpSpace));
1651
+ this.normalizeRotations();
1652
+ this._needsUpdate = true;
1653
+ if (!enableTransition) {
1654
+ this._target.copy(this._targetEnd);
1655
+ this._spherical.copy(this._sphericalEnd);
1656
+ }
1657
+ var resolveImmediately = !enableTransition || approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) && approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) && approxEquals(this._target.z, this._targetEnd.z, this.restThreshold) && approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) && approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold) && approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);
1658
+ return this._createOnRestPromise(resolveImmediately);
1659
+ }
1660
+ /**
1661
+ * Similar to setLookAt, but it interpolates between two states.
1662
+ * @param positionAX
1663
+ * @param positionAY
1664
+ * @param positionAZ
1665
+ * @param targetAX
1666
+ * @param targetAY
1667
+ * @param targetAZ
1668
+ * @param positionBX
1669
+ * @param positionBY
1670
+ * @param positionBZ
1671
+ * @param targetBX
1672
+ * @param targetBY
1673
+ * @param targetBZ
1674
+ * @param t
1675
+ * @param enableTransition
1676
+ * @category Methods
1677
+ */
1678
+ }, {
1679
+ key: "lerpLookAt",
1680
+ value: function lerpLookAt(positionAX, positionAY, positionAZ, targetAX, targetAY, targetAZ, positionBX, positionBY, positionBZ, targetBX, targetBY, targetBZ, t) {
1681
+ var enableTransition = arguments.length > 13 && arguments[13] !== undefined ? arguments[13] : false;
1682
+ this._isUserControllingRotate = false;
1683
+ this._isUserControllingDolly = false;
1684
+ this._isUserControllingTruck = false;
1685
+ this._lastDollyDirection = DOLLY_DIRECTION.NONE;
1686
+ this._changedDolly = 0;
1687
+ var targetA = _v3A.set(targetAX, targetAY, targetAZ);
1688
+ var positionA = _v3B.set(positionAX, positionAY, positionAZ);
1689
+ _sphericalA.setFromVector3(positionA.sub(targetA).applyQuaternion(this._yAxisUpSpace));
1690
+ var targetB = _v3C.set(targetBX, targetBY, targetBZ);
1691
+ var positionB = _v3B.set(positionBX, positionBY, positionBZ);
1692
+ _sphericalB.setFromVector3(positionB.sub(targetB).applyQuaternion(this._yAxisUpSpace));
1693
+ this._targetEnd.copy(targetA.lerp(targetB, t)); // tricky
1694
+ var deltaTheta = _sphericalB.theta - _sphericalA.theta;
1695
+ var deltaPhi = _sphericalB.phi - _sphericalA.phi;
1696
+ var deltaRadius = _sphericalB.radius - _sphericalA.radius;
1697
+ this._sphericalEnd.set(_sphericalA.radius + deltaRadius * t, _sphericalA.phi + deltaPhi * t, _sphericalA.theta + deltaTheta * t);
1698
+ this.normalizeRotations();
1699
+ this._needsUpdate = true;
1700
+ if (!enableTransition) {
1701
+ this._target.copy(this._targetEnd);
1702
+ this._spherical.copy(this._sphericalEnd);
1703
+ }
1704
+ var resolveImmediately = !enableTransition || approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) && approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) && approxEquals(this._target.z, this._targetEnd.z, this.restThreshold) && approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) && approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold) && approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);
1705
+ return this._createOnRestPromise(resolveImmediately);
1706
+ }
1707
+ /**
1708
+ * Set angle and distance by given position.
1709
+ * An alias of `setLookAt()`, without target change. Thus keep gazing at the current target
1710
+ * @param positionX
1711
+ * @param positionY
1712
+ * @param positionZ
1713
+ * @param enableTransition
1714
+ * @category Methods
1715
+ */
1716
+ }, {
1717
+ key: "setPosition",
1718
+ value: function setPosition(positionX, positionY, positionZ) {
1719
+ var enableTransition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1720
+ return this.setLookAt(positionX, positionY, positionZ, this._targetEnd.x, this._targetEnd.y, this._targetEnd.z, enableTransition);
1721
+ }
1722
+ /**
1723
+ * Set the target position where gaze at.
1724
+ * An alias of `setLookAt()`, without position change. Thus keep the same position.
1725
+ * @param targetX
1726
+ * @param targetY
1727
+ * @param targetZ
1728
+ * @param enableTransition
1729
+ * @category Methods
1730
+ */
1731
+ }, {
1732
+ key: "setTarget",
1733
+ value: function setTarget(targetX, targetY, targetZ) {
1734
+ var enableTransition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1735
+ var pos = this.getPosition(_v3A);
1736
+ var promise = this.setLookAt(pos.x, pos.y, pos.z, targetX, targetY, targetZ, enableTransition);
1737
+ // see https://github.com/yomotsu/camera-controls/issues/335
1738
+ this._sphericalEnd.phi = clamp(this._sphericalEnd.phi, this.minPolarAngle, this.maxPolarAngle);
1739
+ return promise;
1740
+ }
1741
+ /**
1742
+ * Set focal offset using the screen parallel coordinates. z doesn't affect in Orthographic as with Dolly.
1743
+ * @param x
1744
+ * @param y
1745
+ * @param z
1746
+ * @param enableTransition
1747
+ * @category Methods
1748
+ */
1749
+ }, {
1750
+ key: "setFocalOffset",
1751
+ value: function setFocalOffset(x, y, z) {
1752
+ var enableTransition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1753
+ this._isUserControllingOffset = false;
1754
+ this._focalOffsetEnd.set(x, y, z);
1755
+ this._needsUpdate = true;
1756
+ if (!enableTransition) this._focalOffset.copy(this._focalOffsetEnd);
1757
+ var resolveImmediately = !enableTransition || approxEquals(this._focalOffset.x, this._focalOffsetEnd.x, this.restThreshold) && approxEquals(this._focalOffset.y, this._focalOffsetEnd.y, this.restThreshold) && approxEquals(this._focalOffset.z, this._focalOffsetEnd.z, this.restThreshold);
1758
+ return this._createOnRestPromise(resolveImmediately);
1759
+ }
1760
+ /**
1761
+ * Set orbit point without moving the camera.
1762
+ * SHOULD NOT RUN DURING ANIMATIONS. `setOrbitPoint()` will immediately fix the positions.
1763
+ * @param targetX
1764
+ * @param targetY
1765
+ * @param targetZ
1766
+ * @category Methods
1767
+ */
1768
+ }, {
1769
+ key: "setOrbitPoint",
1770
+ value: function setOrbitPoint(targetX, targetY, targetZ) {
1771
+ this._camera.updateMatrixWorld();
1772
+ _xColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 0);
1773
+ _yColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 1);
1774
+ _zColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 2);
1775
+ var position = _v3A.set(targetX, targetY, targetZ);
1776
+ var distance = position.distanceTo(this._camera.position);
1777
+ var cameraToPoint = position.sub(this._camera.position);
1778
+ _xColumn.multiplyScalar(cameraToPoint.x);
1779
+ _yColumn.multiplyScalar(cameraToPoint.y);
1780
+ _zColumn.multiplyScalar(cameraToPoint.z);
1781
+ _v3A.copy(_xColumn).add(_yColumn).add(_zColumn);
1782
+ _v3A.z = _v3A.z + distance;
1783
+ this.dollyTo(distance, false);
1784
+ this.setFocalOffset(-_v3A.x, _v3A.y, -_v3A.z, false);
1785
+ this.moveTo(targetX, targetY, targetZ, false);
1786
+ }
1787
+ /**
1788
+ * Set the boundary box that encloses the target of the camera. box3 is in THREE.Box3
1789
+ * @param box3
1790
+ * @category Methods
1791
+ */
1792
+ }, {
1793
+ key: "setBoundary",
1794
+ value: function setBoundary(box3) {
1795
+ if (!box3) {
1796
+ this._boundary.min.set(-Infinity, -Infinity, -Infinity);
1797
+ this._boundary.max.set(Infinity, Infinity, Infinity);
1798
+ this._needsUpdate = true;
1799
+ return;
1800
+ }
1801
+ this._boundary.copy(box3);
1802
+ this._boundary.clampPoint(this._targetEnd, this._targetEnd);
1803
+ this._needsUpdate = true;
1804
+ }
1805
+ /**
1806
+ * Set (or unset) the current viewport.
1807
+ * Set this when you want to use renderer viewport and .dollyToCursor feature at the same time.
1808
+ * @param viewportOrX
1809
+ * @param y
1810
+ * @param width
1811
+ * @param height
1812
+ * @category Methods
1813
+ */
1814
+ }, {
1815
+ key: "setViewport",
1816
+ value: function setViewport(viewportOrX, y, width, height) {
1817
+ if (viewportOrX === null) {
1818
+ // null
1819
+ this._viewport = null;
1820
+ return;
1821
+ }
1822
+ this._viewport = this._viewport || new THREE.Vector4();
1823
+ if (typeof viewportOrX === 'number') {
1824
+ // number
1825
+ this._viewport.set(viewportOrX, y, width, height);
1826
+ } else {
1827
+ // Vector4
1828
+ this._viewport.copy(viewportOrX);
1829
+ }
1830
+ }
1831
+ /**
1832
+ * Calculate the distance to fit the box.
1833
+ * @param width box width
1834
+ * @param height box height
1835
+ * @param depth box depth
1836
+ * @returns distance
1837
+ * @category Methods
1838
+ */
1839
+ }, {
1840
+ key: "getDistanceToFitBox",
1841
+ value: function getDistanceToFitBox(width, height, depth) {
1842
+ var cover = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
1843
+ if (notSupportedInOrthographicCamera(this._camera, 'getDistanceToFitBox')) return this._spherical.radius;
1844
+ var boundingRectAspect = width / height;
1845
+ var fov = this._camera.getEffectiveFOV() * DEG2RAD;
1846
+ var aspect = this._camera.aspect;
1847
+ var heightToFit = (cover ? boundingRectAspect > aspect : boundingRectAspect < aspect) ? height : width / aspect;
1848
+ return heightToFit * 0.5 / Math.tan(fov * 0.5) + depth * 0.5;
1849
+ }
1850
+ /**
1851
+ * Calculate the distance to fit the sphere.
1852
+ * @param radius sphere radius
1853
+ * @returns distance
1854
+ * @category Methods
1855
+ */
1856
+ }, {
1857
+ key: "getDistanceToFitSphere",
1858
+ value: function getDistanceToFitSphere(radius) {
1859
+ if (notSupportedInOrthographicCamera(this._camera, 'getDistanceToFitSphere')) return this._spherical.radius;
1860
+ // https://stackoverflow.com/a/44849975
1861
+ var vFOV = this._camera.getEffectiveFOV() * DEG2RAD;
1862
+ var hFOV = Math.atan(Math.tan(vFOV * 0.5) * this._camera.aspect) * 2;
1863
+ var fov = 1 < this._camera.aspect ? vFOV : hFOV;
1864
+ return radius / Math.sin(fov * 0.5);
1865
+ }
1866
+ /**
1867
+ * Returns the orbit center position, where the camera looking at.
1868
+ * @param out The receiving Vector3 instance to copy the result
1869
+ * @param receiveEndValue Whether receive the transition end coords or current. default is `true`
1870
+ * @category Methods
1871
+ */
1872
+ }, {
1873
+ key: "getTarget",
1874
+ value: function getTarget(out) {
1875
+ var receiveEndValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1876
+ var _out = !!out && out.isVector3 ? out : new THREE.Vector3();
1877
+ return _out.copy(receiveEndValue ? this._targetEnd : this._target);
1878
+ }
1879
+ /**
1880
+ * Returns the camera position.
1881
+ * @param out The receiving Vector3 instance to copy the result
1882
+ * @param receiveEndValue Whether receive the transition end coords or current. default is `true`
1883
+ * @category Methods
1884
+ */
1885
+ }, {
1886
+ key: "getPosition",
1887
+ value: function getPosition(out) {
1888
+ var receiveEndValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1889
+ var _out = !!out && out.isVector3 ? out : new THREE.Vector3();
1890
+ return _out.setFromSpherical(receiveEndValue ? this._sphericalEnd : this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(receiveEndValue ? this._targetEnd : this._target);
1891
+ }
1892
+ /**
1893
+ * Returns the spherical coordinates of the orbit.
1894
+ * @param out The receiving Spherical instance to copy the result
1895
+ * @param receiveEndValue Whether receive the transition end coords or current. default is `true`
1896
+ * @category Methods
1897
+ */
1898
+ }, {
1899
+ key: "getSpherical",
1900
+ value: function getSpherical(out) {
1901
+ var receiveEndValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1902
+ var _out = out || new THREE.Spherical();
1903
+ return _out.copy(receiveEndValue ? this._sphericalEnd : this._spherical);
1904
+ }
1905
+ /**
1906
+ * Returns the focal offset, which is how much the camera appears to be translated in screen parallel coordinates.
1907
+ * @param out The receiving Vector3 instance to copy the result
1908
+ * @param receiveEndValue Whether receive the transition end coords or current. default is `true`
1909
+ * @category Methods
1910
+ */
1911
+ }, {
1912
+ key: "getFocalOffset",
1913
+ value: function getFocalOffset(out) {
1914
+ var receiveEndValue = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
1915
+ var _out = !!out && out.isVector3 ? out : new THREE.Vector3();
1916
+ return _out.copy(receiveEndValue ? this._focalOffsetEnd : this._focalOffset);
1917
+ }
1918
+ /**
1919
+ * Normalize camera azimuth angle rotation between 0 and 360 degrees.
1920
+ * @category Methods
1921
+ */
1922
+ }, {
1923
+ key: "normalizeRotations",
1924
+ value: function normalizeRotations() {
1925
+ this._sphericalEnd.theta = this._sphericalEnd.theta % PI_2;
1926
+ if (this._sphericalEnd.theta < 0) this._sphericalEnd.theta += PI_2;
1927
+ this._spherical.theta += PI_2 * Math.round((this._sphericalEnd.theta - this._spherical.theta) / PI_2);
1928
+ }
1929
+ /**
1930
+ * Reset all rotation and position to defaults.
1931
+ * @param enableTransition
1932
+ * @category Methods
1933
+ */
1934
+ }, {
1935
+ key: "reset",
1936
+ value: function reset() {
1937
+ var enableTransition = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
1938
+ if (!approxEquals(this._camera.up.x, this._cameraUp0.x) || !approxEquals(this._camera.up.y, this._cameraUp0.y) || !approxEquals(this._camera.up.z, this._cameraUp0.z)) {
1939
+ this._camera.up.copy(this._cameraUp0);
1940
+ var position = this.getPosition(_v3A);
1941
+ this.updateCameraUp();
1942
+ this.setPosition(position.x, position.y, position.z);
1943
+ }
1944
+ var promises = [this.setLookAt(this._position0.x, this._position0.y, this._position0.z, this._target0.x, this._target0.y, this._target0.z, enableTransition), this.setFocalOffset(this._focalOffset0.x, this._focalOffset0.y, this._focalOffset0.z, enableTransition), this.zoomTo(this._zoom0, enableTransition)];
1945
+ return Promise.all(promises);
1946
+ }
1947
+ /**
1948
+ * Set current camera position as the default position.
1949
+ * @category Methods
1950
+ */
1951
+ }, {
1952
+ key: "saveState",
1953
+ value: function saveState() {
1954
+ this._cameraUp0.copy(this._camera.up);
1955
+ this.getTarget(this._target0);
1956
+ this.getPosition(this._position0);
1957
+ this._zoom0 = this._zoom;
1958
+ this._focalOffset0.copy(this._focalOffset);
1959
+ }
1960
+ /**
1961
+ * Sync camera-up direction.
1962
+ * When camera-up vector is changed, `.updateCameraUp()` must be called.
1963
+ * @category Methods
1964
+ */
1965
+ }, {
1966
+ key: "updateCameraUp",
1967
+ value: function updateCameraUp() {
1968
+ this._yAxisUpSpace.setFromUnitVectors(this._camera.up, _AXIS_Y);
1969
+ this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert();
1970
+ }
1971
+ /**
1972
+ * Apply current camera-up direction to the camera.
1973
+ * The orbit system will be re-initialized with the current position.
1974
+ * @category Methods
1975
+ */
1976
+ }, {
1977
+ key: "applyCameraUp",
1978
+ value: function applyCameraUp() {
1979
+ var cameraDirection = _v3A.subVectors(this._target, this._camera.position).normalize();
1980
+ // So first find the vector off to the side, orthogonal to both this.object.up and
1981
+ // the "view" vector.
1982
+ var side = _v3B.crossVectors(cameraDirection, this._camera.up);
1983
+ // Then find the vector orthogonal to both this "side" vector and the "view" vector.
1984
+ // This vector will be the new "up" vector.
1985
+ this._camera.up.crossVectors(side, cameraDirection).normalize();
1986
+ this._camera.updateMatrixWorld();
1987
+ var position = this.getPosition(_v3A);
1988
+ this.updateCameraUp();
1989
+ this.setPosition(position.x, position.y, position.z);
1990
+ }
1991
+ /**
1992
+ * Update camera position and directions.
1993
+ * This should be called in your tick loop every time, and returns true if re-rendering is needed.
1994
+ * @param delta
1995
+ * @returns updated
1996
+ * @category Methods
1997
+ */
1998
+ }, {
1999
+ key: "update",
2000
+ value: function update(delta) {
2001
+ var deltaTheta = this._sphericalEnd.theta - this._spherical.theta;
2002
+ var deltaPhi = this._sphericalEnd.phi - this._spherical.phi;
2003
+ var deltaRadius = this._sphericalEnd.radius - this._spherical.radius;
2004
+ var deltaTarget = _deltaTarget.subVectors(this._targetEnd, this._target);
2005
+ var deltaOffset = _deltaOffset.subVectors(this._focalOffsetEnd, this._focalOffset);
2006
+ var deltaZoom = this._zoomEnd - this._zoom;
2007
+ // update theta
2008
+ if (approxZero(deltaTheta)) {
2009
+ this._thetaVelocity.value = 0;
2010
+ this._spherical.theta = this._sphericalEnd.theta;
2011
+ } else {
2012
+ var smoothTime = this._isUserControllingRotate ? this.draggingSmoothTime : this.smoothTime;
2013
+ this._spherical.theta = smoothDamp(this._spherical.theta, this._sphericalEnd.theta, this._thetaVelocity, smoothTime, Infinity, delta);
2014
+ this._needsUpdate = true;
2015
+ }
2016
+ // update phi
2017
+ if (approxZero(deltaPhi)) {
2018
+ this._phiVelocity.value = 0;
2019
+ this._spherical.phi = this._sphericalEnd.phi;
2020
+ } else {
2021
+ var _smoothTime = this._isUserControllingRotate ? this.draggingSmoothTime : this.smoothTime;
2022
+ this._spherical.phi = smoothDamp(this._spherical.phi, this._sphericalEnd.phi, this._phiVelocity, _smoothTime, Infinity, delta);
2023
+ this._needsUpdate = true;
2024
+ }
2025
+ // update distance
2026
+ if (approxZero(deltaRadius)) {
2027
+ this._radiusVelocity.value = 0;
2028
+ this._spherical.radius = this._sphericalEnd.radius;
2029
+ } else {
2030
+ var _smoothTime2 = this._isUserControllingDolly ? this.draggingSmoothTime : this.smoothTime;
2031
+ this._spherical.radius = smoothDamp(this._spherical.radius, this._sphericalEnd.radius, this._radiusVelocity, _smoothTime2, this.maxSpeed, delta);
2032
+ this._needsUpdate = true;
2033
+ }
2034
+ // update target position
2035
+ if (approxZero(deltaTarget.x) && approxZero(deltaTarget.y) && approxZero(deltaTarget.z)) {
2036
+ this._targetVelocity.set(0, 0, 0);
2037
+ this._target.copy(this._targetEnd);
2038
+ } else {
2039
+ var _smoothTime3 = this._isUserControllingTruck ? this.draggingSmoothTime : this.smoothTime;
2040
+ smoothDampVec3(this._target, this._targetEnd, this._targetVelocity, _smoothTime3, this.maxSpeed, delta, this._target);
2041
+ this._needsUpdate = true;
2042
+ }
2043
+ // update focalOffset
2044
+ if (approxZero(deltaOffset.x) && approxZero(deltaOffset.y) && approxZero(deltaOffset.z)) {
2045
+ this._focalOffsetVelocity.set(0, 0, 0);
2046
+ this._focalOffset.copy(this._focalOffsetEnd);
2047
+ } else {
2048
+ var _smoothTime4 = this._isUserControllingOffset ? this.draggingSmoothTime : this.smoothTime;
2049
+ smoothDampVec3(this._focalOffset, this._focalOffsetEnd, this._focalOffsetVelocity, _smoothTime4, this.maxSpeed, delta, this._focalOffset);
2050
+ this._needsUpdate = true;
2051
+ }
2052
+ // update zoom
2053
+ if (approxZero(deltaZoom)) {
2054
+ this._zoomVelocity.value = 0;
2055
+ this._zoom = this._zoomEnd;
2056
+ } else {
2057
+ var _smoothTime5 = this._isUserControllingZoom ? this.draggingSmoothTime : this.smoothTime;
2058
+ this._zoom = smoothDamp(this._zoom, this._zoomEnd, this._zoomVelocity, _smoothTime5, Infinity, delta);
2059
+ }
2060
+ if (this.dollyToCursor) {
2061
+ if (isPerspectiveCamera(this._camera) && this._changedDolly !== 0) {
2062
+ var dollyControlAmount = this._spherical.radius - this._lastDistance;
2063
+ var camera = this._camera;
2064
+ var cameraDirection = this._getCameraDirection(_cameraDirection);
2065
+ var planeX = _v3A.copy(cameraDirection).cross(camera.up).normalize();
2066
+ if (planeX.lengthSq() === 0) planeX.x = 1.0;
2067
+ var planeY = _v3B.crossVectors(planeX, cameraDirection);
2068
+ var worldToScreen = this._sphericalEnd.radius * Math.tan(camera.getEffectiveFOV() * DEG2RAD * 0.5);
2069
+ var prevRadius = this._sphericalEnd.radius - dollyControlAmount;
2070
+ var lerpRatio = (prevRadius - this._sphericalEnd.radius) / this._sphericalEnd.radius;
2071
+ var cursor = _v3C.copy(this._targetEnd).add(planeX.multiplyScalar(this._dollyControlCoord.x * worldToScreen * camera.aspect)).add(planeY.multiplyScalar(this._dollyControlCoord.y * worldToScreen));
2072
+ var newTargetEnd = _v3A.copy(this._targetEnd).lerp(cursor, lerpRatio);
2073
+ var isMin = this._lastDollyDirection === DOLLY_DIRECTION.IN && this._spherical.radius <= this.minDistance;
2074
+ var isMax = this._lastDollyDirection === DOLLY_DIRECTION.OUT && this.maxDistance <= this._spherical.radius;
2075
+ if (this.infinityDolly && (isMin || isMax)) {
2076
+ this._sphericalEnd.radius -= dollyControlAmount;
2077
+ this._spherical.radius -= dollyControlAmount;
2078
+ var dollyAmount = _v3B.copy(cameraDirection).multiplyScalar(-dollyControlAmount);
2079
+ newTargetEnd.add(dollyAmount);
2080
+ }
2081
+ // target position may be moved beyond boundary.
2082
+ this._boundary.clampPoint(newTargetEnd, newTargetEnd);
2083
+ var targetEndDiff = _v3B.subVectors(newTargetEnd, this._targetEnd);
2084
+ this._targetEnd.copy(newTargetEnd);
2085
+ this._target.add(targetEndDiff);
2086
+ this._changedDolly -= dollyControlAmount;
2087
+ if (approxZero(this._changedDolly)) this._changedDolly = 0;
2088
+ } else if (isOrthographicCamera(this._camera) && this._changedZoom !== 0) {
2089
+ var _dollyControlAmount = this._zoom - this._lastZoom;
2090
+ var _camera2 = this._camera;
2091
+ var worldCursorPosition = _v3A.set(this._dollyControlCoord.x, this._dollyControlCoord.y, (_camera2.near + _camera2.far) / (_camera2.near - _camera2.far)).unproject(_camera2);
2092
+ var quaternion = _v3B.set(0, 0, -1).applyQuaternion(_camera2.quaternion);
2093
+ var _cursor = _v3C.copy(worldCursorPosition).add(quaternion.multiplyScalar(-worldCursorPosition.dot(_camera2.up)));
2094
+ var prevZoom = this._zoom - _dollyControlAmount;
2095
+ var _lerpRatio = -(prevZoom - this._zoom) / this._zoom;
2096
+ // find the "distance" (aka plane constant in three.js) of Plane
2097
+ // from a given position (this._targetEnd) and normal vector (cameraDirection)
2098
+ // https://www.maplesoft.com/support/help/maple/view.aspx?path=MathApps%2FEquationOfAPlaneNormal#bkmrk0
2099
+ var _cameraDirection2 = this._getCameraDirection(_cameraDirection);
2100
+ var prevPlaneConstant = this._targetEnd.dot(_cameraDirection2);
2101
+ var _newTargetEnd = _v3A.copy(this._targetEnd).lerp(_cursor, _lerpRatio);
2102
+ var newPlaneConstant = _newTargetEnd.dot(_cameraDirection2);
2103
+ // Pull back the camera depth that has moved, to be the camera stationary as zoom
2104
+ var pullBack = _cameraDirection2.multiplyScalar(newPlaneConstant - prevPlaneConstant);
2105
+ _newTargetEnd.sub(pullBack);
2106
+ // target position may be moved beyond boundary.
2107
+ this._boundary.clampPoint(_newTargetEnd, _newTargetEnd);
2108
+ var _targetEndDiff = _v3B.subVectors(_newTargetEnd, this._targetEnd);
2109
+ this._targetEnd.copy(_newTargetEnd);
2110
+ this._target.add(_targetEndDiff);
2111
+ // this._target.copy( this._targetEnd );
2112
+ this._changedZoom -= _dollyControlAmount;
2113
+ if (approxZero(this._changedZoom)) this._changedZoom = 0;
2114
+ }
2115
+ }
2116
+ if (this._camera.zoom !== this._zoom) {
2117
+ this._camera.zoom = this._zoom;
2118
+ this._camera.updateProjectionMatrix();
2119
+ this._updateNearPlaneCorners();
2120
+ this._needsUpdate = true;
2121
+ }
2122
+ this._dragNeedsUpdate = true;
2123
+ // collision detection
2124
+ var maxDistance = this._collisionTest();
2125
+ this._spherical.radius = Math.min(this._spherical.radius, maxDistance);
2126
+ // decompose spherical to the camera position
2127
+ this._spherical.makeSafe();
2128
+ this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target);
2129
+ this._camera.lookAt(this._target);
2130
+ // set offset after the orbit movement
2131
+ var affectOffset = !approxZero(this._focalOffset.x) || !approxZero(this._focalOffset.y) || !approxZero(this._focalOffset.z);
2132
+ if (affectOffset) {
2133
+ this._camera.updateMatrixWorld();
2134
+ _xColumn.setFromMatrixColumn(this._camera.matrix, 0);
2135
+ _yColumn.setFromMatrixColumn(this._camera.matrix, 1);
2136
+ _zColumn.setFromMatrixColumn(this._camera.matrix, 2);
2137
+ _xColumn.multiplyScalar(this._focalOffset.x);
2138
+ _yColumn.multiplyScalar(-this._focalOffset.y);
2139
+ _zColumn.multiplyScalar(this._focalOffset.z); // notice: z-offset will not affect in Orthographic.
2140
+ _v3A.copy(_xColumn).add(_yColumn).add(_zColumn);
2141
+ this._camera.position.add(_v3A);
2142
+ }
2143
+ if (this._boundaryEnclosesCamera) {
2144
+ this._encloseToBoundary(this._camera.position.copy(this._target), _v3A.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse), 1.0);
2145
+ }
2146
+ var updated = this._needsUpdate;
2147
+ if (updated && !this._updatedLastTime) {
2148
+ this._hasRested = false;
2149
+ this.dispatchEvent({
2150
+ type: 'wake'
2151
+ });
2152
+ this.dispatchEvent({
2153
+ type: 'update'
2154
+ });
2155
+ } else if (updated) {
2156
+ this.dispatchEvent({
2157
+ type: 'update'
2158
+ });
2159
+ if (approxZero(deltaTheta, this.restThreshold) && approxZero(deltaPhi, this.restThreshold) && approxZero(deltaRadius, this.restThreshold) && approxZero(deltaTarget.x, this.restThreshold) && approxZero(deltaTarget.y, this.restThreshold) && approxZero(deltaTarget.z, this.restThreshold) && approxZero(deltaOffset.x, this.restThreshold) && approxZero(deltaOffset.y, this.restThreshold) && approxZero(deltaOffset.z, this.restThreshold) && approxZero(deltaZoom, this.restThreshold) && !this._hasRested) {
2160
+ this._hasRested = true;
2161
+ this.dispatchEvent({
2162
+ type: 'rest'
2163
+ });
2164
+ }
2165
+ } else if (!updated && this._updatedLastTime) {
2166
+ this.dispatchEvent({
2167
+ type: 'sleep'
2168
+ });
2169
+ }
2170
+ this._lastDistance = this._spherical.radius;
2171
+ this._lastZoom = this._zoom;
2172
+ this._updatedLastTime = updated;
2173
+ this._needsUpdate = false;
2174
+ return updated;
2175
+ }
2176
+ /**
2177
+ * Get all state in JSON string
2178
+ * @category Methods
2179
+ */
2180
+ }, {
2181
+ key: "toJSON",
2182
+ value: function toJSON() {
2183
+ return JSON.stringify({
2184
+ enabled: this._enabled,
2185
+ minDistance: this.minDistance,
2186
+ maxDistance: infinityToMaxNumber(this.maxDistance),
2187
+ minZoom: this.minZoom,
2188
+ maxZoom: infinityToMaxNumber(this.maxZoom),
2189
+ minPolarAngle: this.minPolarAngle,
2190
+ maxPolarAngle: infinityToMaxNumber(this.maxPolarAngle),
2191
+ minAzimuthAngle: infinityToMaxNumber(this.minAzimuthAngle),
2192
+ maxAzimuthAngle: infinityToMaxNumber(this.maxAzimuthAngle),
2193
+ smoothTime: this.smoothTime,
2194
+ draggingSmoothTime: this.draggingSmoothTime,
2195
+ dollySpeed: this.dollySpeed,
2196
+ truckSpeed: this.truckSpeed,
2197
+ dollyToCursor: this.dollyToCursor,
2198
+ verticalDragToForward: this.verticalDragToForward,
2199
+ target: this._targetEnd.toArray(),
2200
+ position: _v3A.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),
2201
+ zoom: this._zoomEnd,
2202
+ focalOffset: this._focalOffsetEnd.toArray(),
2203
+ target0: this._target0.toArray(),
2204
+ position0: this._position0.toArray(),
2205
+ zoom0: this._zoom0,
2206
+ focalOffset0: this._focalOffset0.toArray()
2207
+ });
2208
+ }
2209
+ /**
2210
+ * Reproduce the control state with JSON. enableTransition is where anim or not in a boolean.
2211
+ * @param json
2212
+ * @param enableTransition
2213
+ * @category Methods
2214
+ */
2215
+ }, {
2216
+ key: "fromJSON",
2217
+ value: function fromJSON(json) {
2218
+ var enableTransition = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
2219
+ var obj = JSON.parse(json);
2220
+ this.enabled = obj.enabled;
2221
+ this.minDistance = obj.minDistance;
2222
+ this.maxDistance = maxNumberToInfinity(obj.maxDistance);
2223
+ this.minZoom = obj.minZoom;
2224
+ this.maxZoom = maxNumberToInfinity(obj.maxZoom);
2225
+ this.minPolarAngle = obj.minPolarAngle;
2226
+ this.maxPolarAngle = maxNumberToInfinity(obj.maxPolarAngle);
2227
+ this.minAzimuthAngle = maxNumberToInfinity(obj.minAzimuthAngle);
2228
+ this.maxAzimuthAngle = maxNumberToInfinity(obj.maxAzimuthAngle);
2229
+ this.smoothTime = obj.smoothTime;
2230
+ this.draggingSmoothTime = obj.draggingSmoothTime;
2231
+ this.dollySpeed = obj.dollySpeed;
2232
+ this.truckSpeed = obj.truckSpeed;
2233
+ this.dollyToCursor = obj.dollyToCursor;
2234
+ this.verticalDragToForward = obj.verticalDragToForward;
2235
+ this._target0.fromArray(obj.target0);
2236
+ this._position0.fromArray(obj.position0);
2237
+ this._zoom0 = obj.zoom0;
2238
+ this._focalOffset0.fromArray(obj.focalOffset0);
2239
+ this.moveTo(obj.target[0], obj.target[1], obj.target[2], enableTransition);
2240
+ _sphericalA.setFromVector3(_v3A.fromArray(obj.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace));
2241
+ this.rotateTo(_sphericalA.theta, _sphericalA.phi, enableTransition);
2242
+ this.dollyTo(_sphericalA.radius, enableTransition);
2243
+ this.zoomTo(obj.zoom, enableTransition);
2244
+ this.setFocalOffset(obj.focalOffset[0], obj.focalOffset[1], obj.focalOffset[2], enableTransition);
2245
+ this._needsUpdate = true;
2246
+ }
2247
+ /**
2248
+ * Attach all internal event handlers to enable drag control.
2249
+ * @category Methods
2250
+ */
2251
+ }, {
2252
+ key: "connect",
2253
+ value: function connect(domElement) {
2254
+ if (this._domElement) {
2255
+ console.warn('camera-controls is already connected.');
2256
+ return;
2257
+ }
2258
+ domElement.setAttribute('data-camera-controls-version', VERSION);
2259
+ this._addAllEventListeners(domElement);
2260
+ this._getClientRect(this._elementRect);
2261
+ }
2262
+ /**
2263
+ * Detach all internal event handlers to disable drag control.
2264
+ */
2265
+ }, {
2266
+ key: "disconnect",
2267
+ value: function disconnect() {
2268
+ this.cancel();
2269
+ this._removeAllEventListeners();
2270
+ if (this._domElement) {
2271
+ this._domElement.removeAttribute('data-camera-controls-version');
2272
+ this._domElement = undefined;
2273
+ }
2274
+ }
2275
+ /**
2276
+ * Dispose the cameraControls instance itself, remove all eventListeners.
2277
+ * @category Methods
2278
+ */
2279
+ }, {
2280
+ key: "dispose",
2281
+ value: function dispose() {
2282
+ // remove all user event listeners
2283
+ this.removeAllEventListeners();
2284
+ // remove all internal event listeners
2285
+ this.disconnect();
2286
+ }
2287
+ // it's okay to expose public though
2288
+ }, {
2289
+ key: "_getTargetDirection",
2290
+ value: function _getTargetDirection(out) {
2291
+ // divide by distance to normalize, lighter than `Vector3.prototype.normalize()`
2292
+ return out.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse);
2293
+ }
2294
+ // it's okay to expose public though
2295
+ }, {
2296
+ key: "_getCameraDirection",
2297
+ value: function _getCameraDirection(out) {
2298
+ return this._getTargetDirection(out).negate();
2299
+ }
2300
+ }, {
2301
+ key: "_findPointerById",
2302
+ value: function _findPointerById(pointerId) {
2303
+ return this._activePointers.find(function (activePointer) {
2304
+ return activePointer.pointerId === pointerId;
2305
+ });
2306
+ }
2307
+ }, {
2308
+ key: "_findPointerByMouseButton",
2309
+ value: function _findPointerByMouseButton(mouseButton) {
2310
+ return this._activePointers.find(function (activePointer) {
2311
+ return activePointer.mouseButton === mouseButton;
2312
+ });
2313
+ }
2314
+ }, {
2315
+ key: "_disposePointer",
2316
+ value: function _disposePointer(pointer) {
2317
+ this._activePointers.splice(this._activePointers.indexOf(pointer), 1);
2318
+ }
2319
+ }, {
2320
+ key: "_encloseToBoundary",
2321
+ value: function _encloseToBoundary(position, offset, friction) {
2322
+ var offsetLength2 = offset.lengthSq();
2323
+ if (offsetLength2 === 0.0) {
2324
+ // sanity check
2325
+ return position;
2326
+ }
2327
+ // See: https://twitter.com/FMS_Cat/status/1106508958640988161
2328
+ var newTarget = _v3B.copy(offset).add(position); // target
2329
+ var clampedTarget = this._boundary.clampPoint(newTarget, _v3C); // clamped target
2330
+ var deltaClampedTarget = clampedTarget.sub(newTarget); // newTarget -> clampedTarget
2331
+ var deltaClampedTargetLength2 = deltaClampedTarget.lengthSq(); // squared length of deltaClampedTarget
2332
+ if (deltaClampedTargetLength2 === 0.0) {
2333
+ // when the position doesn't have to be clamped
2334
+ return position.add(offset);
2335
+ } else if (deltaClampedTargetLength2 === offsetLength2) {
2336
+ // when the position is completely stuck
2337
+ return position;
2338
+ } else if (friction === 0.0) {
2339
+ return position.add(offset).add(deltaClampedTarget);
2340
+ } else {
2341
+ var offsetFactor = 1.0 + friction * deltaClampedTargetLength2 / offset.dot(deltaClampedTarget);
2342
+ return position.add(_v3B.copy(offset).multiplyScalar(offsetFactor)).add(deltaClampedTarget.multiplyScalar(1.0 - friction));
2343
+ }
2344
+ }
2345
+ }, {
2346
+ key: "_updateNearPlaneCorners",
2347
+ value: function _updateNearPlaneCorners() {
2348
+ if (isPerspectiveCamera(this._camera)) {
2349
+ var camera = this._camera;
2350
+ var near = camera.near;
2351
+ var fov = camera.getEffectiveFOV() * DEG2RAD;
2352
+ var heightHalf = Math.tan(fov * 0.5) * near; // near plain half height
2353
+ var widthHalf = heightHalf * camera.aspect; // near plain half width
2354
+ this._nearPlaneCorners[0].set(-widthHalf, -heightHalf, 0);
2355
+ this._nearPlaneCorners[1].set(widthHalf, -heightHalf, 0);
2356
+ this._nearPlaneCorners[2].set(widthHalf, heightHalf, 0);
2357
+ this._nearPlaneCorners[3].set(-widthHalf, heightHalf, 0);
2358
+ } else if (isOrthographicCamera(this._camera)) {
2359
+ var _camera3 = this._camera;
2360
+ var zoomInv = 1 / _camera3.zoom;
2361
+ var left = _camera3.left * zoomInv;
2362
+ var right = _camera3.right * zoomInv;
2363
+ var top = _camera3.top * zoomInv;
2364
+ var bottom = _camera3.bottom * zoomInv;
2365
+ this._nearPlaneCorners[0].set(left, top, 0);
2366
+ this._nearPlaneCorners[1].set(right, top, 0);
2367
+ this._nearPlaneCorners[2].set(right, bottom, 0);
2368
+ this._nearPlaneCorners[3].set(left, bottom, 0);
2369
+ }
2370
+ }
2371
+ // lateUpdate
2372
+ }, {
2373
+ key: "_collisionTest",
2374
+ value: function _collisionTest() {
2375
+ var distance = Infinity;
2376
+ var hasCollider = this.colliderMeshes.length >= 1;
2377
+ if (!hasCollider) return distance;
2378
+ if (notSupportedInOrthographicCamera(this._camera, '_collisionTest')) return distance;
2379
+ var rayDirection = this._getTargetDirection(_cameraDirection);
2380
+ _rotationMatrix.lookAt(_ORIGIN, rayDirection, this._camera.up);
2381
+ for (var i = 0; i < 4; i++) {
2382
+ var nearPlaneCorner = _v3B.copy(this._nearPlaneCorners[i]);
2383
+ nearPlaneCorner.applyMatrix4(_rotationMatrix);
2384
+ var origin = _v3C.addVectors(this._target, nearPlaneCorner);
2385
+ _raycaster.set(origin, rayDirection);
2386
+ _raycaster.far = this._spherical.radius + 1;
2387
+ var intersects = _raycaster.intersectObjects(this.colliderMeshes);
2388
+ if (intersects.length !== 0 && intersects[0].distance < distance) {
2389
+ distance = intersects[0].distance;
2390
+ }
2391
+ }
2392
+ return distance;
2393
+ }
2394
+ /**
2395
+ * Get its client rect and package into given `DOMRect` .
2396
+ */
2397
+ }, {
2398
+ key: "_getClientRect",
2399
+ value: function _getClientRect(target) {
2400
+ if (!this._domElement) return;
2401
+ var rect = this._domElement.getBoundingClientRect();
2402
+ target.x = rect.left;
2403
+ target.y = rect.top;
2404
+ if (this._viewport) {
2405
+ target.x += this._viewport.x;
2406
+ target.y += rect.height - this._viewport.w - this._viewport.y;
2407
+ target.width = this._viewport.z;
2408
+ target.height = this._viewport.w;
2409
+ } else {
2410
+ target.width = rect.width;
2411
+ target.height = rect.height;
2412
+ }
2413
+ return target;
2414
+ }
2415
+ }, {
2416
+ key: "_createOnRestPromise",
2417
+ value: function _createOnRestPromise(resolveImmediately) {
2418
+ var _this2 = this;
2419
+ if (resolveImmediately) return Promise.resolve();
2420
+ this._hasRested = false;
2421
+ this.dispatchEvent({
2422
+ type: 'transitionstart'
2423
+ });
2424
+ return new Promise(function (resolve) {
2425
+ var _onResolve = function onResolve() {
2426
+ _this2.removeEventListener('rest', _onResolve);
2427
+ resolve();
2428
+ };
2429
+ _this2.addEventListener('rest', _onResolve);
2430
+ });
2431
+ }
2432
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
2433
+ }, {
2434
+ key: "_addAllEventListeners",
2435
+ value: function _addAllEventListeners(_domElement) {}
2436
+ }, {
2437
+ key: "_removeAllEventListeners",
2438
+ value: function _removeAllEventListeners() {}
2439
+ /**
2440
+ * backward compatible
2441
+ * @deprecated use smoothTime (in seconds) instead
2442
+ * @category Properties
2443
+ */
2444
+ }, {
2445
+ key: "dampingFactor",
2446
+ get: function get() {
2447
+ console.warn('.dampingFactor has been deprecated. use smoothTime (in seconds) instead.');
2448
+ return 0;
2449
+ }
2450
+ /**
2451
+ * backward compatible
2452
+ * @deprecated use smoothTime (in seconds) instead
2453
+ * @category Properties
2454
+ */,
2455
+ set: function set(_) {
2456
+ console.warn('.dampingFactor has been deprecated. use smoothTime (in seconds) instead.');
2457
+ }
2458
+ /**
2459
+ * backward compatible
2460
+ * @deprecated use draggingSmoothTime (in seconds) instead
2461
+ * @category Properties
2462
+ */
2463
+ }, {
2464
+ key: "draggingDampingFactor",
2465
+ get: function get() {
2466
+ console.warn('.draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.');
2467
+ return 0;
2468
+ }
2469
+ /**
2470
+ * backward compatible
2471
+ * @deprecated use draggingSmoothTime (in seconds) instead
2472
+ * @category Properties
2473
+ */,
2474
+ set: function set(_) {
2475
+ console.warn('.draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.');
2476
+ }
2477
+ }], [{
2478
+ key: "install",
2479
+ value:
2480
+ /**
2481
+ * Injects THREE as the dependency. You can then proceed to use CameraControls.
2482
+ *
2483
+ * e.g
2484
+ * ```javascript
2485
+ * CameraControls.install( { THREE: THREE } );
2486
+ * ```
2487
+ *
2488
+ * Note: If you do not wish to use enter three.js to reduce file size(tree-shaking for example), make a subset to install.
2489
+ *
2490
+ * ```js
2491
+ * import {
2492
+ * Vector2,
2493
+ * Vector3,
2494
+ * Vector4,
2495
+ * Quaternion,
2496
+ * Matrix4,
2497
+ * Spherical,
2498
+ * Box3,
2499
+ * Sphere,
2500
+ * Raycaster,
2501
+ * MathUtils,
2502
+ * } from 'three';
2503
+ *
2504
+ * const subsetOfTHREE = {
2505
+ * Vector2 : Vector2,
2506
+ * Vector3 : Vector3,
2507
+ * Vector4 : Vector4,
2508
+ * Quaternion: Quaternion,
2509
+ * Matrix4 : Matrix4,
2510
+ * Spherical : Spherical,
2511
+ * Box3 : Box3,
2512
+ * Sphere : Sphere,
2513
+ * Raycaster : Raycaster,
2514
+ * };
2515
+ * CameraControls.install( { THREE: subsetOfTHREE } );
2516
+ * ```
2517
+ * @category Statics
2518
+ */
2519
+ function install(libs) {
2520
+ THREE = libs.THREE;
2521
+ _ORIGIN = Object.freeze(new THREE.Vector3(0, 0, 0));
2522
+ _AXIS_Y = Object.freeze(new THREE.Vector3(0, 1, 0));
2523
+ _AXIS_Z = Object.freeze(new THREE.Vector3(0, 0, 1));
2524
+ _v2 = new THREE.Vector2();
2525
+ _v3A = new THREE.Vector3();
2526
+ _v3B = new THREE.Vector3();
2527
+ _v3C = new THREE.Vector3();
2528
+ _cameraDirection = new THREE.Vector3();
2529
+ _xColumn = new THREE.Vector3();
2530
+ _yColumn = new THREE.Vector3();
2531
+ _zColumn = new THREE.Vector3();
2532
+ _deltaTarget = new THREE.Vector3();
2533
+ _deltaOffset = new THREE.Vector3();
2534
+ _sphericalA = new THREE.Spherical();
2535
+ _sphericalB = new THREE.Spherical();
2536
+ _box3A = new THREE.Box3();
2537
+ _box3B = new THREE.Box3();
2538
+ _sphere = new THREE.Sphere();
2539
+ _quaternionA = new THREE.Quaternion();
2540
+ _quaternionB = new THREE.Quaternion();
2541
+ _rotationMatrix = new THREE.Matrix4();
2542
+ _raycaster = new THREE.Raycaster();
2543
+ }
2544
+ /**
2545
+ * list all ACTIONs
2546
+ * @category Statics
2547
+ */
2548
+ }, {
2549
+ key: "ACTION",
2550
+ get: function get() {
2551
+ return ACTION;
2552
+ }
2553
+ }, {
2554
+ key: "createBoundingSphere",
2555
+ value: function createBoundingSphere(object3d) {
2556
+ var out = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new THREE.Sphere();
2557
+ var boundingSphere = out;
2558
+ var center = boundingSphere.center;
2559
+ _box3A.makeEmpty();
2560
+ // find the center
2561
+ object3d.traverseVisible(function (object) {
2562
+ if (!object.isMesh) return;
2563
+ _box3A.expandByObject(object);
2564
+ });
2565
+ _box3A.getCenter(center);
2566
+ // find the radius
2567
+ var maxRadiusSq = 0;
2568
+ object3d.traverseVisible(function (object) {
2569
+ if (!object.isMesh) return;
2570
+ var mesh = object;
2571
+ var geometry = mesh.geometry.clone();
2572
+ geometry.applyMatrix4(mesh.matrixWorld);
2573
+ var bufferGeometry = geometry;
2574
+ var position = bufferGeometry.attributes.position;
2575
+ for (var i = 0, l = position.count; i < l; i++) {
2576
+ _v3A.fromBufferAttribute(position, i);
2577
+ maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_v3A));
2578
+ }
2579
+ });
2580
+ boundingSphere.radius = Math.sqrt(maxRadiusSq);
2581
+ return boundingSphere;
2582
+ }
2583
+ }]);
2584
+ }(EventDispatcher);
2585
+ export { EventDispatcher, CameraControls as default };