@planara/core 2.1.1 → 2.3.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 (85) hide show
  1. package/dist/constants/colors.d.ts +35 -0
  2. package/dist/constants/colors.d.ts.map +1 -0
  3. package/dist/constants/figure-geometries.d.ts +10 -0
  4. package/dist/constants/figure-geometries.d.ts.map +1 -0
  5. package/dist/constants/layers.d.ts +39 -0
  6. package/dist/constants/layers.d.ts.map +1 -0
  7. package/dist/constants/threshold.d.ts +5 -0
  8. package/dist/constants/threshold.d.ts.map +1 -0
  9. package/dist/core/editor-renderer.d.ts +8 -2
  10. package/dist/core/editor-renderer.d.ts.map +1 -1
  11. package/dist/core/preview-renderer.d.ts.map +1 -1
  12. package/dist/core/renderer.d.ts +55 -4
  13. package/dist/core/renderer.d.ts.map +1 -1
  14. package/dist/events/editor-events.d.ts +4 -4
  15. package/dist/events/editor-events.d.ts.map +1 -1
  16. package/dist/events/event-topics.d.ts +2 -2
  17. package/dist/events/event-topics.d.ts.map +1 -1
  18. package/dist/extensions/orbit-extension.d.ts +3 -2
  19. package/dist/extensions/orbit-extension.d.ts.map +1 -1
  20. package/dist/handlers/display/wireframe-handler.d.ts +14 -13
  21. package/dist/handlers/display/wireframe-handler.d.ts.map +1 -1
  22. package/dist/handlers/scene/add-figure-scene-handler.d.ts +23 -0
  23. package/dist/handlers/scene/add-figure-scene-handler.d.ts.map +1 -0
  24. package/dist/handlers/scene/delete-figure-scene-handler.d.ts +24 -0
  25. package/dist/handlers/scene/delete-figure-scene-handler.d.ts.map +1 -0
  26. package/dist/handlers/select/edge-select-handler.d.ts +46 -0
  27. package/dist/handlers/select/edge-select-handler.d.ts.map +1 -0
  28. package/dist/handlers/select/face-select-handler.d.ts +34 -0
  29. package/dist/handlers/select/face-select-handler.d.ts.map +1 -0
  30. package/dist/handlers/select/mesh-select-handler.d.ts +20 -8
  31. package/dist/handlers/select/mesh-select-handler.d.ts.map +1 -1
  32. package/dist/handlers/tool/base-tool-handler.d.ts +6 -4
  33. package/dist/handlers/tool/base-tool-handler.d.ts.map +1 -1
  34. package/dist/handlers/tool/rotate-tool-handler.d.ts +2 -1
  35. package/dist/handlers/tool/rotate-tool-handler.d.ts.map +1 -1
  36. package/dist/handlers/tool/scale-tool-handler.d.ts +2 -1
  37. package/dist/handlers/tool/scale-tool-handler.d.ts.map +1 -1
  38. package/dist/handlers/tool/translate-tool-handler.d.ts +2 -1
  39. package/dist/handlers/tool/translate-tool-handler.d.ts.map +1 -1
  40. package/dist/hub/editor-hub.d.ts +9 -5
  41. package/dist/hub/editor-hub.d.ts.map +1 -1
  42. package/dist/index.cjs.js +230 -201
  43. package/dist/index.d.ts +1 -0
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.es.js +9508 -5981
  46. package/dist/index.full.d.ts +87 -23
  47. package/dist/index.public.d.ts +36 -23
  48. package/dist/index.umd.js +197 -168
  49. package/dist/interfaces/api/raycast-api.d.ts +23 -0
  50. package/dist/interfaces/api/raycast-api.d.ts.map +1 -0
  51. package/dist/interfaces/api/scene-api.d.ts +50 -0
  52. package/dist/interfaces/api/scene-api.d.ts.map +1 -0
  53. package/dist/interfaces/handler/handler.d.ts +2 -5
  54. package/dist/interfaces/handler/handler.d.ts.map +1 -1
  55. package/dist/interfaces/handler/scene-handler.d.ts +14 -0
  56. package/dist/interfaces/handler/scene-handler.d.ts.map +1 -0
  57. package/dist/interfaces/manager/display-manager.d.ts +1 -1
  58. package/dist/interfaces/manager/manager.d.ts +2 -5
  59. package/dist/interfaces/manager/manager.d.ts.map +1 -1
  60. package/dist/interfaces/manager/scene-manager.d.ts +8 -0
  61. package/dist/interfaces/manager/scene-manager.d.ts.map +1 -0
  62. package/dist/interfaces/manager/select-manager.d.ts +1 -1
  63. package/dist/interfaces/manager/tool-manager.d.ts +1 -1
  64. package/dist/interfaces/store/editor-store.d.ts +44 -0
  65. package/dist/interfaces/store/editor-store.d.ts.map +1 -0
  66. package/dist/ioc/container.d.ts.map +1 -1
  67. package/dist/managers/display/display-manager.d.ts +6 -4
  68. package/dist/managers/display/display-manager.d.ts.map +1 -1
  69. package/dist/managers/scene/scene-manager.d.ts +19 -0
  70. package/dist/managers/scene/scene-manager.d.ts.map +1 -0
  71. package/dist/managers/select/select-manager.d.ts +11 -2
  72. package/dist/managers/select/select-manager.d.ts.map +1 -1
  73. package/dist/managers/tool/tool-manager.d.ts +6 -7
  74. package/dist/managers/tool/tool-manager.d.ts.map +1 -1
  75. package/dist/store/index.d.ts +37 -0
  76. package/dist/store/index.d.ts.map +1 -0
  77. package/dist/types/api/editor-api.d.ts +4 -0
  78. package/dist/types/api/editor-api.d.ts.map +1 -0
  79. package/dist/types/listener/selected-listener.d.ts +3 -0
  80. package/dist/types/listener/selected-listener.d.ts.map +1 -0
  81. package/dist/utils/helpers.d.ts +4 -0
  82. package/dist/utils/helpers.d.ts.map +1 -0
  83. package/dist/utils/renderer-api.d.ts +20 -2
  84. package/dist/utils/renderer-api.d.ts.map +1 -1
  85. package/package.json +3 -2
@@ -0,0 +1,35 @@
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
+ /**
25
+ * Цвет внешних ребер.
26
+ *
27
+ * @remarks
28
+ * Применяется при выключении постоянной подсветки выбранного ребра/грани.
29
+ * Должен визуально отличаться от {@link HOVER_COLOR} и {@link SELECT_COLOR}, чтобы не путать состояния.
30
+ *
31
+ * @example
32
+ * (line.material as THREE.LineBasicMaterial).color.setHex(EDGES_DEFAULT_COLOR);
33
+ */
34
+ export declare const EDGES_DEFAULT_COLOR = 2236962;
35
+ //# 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;AAErC;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,UAAW,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { FigureType } from '@planara/types';
2
+ import * as THREE from 'three';
3
+ /**
4
+ * Базовые фабрики геометрий по типу фигуры.
5
+ * Всегда создают новый экземпляр — безопасно для редактирования вершин.
6
+ */
7
+ export declare const BASE_GEOMETRIES: Record<FigureType, () => THREE.BufferGeometry>;
8
+ /** Базовый материал для фигур */
9
+ export declare const BASE_MATERIAL: THREE.MeshStandardMaterial;
10
+ //# sourceMappingURL=figure-geometries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"figure-geometries.d.ts","sourceRoot":"","sources":["../../src/constants/figure-geometries.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,KAAK,CAAC,cAAc,CAa1E,CAAC;AAEF,iCAAiC;AACjC,eAAO,MAAM,aAAa,4BAIxB,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;IAuC5C;;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;;;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;AAI3C;;;;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;IAyB5C;;;;;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"}
@@ -8,22 +8,23 @@ import { IMeshApi } from '../../interfaces/api/mesh-api';
8
8
  */
9
9
  export declare class WireframeHandler implements IDisplayHandler {
10
10
  private _api;
11
- /** Режим отображения */
11
+ /** Режим отображения. */
12
12
  readonly mode: DisplayMode;
13
- /** Список wireframe-объектов для текущих мешей */
14
- private _wireframes;
13
+ /** Сохраняем предыдущие значения wireframe для отката. */
14
+ private _prevWireframe;
15
+ /** Сохраняем исходные цвета материалов для отката */
16
+ private _prevColorMesh;
17
+ private _prevColorLines;
18
+ /** Цвет ребер для wireframe-режима. */
19
+ private _wireColor;
15
20
  constructor(_api: IMeshApi);
16
- /**
17
- * Применяет wireframe-режим к сцене.
18
- */
21
+ /** Применяет wireframe-режим к сцене. */
19
22
  handle(): void;
20
- /**
21
- * Отключает wireframe-режим и возвращает оригинальные меши.
22
- */
23
+ /** Отключает wireframe-режим и возвращает оригинальные меши. */
23
24
  rollback(): void;
24
- /**
25
- * Очистка ресурсов.
26
- */
27
- destroy(): void;
25
+ /** Освобождает ресурсы хендлера, удаляет слушатели и очищает внутренние данные. */
26
+ dispose(): Promise<void> | void;
27
+ /** Изменить цвет, который будет применяться в режиме wireframe. */
28
+ private _enableWireframeOnMaterial;
28
29
  }
29
30
  //# 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;IAcZ,OAAO,CAAC,IAAI;IAbtD,yBAAyB;IACzB,SAAgB,IAAI,EAAE,WAAW,CAAyB;IAE1D,0DAA0D;IAC1D,OAAO,CAAC,cAAc,CAAsC;IAE5D,qDAAqD;IACrD,OAAO,CAAC,cAAc,CAA0C;IAChE,OAAO,CAAC,eAAe,CAAmD;IAE1E,uCAAuC;IACvC,OAAO,CAAC,UAAU,CAA6B;gBAEG,IAAI,EAAE,QAAQ;IAEhE,yCAAyC;IAClC,MAAM,IAAI,IAAI;IAwBrB,gEAAgE;IACzD,QAAQ,IAAI,IAAI;IAuBvB,mFAAmF;IAC5E,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAItC,mEAAmE;IACnE,OAAO,CAAC,0BAA0B;CAgBnC"}
@@ -0,0 +1,23 @@
1
+ import { ISceneHandler } from '../../interfaces/handler/scene-handler';
2
+ import { IMeshApi } from '../../interfaces/api/mesh-api';
3
+ import { FigureType, SceneMode } from '@planara/types';
4
+ /**
5
+ * Хендлер для добавления базовых фигур на сцену.
6
+ * Управляет сценой через RendererApi.
7
+ * @internal
8
+ */
9
+ export declare class AddFigureSceneHandler implements ISceneHandler {
10
+ private _api;
11
+ /** Режим редактирования сцены */
12
+ readonly mode: SceneMode;
13
+ /** Последняя добавленная фигура, нужно для отката через `ctrl + z`. */
14
+ private _lastAddedMesh;
15
+ constructor(_api: IMeshApi);
16
+ /** Добавление базовых фигур на сцену, которые приписаны в `FigureType`. */
17
+ handle(figure: FigureType): void;
18
+ /** Срабатывает только на `ctrl + z`. */
19
+ rollback(): void;
20
+ /** Освобождает ресурсы хендлера. */
21
+ dispose(): Promise<void> | void;
22
+ }
23
+ //# sourceMappingURL=add-figure-scene-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-figure-scene-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/scene/add-figure-scene-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,KAAK,UAAU,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAO5D;;;;GAIG;AACH,qBACa,qBAAsB,YAAW,aAAa;IAOf,OAAO,CAAC,IAAI;IANtD,iCAAiC;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAuB;IAEtD,uEAAuE;IACvE,OAAO,CAAC,cAAc,CAA2B;gBAEC,IAAI,EAAE,QAAQ;IAEhE,2EAA2E;IACpE,MAAM,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IA4BvC,wCAAwC;IACjC,QAAQ,IAAI,IAAI;IASvB,oCAAoC;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAIvC"}
@@ -0,0 +1,24 @@
1
+ import { ISceneHandler } from '../../interfaces/handler/scene-handler';
2
+ import { IMeshApi } from '../../interfaces/api/mesh-api';
3
+ import { SceneMode } from '@planara/types';
4
+ import { IEditorStore } from '../../interfaces/store/editor-store';
5
+ /**
6
+ * Хендлер для удаления фигур со сцены.
7
+ * Управляет сценой через RendererApi.
8
+ * @internal
9
+ */
10
+ export declare class DeleteFigureSceneHandler implements ISceneHandler {
11
+ private _api;
12
+ private _store;
13
+ /** Режим редактирования сцены */
14
+ readonly mode: SceneMode;
15
+ /** Последняя удаленная фигура, сохраняем для отката через `ctrl + z` */
16
+ private _lastDeletedMesh;
17
+ constructor(_api: IMeshApi, _store: IEditorStore);
18
+ handle(): void;
19
+ /** Срабатывает только на `ctrl + z`. */
20
+ rollback(): void;
21
+ /** Освобождает ресурсы хендлера. */
22
+ dispose(): Promise<void> | void;
23
+ }
24
+ //# sourceMappingURL=delete-figure-scene-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"delete-figure-scene-handler.d.ts","sourceRoot":"","sources":["../../../src/handlers/scene/delete-figure-scene-handler.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAE9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAIxE;;;;GAIG;AACH,qBACa,wBAAyB,YAAW,aAAa;IAQnC,OAAO,CAAC,IAAI;IACX,OAAO,CAAC,MAAM;IARxC,iCAAiC;IACjC,SAAgB,IAAI,EAAE,SAAS,CAA0B;IAEzD,wEAAwE;IACxE,OAAO,CAAC,gBAAgB,CAA2B;gBAGlB,IAAI,EAAE,QAAQ,EACb,MAAM,EAAE,YAAY;IAG/C,MAAM,IAAI,IAAI;IAerB,wCAAwC;IACjC,QAAQ,IAAI,IAAI;IASvB,oCAAoC;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;CAIvC"}
@@ -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,23 +13,33 @@ 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
- /** Изначальный цвет граней у модели, перед наложением эффектов*/
25
- private readonly _defaultColor;
26
- constructor();
28
+ /** Исходные цвета материалов линий для отката */
29
+ private readonly _origLineColors;
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;
30
- /** вспомогательный метод для изменения цвета ребер меша */
31
- private _setEdgesColor;
33
+ /** Освобождает ресурсы хендлера, удаляет слушатели и очищает внутренние данные. */
34
+ dispose(): Promise<void> | void;
35
+ /**
36
+ * Перекрасить рёбра меша и запомнить оригинальный цвет (один раз на LineSegments).
37
+ */
38
+ private _paintEdges;
39
+ /**
40
+ * Восстановить исходный цвет рёбер меша из WeakMap.
41
+ * Если исходный цвет не сохранён (на всякий случай) — ничего не меняем.
42
+ */
43
+ private _restoreEdgesColor;
32
44
  }
33
45
  //# sourceMappingURL=mesh-select-handler.d.ts.map
@@ -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,iDAAiD;IACjD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkD;gBAGjD,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;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAa3B"}
@@ -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"}