@hatiolab/things-scene 3.4.39 → 3.4.42

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 (338) hide show
  1. package/db.sqlite +0 -0
  2. package/package.json +1 -1
  3. package/schema.graphql +3966 -0
  4. package/things-scene-ie.js +1 -1
  5. package/things-scene-min.js +1 -1
  6. package/things-scene.mjs +2 -2
  7. package/dist/animation/animate.d.ts +0 -4
  8. package/dist/animation/animations/animation.d.ts +0 -14
  9. package/dist/animation/animations/fade.d.ts +0 -4
  10. package/dist/animation/animations/heartbeat.d.ts +0 -4
  11. package/dist/animation/animations/moving.d.ts +0 -4
  12. package/dist/animation/animations/outline.d.ts +0 -10
  13. package/dist/animation/animations/rotation.d.ts +0 -4
  14. package/dist/animation/animations/vibration.d.ts +0 -4
  15. package/dist/animation/compile.d.ts +0 -1
  16. package/dist/animation/delta.d.ts +0 -19
  17. package/dist/animation/index.d.ts +0 -1
  18. package/dist/command/command-change.d.ts +0 -7
  19. package/dist/command/command-migrate.d.ts +0 -4
  20. package/dist/command/command-migrate.js +0 -85
  21. package/dist/command/command-migrate.js.map +0 -1
  22. package/dist/command/command.d.ts +0 -5
  23. package/dist/command/snapshot-commander.d.ts +0 -15
  24. package/dist/components/anchor/anchor.d.ts +0 -128
  25. package/dist/components/anchor/ellipse-anchors.d.ts +0 -2
  26. package/dist/components/anchor/ellipse-anchors.js +0 -38
  27. package/dist/components/anchor/ellipse-anchors.js.map +0 -1
  28. package/dist/components/anchor/rect-anchors.d.ts +0 -10
  29. package/dist/components/audio.d.ts +0 -25
  30. package/dist/components/audio.js +0 -141
  31. package/dist/components/audio.js.map +0 -1
  32. package/dist/components/cloud.d.ts +0 -13
  33. package/dist/components/cloud.js +0 -31
  34. package/dist/components/cloud.js.map +0 -1
  35. package/dist/components/component.d.ts +0 -227
  36. package/dist/components/component.js +0 -912
  37. package/dist/components/component.js.map +0 -1
  38. package/dist/components/container-abstract.d.ts +0 -51
  39. package/dist/components/container-abstract.js +0 -372
  40. package/dist/components/container-abstract.js.map +0 -1
  41. package/dist/components/container.d.ts +0 -38
  42. package/dist/components/container.js +0 -75
  43. package/dist/components/container.js.map +0 -1
  44. package/dist/components/data/data-mapping.d.ts +0 -16
  45. package/dist/components/data/data.d.ts +0 -8
  46. package/dist/components/data/evaluator.d.ts +0 -1
  47. package/dist/components/donut.d.ts +0 -15
  48. package/dist/components/donut.js +0 -74
  49. package/dist/components/donut.js.map +0 -1
  50. package/dist/components/drawer/draw-image-pendable.d.ts +0 -1
  51. package/dist/components/drawer/effect.d.ts +0 -1
  52. package/dist/components/drawer/fill.d.ts +0 -14
  53. package/dist/components/drawer/format.d.ts +0 -1
  54. package/dist/components/drawer/line.d.ts +0 -3
  55. package/dist/components/drawer/stroke.d.ts +0 -1
  56. package/dist/components/drawer/text-wrapper.d.ts +0 -10
  57. package/dist/components/drawer/text.d.ts +0 -3
  58. package/dist/components/ellipse.d.ts +0 -35
  59. package/dist/components/ellipse.js +0 -99
  60. package/dist/components/ellipse.js.map +0 -1
  61. package/dist/components/file/ondropfile.d.ts +0 -1
  62. package/dist/components/fit/fit.d.ts +0 -15
  63. package/dist/components/geometry/transcoord.d.ts +0 -41
  64. package/dist/components/geometry/union.d.ts +0 -6
  65. package/dist/components/gif-view.d.ts +0 -18
  66. package/dist/components/gif-view.js +0 -116
  67. package/dist/components/gif-view.js.map +0 -1
  68. package/dist/components/global-ref.d.ts +0 -36
  69. package/dist/components/global-ref.js +0 -128
  70. package/dist/components/global-ref.js.map +0 -1
  71. package/dist/components/group.d.ts +0 -15
  72. package/dist/components/group.js +0 -145
  73. package/dist/components/group.js.map +0 -1
  74. package/dist/components/html/elements.d.ts +0 -2
  75. package/dist/components/html/fill.d.ts +0 -1
  76. package/dist/components/html/reposition.d.ts +0 -1
  77. package/dist/components/html/shadow.d.ts +0 -1
  78. package/dist/components/html-overlay-container.d.ts +0 -27
  79. package/dist/components/html-overlay-container.js +0 -14
  80. package/dist/components/html-overlay-container.js.map +0 -1
  81. package/dist/components/html-overlay-element.d.ts +0 -25
  82. package/dist/components/html-overlay-element.js +0 -9
  83. package/dist/components/html-overlay-element.js.map +0 -1
  84. package/dist/components/image-view.d.ts +0 -19
  85. package/dist/components/image-view.js +0 -180
  86. package/dist/components/image-view.js.map +0 -1
  87. package/dist/components/index.d.ts +0 -32
  88. package/dist/components/index.js +0 -39
  89. package/dist/components/index.js.map +0 -1
  90. package/dist/components/info-window.d.ts +0 -41
  91. package/dist/components/info-window.js +0 -425
  92. package/dist/components/info-window.js.map +0 -1
  93. package/dist/components/line.d.ts +0 -91
  94. package/dist/components/line.js +0 -303
  95. package/dist/components/line.js.map +0 -1
  96. package/dist/components/local-ref.d.ts +0 -47
  97. package/dist/components/local-ref.js +0 -103
  98. package/dist/components/local-ref.js.map +0 -1
  99. package/dist/components/mixins/connectable.d.ts +0 -45
  100. package/dist/components/mixins/data-source.d.ts +0 -9
  101. package/dist/components/mixins/html-element.d.ts +0 -24
  102. package/dist/components/mixins/move-handle.d.ts +0 -11
  103. package/dist/components/mixins/rect-path.d.ts +0 -13
  104. package/dist/components/mixins/value-holder.d.ts +0 -18
  105. package/dist/components/mutater/bounds.d.ts +0 -10
  106. package/dist/components/mutater/path.d.ts +0 -5
  107. package/dist/components/ortholine.d.ts +0 -21
  108. package/dist/components/ortholine.js +0 -814
  109. package/dist/components/ortholine.js.map +0 -1
  110. package/dist/components/outline/ellipse-outline.d.ts +0 -4
  111. package/dist/components/outline/ellipse-outline.js +0 -11
  112. package/dist/components/outline/ellipse-outline.js.map +0 -1
  113. package/dist/components/outline/path-outline.d.ts +0 -1
  114. package/dist/components/path.d.ts +0 -5
  115. package/dist/components/path.js +0 -40
  116. package/dist/components/path.js.map +0 -1
  117. package/dist/components/polygon.d.ts +0 -40
  118. package/dist/components/polygon.js +0 -157
  119. package/dist/components/polygon.js.map +0 -1
  120. package/dist/components/polyline.d.ts +0 -18
  121. package/dist/components/polyline.js +0 -102
  122. package/dist/components/polyline.js.map +0 -1
  123. package/dist/components/popup.d.ts +0 -48
  124. package/dist/components/popup.js +0 -138
  125. package/dist/components/popup.js.map +0 -1
  126. package/dist/components/rect.d.ts +0 -26
  127. package/dist/components/rect.js +0 -91
  128. package/dist/components/rect.js.map +0 -1
  129. package/dist/components/retention/retention-manager.d.ts +0 -8
  130. package/dist/components/root-container.d.ts +0 -90
  131. package/dist/components/root-container.js +0 -478
  132. package/dist/components/root-container.js.map +0 -1
  133. package/dist/components/ruler.d.ts +0 -16
  134. package/dist/components/ruler.js +0 -77
  135. package/dist/components/ruler.js.map +0 -1
  136. package/dist/components/shape.d.ts +0 -25
  137. package/dist/components/shape.js +0 -80
  138. package/dist/components/shape.js.map +0 -1
  139. package/dist/components/star.d.ts +0 -13
  140. package/dist/components/star.js +0 -80
  141. package/dist/components/star.js.map +0 -1
  142. package/dist/components/text/substitutor.d.ts +0 -3
  143. package/dist/components/text.d.ts +0 -8
  144. package/dist/components/text.js +0 -15
  145. package/dist/components/text.js.map +0 -1
  146. package/dist/components/three-container.d.ts +0 -60
  147. package/dist/components/three-container.js +0 -515
  148. package/dist/components/three-container.js.map +0 -1
  149. package/dist/components/triangle.d.ts +0 -15
  150. package/dist/components/triangle.js +0 -76
  151. package/dist/components/triangle.js.map +0 -1
  152. package/dist/const.d.ts +0 -39
  153. package/dist/core/collection.d.ts +0 -8
  154. package/dist/core/debug.d.ts +0 -1
  155. package/dist/core/deep-equals.d.ts +0 -1
  156. package/dist/core/dom-to-image.d.ts +0 -127
  157. package/dist/core/event.d.ts +0 -92
  158. package/dist/core/index.d.ts +0 -2
  159. package/dist/core/list.d.ts +0 -32
  160. package/dist/core/logger.d.ts +0 -3
  161. package/dist/core/memoize.d.ts +0 -6
  162. package/dist/core/mixin.d.ts +0 -1
  163. package/dist/core/obj-accessor.d.ts +0 -1
  164. package/dist/core/reference-map.d.ts +0 -14
  165. package/dist/core/round-rect.d.ts +0 -19
  166. package/dist/core/script-loader.d.ts +0 -3
  167. package/dist/core/snapshot-taker.d.ts +0 -12
  168. package/dist/core/stack.d.ts +0 -2
  169. package/dist/core/timecapsule.d.ts +0 -18
  170. package/dist/core/utils.d.ts +0 -9
  171. package/dist/decorator/anchors-decorator.d.ts +0 -31
  172. package/dist/decorator/data-spread-decorator.d.ts +0 -1
  173. package/dist/decorator/decotag-decorator.d.ts +0 -1
  174. package/dist/decorator/index.d.ts +0 -2
  175. package/dist/decorator/link-decorator.d.ts +0 -1
  176. package/dist/effect/gradation.d.ts +0 -1
  177. package/dist/effect/index.d.ts +0 -1
  178. package/dist/effect/shadow.d.ts +0 -2
  179. package/dist/effect/turn.d.ts +0 -1
  180. package/dist/event/event-engine.d.ts +0 -12
  181. package/dist/event/event-pump.d.ts +0 -11
  182. package/dist/event/event-tracker.d.ts +0 -21
  183. package/dist/event/index.d.ts +0 -2
  184. package/dist/event/ua-event-handler.d.ts +0 -32
  185. package/dist/event-map/event-map.d.ts +0 -9
  186. package/dist/event-map/index.d.ts +0 -1
  187. package/dist/event-map/move-handler.d.ts +0 -1
  188. package/dist/event-map/text-editor-lite.d.ts +0 -1
  189. package/dist/index.d.ts +0 -1
  190. package/dist/index.js +0 -3
  191. package/dist/index.js.map +0 -1
  192. package/dist/layer/action/emphasize.d.ts +0 -2
  193. package/dist/layer/action/popup.d.ts +0 -5
  194. package/dist/layer/action/pressed.d.ts +0 -2
  195. package/dist/layer/add-layer.d.ts +0 -42
  196. package/dist/layer/add-layer.js +0 -142
  197. package/dist/layer/add-layer.js.map +0 -1
  198. package/dist/layer/decotag-layer.d.ts +0 -27
  199. package/dist/layer/decotag-layer.js +0 -105
  200. package/dist/layer/decotag-layer.js.map +0 -1
  201. package/dist/layer/guide-layer.d.ts +0 -44
  202. package/dist/layer/guide-layer.js +0 -261
  203. package/dist/layer/guide-layer.js.map +0 -1
  204. package/dist/layer/index.d.ts +0 -7
  205. package/dist/layer/index.js +0 -11
  206. package/dist/layer/index.js.map +0 -1
  207. package/dist/layer/layer.d.ts +0 -32
  208. package/dist/layer/layer.js +0 -155
  209. package/dist/layer/layer.js.map +0 -1
  210. package/dist/layer/model-layer.d.ts +0 -46
  211. package/dist/layer/model-layer.js +0 -402
  212. package/dist/layer/model-layer.js.map +0 -1
  213. package/dist/layer/modeler/anchor-handler.d.ts +0 -36
  214. package/dist/layer/modeler/control-handler.d.ts +0 -18
  215. package/dist/layer/modeler/focus-outline.d.ts +0 -5
  216. package/dist/layer/modeler/group-outline.d.ts +0 -5
  217. package/dist/layer/modeler/index.d.ts +0 -7
  218. package/dist/layer/modeler/path-handler.d.ts +0 -22
  219. package/dist/layer/modeler/resizer.d.ts +0 -13
  220. package/dist/layer/modeler/rotator.d.ts +0 -15
  221. package/dist/layer/modeler/rotator.js +0 -120
  222. package/dist/layer/modeler/rotator.js.map +0 -1
  223. package/dist/layer/modeling-layer.d.ts +0 -66
  224. package/dist/layer/modeling-layer.js +0 -451
  225. package/dist/layer/modeling-layer.js.map +0 -1
  226. package/dist/layer/selection/selected-finder.d.ts +0 -1
  227. package/dist/layer/selection-layer.d.ts +0 -42
  228. package/dist/layer/selection-layer.js +0 -307
  229. package/dist/layer/selection-layer.js.map +0 -1
  230. package/dist/layer/shift-layer.d.ts +0 -18
  231. package/dist/layer/shift-layer.js +0 -61
  232. package/dist/layer/shift-layer.js.map +0 -1
  233. package/dist/layout/absolute.d.ts +0 -8
  234. package/dist/layout/card.d.ts +0 -7
  235. package/dist/layout/html-absolute.d.ts +0 -8
  236. package/dist/layout/index.d.ts +0 -8
  237. package/dist/layout/index.js +0 -12
  238. package/dist/layout/index.js.map +0 -1
  239. package/dist/layout/layout.d.ts +0 -11
  240. package/dist/layout/linear-horizontal.d.ts +0 -7
  241. package/dist/layout/linear-vertical.d.ts +0 -7
  242. package/dist/layout/table.d.ts +0 -9
  243. package/dist/layout/three.d.ts +0 -8
  244. package/dist/layout/three.js +0 -20
  245. package/dist/layout/three.js.map +0 -1
  246. package/dist/license/license.d.ts +0 -18
  247. package/dist/model/compile.d.ts +0 -1
  248. package/dist/model/compile.js +0 -28
  249. package/dist/model/compile.js.map +0 -1
  250. package/dist/model/duplicate.d.ts +0 -1
  251. package/dist/model/index.d.ts +0 -3
  252. package/dist/model/selector.d.ts +0 -2
  253. package/dist/style/compile.d.ts +0 -1
  254. package/dist/style/index.d.ts +0 -1
  255. package/dist/things-scene/api/add-start.d.ts +0 -1
  256. package/dist/things-scene/api/add.d.ts +0 -5
  257. package/dist/things-scene/api/align.d.ts +0 -1
  258. package/dist/things-scene/api/change.d.ts +0 -2
  259. package/dist/things-scene/api/clipboard.d.ts +0 -3
  260. package/dist/things-scene/api/distribute.d.ts +0 -1
  261. package/dist/things-scene/api/duplicate.d.ts +0 -4
  262. package/dist/things-scene/api/fullscreen.d.ts +0 -1
  263. package/dist/things-scene/api/group.d.ts +0 -8
  264. package/dist/things-scene/api/group.js +0 -78
  265. package/dist/things-scene/api/group.js.map +0 -1
  266. package/dist/things-scene/api/ids.d.ts +0 -4
  267. package/dist/things-scene/api/index.d.ts +0 -15
  268. package/dist/things-scene/api/listener.d.ts +0 -3
  269. package/dist/things-scene/api/remove.d.ts +0 -4
  270. package/dist/things-scene/api/symmetry.d.ts +0 -2
  271. package/dist/things-scene/api/symmetry.js +0 -39
  272. package/dist/things-scene/api/symmetry.js.map +0 -1
  273. package/dist/things-scene/api/to-data-url.d.ts +0 -1
  274. package/dist/things-scene/api/to-data-url.js +0 -69
  275. package/dist/things-scene/api/to-data-url.js.map +0 -1
  276. package/dist/things-scene/api/zorder.d.ts +0 -2
  277. package/dist/things-scene/application-context.d.ts +0 -40
  278. package/dist/things-scene/config.d.ts +0 -4
  279. package/dist/things-scene/create.d.ts +0 -20
  280. package/dist/things-scene/fps.d.ts +0 -1
  281. package/dist/things-scene/index.d.ts +0 -17
  282. package/dist/things-scene/index.js +0 -23
  283. package/dist/things-scene/index.js.map +0 -1
  284. package/dist/things-scene/polyfill.d.ts +0 -2
  285. package/dist/things-scene/scene.d.ts +0 -155
  286. package/dist/things-scene/version.d.ts +0 -2
  287. package/dist/threed/common.d.ts +0 -22
  288. package/dist/threed/control/three-controls.d.ts +0 -11
  289. package/dist/threed/control/three-controls.js +0 -620
  290. package/dist/threed/control/three-controls.js.map +0 -1
  291. package/dist/threed/html/elements.d.ts +0 -2
  292. package/dist/threed/real-object-camera-meshed.d.ts +0 -12
  293. package/dist/threed/real-object-camera-meshed.js +0 -49
  294. package/dist/threed/real-object-camera-meshed.js.map +0 -1
  295. package/dist/threed/real-object-camera.d.ts +0 -9
  296. package/dist/threed/real-object-camera.js +0 -31
  297. package/dist/threed/real-object-camera.js.map +0 -1
  298. package/dist/threed/real-object-dom-element.d.ts +0 -20
  299. package/dist/threed/real-object-dom-element.js +0 -78
  300. package/dist/threed/real-object-dom-element.js.map +0 -1
  301. package/dist/threed/real-object-dummy.d.ts +0 -6
  302. package/dist/threed/real-object-dummy.js +0 -11
  303. package/dist/threed/real-object-dummy.js.map +0 -1
  304. package/dist/threed/real-object-extrude.d.ts +0 -19
  305. package/dist/threed/real-object-extrude.js +0 -171
  306. package/dist/threed/real-object-extrude.js.map +0 -1
  307. package/dist/threed/real-object-gltf.d.ts +0 -15
  308. package/dist/threed/real-object-gltf.js +0 -97
  309. package/dist/threed/real-object-gltf.js.map +0 -1
  310. package/dist/threed/real-object-group.d.ts +0 -5
  311. package/dist/threed/real-object-group.js +0 -11
  312. package/dist/threed/real-object-group.js.map +0 -1
  313. package/dist/threed/real-object-mesh.d.ts +0 -11
  314. package/dist/threed/real-object-mesh.js +0 -55
  315. package/dist/threed/real-object-mesh.js.map +0 -1
  316. package/dist/threed/real-object-plane.d.ts +0 -6
  317. package/dist/threed/real-object-plane.js +0 -23
  318. package/dist/threed/real-object-plane.js.map +0 -1
  319. package/dist/threed/real-object-scene.d.ts +0 -21
  320. package/dist/threed/real-object-scene.js +0 -89
  321. package/dist/threed/real-object-scene.js.map +0 -1
  322. package/dist/threed/real-object-sprite.d.ts +0 -12
  323. package/dist/threed/real-object-sprite.js +0 -35
  324. package/dist/threed/real-object-sprite.js.map +0 -1
  325. package/dist/threed/real-object-text.d.ts +0 -16
  326. package/dist/threed/real-object-text.js +0 -70
  327. package/dist/threed/real-object-text.js.map +0 -1
  328. package/dist/threed/real-object.d.ts +0 -48
  329. package/dist/threed/real-object.js +0 -199
  330. package/dist/threed/real-object.js.map +0 -1
  331. package/dist/threed/texture/text-texture.d.ts +0 -8
  332. package/dist/threed/three-dimensional-container.d.ts +0 -7
  333. package/dist/threed/three-dimensional-container.js +0 -2
  334. package/dist/threed/three-dimensional-container.js.map +0 -1
  335. package/dist/threed/utils/bound-uv-generator.d.ts +0 -16
  336. package/dist/types.d.ts +0 -53
  337. package/dist/types.js +0 -368
  338. package/dist/types.js.map +0 -1
@@ -1,120 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import Component from '../../components/component';
5
- import CommandChange from '../../command/command-change';
6
- const ROTATION_HANDLE_RADIUS = 4;
7
- const ROTATION_HANDLE_HEIGHT = 20;
8
- const THETA_360 = Math.PI * 2;
9
- const THETA_90 = Math.PI / 2;
10
- /*
11
- * 컴포넌트의 회전 핸들은 컴포넌트 바운드의 탑라인 중앙 상단에 위치한다.
12
- */
13
- function getRotateHandle(component, scale) {
14
- var bounds = component.bounds;
15
- return {
16
- x: bounds.left + bounds.width / 2,
17
- y: bounds.top - ROTATION_HANDLE_HEIGHT / scale.y
18
- };
19
- }
20
- export default class Rotator {
21
- constructor(layer) {
22
- this.layer = layer;
23
- }
24
- reset() {
25
- // 현재 선택된 로테이트 핸들의 정보
26
- this.active = null;
27
- }
28
- get selected() {
29
- return this.layer.selected;
30
- }
31
- contains(x, y, component, scale) {
32
- if (!component.rotatable)
33
- return false;
34
- // 좌표가 회전 핸들에 포함되어있는지 확인함.
35
- var handle = getRotateHandle(component, scale);
36
- if (Math.abs(x - handle.x) <= ROTATION_HANDLE_RADIUS / scale.x &&
37
- Math.abs(y - handle.y) <= ROTATION_HANDLE_RADIUS / scale.y) {
38
- // 현재 선택된 로테이트 핸들의 정보
39
- this.active = { component };
40
- return true;
41
- }
42
- return false;
43
- }
44
- draw(context, component, scale) {
45
- if (!component.rotatable)
46
- return;
47
- context.beginPath();
48
- var rh = getRotateHandle(component, scale);
49
- context.lineWidth = 1.5 / scale.x;
50
- context.moveTo(rh.x, rh.y + ROTATION_HANDLE_HEIGHT / scale.y);
51
- context.lineTo(rh.x, rh.y);
52
- context.strokeStyle = '#656565';
53
- context.stroke();
54
- context.beginPath();
55
- context.ellipse(rh.x, rh.y, ROTATION_HANDLE_RADIUS / scale.x, ROTATION_HANDLE_RADIUS / scale.y, 0, 0, THETA_360, true);
56
- context.stroke();
57
- context.fillStyle = '#fff';
58
- context.fill();
59
- var active = this.active;
60
- if (active && active.component === component) {
61
- context.strokeStyle = '#fa7703';
62
- context.stroke();
63
- if (active.toFill) {
64
- context.fillStyle = '#ffb80c';
65
- context.fill();
66
- }
67
- }
68
- }
69
- onmousedown(e) {
70
- this.active.toFill = true;
71
- }
72
- ondragstart(e) {
73
- var active = this.active;
74
- var component = active.component;
75
- active.start_rotation = active.component.get('rotation');
76
- active.rotations = this.layer.selected.filter(c => c.rotatable).map(c => c.get('rotation'));
77
- }
78
- ondragmove(e) {
79
- /* 로테이트 핸들의 이동을 처리한다. */
80
- var { component } = this.active;
81
- // 회전을 시키려는 대상 컴포넌트의 중심점과 이벤트 포인트와의 각도가 중요하므로,
82
- // 컴포넌트 스케일과 회전이 감안되지 않은 부모의 좌표로 변환하여 계산한다.
83
- var point = component.transcoordC2S(e.offsetX, e.offsetY);
84
- point = component.transcoordS2P(point.x, point.y);
85
- var rotatePoint = component.rotatePoint;
86
- var oldTheta = component.get('rotation') || 0;
87
- var newTheta = Math.atan((rotatePoint.y - point.y) / (rotatePoint.x - point.x));
88
- newTheta = rotatePoint.x >= point.x ? newTheta - THETA_90 : THETA_90 + newTheta;
89
- var deltaTheta = newTheta - oldTheta;
90
- this.layer.selected
91
- .filter(c => c.rotatable)
92
- .forEach((c, i) => {
93
- /* 최초의 바운드로 되돌려놓고 다시 계산한다. */
94
- let rotation = ((c.get('rotation') || 0) + deltaTheta) % THETA_360;
95
- c.set('rotation', c.adjustRotation(rotation, e.shiftKey));
96
- });
97
- }
98
- ondragend(e) {
99
- var { component, rotations } = this.active;
100
- // var command = new CommandChange({
101
- // changes: this.layer.selected.filter(c => {
102
- // return c.rotatable
103
- // }).map((c, i) => {
104
- // return {
105
- // component: c,
106
- // before: {
107
- // rotation: rotations[i]
108
- // },
109
- // after: {
110
- // rotation: c.get('rotation')
111
- // }
112
- // }
113
- // })
114
- // })
115
- /* 커맨더 큐에 넣기만하고, 실행하지는 말라.(이미 실행된 상태이므로) */
116
- // component.app.commander.execute(command, false)
117
- component.app.commander.execute(null, false);
118
- }
119
- }
120
- //# sourceMappingURL=rotator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"rotator.js","sourceRoot":"","sources":["../../../src/layer/modeler/rotator.js"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright © HatioLab Inc. All rights reserved.\n */\n\nimport Component from '../../components/component'\nimport CommandChange from '../../command/command-change'\n\nconst ROTATION_HANDLE_RADIUS = 4\nconst ROTATION_HANDLE_HEIGHT = 20\n\nconst THETA_360 = Math.PI * 2\nconst THETA_90 = Math.PI / 2\n\n/*\n * 컴포넌트의 회전 핸들은 컴포넌트 바운드의 탑라인 중앙 상단에 위치한다.\n */\nfunction getRotateHandle(component, scale) {\n var bounds = component.bounds\n\n return {\n x: bounds.left + bounds.width / 2,\n y: bounds.top - ROTATION_HANDLE_HEIGHT / scale.y\n }\n}\n\nexport default class Rotator {\n constructor(layer) {\n this.layer = layer\n }\n\n reset() {\n // 현재 선택된 로테이트 핸들의 정보\n this.active = null\n }\n\n get selected() {\n return this.layer.selected\n }\n\n contains(x, y, component, scale) {\n if (!component.rotatable) return false\n\n // 좌표가 회전 핸들에 포함되어있는지 확인함.\n var handle = getRotateHandle(component, scale)\n\n if (\n Math.abs(x - handle.x) <= ROTATION_HANDLE_RADIUS / scale.x &&\n Math.abs(y - handle.y) <= ROTATION_HANDLE_RADIUS / scale.y\n ) {\n // 현재 선택된 로테이트 핸들의 정보\n this.active = { component }\n return true\n }\n\n return false\n }\n\n draw(context, component, scale) {\n if (!component.rotatable) return\n\n context.beginPath()\n\n var rh = getRotateHandle(component, scale)\n context.lineWidth = 1.5 / scale.x\n context.moveTo(rh.x, rh.y + ROTATION_HANDLE_HEIGHT / scale.y)\n context.lineTo(rh.x, rh.y)\n\n context.strokeStyle = '#656565'\n context.stroke()\n\n context.beginPath()\n context.ellipse(\n rh.x,\n rh.y,\n ROTATION_HANDLE_RADIUS / scale.x,\n ROTATION_HANDLE_RADIUS / scale.y,\n 0,\n 0,\n THETA_360,\n true\n )\n\n context.stroke()\n context.fillStyle = '#fff'\n context.fill()\n\n var active = this.active\n\n if (active && active.component === component) {\n context.strokeStyle = '#fa7703'\n context.stroke()\n\n if (active.toFill) {\n context.fillStyle = '#ffb80c'\n context.fill()\n }\n }\n }\n\n onmousedown(e) {\n this.active.toFill = true\n }\n\n ondragstart(e) {\n var active = this.active\n var component = active.component\n\n active.start_rotation = active.component.get('rotation')\n active.rotations = this.layer.selected.filter(c => c.rotatable).map(c => c.get('rotation'))\n }\n\n ondragmove(e) {\n /* 로테이트 핸들의 이동을 처리한다. */\n var { component } = this.active\n\n // 회전을 시키려는 대상 컴포넌트의 중심점과 이벤트 포인트와의 각도가 중요하므로,\n // 컴포넌트 스케일과 회전이 감안되지 않은 부모의 좌표로 변환하여 계산한다.\n\n var point = component.transcoordC2S(e.offsetX, e.offsetY)\n point = component.transcoordS2P(point.x, point.y)\n\n var rotatePoint = component.rotatePoint\n\n var oldTheta = component.get('rotation') || 0\n var newTheta = Math.atan((rotatePoint.y - point.y) / (rotatePoint.x - point.x))\n newTheta = rotatePoint.x >= point.x ? newTheta - THETA_90 : THETA_90 + newTheta\n\n var deltaTheta = newTheta - oldTheta\n\n this.layer.selected\n .filter(c => c.rotatable)\n .forEach((c, i) => {\n /* 최초의 바운드로 되돌려놓고 다시 계산한다. */\n let rotation = ((c.get('rotation') || 0) + deltaTheta) % THETA_360\n c.set('rotation', c.adjustRotation(rotation, e.shiftKey))\n })\n }\n\n ondragend(e) {\n var { component, rotations } = this.active\n\n // var command = new CommandChange({\n // changes: this.layer.selected.filter(c => {\n // return c.rotatable\n // }).map((c, i) => {\n // return {\n // component: c,\n // before: {\n // rotation: rotations[i]\n // },\n // after: {\n // rotation: c.get('rotation')\n // }\n // }\n // })\n // })\n\n /* 커맨더 큐에 넣기만하고, 실행하지는 말라.(이미 실행된 상태이므로) */\n // component.app.commander.execute(command, false)\n component.app.commander.execute(null, false)\n }\n}\n"]}
@@ -1,66 +0,0 @@
1
- export default class ModelingLayer extends Layer {
2
- pathHandler: Modeler.PathHandler;
3
- _modelers: (Modeler.ControlHandler | Modeler.PathHandler | Modeler.Resizer | Modeler.Rotator)[];
4
- _control_mode_modelers: (Modeler.ControlHandler | Modeler.PathHandler | Modeler.Resizer | Modeler.Rotator)[];
5
- focusOutline: Modeler.FocusOutline;
6
- groupOutline: Modeler.GroupOutline;
7
- anchorHandler: Modeler.AnchorHandler;
8
- _reversed_modelers: (Modeler.ControlHandler | Modeler.PathHandler | Modeler.Resizer | Modeler.Rotator)[];
9
- _control_mode_reverse_modelers: (Modeler.ControlHandler | Modeler.PathHandler | Modeler.Resizer | Modeler.Rotator)[];
10
- set hovered(arg: any);
11
- get hovered(): any;
12
- hoveredDest: any;
13
- get modelers(): (Modeler.ControlHandler | Modeler.PathHandler | Modeler.Resizer | Modeler.Rotator)[];
14
- get reversedModelers(): (Modeler.ControlHandler | Modeler.PathHandler | Modeler.Resizer | Modeler.Rotator)[];
15
- ready(): void;
16
- currentModeler: Modeler.ControlHandler | Modeler.PathHandler | Modeler.AnchorHandler | Modeler.Resizer | Modeler.Rotator | null | undefined;
17
- _componentDrawer(context: any, component: any, scale: any, logic: any): void;
18
- set anchorTarget(arg: any);
19
- get anchorTarget(): any;
20
- _anchorTarget: any;
21
- _hovered: any;
22
- startLinkProcess(linkFrom: any, linkModel: any, e: any): void;
23
- processingLink: any;
24
- set counterEnd(arg: any);
25
- get counterEnd(): any;
26
- _counter_end: any;
27
- endLinkProcess(): void;
28
- get eventMap(): {
29
- 'model-layer': {
30
- '(all)': {
31
- change: (after: any, before: any, hint: any) => void;
32
- wheel: (e: any, hint: any) => void;
33
- drop: (e: any, hint: any) => void;
34
- };
35
- '(descendant)': {
36
- mouseenter: (e: any, hint: any) => void;
37
- mouseleave: (e: any, hint: any) => void;
38
- };
39
- };
40
- '(root)': {
41
- '(self)': {
42
- selected: (after: any, before: any) => void;
43
- keydown: (e: any) => void;
44
- keyup: (e: any) => void;
45
- };
46
- };
47
- };
48
- onmouseenter(e: any, hint: any): void;
49
- onmouseleave(e: any, hint: any): void;
50
- onkeydown(e: any): void;
51
- _control_mode: boolean | undefined;
52
- onkeyup(e: any): void;
53
- onselected(after: any, before: any): void;
54
- onchange_model(after: any, before: any, hint: any): void;
55
- ondblclick(e: any): void;
56
- onmousedown(e: any): void;
57
- onmouseup(e: any): void;
58
- ondragstart(e: any): void;
59
- _state_dragging: boolean | undefined;
60
- ondragmove(e: any): void;
61
- ondragend(e: any): void;
62
- ondrop(e: any, hint: any): void;
63
- onwheel_scale(e: any, hint: any): void;
64
- }
65
- import Layer from "./layer";
66
- import * as Modeler from "./modeler";
@@ -1,451 +0,0 @@
1
- /*
2
- * Copyright © HatioLab Inc. All rights reserved.
3
- */
4
- import CommandChange from '../command/command-change';
5
- import CommandMigrate from '../command/command-migrate';
6
- import Component from '../components/component';
7
- import * as Const from '../const';
8
- import compile from '../model/compile';
9
- import Layer from './layer';
10
- import * as Modeler from './modeler';
11
- export default class ModelingLayer extends Layer {
12
- constructor(model, context) {
13
- super(model, context);
14
- this.pathHandler = new Modeler.PathHandler(this);
15
- var ph = this.pathHandler;
16
- var ch = new Modeler.ControlHandler(this);
17
- var rs = new Modeler.Resizer(this);
18
- var rt = new Modeler.Rotator(this);
19
- this._modelers = [ph, ch, rs, rt];
20
- this._control_mode_modelers = [ch, ph, rs, rt];
21
- this.focusOutline = new Modeler.FocusOutline(this);
22
- this.groupOutline = new Modeler.GroupOutline(this);
23
- this.anchorHandler = new Modeler.AnchorHandler(this);
24
- // 그릴 때는 contains 순서의 역순으로 그린다.
25
- this._reversed_modelers = this._modelers.slice().reverse();
26
- this._control_mode_reverse_modelers = this._control_mode_modelers.slice().reverse();
27
- this.hovered = null;
28
- this.hoveredDest = null;
29
- }
30
- get modelers() {
31
- return this._control_mode ? this._control_mode_modelers : this._modelers;
32
- }
33
- get reversedModelers() {
34
- return this._control_mode ? this._control_mode_reverse_modelers : this._reversed_modelers;
35
- }
36
- // Lifecycle
37
- ready() {
38
- super.ready();
39
- var rootModel = this.rootModel;
40
- var translate = rootModel.get('translate');
41
- var scale = rootModel.get('scale');
42
- this.set('translate', translate);
43
- this.set('scale', scale);
44
- }
45
- contains(x, y) {
46
- var components = this.selected.filter(c => !!c.parent);
47
- var scale = this.get('scale') || { x: 1, y: 1 };
48
- if (this._state_dragging) {
49
- if (this._counter_end) {
50
- let point = this.anchorTarget.transcoordT2S(x, y);
51
- if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {
52
- return true;
53
- }
54
- }
55
- return true;
56
- }
57
- this.modelers.forEach(modeler => modeler.reset());
58
- /*
59
- * 부모가 있는 컴포넌트만을 그린다.
60
- * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)
61
- */
62
- var components = this.selected.filter(c => !!c.parent);
63
- for (let i = 0; i < components.length; i++) {
64
- let component = components[i];
65
- let point = component.transcoordT2S(x, y);
66
- for (let j = 0; j < this.modelers.length; j++) {
67
- let modeler = this.modelers[j];
68
- if (modeler.contains(point.x, point.y, component, scale)) {
69
- this.currentModeler = modeler;
70
- return true;
71
- }
72
- }
73
- }
74
- if (this.anchorTarget) {
75
- let point = this.anchorTarget.transcoordT2S(x, y);
76
- if (this.anchorHandler.contains(point.x, point.y, this.anchorTarget, scale)) {
77
- this.currentModeler = this.anchorHandler;
78
- return true;
79
- }
80
- }
81
- else {
82
- this.anchorHandler.reset();
83
- }
84
- this.currentModeler = null;
85
- return false;
86
- }
87
- _componentDrawer(context, component, scale, logic) {
88
- let ancester = [];
89
- let parent = component.parent;
90
- if (component.isRootModel()) {
91
- context.save();
92
- logic(context, component, scale);
93
- context.restore();
94
- return;
95
- }
96
- while (parent && !parent.isRootModel()) {
97
- ancester.push(parent);
98
- parent = parent.parent;
99
- }
100
- context.save();
101
- ancester.reverse().forEach(function (parent) {
102
- // 원점으로 이동하여 회전.
103
- let rotatePoint = parent.rotatePoint;
104
- context.translate(rotatePoint.x, rotatePoint.y);
105
- let parent_scale = parent.get('scale');
106
- if (parent_scale)
107
- context.scale(parent_scale.x, parent_scale.y);
108
- context.rotate(parent.get('rotation'));
109
- context.translate(-rotatePoint.x, -rotatePoint.y);
110
- let bounds = parent.bounds;
111
- context.translate(bounds.left, bounds.top);
112
- });
113
- let rotatePoint = component.rotatePoint;
114
- context.translate(rotatePoint.x, rotatePoint.y);
115
- let component_scale = component.get('scale');
116
- if (component_scale)
117
- context.scale(component_scale.x, component_scale.y);
118
- context.rotate(component.get('rotation'));
119
- context.translate(-rotatePoint.x, -rotatePoint.y);
120
- logic(context, component, scale);
121
- context.restore();
122
- }
123
- prerender(context) {
124
- var { translate, scale = { x: 1, y: 1 }, rotation } = this.model;
125
- // Scene 모델 바깥쪽을 표현하기 위해서, 먼저 전체 바탕을 회색으로 칠한다.
126
- context.save();
127
- context.beginPath();
128
- context.clearRect(0, 0, context.canvas.width, context.canvas.height);
129
- context.rect(0, 0, context.canvas.width, context.canvas.height);
130
- context.fillStyle = 'black';
131
- context.globalAlpha = 0.5;
132
- context.fill();
133
- context.restore();
134
- translate && context.translate(translate.x * Const.DPPX, translate.y * Const.DPPX);
135
- context.scale(scale.x * Const.DPPX, scale.y * Const.DPPX);
136
- rotation && context.rotate(rotation);
137
- context.clearRect(0, 0, this.rootModel.get('width'), this.rootModel.get('height'));
138
- }
139
- render(context) {
140
- context.beginPath();
141
- var scale = this.get('scale') || { x: 1, y: 1 };
142
- /*
143
- * 부모가 있는 컴포넌트만을 그린다.
144
- * (selected에는 남아있을 수 있으나, undo에 의해서 이미 제거된 것일 수 있다.)
145
- */
146
- var selected = this.selected.filter(c => !!c.parent);
147
- if (this.focused) {
148
- this._componentDrawer(context, this.focused, scale, (context, component, scale) => {
149
- this.focusOutline.draw(context, component, scale);
150
- });
151
- }
152
- /* TODO selected의 부모가 group인 경우에 최상위 그룹의 모델링 레이아웃을 그려주어야 한다. */
153
- if (selected.length > 0 && selected[0].parent.isGroup()) {
154
- let rootGroup = selected[0].parent;
155
- while (rootGroup.parent.isGroup())
156
- rootGroup = rootGroup.parent;
157
- this._componentDrawer(context, rootGroup, scale, (context, component, scale) => {
158
- this.groupOutline.draw(context, component, scale);
159
- });
160
- }
161
- selected.forEach(component => {
162
- this._componentDrawer(context, component, scale, (context, component, scale) => {
163
- this.reversedModelers.forEach(modeler => modeler.draw(context, component, scale));
164
- });
165
- });
166
- this.anchorTarget &&
167
- this._componentDrawer(context, this.anchorTarget, scale, (context, component, scale) => {
168
- this.anchorHandler.draw(context, component, scale);
169
- });
170
- }
171
- get anchorTarget() {
172
- var _a;
173
- if (this.currentModeler !== this.anchorHandler &&
174
- this.currentModeler !== this.pathHandler &&
175
- !((_a = this.hovered) === null || _a === void 0 ? void 0 : _a.isLine())) {
176
- this._anchorTarget = this.hovered;
177
- }
178
- return this._anchorTarget;
179
- }
180
- set anchorTarget(target) {
181
- this._anchorTarget = target;
182
- }
183
- get hovered() {
184
- return this._hovered;
185
- }
186
- set hovered(hovered) {
187
- this._hovered = hovered;
188
- this.invalidate();
189
- }
190
- startLinkProcess(linkFrom, linkModel, e) {
191
- this.currentModeler = this.pathHandler;
192
- this.processingLink = this.pathHandler.startLinkProcess(linkFrom, linkModel, e);
193
- this.counterEnd = this.processingLink.fromEnd;
194
- this.processingLink.trigger('tag');
195
- }
196
- set counterEnd(anchor) {
197
- this.currentModeler = this.pathHandler;
198
- this._counter_end = anchor;
199
- }
200
- get counterEnd() {
201
- return this._counter_end;
202
- }
203
- endLinkProcess() {
204
- var _a;
205
- (_a = this.processingLink) === null || _a === void 0 ? void 0 : _a.trigger('tagreset');
206
- this.processingLink = null;
207
- this._counter_end = null;
208
- }
209
- get eventMap() {
210
- return {
211
- 'model-layer': {
212
- '(all)': {
213
- change: this.onchange_model,
214
- wheel: this.onwheel_scale,
215
- drop: this.ondrop
216
- },
217
- '(descendant)': {
218
- mouseenter: this.onmouseenter,
219
- mouseleave: this.onmouseleave
220
- }
221
- },
222
- '(root)': {
223
- '(self)': {
224
- selected: this.onselected,
225
- keydown: this.onkeydown,
226
- keyup: this.onkeyup
227
- }
228
- }
229
- };
230
- }
231
- onmouseenter(e, hint) {
232
- this.hovered = hint === null || hint === void 0 ? void 0 : hint.origin;
233
- }
234
- onmouseleave(e, hint) {
235
- this.hovered = null;
236
- }
237
- onkeydown(e) {
238
- if (e.key == 'Alt') {
239
- this._control_mode = true;
240
- this.invalidate();
241
- }
242
- }
243
- onkeyup(e) {
244
- if (e.key == 'Alt') {
245
- this._control_mode = false;
246
- this.invalidate();
247
- }
248
- }
249
- onselected(after, before) {
250
- this.invalidate();
251
- }
252
- onchange_model(after, before, hint) {
253
- var { origin, deliverer } = hint;
254
- if (origin === deliverer) {
255
- if (after.translate)
256
- // Model Base 레이어와 동일한 translate를 유지하도록 한다.
257
- this.set('translate', after.translate);
258
- if (after.rotation !== undefined)
259
- // Model Base 레이어와 동일한 rotation을 유지하도록 한다.
260
- this.set('rotation', after.rotation);
261
- if (after.scale)
262
- // Model Base 레이어와 동일한 scale을 유지하도록 한다.
263
- this.set('scale', after.scale);
264
- }
265
- // Model Base 레이어에서 발생하는 대부분의 변화는 Selection 레이어에서도 반영해야한다.
266
- this.invalidate();
267
- }
268
- /* default UI Event Handlers. */
269
- ondblclick(e) {
270
- if (typeof this.currentModeler.ondblclick === 'function')
271
- this.currentModeler.ondblclick(e);
272
- this.invalidate();
273
- }
274
- onmousedown(e) {
275
- this.currentModeler.onmousedown(e);
276
- this.invalidate();
277
- }
278
- onmouseup(e) {
279
- if (typeof this.currentModeler.onmouseup === 'function')
280
- this.currentModeler.onmouseup(e);
281
- this.invalidate();
282
- }
283
- ondragstart(e) {
284
- this.currentModeler.ondragstart(e);
285
- this._state_dragging = true;
286
- }
287
- ondragmove(e) {
288
- this.currentModeler.ondragmove(e);
289
- this.invalidate();
290
- }
291
- ondragend(e) {
292
- this._state_dragging = false;
293
- this.currentModeler.ondragend(e);
294
- this.invalidate();
295
- }
296
- ondrop(e, hint) {
297
- /* 현재는 이미지 파일 만 추가할 수 있음 */
298
- var { origin } = hint;
299
- var transfered = e.dataTransfer.files;
300
- if (transfered.length < 1)
301
- return;
302
- let center = this.rootModel.transcoordC2S(e.offsetX, e.offsetY);
303
- let rootModel = this.rootModel;
304
- Promise.all(Array.from(transfered).map(file => {
305
- return new Promise((resolve, reject) => {
306
- let reader = new FileReader();
307
- reader.addEventListener('loadend', e => {
308
- resolve(reader.result);
309
- });
310
- ['error', 'abort'].forEach(event => reader.addEventListener(event, e => {
311
- reject(e);
312
- }));
313
- reader.readAsDataURL(file);
314
- });
315
- })).then(files => {
316
- if (e.altKey) {
317
- CommandChange.around(this.app.commander, () => {
318
- origin.ondropfile(transfered, files);
319
- });
320
- this.selected = [origin];
321
- return;
322
- }
323
- let pendings = [];
324
- let changes = files
325
- .map((file, idx) => {
326
- let component;
327
- let type = transfered[idx].type;
328
- let name = transfered[idx].name;
329
- if (type.startsWith('image/')) {
330
- component = compile({
331
- type: type.startsWith('image/gif') ? 'gif-view' : 'image-view',
332
- top: 0,
333
- left: 0,
334
- width: 200,
335
- height: 200,
336
- src: file
337
- }, rootModel.app);
338
- pendings.push(new Promise((resolve, reject) => {
339
- let image = new Image();
340
- image.src = file;
341
- image.onload = () => {
342
- component.set({
343
- width: image.width,
344
- height: image.height
345
- });
346
- resolve();
347
- };
348
- image.onerror = e => {
349
- reject(e);
350
- };
351
- }));
352
- }
353
- else if (type.startsWith('audio/')) {
354
- component = compile({
355
- type: 'audio',
356
- top: 0,
357
- left: 0,
358
- width: 100,
359
- height: 100,
360
- src: file
361
- }, rootModel.app);
362
- }
363
- else if (type.startsWith('vnd.ms-excel/') || /\.xlsx?$/.test(name)) {
364
- component = compile({
365
- type: 'excel',
366
- top: 0,
367
- left: 0,
368
- width: 100,
369
- height: 100,
370
- src: file
371
- }, rootModel.app);
372
- }
373
- else {
374
- console.log('droped file', transfered[idx]);
375
- }
376
- if (component) {
377
- component.center = center;
378
- center.x += 50;
379
- center.y += 50;
380
- }
381
- return component;
382
- })
383
- .filter(Boolean)
384
- .map(component => {
385
- return {
386
- component: component,
387
- to_container: rootModel
388
- };
389
- });
390
- if (changes.length > 0) {
391
- Promise.all(pendings).then(() => {
392
- this.app.commander.execute(new CommandMigrate({ changes }));
393
- this.selected = changes.map(change => change.component);
394
- }, reason => {
395
- console.error(reason);
396
- });
397
- }
398
- }, reason => {
399
- console.error(reason);
400
- });
401
- }
402
- onwheel_scale(e, hint) {
403
- /* shiftKey + wheel 은 deltaX 값을 변화시킨다. */
404
- if (e.deltaY == 0 && e.deltaX == 0)
405
- return;
406
- var model_layer = hint.deliverer;
407
- if (e.shiftKey) {
408
- if (navigator.userAgent.indexOf('Win') != -1) {
409
- var dir = e.deltaY < 0 ? 1 : -1;
410
- }
411
- else {
412
- var dir = e.deltaX < 0 ? 1 : -1;
413
- }
414
- CommandChange.around(this.app.commander, () => {
415
- /* 선택된 컴포넌트의 텍스트 사이즈를 조절한다. */
416
- model_layer.selected.forEach(component => {
417
- let fontSize = component.get('fontSize') || Const.DEFAULT.FONT_SIZE;
418
- if (fontSize < 1)
419
- fontSize = 1;
420
- fontSize += dir;
421
- component.set('fontSize', fontSize);
422
- });
423
- });
424
- }
425
- else {
426
- var dir = e.deltaY < 0 ? 1 : -1;
427
- let scale = model_layer.get('scale') || { x: 1, y: 1 };
428
- let translate = model_layer.get('translate');
429
- let x = e.offsetX;
430
- let y = e.offsetY;
431
- let p = model_layer.transcoordC2S(x, y);
432
- let delta = dir * 0.1;
433
- let newscale = {
434
- x: scale.x + delta,
435
- y: scale.y + delta
436
- };
437
- if ((dir < 0 && scale.x < 0.2) || (dir > 0 && scale.x > 10))
438
- return;
439
- /* 휠을 밀면.. 확대 : zoom in */
440
- /* 휠을 당기면.. 축소 : zoom out */
441
- model_layer.set('scale', newscale);
442
- let newp = model_layer.transcoordC2S(x, y);
443
- model_layer.set('translate', {
444
- x: translate.x + (newp.x - p.x) * newscale.x,
445
- y: translate.y + (newp.y - p.y) * newscale.y
446
- });
447
- }
448
- }
449
- }
450
- Component.register('modeling-layer', ModelingLayer);
451
- //# sourceMappingURL=modeling-layer.js.map