kitchen-simulator 1.1.1-test.49 → 1.1.1-test.50

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