@hatiolab/things-scene 9.0.0-beta.2 → 9.0.0-beta.21

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 (341) hide show
  1. package/db.sqlite +0 -0
  2. package/dist/animation/animate.d.ts +4 -0
  3. package/dist/animation/animations/animation.d.ts +14 -0
  4. package/dist/animation/animations/fade.d.ts +4 -0
  5. package/dist/animation/animations/heartbeat.d.ts +4 -0
  6. package/dist/animation/animations/moving.d.ts +4 -0
  7. package/dist/animation/animations/outline.d.ts +10 -0
  8. package/dist/animation/animations/rotation.d.ts +4 -0
  9. package/dist/animation/animations/vibration.d.ts +4 -0
  10. package/dist/animation/compile.d.ts +1 -0
  11. package/dist/animation/delta.d.ts +19 -0
  12. package/dist/animation/index.d.ts +1 -0
  13. package/dist/command/command-change.d.ts +7 -0
  14. package/dist/command/command-migrate.d.ts +4 -0
  15. package/dist/command/command-migrate.js +85 -0
  16. package/dist/command/command-migrate.js.map +1 -0
  17. package/dist/command/command.d.ts +5 -0
  18. package/dist/command/snapshot-commander.d.ts +15 -0
  19. package/dist/components/anchor/anchor.d.ts +128 -0
  20. package/dist/components/anchor/ellipse-anchors.d.ts +2 -0
  21. package/dist/components/anchor/ellipse-anchors.js +38 -0
  22. package/dist/components/anchor/ellipse-anchors.js.map +1 -0
  23. package/dist/components/anchor/rect-anchors.d.ts +10 -0
  24. package/dist/components/audio.d.ts +25 -0
  25. package/dist/components/audio.js +141 -0
  26. package/dist/components/audio.js.map +1 -0
  27. package/dist/components/cloud.d.ts +13 -0
  28. package/dist/components/cloud.js +31 -0
  29. package/dist/components/cloud.js.map +1 -0
  30. package/dist/components/component.d.ts +227 -0
  31. package/dist/components/component.js +912 -0
  32. package/dist/components/component.js.map +1 -0
  33. package/dist/components/container-abstract.d.ts +51 -0
  34. package/dist/components/container-abstract.js +372 -0
  35. package/dist/components/container-abstract.js.map +1 -0
  36. package/dist/components/container.d.ts +38 -0
  37. package/dist/components/container.js +75 -0
  38. package/dist/components/container.js.map +1 -0
  39. package/dist/components/data/data-mapping.d.ts +16 -0
  40. package/dist/components/data/data.d.ts +8 -0
  41. package/dist/components/data/evaluator.d.ts +1 -0
  42. package/dist/components/donut.d.ts +15 -0
  43. package/dist/components/donut.js +74 -0
  44. package/dist/components/donut.js.map +1 -0
  45. package/dist/components/drawer/draw-image-pendable.d.ts +1 -0
  46. package/dist/components/drawer/effect.d.ts +1 -0
  47. package/dist/components/drawer/fill.d.ts +14 -0
  48. package/dist/components/drawer/format.d.ts +1 -0
  49. package/dist/components/drawer/line.d.ts +3 -0
  50. package/dist/components/drawer/stroke.d.ts +1 -0
  51. package/dist/components/drawer/text-wrapper.d.ts +10 -0
  52. package/dist/components/drawer/text.d.ts +3 -0
  53. package/dist/components/ellipse.d.ts +35 -0
  54. package/dist/components/ellipse.js +99 -0
  55. package/dist/components/ellipse.js.map +1 -0
  56. package/dist/components/file/ondropfile.d.ts +1 -0
  57. package/dist/components/fit/fit.d.ts +15 -0
  58. package/dist/components/geometry/transcoord.d.ts +41 -0
  59. package/dist/components/geometry/union.d.ts +6 -0
  60. package/dist/components/gif-view.d.ts +18 -0
  61. package/dist/components/gif-view.js +116 -0
  62. package/dist/components/gif-view.js.map +1 -0
  63. package/dist/components/global-ref.d.ts +36 -0
  64. package/dist/components/global-ref.js +128 -0
  65. package/dist/components/global-ref.js.map +1 -0
  66. package/dist/components/group.d.ts +15 -0
  67. package/dist/components/group.js +145 -0
  68. package/dist/components/group.js.map +1 -0
  69. package/dist/components/html/elements.d.ts +2 -0
  70. package/dist/components/html/fill.d.ts +1 -0
  71. package/dist/components/html/reposition.d.ts +1 -0
  72. package/dist/components/html/shadow.d.ts +1 -0
  73. package/dist/components/html-overlay-container.d.ts +27 -0
  74. package/dist/components/html-overlay-container.js +14 -0
  75. package/dist/components/html-overlay-container.js.map +1 -0
  76. package/dist/components/html-overlay-element.d.ts +25 -0
  77. package/dist/components/html-overlay-element.js +9 -0
  78. package/dist/components/html-overlay-element.js.map +1 -0
  79. package/dist/components/image-view.d.ts +19 -0
  80. package/dist/components/image-view.js +180 -0
  81. package/dist/components/image-view.js.map +1 -0
  82. package/dist/components/index.d.ts +32 -0
  83. package/dist/components/index.js +39 -0
  84. package/dist/components/index.js.map +1 -0
  85. package/dist/components/info-window.d.ts +41 -0
  86. package/dist/components/info-window.js +425 -0
  87. package/dist/components/info-window.js.map +1 -0
  88. package/dist/components/line.d.ts +91 -0
  89. package/dist/components/line.js +303 -0
  90. package/dist/components/line.js.map +1 -0
  91. package/dist/components/local-ref.d.ts +47 -0
  92. package/dist/components/local-ref.js +103 -0
  93. package/dist/components/local-ref.js.map +1 -0
  94. package/dist/components/mixins/connectable.d.ts +45 -0
  95. package/dist/components/mixins/data-source.d.ts +9 -0
  96. package/dist/components/mixins/html-element.d.ts +24 -0
  97. package/dist/components/mixins/move-handle.d.ts +11 -0
  98. package/dist/components/mixins/rect-path.d.ts +13 -0
  99. package/dist/components/mixins/value-holder.d.ts +18 -0
  100. package/dist/components/mutater/bounds.d.ts +10 -0
  101. package/dist/components/mutater/path.d.ts +5 -0
  102. package/dist/components/ortholine.d.ts +21 -0
  103. package/dist/components/ortholine.js +814 -0
  104. package/dist/components/ortholine.js.map +1 -0
  105. package/dist/components/outline/ellipse-outline.d.ts +4 -0
  106. package/dist/components/outline/ellipse-outline.js +11 -0
  107. package/dist/components/outline/ellipse-outline.js.map +1 -0
  108. package/dist/components/outline/path-outline.d.ts +1 -0
  109. package/dist/components/path.d.ts +5 -0
  110. package/dist/components/path.js +40 -0
  111. package/dist/components/path.js.map +1 -0
  112. package/dist/components/polygon.d.ts +40 -0
  113. package/dist/components/polygon.js +157 -0
  114. package/dist/components/polygon.js.map +1 -0
  115. package/dist/components/polyline.d.ts +18 -0
  116. package/dist/components/polyline.js +102 -0
  117. package/dist/components/polyline.js.map +1 -0
  118. package/dist/components/popup.d.ts +48 -0
  119. package/dist/components/popup.js +138 -0
  120. package/dist/components/popup.js.map +1 -0
  121. package/dist/components/rect.d.ts +26 -0
  122. package/dist/components/rect.js +91 -0
  123. package/dist/components/rect.js.map +1 -0
  124. package/dist/components/retention/retention-manager.d.ts +8 -0
  125. package/dist/components/root-container.d.ts +90 -0
  126. package/dist/components/root-container.js +478 -0
  127. package/dist/components/root-container.js.map +1 -0
  128. package/dist/components/ruler.d.ts +16 -0
  129. package/dist/components/ruler.js +77 -0
  130. package/dist/components/ruler.js.map +1 -0
  131. package/dist/components/shape.d.ts +25 -0
  132. package/dist/components/shape.js +80 -0
  133. package/dist/components/shape.js.map +1 -0
  134. package/dist/components/star.d.ts +13 -0
  135. package/dist/components/star.js +80 -0
  136. package/dist/components/star.js.map +1 -0
  137. package/dist/components/text/substitutor.d.ts +3 -0
  138. package/dist/components/text.d.ts +8 -0
  139. package/dist/components/text.js +15 -0
  140. package/dist/components/text.js.map +1 -0
  141. package/dist/components/three-container.d.ts +60 -0
  142. package/dist/components/three-container.js +515 -0
  143. package/dist/components/three-container.js.map +1 -0
  144. package/dist/components/triangle.d.ts +15 -0
  145. package/dist/components/triangle.js +76 -0
  146. package/dist/components/triangle.js.map +1 -0
  147. package/dist/const.d.ts +39 -0
  148. package/dist/core/collection.d.ts +8 -0
  149. package/dist/core/debug.d.ts +1 -0
  150. package/dist/core/deep-equals.d.ts +1 -0
  151. package/dist/core/dom-to-image.d.ts +127 -0
  152. package/dist/core/event.d.ts +92 -0
  153. package/dist/core/index.d.ts +2 -0
  154. package/dist/core/list.d.ts +32 -0
  155. package/dist/core/logger.d.ts +3 -0
  156. package/dist/core/memoize.d.ts +6 -0
  157. package/dist/core/mixin.d.ts +1 -0
  158. package/dist/core/obj-accessor.d.ts +1 -0
  159. package/dist/core/reference-map.d.ts +14 -0
  160. package/dist/core/round-rect.d.ts +19 -0
  161. package/dist/core/script-loader.d.ts +3 -0
  162. package/dist/core/snapshot-taker.d.ts +12 -0
  163. package/dist/core/stack.d.ts +2 -0
  164. package/dist/core/timecapsule.d.ts +18 -0
  165. package/dist/core/utils.d.ts +9 -0
  166. package/dist/decorator/anchors-decorator.d.ts +31 -0
  167. package/dist/decorator/data-spread-decorator.d.ts +1 -0
  168. package/dist/decorator/decotag-decorator.d.ts +1 -0
  169. package/dist/decorator/index.d.ts +2 -0
  170. package/dist/decorator/link-decorator.d.ts +1 -0
  171. package/dist/effect/gradation.d.ts +1 -0
  172. package/dist/effect/index.d.ts +1 -0
  173. package/dist/effect/shadow.d.ts +2 -0
  174. package/dist/effect/turn.d.ts +1 -0
  175. package/dist/event/event-engine.d.ts +12 -0
  176. package/dist/event/event-pump.d.ts +11 -0
  177. package/dist/event/event-tracker.d.ts +21 -0
  178. package/dist/event/index.d.ts +2 -0
  179. package/dist/event/ua-event-handler.d.ts +32 -0
  180. package/dist/event-map/event-map.d.ts +9 -0
  181. package/dist/event-map/index.d.ts +1 -0
  182. package/dist/event-map/move-handler.d.ts +1 -0
  183. package/dist/event-map/text-editor-lite.d.ts +1 -0
  184. package/dist/index.d.ts +1 -0
  185. package/dist/index.js +3 -0
  186. package/dist/index.js.map +1 -0
  187. package/dist/layer/action/emphasize.d.ts +2 -0
  188. package/dist/layer/action/popup.d.ts +5 -0
  189. package/dist/layer/action/pressed.d.ts +2 -0
  190. package/dist/layer/add-layer.d.ts +42 -0
  191. package/dist/layer/add-layer.js +142 -0
  192. package/dist/layer/add-layer.js.map +1 -0
  193. package/dist/layer/decotag-layer.d.ts +27 -0
  194. package/dist/layer/decotag-layer.js +105 -0
  195. package/dist/layer/decotag-layer.js.map +1 -0
  196. package/dist/layer/guide-layer.d.ts +44 -0
  197. package/dist/layer/guide-layer.js +261 -0
  198. package/dist/layer/guide-layer.js.map +1 -0
  199. package/dist/layer/index.d.ts +7 -0
  200. package/dist/layer/index.js +11 -0
  201. package/dist/layer/index.js.map +1 -0
  202. package/dist/layer/layer.d.ts +32 -0
  203. package/dist/layer/layer.js +155 -0
  204. package/dist/layer/layer.js.map +1 -0
  205. package/dist/layer/model-layer.d.ts +46 -0
  206. package/dist/layer/model-layer.js +402 -0
  207. package/dist/layer/model-layer.js.map +1 -0
  208. package/dist/layer/modeler/anchor-handler.d.ts +36 -0
  209. package/dist/layer/modeler/control-handler.d.ts +18 -0
  210. package/dist/layer/modeler/focus-outline.d.ts +5 -0
  211. package/dist/layer/modeler/group-outline.d.ts +5 -0
  212. package/dist/layer/modeler/index.d.ts +7 -0
  213. package/dist/layer/modeler/path-handler.d.ts +22 -0
  214. package/dist/layer/modeler/resizer.d.ts +13 -0
  215. package/dist/layer/modeler/rotator.d.ts +15 -0
  216. package/dist/layer/modeler/rotator.js +120 -0
  217. package/dist/layer/modeler/rotator.js.map +1 -0
  218. package/dist/layer/modeling-layer.d.ts +66 -0
  219. package/dist/layer/modeling-layer.js +451 -0
  220. package/dist/layer/modeling-layer.js.map +1 -0
  221. package/dist/layer/selection/selected-finder.d.ts +1 -0
  222. package/dist/layer/selection-layer.d.ts +42 -0
  223. package/dist/layer/selection-layer.js +307 -0
  224. package/dist/layer/selection-layer.js.map +1 -0
  225. package/dist/layer/shift-layer.d.ts +18 -0
  226. package/dist/layer/shift-layer.js +61 -0
  227. package/dist/layer/shift-layer.js.map +1 -0
  228. package/dist/layout/absolute.d.ts +8 -0
  229. package/dist/layout/card.d.ts +7 -0
  230. package/dist/layout/html-absolute.d.ts +8 -0
  231. package/dist/layout/index.d.ts +8 -0
  232. package/dist/layout/index.js +12 -0
  233. package/dist/layout/index.js.map +1 -0
  234. package/dist/layout/layout.d.ts +11 -0
  235. package/dist/layout/linear-horizontal.d.ts +7 -0
  236. package/dist/layout/linear-vertical.d.ts +7 -0
  237. package/dist/layout/table.d.ts +9 -0
  238. package/dist/layout/three.d.ts +8 -0
  239. package/dist/layout/three.js +20 -0
  240. package/dist/layout/three.js.map +1 -0
  241. package/dist/license/license.d.ts +18 -0
  242. package/dist/model/compile.d.ts +1 -0
  243. package/dist/model/compile.js +28 -0
  244. package/dist/model/compile.js.map +1 -0
  245. package/dist/model/duplicate.d.ts +1 -0
  246. package/dist/model/index.d.ts +3 -0
  247. package/dist/model/selector.d.ts +2 -0
  248. package/dist/style/compile.d.ts +1 -0
  249. package/dist/style/index.d.ts +1 -0
  250. package/dist/things-scene/api/add-start.d.ts +1 -0
  251. package/dist/things-scene/api/add.d.ts +5 -0
  252. package/dist/things-scene/api/align.d.ts +1 -0
  253. package/dist/things-scene/api/change.d.ts +2 -0
  254. package/dist/things-scene/api/clipboard.d.ts +3 -0
  255. package/dist/things-scene/api/distribute.d.ts +1 -0
  256. package/dist/things-scene/api/duplicate.d.ts +4 -0
  257. package/dist/things-scene/api/fullscreen.d.ts +1 -0
  258. package/dist/things-scene/api/group.d.ts +8 -0
  259. package/dist/things-scene/api/group.js +78 -0
  260. package/dist/things-scene/api/group.js.map +1 -0
  261. package/dist/things-scene/api/ids.d.ts +4 -0
  262. package/dist/things-scene/api/index.d.ts +15 -0
  263. package/dist/things-scene/api/listener.d.ts +3 -0
  264. package/dist/things-scene/api/remove.d.ts +4 -0
  265. package/dist/things-scene/api/symmetry.d.ts +2 -0
  266. package/dist/things-scene/api/symmetry.js +39 -0
  267. package/dist/things-scene/api/symmetry.js.map +1 -0
  268. package/dist/things-scene/api/to-data-url.d.ts +1 -0
  269. package/dist/things-scene/api/to-data-url.js +69 -0
  270. package/dist/things-scene/api/to-data-url.js.map +1 -0
  271. package/dist/things-scene/api/zorder.d.ts +2 -0
  272. package/dist/things-scene/application-context.d.ts +40 -0
  273. package/dist/things-scene/config.d.ts +4 -0
  274. package/dist/things-scene/create.d.ts +20 -0
  275. package/dist/things-scene/fps.d.ts +1 -0
  276. package/dist/things-scene/index.d.ts +17 -0
  277. package/dist/things-scene/index.js +23 -0
  278. package/dist/things-scene/index.js.map +1 -0
  279. package/dist/things-scene/polyfill.d.ts +2 -0
  280. package/dist/things-scene/scene.d.ts +155 -0
  281. package/dist/things-scene/version.d.ts +2 -0
  282. package/dist/threed/common.d.ts +22 -0
  283. package/dist/threed/control/three-controls.d.ts +11 -0
  284. package/dist/threed/control/three-controls.js +620 -0
  285. package/dist/threed/control/three-controls.js.map +1 -0
  286. package/dist/threed/html/elements.d.ts +2 -0
  287. package/dist/threed/real-object-camera-meshed.d.ts +12 -0
  288. package/dist/threed/real-object-camera-meshed.js +49 -0
  289. package/dist/threed/real-object-camera-meshed.js.map +1 -0
  290. package/dist/threed/real-object-camera.d.ts +9 -0
  291. package/dist/threed/real-object-camera.js +31 -0
  292. package/dist/threed/real-object-camera.js.map +1 -0
  293. package/dist/threed/real-object-dom-element.d.ts +20 -0
  294. package/dist/threed/real-object-dom-element.js +78 -0
  295. package/dist/threed/real-object-dom-element.js.map +1 -0
  296. package/dist/threed/real-object-dummy.d.ts +6 -0
  297. package/dist/threed/real-object-dummy.js +11 -0
  298. package/dist/threed/real-object-dummy.js.map +1 -0
  299. package/dist/threed/real-object-extrude.d.ts +19 -0
  300. package/dist/threed/real-object-extrude.js +171 -0
  301. package/dist/threed/real-object-extrude.js.map +1 -0
  302. package/dist/threed/real-object-gltf.d.ts +15 -0
  303. package/dist/threed/real-object-gltf.js +97 -0
  304. package/dist/threed/real-object-gltf.js.map +1 -0
  305. package/dist/threed/real-object-group.d.ts +5 -0
  306. package/dist/threed/real-object-group.js +11 -0
  307. package/dist/threed/real-object-group.js.map +1 -0
  308. package/dist/threed/real-object-mesh.d.ts +11 -0
  309. package/dist/threed/real-object-mesh.js +55 -0
  310. package/dist/threed/real-object-mesh.js.map +1 -0
  311. package/dist/threed/real-object-plane.d.ts +6 -0
  312. package/dist/threed/real-object-plane.js +23 -0
  313. package/dist/threed/real-object-plane.js.map +1 -0
  314. package/dist/threed/real-object-scene.d.ts +21 -0
  315. package/dist/threed/real-object-scene.js +89 -0
  316. package/dist/threed/real-object-scene.js.map +1 -0
  317. package/dist/threed/real-object-sprite.d.ts +12 -0
  318. package/dist/threed/real-object-sprite.js +35 -0
  319. package/dist/threed/real-object-sprite.js.map +1 -0
  320. package/dist/threed/real-object-text.d.ts +16 -0
  321. package/dist/threed/real-object-text.js +70 -0
  322. package/dist/threed/real-object-text.js.map +1 -0
  323. package/dist/threed/real-object.d.ts +48 -0
  324. package/dist/threed/real-object.js +199 -0
  325. package/dist/threed/real-object.js.map +1 -0
  326. package/dist/threed/texture/text-texture.d.ts +8 -0
  327. package/dist/threed/three-dimensional-container.d.ts +7 -0
  328. package/dist/threed/three-dimensional-container.js +2 -0
  329. package/dist/threed/three-dimensional-container.js.map +1 -0
  330. package/dist/threed/utils/bound-uv-generator.d.ts +16 -0
  331. package/dist/types.d.ts +53 -0
  332. package/dist/types.js +368 -0
  333. package/dist/types.js.map +1 -0
  334. package/package.json +5 -2
  335. package/schema.graphql +5 -0
  336. package/things-scene-ie.js +1 -1
  337. package/things-scene-ie.js.LICENSE.txt +22 -0
  338. package/things-scene-min.js +1 -1
  339. package/things-scene-min.js.LICENSE.txt +22 -0
  340. package/things-scene.d.ts +13 -1
  341. package/things-scene.mjs +34 -14
@@ -0,0 +1 @@
1
+ {"version":3,"file":"three-controls.js","sourceRoot":"","sources":["../../../src/threed/control/three-controls.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH;;;;;;GAMG;AASH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,IAAI,aAAa,GAAG,UAAqB,MAAoB,EAAE,SAAoB;IACjF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IAEpB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAA;IAE1B,uCAAuC;IACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;IAEnB,sEAAsE;IACtE,IAAI,CAAC,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAEjC,8DAA8D;IAC9D,IAAI,CAAC,WAAW,GAAG,CAAC,CAAA;IACpB,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAA;IAE3B,8DAA8D;IAC9D,IAAI,CAAC,OAAO,GAAG,CAAC,CAAA;IAChB,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAA;IAEvB,4DAA4D;IAC5D,iCAAiC;IACjC,IAAI,CAAC,aAAa,GAAG,CAAC,CAAA,CAAC,UAAU;IACjC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAA,CAAC,UAAU;IAEvC,8DAA8D;IAC9D,yEAAyE;IACzE,IAAI,CAAC,eAAe,GAAG,CAAC,QAAQ,CAAA,CAAC,UAAU;IAC3C,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAA,CAAC,UAAU;IAE1C,0CAA0C;IAC1C,gFAAgF;IAChF,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;IAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;IAEzB,gGAAgG;IAChG,kCAAkC;IAClC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IACtB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;IAEpB,mCAAmC;IACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IACxB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAA;IAEtB,kCAAkC;IAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACrB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAA,CAAC,kCAAkC;IAEzD,wDAAwD;IACxD,oFAAoF;IACpF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAA;IAC1D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,aAAa,IAAI,GAAG,CAAA,CAAC,sCAAsC;IAEvG,0CAA0C;IAC1C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;IAEtB,sBAAsB;IACtB,IAAI,CAAC,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAA;IAEvD,gBAAgB;IAChB,IAAI,CAAC,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAA;IAEjG,YAAY;IACZ,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;IAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAA;IAC7C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAA;IAE7B,QAAQ;IACR,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;IAE1B,EAAE;IACF,iBAAiB;IACjB,EAAE;IAEF,IAAI,CAAC,aAAa,GAAG;QACnB,OAAO,SAAS,CAAC,GAAG,CAAA;IACtB,CAAC,CAAA;IAED,IAAI,CAAC,iBAAiB,GAAG;QACvB,OAAO,SAAS,CAAC,KAAK,CAAA;IACxB,CAAC,CAAA;IAED,IAAI,CAAC,SAAS,GAAG;QACf,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAChC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;QAC3C,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAA;IACjC,CAAC,CAAA;IAED,IAAI,CAAC,KAAK,GAAG;QACX,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;QAChC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QAC3C,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,KAAK,CAAC,KAAK,CAAA;QAE/B,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAA;QACrC,sCAAsC;QAEtC,KAAK,CAAC,MAAM,EAAE,CAAA;QAEd,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IACpB,CAAC,CAAA;IAED,sFAAsF;IACtF,IAAI,CAAC,MAAM,GAAG,CAAC;QACb,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;QAEhC,iCAAiC;QACjC,IAAI,IAAI,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAC3F,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,CAAA;QAEvC,IAAI,YAAY,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;QACtC,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,UAAU,EAAE,CAAA;QAE3C,OAAO,SAAS,MAAM;YACpB,kDAAkD;YAClD,kBAAkB;YAElB,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAA;YAEpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAEvC,wCAAwC;YACxC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAA;YAE5B,kCAAkC;YAClC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;YAEhC,IAAI,KAAK,CAAC,UAAU,IAAI,KAAK,KAAK,KAAK,CAAC,IAAI,EAAE;gBAC5C,kCAAkC;gBAClC,yCAAyC;gBACzC,aAAa;gBAEb,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAA;gBAClC,4CAA4C;aAC7C;YAED,SAAS,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAA;YACvC,SAAS,CAAC,GAAG,IAAI,cAAc,CAAC,GAAG,CAAA;YAEnC,8CAA8C;YAC9C,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,eAAe,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC,CAAA;YAEnG,4CAA4C;YAC5C,SAAS,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAA;YAE3F,SAAS,CAAC,QAAQ,EAAE,CAAA;YAEpB,SAAS,CAAC,MAAM,IAAI,KAAK,CAAA;YAEzB,+CAA+C;YAC/C,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;YAE7F,iCAAiC;YACjC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAA;YAE3B,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAA;YAElC,uDAAuD;YACvD,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAA;YAEnC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;YAEvC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAEjC,IAAI,KAAK,CAAC,aAAa,KAAK,IAAI,EAAE;gBAChC,cAAc,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAA;gBAC/C,cAAc,CAAC,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,aAAa,CAAA;aAC9C;iBAAM;gBACL,cAAc,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;aAC5B;YAED,KAAK,GAAG,CAAC,CAAA;YACT,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;YAEtB,uBAAuB;YACvB,+DAA+D;YAC/D,yDAAyD;YAEzD,gDAAgD;YAChD,mEAAmE;YACnE,oEAAoE;YACpE,IACE,WAAW;gBACX,YAAY,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,GAAG;gBAC3D,CAAC,GAAG,CAAC,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,GAAG,EAC3D;gBACA,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;gBACxC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;gBAE5C,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;gBAC5B,KAAK,CAAC,aAAa,GAAG,KAAK,CAAA;gBAC3B,WAAW,GAAG,KAAK,CAAA;gBAEnB,OAAO,IAAI,CAAA;aACZ;YAED,KAAK,CAAC,SAAS,CAAC,UAAU,EAAE,CAAA;YAC5B,OAAO,KAAK,CAAA;QACd,CAAC,CAAA;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,IAAI,CAAC,OAAO,GAAG,cAAa,CAAC,CAAA;IAE7B,EAAE;IACF,0DAA0D;IAC1D,EAAE;IAEF,IAAI,CAAC,WAAW,GAAG,UAAU,KAAiB,IAAG,CAAC,CAAA;IAElD,IAAI,CAAC,WAAW,GAAG,UAAU,KAAiB,IAAG,CAAC,CAAA;IAElD,IAAI,CAAC,SAAS,GAAG,UAAU,KAAiB,IAAG,CAAC,CAAA;IAEhD,IAAI,CAAC,WAAW,GAAG,UAAU,KAAgB;QAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;YAAE,OAAM;QAEjE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAA;QAEvB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAA;;YACvC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;QAEzB,QAAQ,KAAK,EAAE;YACb,KAAK,KAAK,CAAC,MAAM;gBACf,IAAI,IAAI,CAAC,YAAY;oBAAE,qBAAqB,CAAC,KAAK,CAAC,CAAA;gBACnD,MAAK;YAEP,KAAK,KAAK,CAAC,KAAK;gBACd,IAAI,IAAI,CAAC,UAAU;oBAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAChD,MAAK;YAEP,KAAK,KAAK,CAAC,GAAG;gBACZ,IAAI,IAAI,CAAC,SAAS;oBAAE,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBAC7C,MAAK;SACR;IACH,CAAC,CAAA;IAED,IAAI,CAAC,UAAU,GAAG,UAAU,KAAgB;QAC1C,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,OAAM;QAEzB,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;YAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAA;;YACvC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAA;QAEzB,QAAQ,KAAK,EAAE;YACb,KAAK,KAAK,CAAC,MAAM;gBACf,IAAI,IAAI,CAAC,YAAY;oBAAE,oBAAoB,CAAC,KAAK,CAAC,CAAA;gBAClD,MAAK;YAEP,KAAK,KAAK,CAAC,KAAK;gBACd,IAAI,IAAI,CAAC,UAAU;oBAAE,mBAAmB,CAAC,KAAK,CAAC,CAAA;gBAC/C,MAAK;YAEP,KAAK,KAAK,CAAC,GAAG;gBACZ,IAAI,IAAI,CAAC,SAAS;oBAAE,iBAAiB,CAAC,KAAK,CAAC,CAAA;gBAC5C,MAAK;SACR;IACH,CAAC,CAAA;IAED,IAAI,CAAC,SAAS,GAAG,UAAU,KAAgB;QACzC,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;YAAE,OAAM;QAEjE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;QAElB,UAAU,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,IAAI,KAAK,CAAA;QAE1D,KAAK,CAAC,SAAS,CAAC,cAAc,EAAE,CAAA;QAChC,kBAAkB;IACpB,CAAC,CAAA;IAED,IAAI,CAAC,SAAS,GAAG,UAAU,KAAoB;QAC7C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,IAAI,IAAI,CAAC,UAAU,KAAK,KAAK,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;YAAE,OAAM;QAE3F,aAAa,CAAC,KAAK,CAAC,CAAA;IACtB,CAAC,CAAA;IAED,IAAI,CAAC,YAAY,GAAG,UAAU,KAAiB;QAC7C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,OAAM;QAElC,QAAQ,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YAC5B,KAAK,CAAC,EAAE,6BAA6B;gBACnC,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;oBAAE,OAAM;gBACvC,sBAAsB,CAAC,KAAK,CAAC,CAAA;gBAC7B,KAAK,GAAG,KAAK,CAAC,YAAY,CAAA;gBAC1B,MAAK;YAEP,KAAK,CAAC,EAAE,0BAA0B;gBAChC,IAAI,CAAC,SAAS,GAAI,KAAa,CAAC,KAAK,IAAI,CAAC,CAAA;gBAC1C,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;oBAAE,OAAM;gBACpC,mBAAmB,CAAC,KAAK,CAAC,CAAA;gBAC1B,KAAK,GAAG,KAAK,CAAC,SAAS,CAAA;gBACvB,MAAK;YACP,uCAAuC;YACvC,6CAA6C;YAC7C,oCAAoC;YACpC,+BAA+B;YAC/B,WAAW;YAEX,uCAAuC;YACvC,4CAA4C;YAC5C,kCAAkC;YAClC,6BAA6B;YAC7B,WAAW;YAEX;gBACE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;SACrB;IACH,CAAC,CAAA;IAED,IAAI,CAAC,WAAW,GAAG,UAAU,KAAiB;QAC5C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,OAAM;QAElC,QAAQ,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE;YAC5B,KAAK,CAAC,EAAE,6BAA6B;gBACnC,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK;oBAAE,OAAM;gBACvC,IAAI,KAAK,KAAK,KAAK,CAAC,YAAY;oBAAE,OAAM,CAAC,qBAAqB;gBAC9D,qBAAqB,CAAC,KAAK,CAAC,CAAA;gBAC5B,MAAK;YACP,KAAK,CAAC,EAAE,0BAA0B;gBAChC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,GAAI,KAAa,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,EAAE;oBAC/D,OAAM;iBACP;gBACD,IAAI,IAAI,CAAC,SAAS,KAAK,KAAK;oBAAE,OAAM;gBACpC,IAAI,KAAK,KAAK,KAAK,CAAC,SAAS;oBAAE,OAAM,CAAC,qBAAqB;gBAC3D,kBAAkB,CAAC,KAAK,CAAC,CAAA;gBACzB,MAAK;YACP,uCAAuC;YACvC,6CAA6C;YAC7C,qEAAqE;YACrE,mCAAmC;YACnC,WAAW;YACX,uCAAuC;YACvC,4CAA4C;YAC5C,mEAAmE;YACnE,iCAAiC;YACjC,WAAW;YACX;gBACE,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;SACrB;IACH,CAAC,CAAA;IAED,IAAI,CAAC,UAAU,GAAG,UAAU,KAAiB;QAC3C,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK;YAAE,OAAM;QAClC,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;QAElB,cAAc,CAAC,KAAK,CAAC,CAAA;QACrB,kCAAkC;QAClC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IACpB,CAAC,CAAA;IAED,IAAI,CAAC,YAAY,GAAG,UAAU,UAAmB;QAC/C,UAAU,GAAG,IAAI,CAAA;QACjB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,MAAM,EAAE,CAAA;IACf,CAAC,CAAA;IAED,EAAE;IACF,YAAY;IACZ,EAAE;IAEF,IAAI,KAAK,GAAG,IAAI,CAAA;IAEhB,IAAI,WAAW,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;IACpC,IAAI,UAAU,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;IAClC,IAAI,QAAQ,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;IAE9B,IAAI,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAA;IAEpG,IAAI,KAAK,GAAG,KAAK,CAAC,IAAI,CAAA;IAEtB,IAAI,GAAG,GAAG,QAAQ,CAAA;IAElB,4CAA4C;IAC5C,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAA;IACrC,IAAI,cAAc,GAAG,IAAI,KAAK,CAAC,SAAS,EAAE,CAAA;IAE1C,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IACnC,IAAI,WAAW,GAAG,KAAK,CAAA;IAEvB,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IACrC,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IACnC,IAAI,WAAW,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAErC,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAClC,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAChC,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAElC,IAAI,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IACpC,IAAI,QAAQ,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAClC,IAAI,UAAU,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;IAEpC,IAAI,UAAU,GAAkB,IAAI,CAAA;IACpC,IAAI,WAAW,GAAG,CAAC,CAAA;IAEnB,SAAS,oBAAoB;QAC3B,IAAI,CAAC,UAAU,EAAE;YACf,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;YAC9B,WAAW,GAAG,SAAS,CAAC,KAAK,CAAA;YAC7B,OAAO,CAAC,CAAA;SACT;QAED,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,GAAG,UAAU,CAAA;QAC7C,IAAI,QAAQ,GAAG,QAAQ,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,eAAe,CAAC,CAAA;QAEzD,mCAAmC;QACnC,OAAO,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,QAAQ,GAAG,SAAS,CAAC,KAAK,GAAG,WAAW,CAAA;QAC7D,wDAAwD;IAC1D,CAAC;IAED,SAAS,YAAY;QACnB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,SAAS,CAAC,CAAA;IACxC,CAAC;IAED,SAAS,UAAU,CAAC,KAAa;QAC/B,cAAc,CAAC,KAAK,IAAI,KAAK,CAAA;IAC/B,CAAC;IAED,SAAS,QAAQ,CAAC,KAAa;QAC7B,cAAc,CAAC,GAAG,IAAI,KAAK,CAAA;IAC7B,CAAC;IAED,IAAI,OAAO,GAAG,CAAC;QACb,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;QAE3B,OAAO,SAAS,OAAO,CAAC,QAAgB,EAAE,YAAiB;YACzD,CAAC,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA,CAAC,+BAA+B;YACtE,CAAC,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,CAAA;YAE3B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,IAAI,KAAK,GAAG,CAAC;QACX,IAAI,CAAC,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;QAE3B,OAAO,SAAS,KAAK,CAAC,QAAgB,EAAE,YAAiB;YACvD,CAAC,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA,CAAC,+BAA+B;YACtE,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;YAE1B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;QAClB,CAAC,CAAA;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,+DAA+D;IAC/D,IAAI,GAAG,GAAG,CAAC;QACT,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,OAAO,EAAE,CAAA;QAEhC,OAAO,SAAS,GAAG,CAAC,MAAc,EAAE,MAAc;YAChD,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAA;YAEnF,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE;gBACpC,cAAc;gBACd,IAAI,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAA;gBACpC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;gBACvC,IAAI,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,CAAA;gBAEpC,6CAA6C;gBAC7C,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAA;gBAEtE,wFAAwF;gBACxF,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,cAAc,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAClF,sFAAsF;gBACtF,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,cAAc,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBAChF,oFAAoF;aACrF;iBAAM,IAAI,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;gBAC5C,eAAe;gBACf,OAAO,CACL,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,EAC7F,KAAK,CAAC,MAAM,CAAC,MAAM,CACpB,CAAA;gBACD,6GAA6G;gBAC7G,KAAK,CACH,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,EAC9F,KAAK,CAAC,MAAM,CAAC,MAAM,CACpB,CAAA;gBACD,4GAA4G;aAC7G;iBAAM;gBACL,8CAA8C;gBAC9C,OAAO,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAA;gBAC5F,KAAK,CAAC,SAAS,GAAG,KAAK,CAAA;aACxB;QACH,CAAC,CAAA;IACH,CAAC,CAAC,EAAE,CAAA;IAEJ,SAAS,OAAO,CAAC,UAAkB;QACjC,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE;YACpC,KAAK,IAAI,UAAU,CAAA;SACpB;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;YAC5C,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAA;YACpG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAA;YACrC,WAAW,GAAG,IAAI,CAAA;SACnB;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAA;YACnG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAA;SACzB;IACH,CAAC;IAED,SAAS,QAAQ,CAAC,UAAkB;QAClC,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,EAAE;YACpC,KAAK,IAAI,UAAU,CAAA;SACpB;aAAM,IAAI,KAAK,CAAC,MAAM,CAAC,oBAAoB,EAAE;YAC5C,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,GAAG,UAAU,CAAC,CAAC,CAAA;YACpG,KAAK,CAAC,MAAM,CAAC,sBAAsB,EAAE,CAAA;YACrC,WAAW,GAAG,IAAI,CAAA;SACnB;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAA;YACnG,KAAK,CAAC,UAAU,GAAG,KAAK,CAAA;SACzB;IACH,CAAC;IAED,EAAE;IACF,4CAA4C;IAC5C,EAAE;IAEF,SAAS,qBAAqB,CAAC,KAAgB;QAC7C,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC;IAED,SAAS,oBAAoB,CAAC,KAAgB;QAC5C,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,SAAS,kBAAkB,CAAC,KAAgB;QAC1C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC;IAED,SAAS,oBAAoB,CAAC,KAAgB;QAC5C,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAC3C,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAE9C,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,CAAA;QAE7B,uDAAuD;QACvD,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAA;QAEtF,iFAAiF;QACjF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAA;QAErF,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE3B,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,SAAS,mBAAmB,CAAC,KAAgB;QAC3C,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAE1C,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAE3C,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;YACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;SACxB;aAAM,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;YAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;SACzB;QAED,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEzB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,SAAS,iBAAiB,CAAC,KAAgB;QACzC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAA;QAExC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAErC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAE3B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAErB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,SAAS,aAAa,CAAC,KAAiB,IAAG,CAAC;IAE5C,SAAS,aAAa,CAAC,KAAoB;QACzC,QAAQ,KAAK,CAAC,OAAO,EAAE;YACrB,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE;gBAChB,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAA;gBACzB,KAAK,CAAC,MAAM,EAAE,CAAA;gBACd,MAAK;YAEP,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM;gBACpB,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;gBAC1B,KAAK,CAAC,MAAM,EAAE,CAAA;gBACd,MAAK;YAEP,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI;gBAClB,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;gBACzB,KAAK,CAAC,MAAM,EAAE,CAAA;gBACd,MAAK;YAEP,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK;gBACnB,GAAG,CAAC,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;gBAC1B,KAAK,CAAC,MAAM,EAAE,CAAA;gBACd,MAAK;SACR;IACH,CAAC;IAED,SAAS,sBAAsB,CAAC,KAAiB;QAC/C,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACnE,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAEnE,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACvB,CAAC;IAED,SAAS,qBAAqB,CAAC,KAAiB;QAC9C,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACxD,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAExD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QAE3C,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IAC7B,CAAC;IAED,SAAS,mBAAmB,CAAC,KAAiB;QAC5C,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACnE,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAEnE,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACpB,CAAC;IAED,SAAS,qBAAqB,CAAC,KAAiB;QAC9C,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACnE,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAEnE,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QACnB,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;QAE9C,IAAI,OAAO,GAAG,KAAK,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAA;QAEnF,uDAAuD;QACvD,UAAU,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAA;QACrF,uFAAuF;QAEvF,iFAAiF;QACjF,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,CAAC,CAAA;QACpF,sFAAsF;QAEtF,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAE3B,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,SAAS,oBAAoB,CAAC,KAAiB;QAC7C,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACxD,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAExD,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAA;QAE3C,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QAEzB,UAAU,CAAC,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;QAE3C,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;YACpB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;SACzB;aAAM,IAAI,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE;YAC3B,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;SACxB;QAED,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAEzB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,SAAS,kBAAkB,CAAC,KAAiB;QAC3C,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QACnE,IAAI,CAAC,GAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAS,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAA;QAEnE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;QAEhB,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAErC,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;QAE3B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAErB,KAAK,CAAC,MAAM,EAAE,CAAA;IAChB,CAAC;IAED,SAAS,cAAc,CAAC,KAAiB,IAAG,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAA;AACf,CAAC,CAAA;AAED,aAAa,CAAC,SAAS,GAAG,EAAE,CAAA,CAAC,mDAAmD;AAChF,aAAa,CAAC,SAAS,CAAC,WAAW,GAAG,aAAa,CAAA;AACnD,MAAM,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,EAAE;IAC/C,MAAM,EAAE;QACN,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;YACxE,OAAO,IAAI,CAAC,MAAM,CAAA;QACpB,CAAC;KACF;IAED,yBAAyB;IAEzB,MAAM,EAAE;QACN,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;YAC1F,OAAO,CAAC,IAAI,CAAC,UAAU,CAAA;QACzB,CAAC;QAED,GAAG,EAAE,UAAU,KAAK;YAClB,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;YAC1F,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAA;QAC1B,CAAC;KACF;IAED,QAAQ,EAAE;QACR,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;YAC9F,OAAO,CAAC,IAAI,CAAC,YAAY,CAAA;QAC3B,CAAC;QAED,GAAG,EAAE,UAAU,KAAK;YAClB,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;YAC9F,IAAI,CAAC,YAAY,GAAG,CAAC,KAAK,CAAA;QAC5B,CAAC;KACF;IAED,KAAK,EAAE;QACL,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;YACxF,OAAO,CAAC,IAAI,CAAC,SAAS,CAAA;QACxB,CAAC;QAED,GAAG,EAAE,UAAU,KAAK;YAClB,OAAO,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;YACxF,IAAI,CAAC,SAAS,GAAG,CAAC,KAAK,CAAA;QACzB,CAAC;KACF;IAED,MAAM,EAAE;QACN,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;YAC1F,OAAO,CAAC,IAAI,CAAC,UAAU,CAAA;QACzB,CAAC;QAED,GAAG,EAAE,UAAU,KAAK;YAClB,OAAO,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAA;YAC1F,IAAI,CAAC,UAAU,GAAG,CAAC,KAAK,CAAA;QAC1B,CAAC;KACF;IAED,YAAY,EAAE;QACZ,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAA;YACnG,OAAO,CAAC,IAAI,CAAC,aAAa,CAAA;QAC5B,CAAC;QAED,GAAG,EAAE,UAAU,KAAK;YAClB,OAAO,CAAC,IAAI,CAAC,qFAAqF,CAAC,CAAA;YACnG,IAAI,CAAC,aAAa,GAAG,CAAC,KAAK,CAAA;QAC7B,CAAC;KACF;IAED,oBAAoB,EAAE;QACpB,GAAG,EAAE;YACH,OAAO,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAA;YACxG,OAAO,IAAI,CAAC,aAAa,CAAA;QAC3B,CAAC;QAED,GAAG,EAAE,UAAU,KAAK;YAClB,OAAO,CAAC,IAAI,CAAC,0FAA0F,CAAC,CAAA;YACxG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAA;QAC5B,CAAC;KACF;CACF,CAAC,CAAA;AAEF,eAAe,aAAa,CAAA","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one finger move\n// Zoom - middle mouse, or mousewheel / touch: two finger spread or squish\n// Pan - right mouse, or arrow keys / touch: three finger swipe\nimport { Component } from '@hatiolab/things-scene'\nimport * as THREE from 'three'\n\nvar ThreeControls = function (this: any, object: THREE.Camera, component: Component) {\n this.object = object\n\n this.component = component\n\n // Set to false to disable this control\n this.enabled = true\n\n // \"target\" sets the location of focus, where the object orbits around\n this.target = new THREE.Vector3()\n\n // How far you can dolly in and out ( PerspectiveCamera only )\n this.minDistance = 0\n this.maxDistance = Infinity\n\n // How far you can zoom in and out ( OrthographicCamera only )\n this.minZoom = 0\n this.maxZoom = Infinity\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n this.minPolarAngle = 0 // radians\n this.maxPolarAngle = Math.PI // radians\n\n // How far you can orbit horizontally, upper and lower limits.\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n this.minAzimuthAngle = -Infinity // radians\n this.maxAzimuthAngle = Infinity // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n this.enableDamping = false\n this.dampingFactor = 0.25\n\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n this.enableZoom = true\n this.zoomSpeed = 1.0\n\n // Set to false to disable rotating\n this.enableRotate = true\n this.rotateSpeed = 1.0\n\n // Set to false to disable panning\n this.enablePan = true\n this.keyPanSpeed = 7.0 // pixels moved per arrow key push\n\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n this.autoRotate = this.component.model.autoRotate || false\n this.autoRotateSpeed = this.component.model.rotationSpeed || 2.0 // 30 seconds per round when fps is 60\n\n // Set to false to disable use of the keys\n this.enableKeys = true\n\n // The four arrow keys\n this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 }\n\n // Mouse buttons\n this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT }\n\n // for reset\n this.target0 = this.target.clone()\n this.position0 = this.object.position.clone()\n this.zoom0 = this.object.zoom\n\n // flags\n this.cameraChanged = false\n\n //\n // public methods\n //\n\n this.getPolarAngle = function () {\n return spherical.phi\n }\n\n this.getAzimuthalAngle = function () {\n return spherical.theta\n }\n\n this.saveState = function () {\n scope.target0.copy(scope.target)\n scope.position0.copy(scope.object.position)\n scope.zoom0 = scope.object.zoom\n }\n\n this.reset = function () {\n scope.target.copy(scope.target0)\n scope.object.position.copy(scope.position0)\n scope.object.zoom = scope.zoom0\n\n scope.object.updateProjectionMatrix()\n // scope.dispatchEvent( changeEvent );\n\n scope.update()\n\n state = STATE.NONE\n }\n\n // this method is exposed, but perhaps it would be better if we can make it private...\n this.update = (function () {\n var offset = new THREE.Vector3()\n\n // so camera.up is the orbit axis\n var quat = new THREE.Quaternion().setFromUnitVectors(object.up, new THREE.Vector3(0, 1, 0))\n var quatInverse = quat.clone().invert()\n\n var lastPosition = new THREE.Vector3()\n var lastQuaternion = new THREE.Quaternion()\n\n return function update() {\n // if (!(scope.cameraChanged || scope.autoRotate))\n // return false;\n\n var position = scope.object.position\n\n offset.copy(position).sub(scope.target)\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion(quat)\n\n // angle from z-axis around y-axis\n spherical.setFromVector3(offset)\n\n if (scope.autoRotate && state === STATE.NONE) {\n // theta = getAutoRotationAngle();\n // thetaDelta = - getAutoRotationAngle();\n // theta = 0;\n\n rotateLeft(getAutoRotationAngle())\n // spherical.theta = getAutoRotationAngle();\n }\n\n spherical.theta += sphericalDelta.theta\n spherical.phi += sphericalDelta.phi\n\n // restrict theta to be between desired limits\n spherical.theta = Math.max(scope.minAzimuthAngle, Math.min(scope.maxAzimuthAngle, spherical.theta))\n\n // restrict phi to be between desired limits\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi))\n\n spherical.makeSafe()\n\n spherical.radius *= scale\n\n // restrict radius to be between desired limits\n spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius))\n\n // move target to panned location\n scope.target.add(panOffset)\n\n offset.setFromSpherical(spherical)\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion(quatInverse)\n\n position.copy(scope.target).add(offset)\n\n scope.object.lookAt(scope.target)\n\n if (scope.enableDamping === true) {\n sphericalDelta.theta *= 1 - scope.dampingFactor\n sphericalDelta.phi *= 1 - scope.dampingFactor\n } else {\n sphericalDelta.set(0, 0, 0)\n }\n\n scale = 1\n panOffset.set(0, 0, 0)\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n // if ((scope.cameraChanged || zoomChanged) && (\n // lastPosition.distanceToSquared(scope.object.position) > EPS ||\n // 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS)) {\n if (\n zoomChanged ||\n lastPosition.distanceToSquared(scope.object.position) > EPS ||\n 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS\n ) {\n lastPosition.copy(scope.object.position)\n lastQuaternion.copy(scope.object.quaternion)\n\n scope.component.invalidate()\n scope.cameraChanged = false\n zoomChanged = false\n\n return true\n }\n\n scope.component.invalidate()\n return false\n }\n })()\n\n this.dispose = function () {}\n\n //\n // event handlers - FSM: listen for events and reset state\n //\n\n this.onMouseDown = function (event: MouseEvent) {}\n\n this.onMouseMove = function (event: MouseEvent) {}\n\n this.onMouseUp = function (event: MouseEvent) {}\n\n this.onDragStart = function (event: DragEvent) {\n if (this.enabled === false || this.enableRotate === false) return\n\n scope.component.stop()\n this.autoRotate = false\n\n if (event.altKey === true) state = STATE.PAN\n else state = STATE.ROTATE\n\n switch (state) {\n case STATE.ROTATE:\n if (this.enableRotate) handleDragStartRotate(event)\n break\n\n case STATE.DOLLY:\n if (this.enableZoom) handleDragStartDolly(event)\n break\n\n case STATE.PAN:\n if (this.enablePan) handleDragStartPan(event)\n break\n }\n }\n\n this.onDragMove = function (event: DragEvent) {\n if (!this.enabled) return\n\n if (event.altKey === true) state = STATE.PAN\n else state = STATE.ROTATE\n\n switch (state) {\n case STATE.ROTATE:\n if (this.enableRotate) handleDragMoveRotate(event)\n break\n\n case STATE.DOLLY:\n if (this.enableZoom) handleDragMoveDolly(event)\n break\n\n case STATE.PAN:\n if (this.enablePan) handleDragMovePan(event)\n break\n }\n }\n\n this.onDragEnd = function (event: DragEvent) {\n if (this.enabled === false || this.enableRotate === false) return\n\n state = STATE.NONE\n\n START_TIME = null\n this.autoRotate = this.component.model.autoRotate || false\n\n scope.component.threed_animate()\n // scope.update();\n }\n\n this.onKeyDown = function (event: KeyboardEvent) {\n if (this.enabled === false || this.enableKeys === false || this.enablePan === false) return\n\n handleKeyDown(event)\n }\n\n this.onTouchStart = function (event: TouchEvent) {\n if (this.enabled === false) return\n\n switch (event.touches.length) {\n case 1: // one-fingered touch: rotate\n if (this.enableRotate === false) return\n handleTouchStartRotate(event)\n state = STATE.TOUCH_ROTATE\n break\n\n case 2: // two-fingered touch: pan\n this.lastScale = (event as any).scale || 1\n if (this.enablePan === false) return\n handleTouchStartPan(event)\n state = STATE.TOUCH_PAN\n break\n // case 2: // two-fingered touch: dolly\n // if ( this.enableZoom === false ) return;\n // handleTouchStartDolly( event );\n // state = STATE.TOUCH_DOLLY;\n // break;\n\n // case 3: // three-fingered touch: pan\n // if ( this.enablePan === false ) return;\n // handleTouchStartPan( event );\n // state = STATE.TOUCH_PAN;\n // break;\n\n default:\n state = STATE.NONE\n }\n }\n\n this.onTouchMove = function (event: TouchEvent) {\n if (this.enabled === false) return\n\n switch (event.touches.length) {\n case 1: // one-fingered touch: rotate\n if (this.enableRotate === false) return\n if (state !== STATE.TOUCH_ROTATE) return // is this needed?...\n handleTouchMoveRotate(event)\n break\n case 2: // two-fingered touch: pan\n if (Math.abs(this.lastScale - (event as any).scale || 1) > 0.05) {\n return\n }\n if (this.enablePan === false) return\n if (state !== STATE.TOUCH_PAN) return // is this needed?...\n handleTouchMovePan(event)\n break\n // case 2: // two-fingered touch: dolly\n // if ( this.enableZoom === false ) return;\n // if ( state !== STATE.TOUCH_DOLLY ) return; // is this needed?...\n // handleTouchMoveDolly( event );\n // break;\n // case 3: // three-fingered touch: pan\n // if ( this.enablePan === false ) return;\n // if ( state !== STATE.TOUCH_PAN ) return; // is this needed?...\n // handleTouchMovePan( event );\n // break;\n default:\n state = STATE.NONE\n }\n }\n\n this.onTouchEnd = function (event: TouchEvent) {\n if (this.enabled === false) return\n this.lastScale = 1\n\n handleTouchEnd(event)\n // this.dispatchEvent( endEvent );\n state = STATE.NONE\n }\n\n this.doAutoRotate = function (autoRotate: boolean) {\n START_TIME = null\n this.cameraChanged = true\n this.autoRotate = autoRotate\n this.update()\n }\n\n //\n // internals\n //\n\n var scope = this\n\n var changeEvent = { type: 'change' }\n var startEvent = { type: 'start' }\n var endEvent = { type: 'end' }\n\n var STATE = { NONE: -1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY: 4, TOUCH_PAN: 5 }\n\n var state = STATE.NONE\n\n var EPS = 0.000001\n\n // current position in spherical coordinates\n var spherical = new THREE.Spherical()\n var sphericalDelta = new THREE.Spherical()\n\n var scale = 1\n var panOffset = new THREE.Vector3()\n var zoomChanged = false\n\n var rotateStart = new THREE.Vector2()\n var rotateEnd = new THREE.Vector2()\n var rotateDelta = new THREE.Vector2()\n\n var panStart = new THREE.Vector2()\n var panEnd = new THREE.Vector2()\n var panDelta = new THREE.Vector2()\n\n var dollyStart = new THREE.Vector2()\n var dollyEnd = new THREE.Vector2()\n var dollyDelta = new THREE.Vector2()\n\n var START_TIME: number | null = null\n var offsetTheta = 0\n\n function getAutoRotationAngle() {\n if (!START_TIME) {\n START_TIME = performance.now()\n offsetTheta = spherical.theta\n return 0\n }\n\n var lastTime = performance.now() - START_TIME\n var progress = lastTime / (60000 / scope.autoRotateSpeed)\n\n // return - 2 * Math.PI * progress;\n return 2 * Math.PI * progress + spherical.theta - offsetTheta\n // return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n }\n\n function getZoomScale() {\n return Math.pow(0.95, scope.zoomSpeed)\n }\n\n function rotateLeft(angle: number) {\n sphericalDelta.theta -= angle\n }\n\n function rotateUp(angle: number) {\n sphericalDelta.phi -= angle\n }\n\n var panLeft = (function () {\n var v = new THREE.Vector3()\n\n return function panLeft(distance: number, objectMatrix: any) {\n v.setFromMatrixColumn(objectMatrix, 0) // get X column of objectMatrix\n v.multiplyScalar(-distance)\n\n panOffset.add(v)\n }\n })()\n\n var panUp = (function () {\n var v = new THREE.Vector3()\n\n return function panUp(distance: number, objectMatrix: any) {\n v.setFromMatrixColumn(objectMatrix, 1) // get Y column of objectMatrix\n v.multiplyScalar(distance)\n\n panOffset.add(v)\n }\n })()\n\n // deltaX and deltaY are in pixels; right and down are positive\n var pan = (function () {\n var offset = new THREE.Vector3()\n\n return function pan(deltaX: number, deltaY: number) {\n var element = scope.component === document ? scope.component.body : scope.component\n\n if (scope.object.isPerspectiveCamera) {\n // perspective\n var position = scope.object.position\n offset.copy(position).sub(scope.target)\n var targetDistance = offset.length()\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan(((scope.object.fov / 2) * Math.PI) / 180.0)\n\n // we actually don't use screenWidth, since perspective camera is fixed to screen height\n panLeft((2 * deltaX * targetDistance) / element.model.height, scope.object.matrix)\n // panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n panUp((2 * deltaY * targetDistance) / element.model.height, scope.object.matrix)\n // panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n } else if (scope.object.isOrthographicCamera) {\n // orthographic\n panLeft(\n (deltaX * (scope.object.right - scope.object.left)) / scope.object.zoom / element.model.width,\n scope.object.matrix\n )\n // panLeft( deltaX * ( scope.object.right - scope.object.left ) / element.clientWidth, scope.object.matrix );\n panUp(\n (deltaY * (scope.object.top - scope.object.bottom)) / scope.object.zoom / element.model.height,\n scope.object.matrix\n )\n // panUp( deltaY * ( scope.object.top - scope.object.bottom ) / element.clientHeight, scope.object.matrix );\n } else {\n // camera neither orthographic nor perspective\n console.warn('WARNING: ThreeControls.js encountered an unknown camera type - pan disabled.')\n scope.enablePan = false\n }\n }\n })()\n\n function dollyIn(dollyScale: number) {\n if (scope.object.isPerspectiveCamera) {\n scale /= dollyScale\n } else if (scope.object.isOrthographicCamera) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale))\n scope.object.updateProjectionMatrix()\n zoomChanged = true\n } else {\n console.warn('WARNING: ThreeControls.js encountered an unknown camera type - dolly/zoom disabled.')\n scope.enableZoom = false\n }\n }\n\n function dollyOut(dollyScale: number) {\n if (scope.object.isPerspectiveCamera) {\n scale *= dollyScale\n } else if (scope.object.isOrthographicCamera) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale))\n scope.object.updateProjectionMatrix()\n zoomChanged = true\n } else {\n console.warn('WARNING: ThreeControls.js encountered an unknown camera type - dolly/zoom disabled.')\n scope.enableZoom = false\n }\n }\n\n //\n // event callbacks - update the object state\n //\n\n function handleDragStartRotate(event: DragEvent) {\n rotateStart.set(event.offsetX, event.offsetY)\n }\n\n function handleDragStartDolly(event: DragEvent) {\n dollyStart.set(event.offsetX, event.offsetY)\n }\n\n function handleDragStartPan(event: DragEvent) {\n panStart.set(event.offsetX, event.offsetY)\n }\n\n function handleDragMoveRotate(event: DragEvent) {\n rotateEnd.set(event.offsetX, event.offsetY)\n rotateDelta.subVectors(rotateEnd, rotateStart)\n\n var element = scope.component\n\n // rotating across whole screen goes 360 degrees around\n rotateLeft(((2 * Math.PI * rotateDelta.x) / element.get('width')) * scope.rotateSpeed)\n\n // rotating up and down along whole screen attempts to go 360, but limited to 180\n rotateUp(((2 * Math.PI * rotateDelta.y) / element.get('height')) * scope.rotateSpeed)\n\n rotateStart.copy(rotateEnd)\n\n scope.update()\n }\n\n function handleDragMoveDolly(event: DragEvent) {\n dollyEnd.set(event.offsetX, event.offsetY)\n\n dollyDelta.subVectors(dollyEnd, dollyStart)\n\n if (dollyDelta.y > 0) {\n dollyIn(getZoomScale())\n } else if (dollyDelta.y < 0) {\n dollyOut(getZoomScale())\n }\n\n dollyStart.copy(dollyEnd)\n\n scope.update()\n }\n\n function handleDragMovePan(event: DragEvent) {\n panEnd.set(event.offsetX, event.offsetY)\n\n panDelta.subVectors(panEnd, panStart)\n\n pan(panDelta.x, panDelta.y)\n\n panStart.copy(panEnd)\n\n scope.update()\n }\n\n function handleMouseUp(event: MouseEvent) {}\n\n function handleKeyDown(event: KeyboardEvent) {\n switch (event.keyCode) {\n case scope.keys.UP:\n pan(0, scope.keyPanSpeed)\n scope.update()\n break\n\n case scope.keys.BOTTOM:\n pan(0, -scope.keyPanSpeed)\n scope.update()\n break\n\n case scope.keys.LEFT:\n pan(scope.keyPanSpeed, 0)\n scope.update()\n break\n\n case scope.keys.RIGHT:\n pan(-scope.keyPanSpeed, 0)\n scope.update()\n break\n }\n }\n\n function handleTouchStartRotate(event: TouchEvent) {\n var x = (event.touches[0] as any).offsetX || event.touches[0].pageX\n var y = (event.touches[0] as any).offsetY || event.touches[0].pageY\n\n rotateStart.set(x, y)\n }\n\n function handleTouchStartDolly(event: TouchEvent) {\n var dx = event.touches[0].pageX - event.touches[1].pageX\n var dy = event.touches[0].pageY - event.touches[1].pageY\n\n var distance = Math.sqrt(dx * dx + dy * dy)\n\n dollyStart.set(0, distance)\n }\n\n function handleTouchStartPan(event: TouchEvent) {\n var x = (event.touches[0] as any).offsetX || event.touches[0].pageX\n var y = (event.touches[0] as any).offsetY || event.touches[0].pageY\n\n panStart.set(x, y)\n }\n\n function handleTouchMoveRotate(event: TouchEvent) {\n var x = (event.touches[0] as any).offsetX || event.touches[0].pageX\n var y = (event.touches[0] as any).offsetY || event.touches[0].pageY\n\n rotateEnd.set(x, y)\n rotateDelta.subVectors(rotateEnd, rotateStart)\n\n var element = scope.component === document ? scope.component.body : scope.component\n\n // rotating across whole screen goes 360 degrees around\n rotateLeft(((2 * Math.PI * rotateDelta.x) / element.model.width) * scope.rotateSpeed)\n // rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientWidth * scope.rotateSpeed );\n\n // rotating up and down along whole screen attempts to go 360, but limited to 180\n rotateUp(((2 * Math.PI * rotateDelta.y) / element.model.height) * scope.rotateSpeed)\n // rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight * scope.rotateSpeed );\n\n rotateStart.copy(rotateEnd)\n\n scope.update()\n }\n\n function handleTouchMoveDolly(event: TouchEvent) {\n var dx = event.touches[0].pageX - event.touches[1].pageX\n var dy = event.touches[0].pageY - event.touches[1].pageY\n\n var distance = Math.sqrt(dx * dx + dy * dy)\n\n dollyEnd.set(0, distance)\n\n dollyDelta.subVectors(dollyEnd, dollyStart)\n\n if (dollyDelta.y > 0) {\n dollyOut(getZoomScale())\n } else if (dollyDelta.y < 0) {\n dollyIn(getZoomScale())\n }\n\n dollyStart.copy(dollyEnd)\n\n scope.update()\n }\n\n function handleTouchMovePan(event: TouchEvent) {\n var x = (event.touches[0] as any).offsetX || event.touches[0].pageX\n var y = (event.touches[0] as any).offsetY || event.touches[0].pageY\n\n panEnd.set(x, y)\n\n panDelta.subVectors(panEnd, panStart)\n\n pan(panDelta.x, panDelta.y)\n\n panStart.copy(panEnd)\n\n scope.update()\n }\n\n function handleTouchEnd(event: TouchEvent) {}\n\n this.update()\n}\n\nThreeControls.prototype = {} //Object.create( THREE.EventDispatcher.prototype );\nThreeControls.prototype.constructor = ThreeControls\nObject.defineProperties(ThreeControls.prototype, {\n center: {\n get: function () {\n console.warn('THREE.OrbitControls: .center has been renamed to .target')\n return this.target\n }\n },\n\n // backward compatibility\n\n noZoom: {\n get: function () {\n console.warn('THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.')\n return !this.enableZoom\n },\n\n set: function (value) {\n console.warn('THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.')\n this.enableZoom = !value\n }\n },\n\n noRotate: {\n get: function () {\n console.warn('THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.')\n return !this.enableRotate\n },\n\n set: function (value) {\n console.warn('THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.')\n this.enableRotate = !value\n }\n },\n\n noPan: {\n get: function () {\n console.warn('THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.')\n return !this.enablePan\n },\n\n set: function (value) {\n console.warn('THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.')\n this.enablePan = !value\n }\n },\n\n noKeys: {\n get: function () {\n console.warn('THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.')\n return !this.enableKeys\n },\n\n set: function (value) {\n console.warn('THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.')\n this.enableKeys = !value\n }\n },\n\n staticMoving: {\n get: function () {\n console.warn('THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.')\n return !this.enableDamping\n },\n\n set: function (value) {\n console.warn('THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.')\n this.enableDamping = !value\n }\n },\n\n dynamicDampingFactor: {\n get: function () {\n console.warn('THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.')\n return this.dampingFactor\n },\n\n set: function (value) {\n console.warn('THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.')\n this.dampingFactor = value\n }\n }\n})\n\nexport default ThreeControls\n"]}
@@ -0,0 +1,2 @@
1
+ export declare var PIXEL_RATIO: number;
2
+ export declare function createCanvas(width: number, height: number): HTMLCanvasElement;
@@ -0,0 +1,12 @@
1
+ import * as THREE from 'three';
2
+ import RealObjectMesh from './real-object-mesh';
3
+ export default class RealObjectCamera extends RealObjectMesh {
4
+ protected _camera?: THREE.PerspectiveCamera;
5
+ update(): void;
6
+ get camera(): THREE.PerspectiveCamera;
7
+ createCamera(): THREE.PerspectiveCamera;
8
+ updateCamera(): void;
9
+ build(): void;
10
+ clear(): THREE.Mesh<THREE.BufferGeometry, THREE.Material | THREE.Material[]>;
11
+ buildGeometry(): THREE.SphereGeometry;
12
+ }
@@ -0,0 +1,49 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import * as THREE from 'three';
5
+ import RealObjectMesh from './real-object-mesh';
6
+ import { UNIT_DIMENSION } from './common';
7
+ const DEFAULT = {
8
+ far: 100000,
9
+ fov: 80,
10
+ near: 1,
11
+ zoom: 1
12
+ };
13
+ export default class RealObjectCamera extends RealObjectMesh {
14
+ update() {
15
+ super.update();
16
+ this.updateCamera();
17
+ }
18
+ get camera() {
19
+ if (!this._camera) {
20
+ this._camera = this.createCamera();
21
+ this.updateCamera();
22
+ }
23
+ return this._camera;
24
+ }
25
+ createCamera() {
26
+ return new THREE.PerspectiveCamera();
27
+ }
28
+ updateCamera() {
29
+ var { near = DEFAULT.near, far = DEFAULT.far, fov = DEFAULT.fov, zoom = DEFAULT.zoom } = this.component.state;
30
+ this.camera.far = far;
31
+ this.camera.fov = fov;
32
+ this.camera.near = near;
33
+ this.camera.zoom = zoom;
34
+ }
35
+ build() {
36
+ super.build();
37
+ this.object3d.add(this.camera);
38
+ }
39
+ clear() {
40
+ delete this._camera;
41
+ return super.clear();
42
+ }
43
+ buildGeometry() {
44
+ var { width = 1, height = 1, depth = 1 } = this.component.state.dimension || UNIT_DIMENSION;
45
+ var radius = Math.min(width, height, depth) / 2;
46
+ return new THREE.SphereGeometry(radius, 32, 32);
47
+ }
48
+ }
49
+ //# sourceMappingURL=real-object-camera-meshed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-object-camera-meshed.js","sourceRoot":"","sources":["../../src/threed/real-object-camera-meshed.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,cAAc,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAEzC,MAAM,OAAO,GAAG;IACd,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;CACR,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,cAAc;IAG1D,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAA;QAEd,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAED,IAAI,MAAM;QACR,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,EAAE,CAAA;YAClC,IAAI,CAAC,YAAY,EAAE,CAAA;SACpB;QAED,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,YAAY;QACV,OAAO,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAA;IACtC,CAAC;IAED,YAAY;QACV,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAE7G,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;QACrB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,GAAG,CAAA;QACrB,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAA;IACzB,CAAC;IAED,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;QAEb,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAChC,CAAC;IAED,KAAK;QACH,OAAO,IAAI,CAAC,OAAO,CAAA;QAEnB,OAAO,KAAK,CAAC,KAAK,EAAE,CAAA;IACtB,CAAC;IAED,aAAa;QACX,IAAI,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,IAAI,cAAc,CAAA;QAE3F,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAA;QAE/C,OAAO,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;IACjD,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\n\nimport RealObjectMesh from './real-object-mesh'\nimport { UNIT_DIMENSION } from './common'\n\nconst DEFAULT = {\n far: 100000,\n fov: 80,\n near: 1,\n zoom: 1\n}\n\nexport default class RealObjectCamera extends RealObjectMesh {\n protected _camera?: THREE.PerspectiveCamera\n\n update() {\n super.update()\n\n this.updateCamera()\n }\n\n get camera(): THREE.PerspectiveCamera {\n if (!this._camera) {\n this._camera = this.createCamera()\n this.updateCamera()\n }\n\n return this._camera\n }\n\n createCamera() {\n return new THREE.PerspectiveCamera()\n }\n\n updateCamera() {\n var { near = DEFAULT.near, far = DEFAULT.far, fov = DEFAULT.fov, zoom = DEFAULT.zoom } = this.component.state\n\n this.camera.far = far\n this.camera.fov = fov\n this.camera.near = near\n this.camera.zoom = zoom\n }\n\n build() {\n super.build()\n\n this.object3d.add(this.camera)\n }\n\n clear() {\n delete this._camera\n\n return super.clear()\n }\n\n buildGeometry() {\n var { width = 1, height = 1, depth = 1 } = this.component.state.dimension || UNIT_DIMENSION\n\n var radius = Math.min(width, height, depth) / 2\n\n return new THREE.SphereGeometry(radius, 32, 32)\n }\n}\n"]}
@@ -0,0 +1,9 @@
1
+ import * as THREE from 'three';
2
+ import RealObject from './real-object';
3
+ export default class RealObjectCamera extends RealObject<THREE.PerspectiveCamera> {
4
+ protected _camera?: THREE.PerspectiveCamera;
5
+ build(): void;
6
+ update(): void;
7
+ protected getObject3dInstance(): THREE.PerspectiveCamera;
8
+ updateCamera(): void;
9
+ }
@@ -0,0 +1,31 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import * as THREE from 'three';
5
+ import RealObject from './real-object';
6
+ const DEFAULT = {
7
+ far: 100000,
8
+ fov: 80,
9
+ near: 1,
10
+ zoom: 1
11
+ };
12
+ export default class RealObjectCamera extends RealObject {
13
+ build() {
14
+ super.build();
15
+ }
16
+ update() {
17
+ super.update();
18
+ this.updateCamera();
19
+ }
20
+ getObject3dInstance() {
21
+ return new THREE.PerspectiveCamera();
22
+ }
23
+ updateCamera() {
24
+ var { near = DEFAULT.near, far = DEFAULT.far, fov = DEFAULT.fov, zoom = DEFAULT.zoom } = this.component.state;
25
+ this.object3d.far = far;
26
+ this.object3d.fov = fov;
27
+ this.object3d.near = near;
28
+ this.object3d.zoom = zoom;
29
+ }
30
+ }
31
+ //# sourceMappingURL=real-object-camera.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-object-camera.js","sourceRoot":"","sources":["../../src/threed/real-object-camera.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,OAAO,GAAG;IACd,GAAG,EAAE,MAAM;IACX,GAAG,EAAE,EAAE;IACP,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;CACR,CAAA;AAED,MAAM,CAAC,OAAO,OAAO,gBAAiB,SAAQ,UAAmC;IAG/E,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;IAED,MAAM;QACJ,KAAK,CAAC,MAAM,EAAE,CAAA;QAEd,IAAI,CAAC,YAAY,EAAE,CAAA;IACrB,CAAC;IAES,mBAAmB;QAC3B,OAAO,IAAI,KAAK,CAAC,iBAAiB,EAAE,CAAA;IACtC,CAAC;IAED,YAAY;QACV,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAA;QAE7G,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,GAAG,GAAG,GAAG,CAAA;QACvB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;QACzB,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAA;IAC3B,CAAC;CACF","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\n\nimport RealObject from './real-object'\n\nconst DEFAULT = {\n far: 100000,\n fov: 80,\n near: 1,\n zoom: 1\n}\n\nexport default class RealObjectCamera extends RealObject<THREE.PerspectiveCamera> {\n protected _camera?: THREE.PerspectiveCamera\n\n build() {\n super.build()\n }\n\n update() {\n super.update()\n\n this.updateCamera()\n }\n\n protected getObject3dInstance() {\n return new THREE.PerspectiveCamera()\n }\n\n updateCamera() {\n var { near = DEFAULT.near, far = DEFAULT.far, fov = DEFAULT.fov, zoom = DEFAULT.zoom } = this.component.state\n\n this.object3d.far = far\n this.object3d.fov = fov\n this.object3d.near = near\n this.object3d.zoom = zoom\n }\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import * as THREE from 'three';
2
+ import RealObjectMesh from './real-object-mesh';
3
+ import { CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
4
+ export default class RealObjectDomElement extends RealObjectMesh {
5
+ private _cssObject3D?;
6
+ buildGeometry(): THREE.PlaneGeometry;
7
+ buildMaterial(): THREE.MeshBasicMaterial;
8
+ get cssObject3D(): THREE.Object3D;
9
+ buildCSS3DObject(): CSS3DObject;
10
+ /**
11
+ * Component의 상태값의 변화를 Object3D에 반영 - translate, rotation, scale
12
+ */
13
+ updateTransform(): void;
14
+ updatePosition(): void;
15
+ updateRotate(): void;
16
+ updateScale(): void;
17
+ updateDimension(): void;
18
+ updateHidden(): void;
19
+ updateAlpha(): void;
20
+ }
@@ -0,0 +1,78 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import * as THREE from 'three';
5
+ import RealObjectMesh from './real-object-mesh';
6
+ import { CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js';
7
+ import { UNIT_ROTATE, UNIT_SCALE, UNIT_TRANSLATE } from './common';
8
+ export default class RealObjectDomElement extends RealObjectMesh {
9
+ buildGeometry() {
10
+ var { width, height } = this.component.state.dimension;
11
+ return new THREE.PlaneGeometry(width, height);
12
+ }
13
+ buildMaterial() {
14
+ var material = new THREE.MeshBasicMaterial();
15
+ material.color.set('black');
16
+ material.opacity = 0;
17
+ material.side = THREE.DoubleSide;
18
+ material.blending = THREE.NoBlending;
19
+ return material;
20
+ }
21
+ get cssObject3D() {
22
+ if (!this._cssObject3D) {
23
+ this._cssObject3D = this.buildCSS3DObject();
24
+ }
25
+ return this._cssObject3D;
26
+ }
27
+ buildCSS3DObject() {
28
+ //@ts-ignore
29
+ var element = this.component.element;
30
+ var { dimension } = this.component.state;
31
+ element.style.width = dimension.width + 'px';
32
+ element.style.height = dimension.height + 'px';
33
+ return new CSS3DObject(element);
34
+ }
35
+ /**
36
+ * Component의 상태값의 변화를 Object3D에 반영 - translate, rotation, scale
37
+ */
38
+ updateTransform() {
39
+ super.updateTransform();
40
+ var { scale: { x: sx = 1, y: sy = 1, z: sz = 1 } = UNIT_SCALE, translate: { x: tx = 0, y: ty = 0, z: tz = 0 } = UNIT_TRANSLATE, rotate: { x: rx = 0, y: ry = 0, z: rz = 0 } = UNIT_ROTATE } = this.component.state;
41
+ this.cssObject3D.position.set(tx, ty, tz);
42
+ this.cssObject3D.rotation.set(rx, ry, rz);
43
+ this.cssObject3D.scale.set(sx, sy, sz);
44
+ }
45
+ updatePosition() {
46
+ super.updatePosition();
47
+ var { x = 1, y = 1, z = 1 } = this.component.state.translate;
48
+ this.cssObject3D.position.set(x, y, z);
49
+ }
50
+ updateRotate() {
51
+ super.updateRotate();
52
+ var { x = 1, y = 1, z = 1 } = this.component.state.rotate;
53
+ this.cssObject3D.rotation.set(x, y, z);
54
+ }
55
+ updateScale() {
56
+ super.updateScale();
57
+ var { x = 1, y = 1, z = 1 } = this.component.state.scale;
58
+ this.cssObject3D.scale.set(x, y, z);
59
+ }
60
+ updateDimension() {
61
+ super.updateDimension();
62
+ var dimension = this.component.state.dimension;
63
+ this.component.element.style.width = dimension.width + 'px';
64
+ this.component.element.style.height = dimension.height + 'px';
65
+ }
66
+ /* TODO hidden이 동작하지 않는다. 방법을 찾아라. */
67
+ updateHidden() {
68
+ super.updateHidden();
69
+ }
70
+ updateAlpha() {
71
+ // material의 opacity는 항상 0으로 유지되어야 하며,
72
+ // dom element의 opacity에 alpha를 적용해야한다.
73
+ // 하지만, 컬러톤의 반영 외에 transparent 기능은 하지 못하므로, 뒤에 있는 오브젝트를 보여주지 못한다.
74
+ var { alpha = 1 } = this.component.state;
75
+ this.component.element.style.opacity = alpha;
76
+ }
77
+ }
78
+ //# sourceMappingURL=real-object-dom-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-object-dom-element.js","sourceRoot":"","sources":["../../src/threed/real-object-dom-element.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport HTMLOverlayElement from '../components/html-overlay-element'\nimport HTMLOverlayContainer from '../components/html-overlay-container'\n\nimport RealObjectMesh from './real-object-mesh'\nimport { CSS3DObject } from 'three/examples/jsm/renderers/CSS3DRenderer.js'\nimport { UNIT_ROTATE, UNIT_SCALE, UNIT_TRANSLATE } from './common'\n\nexport default class RealObjectDomElement extends RealObjectMesh {\n private _cssObject3D?: THREE.Object3D\n\n buildGeometry() {\n var { width, height } = this.component.state.dimension\n\n return new THREE.PlaneGeometry(width, height)\n }\n\n buildMaterial() /* : THREE.MeshMaterialType | THREE.MeshMaterialType[] */ {\n var material = new THREE.MeshBasicMaterial()\n\n material.color.set('black')\n material.opacity = 0\n material.side = THREE.DoubleSide\n material.blending = THREE.NoBlending\n\n return material\n }\n\n get cssObject3D(): THREE.Object3D {\n if (!this._cssObject3D) {\n this._cssObject3D = this.buildCSS3DObject()\n }\n return this._cssObject3D\n }\n\n buildCSS3DObject() {\n //@ts-ignore\n var element = (this.component as HTMLOverlayElement | HTMLOverlayContainer).element\n\n var { dimension } = this.component.state\n\n element.style.width = dimension.width + 'px'\n element.style.height = dimension.height + 'px'\n\n return new CSS3DObject(element)\n }\n\n /**\n * Component의 상태값의 변화를 Object3D에 반영 - translate, rotation, scale\n */\n public updateTransform() {\n super.updateTransform()\n\n var {\n scale: { x: sx = 1, y: sy = 1, z: sz = 1 } = UNIT_SCALE,\n translate: { x: tx = 0, y: ty = 0, z: tz = 0 } = UNIT_TRANSLATE,\n rotate: { x: rx = 0, y: ry = 0, z: rz = 0 } = UNIT_ROTATE\n } = this.component.state\n\n this.cssObject3D.position.set(tx, ty, tz)\n this.cssObject3D.rotation.set(rx, ry, rz)\n this.cssObject3D.scale.set(sx, sy, sz)\n }\n\n updatePosition() {\n super.updatePosition()\n\n var { x = 1, y = 1, z = 1 } = this.component.state.translate\n this.cssObject3D.position.set(x, y, z)\n }\n\n updateRotate() {\n super.updateRotate()\n\n var { x = 1, y = 1, z = 1 } = this.component.state.rotate\n this.cssObject3D.rotation.set(x, y, z)\n }\n\n updateScale() {\n super.updateScale()\n\n var { x = 1, y = 1, z = 1 } = this.component.state.scale\n this.cssObject3D.scale.set(x, y, z)\n }\n\n updateDimension() {\n super.updateDimension()\n\n var dimension: any = this.component.state.dimension\n\n //@ts-ignore\n ;(this.component as HTMLOverlayElement | HTMLOverlayContainer).element.style.width = dimension.width + 'px'\n //@ts-ignore\n ;(this.component as HTMLOverlayElement | HTMLOverlayContainer).element.style.height = dimension.height + 'px'\n }\n\n /* TODO hidden이 동작하지 않는다. 방법을 찾아라. */\n updateHidden() {\n super.updateHidden()\n }\n\n updateAlpha() {\n // material의 opacity는 항상 0으로 유지되어야 하며,\n // dom element의 opacity에 alpha를 적용해야한다.\n // 하지만, 컬러톤의 반영 외에 transparent 기능은 하지 못하므로, 뒤에 있는 오브젝트를 보여주지 못한다.\n var { alpha = 1 } = this.component.state\n\n //@ts-ignore\n ;(this.component as HTMLOverlayElement | HTMLOverlayContainer).element.style.opacity = alpha\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import * as THREE from 'three';
2
+ import RealObject from './real-object';
3
+ export default class RealObjectDummy extends RealObject<THREE.Object3D> {
4
+ build(): void;
5
+ update(): void;
6
+ }
@@ -0,0 +1,11 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import RealObject from './real-object';
5
+ export default class RealObjectDummy extends RealObject {
6
+ build() {
7
+ super.build();
8
+ }
9
+ update() { }
10
+ }
11
+ //# sourceMappingURL=real-object-dummy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-object-dummy.js","sourceRoot":"","sources":["../../src/threed/real-object-dummy.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,UAAU,MAAM,eAAe,CAAA;AAEtC,MAAM,CAAC,OAAO,OAAO,eAAgB,SAAQ,UAA0B;IACrE,KAAK;QACH,KAAK,CAAC,KAAK,EAAE,CAAA;IACf,CAAC;IACD,MAAM,KAAI,CAAC;CACZ","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport RealObject from './real-object'\n\nexport default class RealObjectDummy extends RealObject<THREE.Object3D> {\n build() {\n super.build()\n }\n update() {}\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import * as THREE from 'three';
2
+ import RealObject from './real-object';
3
+ import BoundUVGenerator from './utils/bound-uv-generator';
4
+ export default class RealObjectExtrude extends RealObject {
5
+ _boundUVGenerator?: BoundUVGenerator;
6
+ private _mainMesh?;
7
+ private _sideMesh?;
8
+ get shape(): any;
9
+ get sideShape(): null;
10
+ get extrudeSettings(): THREE.ExtrudeGeometryOptions;
11
+ get boundUVGenerator(): BoundUVGenerator;
12
+ build(): void;
13
+ createGeometry(shape: THREE.Shape, extrudeSettings: THREE.ExtrudeGeometryOptions): THREE.BufferGeometry;
14
+ createMaterial(): THREE.MeshLambertMaterial;
15
+ createMesh(geometry: THREE.BufferGeometry, material: THREE.Material): THREE.Mesh<THREE.BufferGeometry, THREE.Material>;
16
+ createSideMesh(geometry: THREE.BufferGeometry, shape: THREE.Shape): THREE.Mesh<THREE.ExtrudeGeometry, THREE.MeshStandardMaterial>;
17
+ createTexture(): THREE.CanvasTexture;
18
+ updateAlpha(): void;
19
+ }
@@ -0,0 +1,171 @@
1
+ /*
2
+ * Copyright © HatioLab Inc. All rights reserved.
3
+ */
4
+ import * as THREE from 'three';
5
+ import tinycolor from 'tinycolor2';
6
+ import RealObject from './real-object';
7
+ import BoundUVGenerator from './utils/bound-uv-generator';
8
+ import { createCanvas } from './html/elements';
9
+ import { applyAlpha } from './common';
10
+ export default class RealObjectExtrude extends RealObject {
11
+ get shape() {
12
+ return null;
13
+ }
14
+ get sideShape() {
15
+ return null;
16
+ }
17
+ get extrudeSettings() {
18
+ var { depth = 1 } = this.component.state;
19
+ return {
20
+ steps: 1,
21
+ depth,
22
+ bevelEnabled: false,
23
+ UVGenerator: this.boundUVGenerator
24
+ };
25
+ }
26
+ get boundUVGenerator() {
27
+ if (!this._boundUVGenerator)
28
+ this._boundUVGenerator = new BoundUVGenerator();
29
+ return this._boundUVGenerator;
30
+ }
31
+ build() {
32
+ super.build();
33
+ var { fillStyle = 0xffffff, strokeStyle = 0x636363, lineWidth = 1, alpha = 1 } = this.component.state;
34
+ // 다각형 그리기
35
+ var shape = this.shape;
36
+ if (!shape) {
37
+ return;
38
+ }
39
+ var extrudeSettings = this.extrudeSettings;
40
+ var boundUVGenerator = this.boundUVGenerator;
41
+ if (boundUVGenerator) {
42
+ boundUVGenerator.setShape({
43
+ extrudedShape: shape,
44
+ extrudedOptions: {
45
+ depth: extrudeSettings.depth
46
+ }
47
+ });
48
+ }
49
+ var geometry = this.createGeometry(shape, extrudeSettings);
50
+ if (fillStyle && fillStyle != 'none') {
51
+ var material = this.createMaterial();
52
+ this._mainMesh = this.createMesh(geometry, material);
53
+ this._mainMesh.castShadow = true;
54
+ this.object3d.add(this._mainMesh);
55
+ }
56
+ if (strokeStyle && strokeStyle != 'transparent' && lineWidth > 0) {
57
+ this._sideMesh = this.createSideMesh(geometry, shape /* FIXME , extrudeSettings */);
58
+ this._sideMesh.castShadow = true;
59
+ this.object3d.add(this._sideMesh);
60
+ }
61
+ }
62
+ createGeometry(shape, extrudeSettings) {
63
+ var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings);
64
+ geometry.center();
65
+ return geometry;
66
+ }
67
+ createMaterial() {
68
+ var { fillStyle = 'black', alpha = 1 } = this.component.state;
69
+ var params = {};
70
+ var opacity = alpha;
71
+ if (typeof fillStyle == 'object' && fillStyle.type == 'pattern' && fillStyle.image) {
72
+ params = {
73
+ map: new THREE.TextureLoader(THREE.DefaultLoadingManager).load(fillStyle.image, texture => {
74
+ texture.minFilter = THREE.LinearFilter;
75
+ texture.repeat.set(1, 1);
76
+ this.component.invalidate();
77
+ }, e => {
78
+ console.error(e);
79
+ }),
80
+ side: THREE.FrontSide
81
+ };
82
+ }
83
+ else if (typeof fillStyle == 'string') {
84
+ if (fillStyle !== 'transparent') {
85
+ // params.map = this.createTexture()
86
+ params.color = fillStyle;
87
+ opacity *= tinycolor(fillStyle).getAlpha();
88
+ }
89
+ else {
90
+ opacity = 0;
91
+ }
92
+ }
93
+ return new THREE.MeshLambertMaterial({
94
+ ...params,
95
+ opacity,
96
+ transparent: opacity < 1
97
+ });
98
+ }
99
+ createMesh(geometry, material) {
100
+ var mesh = new THREE.Mesh(geometry, material);
101
+ mesh.rotation.x = -Math.PI / 2;
102
+ mesh.rotation.y = -Math.PI;
103
+ mesh.rotation.z = -Math.PI;
104
+ return mesh;
105
+ }
106
+ createSideMesh(geometry, shape) {
107
+ var { strokeStyle = 0x000000, depth = 0, lineWidth = 0, alpha = 1 } = this.component.state;
108
+ var hole = new THREE.Path();
109
+ hole.setFromPoints(shape.getPoints());
110
+ var sideMaterial = new THREE.MeshStandardMaterial({
111
+ color: strokeStyle
112
+ });
113
+ var tinyStrokeStyle = tinycolor(strokeStyle);
114
+ var strokeAlpha = tinyStrokeStyle.getAlpha();
115
+ sideMaterial.opacity = alpha * strokeAlpha;
116
+ sideMaterial.transparent = alpha < 1 || strokeAlpha < 1;
117
+ // prevent overlapped layers flickering
118
+ sideMaterial.polygonOffset = true;
119
+ sideMaterial.polygonOffsetFactor = -0.1;
120
+ shape = this.sideShape || shape;
121
+ shape.holes.push(hole);
122
+ var sideExtrudeSettings = {
123
+ steps: 1,
124
+ depth,
125
+ bevelEnabled: true,
126
+ bevelThickness: 0,
127
+ bevelSize: lineWidth,
128
+ bevelSizeSegments: 5
129
+ };
130
+ var sideGeometry = new THREE.ExtrudeGeometry(shape, sideExtrudeSettings);
131
+ sideGeometry.center();
132
+ var sideMesh = new THREE.Mesh(sideGeometry, sideMaterial);
133
+ sideMesh.rotation.x = -Math.PI / 2;
134
+ sideMesh.rotation.y = -Math.PI;
135
+ sideMesh.rotation.z = -Math.PI;
136
+ return sideMesh;
137
+ }
138
+ createTexture() {
139
+ function nextPowerOf2(n) {
140
+ var count = 0;
141
+ if (n && !(n & (n - 1))) {
142
+ return n;
143
+ }
144
+ while (n != 0) {
145
+ n >>= 1;
146
+ count += 1;
147
+ }
148
+ return 1 << count;
149
+ }
150
+ var { width, height } = this.component.bounds;
151
+ // TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.
152
+ var poweredWidth = nextPowerOf2(width);
153
+ var poweredHeight = nextPowerOf2(height);
154
+ let canvas = createCanvas(poweredWidth, poweredHeight);
155
+ this.component.render(canvas.getContext('2d'));
156
+ var texture = new THREE.CanvasTexture(canvas);
157
+ texture.needsUpdate = true;
158
+ texture.wrapS = THREE.RepeatWrapping;
159
+ texture.wrapT = THREE.RepeatWrapping;
160
+ texture.offset.set(0, 1 - height / poweredHeight);
161
+ texture.repeat.set(width / poweredWidth, height / poweredHeight);
162
+ texture.minFilter = THREE.LinearFilter;
163
+ return texture;
164
+ }
165
+ updateAlpha() {
166
+ var { alpha = 1, fillStyle, lineStyle } = this.component.state;
167
+ this._mainMesh && applyAlpha(this._mainMesh.material, alpha, fillStyle);
168
+ this._sideMesh && applyAlpha(this._sideMesh.material, alpha, lineStyle && lineStyle.strokeStyle);
169
+ }
170
+ }
171
+ //# sourceMappingURL=real-object-extrude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"real-object-extrude.js","sourceRoot":"","sources":["../../src/threed/real-object-extrude.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport * as THREE from 'three'\nimport tinycolor from 'tinycolor2'\n\nimport RealObject from './real-object'\n\nimport BoundUVGenerator from './utils/bound-uv-generator'\nimport { createCanvas } from './html/elements'\nimport { applyAlpha } from './common'\n\nexport default class RealObjectExtrude extends RealObject {\n _boundUVGenerator?: BoundUVGenerator\n private _mainMesh?: THREE.Mesh\n private _sideMesh?: THREE.Mesh\n\n get shape(): any {\n return null\n }\n\n get sideShape() {\n return null\n }\n\n get extrudeSettings(): THREE.ExtrudeGeometryOptions {\n var { depth = 1 } = this.component.state\n\n return {\n steps: 1,\n depth,\n bevelEnabled: false,\n UVGenerator: this.boundUVGenerator\n } as any\n }\n\n get boundUVGenerator() {\n if (!this._boundUVGenerator) this._boundUVGenerator = new BoundUVGenerator()\n\n return this._boundUVGenerator\n }\n\n build() {\n super.build()\n\n var { fillStyle = 0xffffff, strokeStyle = 0x636363, lineWidth = 1, alpha = 1 } = this.component.state\n\n // 다각형 그리기\n var shape = this.shape\n if (!shape) {\n return\n }\n\n var extrudeSettings = this.extrudeSettings\n var boundUVGenerator = this.boundUVGenerator\n\n if (boundUVGenerator) {\n boundUVGenerator.setShape({\n extrudedShape: shape,\n extrudedOptions: {\n depth: extrudeSettings.depth!\n }\n })\n }\n\n var geometry = this.createGeometry(shape, extrudeSettings)\n\n if (fillStyle && fillStyle != 'none') {\n var material = this.createMaterial()\n this._mainMesh = this.createMesh(geometry, material as THREE.Material)\n this._mainMesh.castShadow = true\n\n this.object3d.add(this._mainMesh)\n }\n\n if (strokeStyle && strokeStyle != 'transparent' && lineWidth > 0) {\n this._sideMesh = this.createSideMesh(geometry, shape /* FIXME , extrudeSettings */)\n this._sideMesh.castShadow = true\n\n this.object3d.add(this._sideMesh)\n }\n }\n\n createGeometry(shape: THREE.Shape, extrudeSettings: THREE.ExtrudeGeometryOptions): THREE.BufferGeometry {\n var geometry = new THREE.ExtrudeGeometry(shape, extrudeSettings)\n geometry.center()\n\n return geometry as any\n }\n\n createMaterial() {\n var { fillStyle = 'black', alpha = 1 } = this.component.state\n\n var params = {} as any\n var opacity = alpha\n\n if (typeof fillStyle == 'object' && fillStyle.type == 'pattern' && fillStyle.image) {\n params = {\n map: new THREE.TextureLoader(THREE.DefaultLoadingManager).load(\n fillStyle.image,\n texture => {\n texture.minFilter = THREE.LinearFilter\n texture.repeat.set(1, 1)\n this.component.invalidate()\n },\n e => {\n console.error(e)\n }\n ),\n side: THREE.FrontSide\n }\n } else if (typeof fillStyle == 'string') {\n if (fillStyle !== 'transparent') {\n // params.map = this.createTexture()\n params.color = fillStyle\n opacity *= tinycolor(fillStyle).getAlpha()\n } else {\n opacity = 0\n }\n }\n\n return new THREE.MeshLambertMaterial({\n ...params,\n opacity,\n transparent: opacity < 1\n })\n }\n\n createMesh(geometry: THREE.BufferGeometry, material: THREE.Material) {\n var mesh = new THREE.Mesh(geometry, material)\n mesh.rotation.x = -Math.PI / 2\n mesh.rotation.y = -Math.PI\n mesh.rotation.z = -Math.PI\n\n return mesh\n }\n\n createSideMesh(geometry: THREE.BufferGeometry, shape: THREE.Shape) {\n var { strokeStyle = 0x000000, depth = 0, lineWidth = 0, alpha = 1 } = this.component.state\n\n var hole = new THREE.Path()\n hole.setFromPoints(shape.getPoints())\n\n var sideMaterial = new THREE.MeshStandardMaterial({\n color: strokeStyle\n })\n\n var tinyStrokeStyle = tinycolor(strokeStyle)\n var strokeAlpha = tinyStrokeStyle.getAlpha()\n sideMaterial.opacity = alpha * strokeAlpha\n sideMaterial.transparent = alpha < 1 || strokeAlpha < 1\n\n // prevent overlapped layers flickering\n sideMaterial.polygonOffset = true\n sideMaterial.polygonOffsetFactor = -0.1\n\n shape = this.sideShape || shape\n shape.holes.push(hole)\n\n var sideExtrudeSettings = {\n steps: 1,\n depth,\n bevelEnabled: true,\n bevelThickness: 0,\n bevelSize: lineWidth,\n bevelSizeSegments: 5\n }\n\n var sideGeometry = new THREE.ExtrudeGeometry(shape, sideExtrudeSettings)\n sideGeometry.center()\n\n var sideMesh = new THREE.Mesh(sideGeometry, sideMaterial)\n sideMesh.rotation.x = -Math.PI / 2\n sideMesh.rotation.y = -Math.PI\n sideMesh.rotation.z = -Math.PI\n\n return sideMesh\n }\n\n createTexture() {\n function nextPowerOf2(n: number) {\n var count = 0\n\n if (n && !(n & (n - 1))) {\n return n\n }\n\n while (n != 0) {\n n >>= 1\n count += 1\n }\n\n return 1 << count\n }\n\n var { width, height } = this.component.bounds\n\n // TODO component.text의 heavy한 로직을 반복적으로 실행하지 않도록, 캐싱하자.\n var poweredWidth = nextPowerOf2(width)\n var poweredHeight = nextPowerOf2(height)\n\n let canvas = createCanvas(poweredWidth, poweredHeight)\n this.component.render(canvas.getContext('2d')!)\n\n var texture = new THREE.CanvasTexture(canvas)\n\n texture.needsUpdate = true\n texture.wrapS = THREE.RepeatWrapping\n texture.wrapT = THREE.RepeatWrapping\n texture.offset.set(0, 1 - height / poweredHeight)\n texture.repeat.set(width / poweredWidth, height / poweredHeight)\n texture.minFilter = THREE.LinearFilter\n\n return texture\n }\n\n updateAlpha() {\n var { alpha = 1, fillStyle, lineStyle } = this.component.state\n\n this._mainMesh && applyAlpha(this._mainMesh.material, alpha, fillStyle)\n this._sideMesh && applyAlpha(this._sideMesh.material, alpha, lineStyle && lineStyle.strokeStyle)\n }\n\n // raycast(raycaster, intersects) {}\n}\n"]}
@@ -0,0 +1,15 @@
1
+ import * as THREE from 'three';
2
+ import RealObject from './real-object';
3
+ import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
4
+ export default class RealObjectGLTF extends RealObject {
5
+ private static _GLTFLoader;
6
+ private pivot?;
7
+ private objectSize?;
8
+ static get GLTFLoader(): GLTFLoader;
9
+ build(): void;
10
+ private gltfLoaded;
11
+ clear(): THREE.Object3D<THREE.Event>;
12
+ _rescale(): void;
13
+ updateDimension(): void;
14
+ get rebuildingProperties(): string[];
15
+ }