@planara/core 2.1.1 → 2.2.0

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 (66) hide show
  1. package/dist/constants/colors.d.ts +24 -0
  2. package/dist/constants/colors.d.ts.map +1 -0
  3. package/dist/constants/layers.d.ts +39 -0
  4. package/dist/constants/layers.d.ts.map +1 -0
  5. package/dist/constants/threshold.d.ts +5 -0
  6. package/dist/constants/threshold.d.ts.map +1 -0
  7. package/dist/core/editor-renderer.d.ts +8 -2
  8. package/dist/core/editor-renderer.d.ts.map +1 -1
  9. package/dist/core/preview-renderer.d.ts.map +1 -1
  10. package/dist/core/renderer.d.ts +55 -4
  11. package/dist/core/renderer.d.ts.map +1 -1
  12. package/dist/events/editor-events.d.ts +4 -4
  13. package/dist/events/editor-events.d.ts.map +1 -1
  14. package/dist/events/event-topics.d.ts +2 -2
  15. package/dist/events/event-topics.d.ts.map +1 -1
  16. package/dist/extensions/orbit-extension.d.ts +3 -2
  17. package/dist/extensions/orbit-extension.d.ts.map +1 -1
  18. package/dist/handlers/display/wireframe-handler.d.ts +2 -4
  19. package/dist/handlers/display/wireframe-handler.d.ts.map +1 -1
  20. package/dist/handlers/select/edge-select-handler.d.ts +46 -0
  21. package/dist/handlers/select/edge-select-handler.d.ts.map +1 -0
  22. package/dist/handlers/select/face-select-handler.d.ts +34 -0
  23. package/dist/handlers/select/face-select-handler.d.ts.map +1 -0
  24. package/dist/handlers/select/mesh-select-handler.d.ts +10 -5
  25. package/dist/handlers/select/mesh-select-handler.d.ts.map +1 -1
  26. package/dist/handlers/tool/base-tool-handler.d.ts +6 -4
  27. package/dist/handlers/tool/base-tool-handler.d.ts.map +1 -1
  28. package/dist/handlers/tool/rotate-tool-handler.d.ts +2 -1
  29. package/dist/handlers/tool/rotate-tool-handler.d.ts.map +1 -1
  30. package/dist/handlers/tool/scale-tool-handler.d.ts +2 -1
  31. package/dist/handlers/tool/scale-tool-handler.d.ts.map +1 -1
  32. package/dist/handlers/tool/translate-tool-handler.d.ts +2 -1
  33. package/dist/handlers/tool/translate-tool-handler.d.ts.map +1 -1
  34. package/dist/hub/editor-hub.d.ts +3 -2
  35. package/dist/hub/editor-hub.d.ts.map +1 -1
  36. package/dist/index.cjs.js +230 -201
  37. package/dist/index.es.js +9106 -5883
  38. package/dist/index.full.d.ts +71 -18
  39. package/dist/index.public.d.ts +20 -18
  40. package/dist/index.umd.js +197 -168
  41. package/dist/interfaces/api/raycast-api.d.ts +23 -0
  42. package/dist/interfaces/api/raycast-api.d.ts.map +1 -0
  43. package/dist/interfaces/api/scene-api.d.ts +50 -0
  44. package/dist/interfaces/api/scene-api.d.ts.map +1 -0
  45. package/dist/interfaces/handler/handler.d.ts +2 -5
  46. package/dist/interfaces/handler/handler.d.ts.map +1 -1
  47. package/dist/interfaces/manager/manager.d.ts +2 -5
  48. package/dist/interfaces/manager/manager.d.ts.map +1 -1
  49. package/dist/interfaces/store/editor-store.d.ts +44 -0
  50. package/dist/interfaces/store/editor-store.d.ts.map +1 -0
  51. package/dist/ioc/container.d.ts.map +1 -1
  52. package/dist/managers/display/display-manager.d.ts +6 -4
  53. package/dist/managers/display/display-manager.d.ts.map +1 -1
  54. package/dist/managers/select/select-manager.d.ts +11 -2
  55. package/dist/managers/select/select-manager.d.ts.map +1 -1
  56. package/dist/managers/tool/tool-manager.d.ts +6 -7
  57. package/dist/managers/tool/tool-manager.d.ts.map +1 -1
  58. package/dist/store/index.d.ts +37 -0
  59. package/dist/store/index.d.ts.map +1 -0
  60. package/dist/types/api/editor-api.d.ts +4 -0
  61. package/dist/types/api/editor-api.d.ts.map +1 -0
  62. package/dist/types/listener/selected-listener.d.ts +3 -0
  63. package/dist/types/listener/selected-listener.d.ts.map +1 -0
  64. package/dist/utils/renderer-api.d.ts +20 -2
  65. package/dist/utils/renderer-api.d.ts.map +1 -1
  66. package/package.json +2 -1
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Цвет подсветки при наведении (hover).
3
+ *
4
+ * @remarks
5
+ * Используется для временной подсветки элемента под курсором.
6
+ * Обычно применяется к оверлею (`THREE.Line`) или к граням/рёбрам,
7
+ * и не должен конфликтовать с цветом выбранного элемента.
8
+ *
9
+ * @example
10
+ * (line.material as THREE.LineBasicMaterial).color.setHex(HOVER_COLOR);
11
+ */
12
+ export declare const HOVER_COLOR = 16776960;
13
+ /**
14
+ * Цвет подсветки для выбранного элемента (select).
15
+ *
16
+ * @remarks
17
+ * Применяется к постоянной подсветке выбранного ребра/грани до снятия выбора.
18
+ * Должен визуально отличаться от {@link HOVER_COLOR}, чтобы не путать состояния.
19
+ *
20
+ * @example
21
+ * (line.material as THREE.LineBasicMaterial).color.setHex(SELECT_COLOR);
22
+ */
23
+ export declare const SELECT_COLOR = 16755200;
24
+ //# sourceMappingURL=colors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/constants/colors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,WAAW,CAAC;AAEpC;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,WAAW,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Слой объектов-геометрий (`THREE.Mesh`).
3
+ *
4
+ * @remarks
5
+ * Используется для режима Mesh/Face. Камера и Raycaster должны «видеть» этот слой,
6
+ * когда активен соответствующий режим.
7
+ *
8
+ * @example
9
+ * camera.layers.enable(MESH_LAYER);
10
+ * raycaster.layers.set(MESH_LAYER);
11
+ */
12
+ export declare const MESH_LAYER = 0;
13
+ /**
14
+ * Слой контуров (`THREE.LineSegments`) — внешние рёбра мешей.
15
+ *
16
+ * @remarks
17
+ * По этому слою идёт попадание в режиме выбора рёбер (Edge). Камера должна
18
+ * видеть слой, а для Raycaster можно также настроить `params.Line.threshold`.
19
+ *
20
+ * @example
21
+ * camera.layers.enable(LINE_LAYER);
22
+ * raycaster.layers.set(LINE_LAYER);
23
+ * raycaster.params.Line.threshold = 0.03;
24
+ */
25
+ export declare const LINE_LAYER = 1;
26
+ /**
27
+ * Слой оверлеев-подсветок (`THREE.Line`) — hover/select маркеры.
28
+ *
29
+ * @remarks
30
+ * Эти линии рендерятся поверх сцены (обычно с `depthTest=false`). Их лучше
31
+ * исключить из Raycaster (не включать этот слой для него), но включить для камеры.
32
+ *
33
+ * @example
34
+ * camera.layers.enable(OVERLAY_LAYER); // камера видит подсветку
35
+ * // Raycaster НЕ видит подсветку:
36
+ * // raycaster.layers.set(...) — без OVERLAY_LAYER
37
+ */
38
+ export declare const OVERLAY_LAYER = 31;
39
+ //# sourceMappingURL=layers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../src/constants/layers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,UAAU,IAAI,CAAC;AAE5B;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,aAAa,KAAK,CAAC"}
@@ -0,0 +1,5 @@
1
+ /** мировые координаты */
2
+ export declare const LINE_THRESHOLD = 0.03;
3
+ /** пиксели */
4
+ export declare const POINTS_THRESHOLD = 10;
5
+ //# sourceMappingURL=threshold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"threshold.d.ts","sourceRoot":"","sources":["../../src/constants/threshold.ts"],"names":[],"mappings":"AACA,yBAAyB;AACzB,eAAO,MAAM,cAAc,OAAO,CAAC;AACnC,cAAc;AACd,eAAO,MAAM,gBAAgB,KAAK,CAAC"}
@@ -1,6 +1,6 @@
1
1
  import { Renderer } from './renderer';
2
2
  import { EventBus } from '../events/event-bus';
3
- import { Figure, ToolType } from '@planara/types';
3
+ import { Figure, SelectMode, ToolType } from '@planara/types';
4
4
  import * as THREE from 'three';
5
5
  /**
6
6
  * Рендерер для редактора.
@@ -17,7 +17,7 @@ export declare class EditorRenderer extends Renderer {
17
17
  private _transform;
18
18
  private readonly _transformHelper;
19
19
  /** Raycast для получения событий наведения/клика по модели*/
20
- private _raycaster;
20
+ private readonly _raycaster;
21
21
  /** Курсор мыши */
22
22
  private readonly _mouse;
23
23
  /** Были ли инициализированы обработчики событий (hover/click) */
@@ -51,6 +51,12 @@ export declare class EditorRenderer extends Renderer {
51
51
  * @internal
52
52
  */
53
53
  detachTransformControls(): void;
54
+ /**
55
+ * Настройка режимов для `Raycaster`.
56
+ * @internal
57
+ */
58
+ setRaycastMode(mode: SelectMode): void;
59
+ dispose(): void;
54
60
  /** Инициализация обработчиков событий на hover/click */
55
61
  private _initMouseListeners;
56
62
  /** Обработчик события для hover */
@@ -1 +1 @@
1
- {"version":3,"file":"editor-renderer.d.ts","sourceRoot":"","sources":["../../src/core/editor-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;;;;GAKG;AACH,qBACa,cAAe,SAAQ,QAAQ;IAwBtB,OAAO,CAAC,OAAO;IACb,OAAO,CAAC,IAAI;IAxBlC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAkB;IAEhC,8CAA8C;IAC9C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,6DAA6D;IAC7D,OAAO,CAAC,UAAU,CAAmB;IAErC,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAExC,iEAAiE;IACjE,OAAO,CAAC,sBAAsB,CAAS;IAEvC;;;OAGG;IACH,OAAO,CAAC,YAAY,CAA+B;gBAGvB,OAAO,EAAE,iBAAiB,EACxB,IAAI,EAAE,QAAQ;IA+B5C;;OAEG;IACH,SAAS,CAAC,MAAM;IAIhB,iCAAiC;IACjB,SAAS,CAAC,MAAM,EAAE,MAAM;IAkBxC;;;;OAIG;IACI,wBAAwB,CAAC,IAAI,EAAE,QAAQ;IAI9C;;;;OAIG;IACI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ;IAIrD;;;OAGG;IACI,uBAAuB;IAI9B,wDAAwD;IACxD,OAAO,CAAC,mBAAmB;IAiB3B,mCAAmC;IACnC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,kCAAkC;IAClC,OAAO,CAAC,iBAAiB,CAEvB;IAEF,iGAAiG;IACjG,OAAO,CAAC,oBAAoB;CAoC7B"}
1
+ {"version":3,"file":"editor-renderer.d.ts","sourceRoot":"","sources":["../../src/core/editor-renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQtC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C,OAAO,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGnE;;;;;GAKG;AACH,qBACa,cAAe,SAAQ,QAAQ;IAwBtB,OAAO,CAAC,OAAO;IACb,OAAO,CAAC,IAAI;IAxBlC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAkB;IAEhC,8CAA8C;IAC9C,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAkB;IAEnD,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAE9C,kBAAkB;IAClB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;IAExC,iEAAiE;IACjE,OAAO,CAAC,sBAAsB,CAAS;IAEvC;;;OAGG;IACH,OAAO,CAAC,YAAY,CAA+B;gBAGvB,OAAO,EAAE,iBAAiB,EACxB,IAAI,EAAE,QAAQ;IAmC5C;;OAEG;IACH,SAAS,CAAC,MAAM;IAIhB,iCAAiC;IACjB,SAAS,CAAC,MAAM,EAAE,MAAM;IAsBxC;;;;OAIG;IACI,wBAAwB,CAAC,IAAI,EAAE,QAAQ;IAI9C;;;;OAIG;IACI,uBAAuB,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ;IAIrD;;;OAGG;IACI,uBAAuB;IAI9B;;;OAGG;IACI,cAAc,CAAC,IAAI,EAAE,UAAU;IAsBtB,OAAO;IA6BvB,wDAAwD;IACxD,OAAO,CAAC,mBAAmB;IAiB3B,mCAAmC;IACnC,OAAO,CAAC,gBAAgB,CAEtB;IAEF,kCAAkC;IAClC,OAAO,CAAC,iBAAiB,CAEvB;IAEF,iGAAiG;IACjG,OAAO,CAAC,oBAAoB;CAqC7B"}
@@ -1 +1 @@
1
- {"version":3,"file":"preview-renderer.d.ts","sourceRoot":"","sources":["../../src/core/preview-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAiB;gBAEnB,MAAM,EAAE,iBAAiB;IAiBrC;;OAEG;IACH,SAAS,CAAC,MAAM;CAIjB"}
1
+ {"version":3,"file":"preview-renderer.d.ts","sourceRoot":"","sources":["../../src/core/preview-renderer.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAItC;;;;GAIG;AACH,qBAAa,eAAgB,SAAQ,QAAQ;IAC3C,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAiB;gBAEZ,MAAM,EAAE,iBAAiB;IAiB5C;;OAEG;IACH,SAAS,CAAC,MAAM;CAIjB"}
@@ -1,11 +1,12 @@
1
1
  import { Figure } from '@planara/types';
2
+ import { Disposable } from 'tsyringe';
2
3
  import * as THREE from 'three';
3
4
  /**
4
5
  * Абстрактный базовый класс рендерера для работы с WebGL через OGL.
5
6
  * Отвечает за инициализацию сцены, камеры и цикла рендеринга.
6
7
  * @public
7
8
  */
8
- export declare abstract class Renderer {
9
+ export declare abstract class Renderer implements Disposable {
9
10
  /** Корневой объект сцены */
10
11
  protected scene: THREE.Scene;
11
12
  /** Камера для сцены */
@@ -38,7 +39,7 @@ export declare abstract class Renderer {
38
39
  */
39
40
  loop(): void;
40
41
  /**
41
- * Публичный метод для добавления фигуры.
42
+ * Добавление фигуры на сцену.
42
43
  * @param figure - Данные фигуры: position, normal, uv
43
44
  */
44
45
  addFigure(figure: Figure): THREE.Mesh;
@@ -63,7 +64,57 @@ export declare abstract class Renderer {
63
64
  * @internal
64
65
  */
65
66
  getMeshes(): THREE.Mesh[];
66
- /** Деструктор */
67
- destroy(): void;
67
+ /**
68
+ * Добавляет объект в сцену и (опционально) выставляет ему слой.
69
+ *
70
+ * @param obj - Объект, который нужно добавить в сцену.
71
+ * @param layer - (Опц.) Номер слоя, который следует установить объекту перед добавлением.
72
+ *
73
+ * @remarks
74
+ * Если рендерер уже диспоузнут (scene отсутствует), метод тихо завершится.
75
+ * Слой задаётся через `obj.layers.set(layer)`, после чего объект добавляется в `this.scene`.
76
+ *
77
+ * @example
78
+ * // Добавить оверлей на слой подсветок:
79
+ * add(overlayLine, OVERLAY_LAYER);
80
+ *
81
+ * @internal
82
+ */
83
+ addObject(obj: THREE.Object3D, layer?: number): void;
84
+ /**
85
+ * Удаляет объект из сцены (или из его родителя, если он есть).
86
+ *
87
+ * @param obj - Объект, который необходимо удалить.
88
+ *
89
+ * @remarks
90
+ * Если у объекта есть `parent`, он будет удалён из родителя. Иначе — метод попытается
91
+ * удалить его напрямую из `this.scene`. В рамках данного API метод не отвечает за
92
+ * освобождение GPU-ресурсов; освобождайте геометрию/материалы отдельно при необходимости.
93
+ *
94
+ * @example
95
+ * // Снять оверлей со сцены:
96
+ * removeObject(overlayLine);
97
+ *
98
+ * @internal
99
+ */
100
+ removeObject(obj: THREE.Object3D): void;
101
+ /**
102
+ * Включает указанный слой у активной камеры.
103
+ *
104
+ * @param layer - Номер слоя, который требуется сделать видимым для камеры.
105
+ *
106
+ * @remarks
107
+ * Полезно для показа служебных оверлеев (например, подсветки) на отдельном слое.
108
+ * Метод не изменяет слои Raycaster — ими должен управлять другой слой API (например, IRaycastAPI).
109
+ *
110
+ * @example
111
+ * // Убедиться, что камера видит слой оверлеев:
112
+ * enableCameraLayer(OVERLAY_LAYER);
113
+ *
114
+ * @internal
115
+ */
116
+ enableCameraLayer(layer: number): void;
117
+ /** Освобождает ресурсы рендерера, очищает внутренние данные. */
118
+ dispose(): Promise<void> | void;
68
119
  }
69
120
  //# sourceMappingURL=renderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;GAIG;AACH,8BAAsB,QAAQ;IAC5B,4BAA4B;IAC5B,SAAS,CAAC,KAAK,EAAG,KAAK,CAAC,KAAK,CAAC;IAE9B,uBAAuB;IACvB,SAAS,CAAC,MAAM,EAAG,KAAK,CAAC,iBAAiB,CAAC;IAE3C,mCAAmC;IACnC,SAAS,CAAC,QAAQ,EAAG,KAAK,CAAC,aAAa,CAAC;IAEzC,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAG,iBAAiB,CAAC;IAErC,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAM;IAEpC;;;OAGG;IACH,SAAS,aAAa,MAAM,EAAE,iBAAiB;IA+B/C;;OAEG;IACI,MAAM;IAMb;;OAEG;IACH,SAAS,CAAC,MAAM;IAIhB;;OAEG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;IAExB;;OAEG;IACI,IAAI;IAMX;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI;IAgC5C;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;IAK/B;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;IAKlC;;;;;OAKG;IACI,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE;IAIhC,iBAAiB;IACV,OAAO;CAaf"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;;GAIG;AACH,8BAAsB,QAAS,YAAW,UAAU;IAClD,4BAA4B;IAC5B,SAAS,CAAC,KAAK,EAAG,KAAK,CAAC,KAAK,CAAC;IAE9B,uBAAuB;IACvB,SAAS,CAAC,MAAM,EAAG,KAAK,CAAC,iBAAiB,CAAC;IAE3C,mCAAmC;IACnC,SAAS,CAAC,QAAQ,EAAG,KAAK,CAAC,aAAa,CAAC;IAEzC,uDAAuD;IACvD,SAAS,CAAC,MAAM,EAAG,iBAAiB,CAAC;IAErC,8BAA8B;IAC9B,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,CAAM;IAEpC;;;OAGG;IACH,SAAS,aAAa,MAAM,EAAE,iBAAiB;IA+B/C;;OAEG;IACI,MAAM;IAMb;;OAEG;IACH,SAAS,CAAC,MAAM;IAIhB;;OAEG;IACH,SAAS,CAAC,MAAM,IAAI,IAAI;IAExB;;OAEG;IACI,IAAI;IAMX;;;OAGG;IACI,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI;IAgC5C;;;;;OAKG;IACI,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;IAO/B;;;;;OAKG;IACI,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI;IAOlC;;;;;OAKG;IACI,SAAS,IAAI,KAAK,CAAC,IAAI,EAAE;IAIhC;;;;;;;;;;;;;;;OAeG;IACI,SAAS,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAS3D;;;;;;;;;;;;;;;OAeG;IACI,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI;IAW9C;;;;;;;;;;;;;;OAcG;IACI,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAM7C,gEAAgE;IACzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAavC"}
@@ -7,13 +7,13 @@ import * as THREE from 'three';
7
7
  * @public
8
8
  */
9
9
  export type EditorEvents = {
10
- /** Событие наведения на объект (hover). Payload: объект с mesh или null */
10
+ /** Событие наведения на объект (hover). Payload: объект с пересечениями или null */
11
11
  [EventTopics.SelectHover]: {
12
- mesh: THREE.Object3D;
12
+ intersection: THREE.Intersection;
13
13
  } | null;
14
- /** Событие клика по объекту. Payload: объект с mesh или null */
14
+ /** Событие клика по объекту. Payload: объект с пересечениями или null */
15
15
  [EventTopics.SelectClick]: {
16
- mesh: THREE.Object3D;
16
+ intersection: THREE.Intersection;
17
17
  } | null;
18
18
  /** Событие выбора объекта для редактирования. Payload: выбранный режим выборки */
19
19
  [EventTopics.ToolSelect]: {
@@ -1 +1 @@
1
- {"version":3,"file":"editor-events.d.ts","sourceRoot":"","sources":["../../src/events/editor-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,2EAA2E;IAC3E,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAC;IAE3D,gEAAgE;IAChE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;QAAE,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAA;KAAE,GAAG,IAAI,CAAC;IAE3D,kFAAkF;IAClF,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;KAAE,CAAC;CAC7E,CAAC"}
1
+ {"version":3,"file":"editor-events.d.ts","sourceRoot":"","sources":["../../src/events/editor-events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;;GAIG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,oFAAoF;IACpF,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;QAAE,YAAY,EAAE,KAAK,CAAC,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IAEvE,yEAAyE;IACzE,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE;QAAE,YAAY,EAAE,KAAK,CAAC,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IAEvE,kFAAkF;IAClF,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,UAAU,CAAC;QAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;KAAE,CAAC;CAC7E,CAAC"}
@@ -4,9 +4,9 @@
4
4
  * @public
5
5
  */
6
6
  export declare enum EventTopics {
7
- /** Событие наведения на объект (hover). Payload: mesh: Mesh | null */
7
+ /** Событие наведения на объект (hover). Payload: intersection: Intersection | null */
8
8
  SelectHover = "select.hover",
9
- /** Событие клика по объекту. Payload: mesh: Mesh | null */
9
+ /** Событие клика по объекту. Payload: intersection: Intersection | null */
10
10
  SelectClick = "select.click",
11
11
  /** Событие выбора объекта для редактирования. Payload: mode: SelectMode, object: THREE.Object3D | null */
12
12
  ToolSelect = "tool.select"
@@ -1 +1 @@
1
- {"version":3,"file":"event-topics.d.ts","sourceRoot":"","sources":["../../src/events/event-topics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,WAAW;IACrB,sEAAsE;IACtE,WAAW,iBAAiB;IAE5B,2DAA2D;IAC3D,WAAW,iBAAiB;IAE5B,0GAA0G;IAC1G,UAAU,gBAAgB;CAC3B"}
1
+ {"version":3,"file":"event-topics.d.ts","sourceRoot":"","sources":["../../src/events/event-topics.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oBAAY,WAAW;IACrB,sFAAsF;IACtF,WAAW,iBAAiB;IAE5B,2EAA2E;IAC3E,WAAW,iBAAiB;IAE5B,0GAA0G;IAC1G,UAAU,gBAAgB;CAC3B"}
@@ -1,14 +1,15 @@
1
1
  import { Camera } from 'three';
2
2
  import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
3
+ import { Disposable } from 'tsyringe';
3
4
  /**
4
5
  * Расширение для OrbitControls с отслеживанием управления камерой
5
6
  * @internal
6
7
  */
7
- export declare class OrbitWithState extends OrbitControls {
8
+ export declare class OrbitWithState extends OrbitControls implements Disposable {
8
9
  /** Используется ли Orbit-controls */
9
10
  isInteracting: boolean;
10
11
  constructor(camera: Camera, domElement?: HTMLElement | null);
11
12
  /** Очистка новых обработчиков событий */
12
- destroy(): void;
13
+ dispose(): Promise<void> | void;
13
14
  }
14
15
  //# sourceMappingURL=orbit-extension.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"orbit-extension.d.ts","sourceRoot":"","sources":["../../src/extensions/orbit-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE;;;GAGG;AACH,qBAAa,cAAe,SAAQ,aAAa;IAC/C,qCAAqC;IAC9B,aAAa,EAAE,OAAO,CAAS;gBAE1B,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI;IAU3D,yCAAyC;IAClC,OAAO;CAMf"}
1
+ {"version":3,"file":"orbit-extension.d.ts","sourceRoot":"","sources":["../../src/extensions/orbit-extension.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAE3C;;;GAGG;AACH,qBAAa,cAAe,SAAQ,aAAc,YAAW,UAAU;IACrE,qCAAqC;IAC9B,aAAa,EAAE,OAAO,CAAS;gBAE1B,MAAM,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,WAAW,GAAG,IAAI;IAU3D,yCAAyC;IAClC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAMvC"}
@@ -21,9 +21,7 @@ export declare class WireframeHandler implements IDisplayHandler {
21
21
  * Отключает wireframe-режим и возвращает оригинальные меши.
22
22
  */
23
23
  rollback(): void;
24
- /**
25
- * Очистка ресурсов.
26
- */
27
- destroy(): void;
24
+ /** Освобождает ресурсы хендлера, удаляет слушатели и очищает внутренние данные. */
25
+ dispose(): Promise<void> | void;
28
26
  }
29
27
  //# sourceMappingURL=wireframe-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"wireframe-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/display/wireframe-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;;;GAIG;AACH,qBACa,gBAAiB,YAAW,eAAe;IAOnB,OAAO,CAAC,IAAI;IAN/C,wBAAwB;IACxB,SAAgB,IAAI,EAAE,WAAW,CAAyB;IAE1D,kDAAkD;IAClD,OAAO,CAAC,WAAW,CAA4B;gBAEJ,IAAI,EAAE,QAAQ;IAEzD;;OAEG;IACI,MAAM,IAAI,IAAI;IAwCrB;;OAEG;IACI,QAAQ,IAAI,IAAI;IAoBvB;;OAEG;IACI,OAAO,IAAI,IAAI;CAOvB"}
1
+ {"version":3,"file":"wireframe-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/display/wireframe-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAEhF,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D;;;;GAIG;AACH,qBACa,gBAAiB,YAAW,eAAe;IAOZ,OAAO,CAAC,IAAI;IANtD,wBAAwB;IACxB,SAAgB,IAAI,EAAE,WAAW,CAAyB;IAE1D,kDAAkD;IAClD,OAAO,CAAC,WAAW,CAA4B;gBAEG,IAAI,EAAE,QAAQ;IAEhE;;OAEG;IACI,MAAM,IAAI,IAAI;IAwCrB;;OAEG;IACI,QAAQ,IAAI,IAAI;IAoBvB,mFAAmF;IAC5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAOvC"}
@@ -0,0 +1,46 @@
1
+ import { IEditorApi } from '../../types/api/editor-api';
2
+ import { ISelectHandler } from '../../interfaces/handler/select-handler';
3
+ import { IEditorStore } from '../../interfaces/store/editor-store';
4
+ import { SelectMode } from '@planara/types';
5
+ import { EditorEvents } from '../../events/editor-events';
6
+ import { EventTopics } from '../../events/event-topics';
7
+ import { SelectEventType } from '../../types/event/select-event-type';
8
+ /**
9
+ * Хендлер для выборки ребер.
10
+ * Управляет сценой через payload события рендерера.
11
+ * Обрабатывает hover и click.
12
+ * Меняет цвет грани конкретной модели из payload, в случае null возвращает исходное состояние.
13
+ * @internal
14
+ */
15
+ export declare class EdgeSelectHandler implements ISelectHandler {
16
+ private _api;
17
+ private _store;
18
+ /** Режим, которым управляет хендлер, нужен только менеджеру */
19
+ readonly mode: SelectMode;
20
+ /** Текущее наведённое ребро. */
21
+ private readonly _hoverLine;
22
+ /** Текущее выбранное ребро. */
23
+ private readonly _selectLine;
24
+ /** Текущее наведённое ребро из массива `LineSegments` модели. */
25
+ private _hovered;
26
+ /** Текущее выбранное ребро из массива `LineSegments` модели. */
27
+ private _selected;
28
+ /** Цвет ребра, на которое навелись */
29
+ private readonly _hoverColor;
30
+ /** Цвет выделенного ребра */
31
+ private readonly _selectColor;
32
+ constructor(_api: IEditorApi, _store: IEditorStore);
33
+ /** Обработка текущего режима выборки. */
34
+ handle(payload: EditorEvents[EventTopics.SelectHover] | EditorEvents[EventTopics.SelectClick], type: SelectEventType): void;
35
+ /** Откат текущего режима выборки */
36
+ rollback(): void;
37
+ /** Освобождает ресурсы хендлера, удаляет слушатели и очищает внутренние данные. */
38
+ dispose(): Promise<void> | void;
39
+ private _makeOverlayLine;
40
+ /** Локальные точки сегмента переводим в target (который висит на сцене) */
41
+ private _writeWorldSegment;
42
+ private _same;
43
+ /** Центрует `THREE.Line` на сегменте и ориентирует её вдоль ребра */
44
+ private _centerAndOrientLineOnSegment;
45
+ }
46
+ //# sourceMappingURL=edge-select-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"edge-select-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/select/edge-select-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAKtE;;;;;;GAMG;AACH,qBACa,iBAAkB,YAAW,cAAc;IAqB7B,OAAO,CAAC,IAAI;IACX,OAAO,CAAC,MAAM;IArBxC,+DAA+D;IAC/D,SAAgB,IAAI,EAAE,UAAU,CAAmB;IAEnD,gCAAgC;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IACxC,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;IAEzC,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAA2D;IAC3E,gEAAgE;IAChE,OAAO,CAAC,SAAS,CAA2D;IAG5E,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;gBAGZ,IAAI,EAAE,UAAU,EACf,MAAM,EAAE,YAAY;IActD,yCAAyC;IAClC,MAAM,CACX,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,EACtF,IAAI,EAAE,eAAe,GACpB,IAAI;IA0DP,oCAAoC;IAC7B,QAAQ,IAAI,IAAI;IASvB,mFAAmF;IAC5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IActC,OAAO,CAAC,gBAAgB;IAyBxB,2EAA2E;IAC3E,OAAO,CAAC,kBAAkB;IAkB1B,OAAO,CAAC,KAAK;IAOb,qEAAqE;IACrE,OAAO,CAAC,6BAA6B;CAqCtC"}
@@ -0,0 +1,34 @@
1
+ import { ISelectHandler } from '../../interfaces/handler/select-handler';
2
+ import { IRaycastAPI } from '../../interfaces/api/raycast-api';
3
+ import { SelectMode } from '@planara/types';
4
+ import { EditorEvents } from '../../events/editor-events';
5
+ import { EventTopics } from '../../events/event-topics';
6
+ import { SelectEventType } from '../../types/event/select-event-type';
7
+ /**
8
+ * Хендлер для выборки граней (faces/triangles).
9
+ * Управляет сценой через payload события рендерера.
10
+ * Обрабатывает hover и click.
11
+ * Меняет цвет грани конкретной модели из payload, в случае null возвращает исходное состояние.
12
+ * @internal
13
+ */
14
+ export declare class FaceSelectHandler implements ISelectHandler {
15
+ private _api;
16
+ /** Режим, которым управляет хендлер, нужен только менеджеру */
17
+ readonly mode: SelectMode;
18
+ /** Текущая наведённая грань */
19
+ private _hovered;
20
+ /** Текущая выбранная грань */
21
+ private _selected;
22
+ /** Цвет грани, на которую навелись */
23
+ private readonly _hoverColor;
24
+ /** Цвет выделенной граней */
25
+ private readonly _selectColor;
26
+ /** Изначальный цвет граней у модели, перед наложением эффектов*/
27
+ private readonly _defaultColor;
28
+ constructor(_api: IRaycastAPI);
29
+ handle(payload: EditorEvents[EventTopics.SelectHover] | EditorEvents[EventTopics.SelectClick], type: SelectEventType): void;
30
+ rollback(): void;
31
+ /** Освобождает ресурсы хендлера, удаляет слушатели и очищает внутренние данные. */
32
+ dispose(): Promise<void> | void;
33
+ }
34
+ //# sourceMappingURL=face-select-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face-select-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/select/face-select-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAItE;;;;;;GAMG;AACH,qBACa,iBAAkB,YAAW,cAAc;IAiBZ,OAAO,CAAC,IAAI;IAhBtD,+DAA+D;IAC/D,SAAgB,IAAI,EAAE,UAAU,CAAmB;IAEnD,+BAA+B;IAC/B,OAAO,CAAC,QAAQ,CAAwD;IACxE,8BAA8B;IAC9B,OAAO,CAAC,SAAS,CAAwD;IAGzE,sCAAsC;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,6BAA6B;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;gBAEQ,IAAI,EAAE,WAAW;IAE5D,MAAM,CACX,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,EACtF,IAAI,EAAE,eAAe,GACpB,IAAI;IAWA,QAAQ,IAAI,IAAI;IAIvB,mFAAmF;IAC5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGvC"}
@@ -1,4 +1,6 @@
1
1
  import { ISelectHandler } from '../../interfaces/handler/select-handler';
2
+ import { IEditorStore } from '../../interfaces/store/editor-store';
3
+ import { IRaycastAPI } from '../../interfaces/api/raycast-api';
2
4
  import { SelectMode } from '@planara/types';
3
5
  import { EditorEvents } from '../../events/editor-events';
4
6
  import { EventTopics } from '../../events/event-topics';
@@ -11,22 +13,25 @@ import { SelectEventType } from '../../types/event/select-event-type';
11
13
  * @internal
12
14
  */
13
15
  export declare class MeshSelectHandler implements ISelectHandler {
16
+ private _api;
17
+ private _store;
14
18
  /** Режим, которым управляет хендлер, нужен только менеджеру */
15
19
  readonly mode: SelectMode;
16
20
  /** Фигура, на которую навелись в данный момент */
17
21
  private _hoveredMesh;
18
22
  /** Фигура, которую выбрали в данный момент */
19
23
  private _selectedMesh;
20
- /** Цвет граней для фигуры, на которую навелись */
24
+ /** Цвет ребер для фигуры, на которую навелись */
21
25
  private readonly _hoverColor;
22
- /** Цвет граней для выделенной фигуры */
26
+ /** Цвет ребер для выделенной фигуры */
23
27
  private readonly _selectColor;
24
- /** Изначальный цвет граней у модели, перед наложением эффектов*/
28
+ /** Изначальный цвет ребер у модели, перед наложением эффектов*/
25
29
  private readonly _defaultColor;
26
- constructor();
30
+ constructor(_api: IRaycastAPI, _store: IEditorStore);
27
31
  handle(payload: EditorEvents[EventTopics.SelectHover] | EditorEvents[EventTopics.SelectClick], type: SelectEventType): void;
28
32
  rollback(): void;
29
- destroy(): void;
33
+ /** Освобождает ресурсы хендлера, удаляет слушатели и очищает внутренние данные. */
34
+ dispose(): Promise<void> | void;
30
35
  /** вспомогательный метод для изменения цвета ребер меша */
31
36
  private _setEdgesColor;
32
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mesh-select-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/select/mesh-select-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAEtE;;;;;;GAMG;AACH,qBACa,iBAAkB,YAAW,cAAc;IACtD,+DAA+D;IAC/D,SAAgB,IAAI,EAAE,UAAU,CAAmB;IAEnD,kDAAkD;IAClD,OAAO,CAAC,YAAY,CAA2B;IAC/C,8CAA8C;IAC9C,OAAO,CAAC,aAAa,CAA2B;IAGhD,kDAAkD;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAY;IACxC,wCAAwC;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAY;IACzC,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;;IAI1C,MAAM,CACJ,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,EACtF,IAAI,EAAE,eAAe,GACpB,IAAI;IA+CP,QAAQ,IAAI,IAAI;IAUhB,OAAO,IAAI,IAAI;IAIf,2DAA2D;IAC3D,OAAO,CAAC,cAAc;CAQvB"}
1
+ {"version":3,"file":"mesh-select-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/select/mesh-select-handler.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yCAAyC,CAAC;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAC;AAItE;;;;;;GAMG;AACH,qBACa,iBAAkB,YAAW,cAAc;IAkB7B,OAAO,CAAC,IAAI;IACX,OAAO,CAAC,MAAM;IAlBxC,+DAA+D;IAC/D,SAAgB,IAAI,EAAE,UAAU,CAAmB;IAEnD,kDAAkD;IAClD,OAAO,CAAC,YAAY,CAA2B;IAC/C,8CAA8C;IAC9C,OAAO,CAAC,aAAa,CAA2B;IAGhD,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAe;IAC3C,uCAAuC;IACvC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAC7C,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAY;gBAGT,IAAI,EAAE,WAAW,EAChB,MAAM,EAAE,YAAY;IAG/C,MAAM,CACX,OAAO,EAAE,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,EACtF,IAAI,EAAE,eAAe,GACpB,IAAI;IAuDA,QAAQ,IAAI,IAAI;IASvB,mFAAmF;IAC5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAItC,2DAA2D;IAC3D,OAAO,CAAC,cAAc;CAQvB"}
@@ -1,25 +1,27 @@
1
1
  import { ToolType } from '@planara/types';
2
2
  import { ITransformHelpersApi } from '../../interfaces/api/transform-helpers-api';
3
3
  import { IToolHandler } from '../../interfaces/handler/tool-handler';
4
- import * as THREE from 'three';
4
+ import { IEditorStore } from '../../interfaces/store/editor-store';
5
5
  /**
6
6
  * Базовый класс для инструментов
7
7
  * @internal
8
8
  */
9
9
  export declare abstract class BaseToolHandler implements IToolHandler {
10
10
  protected api: ITransformHelpersApi;
11
+ protected store: IEditorStore;
11
12
  abstract readonly mode: ToolType;
12
- protected constructor(api: ITransformHelpersApi);
13
+ protected constructor(api: ITransformHelpersApi, store: IEditorStore);
13
14
  /**
14
15
  * Обновляет состояние инструмента под текущее выделение.
15
16
  */
16
- handle(target: THREE.Object3D | null): void;
17
+ handle(): void;
17
18
  /**
18
19
  * Откатывает локальное состояние инструмента при смене инструмента.
19
20
  *
20
21
  * Вызывается менеджером перед активацией другого хендлера.
21
22
  */
22
23
  rollback(): void;
23
- destroy(): void;
24
+ /** Освобождение ресурсов хендлера. */
25
+ dispose(): Promise<void> | void;
24
26
  }
25
27
  //# sourceMappingURL=base-tool-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"base-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/base-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAE1E;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,YAAY;IAGrC,SAAS,CAAC,GAAG,EAAE,oBAAoB;IAFzD,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAEjC,SAAS,aAAuB,GAAG,EAAE,oBAAoB;IAEzD;;OAEG;IACH,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,IAAI;IAM3C;;;;OAIG;IACH,QAAQ,IAAI,IAAI;IAIhB,OAAO,IAAI,IAAI;CAGhB"}
1
+ {"version":3,"file":"base-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/base-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE;;;GAGG;AACH,8BAAsB,eAAgB,YAAW,YAAY;IAIzD,SAAS,CAAC,GAAG,EAAE,oBAAoB;IACnC,SAAS,CAAC,KAAK,EAAE,YAAY;IAJ/B,kBAAyB,IAAI,EAAE,QAAQ,CAAC;IAExC,SAAS,aACG,GAAG,EAAE,oBAAoB,EACzB,KAAK,EAAE,YAAY;IAG/B;;OAEG;IACI,MAAM,IAAI,IAAI;IAarB;;;;OAIG;IACI,QAAQ,IAAI,IAAI;IAIvB,sCAAsC;IAC/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAGvC"}
@@ -1,5 +1,6 @@
1
1
  import { BaseToolHandler } from './base-tool-handler';
2
2
  import { ITransformHelpersApi } from '../../interfaces/api/transform-helpers-api';
3
+ import { IEditorStore } from '../../interfaces/store/editor-store';
3
4
  import { ToolType } from '@planara/types';
4
5
  /**
5
6
  * Хендлер инструмента «вращение».
@@ -14,6 +15,6 @@ import { ToolType } from '@planara/types';
14
15
  export declare class RotateToolHandler extends BaseToolHandler {
15
16
  /** Инструмент, которым управляет хендлер, нужен только менеджеру */
16
17
  readonly mode: ToolType;
17
- constructor(api: ITransformHelpersApi);
18
+ constructor(api: ITransformHelpersApi, store: IEditorStore);
18
19
  }
19
20
  //# sourceMappingURL=rotate-tool-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rotate-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/rotate-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAEvF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;GASG;AACH,qBACa,iBAAkB,SAAQ,eAAe;IACpD,oEAAoE;IACpE,SAAgB,IAAI,EAAE,QAAQ,CAAmB;gBAEP,GAAG,EAAE,oBAAoB;CAGpE"}
1
+ {"version":3,"file":"rotate-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/rotate-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;GASG;AACH,qBACa,iBAAkB,SAAQ,eAAe;IACpD,oEAAoE;IACpE,SAAgB,IAAI,EAAE,QAAQ,CAAmB;gBAGxB,GAAG,EAAE,oBAAoB,EACxB,KAAK,EAAE,YAAY;CAI9C"}
@@ -1,5 +1,6 @@
1
1
  import { BaseToolHandler } from './base-tool-handler';
2
2
  import { ITransformHelpersApi } from '../../interfaces/api/transform-helpers-api';
3
+ import { IEditorStore } from '../../interfaces/store/editor-store';
3
4
  import { ToolType } from '@planara/types';
4
5
  /**
5
6
  * Хендлер инструмента «масштабирование».
@@ -14,6 +15,6 @@ import { ToolType } from '@planara/types';
14
15
  export declare class ScaleToolHandler extends BaseToolHandler {
15
16
  /** Инструмент, которым управляет хендлер, нужен только менеджеру */
16
17
  readonly mode: ToolType;
17
- constructor(api: ITransformHelpersApi);
18
+ constructor(api: ITransformHelpersApi, store: IEditorStore);
18
19
  }
19
20
  //# sourceMappingURL=scale-tool-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scale-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/scale-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAEvF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;GASG;AACH,qBACa,gBAAiB,SAAQ,eAAe;IACnD,oEAAoE;IACpE,SAAgB,IAAI,EAAE,QAAQ,CAAkB;gBAEN,GAAG,EAAE,oBAAoB;CAGpE"}
1
+ {"version":3,"file":"scale-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/scale-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;GASG;AACH,qBACa,gBAAiB,SAAQ,eAAe;IACnD,oEAAoE;IACpE,SAAgB,IAAI,EAAE,QAAQ,CAAkB;gBAGvB,GAAG,EAAE,oBAAoB,EACxB,KAAK,EAAE,YAAY;CAI9C"}
@@ -1,5 +1,6 @@
1
1
  import { BaseToolHandler } from './base-tool-handler';
2
2
  import { ITransformHelpersApi } from '../../interfaces/api/transform-helpers-api';
3
+ import { IEditorStore } from '../../interfaces/store/editor-store';
3
4
  import { ToolType } from '@planara/types';
4
5
  /**
5
6
  * Хендлер инструмента «перемещение».
@@ -14,6 +15,6 @@ import { ToolType } from '@planara/types';
14
15
  export declare class TranslateToolHandler extends BaseToolHandler {
15
16
  /** Инструмент, которым управляет хендлер, нужен только менеджеру */
16
17
  readonly mode: ToolType;
17
- constructor(api: ITransformHelpersApi);
18
+ constructor(api: ITransformHelpersApi, store: IEditorStore);
18
19
  }
19
20
  //# sourceMappingURL=translate-tool-handler.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"translate-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/translate-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AAEvF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;GASG;AACH,qBACa,oBAAqB,SAAQ,eAAe;IACvD,oEAAoE;IACpE,SAAgB,IAAI,EAAE,QAAQ,CAAsB;gBAEV,GAAG,EAAE,oBAAoB;CAGpE"}
1
+ {"version":3,"file":"translate-tool-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/tool/translate-tool-handler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI1C;;;;;;;;;GASG;AACH,qBACa,oBAAqB,SAAQ,eAAe;IACvD,oEAAoE;IACpE,SAAgB,IAAI,EAAE,QAAQ,CAAsB;gBAG3B,GAAG,EAAE,oBAAoB,EACxB,KAAK,EAAE,YAAY;CAI9C"}
@@ -1,3 +1,4 @@
1
+ import { Disposable } from 'tsyringe';
1
2
  import { DisplayMode, Figure, SelectMode, ToolType } from '@planara/types';
2
3
  import { IDisplayManager } from '../interfaces/manager/display-manager';
3
4
  import { ISelectManager } from '../interfaces/manager/select-manager';
@@ -7,7 +8,7 @@ import { IToolManager } from '../interfaces/manager/tool-manager';
7
8
  * Хаб для управления редактированием
8
9
  * @public
9
10
  */
10
- export declare class EditorHub {
11
+ export declare class EditorHub implements Disposable {
11
12
  private _displayManager;
12
13
  private _selectManager;
13
14
  private _toolManager;
@@ -19,6 +20,6 @@ export declare class EditorHub {
19
20
  resizeRenderer(): void;
20
21
  updateRenderer(): void;
21
22
  addFigure(figure: Figure): void;
22
- destroy(): void;
23
+ dispose(): Promise<void> | void;
23
24
  }
24
25
  //# sourceMappingURL=editor-hub.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"editor-hub.d.ts","sourceRoot":"","sources":["../../src/hub/editor-hub.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;;GAGG;AACH,qBACa,SAAS;IAES,OAAO,CAAC,eAAe;IACxB,OAAO,CAAC,cAAc;IACxB,OAAO,CAAC,YAAY;IAClB,OAAO,CAAC,SAAS;gBAHR,eAAe,EAAE,eAAe,EACjC,cAAc,EAAE,cAAc,EAChC,YAAY,EAAE,YAAY,EACxB,SAAS,EAAE,cAAc;IAM7D,cAAc,CAAC,IAAI,EAAE,WAAW;IAIhC,aAAa,CAAC,IAAI,EAAE,UAAU;IAI9B,WAAW,CAAC,IAAI,EAAE,QAAQ;IAI1B,cAAc;IAId,cAAc;IAId,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,OAAO;CAKR"}
1
+ {"version":3,"file":"editor-hub.d.ts","sourceRoot":"","sources":["../../src/hub/editor-hub.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAsB,MAAM,UAAU,CAAC;AAE/D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAEvE;;;GAGG;AACH,qBACa,SAAU,YAAW,UAAU;IAEb,OAAO,CAAC,eAAe;IACxB,OAAO,CAAC,cAAc;IACxB,OAAO,CAAC,YAAY;IAClB,OAAO,CAAC,SAAS;gBAHR,eAAe,EAAE,eAAe,EACjC,cAAc,EAAE,cAAc,EAChC,YAAY,EAAE,YAAY,EACxB,SAAS,EAAE,cAAc;IAMtD,cAAc,CAAC,IAAI,EAAE,WAAW;IAIhC,aAAa,CAAC,IAAI,EAAE,UAAU;IAI9B,WAAW,CAAC,IAAI,EAAE,QAAQ;IAI1B,cAAc;IAId,cAAc;IAId,SAAS,CAAC,MAAM,EAAE,MAAM;IAIxB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAKvC"}