@planara/core 2.7.1 → 3.0.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.
- package/README.md +5 -0
- package/dist/api/modules/controls-state-api.d.ts +23 -0
- package/dist/api/modules/controls-state-api.d.ts.map +1 -0
- package/dist/api/modules/mesh-api.d.ts +30 -0
- package/dist/api/modules/mesh-api.d.ts.map +1 -0
- package/dist/api/modules/raycast-api.d.ts +28 -0
- package/dist/api/modules/raycast-api.d.ts.map +1 -0
- package/dist/api/modules/transform-api.d.ts +33 -0
- package/dist/api/modules/transform-api.d.ts.map +1 -0
- package/dist/api/renderer/camera-api.d.ts +26 -0
- package/dist/api/renderer/camera-api.d.ts.map +1 -0
- package/dist/api/renderer/dom-api.d.ts +24 -0
- package/dist/api/renderer/dom-api.d.ts.map +1 -0
- package/dist/api/renderer/scene-api.d.ts +26 -0
- package/dist/api/renderer/scene-api.d.ts.map +1 -0
- package/dist/constants/colors.d.ts +12 -0
- package/dist/constants/colors.d.ts.map +1 -1
- package/dist/constants/figure-geometries.d.ts +55 -4
- package/dist/constants/figure-geometries.d.ts.map +1 -1
- package/dist/constants/layers.d.ts +12 -0
- package/dist/constants/layers.d.ts.map +1 -1
- package/dist/constants/messages.d.ts +18 -0
- package/dist/constants/messages.d.ts.map +1 -0
- package/dist/constants/threshold.d.ts +42 -2
- package/dist/constants/threshold.d.ts.map +1 -1
- package/dist/controllers/renderer-controller.d.ts +74 -0
- package/dist/controllers/renderer-controller.d.ts.map +1 -0
- package/dist/core/renderer.d.ts +110 -78
- package/dist/core/renderer.d.ts.map +1 -1
- package/dist/decorators/use-policy.d.ts +5 -0
- package/dist/decorators/use-policy.d.ts.map +1 -0
- package/dist/errors/policy-error.d.ts +9 -0
- package/dist/errors/policy-error.d.ts.map +1 -0
- package/dist/events/editor-events.d.ts +2 -6
- package/dist/events/editor-events.d.ts.map +1 -1
- package/dist/events/event-bus.d.ts +102 -5
- package/dist/events/event-bus.d.ts.map +1 -1
- package/dist/events/event-topics.d.ts +3 -3
- package/dist/events/event-topics.d.ts.map +1 -1
- package/dist/handlers/display/wireframe-handler.d.ts +3 -1
- package/dist/handlers/display/wireframe-handler.d.ts.map +1 -1
- package/dist/handlers/scene/add-figure-scene-handler.d.ts +2 -0
- package/dist/handlers/scene/add-figure-scene-handler.d.ts.map +1 -1
- package/dist/handlers/scene/delete-figure-scene-handler.d.ts +2 -2
- package/dist/handlers/scene/delete-figure-scene-handler.d.ts.map +1 -1
- package/dist/handlers/select/edge-select-handler.d.ts +10 -4
- package/dist/handlers/select/edge-select-handler.d.ts.map +1 -1
- package/dist/handlers/select/face-select-handler.d.ts +65 -6
- package/dist/handlers/select/face-select-handler.d.ts.map +1 -1
- package/dist/handlers/select/mesh-select-handler.d.ts +5 -3
- package/dist/handlers/select/mesh-select-handler.d.ts.map +1 -1
- package/dist/handlers/select/vertex-select-handler.d.ts +10 -4
- package/dist/handlers/select/vertex-select-handler.d.ts.map +1 -1
- package/dist/handlers/tool/base-tool-handler.d.ts +9 -6
- package/dist/handlers/tool/base-tool-handler.d.ts.map +1 -1
- package/dist/handlers/tool/rotate-tool-handler.d.ts +4 -3
- package/dist/handlers/tool/rotate-tool-handler.d.ts.map +1 -1
- package/dist/handlers/tool/scale-tool-handler.d.ts +4 -3
- package/dist/handlers/tool/scale-tool-handler.d.ts.map +1 -1
- package/dist/handlers/tool/translate-tool-handler.d.ts +4 -3
- package/dist/handlers/tool/translate-tool-handler.d.ts.map +1 -1
- package/dist/hub/app-hub.d.ts +1 -0
- package/dist/hub/app-hub.d.ts.map +1 -1
- package/dist/hub/editor-hub.d.ts +22 -17
- package/dist/hub/editor-hub.d.ts.map +1 -1
- package/dist/index.cjs.js +2 -2
- package/dist/index.d.ts +15 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.es.js +1750 -1378
- package/dist/index.full.d.ts +635 -229
- package/dist/index.public.d.ts +653 -147
- package/dist/index.umd.js +2 -2
- package/dist/interfaces/api/camera-api.d.ts +64 -0
- package/dist/interfaces/api/camera-api.d.ts.map +1 -0
- package/dist/interfaces/api/controls-state-api.d.ts +63 -0
- package/dist/interfaces/api/controls-state-api.d.ts.map +1 -0
- package/dist/interfaces/api/dom-api.d.ts +49 -0
- package/dist/interfaces/api/dom-api.d.ts.map +1 -0
- package/dist/interfaces/api/mesh-api.d.ts +93 -12
- package/dist/interfaces/api/mesh-api.d.ts.map +1 -1
- package/dist/interfaces/api/raycast-api.d.ts +6 -1
- package/dist/interfaces/api/raycast-api.d.ts.map +1 -1
- package/dist/interfaces/api/renderer/renderable.d.ts +45 -0
- package/dist/interfaces/api/renderer/renderable.d.ts.map +1 -0
- package/dist/interfaces/api/renderer/renderer-access.d.ts +34 -0
- package/dist/interfaces/api/renderer/renderer-access.d.ts.map +1 -0
- package/dist/interfaces/api/renderer/renderer-camera-access.d.ts +37 -0
- package/dist/interfaces/api/renderer/renderer-camera-access.d.ts.map +1 -0
- package/dist/interfaces/api/renderer/renderer-dom-access.d.ts +51 -0
- package/dist/interfaces/api/renderer/renderer-dom-access.d.ts.map +1 -0
- package/dist/interfaces/api/renderer/renderer-scene-access.d.ts +45 -0
- package/dist/interfaces/api/renderer/renderer-scene-access.d.ts.map +1 -0
- package/dist/interfaces/api/renderer-api.d.ts +35 -0
- package/dist/interfaces/api/renderer-api.d.ts.map +1 -0
- package/dist/interfaces/api/scene-api.d.ts +66 -26
- package/dist/interfaces/api/scene-api.d.ts.map +1 -1
- package/dist/interfaces/api/transform-api.d.ts +120 -0
- package/dist/interfaces/api/transform-api.d.ts.map +1 -0
- package/dist/interfaces/command/index.d.ts +9 -0
- package/dist/interfaces/command/index.d.ts.map +1 -0
- package/dist/interfaces/controller/controller.d.ts +38 -0
- package/dist/interfaces/controller/controller.d.ts.map +1 -0
- package/dist/interfaces/handler/display-handler.d.ts +9 -1
- package/dist/interfaces/handler/display-handler.d.ts.map +1 -1
- package/dist/interfaces/handler/handler.d.ts +2 -0
- package/dist/interfaces/handler/handler.d.ts.map +1 -1
- package/dist/interfaces/handler/scene-handler.d.ts +1 -0
- package/dist/interfaces/handler/scene-handler.d.ts.map +1 -1
- package/dist/interfaces/handler/select-handler.d.ts +1 -0
- package/dist/interfaces/handler/select-handler.d.ts.map +1 -1
- package/dist/interfaces/handler/tool-handler.d.ts +1 -0
- package/dist/interfaces/handler/tool-handler.d.ts.map +1 -1
- package/dist/interfaces/manager/display-manager.d.ts +3 -1
- package/dist/interfaces/manager/display-manager.d.ts.map +1 -1
- package/dist/interfaces/manager/manager.d.ts +12 -1
- package/dist/interfaces/manager/manager.d.ts.map +1 -1
- package/dist/interfaces/manager/scene-manager.d.ts +3 -1
- package/dist/interfaces/manager/scene-manager.d.ts.map +1 -1
- package/dist/interfaces/manager/select-manager.d.ts +3 -1
- package/dist/interfaces/manager/select-manager.d.ts.map +1 -1
- package/dist/interfaces/manager/tool-manager.d.ts +3 -1
- package/dist/interfaces/manager/tool-manager.d.ts.map +1 -1
- package/dist/interfaces/mediator/index.d.ts +51 -0
- package/dist/interfaces/mediator/index.d.ts.map +1 -0
- package/dist/interfaces/middleware/index.d.ts +50 -0
- package/dist/interfaces/middleware/index.d.ts.map +1 -0
- package/dist/interfaces/module/renderable-module.d.ts +27 -0
- package/dist/interfaces/module/renderable-module.d.ts.map +1 -0
- package/dist/interfaces/module/runtime-module.d.ts +54 -0
- package/dist/interfaces/module/runtime-module.d.ts.map +1 -0
- package/dist/interfaces/module/updatable-module.d.ts +48 -0
- package/dist/interfaces/module/updatable-module.d.ts.map +1 -0
- package/dist/interfaces/policy/index.d.ts +21 -0
- package/dist/interfaces/policy/index.d.ts.map +1 -0
- package/dist/interfaces/response/index.d.ts +22 -0
- package/dist/interfaces/response/index.d.ts.map +1 -0
- package/dist/interfaces/store/display-store.d.ts +21 -0
- package/dist/interfaces/store/display-store.d.ts.map +1 -0
- package/dist/interfaces/store/{editor-store.d.ts → select-store.d.ts} +16 -24
- package/dist/interfaces/store/select-store.d.ts.map +1 -0
- package/dist/interfaces/store/tool-store.d.ts +27 -0
- package/dist/interfaces/store/tool-store.d.ts.map +1 -0
- package/dist/interfaces/store/transform-store.d.ts +11 -0
- package/dist/interfaces/store/transform-store.d.ts.map +1 -0
- package/dist/ioc/container.d.ts.map +1 -1
- package/dist/managers/display/display-manager.d.ts +5 -2
- package/dist/managers/display/display-manager.d.ts.map +1 -1
- package/dist/managers/scene/scene-manager.d.ts +3 -0
- package/dist/managers/scene/scene-manager.d.ts.map +1 -1
- package/dist/managers/select/select-manager.d.ts +5 -2
- package/dist/managers/select/select-manager.d.ts.map +1 -1
- package/dist/managers/tool/tool-manager.d.ts +7 -4
- package/dist/managers/tool/tool-manager.d.ts.map +1 -1
- package/dist/mediator/index.d.ts +14 -0
- package/dist/mediator/index.d.ts.map +1 -0
- package/dist/middlewares/exception-middleware.d.ts +7 -0
- package/dist/middlewares/exception-middleware.d.ts.map +1 -0
- package/dist/modules/controls-module.d.ts +58 -0
- package/dist/modules/controls-module.d.ts.map +1 -0
- package/dist/modules/gizmo-module.d.ts +34 -0
- package/dist/modules/gizmo-module.d.ts.map +1 -0
- package/dist/modules/raycast-module.d.ts +91 -0
- package/dist/modules/raycast-module.d.ts.map +1 -0
- package/dist/modules/scene-module.d.ts +32 -0
- package/dist/modules/scene-module.d.ts.map +1 -0
- package/dist/policy/tool-policy.d.ts +18 -0
- package/dist/policy/tool-policy.d.ts.map +1 -0
- package/dist/store/index.d.ts +4 -14
- package/dist/store/index.d.ts.map +1 -1
- package/dist/types/feature/feature-type.d.ts +16 -0
- package/dist/types/feature/feature-type.d.ts.map +1 -0
- package/dist/types/response/response-type.d.ts +19 -0
- package/dist/types/response/response-type.d.ts.map +1 -0
- package/dist/types/select/face-group.d.ts +24 -0
- package/dist/types/select/face-group.d.ts.map +1 -0
- package/package.json +2 -2
- package/dist/core/editor-renderer.d.ts +0 -79
- package/dist/core/editor-renderer.d.ts.map +0 -1
- package/dist/core/preview-renderer.d.ts +0 -16
- package/dist/core/preview-renderer.d.ts.map +0 -1
- package/dist/interfaces/api/transform-helpers-api.d.ts +0 -26
- package/dist/interfaces/api/transform-helpers-api.d.ts.map +0 -1
- package/dist/interfaces/policy/tool-availability-policy.d.ts +0 -12
- package/dist/interfaces/policy/tool-availability-policy.d.ts.map +0 -1
- package/dist/interfaces/store/editor-store.d.ts.map +0 -1
- package/dist/policy/tool-availability-policy.d.ts +0 -13
- package/dist/policy/tool-availability-policy.d.ts.map +0 -1
- package/dist/types/api/editor-api.d.ts +0 -4
- package/dist/types/api/editor-api.d.ts.map +0 -1
- package/dist/utils/renderer-api.d.ts +0 -43
- package/dist/utils/renderer-api.d.ts.map +0 -1
package/dist/index.full.d.ts
CHANGED
|
@@ -28,7 +28,9 @@ export declare const createAppHub: (canvas: HTMLCanvasElement) => EditorHub;
|
|
|
28
28
|
/**
|
|
29
29
|
* Типы событий редактора.
|
|
30
30
|
* Используются в EventEmitter для типизированной публикации и подписки на события.
|
|
31
|
+
*
|
|
31
32
|
* @public
|
|
33
|
+
* @type
|
|
32
34
|
*/
|
|
33
35
|
export declare type EditorEvents = {
|
|
34
36
|
/** Событие наведения на объект (hover). Payload: объект с пересечениями или null */
|
|
@@ -39,11 +41,6 @@ export declare type EditorEvents = {
|
|
|
39
41
|
[EventTopics.SelectClick]: {
|
|
40
42
|
intersection: THREE.Intersection;
|
|
41
43
|
} | null;
|
|
42
|
-
/** Событие выбора объекта для редактирования. Payload: выбранный режим выборки */
|
|
43
|
-
[EventTopics.ToolSelect]: {
|
|
44
|
-
mode: SelectMode;
|
|
45
|
-
mesh: THREE.Object3D | null;
|
|
46
|
-
};
|
|
47
44
|
};
|
|
48
45
|
|
|
49
46
|
/**
|
|
@@ -51,169 +48,548 @@ export declare type EditorEvents = {
|
|
|
51
48
|
* @public
|
|
52
49
|
*/
|
|
53
50
|
export declare class EditorHub implements Disposable_2 {
|
|
54
|
-
private _displayManager;
|
|
55
|
-
private _selectManager;
|
|
56
|
-
private _toolManager;
|
|
57
|
-
private _sceneManager;
|
|
58
51
|
private _renderer;
|
|
52
|
+
private _mediator;
|
|
59
53
|
private _store;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
54
|
+
private _controller;
|
|
55
|
+
constructor(_renderer: Renderer, _mediator: IMediator, _store: ITransformStore, _controller: IController);
|
|
56
|
+
setDisplayMode(mode: DisplayMode): IResponse | null;
|
|
57
|
+
setSceneMode(mode: SceneMode): IResponse | null;
|
|
58
|
+
setSelectMode(mode: SelectMode): IResponse | null;
|
|
59
|
+
setToolMode(mode: ToolType): IResponse | null;
|
|
60
|
+
addFigure(mode: SceneMode, figure: FigureType): IResponse | null;
|
|
65
61
|
resizeRenderer(): void;
|
|
66
|
-
|
|
67
|
-
|
|
62
|
+
/**
|
|
63
|
+
* Запускает редактор.
|
|
64
|
+
* Вызывается после создания хаба.
|
|
65
|
+
*/
|
|
66
|
+
start(): void;
|
|
67
|
+
/**
|
|
68
|
+
* Останавливает редактор.
|
|
69
|
+
*/
|
|
70
|
+
stop(): void;
|
|
68
71
|
getSelectionStats(): FigureTransform | null;
|
|
69
72
|
onSelectionStatsChange(listener: () => void): () => void;
|
|
70
73
|
dispose(): Promise<void> | void;
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
/**
|
|
74
|
-
*
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
+
* Событийная шина редактора с типизированными топиками.
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* Реализует паттерн Publish/Subscribe для слабой связи между компонентами.
|
|
81
|
+
*
|
|
82
|
+
* **Особенности:**
|
|
83
|
+
* - Полная типобезопасность через дженерики (`EditorEvents`)
|
|
84
|
+
* - Отсутствие прямых зависимостей между отправителем и получателем
|
|
85
|
+
* - Централизованное управление событиями
|
|
86
|
+
*
|
|
87
|
+
* **Где используется:**
|
|
88
|
+
* - `RaycasterModule` — публикует события выделения (`SelectHover`, `SelectClick`)
|
|
89
|
+
* - `SelectManager` — подписывается на события выделения
|
|
90
|
+
*
|
|
91
|
+
* @see {@link EditorEvents} - типы событий
|
|
92
|
+
* @see {@link EventTopics} - доступные топики
|
|
93
|
+
*
|
|
77
94
|
* @public
|
|
95
|
+
* @class
|
|
78
96
|
*/
|
|
79
|
-
export declare class
|
|
80
|
-
private _canvas;
|
|
81
|
-
private _bus;
|
|
82
|
-
/** Orbit-контроллер для управления камерой */
|
|
83
|
-
private _orbit;
|
|
84
|
-
/** Transform-контроллер для редактирования */
|
|
85
|
-
private _transform;
|
|
86
|
-
private readonly _transformHelper;
|
|
87
|
-
/** Raycast для получения событий наведения/клика по модели*/
|
|
88
|
-
private readonly _raycaster;
|
|
89
|
-
/** Курсор мыши */
|
|
90
|
-
private readonly _mouse;
|
|
91
|
-
/** Были ли инициализированы обработчики событий (hover/click) */
|
|
92
|
-
private _isEventListenersAdded;
|
|
93
|
-
/**
|
|
94
|
-
* Последняя модель на которую наводились,
|
|
95
|
-
* необходима для отправки только уникальных событий в event bus
|
|
96
|
-
*/
|
|
97
|
-
private _lastHovered;
|
|
98
|
-
/** Gizmo для управления отображением perspective camera */
|
|
99
|
-
private _cameraGizmo;
|
|
100
|
-
private _transformListeners;
|
|
101
|
-
constructor(_canvas: HTMLCanvasElement, _bus: EventBus);
|
|
102
|
-
/**
|
|
103
|
-
* Обновление состояния рендерера.
|
|
104
|
-
*/
|
|
105
|
-
protected update(): void;
|
|
106
|
-
/** Добавление фигуры на сцену */
|
|
107
|
-
addFigure(figure: Figure): THREE.Mesh<THREE.BufferGeometry<THREE.NormalBufferAttributes, THREE.BufferGeometryEventMap>, THREE.Material | THREE.Material[], THREE.Object3DEventMap>;
|
|
108
|
-
/**
|
|
109
|
-
* Смена отображения `TransformControls` в зависимости от типа инструмента.
|
|
110
|
-
* @param mode - тип инструмента для отображения `TransformControls`.
|
|
111
|
-
* @internal
|
|
112
|
-
*/
|
|
113
|
-
setTransformControlsMode(mode: ToolType): void;
|
|
97
|
+
export declare class EventBus {
|
|
114
98
|
/**
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* @
|
|
99
|
+
* Внутренний эмиттер событий Node.js.
|
|
100
|
+
*
|
|
101
|
+
* @private
|
|
102
|
+
* @member
|
|
118
103
|
*/
|
|
119
|
-
|
|
104
|
+
private _emitter;
|
|
105
|
+
/** @constructor */
|
|
106
|
+
constructor();
|
|
120
107
|
/**
|
|
121
|
-
*
|
|
122
|
-
*
|
|
108
|
+
* Публикует событие в шину.
|
|
109
|
+
*
|
|
110
|
+
* @param event - название события (из `EventTopics`)
|
|
111
|
+
* @param payload - данные события (тип зависит от события)
|
|
112
|
+
*
|
|
113
|
+
* @typeParam K - ключ события из `EditorEvents`
|
|
114
|
+
*
|
|
115
|
+
* @remarks
|
|
116
|
+
* Все подписчики, зарегистрированные на это событие, получат payload.
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* // Публикация события клика
|
|
121
|
+
* eventBus.emit(EventTopics.SelectClick, { intersection: hit });
|
|
122
|
+
*
|
|
123
|
+
* // Публикация события сброса выделения
|
|
124
|
+
* eventBus.emit(EventTopics.SelectClick, null);
|
|
125
|
+
* ```
|
|
126
|
+
*
|
|
127
|
+
* @public
|
|
128
|
+
* @method
|
|
123
129
|
*/
|
|
124
|
-
|
|
130
|
+
emit<K extends keyof EditorEvents>(event: K, payload: EditorEvents[K]): void;
|
|
125
131
|
/**
|
|
126
|
-
*
|
|
127
|
-
*
|
|
132
|
+
* Подписывается на событие.
|
|
133
|
+
*
|
|
134
|
+
* @param event - название события (из `EventTopics`)
|
|
135
|
+
* @param listener - функция-обработчик, получающая payload
|
|
136
|
+
*
|
|
137
|
+
* @typeParam K - ключ события из `EditorEvents`
|
|
138
|
+
*
|
|
139
|
+
* @remarks
|
|
140
|
+
* **Важно:** для предотвращения утечек памяти необходимо отписываться от событий
|
|
141
|
+
* в `dispose()` методах компонентов.
|
|
142
|
+
*
|
|
143
|
+
* @example
|
|
144
|
+
* ```typescript
|
|
145
|
+
* // Подписка на событие hover
|
|
146
|
+
* this._eventBus.on(EventTopics.SelectHover, (payload) => {
|
|
147
|
+
* if (payload) {
|
|
148
|
+
* this._handleHover(payload.intersection);
|
|
149
|
+
* } else {
|
|
150
|
+
* this._clearHover();
|
|
151
|
+
* }
|
|
152
|
+
* });
|
|
153
|
+
* ```
|
|
154
|
+
*
|
|
155
|
+
* @public
|
|
156
|
+
* @method
|
|
128
157
|
*/
|
|
129
|
-
|
|
158
|
+
on<K extends keyof EditorEvents>(event: K, listener: (payload: EditorEvents[K]) => void): void;
|
|
130
159
|
/**
|
|
131
|
-
*
|
|
132
|
-
*
|
|
160
|
+
* Отписывается от события.
|
|
161
|
+
*
|
|
162
|
+
* @param event - название события (из `EventTopics`)
|
|
163
|
+
* @param listener - функция-обработчик, которую нужно отписать
|
|
164
|
+
*
|
|
165
|
+
* @typeParam K - ключ события из `EditorEvents`
|
|
166
|
+
*
|
|
167
|
+
* @remarks
|
|
168
|
+
* Для корректной отписки необходимо передать ту же самую функцию,
|
|
169
|
+
* которая использовалась при подписке.
|
|
170
|
+
*
|
|
171
|
+
* @example
|
|
172
|
+
* ```typescript
|
|
173
|
+
* // Сохранение ссылки на обработчик
|
|
174
|
+
* private _handleClick = (payload) => { ... };
|
|
175
|
+
*
|
|
176
|
+
* // Подписка
|
|
177
|
+
* eventBus.on(EventTopics.SelectClick, this._handleClick);
|
|
178
|
+
*
|
|
179
|
+
* // Отписка (в dispose)
|
|
180
|
+
* eventBus.off(EventTopics.SelectClick, this._handleClick);
|
|
181
|
+
* ```
|
|
182
|
+
*
|
|
183
|
+
* @public
|
|
184
|
+
* @method
|
|
133
185
|
*/
|
|
134
|
-
setRaycastMode(mode: SelectMode): void;
|
|
135
|
-
dispose(): void;
|
|
136
|
-
protected render(): void;
|
|
137
|
-
/** Инициализация обработчиков событий на hover/click */
|
|
138
|
-
private _initMouseListeners;
|
|
139
|
-
/** Обработчик события для hover */
|
|
140
|
-
private _handleMouseMove;
|
|
141
|
-
/** Обработчик события на click */
|
|
142
|
-
private _handleMouseClick;
|
|
143
|
-
/** Вспомогательный метод для получения модели, которую выбрали и отправки события в event bus */
|
|
144
|
-
private _processRaycastEvent;
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
/**
|
|
148
|
-
* Событийная шина редактора с топиками.
|
|
149
|
-
* Используется для publish/subscribe без прямых зависимостей.
|
|
150
|
-
* @public
|
|
151
|
-
*/
|
|
152
|
-
export declare class EventBus {
|
|
153
|
-
private _emitter;
|
|
154
|
-
constructor();
|
|
155
|
-
/** Публикация события */
|
|
156
|
-
emit<K extends keyof EditorEvents>(event: K, payload: EditorEvents[K]): void;
|
|
157
|
-
/** Подписка на событие */
|
|
158
|
-
on<K extends keyof EditorEvents>(event: K, listener: (payload: EditorEvents[K]) => void): void;
|
|
159
|
-
/** Отписка от события */
|
|
160
186
|
off<K extends keyof EditorEvents>(event: K, listener: (payload: EditorEvents[K]) => void): void;
|
|
161
187
|
}
|
|
162
188
|
|
|
163
189
|
/**
|
|
164
190
|
* Топики событий редактора.
|
|
165
191
|
* Используются для подписки/публикации через EventEmitter.
|
|
192
|
+
*
|
|
166
193
|
* @public
|
|
194
|
+
* @enum
|
|
167
195
|
*/
|
|
168
196
|
export declare enum EventTopics {
|
|
169
197
|
/** Событие наведения на объект (hover). Payload: intersection: Intersection | null */
|
|
170
198
|
SelectHover = "select.hover",
|
|
171
199
|
/** Событие клика по объекту. Payload: intersection: Intersection | null */
|
|
172
|
-
SelectClick = "select.click"
|
|
173
|
-
|
|
174
|
-
|
|
200
|
+
SelectClick = "select.click"
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/**
|
|
204
|
+
* Тип фичи, совпадает с менеджерами
|
|
205
|
+
*
|
|
206
|
+
* @public
|
|
207
|
+
*/
|
|
208
|
+
export declare enum FeatureType {
|
|
209
|
+
/** Отображение */
|
|
210
|
+
Display = 0,
|
|
211
|
+
/** Управление сценой */
|
|
212
|
+
Scene = 1,
|
|
213
|
+
/** Выборка */
|
|
214
|
+
Select = 2,
|
|
215
|
+
/** Инструменты */
|
|
216
|
+
Tool = 3
|
|
175
217
|
}
|
|
176
218
|
|
|
177
219
|
/**
|
|
178
220
|
* Возвращает уже созданный хаб, если редактор инициализирован.
|
|
221
|
+
* @public
|
|
179
222
|
*/
|
|
180
223
|
export declare const getAppHub: () => EditorHub;
|
|
181
224
|
|
|
182
225
|
/**
|
|
183
|
-
* Маркерный интерфейс для менеджера отображения.
|
|
184
226
|
* @public
|
|
185
227
|
*/
|
|
186
|
-
export declare interface
|
|
228
|
+
export declare interface ICommand {
|
|
229
|
+
type: FeatureType;
|
|
230
|
+
payload: unknown[];
|
|
187
231
|
}
|
|
188
232
|
|
|
189
|
-
/**
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
233
|
+
/**
|
|
234
|
+
* Интерфейс для контроллера, управляющего жизненным циклом модулей.
|
|
235
|
+
*
|
|
236
|
+
* @remarks
|
|
237
|
+
* Контроллер отвечает за:
|
|
238
|
+
* - инициализацию модулей (`IRuntimeModule`)
|
|
239
|
+
* - запуск цикла рендеринга
|
|
240
|
+
* - обновление модулей каждый кадр (`IUpdatableModule`)
|
|
241
|
+
* - рендеринг модулей (`IRenderableModule`)
|
|
242
|
+
* - остановку и очистку ресурсов
|
|
243
|
+
*
|
|
244
|
+
* @public
|
|
245
|
+
* @interface
|
|
246
|
+
*/
|
|
247
|
+
export declare interface IController extends Disposable_2 {
|
|
197
248
|
/**
|
|
198
|
-
*
|
|
199
|
-
*
|
|
249
|
+
* Запускает контроллер.
|
|
250
|
+
*
|
|
251
|
+
* @remarks
|
|
252
|
+
* Инициализирует все модули и запускает цикл рендеринга.
|
|
253
|
+
*
|
|
254
|
+
* @public
|
|
255
|
+
* @method
|
|
200
256
|
*/
|
|
201
|
-
|
|
257
|
+
start(): void;
|
|
202
258
|
/**
|
|
203
|
-
*
|
|
204
|
-
*
|
|
259
|
+
* Останавливает контроллер.
|
|
260
|
+
*
|
|
261
|
+
* @remarks
|
|
262
|
+
* Останавливает цикл рендеринга и освобождает ресурсы.
|
|
263
|
+
*
|
|
264
|
+
* @public
|
|
265
|
+
* @method
|
|
205
266
|
*/
|
|
206
|
-
|
|
267
|
+
stop(): void;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
/**
|
|
271
|
+
* Интерфейс store для менеджеров и хендлеров, которые позволяют работать с Display фичей,
|
|
272
|
+
* необходим для корректного взаимодействия между группами фичей.
|
|
273
|
+
*
|
|
274
|
+
* Можно получить:
|
|
275
|
+
* - текущий режим отображения
|
|
276
|
+
*
|
|
277
|
+
* @public
|
|
278
|
+
* @interface
|
|
279
|
+
*/
|
|
280
|
+
export declare interface IDisplayStore {
|
|
281
|
+
/** Возвращает текущий режим отображения. */
|
|
282
|
+
getDisplayMode(): DisplayMode;
|
|
207
283
|
/**
|
|
208
284
|
* Устанавливает режим отображения.
|
|
209
285
|
* @param mode - Режим отображения (зависит от твоего домена).
|
|
210
286
|
*/
|
|
211
287
|
setDisplayMode(mode: DisplayMode): void;
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
/**
|
|
291
|
+
* Интерфейс медиатора команд редактора.
|
|
292
|
+
*
|
|
293
|
+
* @remarks
|
|
294
|
+
* Медиатор выступает промежуточным слоем между публичным API хаба
|
|
295
|
+
* и менеджерами конкретных функциональных областей редактора.
|
|
296
|
+
*
|
|
297
|
+
* Основные задачи медиатора:
|
|
298
|
+
* - принять команду от верхнего уровня
|
|
299
|
+
* - определить менеджер, отвечающий за указанную фичу
|
|
300
|
+
* - передать вызов в pipeline middleware
|
|
301
|
+
* - вернуть итоговый ответ выполнения команды
|
|
302
|
+
*
|
|
303
|
+
* В штатном сценарии успешное выполнение команды может не формировать явный ответ и возвращать `null`.
|
|
304
|
+
* Если в процессе обработки возникает исключение, например ошибка политики,
|
|
305
|
+
* оно может быть преобразовано middleware в объект `IResponse`.
|
|
306
|
+
*
|
|
307
|
+
* @public
|
|
308
|
+
* @interface
|
|
309
|
+
*/
|
|
310
|
+
export declare interface IMediator extends Disposable_2 {
|
|
311
|
+
/**
|
|
312
|
+
* Отправляет команду на выполнение через middleware pipeline в соответствующий менеджер редактора.
|
|
313
|
+
*
|
|
314
|
+
* @param command - команда, содержащая тип фичи и аргументы вызова
|
|
315
|
+
*
|
|
316
|
+
* @returns результат выполнения команды:
|
|
317
|
+
* - `null`, если команда выполнена успешно и не требует явного ответа
|
|
318
|
+
* - `IResponse`, если в ходе обработки был сформирован ответ, например при ошибке или блокировке действия
|
|
319
|
+
*
|
|
320
|
+
* @example
|
|
321
|
+
* ```typescript
|
|
322
|
+
* const response = mediator.send({
|
|
323
|
+
* type: FeatureType.Tool,
|
|
324
|
+
* payload: [ToolType.Rotate],
|
|
325
|
+
* });
|
|
326
|
+
*
|
|
327
|
+
* if (response?.blocked) {
|
|
328
|
+
* console.warn(response.message);
|
|
329
|
+
* }
|
|
330
|
+
* ```
|
|
331
|
+
*
|
|
332
|
+
* @public
|
|
333
|
+
* @method
|
|
334
|
+
*/
|
|
335
|
+
send(command: ICommand): IResponse | null;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
/**
|
|
339
|
+
* Интерфейс для объектов, которые могут быть отрисованы.
|
|
340
|
+
*
|
|
341
|
+
* @remarks
|
|
342
|
+
* Предназначен для модулей, которым требуется кастомный рендеринг
|
|
343
|
+
* поверх основной сцены (например, `GizmoModule`).
|
|
344
|
+
*
|
|
345
|
+
* **Отличие от `IUpdatableModule`:**
|
|
346
|
+
* - `render()` вызывается **после** основного рендера сцены
|
|
347
|
+
* - `render()` предназначен для отрисовки дополнительных элементов
|
|
348
|
+
* (осей координат, отладочной информации, оверлеев)
|
|
349
|
+
*
|
|
350
|
+
* **Жизненный цикл:**
|
|
351
|
+
* 1. `init()` (из `IRuntimeModule`) — создание ресурсов
|
|
352
|
+
* 2. `render()` — отрисовка (вызывается каждый кадр)
|
|
353
|
+
* 3. `dispose()` (из `IRuntimeModule`) — освобождение ресурсов
|
|
354
|
+
*
|
|
355
|
+
* @public
|
|
356
|
+
* @interface
|
|
357
|
+
*/
|
|
358
|
+
export declare interface IRenderable {
|
|
359
|
+
/**
|
|
360
|
+
* Выполняет кастомный рендеринг объекта.
|
|
361
|
+
*
|
|
362
|
+
* @remarks
|
|
363
|
+
* Вызывается каждый кадр **после** основного рендера сцены.
|
|
364
|
+
*
|
|
365
|
+
* **Важно:** метод не должен выполнять тяжёлые операции,
|
|
366
|
+
* чтобы не снижать производительность.
|
|
367
|
+
*
|
|
368
|
+
* @example
|
|
369
|
+
* ```typescript
|
|
370
|
+
* public render(): void {
|
|
371
|
+
* const canvas = this._domApi.getCanvas();
|
|
372
|
+
* this._gizmo?.render(canvas.width, canvas.height);
|
|
373
|
+
* this._drawFPS();
|
|
374
|
+
* }
|
|
375
|
+
* ```
|
|
376
|
+
*
|
|
377
|
+
* @public
|
|
378
|
+
* @method
|
|
379
|
+
*/
|
|
380
|
+
render(): void;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Низкоуровневый доступ к WebGLRenderer.
|
|
385
|
+
*
|
|
386
|
+
* @remarks
|
|
387
|
+
* Этот интерфейс **реализуется самим рендерером** (`Renderer`).
|
|
388
|
+
* Предоставляет прямой доступ к WebGLRenderer Three.js.
|
|
389
|
+
*
|
|
390
|
+
* Используется **только внутренними API-слоями** (например, `RendererApi`),
|
|
391
|
+
* но не модулями напрямую.
|
|
392
|
+
*
|
|
393
|
+
* @see {@link Renderer} - класс, реализующий этот интерфейс
|
|
394
|
+
*
|
|
395
|
+
* @public
|
|
396
|
+
* @interface
|
|
397
|
+
*/
|
|
398
|
+
export declare interface IRendererAccess {
|
|
399
|
+
/**
|
|
400
|
+
* Возвращает WebGLRenderer.
|
|
401
|
+
*
|
|
402
|
+
* @returns THREE.WebGLRenderer - рендерер Three.js
|
|
403
|
+
*
|
|
404
|
+
* @example
|
|
405
|
+
* ```typescript
|
|
406
|
+
* // Использование в RendererApi
|
|
407
|
+
* const renderer = this._rendererAccess.getRenderer();
|
|
408
|
+
* ```
|
|
409
|
+
*
|
|
410
|
+
* @public
|
|
411
|
+
* @method
|
|
412
|
+
*/
|
|
413
|
+
getRenderer(): THREE.WebGLRenderer;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Предоставляет низкоуровневый доступ к камере рендерера.
|
|
418
|
+
*
|
|
419
|
+
* Этот интерфейс используется внутренними модулями (например, `CameraApi`) для
|
|
420
|
+
* получения прямого доступа к камере `Three.js`. Он не содержит логики управления
|
|
421
|
+
* камерой — только доступ к объекту.
|
|
422
|
+
*
|
|
423
|
+
* @remarks
|
|
424
|
+
* В отличие от `ICameraApi`, который предоставляет высокоуровневые операции
|
|
425
|
+
* (включение слоёв, настройка параметров), этот интерфейс нужен только для
|
|
426
|
+
* чтения камеры.
|
|
427
|
+
*
|
|
428
|
+
* @see {@link Renderer} - класс, который реализует этот интерфейс
|
|
429
|
+
*
|
|
430
|
+
* @public
|
|
431
|
+
* @interface
|
|
432
|
+
*/
|
|
433
|
+
export declare interface IRendererCameraAccess {
|
|
434
|
+
/**
|
|
435
|
+
* Возвращает камеру рендерера.
|
|
436
|
+
*
|
|
437
|
+
* @returns Камера Three.js.
|
|
438
|
+
*
|
|
439
|
+
* @example
|
|
440
|
+
* ```typescript
|
|
441
|
+
* const camera = cameraAccess.getCamera();
|
|
442
|
+
* camera.position.set(5, 5, 5);
|
|
443
|
+
* camera.lookAt(0, 0, 0);
|
|
444
|
+
* ```
|
|
445
|
+
*
|
|
446
|
+
* @public
|
|
447
|
+
* @method
|
|
448
|
+
*/
|
|
449
|
+
getCamera(): THREE.Camera;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
/**
|
|
453
|
+
* Низкоуровневый доступ к DOM-элементам рендерера.
|
|
454
|
+
*
|
|
455
|
+
* @remarks
|
|
456
|
+
* Этот интерфейс предоставляет доступ к canvas и DOM-элементу рендерера.
|
|
457
|
+
* Используется внутренними API-слоями (например, `DomApi`)
|
|
458
|
+
* для получения доступа к DOM без необходимости знать конкретную реализацию рендерера.
|
|
459
|
+
*
|
|
460
|
+
* @see {@link Renderer} - класс, реализующий этот интерфейс
|
|
461
|
+
*
|
|
462
|
+
* @public
|
|
463
|
+
* @interface
|
|
464
|
+
*/
|
|
465
|
+
export declare interface IRendererDomAccess {
|
|
466
|
+
/**
|
|
467
|
+
* Возвращает canvas-элемент редактора.
|
|
468
|
+
*
|
|
469
|
+
* @remarks
|
|
470
|
+
* Canvas используется для рендеринга 3D-сцены.
|
|
471
|
+
*
|
|
472
|
+
* @returns HTMLCanvasElement - canvas элемент
|
|
473
|
+
*
|
|
474
|
+
* @example
|
|
475
|
+
* ```typescript
|
|
476
|
+
* const canvas = domAccess.getCanvas();
|
|
477
|
+
* ```
|
|
478
|
+
*
|
|
479
|
+
* @public
|
|
480
|
+
*/
|
|
481
|
+
getCanvas(): HTMLCanvasElement;
|
|
482
|
+
/**
|
|
483
|
+
* Возвращает DOM-элемент рендерера.
|
|
484
|
+
*
|
|
485
|
+
* @remarks
|
|
486
|
+
* Обычно это тот же canvas, но в некоторых случаях может быть
|
|
487
|
+
* другим элементом (например, div-обёрткой). Используется для
|
|
488
|
+
* подписки на события ввода (mousemove, click, dblclick и т.д.).
|
|
489
|
+
*
|
|
490
|
+
* @returns HTMLElement - DOM-элемент для подписки на события
|
|
491
|
+
*
|
|
492
|
+
* @example
|
|
493
|
+
* ```typescript
|
|
494
|
+
* const domElement = domAccess.getDomElement();
|
|
495
|
+
* ```
|
|
496
|
+
*
|
|
497
|
+
* @public
|
|
498
|
+
* @method
|
|
499
|
+
*/
|
|
500
|
+
getDomElement(): HTMLElement;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Низкоуровневый доступ к сцене рендерера.
|
|
505
|
+
*
|
|
506
|
+
* @remarks
|
|
507
|
+
* Этот интерфейс предоставляет доступ к сцене Three.js.
|
|
508
|
+
* Используется внутренними API-слоями (например, `SceneApi`)
|
|
509
|
+
* для получения доступа к сцене без необходимости знать конкретную
|
|
510
|
+
* реализацию рендерера.
|
|
511
|
+
*
|
|
512
|
+
* @see {@link Renderer} - класс, реализующий этот интерфейс
|
|
513
|
+
*
|
|
514
|
+
* @public
|
|
515
|
+
* @interface
|
|
516
|
+
*/
|
|
517
|
+
export declare interface IRendererSceneAccess {
|
|
518
|
+
/**
|
|
519
|
+
* Возвращает сцену рендерера.
|
|
520
|
+
*
|
|
521
|
+
* @returns THREE.Scene - сцена Three.js
|
|
522
|
+
*
|
|
523
|
+
* @remarks
|
|
524
|
+
* Сцена содержит все объекты, которые рендерятся на экране.
|
|
525
|
+
* Через неё можно добавлять, удалять и модифицировать объекты.
|
|
526
|
+
*
|
|
527
|
+
* @example
|
|
528
|
+
* ```typescript
|
|
529
|
+
* const scene = sceneAccess.getScene();
|
|
530
|
+
*
|
|
531
|
+
* // Добавление объекта
|
|
532
|
+
* scene.add(myMesh);
|
|
533
|
+
*
|
|
534
|
+
* // Поиск объекта по имени
|
|
535
|
+
* const obj = scene.getObjectByName('myObject');
|
|
536
|
+
*
|
|
537
|
+
* // Удаление объекта
|
|
538
|
+
* scene.remove(obj);
|
|
539
|
+
* ```
|
|
540
|
+
*
|
|
541
|
+
* @public
|
|
542
|
+
* @method
|
|
543
|
+
*/
|
|
544
|
+
getScene(): THREE.Scene;
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
/**
|
|
548
|
+
* Тип ответа от менеджеров или политик редактора.
|
|
549
|
+
*
|
|
550
|
+
* @remarks
|
|
551
|
+
* Используется для единого API на уровне Hub.
|
|
552
|
+
* Все менеджеры возвращают `Response`, чтобы клиент знал статус вызова.
|
|
553
|
+
*
|
|
554
|
+
* @public
|
|
555
|
+
* @interface
|
|
556
|
+
*/
|
|
557
|
+
export declare interface IResponse {
|
|
558
|
+
/** Тип ответа (enum ResponseType) */
|
|
559
|
+
type: ResponseType_2;
|
|
560
|
+
/** Читаемое сообщение для отображения или логирования */
|
|
561
|
+
message: string;
|
|
562
|
+
/** Строковый код для логов или интеграций (опционально) */
|
|
563
|
+
code?: string;
|
|
564
|
+
/** Флаг блокировки действия (true, если вызов запрещён) */
|
|
565
|
+
blocked?: boolean;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
/**
|
|
569
|
+
* Интерфейс store для менеджеров и хендлеров, которые позволяют работать с Select фичей,
|
|
570
|
+
* необходим для корректного взаимодействия между группами фичей.
|
|
571
|
+
*
|
|
572
|
+
* Можно получить:
|
|
573
|
+
* - режим выборки
|
|
574
|
+
* - выбранный объект
|
|
575
|
+
* - подписаться на изменение объекта
|
|
576
|
+
*
|
|
577
|
+
* @public
|
|
578
|
+
* @interface
|
|
579
|
+
*/
|
|
580
|
+
export declare interface ISelectStore {
|
|
581
|
+
/** Возвращает текущий режим выбора. */
|
|
582
|
+
getSelectMode(): SelectMode;
|
|
583
|
+
/**
|
|
584
|
+
* Устанавливает режим выбора.
|
|
585
|
+
* @param mode - Режим выбора (Mesh/Face/Edge/Vertex и т.п.).
|
|
586
|
+
*/
|
|
587
|
+
setSelectMode(mode: SelectMode): void;
|
|
212
588
|
/**
|
|
213
589
|
* Возвращает текущий выбранный объект сцены.
|
|
214
590
|
* @remarks
|
|
215
591
|
* Предполагается, что до вызова этого метода уже был
|
|
216
|
-
* вызван {@link
|
|
592
|
+
* вызван {@link ISelectStore.setSelectedObject}. Иначе результат не определён.
|
|
217
593
|
*/
|
|
218
594
|
getSelectedObject(): THREE.Object3D | null;
|
|
219
595
|
/** Возвращает актуальную статистику по трансформации выбранного объекта. */
|
|
@@ -228,43 +604,40 @@ export declare interface IEditorStore {
|
|
|
228
604
|
* @param cb - Callback, получающий текущий выбранный объект (`THREE.Object3D | null`).
|
|
229
605
|
*/
|
|
230
606
|
onSelectedObjectChange(cb: SelectedListener): () => void;
|
|
231
|
-
/** Подписывает слушателя на изменения трансформации выбранного объекта. */
|
|
232
|
-
onSelectedTransformChange(cb: TransformListener): () => void;
|
|
233
|
-
/** Уведомляет всех подписчиков о том, что трансформация выбранного объекта изменилась. */
|
|
234
|
-
notifySelectedTransformChange(): void;
|
|
235
607
|
}
|
|
236
608
|
|
|
237
609
|
/**
|
|
238
|
-
*
|
|
239
|
-
*
|
|
610
|
+
* Интерфейс store для менеджеров и хендлеров, которые позволяют работать с Tool фичей,
|
|
611
|
+
* необходим для корректного взаимодействия между группами фичей.
|
|
612
|
+
*
|
|
613
|
+
* Можно получить:
|
|
614
|
+
* - выбранный инструмент
|
|
615
|
+
* - подписаться на изменение трансформации объекта
|
|
616
|
+
*
|
|
240
617
|
* @public
|
|
618
|
+
* @interface
|
|
241
619
|
*/
|
|
242
|
-
export declare interface
|
|
620
|
+
export declare interface IToolStore {
|
|
621
|
+
/** Возвращает текущий активный инструмент. */
|
|
622
|
+
getToolType(): ToolType;
|
|
243
623
|
/**
|
|
244
|
-
*
|
|
624
|
+
* Устанавливает активный инструмент.
|
|
625
|
+
* @param toolType - Тип инструмента (Translate/Rotate/Scale и т.п.).
|
|
245
626
|
*/
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
/**
|
|
250
|
-
|
|
251
|
-
* @public
|
|
252
|
-
*/
|
|
253
|
-
export declare interface ISceneManager extends IManager {
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
/**
|
|
257
|
-
* Маркерный интерфейс для менеджера выборки.
|
|
258
|
-
* @public
|
|
259
|
-
*/
|
|
260
|
-
export declare interface ISelectManager extends IManager {
|
|
627
|
+
setToolType(toolType: ToolType): void;
|
|
628
|
+
/** Подписывает слушателя на изменения трансформации выбранного объекта. */
|
|
629
|
+
onSelectedTransformChange(cb: TransformListener): () => void;
|
|
630
|
+
/** Уведомляет всех подписчиков о том, что трансформация выбранного объекта изменилась. */
|
|
631
|
+
notifySelectedTransformChange(): void;
|
|
261
632
|
}
|
|
262
633
|
|
|
263
634
|
/**
|
|
264
|
-
*
|
|
635
|
+
* Обобщенный интерфейс для хендлеров инструментов (`IToolHandler`).
|
|
636
|
+
*
|
|
265
637
|
* @public
|
|
638
|
+
* @interface
|
|
266
639
|
*/
|
|
267
|
-
export declare interface
|
|
640
|
+
export declare interface ITransformStore extends ISelectStore, IToolStore {
|
|
268
641
|
}
|
|
269
642
|
|
|
270
643
|
/** @public */
|
|
@@ -290,137 +663,170 @@ export declare class ObjLoader {
|
|
|
290
663
|
}
|
|
291
664
|
|
|
292
665
|
/**
|
|
293
|
-
*
|
|
294
|
-
*
|
|
295
|
-
* @
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
*
|
|
309
|
-
*
|
|
666
|
+
* Базовый класс рендерера для работы с WebGL через Three.js.
|
|
667
|
+
*
|
|
668
|
+
* @remarks
|
|
669
|
+
* Отвечает за инициализацию сцены, камеры, освещения и цикла рендеринга.
|
|
670
|
+
* Предоставляет низкоуровневый API для доступа к основным компонентам Three.js.
|
|
671
|
+
*
|
|
672
|
+
* **Не содержит логики управления камерой или выделения объектов** —
|
|
673
|
+
* это ответственность модулей (например, `ControlsModule`, `RaycasterModule`).
|
|
674
|
+
*
|
|
675
|
+
* Рендерер реализует интерфейсы нижнего API:
|
|
676
|
+
* - `IRendererAccess` — доступ к WebGLRenderer
|
|
677
|
+
* - `IRendererCameraAccess` — доступ к камере
|
|
678
|
+
* - `IRendererDomAccess` — доступ к DOM-элементам
|
|
679
|
+
* - `IRendererSceneAccess` — доступ к сцене
|
|
680
|
+
*
|
|
681
|
+
* @see {@link IRendererAccess} - доступ к WebGLRenderer
|
|
682
|
+
* @see {@link IRendererCameraAccess} - доступ к камере
|
|
683
|
+
* @see {@link IRendererDomAccess} - доступ к DOM
|
|
684
|
+
* @see {@link IRendererSceneAccess} - доступ к сцене
|
|
685
|
+
*
|
|
310
686
|
* @public
|
|
687
|
+
* @class
|
|
311
688
|
*/
|
|
312
|
-
export declare
|
|
313
|
-
/** Корневой объект сцены */
|
|
314
|
-
protected scene: THREE.Scene;
|
|
315
|
-
/** Камера для сцены */
|
|
316
|
-
protected camera: THREE.PerspectiveCamera;
|
|
317
|
-
/** Экземпляр рендерера Three.js */
|
|
318
|
-
protected renderer: THREE.WebGLRenderer;
|
|
319
|
-
/** HTML-элемент canvas, на котором рендерится сцена */
|
|
320
|
-
protected canvas: HTMLCanvasElement;
|
|
321
|
-
/** Массив моделей на сцене */
|
|
322
|
-
protected meshes: THREE.Mesh[];
|
|
323
|
-
/**
|
|
324
|
-
* Конструктор рендерера
|
|
325
|
-
* @param canvas - HTMLCanvasElement для рендеринга
|
|
326
|
-
*/
|
|
327
|
-
protected constructor(canvas: HTMLCanvasElement);
|
|
328
|
-
/**
|
|
329
|
-
* Обновляет размер рендерера и камеры при изменении размеров canvas.
|
|
330
|
-
*/
|
|
331
|
-
resize(): void;
|
|
332
|
-
/**
|
|
333
|
-
* Выполняет рендеринг сцены с текущей камерой.
|
|
334
|
-
*/
|
|
335
|
-
protected render(): void;
|
|
336
|
-
/**
|
|
337
|
-
* Метод для обновления логики рендерера.
|
|
338
|
-
*/
|
|
339
|
-
protected update(): void;
|
|
689
|
+
export declare class Renderer implements IRendererAccess, IRendererCameraAccess, IRendererDomAccess, IRendererSceneAccess, IRenderable, Disposable_2 {
|
|
340
690
|
/**
|
|
341
|
-
*
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
* Добавление фигуры на сцену.
|
|
346
|
-
* @param figure - Данные фигуры: position, normal, uv
|
|
691
|
+
* Корневой объект сцены Three.js.
|
|
692
|
+
*
|
|
693
|
+
* @protected
|
|
694
|
+
* @member
|
|
347
695
|
*/
|
|
348
|
-
|
|
696
|
+
protected scene: THREE.Scene;
|
|
349
697
|
/**
|
|
350
|
-
*
|
|
698
|
+
* Камера для сцены Three.js.
|
|
351
699
|
*
|
|
352
|
-
* @
|
|
353
|
-
* @
|
|
700
|
+
* @protected
|
|
701
|
+
* @member
|
|
354
702
|
*/
|
|
355
|
-
|
|
703
|
+
protected camera: THREE.PerspectiveCamera;
|
|
356
704
|
/**
|
|
357
|
-
*
|
|
705
|
+
* Экземпляр Three.js WebGLRenderer.
|
|
358
706
|
*
|
|
359
|
-
* @
|
|
360
|
-
* @
|
|
707
|
+
* @protected
|
|
708
|
+
* @member
|
|
361
709
|
*/
|
|
362
|
-
|
|
710
|
+
protected renderer: THREE.WebGLRenderer;
|
|
363
711
|
/**
|
|
364
|
-
*
|
|
712
|
+
* HTML-элемент canvas, на котором рендерится сцена.
|
|
365
713
|
*
|
|
366
|
-
* @
|
|
367
|
-
* @
|
|
714
|
+
* @protected
|
|
715
|
+
* @member
|
|
368
716
|
*/
|
|
369
|
-
|
|
717
|
+
protected canvas: HTMLCanvasElement;
|
|
370
718
|
/**
|
|
371
|
-
*
|
|
719
|
+
* Конструктор рендерера.
|
|
372
720
|
*
|
|
373
|
-
* @param
|
|
374
|
-
* @param layer - (Опц.) Номер слоя, который следует установить объекту перед добавлением.
|
|
721
|
+
* @param _canvas - HTMLCanvasElement для рендеринга
|
|
375
722
|
*
|
|
376
723
|
* @remarks
|
|
377
|
-
*
|
|
378
|
-
*
|
|
724
|
+
* Инициализирует сцену с тёмным фоном, перспективную камеру
|
|
725
|
+
* (45° FOV, near 0.1, far 1000) и базовое освещение:
|
|
726
|
+
* - `AmbientLight` (0xffffff, 0.5) — общий свет
|
|
727
|
+
* - `DirectionalLight` (0xffffff, 1) — направленный свет
|
|
379
728
|
*
|
|
380
729
|
* @example
|
|
381
|
-
*
|
|
382
|
-
*
|
|
730
|
+
* ```typescript
|
|
731
|
+
* const renderer = new Renderer(canvas);
|
|
732
|
+
* ```
|
|
383
733
|
*
|
|
384
|
-
* @
|
|
734
|
+
* @public
|
|
735
|
+
* @constructor
|
|
385
736
|
*/
|
|
386
|
-
|
|
737
|
+
constructor(_canvas: HTMLCanvasElement);
|
|
387
738
|
/**
|
|
388
|
-
*
|
|
389
|
-
*
|
|
390
|
-
* @param obj - Объект, который необходимо удалить.
|
|
739
|
+
* Обновляет размер рендерера и пропорции камеры.
|
|
391
740
|
*
|
|
392
741
|
* @remarks
|
|
393
|
-
*
|
|
394
|
-
* удалить его напрямую из `this.scene`. В рамках данного API метод не отвечает за
|
|
395
|
-
* освобождение GPU-ресурсов; освобождайте геометрию/материалы отдельно при необходимости.
|
|
742
|
+
* Вызывается при изменении размеров canvas (например, при ресайзе окна браузера).
|
|
396
743
|
*
|
|
397
744
|
* @example
|
|
398
|
-
*
|
|
399
|
-
*
|
|
745
|
+
* ```typescript
|
|
746
|
+
* window.addEventListener('resize', () => renderer.resize());
|
|
747
|
+
* ```
|
|
400
748
|
*
|
|
401
|
-
* @
|
|
749
|
+
* @oublic
|
|
750
|
+
* @method
|
|
402
751
|
*/
|
|
403
|
-
|
|
752
|
+
resize(): void;
|
|
404
753
|
/**
|
|
405
|
-
*
|
|
754
|
+
* Выполняет рендеринг текущего кадра.
|
|
755
|
+
*
|
|
756
|
+
* @remarks
|
|
757
|
+
* Рендерит сцену с текущей камерой.
|
|
758
|
+
* Вызывается автоматически в цикле `loop()`.
|
|
406
759
|
*
|
|
407
|
-
* @
|
|
760
|
+
* @public
|
|
761
|
+
* @method
|
|
762
|
+
*/
|
|
763
|
+
render(): void;
|
|
764
|
+
/**
|
|
765
|
+
* Обновляет состояние рендерера перед рендерингом.
|
|
408
766
|
*
|
|
409
767
|
* @remarks
|
|
410
|
-
*
|
|
411
|
-
*
|
|
768
|
+
* Пустой метод, предназначен для переопределения в наследниках
|
|
769
|
+
* (например, для обновления контролов камеры).
|
|
770
|
+
*
|
|
771
|
+
* @protected
|
|
772
|
+
* @method
|
|
773
|
+
* @virtual
|
|
774
|
+
*/
|
|
775
|
+
protected update(): void;
|
|
776
|
+
/**
|
|
777
|
+
* Запускает основной цикл рендеринга.
|
|
778
|
+
*
|
|
779
|
+
* @remarks
|
|
780
|
+
* Вызывает `update()` и `render()` каждый кадр с помощью `requestAnimationFrame`.
|
|
781
|
+
* **Важно:** вызывать метод только один раз.
|
|
412
782
|
*
|
|
413
783
|
* @example
|
|
414
|
-
*
|
|
415
|
-
*
|
|
784
|
+
* ```typescript
|
|
785
|
+
* renderer.loop();
|
|
786
|
+
* ```
|
|
787
|
+
*
|
|
788
|
+
* @public
|
|
789
|
+
* @method
|
|
790
|
+
*/
|
|
791
|
+
loop(): void;
|
|
792
|
+
getCamera(): THREE.Camera;
|
|
793
|
+
getRenderer(): THREE.WebGLRenderer;
|
|
794
|
+
getCanvas(): HTMLCanvasElement;
|
|
795
|
+
getDomElement(): HTMLElement;
|
|
796
|
+
getScene(): THREE.Scene;
|
|
797
|
+
/**
|
|
798
|
+
* Освобождает ресурсы рендерера.
|
|
799
|
+
*
|
|
800
|
+
* @remarks
|
|
801
|
+
* Удаляет ссылки на сцену, камеру и canvas, вызывает `dispose()` у WebGLRenderer.
|
|
802
|
+
* Вызывается при уничтожении редактора IOC-контейнером.
|
|
416
803
|
*
|
|
417
|
-
* @
|
|
804
|
+
* @public
|
|
805
|
+
* @method
|
|
418
806
|
*/
|
|
419
|
-
enableCameraLayer(layer: number): void;
|
|
420
|
-
/** Освобождает ресурсы рендерера, очищает внутренние данные. */
|
|
421
807
|
dispose(): Promise<void> | void;
|
|
422
808
|
}
|
|
423
809
|
|
|
810
|
+
/**
|
|
811
|
+
* Enum типов ответа от менеджеров и политик.
|
|
812
|
+
*
|
|
813
|
+
* @remarks
|
|
814
|
+
* Используется в `IResponse.type`.
|
|
815
|
+
*
|
|
816
|
+
* @public
|
|
817
|
+
* @enum
|
|
818
|
+
*/
|
|
819
|
+
declare enum ResponseType_2 {
|
|
820
|
+
/** Действие заблокировано, инструмент недоступен */
|
|
821
|
+
ToolNotAllowed = "TOOL_NOT_ALLOWED",
|
|
822
|
+
/** Действие выполнено успешно */
|
|
823
|
+
Success = "SUCCESS",
|
|
824
|
+
/** Действие не выполнено, потому что нет изменений */
|
|
825
|
+
NoChange = "NO_CHANGE",
|
|
826
|
+
Error = "ERROR"
|
|
827
|
+
}
|
|
828
|
+
export { ResponseType_2 as ResponseType }
|
|
829
|
+
|
|
424
830
|
/** @public */
|
|
425
831
|
export declare type SelectedListener = (obj: THREE.Object3D | null) => void;
|
|
426
832
|
|