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