@inweb/viewer-three 26.10.6 → 26.12.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 +7 -4
- package/dist/{plugins → extensions}/components/AxesHelperComponent.js +23 -1
- package/dist/extensions/components/AxesHelperComponent.js.map +1 -0
- package/dist/extensions/components/AxesHelperComponent.min.js +24 -0
- package/dist/{plugins → extensions}/components/AxesHelperComponent.module.js +24 -2
- package/dist/extensions/components/AxesHelperComponent.module.js.map +1 -0
- package/dist/{plugins → extensions}/components/ExtentsHelperComponent.js +18 -0
- package/dist/extensions/components/ExtentsHelperComponent.js.map +1 -0
- package/dist/{plugins/components/AxesHelperComponent.min.js → extensions/components/ExtentsHelperComponent.min.js} +1 -1
- package/dist/{plugins → extensions}/components/ExtentsHelperComponent.module.js +19 -1
- package/dist/extensions/components/ExtentsHelperComponent.module.js.map +1 -0
- package/dist/extensions/components/GridHelperComponent.js.map +1 -0
- package/dist/extensions/components/GridHelperComponent.module.js.map +1 -0
- package/dist/extensions/components/InfoPanelComponent.js +170 -0
- package/dist/extensions/components/InfoPanelComponent.js.map +1 -0
- package/dist/extensions/components/InfoPanelComponent.min.js +24 -0
- package/dist/extensions/components/InfoPanelComponent.module.js +164 -0
- package/dist/extensions/components/InfoPanelComponent.module.js.map +1 -0
- package/dist/extensions/components/LightHelperComponent.js.map +1 -0
- package/dist/extensions/components/LightHelperComponent.module.js.map +1 -0
- package/dist/extensions/components/RoomEnvironmentComponent.js.map +1 -0
- package/dist/extensions/components/RoomEnvironmentComponent.module.js.map +1 -0
- package/dist/{plugins → extensions}/components/StatsPanelComponent.js +9 -3
- package/dist/extensions/components/StatsPanelComponent.js.map +1 -0
- package/dist/extensions/components/StatsPanelComponent.min.js +24 -0
- package/dist/{plugins → extensions}/components/StatsPanelComponent.module.js +9 -3
- package/dist/extensions/components/StatsPanelComponent.module.js.map +1 -0
- package/dist/{plugins → extensions}/loaders/GLTFCloudLoader.js +2 -3
- package/dist/extensions/loaders/GLTFCloudLoader.js.map +1 -0
- package/dist/{plugins → extensions}/loaders/GLTFCloudLoader.min.js +1 -1
- package/dist/{plugins → extensions}/loaders/GLTFCloudLoader.module.js +2 -3
- package/dist/extensions/loaders/GLTFCloudLoader.module.js.map +1 -0
- package/dist/extensions/loaders/GLTFFileLoader.js +2499 -0
- package/dist/extensions/loaders/GLTFFileLoader.js.map +1 -0
- package/dist/extensions/loaders/GLTFFileLoader.min.js +24 -0
- package/dist/extensions/loaders/GLTFFileLoader.module.js +74 -0
- package/dist/extensions/loaders/GLTFFileLoader.module.js.map +1 -0
- package/dist/{plugins → extensions}/loaders/IFCXLoader.js +5 -7
- package/dist/extensions/loaders/IFCXLoader.js.map +1 -0
- package/dist/{plugins → extensions}/loaders/IFCXLoader.min.js +1 -1
- package/dist/{plugins → extensions}/loaders/IFCXLoader.module.js +5 -7
- package/dist/extensions/loaders/IFCXLoader.module.js.map +1 -0
- package/dist/{plugins → extensions}/loaders/PotreeLoader.js +56 -6
- package/dist/extensions/loaders/PotreeLoader.js.map +1 -0
- package/dist/extensions/loaders/PotreeLoader.min.js +24 -0
- package/dist/{plugins → extensions}/loaders/PotreeLoader.module.js +53 -2
- package/dist/extensions/loaders/PotreeLoader.module.js.map +1 -0
- package/dist/viewer-three.js +1416 -2930
- package/dist/viewer-three.js.map +1 -1
- package/dist/viewer-three.min.js +8 -3
- package/dist/viewer-three.module.js +1205 -363
- package/dist/viewer-three.module.js.map +1 -1
- package/{plugins → extensions}/components/AxesHelperComponent.ts +31 -2
- package/{plugins → extensions}/components/ExtentsHelperComponent.ts +25 -0
- package/extensions/components/InfoPanelComponent.ts +197 -0
- package/{plugins → extensions}/components/StatsPanelComponent.ts +10 -3
- package/{plugins → extensions}/loaders/GLTFCloudLoader.ts +2 -3
- package/{src/Viewer → extensions}/loaders/GLTFFileLoader.ts +21 -12
- package/{plugins → extensions}/loaders/IFCX/IFCXCloudLoader.ts +5 -5
- package/{plugins → extensions}/loaders/IFCX/IFCXFileLoader.ts +3 -4
- package/{plugins → extensions}/loaders/Potree/PotreeFileLoader.ts +3 -4
- package/extensions/loaders/Potree/PotreeModelImpl.ts +108 -0
- package/lib/Viewer/Viewer.d.ts +28 -20
- package/lib/Viewer/commands/GetSelected2.d.ts +2 -0
- package/lib/Viewer/commands/SelectModel.d.ts +1 -1
- package/lib/Viewer/commands/SetSelected2.d.ts +2 -0
- package/lib/Viewer/components/InfoComponent.d.ts +22 -0
- package/lib/Viewer/components/SelectionComponent.d.ts +1 -3
- package/lib/Viewer/components/index.d.ts +6 -6
- package/lib/Viewer/draggers/MeasureLineDragger.d.ts +7 -1
- package/lib/Viewer/loaders/DynamicGltfLoader/DynamicModelImpl.d.ts +2 -1
- package/lib/Viewer/loaders/GLTFBinaryExtension.d.ts +5 -0
- package/lib/Viewer/loaders/GLTFCloudDynamicLoader.d.ts +2 -2
- package/lib/Viewer/loaders/{GLTFFileLoader.d.ts → GLTFFileDynamicLoader.d.ts} +7 -1
- package/lib/Viewer/loaders/GLTFLoadingManager.d.ts +4 -3
- package/lib/Viewer/loaders/RangesLoader.d.ts +15 -0
- package/lib/Viewer/loaders/index.d.ts +22 -14
- package/lib/Viewer/measurement/Snapper.d.ts +15 -0
- package/lib/Viewer/measurement/UnitConverter.d.ts +63 -0
- package/lib/Viewer/measurement/UnitFormatter.d.ts +4 -0
- package/lib/Viewer/models/IModelImpl.d.ts +11 -8
- package/lib/Viewer/models/ModelImpl.d.ts +9 -5
- package/package.json +11 -11
- package/src/Viewer/Viewer.ts +127 -88
- package/src/Viewer/commands/ClearSelected.ts +3 -1
- package/src/Viewer/commands/GetModels.ts +1 -1
- package/src/Viewer/commands/GetSelected.ts +2 -2
- package/{plugins/loaders/Potree/PotreeModelImpl.ts → src/Viewer/commands/GetSelected2.ts} +7 -9
- package/src/Viewer/commands/HideSelected.ts +3 -1
- package/src/Viewer/commands/SelectModel.ts +5 -5
- package/src/Viewer/commands/SetSelected.ts +9 -10
- package/src/Viewer/commands/SetSelected2.ts +42 -0
- package/src/Viewer/commands/ZoomToObjects.ts +5 -6
- package/src/Viewer/commands/ZoomToSelected.ts +3 -1
- package/src/Viewer/commands/index.ts +4 -0
- package/src/Viewer/components/CameraComponent.ts +6 -1
- package/src/Viewer/components/ExtentsComponent.ts +4 -1
- package/src/Viewer/components/InfoComponent.ts +187 -0
- package/src/Viewer/components/SelectionComponent.ts +7 -30
- package/src/Viewer/components/index.ts +8 -6
- package/src/Viewer/draggers/MeasureLineDragger.ts +84 -226
- package/src/Viewer/loaders/DynamicGltfLoader/DynamicGltfLoader.js +276 -39
- package/src/Viewer/loaders/DynamicGltfLoader/DynamicModelImpl.ts +45 -10
- package/src/Viewer/loaders/DynamicGltfLoader/GltfStructure.js +71 -2
- package/src/Viewer/loaders/GLTFBinaryExtension.ts +91 -0
- package/src/Viewer/loaders/GLTFCloudDynamicLoader.ts +13 -19
- package/src/Viewer/loaders/GLTFFileDynamicLoader.ts +145 -0
- package/src/Viewer/loaders/GLTFLoadingManager.ts +5 -4
- package/src/Viewer/loaders/RangesLoader.ts +105 -0
- package/src/Viewer/loaders/index.ts +24 -16
- package/src/Viewer/measurement/Snapper.ts +208 -0
- package/src/Viewer/measurement/UnitConverter.ts +47 -0
- package/src/Viewer/measurement/UnitFormatter.ts +95 -0
- package/src/Viewer/models/IModelImpl.ts +17 -8
- package/src/Viewer/models/ModelImpl.ts +205 -16
- package/src/index-umd.ts +1 -1
- package/dist/plugins/components/AxesHelperComponent.js.map +0 -1
- package/dist/plugins/components/AxesHelperComponent.module.js.map +0 -1
- package/dist/plugins/components/ExtentsHelperComponent.js.map +0 -1
- package/dist/plugins/components/ExtentsHelperComponent.min.js +0 -24
- package/dist/plugins/components/ExtentsHelperComponent.module.js.map +0 -1
- package/dist/plugins/components/GridHelperComponent.js.map +0 -1
- package/dist/plugins/components/GridHelperComponent.module.js.map +0 -1
- package/dist/plugins/components/LightHelperComponent.js.map +0 -1
- package/dist/plugins/components/LightHelperComponent.module.js.map +0 -1
- package/dist/plugins/components/RoomEnvironmentComponent.js.map +0 -1
- package/dist/plugins/components/RoomEnvironmentComponent.module.js.map +0 -1
- package/dist/plugins/components/StatsPanelComponent.js.map +0 -1
- package/dist/plugins/components/StatsPanelComponent.min.js +0 -24
- package/dist/plugins/components/StatsPanelComponent.module.js.map +0 -1
- package/dist/plugins/loaders/GLTFCloudLoader.js.map +0 -1
- package/dist/plugins/loaders/GLTFCloudLoader.module.js.map +0 -1
- package/dist/plugins/loaders/IFCXLoader.js.map +0 -1
- package/dist/plugins/loaders/IFCXLoader.module.js.map +0 -1
- package/dist/plugins/loaders/PotreeLoader.js.map +0 -1
- package/dist/plugins/loaders/PotreeLoader.min.js +0 -24
- package/dist/plugins/loaders/PotreeLoader.module.js.map +0 -1
- /package/dist/{plugins → extensions}/components/GridHelperComponent.js +0 -0
- /package/dist/{plugins → extensions}/components/GridHelperComponent.min.js +0 -0
- /package/dist/{plugins → extensions}/components/GridHelperComponent.module.js +0 -0
- /package/dist/{plugins → extensions}/components/LightHelperComponent.js +0 -0
- /package/dist/{plugins → extensions}/components/LightHelperComponent.min.js +0 -0
- /package/dist/{plugins → extensions}/components/LightHelperComponent.module.js +0 -0
- /package/dist/{plugins → extensions}/components/RoomEnvironmentComponent.js +0 -0
- /package/dist/{plugins → extensions}/components/RoomEnvironmentComponent.min.js +0 -0
- /package/dist/{plugins → extensions}/components/RoomEnvironmentComponent.module.js +0 -0
- /package/{plugins → extensions}/components/GridHelperComponent.ts +0 -0
- /package/{plugins → extensions}/components/LightHelperComponent.ts +0 -0
- /package/{plugins → extensions}/components/RoomEnvironmentComponent.ts +0 -0
- /package/{plugins → extensions}/loaders/IFCX/IFCXLoader.ts +0 -0
- /package/{plugins → extensions}/loaders/IFCX/index.ts +0 -0
- /package/{plugins → extensions}/loaders/IFCX/render.js +0 -0
- /package/{plugins → extensions}/loaders/Potree/index.ts +0 -0
package/lib/Viewer/Viewer.d.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { SSAARenderPass } from "./postprocessing/SSAARenderPass.js";
|
|
|
7
7
|
import { OutputPass } from "three/examples/jsm/postprocessing/OutputPass.js";
|
|
8
8
|
import { EventEmitter2 } from "@inweb/eventemitter2";
|
|
9
9
|
import { Assembly, Client, Model, File } from "@inweb/client";
|
|
10
|
-
import { CanvasEventMap, FileSource, IComponent, IDragger, ILoader, IOptions, IViewer, IViewpoint,
|
|
10
|
+
import { CanvasEventMap, FileSource, IComponent, IDragger, IInfo, ILoader, IOptions, IViewer, IViewpoint, OptionsEventMap, ViewerEventMap } from "@inweb/viewer-core";
|
|
11
11
|
import { IMarkup, IWorldTransform } from "@inweb/markup";
|
|
12
12
|
import { IModelImpl } from "./models/IModelImpl";
|
|
13
13
|
import { Helpers } from "./scenes/Helpers";
|
|
@@ -16,10 +16,13 @@ import { Helpers } from "./scenes/Helpers";
|
|
|
16
16
|
*/
|
|
17
17
|
export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMap & OptionsEventMap> implements IViewer, IWorldTransform {
|
|
18
18
|
client: Client | undefined;
|
|
19
|
-
|
|
20
|
-
private canvaseventlistener;
|
|
19
|
+
options: IOptions;
|
|
21
20
|
canvas: HTMLCanvasElement | undefined;
|
|
22
21
|
canvasEvents: string[];
|
|
22
|
+
loaders: ILoader[];
|
|
23
|
+
models: IModelImpl[];
|
|
24
|
+
info: IInfo;
|
|
25
|
+
private canvaseventlistener;
|
|
23
26
|
scene: Scene | undefined;
|
|
24
27
|
helpers: Helpers | undefined;
|
|
25
28
|
camera: PerspectiveCamera | OrthographicCamera | undefined;
|
|
@@ -31,8 +34,6 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
31
34
|
ssaaRenderPass: SSAARenderPass | undefined;
|
|
32
35
|
outputPass: OutputPass | undefined;
|
|
33
36
|
composer: EffectComposer | undefined;
|
|
34
|
-
loaders: ILoader[];
|
|
35
|
-
models: IModelImpl[];
|
|
36
37
|
selected: Object3D[];
|
|
37
38
|
extents: Box3;
|
|
38
39
|
target: Vector3;
|
|
@@ -47,15 +48,14 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
47
48
|
* the web or from local computer.
|
|
48
49
|
*/
|
|
49
50
|
constructor(client?: Client);
|
|
50
|
-
get options(): IOptions;
|
|
51
|
-
get draggers(): string[];
|
|
52
|
-
get components(): string[];
|
|
53
51
|
/**
|
|
54
52
|
* 2D markup core instance used to create markups.
|
|
55
53
|
*
|
|
56
54
|
* @readonly
|
|
57
55
|
*/
|
|
58
56
|
get markup(): IMarkup;
|
|
57
|
+
get draggers(): string[];
|
|
58
|
+
get components(): string[];
|
|
59
59
|
initialize(canvas: HTMLCanvasElement, onProgress?: (event: ProgressEvent<EventTarget>) => void): Promise<this>;
|
|
60
60
|
dispose(): this;
|
|
61
61
|
isInitialized(): boolean;
|
|
@@ -74,18 +74,20 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
74
74
|
* exception will be thrown.
|
|
75
75
|
*
|
|
76
76
|
* For files from Open Cloud Server, the default model will be loaded. If there is no default model,
|
|
77
|
-
* first
|
|
77
|
+
* the first available model will be loaded. If no models are found in the file, an exception will be
|
|
78
78
|
* thrown.
|
|
79
79
|
*
|
|
80
80
|
* For URLs, the file extension is used to determine the file format. For a `ArrayBuffer` and `Data
|
|
81
|
-
* URL`, a file format must be specified using `params.format` parameter
|
|
82
|
-
*
|
|
81
|
+
* URL`, a file format must be specified using `params.format` parameter. If no appropriate loader is
|
|
82
|
+
* found for the specified format, an exception will be thrown.
|
|
83
83
|
*
|
|
84
84
|
* If there was an active dragger before opening the file, it will be deactivated. After opening the
|
|
85
85
|
* file, you must manually activate the required dragger.
|
|
86
86
|
*
|
|
87
87
|
* Fires:
|
|
88
88
|
*
|
|
89
|
+
* - {@link CancelEvent | cancel}
|
|
90
|
+
* - {@link ClearEvent | clear}
|
|
89
91
|
* - {@link OpenEvent | open}
|
|
90
92
|
* - {@link GeometryStartEvent | geometrystart}
|
|
91
93
|
* - {@link GeometryProgressEvent | geometryprogress}
|
|
@@ -94,23 +96,26 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
94
96
|
* - {@link GeometryEndEvent | geometryend}
|
|
95
97
|
* - {@link GeometryErrorEvent | geometryerror}
|
|
96
98
|
*
|
|
97
|
-
* @param file - File to load. Can be
|
|
99
|
+
* @param file - File to load. Can be:
|
|
98
100
|
*
|
|
99
101
|
* - `File`, `Assembly` or `Model` instance from the Open Cloud Server
|
|
100
|
-
* -
|
|
102
|
+
* - `URL` string
|
|
101
103
|
* - {@link https://developer.mozilla.org/docs/Web/HTTP/Basics_of_HTTP/Data_URIs | Data URL} string
|
|
102
104
|
* - {@link https://developer.mozilla.org/docs/Web/API/File | Web API File} object
|
|
103
105
|
* - {@link https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer | ArrayBuffer}
|
|
104
106
|
* object
|
|
105
107
|
*
|
|
106
108
|
* @param params - Loading parameters.
|
|
107
|
-
* @param params.format - File format
|
|
108
|
-
* URL`.
|
|
109
|
+
* @param params.format - File format. Can be `gltf`, `glb` or format from an extension. Required when
|
|
110
|
+
* loading a file as `ArrayBuffer` or `Data URL`.
|
|
109
111
|
* @param params.mode - File opening mode. Can be one of:
|
|
110
112
|
*
|
|
111
|
-
* - `
|
|
112
|
-
* - `
|
|
113
|
+
* - `file` - Single file mode. Unloads an open file and opens a new one. This is default mode.
|
|
114
|
+
* - `assembly` - Assembly mode. Appends a file to an already open file.
|
|
113
115
|
*
|
|
116
|
+
* @param params.modelId - Unique model ID in the assembly (multi-model scene). Used as a model prefix
|
|
117
|
+
* when selecting objects (see {@link getSelected2}). Must not contain the ":" (colon). Required when
|
|
118
|
+
* loading a file as `ArrayBuffer` or `Data URL`.
|
|
114
119
|
* @param params.requestHeader - The
|
|
115
120
|
* {@link https://developer.mozilla.org/docs/Glossary/Request_header | request header} used in HTTP
|
|
116
121
|
* request.
|
|
@@ -130,6 +135,7 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
130
135
|
open(file: FileSource, params?: {
|
|
131
136
|
format?: string;
|
|
132
137
|
mode?: string;
|
|
138
|
+
modelId?: string;
|
|
133
139
|
requestHeader?: HeadersInit;
|
|
134
140
|
withCredentials?: boolean;
|
|
135
141
|
path?: string;
|
|
@@ -150,12 +156,15 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
150
156
|
loadGltfFile(file: any, externalFiles: any, params?: any): Promise<this>;
|
|
151
157
|
cancel(): this;
|
|
152
158
|
clear(): this;
|
|
159
|
+
is3D(): boolean;
|
|
153
160
|
syncOptions(options?: IOptions): void;
|
|
154
161
|
syncOverlay(): void;
|
|
155
162
|
clearOverlay(): void;
|
|
156
163
|
clearSlices(): void;
|
|
157
164
|
getSelected(): string[];
|
|
165
|
+
getSelected2(): string[];
|
|
158
166
|
setSelected(handles?: string[]): void;
|
|
167
|
+
setSelected2(handles?: string[]): void;
|
|
159
168
|
clearSelected(): void;
|
|
160
169
|
hideSelected(): void;
|
|
161
170
|
isolateSelected(): void;
|
|
@@ -166,7 +175,8 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
166
175
|
setActiveDragger(name?: string): IDragger | null;
|
|
167
176
|
resetActiveDragger(): void;
|
|
168
177
|
getComponent(name: string): IComponent;
|
|
169
|
-
|
|
178
|
+
drawViewpoint(viewpoint: IViewpoint): void;
|
|
179
|
+
createViewpoint(): IViewpoint;
|
|
170
180
|
screenToWorld(position: {
|
|
171
181
|
x: number;
|
|
172
182
|
y: number;
|
|
@@ -189,6 +199,4 @@ export declare class Viewer extends EventEmitter2<ViewerEventMap & CanvasEventMa
|
|
|
189
199
|
z: number;
|
|
190
200
|
};
|
|
191
201
|
executeCommand(id: string, ...args: any[]): any;
|
|
192
|
-
drawViewpoint(viewpoint: IViewpoint): void;
|
|
193
|
-
createViewpoint(): IViewpoint;
|
|
194
202
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
import type { Viewer } from "../Viewer";
|
|
2
|
-
export declare function selectModel(viewer: Viewer,
|
|
2
|
+
export declare function selectModel(viewer: Viewer, id: string): void;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { IComponent } from "@inweb/viewer-core";
|
|
2
|
+
import type { Viewer } from "../Viewer";
|
|
3
|
+
export declare class InfoComponent implements IComponent {
|
|
4
|
+
protected viewer: Viewer;
|
|
5
|
+
private startTime;
|
|
6
|
+
private beginTime;
|
|
7
|
+
private prevTime;
|
|
8
|
+
private frames;
|
|
9
|
+
constructor(viewer: Viewer);
|
|
10
|
+
dispose(): void;
|
|
11
|
+
initialize: () => void;
|
|
12
|
+
clear: () => void;
|
|
13
|
+
optionsChange: ({ data: options }: {
|
|
14
|
+
data: any;
|
|
15
|
+
}) => void;
|
|
16
|
+
geometryStart: () => void;
|
|
17
|
+
databaseChunk: () => void;
|
|
18
|
+
geometryEnd: () => void;
|
|
19
|
+
resize: () => void;
|
|
20
|
+
render: () => void;
|
|
21
|
+
animate: () => void;
|
|
22
|
+
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Object3D, Vector2 } from "three";
|
|
2
2
|
import type { IComponent } from "@inweb/viewer-core";
|
|
3
3
|
import type { Viewer } from "../Viewer";
|
|
4
4
|
import type { IModelImpl } from "../models/IModelImpl";
|
|
5
5
|
import type { HighlighterComponent } from "./HighlighterComponent";
|
|
6
6
|
export declare class SelectionComponent implements IComponent {
|
|
7
7
|
protected viewer: Viewer;
|
|
8
|
-
protected raycaster: Raycaster;
|
|
9
8
|
protected downPosition: Vector2;
|
|
10
9
|
protected highlighter: HighlighterComponent;
|
|
11
10
|
constructor(viewer: Viewer);
|
|
@@ -14,7 +13,6 @@ export declare class SelectionComponent implements IComponent {
|
|
|
14
13
|
onPointerUp: (event: PointerEvent) => void;
|
|
15
14
|
onDoubleClick: (event: MouseEvent) => void;
|
|
16
15
|
getMousePosition(event: MouseEvent, target: Vector2): Vector2;
|
|
17
|
-
getPointerIntersects(mouse: Vector2, objects: Object3D[]): Array<Intersection<Object3D>>;
|
|
18
16
|
select(objects: Object3D | Object3D[], model?: IModelImpl): void;
|
|
19
17
|
deselect(objects: Object3D | Object3D[], model?: IModelImpl): void;
|
|
20
18
|
toggleSelection(objects: Object3D | Object3D[], model?: IModelImpl): void;
|
|
@@ -6,8 +6,8 @@ import { IComponentsRegistry } from "@inweb/viewer-core";
|
|
|
6
6
|
*
|
|
7
7
|
* 1. Define a component class implements {@link IComponent}.
|
|
8
8
|
* 2. Define a constructor with a `viewer` parameter and add mouse event listeners for the specified viewer.
|
|
9
|
-
* 3. Define the component logic in the event listeners. For example, listen for the `
|
|
10
|
-
*
|
|
9
|
+
* 3. Define the component logic in the event listeners. For example, listen for the `geometryend` event and
|
|
10
|
+
* implement post-processing logic for the model.
|
|
11
11
|
* 4. Override {@link IComponent.dispose} and remove mouse event listeners from the viewer.
|
|
12
12
|
* 5. Register component provider in the components registry by calling the
|
|
13
13
|
* {@link components.registerComponent}.
|
|
@@ -22,15 +22,15 @@ import { IComponentsRegistry } from "@inweb/viewer-core";
|
|
|
22
22
|
*
|
|
23
23
|
* constructor(viewer: Viewer) {
|
|
24
24
|
* this.viewer = viewer;
|
|
25
|
-
* this.viewer.addEventListener("
|
|
25
|
+
* this.viewer.addEventListener("geometryend", this.onGeometryEnd);
|
|
26
26
|
* }
|
|
27
27
|
*
|
|
28
28
|
* override dispose() {
|
|
29
|
-
* this.viewer.removeEventListener("
|
|
29
|
+
* this.viewer.removeEventListener("geometryend", this.onGeometryEnd);
|
|
30
30
|
* }
|
|
31
31
|
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
32
|
+
* onGeometryEnd = (event: MouseEvent) => {
|
|
33
|
+
* this.viewer.executeCommand("zoomToExtents");
|
|
34
34
|
* };
|
|
35
35
|
* }
|
|
36
36
|
*
|
|
@@ -4,6 +4,10 @@ export declare class MeasureLineDragger extends OrbitDragger {
|
|
|
4
4
|
private overlay;
|
|
5
5
|
private line;
|
|
6
6
|
private snapper;
|
|
7
|
+
private objects;
|
|
8
|
+
private scale;
|
|
9
|
+
private units;
|
|
10
|
+
private precision;
|
|
7
11
|
constructor(viewer: Viewer);
|
|
8
12
|
dispose(): void;
|
|
9
13
|
onPointerDown: (event: PointerEvent) => void;
|
|
@@ -11,7 +15,9 @@ export declare class MeasureLineDragger extends OrbitDragger {
|
|
|
11
15
|
onPointerUp: (event: PointerEvent) => void;
|
|
12
16
|
onPointerCancel: (event: PointerEvent) => void;
|
|
13
17
|
onPointerLeave: () => void;
|
|
18
|
+
clearOverlay: () => void;
|
|
14
19
|
renderOverlay: () => void;
|
|
15
|
-
|
|
20
|
+
updateObjects: () => void;
|
|
16
21
|
updateSnapperCamera: () => void;
|
|
22
|
+
updateUnits: () => void;
|
|
17
23
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Box3, Object3D } from "three";
|
|
2
|
+
import { IInfo } from "@inweb/viewer-core";
|
|
2
3
|
import { ModelImpl } from "../../models/ModelImpl";
|
|
3
4
|
import { DynamicGltfLoader } from "./DynamicGltfLoader.js";
|
|
4
5
|
export declare class DynamicModelImpl extends ModelImpl {
|
|
5
6
|
gltfLoader: DynamicGltfLoader;
|
|
6
|
-
|
|
7
|
+
getInfo(): IInfo;
|
|
7
8
|
getExtents(target: Box3): Box3;
|
|
8
9
|
getObjects(): Object3D[];
|
|
9
10
|
getVisibleObjects(): Object3D[];
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Loader, LoadParams } from "@inweb/viewer-core";
|
|
2
2
|
import { Viewer } from "../Viewer";
|
|
3
3
|
import { DynamicGltfLoader } from "./DynamicGltfLoader/DynamicGltfLoader.js";
|
|
4
|
-
export declare class GLTFCloudDynamicLoader
|
|
4
|
+
export declare class GLTFCloudDynamicLoader extends Loader {
|
|
5
5
|
viewer: Viewer;
|
|
6
6
|
gltfLoader: DynamicGltfLoader;
|
|
7
7
|
requestId: number;
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
import { Loader } from "@inweb/viewer-core";
|
|
2
2
|
import { Viewer } from "../Viewer";
|
|
3
3
|
import { GLTFLoadParams } from "./GLTFLoadingManager";
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class GLTFFileDynamicLoader extends Loader {
|
|
5
5
|
viewer: Viewer;
|
|
6
|
+
private gltfLoader;
|
|
7
|
+
private manager;
|
|
8
|
+
private gltf;
|
|
9
|
+
private bin;
|
|
6
10
|
constructor(viewer: Viewer);
|
|
11
|
+
dispose(): void;
|
|
7
12
|
isSupport(file: any, format?: string): boolean;
|
|
8
13
|
load(file: any, format?: string, params?: GLTFLoadParams): Promise<this>;
|
|
14
|
+
cancel(): void;
|
|
9
15
|
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { LoadParams } from "@inweb/viewer-core";
|
|
1
2
|
import { LoadingManager } from "three";
|
|
2
3
|
export type GLTFFileSource = string | globalThis.File | ArrayBuffer;
|
|
3
|
-
export type GLTFLoadParams = {
|
|
4
|
+
export type GLTFLoadParams = LoadParams & {
|
|
5
|
+
requestHeader?: HeadersInit;
|
|
6
|
+
withCredentials?: boolean;
|
|
4
7
|
path?: string;
|
|
5
8
|
externalFiles?: Map<string, GLTFFileSource>;
|
|
6
9
|
crossOrigin?: string;
|
|
7
|
-
requestHeader?: HeadersInit;
|
|
8
|
-
withCredentials?: boolean;
|
|
9
10
|
};
|
|
10
11
|
export declare class GLTFLoadingManager extends LoadingManager {
|
|
11
12
|
path: string;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface Range {
|
|
2
|
+
offset: number;
|
|
3
|
+
length: number;
|
|
4
|
+
}
|
|
5
|
+
export declare class RangesLoader {
|
|
6
|
+
private requestHeader;
|
|
7
|
+
private withCredentials;
|
|
8
|
+
private abortSignal;
|
|
9
|
+
constructor();
|
|
10
|
+
setRequestHeader(requestHeader: HeadersInit): void;
|
|
11
|
+
setWithCredentials(withCredentials: boolean): void;
|
|
12
|
+
setAbortSignal(abortSignal: AbortSignal): void;
|
|
13
|
+
load(url: string, ranges: Range[]): Promise<ArrayBuffer>;
|
|
14
|
+
extractRanges(arrayBuffer: ArrayBuffer, ranges: Range[]): ArrayBuffer;
|
|
15
|
+
}
|
|
@@ -6,29 +6,30 @@ import { ILoadersRegistry } from "@inweb/viewer-core";
|
|
|
6
6
|
*
|
|
7
7
|
* 1. Define a loader class implements {@link ILoader}.
|
|
8
8
|
* 2. Define a constructor with a `viewer` parameter.
|
|
9
|
-
* 3. Override {@link ILoader.isSupport} and
|
|
9
|
+
* 3. Override {@link ILoader.isSupport} and check if the loader can load the specified file.
|
|
10
10
|
* 4. Override {@link ILoader.load} and define the logic for loading the scene from the file.
|
|
11
11
|
*
|
|
12
12
|
* The loader should do:
|
|
13
13
|
*
|
|
14
14
|
* - Load raw data from file and convert it to the `Three.js` scene.
|
|
15
15
|
* - Add scene to the viewer `scene`.
|
|
16
|
-
* - Create `ModelImpl`
|
|
16
|
+
* - Create `ModelImpl` instance with unique model ID add it to the viewer `models` list.
|
|
17
17
|
* - Synchronize viewer options and overlay.
|
|
18
18
|
* - Update the viewer.
|
|
19
19
|
*
|
|
20
20
|
* The loader must emit events:
|
|
21
21
|
*
|
|
22
|
-
* - `geometryprogress` - during loading
|
|
23
|
-
* after the load is complete.
|
|
22
|
+
* - `geometryprogress` - during loading (or once at 100% when complete).
|
|
24
23
|
* - `databasechunk` - when scene is loaded and ready to render.
|
|
25
24
|
* 5. Override {@link ILoader.dispose} and release loader resources, if required.
|
|
26
|
-
* 6.
|
|
25
|
+
* 6. Use `this.abortController` (defined in `Loader` class) to abort loading raw data.
|
|
26
|
+
* 7. Register loader provider in the loaders registry by calling the {@link loaders.registerLoader}.
|
|
27
27
|
*
|
|
28
28
|
* @example Implementing a custom loader.
|
|
29
29
|
*
|
|
30
30
|
* ```javascript
|
|
31
|
-
* import {
|
|
31
|
+
* import { Scene } from "three";
|
|
32
|
+
* import { Loader, loaders, ModelImpl, Viewer } from "@inweb/viewer-three";
|
|
32
33
|
*
|
|
33
34
|
* class MyLoader extends Loader {
|
|
34
35
|
* public viewer: Viewer;
|
|
@@ -39,18 +40,19 @@ import { ILoadersRegistry } from "@inweb/viewer-core";
|
|
|
39
40
|
* }
|
|
40
41
|
*
|
|
41
42
|
* override isSupport(file, format): Boolean {
|
|
42
|
-
* //
|
|
43
|
-
* return
|
|
43
|
+
* // check if this loader supports the file source and format
|
|
44
|
+
* return type file === "string" && format === "myformat";
|
|
44
45
|
* }
|
|
45
46
|
*
|
|
46
|
-
* override load(file, format, params): Promise<this> {
|
|
47
|
+
* override load(file, format, params = {}): Promise<this> {
|
|
48
|
+
* // load raw data from file (custom loading logic)
|
|
49
|
+
* const data = await fetch(file).then((result) => result.arrayBuffer());
|
|
47
50
|
*
|
|
48
|
-
* //
|
|
49
|
-
* const scene =
|
|
51
|
+
* // convert raw data to the Three.js scene (custom parsing logic)
|
|
52
|
+
* const scene = this.parse(data);
|
|
50
53
|
*
|
|
51
54
|
* const modelImpl = new ModelImpl(scene);
|
|
52
|
-
* modelImpl.
|
|
53
|
-
* modelImpl.viewer = this.viewer;
|
|
55
|
+
* modelImpl.id = params.modelId;
|
|
54
56
|
*
|
|
55
57
|
* this.viewer.scene.add(scene);
|
|
56
58
|
* this.viewer.models.push(modelImpl);
|
|
@@ -59,11 +61,17 @@ import { ILoadersRegistry } from "@inweb/viewer-core";
|
|
|
59
61
|
* this.viewer.syncOverlay();
|
|
60
62
|
* this.viewer.update();
|
|
61
63
|
*
|
|
64
|
+
* this.viewer.emitEvent({ type: "geometryprogress", data: 1, file });
|
|
62
65
|
* this.viewer.emitEvent({ type: "databasechunk", data: scene, file });
|
|
63
66
|
*
|
|
64
67
|
* return Promise.resove(this);
|
|
65
68
|
* };
|
|
66
|
-
*
|
|
69
|
+
*
|
|
70
|
+
* private parse(data: ArrayBuffer): Scene {
|
|
71
|
+
* // custom parsing logic
|
|
72
|
+
* return new Scene();
|
|
73
|
+
* }
|
|
74
|
+
* }
|
|
67
75
|
*
|
|
68
76
|
* loaders.registerLoader("MyLoader", (viewer) => new MyLoader(viewer));
|
|
69
77
|
* ```
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Camera, Intersection, Object3D, Vector2, Vector3, WebGLRenderer } from "three";
|
|
2
|
+
export declare class Snapper {
|
|
3
|
+
camera: Camera;
|
|
4
|
+
renderer: WebGLRenderer;
|
|
5
|
+
canvas: HTMLCanvasElement;
|
|
6
|
+
private raycaster;
|
|
7
|
+
private detectRadiusInPixels;
|
|
8
|
+
private edgesCache;
|
|
9
|
+
constructor(camera: Camera, renderer: WebGLRenderer, canvas: HTMLCanvasElement);
|
|
10
|
+
isMobile(): boolean;
|
|
11
|
+
getMousePosition(event: MouseEvent, target: Vector2): Vector2;
|
|
12
|
+
getPointerIntersects(mouse: Vector2, objects: Object3D[]): Array<Intersection<Object3D>>;
|
|
13
|
+
getDetectRadius(point: Vector3): number;
|
|
14
|
+
getSnapPoint(mouse: Vector2, objects: Object3D[]): Vector3;
|
|
15
|
+
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
export declare const ModelUnits: {
|
|
2
|
+
Meters: {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
scale: number;
|
|
6
|
+
};
|
|
7
|
+
Centimeters: {
|
|
8
|
+
name: string;
|
|
9
|
+
type: string;
|
|
10
|
+
scale: number;
|
|
11
|
+
};
|
|
12
|
+
Millimeters: {
|
|
13
|
+
name: string;
|
|
14
|
+
type: string;
|
|
15
|
+
scale: number;
|
|
16
|
+
};
|
|
17
|
+
Feet: {
|
|
18
|
+
name: string;
|
|
19
|
+
type: string;
|
|
20
|
+
scale: number;
|
|
21
|
+
};
|
|
22
|
+
Inches: {
|
|
23
|
+
name: string;
|
|
24
|
+
type: string;
|
|
25
|
+
scale: number;
|
|
26
|
+
};
|
|
27
|
+
Yards: {
|
|
28
|
+
name: string;
|
|
29
|
+
type: string;
|
|
30
|
+
scale: number;
|
|
31
|
+
};
|
|
32
|
+
Kilometers: {
|
|
33
|
+
name: string;
|
|
34
|
+
type: string;
|
|
35
|
+
scale: number;
|
|
36
|
+
};
|
|
37
|
+
Miles: {
|
|
38
|
+
name: string;
|
|
39
|
+
type: string;
|
|
40
|
+
scale: number;
|
|
41
|
+
};
|
|
42
|
+
Micrometers: {
|
|
43
|
+
name: string;
|
|
44
|
+
type: string;
|
|
45
|
+
scale: number;
|
|
46
|
+
};
|
|
47
|
+
Mils: {
|
|
48
|
+
name: string;
|
|
49
|
+
type: string;
|
|
50
|
+
scale: number;
|
|
51
|
+
};
|
|
52
|
+
MicroInches: {
|
|
53
|
+
name: string;
|
|
54
|
+
type: string;
|
|
55
|
+
scale: number;
|
|
56
|
+
};
|
|
57
|
+
Default: {
|
|
58
|
+
name: string;
|
|
59
|
+
type: string;
|
|
60
|
+
scale: number;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
export declare function convertUnits(fromUnits: string, toUnits: string, distance: number): number;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function getDisplayUnit(units: string): any;
|
|
2
|
+
export declare function calculatePrecision(value: number): number;
|
|
3
|
+
export declare function calculateDistance(precision: any): number;
|
|
4
|
+
export declare function formatDistance(distance: number, units: string, precision?: any): string;
|
|
@@ -1,19 +1,22 @@
|
|
|
1
1
|
import { Box3, Object3D } from "three";
|
|
2
|
-
import {
|
|
2
|
+
import { IInfo, IModel } from "@inweb/viewer-core";
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
4
|
+
* Basic model implementation.
|
|
5
5
|
*/
|
|
6
|
-
export interface IModelImpl {
|
|
7
|
-
handle: string;
|
|
6
|
+
export interface IModelImpl extends IModel {
|
|
8
7
|
scene: Object3D;
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
getUnits(): string;
|
|
9
|
+
getUnitScale(): number;
|
|
10
|
+
getUnitString(): string;
|
|
11
|
+
getPrecision(): number;
|
|
12
|
+
getInfo(): IInfo;
|
|
12
13
|
getExtents(target: Box3): Box3;
|
|
13
14
|
getObjects(): Object3D[];
|
|
14
15
|
getVisibleObjects(): Object3D[];
|
|
15
|
-
hasObject(
|
|
16
|
+
hasObject(object: Object3D): boolean;
|
|
17
|
+
hasHandle(handle: string): boolean;
|
|
16
18
|
getOwnObjects(objects: Object3D | Object3D[]): Object3D[];
|
|
19
|
+
getOwnHandles(handles: string | string[]): string[];
|
|
17
20
|
getObjectsByHandles(handles: string | string[]): Object3D[];
|
|
18
21
|
getHandlesByObjects(objects: Object3D | Object3D[]): string[];
|
|
19
22
|
hideObjects(objects: Object3D | Object3D[]): this;
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import { Box3, Object3D } from "three";
|
|
2
|
-
import {
|
|
2
|
+
import { IInfo } from "@inweb/viewer-core";
|
|
3
3
|
import { IModelImpl } from "./IModelImpl";
|
|
4
|
-
import { Viewer } from "../Viewer";
|
|
5
4
|
export declare class ModelImpl implements IModelImpl {
|
|
6
|
-
|
|
5
|
+
id: string;
|
|
7
6
|
scene: Object3D;
|
|
8
|
-
loader: ILoader;
|
|
9
|
-
viewer: Viewer;
|
|
10
7
|
constructor(scene: Object3D);
|
|
11
8
|
dispose(): void;
|
|
9
|
+
getUnits(): string;
|
|
10
|
+
getUnitScale(): number;
|
|
11
|
+
getUnitString(): string;
|
|
12
|
+
getPrecision(): number;
|
|
13
|
+
getInfo(): IInfo;
|
|
12
14
|
getExtents(target: Box3): Box3;
|
|
13
15
|
getObjects(): Object3D[];
|
|
14
16
|
getVisibleObjects(): Object3D[];
|
|
15
17
|
hasObject(object: Object3D): boolean;
|
|
18
|
+
hasHandle(handle: string): boolean;
|
|
16
19
|
getOwnObjects(objects: Object3D | Object3D[]): Object3D[];
|
|
20
|
+
getOwnHandles(handles: string | string[]): string[];
|
|
17
21
|
getObjectsByHandles(handles: string | string[]): Object3D[];
|
|
18
22
|
getHandlesByObjects(objects: Object3D | Object3D[]): string[];
|
|
19
23
|
hideObjects(objects: Object3D | Object3D[]): this;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inweb/viewer-three",
|
|
3
|
-
"version": "26.
|
|
3
|
+
"version": "26.12.0",
|
|
4
4
|
"description": "JavaScript library for rendering CAD and BIM files in a browser using Three.js",
|
|
5
5
|
"homepage": "https://cloud.opendesign.com/docs/index.html",
|
|
6
6
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"three.js"
|
|
15
15
|
],
|
|
16
16
|
"sideEffects": [
|
|
17
|
-
"dist/
|
|
17
|
+
"dist/extensions/**/*"
|
|
18
18
|
],
|
|
19
19
|
"main": "dist/viewer-three.js",
|
|
20
20
|
"module": "dist/viewer-three.module.js",
|
|
@@ -23,22 +23,22 @@
|
|
|
23
23
|
"dist",
|
|
24
24
|
"lib/**/*.d.ts",
|
|
25
25
|
"src",
|
|
26
|
-
"
|
|
26
|
+
"extensions"
|
|
27
27
|
],
|
|
28
28
|
"scripts": {
|
|
29
|
-
"build": "npm run build:viewer && npm run build:
|
|
29
|
+
"build": "npm run build:viewer && npm run build:extensions",
|
|
30
30
|
"build:viewer": "rollup -c rollup.config.js",
|
|
31
|
-
"build:
|
|
32
|
-
"test": "npm run test:viewer && npm run test:
|
|
31
|
+
"build:extensions": "rollup -c rollup.extensions.config.js",
|
|
32
|
+
"test": "npm run test:viewer && npm run test:extensions",
|
|
33
33
|
"test:viewer": "karma start karma.conf.js",
|
|
34
|
-
"test:
|
|
34
|
+
"test:extensions": "karma start karma.extensions.conf.js",
|
|
35
35
|
"docs": "typedoc"
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@inweb/client": "~26.
|
|
39
|
-
"@inweb/eventemitter2": "~26.
|
|
40
|
-
"@inweb/markup": "~26.
|
|
41
|
-
"@inweb/viewer-core": "~26.
|
|
38
|
+
"@inweb/client": "~26.12.0",
|
|
39
|
+
"@inweb/eventemitter2": "~26.12.0",
|
|
40
|
+
"@inweb/markup": "~26.12.0",
|
|
41
|
+
"@inweb/viewer-core": "~26.12.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@types/three": "^0.180.0",
|