@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
@@ -1,5 +1,8 @@
1
1
  import { DisplayMode } from '@planara/types';
2
+ import { Disposable as Disposable_2 } from 'tsyringe';
2
3
  import { Figure } from '@planara/types';
4
+ import { FigureType } from '@planara/types';
5
+ import { SceneMode } from '@planara/types';
3
6
  import { SelectMode } from '@planara/types';
4
7
  import * as THREE from 'three';
5
8
  import { ToolType } from '@planara/types';
@@ -26,13 +29,13 @@ export declare function createAppHub(canvas: HTMLCanvasElement): EditorHub;
26
29
  * @public
27
30
  */
28
31
  export declare type EditorEvents = {
29
- /** Событие наведения на объект (hover). Payload: объект с mesh или null */
32
+ /** Событие наведения на объект (hover). Payload: объект с пересечениями или null */
30
33
  [EventTopics.SelectHover]: {
31
- mesh: THREE.Object3D;
34
+ intersection: THREE.Intersection;
32
35
  } | null;
33
- /** Событие клика по объекту. Payload: объект с mesh или null */
36
+ /** Событие клика по объекту. Payload: объект с пересечениями или null */
34
37
  [EventTopics.SelectClick]: {
35
- mesh: THREE.Object3D;
38
+ intersection: THREE.Intersection;
36
39
  } | null;
37
40
  /** Событие выбора объекта для редактирования. Payload: выбранный режим выборки */
38
41
  [EventTopics.ToolSelect]: {
@@ -45,19 +48,21 @@ export declare type EditorEvents = {
45
48
  * Хаб для управления редактированием
46
49
  * @public
47
50
  */
48
- export declare class EditorHub {
51
+ export declare class EditorHub implements Disposable_2 {
49
52
  private _displayManager;
50
53
  private _selectManager;
51
54
  private _toolManager;
55
+ private _sceneManager;
52
56
  private _renderer;
53
- constructor(_displayManager: IDisplayManager, _selectManager: ISelectManager, _toolManager: IToolManager, _renderer: EditorRenderer);
57
+ constructor(_displayManager: IDisplayManager, _selectManager: ISelectManager, _toolManager: IToolManager, _sceneManager: ISceneManager, _renderer: EditorRenderer);
54
58
  setDisplayMode(mode: DisplayMode): void;
59
+ setSceneMode(sceneMode: SceneMode): void;
55
60
  setSelectMode(mode: SelectMode): void;
56
61
  setToolMode(mode: ToolType): void;
57
62
  resizeRenderer(): void;
58
63
  updateRenderer(): void;
59
- addFigure(figure: Figure): void;
60
- destroy(): void;
64
+ addFigure(mode: SceneMode, figure: FigureType): void;
65
+ dispose(): Promise<void> | void;
61
66
  }
62
67
 
63
68
  /**
@@ -75,7 +80,7 @@ export declare class EditorRenderer extends Renderer {
75
80
  private _transform;
76
81
  private readonly _transformHelper;
77
82
  /** Raycast для получения событий наведения/клика по модели*/
78
- private _raycaster;
83
+ private readonly _raycaster;
79
84
  /** Курсор мыши */
80
85
  private readonly _mouse;
81
86
  /** Были ли инициализированы обработчики событий (hover/click) */
@@ -109,6 +114,12 @@ export declare class EditorRenderer extends Renderer {
109
114
  * @internal
110
115
  */
111
116
  detachTransformControls(): void;
117
+ /**
118
+ * Настройка режимов для `Raycaster`.
119
+ * @internal
120
+ */
121
+ setRaycastMode(mode: SelectMode): void;
122
+ dispose(): void;
112
123
  /** Инициализация обработчиков событий на hover/click */
113
124
  private _initMouseListeners;
114
125
  /** Обработчик события для hover */
@@ -141,16 +152,16 @@ export declare class EventBus {
141
152
  * @public
142
153
  */
143
154
  export declare enum EventTopics {
144
- /** Событие наведения на объект (hover). Payload: mesh: Mesh | null */
155
+ /** Событие наведения на объект (hover). Payload: intersection: Intersection | null */
145
156
  SelectHover = "select.hover",
146
- /** Событие клика по объекту. Payload: mesh: Mesh | null */
157
+ /** Событие клика по объекту. Payload: intersection: Intersection | null */
147
158
  SelectClick = "select.click",
148
159
  /** Событие выбора объекта для редактирования. Payload: mode: SelectMode, object: THREE.Object3D | null */
149
160
  ToolSelect = "tool.select"
150
161
  }
151
162
 
152
163
  /**
153
- * Маркерный интерфейс для менеджеров отображения.
164
+ * Маркерный интерфейс для менеджера отображения.
154
165
  * @public
155
166
  */
156
167
  export declare interface IDisplayManager extends IManager {
@@ -161,26 +172,29 @@ export declare interface IDisplayManager extends IManager {
161
172
  * Каждый менеджер отвечает за одну фичу.
162
173
  * @public
163
174
  */
164
- export declare interface IManager {
175
+ export declare interface IManager extends Disposable_2 {
165
176
  /**
166
177
  * Выполняет основное действие менеджера.
167
178
  */
168
179
  manage(...args: unknown[]): void;
169
- /**
170
- * Освобождает ресурсы менеджера.
171
- */
172
- destroy(): void;
173
180
  }
174
181
 
175
182
  /**
176
- * Маркерный интерфейс для менеджеров выборки.
183
+ * Маркерный интерфейс для менеджера сцены.
184
+ * @public
185
+ */
186
+ export declare interface ISceneManager extends IManager {
187
+ }
188
+
189
+ /**
190
+ * Маркерный интерфейс для менеджера выборки.
177
191
  * @public
178
192
  */
179
193
  export declare interface ISelectManager extends IManager {
180
194
  }
181
195
 
182
196
  /**
183
- * Маркерный интерфейс для менеджеров инструментов.
197
+ * Маркерный интерфейс для менеджера инструментов.
184
198
  * @public
185
199
  */
186
200
  export declare interface IToolManager extends IManager {
@@ -228,7 +242,7 @@ export declare class PreviewRenderer extends Renderer {
228
242
  * Отвечает за инициализацию сцены, камеры и цикла рендеринга.
229
243
  * @public
230
244
  */
231
- export declare abstract class Renderer {
245
+ export declare abstract class Renderer implements Disposable_2 {
232
246
  /** Корневой объект сцены */
233
247
  protected scene: THREE.Scene;
234
248
  /** Камера для сцены */
@@ -261,7 +275,7 @@ export declare abstract class Renderer {
261
275
  */
262
276
  loop(): void;
263
277
  /**
264
- * Публичный метод для добавления фигуры.
278
+ * Добавление фигуры на сцену.
265
279
  * @param figure - Данные фигуры: position, normal, uv
266
280
  */
267
281
  addFigure(figure: Figure): THREE.Mesh;
@@ -286,8 +300,58 @@ export declare abstract class Renderer {
286
300
  * @internal
287
301
  */
288
302
  getMeshes(): THREE.Mesh[];
289
- /** Деструктор */
290
- destroy(): void;
303
+ /**
304
+ * Добавляет объект в сцену и (опционально) выставляет ему слой.
305
+ *
306
+ * @param obj - Объект, который нужно добавить в сцену.
307
+ * @param layer - (Опц.) Номер слоя, который следует установить объекту перед добавлением.
308
+ *
309
+ * @remarks
310
+ * Если рендерер уже диспоузнут (scene отсутствует), метод тихо завершится.
311
+ * Слой задаётся через `obj.layers.set(layer)`, после чего объект добавляется в `this.scene`.
312
+ *
313
+ * @example
314
+ * // Добавить оверлей на слой подсветок:
315
+ * add(overlayLine, OVERLAY_LAYER);
316
+ *
317
+ * @internal
318
+ */
319
+ addObject(obj: THREE.Object3D, layer?: number): void;
320
+ /**
321
+ * Удаляет объект из сцены (или из его родителя, если он есть).
322
+ *
323
+ * @param obj - Объект, который необходимо удалить.
324
+ *
325
+ * @remarks
326
+ * Если у объекта есть `parent`, он будет удалён из родителя. Иначе — метод попытается
327
+ * удалить его напрямую из `this.scene`. В рамках данного API метод не отвечает за
328
+ * освобождение GPU-ресурсов; освобождайте геометрию/материалы отдельно при необходимости.
329
+ *
330
+ * @example
331
+ * // Снять оверлей со сцены:
332
+ * removeObject(overlayLine);
333
+ *
334
+ * @internal
335
+ */
336
+ removeObject(obj: THREE.Object3D): void;
337
+ /**
338
+ * Включает указанный слой у активной камеры.
339
+ *
340
+ * @param layer - Номер слоя, который требуется сделать видимым для камеры.
341
+ *
342
+ * @remarks
343
+ * Полезно для показа служебных оверлеев (например, подсветки) на отдельном слое.
344
+ * Метод не изменяет слои Raycaster — ими должен управлять другой слой API (например, IRaycastAPI).
345
+ *
346
+ * @example
347
+ * // Убедиться, что камера видит слой оверлеев:
348
+ * enableCameraLayer(OVERLAY_LAYER);
349
+ *
350
+ * @internal
351
+ */
352
+ enableCameraLayer(layer: number): void;
353
+ /** Освобождает ресурсы рендерера, очищает внутренние данные. */
354
+ dispose(): Promise<void> | void;
291
355
  }
292
356
 
293
357
  export { }
@@ -1,5 +1,8 @@
1
1
  import { DisplayMode } from '@planara/types';
2
+ import { Disposable as Disposable_2 } from 'tsyringe';
2
3
  import { Figure } from '@planara/types';
4
+ import { FigureType } from '@planara/types';
5
+ import { SceneMode } from '@planara/types';
3
6
  import { SelectMode } from '@planara/types';
4
7
  import * as THREE from 'three';
5
8
  import { ToolType } from '@planara/types';
@@ -26,13 +29,13 @@ export declare function createAppHub(canvas: HTMLCanvasElement): EditorHub;
26
29
  * @public
27
30
  */
28
31
  export declare type EditorEvents = {
29
- /** Событие наведения на объект (hover). Payload: объект с mesh или null */
32
+ /** Событие наведения на объект (hover). Payload: объект с пересечениями или null */
30
33
  [EventTopics.SelectHover]: {
31
- mesh: THREE.Object3D;
34
+ intersection: THREE.Intersection;
32
35
  } | null;
33
- /** Событие клика по объекту. Payload: объект с mesh или null */
36
+ /** Событие клика по объекту. Payload: объект с пересечениями или null */
34
37
  [EventTopics.SelectClick]: {
35
- mesh: THREE.Object3D;
38
+ intersection: THREE.Intersection;
36
39
  } | null;
37
40
  /** Событие выбора объекта для редактирования. Payload: выбранный режим выборки */
38
41
  [EventTopics.ToolSelect]: {
@@ -45,19 +48,21 @@ export declare type EditorEvents = {
45
48
  * Хаб для управления редактированием
46
49
  * @public
47
50
  */
48
- export declare class EditorHub {
51
+ export declare class EditorHub implements Disposable_2 {
49
52
  private _displayManager;
50
53
  private _selectManager;
51
54
  private _toolManager;
55
+ private _sceneManager;
52
56
  private _renderer;
53
- constructor(_displayManager: IDisplayManager, _selectManager: ISelectManager, _toolManager: IToolManager, _renderer: EditorRenderer);
57
+ constructor(_displayManager: IDisplayManager, _selectManager: ISelectManager, _toolManager: IToolManager, _sceneManager: ISceneManager, _renderer: EditorRenderer);
54
58
  setDisplayMode(mode: DisplayMode): void;
59
+ setSceneMode(sceneMode: SceneMode): void;
55
60
  setSelectMode(mode: SelectMode): void;
56
61
  setToolMode(mode: ToolType): void;
57
62
  resizeRenderer(): void;
58
63
  updateRenderer(): void;
59
- addFigure(figure: Figure): void;
60
- destroy(): void;
64
+ addFigure(mode: SceneMode, figure: FigureType): void;
65
+ dispose(): Promise<void> | void;
61
66
  }
62
67
 
63
68
  /**
@@ -75,7 +80,7 @@ export declare class EditorRenderer extends Renderer {
75
80
  private _transform;
76
81
  private readonly _transformHelper;
77
82
  /** Raycast для получения событий наведения/клика по модели*/
78
- private _raycaster;
83
+ private readonly _raycaster;
79
84
  /** Курсор мыши */
80
85
  private readonly _mouse;
81
86
  /** Были ли инициализированы обработчики событий (hover/click) */
@@ -95,6 +100,8 @@ export declare class EditorRenderer extends Renderer {
95
100
  /* Excluded from this release type: setTransformControlsMode */
96
101
  /* Excluded from this release type: attachTransformControls */
97
102
  /* Excluded from this release type: detachTransformControls */
103
+ /* Excluded from this release type: setRaycastMode */
104
+ dispose(): void;
98
105
  /** Инициализация обработчиков событий на hover/click */
99
106
  private _initMouseListeners;
100
107
  /** Обработчик события для hover */
@@ -127,16 +134,16 @@ export declare class EventBus {
127
134
  * @public
128
135
  */
129
136
  export declare enum EventTopics {
130
- /** Событие наведения на объект (hover). Payload: mesh: Mesh | null */
137
+ /** Событие наведения на объект (hover). Payload: intersection: Intersection | null */
131
138
  SelectHover = "select.hover",
132
- /** Событие клика по объекту. Payload: mesh: Mesh | null */
139
+ /** Событие клика по объекту. Payload: intersection: Intersection | null */
133
140
  SelectClick = "select.click",
134
141
  /** Событие выбора объекта для редактирования. Payload: mode: SelectMode, object: THREE.Object3D | null */
135
142
  ToolSelect = "tool.select"
136
143
  }
137
144
 
138
145
  /**
139
- * Маркерный интерфейс для менеджеров отображения.
146
+ * Маркерный интерфейс для менеджера отображения.
140
147
  * @public
141
148
  */
142
149
  export declare interface IDisplayManager extends IManager {
@@ -147,26 +154,29 @@ export declare interface IDisplayManager extends IManager {
147
154
  * Каждый менеджер отвечает за одну фичу.
148
155
  * @public
149
156
  */
150
- export declare interface IManager {
157
+ export declare interface IManager extends Disposable_2 {
151
158
  /**
152
159
  * Выполняет основное действие менеджера.
153
160
  */
154
161
  manage(...args: unknown[]): void;
155
- /**
156
- * Освобождает ресурсы менеджера.
157
- */
158
- destroy(): void;
159
162
  }
160
163
 
161
164
  /**
162
- * Маркерный интерфейс для менеджеров выборки.
165
+ * Маркерный интерфейс для менеджера сцены.
166
+ * @public
167
+ */
168
+ export declare interface ISceneManager extends IManager {
169
+ }
170
+
171
+ /**
172
+ * Маркерный интерфейс для менеджера выборки.
163
173
  * @public
164
174
  */
165
175
  export declare interface ISelectManager extends IManager {
166
176
  }
167
177
 
168
178
  /**
169
- * Маркерный интерфейс для менеджеров инструментов.
179
+ * Маркерный интерфейс для менеджера инструментов.
170
180
  * @public
171
181
  */
172
182
  export declare interface IToolManager extends IManager {
@@ -201,7 +211,7 @@ export declare class ObjLoader {
201
211
  * Отвечает за инициализацию сцены, камеры и цикла рендеринга.
202
212
  * @public
203
213
  */
204
- export declare abstract class Renderer {
214
+ export declare abstract class Renderer implements Disposable_2 {
205
215
  /** Корневой объект сцены */
206
216
  protected scene: THREE.Scene;
207
217
  /** Камера для сцены */
@@ -234,15 +244,18 @@ export declare abstract class Renderer {
234
244
  */
235
245
  loop(): void;
236
246
  /**
237
- * Публичный метод для добавления фигуры.
247
+ * Добавление фигуры на сцену.
238
248
  * @param figure - Данные фигуры: position, normal, uv
239
249
  */
240
250
  addFigure(figure: Figure): THREE.Mesh;
241
251
  /* Excluded from this release type: addMesh */
242
252
  /* Excluded from this release type: removeMesh */
243
253
  /* Excluded from this release type: getMeshes */
244
- /** Деструктор */
245
- destroy(): void;
254
+ /* Excluded from this release type: addObject */
255
+ /* Excluded from this release type: removeObject */
256
+ /* Excluded from this release type: enableCameraLayer */
257
+ /** Освобождает ресурсы рендерера, очищает внутренние данные. */
258
+ dispose(): Promise<void> | void;
246
259
  }
247
260
 
248
261
  export { }