@hatiolab/things-scene 10.0.0-beta.8 → 10.0.0-beta.80

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 (231) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist-types/animation/animate.d.ts.map +1 -1
  3. package/dist-types/animation/animations/animation.d.ts.map +1 -1
  4. package/dist-types/animation/animations/heartbeat.d.ts +0 -7
  5. package/dist-types/animation/animations/heartbeat.d.ts.map +1 -1
  6. package/dist-types/animation/interfaces.d.ts +1 -1
  7. package/dist-types/animation/interfaces.d.ts.map +1 -1
  8. package/dist-types/command/command-migrate.d.ts.map +1 -1
  9. package/dist-types/command/snapshot-commander.d.ts.map +1 -1
  10. package/dist-types/components/audio.d.ts.map +1 -1
  11. package/dist-types/components/component-data.d.ts +24 -0
  12. package/dist-types/components/component-data.d.ts.map +1 -1
  13. package/dist-types/components/container-abstract.d.ts +26 -1
  14. package/dist-types/components/container-abstract.d.ts.map +1 -1
  15. package/dist-types/components/data/data.d.ts.map +1 -1
  16. package/dist-types/components/drawer/fill.d.ts.map +1 -1
  17. package/dist-types/components/drawer/stroke.d.ts.map +1 -1
  18. package/dist-types/components/geometry/snap-guide.d.ts +45 -0
  19. package/dist-types/components/geometry/snap-guide.d.ts.map +1 -0
  20. package/dist-types/components/geometry/transcoord.d.ts.map +1 -1
  21. package/dist-types/components/global-ref.d.ts.map +1 -1
  22. package/dist-types/components/group.d.ts +1 -0
  23. package/dist-types/components/group.d.ts.map +1 -1
  24. package/dist-types/components/html/shadow.d.ts +33 -1
  25. package/dist-types/components/html/shadow.d.ts.map +1 -1
  26. package/dist-types/components/image-view.d.ts.map +1 -1
  27. package/dist-types/components/index.d.ts +2 -0
  28. package/dist-types/components/index.d.ts.map +1 -1
  29. package/dist-types/components/line.d.ts +2 -1
  30. package/dist-types/components/line.d.ts.map +1 -1
  31. package/dist-types/components/mixins/three-d-only.d.ts +243 -0
  32. package/dist-types/components/mixins/three-d-only.d.ts.map +1 -0
  33. package/dist-types/components/mixins/value-holder.d.ts.map +1 -1
  34. package/dist-types/components/mutater/path.d.ts.map +1 -1
  35. package/dist-types/components/root-container.d.ts +11 -4
  36. package/dist-types/components/root-container.d.ts.map +1 -1
  37. package/dist-types/components/service-component.d.ts +264 -0
  38. package/dist-types/components/service-component.d.ts.map +1 -0
  39. package/dist-types/decorator/decorator-registry.d.ts +4 -0
  40. package/dist-types/decorator/decorator-registry.d.ts.map +1 -1
  41. package/dist-types/decorator/decorators/animated-icon-decorator.d.ts.map +1 -1
  42. package/dist-types/decorator/decorators/data-spread-decorator.d.ts +16 -0
  43. package/dist-types/decorator/decorators/data-spread-decorator.d.ts.map +1 -1
  44. package/dist-types/diagnostics/data-lag-tracker.d.ts +44 -0
  45. package/dist-types/diagnostics/data-lag-tracker.d.ts.map +1 -0
  46. package/dist-types/diagnostics/inspector.d.ts +14 -4
  47. package/dist-types/diagnostics/inspector.d.ts.map +1 -1
  48. package/dist-types/diagnostics/load-tracker.d.ts +82 -0
  49. package/dist-types/diagnostics/load-tracker.d.ts.map +1 -0
  50. package/dist-types/diagnostics/loading-overlay.d.ts +41 -0
  51. package/dist-types/diagnostics/loading-overlay.d.ts.map +1 -0
  52. package/dist-types/effect/shadow.d.ts +3 -1
  53. package/dist-types/effect/shadow.d.ts.map +1 -1
  54. package/dist-types/event-map/index.d.ts +1 -0
  55. package/dist-types/event-map/index.d.ts.map +1 -1
  56. package/dist-types/event-map/transition-handler.d.ts +2 -0
  57. package/dist-types/event-map/transition-handler.d.ts.map +1 -0
  58. package/dist-types/interfaces/providers.d.ts +20 -3
  59. package/dist-types/interfaces/providers.d.ts.map +1 -1
  60. package/dist-types/interfaces/rendering.d.ts +86 -14
  61. package/dist-types/interfaces/rendering.d.ts.map +1 -1
  62. package/dist-types/layer/action/popup.d.ts +1 -0
  63. package/dist-types/layer/action/popup.d.ts.map +1 -1
  64. package/dist-types/layer/dual-canvas-layer.d.ts.map +1 -1
  65. package/dist-types/layer/index.d.ts +1 -0
  66. package/dist-types/layer/index.d.ts.map +1 -1
  67. package/dist-types/layer/layer.d.ts +1 -0
  68. package/dist-types/layer/layer.d.ts.map +1 -1
  69. package/dist-types/layer/model-layer.d.ts +53 -7
  70. package/dist-types/layer/model-layer.d.ts.map +1 -1
  71. package/dist-types/layer/modeler/path-handler.d.ts.map +1 -1
  72. package/dist-types/layer/modeling-layer.d.ts.map +1 -1
  73. package/dist-types/layer/selection/selected-finder.d.ts +1 -1
  74. package/dist-types/layer/selection/selected-finder.d.ts.map +1 -1
  75. package/dist-types/layer/selection-layer.d.ts.map +1 -1
  76. package/dist-types/layer/snap-guide-layer.d.ts +23 -0
  77. package/dist-types/layer/snap-guide-layer.d.ts.map +1 -0
  78. package/dist-types/search/index.d.ts +3 -0
  79. package/dist-types/search/index.d.ts.map +1 -0
  80. package/dist-types/search/scene-search-engine.d.ts +65 -0
  81. package/dist-types/search/scene-search-engine.d.ts.map +1 -0
  82. package/dist-types/search/search-overlay.d.ts +69 -0
  83. package/dist-types/search/search-overlay.d.ts.map +1 -0
  84. package/dist-types/things-scene/api/align.d.ts.map +1 -1
  85. package/dist-types/things-scene/api/distribute.d.ts.map +1 -1
  86. package/dist-types/things-scene/api/place.d.ts.map +1 -1
  87. package/dist-types/things-scene/application-context.d.ts +43 -0
  88. package/dist-types/things-scene/application-context.d.ts.map +1 -1
  89. package/dist-types/things-scene/create.d.ts +38 -3
  90. package/dist-types/things-scene/create.d.ts.map +1 -1
  91. package/dist-types/things-scene/index.d.ts +7 -0
  92. package/dist-types/things-scene/index.d.ts.map +1 -1
  93. package/dist-types/things-scene/scene.d.ts +64 -1
  94. package/dist-types/things-scene/scene.d.ts.map +1 -1
  95. package/dist-types/threed/arrow-3d.d.ts +13 -4
  96. package/dist-types/threed/arrow-3d.d.ts.map +1 -1
  97. package/dist-types/threed/environments/base-environment.d.ts +9 -0
  98. package/dist-types/threed/environments/base-environment.d.ts.map +1 -0
  99. package/dist-types/threed/environments/cloudy-environment.d.ts +10 -0
  100. package/dist-types/threed/environments/cloudy-environment.d.ts.map +1 -0
  101. package/dist-types/threed/environments/factory-environment.d.ts +2 -3
  102. package/dist-types/threed/environments/factory-environment.d.ts.map +1 -1
  103. package/dist-types/threed/environments/home-environment.d.ts +2 -3
  104. package/dist-types/threed/environments/home-environment.d.ts.map +1 -1
  105. package/dist-types/threed/environments/office-environment.d.ts +2 -3
  106. package/dist-types/threed/environments/office-environment.d.ts.map +1 -1
  107. package/dist-types/threed/environments/rainy-environment.d.ts +10 -0
  108. package/dist-types/threed/environments/rainy-environment.d.ts.map +1 -0
  109. package/dist-types/threed/environments/studio-environment.d.ts +2 -3
  110. package/dist-types/threed/environments/studio-environment.d.ts.map +1 -1
  111. package/dist-types/threed/environments/sunny-environment.d.ts +10 -0
  112. package/dist-types/threed/environments/sunny-environment.d.ts.map +1 -0
  113. package/dist-types/threed/environments/warehouse-environment.d.ts +2 -3
  114. package/dist-types/threed/environments/warehouse-environment.d.ts.map +1 -1
  115. package/dist-types/threed/factories/banner.d.ts +2 -1
  116. package/dist-types/threed/factories/banner.d.ts.map +1 -1
  117. package/dist-types/threed/factories/camera.d.ts +1 -0
  118. package/dist-types/threed/factories/camera.d.ts.map +1 -1
  119. package/dist-types/threed/factories/cube.d.ts +1 -0
  120. package/dist-types/threed/factories/cube.d.ts.map +1 -1
  121. package/dist-types/threed/factories/cylinder.d.ts +1 -0
  122. package/dist-types/threed/factories/cylinder.d.ts.map +1 -1
  123. package/dist-types/threed/factories/decal.d.ts +502 -0
  124. package/dist-types/threed/factories/decal.d.ts.map +1 -0
  125. package/dist-types/threed/factories/floor-plate.d.ts +10 -0
  126. package/dist-types/threed/factories/floor-plate.d.ts.map +1 -0
  127. package/dist-types/threed/factories/gltf-object.d.ts +13 -2
  128. package/dist-types/threed/factories/gltf-object.d.ts.map +1 -1
  129. package/dist-types/threed/factories/group.d.ts +2 -0
  130. package/dist-types/threed/factories/group.d.ts.map +1 -0
  131. package/dist-types/threed/factories/light.d.ts +1 -0
  132. package/dist-types/threed/factories/light.d.ts.map +1 -1
  133. package/dist-types/threed/factories/line.d.ts +10 -0
  134. package/dist-types/threed/factories/line.d.ts.map +1 -0
  135. package/dist-types/threed/factories/ortholine.d.ts +10 -0
  136. package/dist-types/threed/factories/ortholine.d.ts.map +1 -0
  137. package/dist-types/threed/factories/polygon.d.ts.map +1 -1
  138. package/dist-types/threed/factories/polyline.d.ts +10 -0
  139. package/dist-types/threed/factories/polyline.d.ts.map +1 -0
  140. package/dist-types/threed/factories/rect.d.ts.map +1 -1
  141. package/dist-types/threed/factories/sphere.d.ts +6 -0
  142. package/dist-types/threed/factories/sphere.d.ts.map +1 -1
  143. package/dist-types/threed/factories/sprite.d.ts +1 -0
  144. package/dist-types/threed/factories/sprite.d.ts.map +1 -1
  145. package/dist-types/threed/factories/triangle.d.ts.map +1 -1
  146. package/dist-types/threed/factories/wall.d.ts +1 -0
  147. package/dist-types/threed/factories/wall.d.ts.map +1 -1
  148. package/dist-types/threed/floor/floor.d.ts.map +1 -1
  149. package/dist-types/threed/handle-3d.d.ts +21 -0
  150. package/dist-types/threed/handle-3d.d.ts.map +1 -0
  151. package/dist-types/threed/index.d.ts +15 -0
  152. package/dist-types/threed/index.d.ts.map +1 -1
  153. package/dist-types/threed/managers/box-selection-manager.d.ts +26 -0
  154. package/dist-types/threed/managers/box-selection-manager.d.ts.map +1 -0
  155. package/dist-types/threed/managers/camera-bookmark-manager.d.ts +127 -0
  156. package/dist-types/threed/managers/camera-bookmark-manager.d.ts.map +1 -0
  157. package/dist-types/threed/managers/camera-manager.d.ts +9 -3
  158. package/dist-types/threed/managers/camera-manager.d.ts.map +1 -1
  159. package/dist-types/threed/managers/controls-manager.d.ts +25 -4
  160. package/dist-types/threed/managers/controls-manager.d.ts.map +1 -1
  161. package/dist-types/threed/managers/event-manager3d.d.ts +8 -0
  162. package/dist-types/threed/managers/event-manager3d.d.ts.map +1 -1
  163. package/dist-types/threed/managers/gizmo-manager.d.ts +6 -0
  164. package/dist-types/threed/managers/gizmo-manager.d.ts.map +1 -1
  165. package/dist-types/threed/managers/gizmo-operation-manager.d.ts +55 -1
  166. package/dist-types/threed/managers/gizmo-operation-manager.d.ts.map +1 -1
  167. package/dist-types/threed/managers/index.d.ts +3 -0
  168. package/dist-types/threed/managers/index.d.ts.map +1 -1
  169. package/dist-types/threed/managers/interaction-manager.d.ts +17 -0
  170. package/dist-types/threed/managers/interaction-manager.d.ts.map +1 -1
  171. package/dist-types/threed/managers/light-manager.d.ts +15 -0
  172. package/dist-types/threed/managers/light-manager.d.ts.map +1 -1
  173. package/dist-types/threed/managers/renderer-manager.d.ts +37 -0
  174. package/dist-types/threed/managers/renderer-manager.d.ts.map +1 -1
  175. package/dist-types/threed/managers/scene-manager.d.ts +6 -2
  176. package/dist-types/threed/managers/scene-manager.d.ts.map +1 -1
  177. package/dist-types/threed/managers/types.d.ts +5 -2
  178. package/dist-types/threed/managers/types.d.ts.map +1 -1
  179. package/dist-types/threed/managers/vertex-gizmo-manager.d.ts +109 -0
  180. package/dist-types/threed/managers/vertex-gizmo-manager.d.ts.map +1 -0
  181. package/dist-types/threed/material-3d.d.ts +5 -2
  182. package/dist-types/threed/material-3d.d.ts.map +1 -1
  183. package/dist-types/threed/ratio-lock-utils.d.ts +9 -0
  184. package/dist-types/threed/ratio-lock-utils.d.ts.map +1 -0
  185. package/dist-types/threed/real-object-dom-element.d.ts +1 -0
  186. package/dist-types/threed/real-object-dom-element.d.ts.map +1 -1
  187. package/dist-types/threed/real-object-dom-texture.d.ts +9 -0
  188. package/dist-types/threed/real-object-dom-texture.d.ts.map +1 -1
  189. package/dist-types/threed/real-object-external-model.d.ts +24 -0
  190. package/dist-types/threed/real-object-external-model.d.ts.map +1 -0
  191. package/dist-types/threed/real-object-extrude.d.ts +6 -0
  192. package/dist-types/threed/real-object-extrude.d.ts.map +1 -1
  193. package/dist-types/threed/real-object-gltf.d.ts +39 -11
  194. package/dist-types/threed/real-object-gltf.d.ts.map +1 -1
  195. package/dist-types/threed/real-object-group.d.ts +2 -0
  196. package/dist-types/threed/real-object-group.d.ts.map +1 -1
  197. package/dist-types/threed/real-object-line.d.ts +83 -0
  198. package/dist-types/threed/real-object-line.d.ts.map +1 -0
  199. package/dist-types/threed/real-object-mesh.d.ts.map +1 -1
  200. package/dist-types/threed/real-object-plane-2d.d.ts +23 -0
  201. package/dist-types/threed/real-object-plane-2d.d.ts.map +1 -1
  202. package/dist-types/threed/real-object-service.d.ts +14 -0
  203. package/dist-types/threed/real-object-service.d.ts.map +1 -0
  204. package/dist-types/threed/real-object-sprite.d.ts +7 -1
  205. package/dist-types/threed/real-object-sprite.d.ts.map +1 -1
  206. package/dist-types/threed/real-object-text.d.ts +3 -0
  207. package/dist-types/threed/real-object-text.d.ts.map +1 -1
  208. package/dist-types/threed/real-object.d.ts +122 -6
  209. package/dist-types/threed/real-object.d.ts.map +1 -1
  210. package/dist-types/threed/text-editor-3d.d.ts +11 -0
  211. package/dist-types/threed/text-editor-3d.d.ts.map +1 -0
  212. package/dist-types/threed/texture/canvas-texture.d.ts +7 -0
  213. package/dist-types/threed/texture/canvas-texture.d.ts.map +1 -1
  214. package/dist-types/threed/texture/fillstyle-texture.d.ts +42 -0
  215. package/dist-types/threed/texture/fillstyle-texture.d.ts.map +1 -0
  216. package/dist-types/threed/texture/text-texture.d.ts +15 -0
  217. package/dist-types/threed/texture/text-texture.d.ts.map +1 -1
  218. package/dist-types/threed/three-capability.d.ts +142 -6
  219. package/dist-types/threed/three-capability.d.ts.map +1 -1
  220. package/dist-types/threed/three-container.d.ts +0 -1
  221. package/dist-types/threed/three-container.d.ts.map +1 -1
  222. package/dist-types/threed/three-dimensional-container.d.ts +0 -1
  223. package/dist-types/threed/three-dimensional-container.d.ts.map +1 -1
  224. package/dist-types/threed/utils/dispose.d.ts.map +1 -1
  225. package/dist-types/transition/transition-effect.d.ts +84 -0
  226. package/dist-types/transition/transition-effect.d.ts.map +1 -0
  227. package/package.json +2 -1
  228. package/things-scene-min.js +12 -13
  229. package/things-scene-min.js.map +1 -1
  230. package/things-scene.mjs +8 -9
  231. package/things-scene.mjs.map +1 -1
@@ -5,8 +5,14 @@ import { RealObjectMesh } from '../real-object-mesh.js';
5
5
  export declare class Sphere3D extends RealObjectMesh {
6
6
  buildGeometry(): void;
7
7
  updateDimension(): void;
8
+ /**
9
+ * Sphere는 state.depth가 아닌 rz(또는 rx)로 Y 크기가 결정된다.
10
+ * 기본 state.depth 폴백을 쓰면 origin 보정이 어긋나 볼륨이 zPos 양쪽으로 반씩 걸친다.
11
+ */
12
+ get effectiveDepth(): number;
8
13
  }
9
14
  export declare class Sphere extends Ellipse {
15
+ get hasTextProperty(): boolean;
10
16
  is3dish(): boolean;
11
17
  buildRealObject(): IRealObject | undefined;
12
18
  get nature(): ComponentNature;
@@ -1 +1 @@
1
- {"version":3,"file":"sphere.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/sphere.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,OAAO,MAAM,6BAA6B,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAUvD,qBAAa,QAAS,SAAQ,cAAc;IAC1C,aAAa;IAWb,eAAe,IAAI,IAAI;CAIxB;AAED,qBACa,MAAO,SAAQ,OAAO;IACjC,OAAO;IAIP,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,IAAI,MAAM,IAAI,eAAe,CAE5B;CACF"}
1
+ {"version":3,"file":"sphere.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/sphere.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,OAAO,MAAM,6BAA6B,CAAA;AAEjD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAUvD,qBAAa,QAAS,SAAQ,cAAc;IAC1C,aAAa;IAWb,eAAe,IAAI,IAAI;IAKvB;;;OAGG;IACH,IAAa,cAAc,IAAI,MAAM,CAIpC;CACF;AAED,qBACa,MAAO,SAAQ,OAAO;IACjC,IAAI,eAAe,YAAmB;IACtC,OAAO;IAIP,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,IAAI,MAAM,IAAI,eAAe,CAE5B;CACF"}
@@ -241,6 +241,7 @@ declare const Sprite_base: {
241
241
  };
242
242
  } & typeof Shape;
243
243
  export declare class Sprite extends Sprite_base {
244
+ get hasTextProperty(): boolean;
244
245
  is3dish(): boolean;
245
246
  buildRealObject(): IRealObject | undefined;
246
247
  get nature(): ComponentNature;
@@ -1 +1 @@
1
- {"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/sprite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,MAAM,2BAA2B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAY7C,qBACa,MAAO,SAAQ,WAAe;IACzC,OAAO,IAAI,OAAO;IAIlB,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,IAAI,MAAM,oBAET;CACF"}
1
+ {"version":3,"file":"sprite.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/sprite.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,MAAM,2BAA2B,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAY7C,qBACa,MAAO,SAAQ,WAAe;IACzC,IAAI,eAAe,YAAmB;IACtC,OAAO,IAAI,OAAO;IAIlB,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,IAAI,MAAM,oBAET;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"triangle.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/triangle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,qBAAa,eAAgB,SAAQ,iBAAiB;IACpD,IAAI,KAAK,gBAUR;CACF"}
1
+ {"version":3,"file":"triangle.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/triangle.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7D,qBAAa,eAAgB,SAAQ,iBAAiB;IACpD,IAAI,KAAK,gBAyCR;CACF"}
@@ -245,6 +245,7 @@ declare const Wall_base: {
245
245
  };
246
246
  } & typeof Shape;
247
247
  export declare class Wall extends Wall_base {
248
+ get hasTextProperty(): boolean;
248
249
  is3dish(): boolean;
249
250
  buildRealObject(): IRealObject | undefined;
250
251
  get nature(): ComponentNature;
@@ -1 +1 @@
1
- {"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/wall.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,MAAM,2BAA2B,CAAA;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAiBvD,qBAAa,MAAO,SAAQ,cAAc;IACxC,aAAa;CAQd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBACa,IAAK,SAAQ,SAAe;IACvC,OAAO;IAIP,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,IAAI,MAAM,oBAET;CACF"}
1
+ {"version":3,"file":"wall.d.ts","sourceRoot":"","sources":["../../../src/threed/factories/wall.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAChE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAA;AAClE,OAAO,KAAK,MAAM,2BAA2B,CAAA;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAiBvD,qBAAa,MAAO,SAAQ,cAAc;IACxC,aAAa;CAQd;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAED,qBACa,IAAK,SAAQ,SAAe;IACvC,IAAI,eAAe,YAAmB;IACtC,OAAO;IAIP,eAAe,IAAI,WAAW,GAAG,SAAS;IAI1C,IAAI,MAAM,oBAET;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"floor.d.ts","sourceRoot":"","sources":["../../../src/threed/floor/floor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAe1D,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,CAuDxE"}
1
+ {"version":3,"file":"floor.d.ts","sourceRoot":"","sources":["../../../src/threed/floor/floor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAqB1D,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,GAAG,KAAK,CAAC,IAAI,GAAG,SAAS,CAuExE"}
@@ -0,0 +1,21 @@
1
+ import * as THREE from 'three';
2
+ import type Component from '../components/component.js';
3
+ export interface SelectionHandleOptions {
4
+ /** Sphere radius (scene units). Default 5. */
5
+ size?: number;
6
+ /** Diffuse color (hex int). Default 0x44aacc (cyan). */
7
+ color?: number;
8
+ /** Emissive accent color (hex int). Default 0x224466. */
9
+ emissive?: number;
10
+ /** Position relative to parent. Default [0, 0, 0]. */
11
+ position?: [number, number, number];
12
+ /** Initial visibility. Default = `component.app.isEditMode`. */
13
+ visible?: boolean;
14
+ }
15
+ /**
16
+ * Creates a small handle mesh suitable for selecting an otherwise non-
17
+ * raycastable 3D component. Returns the mesh — caller adds it to their
18
+ * scene-graph root (typically `this.object3d.add(handle)`).
19
+ */
20
+ export declare function createSelectionHandle3D(component: Component, options?: SelectionHandleOptions): THREE.Mesh;
21
+ //# sourceMappingURL=handle-3d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handle-3d.d.ts","sourceRoot":"","sources":["../../src/threed/handle-3d.ts"],"names":[],"mappings":"AAwDA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,SAAS,MAAM,4BAA4B,CAAA;AAEvD,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,wDAAwD;IACxD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,yDAAyD;IACzD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IACnC,gEAAgE;IAChE,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAWD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,SAAS,EACpB,OAAO,GAAE,sBAA2B,GACnC,KAAK,CAAC,IAAI,CAsDZ"}
@@ -15,6 +15,12 @@ import './factories/camera.js';
15
15
  import './factories/gltf-object.js';
16
16
  import './factories/light.js';
17
17
  import './factories/wall.js';
18
+ import './factories/floor-plate.js';
19
+ import './factories/decal.js';
20
+ import './factories/line.js';
21
+ import './factories/polyline.js';
22
+ import './factories/ortholine.js';
23
+ import './factories/group.js';
18
24
  export * from './common.js';
19
25
  export * from './interfaces.js';
20
26
  export * from './material-3d.js';
@@ -26,6 +32,7 @@ export * from './real-object-extrude.js';
26
32
  export * from './real-object-camera.js';
27
33
  export * from './real-object-dom-element.js';
28
34
  export * from './real-object-dom-texture.js';
35
+ export * from './real-object-external-model.js';
29
36
  export * from './real-object-gltf.js';
30
37
  export * from './real-object-group.js';
31
38
  export * from './real-object-mesh.js';
@@ -34,6 +41,7 @@ export * from './real-object-scene.js';
34
41
  export * from './real-object-sprite-2d.js';
35
42
  export * from './real-object-plane-2d.js';
36
43
  export * from './real-object-sprite.js';
44
+ export * from './real-object-service.js';
37
45
  export * from './real-object-text.js';
38
46
  export { EllipseExtrude } from './factories/ellipse.js';
39
47
  export { RectExtrude } from './factories/rect.js';
@@ -50,12 +58,19 @@ export { Camera3D, Camera } from './factories/camera.js';
50
58
  export { GLTFObject } from './factories/gltf-object.js';
51
59
  export { LightObject, PointLight } from './factories/light.js';
52
60
  export { Wall3D, Wall } from './factories/wall.js';
61
+ export { FloorPlate } from './factories/floor-plate.js';
62
+ export { Line3D } from './factories/line.js';
63
+ export { Polyline3D } from './factories/polyline.js';
64
+ export { OrthoLine3D } from './factories/ortholine.js';
65
+ export * from './real-object-line.js';
53
66
  export { ThreeCapability } from './three-capability.js';
54
67
  export type { ThreeCapabilityHost } from './three-capability.js';
55
68
  export { ThreeContainer } from './three-container.js';
56
69
  export * from './managers/index.js';
57
70
  export { buildArrow3D } from './arrow-3d.js';
58
71
  export type { ArrowStyle3D, TipType, TipSize, LineDash } from './arrow-3d.js';
72
+ export { createSelectionHandle3D } from './handle-3d.js';
73
+ export type { SelectionHandleOptions } from './handle-3d.js';
59
74
  export { disposeObject3D } from './utils/dispose.js';
60
75
  export { projectToScreen } from './utils/project.js';
61
76
  export { createCanvasTexture, renderCanvasTexture } from './texture/canvas-texture.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/threed/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/threed/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import * as THREE from 'three';
2
+ import Component from '../../components/component.js';
3
+ /**
4
+ * 3D 편집 모드에서 Space+드래그로 사각형 영역 선택을 지원하는 매니저.
5
+ *
6
+ * DOM 오버레이로 선택 사각형을 표시하고, 각 오브젝트의 3D 위치를
7
+ * 카메라로 투영하여 사각형 내에 있는 오브젝트를 선택한다.
8
+ */
9
+ export declare class BoxSelectionManager {
10
+ private _overlay;
11
+ private _hostElement;
12
+ private _startX;
13
+ private _startY;
14
+ private _currentX;
15
+ private _currentY;
16
+ private _active;
17
+ get isActive(): boolean;
18
+ setup(hostElement: HTMLElement): void;
19
+ startSelection(x: number, y: number): void;
20
+ updateSelection(x: number, y: number): void;
21
+ endSelection(camera: THREE.Camera, scene: THREE.Scene, components: Component[]): Component[];
22
+ cancelSelection(): void;
23
+ destroy(): void;
24
+ private _updateOverlay;
25
+ }
26
+ //# sourceMappingURL=box-selection-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box-selection-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/box-selection-manager.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,OAAO,SAAS,MAAM,+BAA+B,CAAA;AAGrD;;;;;GAKG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,SAAS,CAAI;IACrB,OAAO,CAAC,OAAO,CAAQ;IAEvB,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,KAAK,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAIrC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAsB1C,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAO3C,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,SAAS,EAAE;IAwD5F,eAAe,IAAI,IAAI;IAQvB,OAAO,IAAI,IAAI;IAKf,OAAO,CAAC,cAAc;CAavB"}
@@ -0,0 +1,127 @@
1
+ import * as THREE from 'three';
2
+ export type EasingType = 'ease-in-out' | 'ease-in' | 'ease-out' | 'linear';
3
+ export interface SplineContext {
4
+ prevPos: THREE.Vector3;
5
+ nextPos: THREE.Vector3;
6
+ }
7
+ export interface CameraBookmark {
8
+ name?: string;
9
+ position: {
10
+ x: number;
11
+ y: number;
12
+ z: number;
13
+ };
14
+ target: {
15
+ x: number;
16
+ y: number;
17
+ z: number;
18
+ };
19
+ /** 이 슬롯에서 머무르는 시간 (ms, 기본 2000) */
20
+ holdDuration?: number;
21
+ /** 이 슬롯으로 이동하는 전환 시간 (ms, 기본 1200) */
22
+ transitionDuration?: number;
23
+ /** 전환 이징 함수 (기본 ease-in-out) */
24
+ easing?: EasingType;
25
+ /** 재생 목록에서 제외 */
26
+ excludeFromPlay?: boolean;
27
+ }
28
+ export declare class CameraBookmarkManager {
29
+ private _slots;
30
+ private _animating;
31
+ private _animationId?;
32
+ private _animationProgress;
33
+ private _playStartOffset;
34
+ private _lastPlayProgress;
35
+ private _playIndex;
36
+ private _playing;
37
+ private _orbitRotating;
38
+ private _orbitPaused;
39
+ private _onInvalidate?;
40
+ private _onAnimationComplete?;
41
+ get isAnimating(): boolean;
42
+ get isPlaying(): boolean;
43
+ get isOrbitRotating(): boolean;
44
+ get isOrbitPaused(): boolean;
45
+ get playIndex(): number;
46
+ get lastPlayProgress(): number;
47
+ /**
48
+ * 전체 경로 진행률 0~1 (재생 중: 세그먼트 + 세그먼트 내 진행률)
49
+ */
50
+ get playProgress(): number;
51
+ setCallbacks(onInvalidate: () => void, onAnimationComplete?: () => void): void;
52
+ /**
53
+ * 슬롯에 카메라 위치를 저장한다.
54
+ * bookmark에 name 프로퍼티가 없으면 기존 이름을 보존한다 (카메라 위치만 갱신).
55
+ * name 프로퍼티가 있으면 (undefined 포함) 그대로 사용한다 (리오더 등).
56
+ */
57
+ saveSlot(index: number, bookmark: CameraBookmark): void;
58
+ renameSlot(index: number, name: string): void;
59
+ clearSlot(index: number): void;
60
+ getSlot(index: number): CameraBookmark | undefined;
61
+ exportSlots(): (CameraBookmark | null)[];
62
+ importSlots(data: (CameraBookmark | null | undefined)[]): void;
63
+ resetAll(): void;
64
+ getPlayableSlots(): number[];
65
+ swapSlots(a: number, b: number): void;
66
+ moveSlot(from: number, to: number): void;
67
+ /**
68
+ * 카메라를 슬롯 위치로 애니메이션 이동한다.
69
+ * splineContext가 제공되면 Catmull-Rom 곡선으로 보간, 없으면 직선+slerp.
70
+ */
71
+ animateToSlot(index: number, camera: THREE.PerspectiveCamera, controls: {
72
+ target: THREE.Vector3;
73
+ restoreTarget(t: THREE.Vector3): void;
74
+ update(): boolean;
75
+ }, duration?: number, splineContext?: SplineContext): boolean;
76
+ /**
77
+ * evaluatePath를 따라 fromT→targetT 구간을 애니메이션한다 (부분 세그먼트 resume용).
78
+ */
79
+ private _animatePathSegment;
80
+ /**
81
+ * 공통 rAF 애니메이션 루프. onFrame에 eased progress를 전달한다.
82
+ */
83
+ private _runAnimation;
84
+ /**
85
+ * progress 값으로부터 playIndex와 playStartOffset을 계산한다.
86
+ */
87
+ private _initFromProgress;
88
+ /**
89
+ * playOrder 기준 순회 플레이. excludeFromPlay 슬롯은 건너뛴다.
90
+ * 3개 이상 슬롯이면 Catmull-Rom 스플라인으로 곡선 경로를 따른다.
91
+ */
92
+ startPlay(camera: THREE.PerspectiveCamera, controls: {
93
+ target: THREE.Vector3;
94
+ restoreTarget(t: THREE.Vector3): void;
95
+ update(): boolean;
96
+ }, defaultHold?: number, defaultTransition?: number, startFromProgress?: number, fromBeginning?: boolean): void;
97
+ /**
98
+ * 현재 재생 상태에 맞는 SplineContext를 생성한다.
99
+ */
100
+ private _buildSplineContext;
101
+ /**
102
+ * 슬롯 인덱스에 해당하는 경로상 진행률을 _lastPlayProgress에 설정한다.
103
+ */
104
+ setProgressForSlot(slotIndex: number): void;
105
+ stopPlay(): void;
106
+ /** stopPlay + lastPlayProgress 초기화 (모드 전환 시 사용) */
107
+ resetPlay(): void;
108
+ toggleOrbitRotation(controls: {
109
+ isAutoRotating(): boolean;
110
+ setAutoRotate(enabled: boolean): void;
111
+ }): void;
112
+ /** 모드 전환(P키 등)에서 사용 — orbit 완전 초기화 */
113
+ stopOrbitRotation(controls: {
114
+ setAutoRotate(enabled: boolean): void;
115
+ }): void;
116
+ /**
117
+ * 전체 재생 경로의 t∈[0,1] 지점에서의 카메라 position/target을 계산한다.
118
+ * 3개 이상 슬롯이면 Catmull-Rom 스플라인(루프), 2개면 직선 보간.
119
+ */
120
+ evaluatePath(t: number): {
121
+ position: THREE.Vector3;
122
+ target: THREE.Vector3;
123
+ } | null;
124
+ stopAnimation(): void;
125
+ destroy(): void;
126
+ }
127
+ //# sourceMappingURL=camera-bookmark-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"camera-bookmark-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/camera-bookmark-manager.ts"],"names":[],"mappings":"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"}
@@ -9,7 +9,6 @@ export declare class CameraManager {
9
9
  get camera(): THREE.PerspectiveCamera | undefined;
10
10
  get activeCamera(): THREE.Camera;
11
11
  get activeView(): CameraViewName;
12
- get zoom(): number | undefined;
13
12
  get cameraZPos(): number;
14
13
  setup(width: number, height: number, config: CameraConfig): THREE.PerspectiveCamera;
15
14
  addToScene(scene: THREE.Scene): void;
@@ -19,12 +18,19 @@ export declare class CameraManager {
19
18
  * 직교 투영 카메라로 특정 뷰를 설정한다.
20
19
  * Top/Front/Back/Right/Left — 원근법 없는 정사영 뷰.
21
20
  */
22
- setOrthoView(view: CameraViewName, width: number, height: number): THREE.OrthographicCamera;
21
+ setOrthoView(view: CameraViewName, width: number, height: number, viewportWidth?: number, viewportHeight?: number): THREE.OrthographicCamera;
23
22
  /**
24
23
  * Perspective 카메라로 복귀한다.
25
24
  */
26
25
  restorePerspective(): THREE.PerspectiveCamera;
27
- private _updateOrthoFrustum;
26
+ /**
27
+ * 직교 카메라 frustum을 업데이트한다.
28
+ * @param sceneWidth 씬 모델 너비
29
+ * @param sceneHeight 씬 모델 높이
30
+ * @param viewportWidth 실제 뷰포트 너비 (옵션)
31
+ * @param viewportHeight 실제 뷰포트 높이 (옵션)
32
+ */
33
+ updateOrthoFrustum(sceneWidth: number, sceneHeight: number, viewportWidth?: number, viewportHeight?: number): void;
28
34
  destroy(): void;
29
35
  }
30
36
  //# sourceMappingURL=camera-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"camera-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/camera-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAExF,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAA0B;IAC/C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,WAAW,CAAY;IAE/B,IAAI,MAAM,wCAET;IAED,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,CAK/B;IAED,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,IAAI,IAAI,uBAEP;IAED,IAAI,UAAU,WAEb;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IAsBzD,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK;IAK7B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAU1C,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAW9C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB;IAyC3F;;OAEG;IACH,kBAAkB,IAAI,KAAK,CAAC,iBAAiB;IAK7C,OAAO,CAAC,mBAAmB;IAW3B,OAAO;CAKR"}
1
+ {"version":3,"file":"camera-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/camera-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAEzC,MAAM,MAAM,cAAc,GAAG,aAAa,GAAG,KAAK,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;AAExF,qBAAa,aAAa;IACxB,OAAO,CAAC,YAAY,CAAC,CAAyB;IAC9C,OAAO,CAAC,YAAY,CAAC,CAA0B;IAC/C,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,WAAW,CAAY;IAE/B,IAAI,MAAM,wCAET;IAED,IAAI,YAAY,IAAI,KAAK,CAAC,MAAM,CAK/B;IAED,IAAI,UAAU,IAAI,cAAc,CAE/B;IAED,IAAI,UAAU,WAEb;IAED,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IA+BzD,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK;IAK7B,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAgB1C,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC;IAU9C;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,kBAAkB;IAyC5I;;OAEG;IACH,kBAAkB,IAAI,KAAK,CAAC,iBAAiB;IAK7C;;;;;;OAMG;IACH,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM;IAyB3G,OAAO;CAKR"}
@@ -7,10 +7,14 @@ export declare class ControlsManager {
7
7
  private _state;
8
8
  private _autoRotate;
9
9
  private _autoRotateSpeed;
10
+ private _onUserInteraction?;
10
11
  private _dampingFactor;
11
12
  private _rotateSpeed;
12
13
  private _panSpeed;
14
+ private _dollyStart;
13
15
  private _lastScale;
16
+ /** true이면 카메라와 타겟이 Y=0 아래로 내려가지 못한다 (뷰어 전용). */
17
+ private _floorConstraint;
14
18
  private _spherical;
15
19
  private _sphericalDelta;
16
20
  private _panOffset;
@@ -38,6 +42,7 @@ export declare class ControlsManager {
38
42
  private get _isOrthoLocked();
39
43
  setup(camera: THREE.Camera, host: Component): void;
40
44
  setEnabled(enabled: boolean): void;
45
+ setOnUserInteraction(cb: (() => void) | undefined): void;
41
46
  onDragStart(e: DragEvent): void;
42
47
  onDragMove(e: DragEvent): void;
43
48
  onDragEnd(_e: DragEvent): void;
@@ -47,15 +52,23 @@ export declare class ControlsManager {
47
52
  onKeyDown(e: KeyboardEvent): void;
48
53
  update(): boolean;
49
54
  reset(): void;
55
+ /**
56
+ * 현재 카메라 위치/타겟을 리셋 기준점으로 저장한다.
57
+ * Pin Camera View 등으로 기본 위치를 변경한 후 호출.
58
+ */
59
+ pinResetPosition(): void;
50
60
  setCamera(camera: THREE.Camera): void;
61
+ isAutoRotating(): boolean;
51
62
  setAutoRotate(enabled: boolean): void;
63
+ setFloorConstraint(enabled: boolean): void;
52
64
  markCameraChanged(): void;
53
65
  /**
54
- * Perspective 줌: 마우스 커서 위치를 기준으로 확대/축소.
55
- * orbit target 거리에서의 frustum 크기로 오프셋을 계산한다.
56
- * oldCamZoom/newCamZoom: camera.zoom 단위 (state.zoom * 0.01)
66
+ * Perspective dolly zoom: 카메라를 target 방향으로 이동 (실제 거리 변화).
67
+ * projection zoom이 아닌 물리적 접근/후퇴로 자연스러운 3D 줌 제공.
68
+ * 커서 위치 기준 target 이동으로 커서 아래 월드 좌표가 고정된다.
69
+ * factor < 1: 가까이 (zoom in), factor > 1: 멀어짐 (zoom out)
57
70
  */
58
- zoomPerspAtCursor(oldCamZoom: number, newCamZoom: number, ndcX: number, ndcY: number): void;
71
+ dollyAtCursor(factor: number, ndcX: number, ndcY: number): void;
59
72
  /**
60
73
  * 직교 뷰 줌: 마우스 커서 위치를 기준으로 확대/축소.
61
74
  * 커서 아래의 월드 좌표가 줌 후에도 동일한 화면 위치에 유지된다.
@@ -63,6 +76,12 @@ export declare class ControlsManager {
63
76
  */
64
77
  zoomOrthoAtCursor(factor: number, ndcX: number, ndcY: number): void;
65
78
  destroy(): void;
79
+ /**
80
+ * 뷰포트의 CSS 표시 크기를 반환한다.
81
+ * element의 getBoundingClientRect()를 우선 사용하되,
82
+ * element가 없거나 rect가 0x0이면 bounds로 폴백한다.
83
+ */
84
+ private _getViewportSize;
66
85
  private _handleRotateMove;
67
86
  private _handlePanMove;
68
87
  /**
@@ -71,6 +90,8 @@ export declare class ControlsManager {
71
90
  * deltaX/deltaY는 CSS 픽셀 단위이므로, DOM element의 실제 표시 크기를 분모로 사용한다.
72
91
  */
73
92
  private _panOrtho;
93
+ /** 픽셀 단위 패닝 (트랙패드 스크롤 등 외부 호출용) */
94
+ panByPixels(deltaX: number, deltaY: number): void;
74
95
  private _pan;
75
96
  }
76
97
  //# sourceMappingURL=controls-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"controls-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/controls-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,+BAA+B,CAAA;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAY9B,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAC,CAAc;IAC9B,OAAO,CAAC,KAAK,CAAC,CAAW;IAEzB,OAAO,CAAC,QAAQ,CAAO;IACvB,OAAO,CAAC,MAAM,CAAa;IAC3B,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,gBAAgB,CAAM;IAC9B,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,UAAU,CAAI;IAGtB,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,OAAO,CAAsB;IAGrC,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,UAAU,CAAsB;IAGxC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,UAAU,CAAsB;IACxC,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,SAAS,CAAsB;IAGvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,YAAY,CAAmB;IACvC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,eAAe,CAAyB;IAGhD,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,cAAc,CAAsB;IAE5C,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,CAE1B;IAED,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,OAAO;IAMnC,+BAA+B;IAC/B,OAAO,KAAK,cAAc,GAEzB;IAED,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,SAAS;IAqB3C,UAAU,CAAC,OAAO,EAAE,OAAO;IAM3B,WAAW,CAAC,CAAC,EAAE,SAAS;IAkBxB,UAAU,CAAC,CAAC,EAAE,SAAS;IAevB,SAAS,CAAC,EAAE,EAAE,SAAS;IAQvB,YAAY,CAAC,CAAC,EAAE,UAAU;IA2B1B,WAAW,CAAC,CAAC,EAAE,UAAU;IAyBzB,UAAU,CAAC,EAAE,EAAE,UAAU;IAOzB,SAAS,CAAC,CAAC,EAAE,aAAa;IAgB1B,MAAM,IAAI,OAAO;IAgEjB,KAAK;IAUL,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM;IAmB9B,aAAa,CAAC,OAAO,EAAE,OAAO;IAK9B,iBAAiB;IAIjB;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAiBpF;;;;OAIG;IACH,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAoB5D,OAAO;IAOP,OAAO,CAAC,iBAAiB;IAYzB,OAAO,CAAC,cAAc;IActB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,IAAI;CA6Bb"}
1
+ {"version":3,"file":"controls-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/controls-manager.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,15 @@ export declare class EventManager3D {
13
13
  set lastHovered(value: IThreeRealObject | undefined);
14
14
  updateMouseNDC(px: number, py: number, left: number, top: number, width: number, height: number): void;
15
15
  getObjectByRaycast(camera: THREE.Camera, scene: THREE.Scene): THREE.Object3D | undefined;
16
+ /**
17
+ * Object3D의 전체 조상 체인이 visible인지 확인한다.
18
+ * Three.js raycaster는 visible을 자동으로 확인하지 않기 때문에 수동 필터링이 필요하다.
19
+ */
20
+ private _isWorldVisible;
16
21
  getObjectsByRaycast(camera: THREE.Camera, scene: THREE.Scene): THREE.Intersection[];
22
+ private _hudScene?;
23
+ private _hudCamera?;
24
+ setHUD(scene: THREE.Scene, camera: THREE.Camera): void;
17
25
  handleClick(camera: THREE.Camera, scene: THREE.Scene, event: MouseEvent): IThreeRealObject | undefined;
18
26
  handleHover(camera: THREE.Camera, scene: THREE.Scene, event: MouseEvent): void;
19
27
  destroy(): void;
@@ -1 +1 @@
1
- {"version":3,"file":"event-manager3d.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/event-manager3d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAC,CAAkB;;IAIvC,IAAI,KAAK,kBAER;IAED,IAAI,WAAW,IAIQ,gBAAgB,GAAG,SAAS,CAFlD;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,EAElD;IAED,IAAI,WAAW,IAIQ,gBAAgB,GAAG,SAAS,CAFlD;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,EAElD;IAED,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK/F,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS;IAmBxF,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE;IAKnF,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IAiBtG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU;IAiBvE,OAAO;CAIR"}
1
+ {"version":3,"file":"event-manager3d.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/event-manager3d.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAExD,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,YAAY,CAAC,CAAkB;IACvC,OAAO,CAAC,YAAY,CAAC,CAAkB;;IAIvC,IAAI,KAAK,kBAER;IAED,IAAI,WAAW,IAIQ,gBAAgB,GAAG,SAAS,CAFlD;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,EAElD;IAED,IAAI,WAAW,IAIQ,gBAAgB,GAAG,SAAS,CAFlD;IAED,IAAI,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,SAAS,EAElD;IAED,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;IAK/F,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,QAAQ,GAAG,SAAS;IAsBxF;;;OAGG;IACH,OAAO,CAAC,eAAe;IASvB,mBAAmB,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,EAAE;IAMnF,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,UAAU,CAAC,CAAc;IAEjC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;IAK/C,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,GAAG,SAAS;IA0BtG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU;IAyBvE,OAAO;CAMR"}
@@ -26,6 +26,8 @@ export declare class GizmoManager {
26
26
  get attached(): THREE.Object3D<THREE.Object3DEventMap> | undefined;
27
27
  get isAttached(): boolean;
28
28
  get isDragging(): boolean;
29
+ /** true if a gizmo handle has focus — hovered (yellow) or dragging. axis stays non-null during drag. */
30
+ get isEngaged(): boolean;
29
31
  setup(camera: THREE.Camera, domElement: HTMLElement, scene: THREE.Scene): void;
30
32
  /**
31
33
  * things-scene 이벤트를 TransformControls의 프록시 element로 전달한다.
@@ -36,9 +38,13 @@ export declare class GizmoManager {
36
38
  * pointermove일 때 button을 -1로 설정해야 한다.
37
39
  */
38
40
  forwardEvent(e: MouseEvent, type: 'pointerdown' | 'pointermove' | 'pointerup'): void;
41
+ /** Touch event → PointerEvent 변환 후 기즈모에 전달 (iPad/모바일 지원) */
42
+ forwardTouch(touch: Touch, type: 'pointerdown' | 'pointermove' | 'pointerup'): void;
39
43
  setMode(mode: GizmoMode): void;
40
44
  attach(object: THREE.Object3D): void;
41
45
  detach(): void;
46
+ /** Shift 키에 따라 회전 스냅을 토글한다 (15° 단위) */
47
+ setRotationSnap(enabled: boolean): void;
42
48
  updateCamera(camera: THREE.Camera): void;
43
49
  destroy(): void;
44
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"gizmo-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/gizmo-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AAEpF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;AAExD;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAQ;IAE3B,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAA;IACjD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAE/C,IAAI,QAAQ,kCAA4B;IACxC,IAAI,IAAI,cAAwB;IAChC,IAAI,QAAQ,uDAA4B;IACxC,IAAI,UAAU,YAA8B;IAC5C,IAAI,UAAU,YAA8B;IAE5C,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;IAoCvE;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW;IAc7E,OAAO,CAAC,IAAI,EAAE,SAAS;IAKvB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ;IAW7B,MAAM;IAMN,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM;IAMjC,OAAO;CAgBR"}
1
+ {"version":3,"file":"gizmo-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/gizmo-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAA;AAEpF,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,OAAO,CAAA;AAKxD;;;;;;;;;GASG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,SAAS,CAAC,CAAmB;IACrC,OAAO,CAAC,MAAM,CAAC,CAAa;IAC5B,OAAO,CAAC,aAAa,CAAC,CAAa;IACnC,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,SAAS,CAAC,CAAgB;IAClC,OAAO,CAAC,WAAW,CAAQ;IAE3B,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IACjD,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAA;IACjD,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IAE/C,IAAI,QAAQ,kCAA4B;IACxC,IAAI,IAAI,cAAwB;IAChC,IAAI,QAAQ,uDAA4B;IACxC,IAAI,UAAU,YAA8B;IAC5C,IAAI,UAAU,YAA8B;IAC5C,wGAAwG;IACxG,IAAI,SAAS,YAAoC;IAEjD,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK;IAoCvE;;;;;;;OAOG;IACH,YAAY,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW;IAmB7E,4DAA4D;IAC5D,YAAY,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,WAAW;IAc5E,OAAO,CAAC,IAAI,EAAE,SAAS;IAKvB,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ;IAW7B,MAAM;IAMN,uCAAuC;IACvC,eAAe,CAAC,OAAO,EAAE,OAAO;IAMhC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM;IAMjC,OAAO;CAgBR"}
@@ -5,6 +5,8 @@ import { GizmoManager } from './gizmo-manager.js';
5
5
  export interface GizmoOperationHost {
6
6
  readonly root: any;
7
7
  readonly app: any;
8
+ /** Host DOM element for overlay positioning */
9
+ readonly hostElement?: HTMLElement;
8
10
  invalidate(): void;
9
11
  }
10
12
  /**
@@ -17,12 +19,17 @@ export declare class GizmoOperationManager {
17
19
  private _preDragDimension?;
18
20
  private _preDragScale?;
19
21
  private _preDragEffectiveDepth?;
22
+ private _scaleAnchorSign?;
23
+ private _preDragAttachedPosition?;
20
24
  private _altDragDuplicates?;
21
25
  private _mouseDownAltKey;
22
26
  private _multiSelectOffsets?;
23
27
  private _gizmoInitialRotation?;
24
28
  private _multiSelectInitialRotations?;
25
29
  private _multiSelectPreDragDimensions?;
30
+ private _infoOverlay?;
31
+ private _infoHostElement?;
32
+ private _dragStartPosition?;
26
33
  /**
27
34
  * mousedown 시 altKey를 캡처한다.
28
35
  * forwardEvent보다 먼저 호출되어야 한다.
@@ -37,21 +44,68 @@ export declare class GizmoOperationManager {
37
44
  setEnabled(enabled: boolean): void;
38
45
  }, getHost: () => GizmoOperationHost | undefined, callbacks?: {
39
46
  onAttachChanged?: (isAttached: boolean) => void;
47
+ onDraggingChanged?: (isDragging: boolean) => void;
40
48
  }): void;
41
49
  private _onDragStart;
42
50
  private _performAltDragDuplicate;
43
51
  private _captureMultiSelectState;
44
52
  private _captureScalePreDrag;
53
+ /**
54
+ * 드래그한 기즈모 핸들의 축별 부호를 계산한다.
55
+ * - controls.axis: 드래그 축 이름 ('X'/'Y'/'Z'/'XY'/'XZ'/'YZ'/'XYZ'/'XYZE' 등)
56
+ * - controls.pointStart: 드래그 시작 시 pointer의 월드 위치(object 원점 기준 상대)
57
+ *
58
+ * 반환 부호: 해당 축 pointStart의 로컬 좌표 성분 부호
59
+ * +1 → 드래그한 +방향 핸들 → pre.edge(left/top/zPos)를 고정하고 +방향 확장
60
+ * -1 → 드래그한 -방향 핸들 → 반대편 edge 고정, -방향 확장
61
+ * 0 → 방향성 없음 (uniform handle) 또는 축 미해당 → 기존 center 동작 유지
62
+ *
63
+ * 주의: TransformControls 내부 API(pointStart)에 의존. three.js 업그레이드 시
64
+ * node_modules/three/examples/jsm/controls/TransformControls.js 확인 필요.
65
+ */
66
+ private _computeAnchorSign;
45
67
  private _onDragEnd;
46
68
  /**
47
69
  * 기즈모 드래그 결과를 컴포넌트 속성에 역변환하여 반영한다.
48
70
  */
49
71
  private _syncFromGizmo;
72
+ /**
73
+ * 오브젝트 바닥면이 Y=0(바닥)에 가까우면 스냅한다.
74
+ * Object3D.position.y는 오브젝트 중심이므로, 바닥면 = position.y - effectiveDepth/2.
75
+ */
76
+ private _applyGroundSnap;
50
77
  /**
51
78
  * scale 기즈모 드래그를 dimension 변경으로 역산한다.
52
79
  * 축 매핑: scale.x → width, scale.y → depth, scale.z → height
53
- * center 기준 양방향 확장.
80
+ * anchor sign에 따라 한쪽 edge 고정(드래그 방향으로만 확장) 또는 center 확장.
81
+ *
82
+ * @returns 멀티셀렉트에서 동일 로직 적용하기 위해 ratioLock 반영된 ratio/sign 반환
54
83
  */
55
84
  private _syncDimensionFromGizmo;
85
+ /**
86
+ * anchor sign 기반 dimension props 계산.
87
+ * sign > 0: pre.left/top/zPos 고정, 드래그 방향으로만 확장
88
+ * sign < 0: 반대편 edge 고정, 반대 방향으로 확장
89
+ * sign = 0: center 기준 양방향 확장 (기존 동작)
90
+ */
91
+ private _computeAnchorProps;
92
+ /**
93
+ * TransformControls는 scale 드래그 시 object.scale만 변경(center-scale).
94
+ * anchor edge가 실제로 고정되어 보이려면 object.position을 매 프레임 역보정한다.
95
+ * shift_local = sign * (S' - preScale) * (pre_size / 2)
96
+ * 오브젝트 회전이 있으면 로컬 shift를 월드 축으로 변환.
97
+ */
98
+ private _applyAnchorPositionCorrection;
99
+ private _showInfoOverlay;
100
+ private _updateInfoOverlay;
101
+ /**
102
+ * scale 모드 info 오버레이 포맷 — 델타 + 최종값 병기.
103
+ * - 단일 축 핸들(X/Y/Z): `⤢ W 150px (+50)` — 최종 치수 + 델타
104
+ * - 중앙 uniform 핸들 또는 세 축 거의 동일 배율: `⤢ ×1.50 (150×75×100)`
105
+ * - 비균일 멀티축: `⤢ W:150(+50) D:130(+30) H:120(+20)`
106
+ * 축 매핑: scale.x→width, scale.y→depth, scale.z→height
107
+ */
108
+ private _formatScaleInfo;
109
+ private _hideInfoOverlay;
56
110
  }
57
111
  //# sourceMappingURL=gizmo-operation-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gizmo-operation-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/gizmo-operation-manager.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,UAAU,IAAI,IAAI,CAAA;CACnB;AAcD;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,aAAa,CAAC,CAAqC;IAE3D,OAAO,CAAC,sBAAsB,CAAC,CAAQ;IAGvC,OAAO,CAAC,kBAAkB,CAAC,CAAoD;IAC/E,OAAO,CAAC,gBAAgB,CAAQ;IAGhC,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAC5D,OAAO,CAAC,qBAAqB,CAAC,CAAa;IAC3C,OAAO,CAAC,4BAA4B,CAAC,CAA8B;IACnE,OAAO,CAAC,6BAA6B,CAAC,CAAqC;IAE3E;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIpC;;;;OAIG;IACH,cAAc,CACZ,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE;QAAE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,EACvD,OAAO,EAAE,MAAM,kBAAkB,GAAG,SAAS,EAC7C,SAAS,CAAC,EAAE;QACV,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;KAChD,GACA,IAAI;IA6BP,OAAO,CAAC,YAAY;IAkBpB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,UAAU;IAuClB;;OAEG;IACH,OAAO,CAAC,cAAc;IAiEtB;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;CAsBhC"}
1
+ {"version":3,"file":"gizmo-operation-manager.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/gizmo-operation-manager.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAA;IAClB,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAA;IACjB,+CAA+C;IAC/C,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAA;IAClC,UAAU,IAAI,IAAI,CAAA;CACnB;AAcD;;;;;GAKG;AACH,qBAAa,qBAAqB;IAEhC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,aAAa,CAAC,CAAqC;IAE3D,OAAO,CAAC,sBAAsB,CAAC,CAAQ;IAGvC,OAAO,CAAC,gBAAgB,CAAC,CAAqC;IAE9D,OAAO,CAAC,wBAAwB,CAAC,CAAe;IAGhD,OAAO,CAAC,kBAAkB,CAAC,CAAoD;IAC/E,OAAO,CAAC,gBAAgB,CAAQ;IAGhC,OAAO,CAAC,mBAAmB,CAAC,CAAgC;IAC5D,OAAO,CAAC,qBAAqB,CAAC,CAAa;IAC3C,OAAO,CAAC,4BAA4B,CAAC,CAA8B;IACnE,OAAO,CAAC,6BAA6B,CAAC,CAAqC;IAE3E,OAAO,CAAC,YAAY,CAAC,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,kBAAkB,CAAC,CAAe;IAE1C;;;OAGG;IACH,aAAa,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI;IAIpC;;;;OAIG;IACH,cAAc,CACZ,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE;QAAE,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;KAAE,EACvD,OAAO,EAAE,MAAM,kBAAkB,GAAG,SAAS,EAC7C,SAAS,CAAC,EAAE;QACV,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;QAC/C,iBAAiB,CAAC,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;KAClD,GACA,IAAI;IAuCP,OAAO,CAAC,YAAY;IA4BpB,OAAO,CAAC,wBAAwB;IAyBhC,OAAO,CAAC,wBAAwB;IA2ChC,OAAO,CAAC,oBAAoB;IAiB5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,kBAAkB;IA6B1B,OAAO,CAAC,UAAU;IA4ElB;;OAEG;IACH,OAAO,CAAC,cAAc;IAwDtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAmC/B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IA8B3B;;;;;OAKG;IACH,OAAO,CAAC,8BAA8B;IA0BtC,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,kBAAkB;IA2C1B;;;;;;OAMG;IACH,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,gBAAgB;CAOzB"}
@@ -8,5 +8,8 @@ export { GizmoManager, type GizmoMode } from './gizmo-manager.js';
8
8
  export { GizmoOperationManager, type GizmoOperationHost } from './gizmo-operation-manager.js';
9
9
  export { InteractionManager, type InteractionDelegate } from './interaction-manager.js';
10
10
  export { PlacementManager, type PlacementDelegate } from './placement-manager.js';
11
+ export { CameraBookmarkManager, type CameraBookmark } from './camera-bookmark-manager.js';
12
+ export { BoxSelectionManager } from './box-selection-manager.js';
13
+ export { VertexGizmoManager } from './vertex-gizmo-manager.js';
11
14
  export type { CameraConfig, RendererConfig, LightingConfig } from './types.js';
12
15
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACjF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/threed/managers/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,aAAa,EAAE,KAAK,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACjE,OAAO,EAAE,qBAAqB,EAAE,KAAK,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAC7F,OAAO,EAAE,kBAAkB,EAAE,KAAK,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AACvF,OAAO,EAAE,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACjF,OAAO,EAAE,qBAAqB,EAAE,KAAK,cAAc,EAAE,MAAM,8BAA8B,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAC9D,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}