@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
@@ -1,4 +1,5 @@
1
1
  import { DisplayMode } from '@planara/types';
2
+ import { Disposable as Disposable_2 } from 'tsyringe';
2
3
  import { Figure } from '@planara/types';
3
4
  import { SelectMode } from '@planara/types';
4
5
  import * as THREE from 'three';
@@ -26,13 +27,13 @@ export declare function createAppHub(canvas: HTMLCanvasElement): EditorHub;
26
27
  * @public
27
28
  */
28
29
  export declare type EditorEvents = {
29
- /** Событие наведения на объект (hover). Payload: объект с mesh или null */
30
+ /** Событие наведения на объект (hover). Payload: объект с пересечениями или null */
30
31
  [EventTopics.SelectHover]: {
31
- mesh: THREE.Object3D;
32
+ intersection: THREE.Intersection;
32
33
  } | null;
33
- /** Событие клика по объекту. Payload: объект с mesh или null */
34
+ /** Событие клика по объекту. Payload: объект с пересечениями или null */
34
35
  [EventTopics.SelectClick]: {
35
- mesh: THREE.Object3D;
36
+ intersection: THREE.Intersection;
36
37
  } | null;
37
38
  /** Событие выбора объекта для редактирования. Payload: выбранный режим выборки */
38
39
  [EventTopics.ToolSelect]: {
@@ -45,7 +46,7 @@ export declare type EditorEvents = {
45
46
  * Хаб для управления редактированием
46
47
  * @public
47
48
  */
48
- export declare class EditorHub {
49
+ export declare class EditorHub implements Disposable_2 {
49
50
  private _displayManager;
50
51
  private _selectManager;
51
52
  private _toolManager;
@@ -57,7 +58,7 @@ export declare class EditorHub {
57
58
  resizeRenderer(): void;
58
59
  updateRenderer(): void;
59
60
  addFigure(figure: Figure): void;
60
- destroy(): void;
61
+ dispose(): Promise<void> | void;
61
62
  }
62
63
 
63
64
  /**
@@ -75,7 +76,7 @@ export declare class EditorRenderer extends Renderer {
75
76
  private _transform;
76
77
  private readonly _transformHelper;
77
78
  /** Raycast для получения событий наведения/клика по модели*/
78
- private _raycaster;
79
+ private readonly _raycaster;
79
80
  /** Курсор мыши */
80
81
  private readonly _mouse;
81
82
  /** Были ли инициализированы обработчики событий (hover/click) */
@@ -109,6 +110,12 @@ export declare class EditorRenderer extends Renderer {
109
110
  * @internal
110
111
  */
111
112
  detachTransformControls(): void;
113
+ /**
114
+ * Настройка режимов для `Raycaster`.
115
+ * @internal
116
+ */
117
+ setRaycastMode(mode: SelectMode): void;
118
+ dispose(): void;
112
119
  /** Инициализация обработчиков событий на hover/click */
113
120
  private _initMouseListeners;
114
121
  /** Обработчик события для hover */
@@ -141,9 +148,9 @@ export declare class EventBus {
141
148
  * @public
142
149
  */
143
150
  export declare enum EventTopics {
144
- /** Событие наведения на объект (hover). Payload: mesh: Mesh | null */
151
+ /** Событие наведения на объект (hover). Payload: intersection: Intersection | null */
145
152
  SelectHover = "select.hover",
146
- /** Событие клика по объекту. Payload: mesh: Mesh | null */
153
+ /** Событие клика по объекту. Payload: intersection: Intersection | null */
147
154
  SelectClick = "select.click",
148
155
  /** Событие выбора объекта для редактирования. Payload: mode: SelectMode, object: THREE.Object3D | null */
149
156
  ToolSelect = "tool.select"
@@ -161,15 +168,11 @@ export declare interface IDisplayManager extends IManager {
161
168
  * Каждый менеджер отвечает за одну фичу.
162
169
  * @public
163
170
  */
164
- export declare interface IManager {
171
+ export declare interface IManager extends Disposable_2 {
165
172
  /**
166
173
  * Выполняет основное действие менеджера.
167
174
  */
168
175
  manage(...args: unknown[]): void;
169
- /**
170
- * Освобождает ресурсы менеджера.
171
- */
172
- destroy(): void;
173
176
  }
174
177
 
175
178
  /**
@@ -228,7 +231,7 @@ export declare class PreviewRenderer extends Renderer {
228
231
  * Отвечает за инициализацию сцены, камеры и цикла рендеринга.
229
232
  * @public
230
233
  */
231
- export declare abstract class Renderer {
234
+ export declare abstract class Renderer implements Disposable_2 {
232
235
  /** Корневой объект сцены */
233
236
  protected scene: THREE.Scene;
234
237
  /** Камера для сцены */
@@ -261,7 +264,7 @@ export declare abstract class Renderer {
261
264
  */
262
265
  loop(): void;
263
266
  /**
264
- * Публичный метод для добавления фигуры.
267
+ * Добавление фигуры на сцену.
265
268
  * @param figure - Данные фигуры: position, normal, uv
266
269
  */
267
270
  addFigure(figure: Figure): THREE.Mesh;
@@ -286,8 +289,58 @@ export declare abstract class Renderer {
286
289
  * @internal
287
290
  */
288
291
  getMeshes(): THREE.Mesh[];
289
- /** Деструктор */
290
- destroy(): void;
292
+ /**
293
+ * Добавляет объект в сцену и (опционально) выставляет ему слой.
294
+ *
295
+ * @param obj - Объект, который нужно добавить в сцену.
296
+ * @param layer - (Опц.) Номер слоя, который следует установить объекту перед добавлением.
297
+ *
298
+ * @remarks
299
+ * Если рендерер уже диспоузнут (scene отсутствует), метод тихо завершится.
300
+ * Слой задаётся через `obj.layers.set(layer)`, после чего объект добавляется в `this.scene`.
301
+ *
302
+ * @example
303
+ * // Добавить оверлей на слой подсветок:
304
+ * add(overlayLine, OVERLAY_LAYER);
305
+ *
306
+ * @internal
307
+ */
308
+ addObject(obj: THREE.Object3D, layer?: number): void;
309
+ /**
310
+ * Удаляет объект из сцены (или из его родителя, если он есть).
311
+ *
312
+ * @param obj - Объект, который необходимо удалить.
313
+ *
314
+ * @remarks
315
+ * Если у объекта есть `parent`, он будет удалён из родителя. Иначе — метод попытается
316
+ * удалить его напрямую из `this.scene`. В рамках данного API метод не отвечает за
317
+ * освобождение GPU-ресурсов; освобождайте геометрию/материалы отдельно при необходимости.
318
+ *
319
+ * @example
320
+ * // Снять оверлей со сцены:
321
+ * removeObject(overlayLine);
322
+ *
323
+ * @internal
324
+ */
325
+ removeObject(obj: THREE.Object3D): void;
326
+ /**
327
+ * Включает указанный слой у активной камеры.
328
+ *
329
+ * @param layer - Номер слоя, который требуется сделать видимым для камеры.
330
+ *
331
+ * @remarks
332
+ * Полезно для показа служебных оверлеев (например, подсветки) на отдельном слое.
333
+ * Метод не изменяет слои Raycaster — ими должен управлять другой слой API (например, IRaycastAPI).
334
+ *
335
+ * @example
336
+ * // Убедиться, что камера видит слой оверлеев:
337
+ * enableCameraLayer(OVERLAY_LAYER);
338
+ *
339
+ * @internal
340
+ */
341
+ enableCameraLayer(layer: number): void;
342
+ /** Освобождает ресурсы рендерера, очищает внутренние данные. */
343
+ dispose(): Promise<void> | void;
291
344
  }
292
345
 
293
346
  export { }
@@ -1,4 +1,5 @@
1
1
  import { DisplayMode } from '@planara/types';
2
+ import { Disposable as Disposable_2 } from 'tsyringe';
2
3
  import { Figure } from '@planara/types';
3
4
  import { SelectMode } from '@planara/types';
4
5
  import * as THREE from 'three';
@@ -26,13 +27,13 @@ export declare function createAppHub(canvas: HTMLCanvasElement): EditorHub;
26
27
  * @public
27
28
  */
28
29
  export declare type EditorEvents = {
29
- /** Событие наведения на объект (hover). Payload: объект с mesh или null */
30
+ /** Событие наведения на объект (hover). Payload: объект с пересечениями или null */
30
31
  [EventTopics.SelectHover]: {
31
- mesh: THREE.Object3D;
32
+ intersection: THREE.Intersection;
32
33
  } | null;
33
- /** Событие клика по объекту. Payload: объект с mesh или null */
34
+ /** Событие клика по объекту. Payload: объект с пересечениями или null */
34
35
  [EventTopics.SelectClick]: {
35
- mesh: THREE.Object3D;
36
+ intersection: THREE.Intersection;
36
37
  } | null;
37
38
  /** Событие выбора объекта для редактирования. Payload: выбранный режим выборки */
38
39
  [EventTopics.ToolSelect]: {
@@ -45,7 +46,7 @@ export declare type EditorEvents = {
45
46
  * Хаб для управления редактированием
46
47
  * @public
47
48
  */
48
- export declare class EditorHub {
49
+ export declare class EditorHub implements Disposable_2 {
49
50
  private _displayManager;
50
51
  private _selectManager;
51
52
  private _toolManager;
@@ -57,7 +58,7 @@ export declare class EditorHub {
57
58
  resizeRenderer(): void;
58
59
  updateRenderer(): void;
59
60
  addFigure(figure: Figure): void;
60
- destroy(): void;
61
+ dispose(): Promise<void> | void;
61
62
  }
62
63
 
63
64
  /**
@@ -75,7 +76,7 @@ export declare class EditorRenderer extends Renderer {
75
76
  private _transform;
76
77
  private readonly _transformHelper;
77
78
  /** Raycast для получения событий наведения/клика по модели*/
78
- private _raycaster;
79
+ private readonly _raycaster;
79
80
  /** Курсор мыши */
80
81
  private readonly _mouse;
81
82
  /** Были ли инициализированы обработчики событий (hover/click) */
@@ -95,6 +96,8 @@ export declare class EditorRenderer extends Renderer {
95
96
  /* Excluded from this release type: setTransformControlsMode */
96
97
  /* Excluded from this release type: attachTransformControls */
97
98
  /* Excluded from this release type: detachTransformControls */
99
+ /* Excluded from this release type: setRaycastMode */
100
+ dispose(): void;
98
101
  /** Инициализация обработчиков событий на hover/click */
99
102
  private _initMouseListeners;
100
103
  /** Обработчик события для hover */
@@ -127,9 +130,9 @@ export declare class EventBus {
127
130
  * @public
128
131
  */
129
132
  export declare enum EventTopics {
130
- /** Событие наведения на объект (hover). Payload: mesh: Mesh | null */
133
+ /** Событие наведения на объект (hover). Payload: intersection: Intersection | null */
131
134
  SelectHover = "select.hover",
132
- /** Событие клика по объекту. Payload: mesh: Mesh | null */
135
+ /** Событие клика по объекту. Payload: intersection: Intersection | null */
133
136
  SelectClick = "select.click",
134
137
  /** Событие выбора объекта для редактирования. Payload: mode: SelectMode, object: THREE.Object3D | null */
135
138
  ToolSelect = "tool.select"
@@ -147,15 +150,11 @@ export declare interface IDisplayManager extends IManager {
147
150
  * Каждый менеджер отвечает за одну фичу.
148
151
  * @public
149
152
  */
150
- export declare interface IManager {
153
+ export declare interface IManager extends Disposable_2 {
151
154
  /**
152
155
  * Выполняет основное действие менеджера.
153
156
  */
154
157
  manage(...args: unknown[]): void;
155
- /**
156
- * Освобождает ресурсы менеджера.
157
- */
158
- destroy(): void;
159
158
  }
160
159
 
161
160
  /**
@@ -201,7 +200,7 @@ export declare class ObjLoader {
201
200
  * Отвечает за инициализацию сцены, камеры и цикла рендеринга.
202
201
  * @public
203
202
  */
204
- export declare abstract class Renderer {
203
+ export declare abstract class Renderer implements Disposable_2 {
205
204
  /** Корневой объект сцены */
206
205
  protected scene: THREE.Scene;
207
206
  /** Камера для сцены */
@@ -234,15 +233,18 @@ export declare abstract class Renderer {
234
233
  */
235
234
  loop(): void;
236
235
  /**
237
- * Публичный метод для добавления фигуры.
236
+ * Добавление фигуры на сцену.
238
237
  * @param figure - Данные фигуры: position, normal, uv
239
238
  */
240
239
  addFigure(figure: Figure): THREE.Mesh;
241
240
  /* Excluded from this release type: addMesh */
242
241
  /* Excluded from this release type: removeMesh */
243
242
  /* Excluded from this release type: getMeshes */
244
- /** Деструктор */
245
- destroy(): void;
243
+ /* Excluded from this release type: addObject */
244
+ /* Excluded from this release type: removeObject */
245
+ /* Excluded from this release type: enableCameraLayer */
246
+ /** Освобождает ресурсы рендерера, очищает внутренние данные. */
247
+ dispose(): Promise<void> | void;
246
248
  }
247
249
 
248
250
  export { }