vim-web 0.3.23 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/dist/types/react-viewer/bim/bimInfoBody.d.ts +9 -0
  2. package/dist/types/react-viewer/bim/bimInfoData.d.ts +77 -0
  3. package/dist/types/react-viewer/bim/bimInfoHeader.d.ts +6 -0
  4. package/dist/types/react-viewer/bim/bimInfoObject.d.ts +12 -0
  5. package/dist/types/react-viewer/bim/bimInfoPanel.d.ts +10 -0
  6. package/dist/types/react-viewer/bim/bimInfoVim.d.ts +5 -0
  7. package/dist/types/react-viewer/bim/bimPanel.d.ts +40 -0
  8. package/dist/types/react-viewer/bim/bimSearch.d.ts +17 -0
  9. package/dist/types/react-viewer/bim/bimTree.d.ts +31 -0
  10. package/dist/types/react-viewer/bim/bimTreeData.d.ts +43 -0
  11. package/dist/types/react-viewer/bim/bimUtils.d.ts +13 -0
  12. package/dist/types/react-viewer/bim/openState.d.ts +5 -0
  13. package/dist/types/react-viewer/container.d.ts +27 -0
  14. package/dist/types/react-viewer/controlbar/controlBar.d.ts +57 -0
  15. package/dist/types/react-viewer/controlbar/controlBarButton.d.ts +17 -0
  16. package/dist/types/react-viewer/controlbar/controlBarCommands.d.ts +4 -0
  17. package/dist/types/react-viewer/controlbar/controlBarSection.d.ts +10 -0
  18. package/dist/types/react-viewer/controlbar/fullScreenState.d.ts +4 -0
  19. package/dist/types/react-viewer/controlbar/measureState.d.ts +7 -0
  20. package/dist/types/react-viewer/controlbar/pointerState.d.ts +6 -0
  21. package/dist/types/react-viewer/controlbar/restOfScreen.d.ts +5 -0
  22. package/dist/types/react-viewer/controlbar/sectionBoxState.d.ts +15 -0
  23. package/dist/types/react-viewer/errors/errorStyle.d.ts +15 -0
  24. package/dist/types/react-viewer/errors/errorUtils.d.ts +2 -0
  25. package/dist/types/react-viewer/errors/errors.d.ts +5 -0
  26. package/dist/types/react-viewer/errors/fileDownloadingError.d.ts +2 -0
  27. package/dist/types/react-viewer/errors/fileLoadingError.d.ts +2 -0
  28. package/dist/types/react-viewer/errors/fileOpeningError.d.ts +2 -0
  29. package/dist/types/react-viewer/errors/serverCompatibilityError.d.ts +2 -0
  30. package/dist/types/react-viewer/errors/serverConnectionError.d.ts +2 -0
  31. package/dist/types/react-viewer/helpers/camera.d.ts +37 -0
  32. package/dist/types/react-viewer/helpers/cameraObserver.d.ts +8 -0
  33. package/dist/types/react-viewer/helpers/cursor.d.ts +35 -0
  34. package/dist/types/react-viewer/helpers/data.d.ts +27 -0
  35. package/dist/types/react-viewer/helpers/deferredPromise.d.ts +8 -0
  36. package/dist/types/react-viewer/helpers/element.d.ts +13 -0
  37. package/dist/types/react-viewer/helpers/fullScreenObserver.d.ts +9 -0
  38. package/dist/types/react-viewer/helpers/inputs.d.ts +23 -0
  39. package/dist/types/react-viewer/helpers/isolation.d.ts +87 -0
  40. package/dist/types/react-viewer/helpers/loadRequest.d.ts +29 -0
  41. package/dist/types/react-viewer/helpers/requestResult.d.ts +13 -0
  42. package/dist/types/react-viewer/helpers/utils.d.ts +7 -0
  43. package/dist/types/react-viewer/panels/axesPanel.d.ts +20 -0
  44. package/dist/types/react-viewer/panels/contextMenu.d.ts +75 -0
  45. package/dist/types/react-viewer/panels/help.d.ts +15 -0
  46. package/dist/types/react-viewer/panels/icons.d.ts +46 -0
  47. package/dist/types/react-viewer/panels/loadingBox.d.ts +26 -0
  48. package/dist/types/react-viewer/panels/logo.d.ts +5 -0
  49. package/dist/types/react-viewer/panels/messageBox.d.ts +14 -0
  50. package/dist/types/react-viewer/panels/modal.d.ts +18 -0
  51. package/dist/types/react-viewer/panels/overlay.d.ts +10 -0
  52. package/dist/types/react-viewer/panels/performance.d.ts +7 -0
  53. package/dist/types/react-viewer/panels/toast.d.ts +22 -0
  54. package/dist/types/react-viewer/reactViewerIndex.d.ts +8 -0
  55. package/dist/types/react-viewer/settings/menuSettings.d.ts +17 -0
  56. package/dist/types/react-viewer/settings/settings.d.ts +65 -0
  57. package/dist/types/react-viewer/settings/settingsState.d.ts +18 -0
  58. package/dist/types/react-viewer/settings/settingsStorage.d.ts +6 -0
  59. package/dist/types/react-viewer/sidePanel/sidePanel.d.ts +20 -0
  60. package/dist/types/react-viewer/sidePanel/sideState.d.ts +22 -0
  61. package/dist/types/react-viewer/ultra/ultraComponent.d.ts +30 -0
  62. package/dist/types/react-viewer/ultra/ultraErrors.d.ts +3 -0
  63. package/dist/types/react-viewer/urls.d.ts +2 -0
  64. package/dist/types/react-viewer/webgl/viewerState.d.ts +11 -0
  65. package/dist/types/react-viewer/webgl/webglComponent.d.ts +41 -0
  66. package/dist/types/react-viewer/webgl/webglComponentRef.d.ts +99 -0
  67. package/dist/types/react-viewer/webgl/webglLoading.d.ts +67 -0
  68. package/dist/types/ultra-viewer/ultraViewerIndex.d.ts +8 -0
  69. package/dist/types/ultra-viewer/utils/array.d.ts +18 -0
  70. package/dist/types/ultra-viewer/utils/debounce.d.ts +1 -0
  71. package/dist/types/ultra-viewer/utils/deferredPromise.d.ts +8 -0
  72. package/dist/types/ultra-viewer/utils/math3d.d.ts +106 -0
  73. package/dist/types/ultra-viewer/utils/promise.d.ts +21 -0
  74. package/dist/types/ultra-viewer/utils/result.d.ts +11 -0
  75. package/dist/types/ultra-viewer/utils/url.d.ts +8 -0
  76. package/dist/types/ultra-viewer/utils/validation.d.ts +28 -0
  77. package/dist/types/ultra-viewer/viewer/camera.d.ts +118 -0
  78. package/dist/types/ultra-viewer/viewer/color.d.ts +57 -0
  79. package/dist/types/ultra-viewer/viewer/colorManager.d.ts +73 -0
  80. package/dist/types/ultra-viewer/viewer/decoder.d.ts +116 -0
  81. package/dist/types/ultra-viewer/viewer/decoderWithWorker.d.ts +80 -0
  82. package/dist/types/ultra-viewer/viewer/inputs/InputTouch.d.ts +25 -0
  83. package/dist/types/ultra-viewer/viewer/inputs/inputHandler.d.ts +7 -0
  84. package/dist/types/ultra-viewer/viewer/inputs/inputKeyboard.d.ts +20 -0
  85. package/dist/types/ultra-viewer/viewer/inputs/inputMouse.d.ts +21 -0
  86. package/dist/types/ultra-viewer/viewer/inputs/inputs.d.ts +27 -0
  87. package/dist/types/ultra-viewer/viewer/loadRequest.d.ts +36 -0
  88. package/dist/types/ultra-viewer/viewer/logger.d.ts +9 -0
  89. package/dist/types/ultra-viewer/viewer/marshal.d.ts +72 -0
  90. package/dist/types/ultra-viewer/viewer/protocol.d.ts +13 -0
  91. package/dist/types/ultra-viewer/viewer/renderer.d.ts +142 -0
  92. package/dist/types/ultra-viewer/viewer/rpcClient.d.ts +72 -0
  93. package/dist/types/ultra-viewer/viewer/rpcSafeClient.d.ts +382 -0
  94. package/dist/types/ultra-viewer/viewer/selection.d.ts +94 -0
  95. package/dist/types/ultra-viewer/viewer/socketClient.d.ts +141 -0
  96. package/dist/types/ultra-viewer/viewer/streamLogger.d.ts +19 -0
  97. package/dist/types/ultra-viewer/viewer/streamRenderer.d.ts +7 -0
  98. package/dist/types/ultra-viewer/viewer/viewer.d.ts +123 -0
  99. package/dist/types/ultra-viewer/viewer/viewport.d.ts +39 -0
  100. package/dist/types/ultra-viewer/viewer/vim.d.ts +111 -0
  101. package/dist/types/ultra-viewer/viewer/vimCollection.d.ts +43 -0
  102. package/dist/types/vimWebIndex.d.ts +4 -0
  103. package/dist/types/webgl-viewer/images.d.ts +4 -0
  104. package/dist/types/webgl-viewer/index.d.ts +26 -0
  105. package/dist/types/webgl-viewer/utils/boxes.d.ts +5 -0
  106. package/dist/types/webgl-viewer/utils/deferredPromise.d.ts +8 -0
  107. package/dist/types/webgl-viewer/utils/requestResult.d.ts +13 -0
  108. package/dist/types/webgl-viewer/vim-loader/averageBoundingBox.d.ts +6 -0
  109. package/dist/types/webgl-viewer/vim-loader/colorAttributes.d.ts +34 -0
  110. package/dist/types/webgl-viewer/vim-loader/elementMapping.d.ts +113 -0
  111. package/dist/types/webgl-viewer/vim-loader/geometry.d.ts +105 -0
  112. package/dist/types/webgl-viewer/vim-loader/materials/isolationMaterial.d.ts +12 -0
  113. package/dist/types/webgl-viewer/vim-loader/materials/maskMaterial.d.ts +8 -0
  114. package/dist/types/webgl-viewer/vim-loader/materials/mergeMaterial.d.ts +18 -0
  115. package/dist/types/webgl-viewer/vim-loader/materials/outlineMaterial.d.ts +36 -0
  116. package/dist/types/webgl-viewer/vim-loader/materials/simpleMaterial.d.ts +12 -0
  117. package/dist/types/webgl-viewer/vim-loader/materials/skyboxMaterial.d.ts +16 -0
  118. package/dist/types/webgl-viewer/vim-loader/materials/standardMaterial.d.ts +57 -0
  119. package/dist/types/webgl-viewer/vim-loader/materials/transferMaterial.d.ts +8 -0
  120. package/dist/types/webgl-viewer/vim-loader/materials/viewerMaterials.d.ts +158 -0
  121. package/dist/types/webgl-viewer/vim-loader/mesh.d.ts +115 -0
  122. package/dist/types/webgl-viewer/vim-loader/object3D.d.ts +105 -0
  123. package/dist/types/webgl-viewer/vim-loader/objectAttributes.d.ts +19 -0
  124. package/dist/types/webgl-viewer/vim-loader/progressive/g3dOffsets.d.ts +53 -0
  125. package/dist/types/webgl-viewer/vim-loader/progressive/g3dSubset.d.ts +115 -0
  126. package/dist/types/webgl-viewer/vim-loader/progressive/insertableGeometry.d.ts +40 -0
  127. package/dist/types/webgl-viewer/vim-loader/progressive/insertableMesh.d.ts +59 -0
  128. package/dist/types/webgl-viewer/vim-loader/progressive/insertableSubmesh.d.ts +43 -0
  129. package/dist/types/webgl-viewer/vim-loader/progressive/instancedMesh.d.ts +32 -0
  130. package/dist/types/webgl-viewer/vim-loader/progressive/instancedMeshFactory.d.ts +20 -0
  131. package/dist/types/webgl-viewer/vim-loader/progressive/instancedSubmesh.d.ts +31 -0
  132. package/dist/types/webgl-viewer/vim-loader/progressive/legacyMeshFactory.d.ts +23 -0
  133. package/dist/types/webgl-viewer/vim-loader/progressive/loadingSynchronizer.d.ts +27 -0
  134. package/dist/types/webgl-viewer/vim-loader/progressive/open.d.ts +12 -0
  135. package/dist/types/webgl-viewer/vim-loader/progressive/subsetBuilder.d.ts +73 -0
  136. package/dist/types/webgl-viewer/vim-loader/progressive/subsetRequest.d.ts +37 -0
  137. package/dist/types/webgl-viewer/vim-loader/progressive/vimRequest.d.ts +44 -0
  138. package/dist/types/webgl-viewer/vim-loader/progressive/vimx.d.ts +17 -0
  139. package/dist/types/webgl-viewer/vim-loader/scene.d.ts +92 -0
  140. package/dist/types/webgl-viewer/vim-loader/vim.d.ts +157 -0
  141. package/dist/types/webgl-viewer/vim-loader/vimSettings.d.ts +62 -0
  142. package/dist/types/webgl-viewer/vim-webgl-viewer/camera/camera.d.ts +255 -0
  143. package/dist/types/webgl-viewer/vim-webgl-viewer/camera/cameraMovement.d.ts +77 -0
  144. package/dist/types/webgl-viewer/vim-webgl-viewer/camera/cameraMovementLerp.d.ts +28 -0
  145. package/dist/types/webgl-viewer/vim-webgl-viewer/camera/cameraMovementSnap.d.ts +24 -0
  146. package/dist/types/webgl-viewer/vim-webgl-viewer/camera/orthographic.d.ts +12 -0
  147. package/dist/types/webgl-viewer/vim-webgl-viewer/camera/perspective.d.ts +12 -0
  148. package/dist/types/webgl-viewer/vim-webgl-viewer/environment/cameraLight.d.ts +43 -0
  149. package/dist/types/webgl-viewer/vim-webgl-viewer/environment/environment.d.ts +44 -0
  150. package/dist/types/webgl-viewer/vim-webgl-viewer/environment/groundPlane.d.ts +25 -0
  151. package/dist/types/webgl-viewer/vim-webgl-viewer/environment/skybox.d.ts +39 -0
  152. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/axes/axes.d.ts +14 -0
  153. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/axes/axesSettings.d.ts +19 -0
  154. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/axes/gizmoAxes.d.ts +60 -0
  155. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/gizmoLoading.d.ts +23 -0
  156. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/gizmoOrbit.d.ts +71 -0
  157. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/gizmoRectangle.d.ts +51 -0
  158. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/gizmos.d.ts +50 -0
  159. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/markers/gizmoMarker.d.ts +64 -0
  160. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/markers/gizmoMarkers.d.ts +29 -0
  161. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/measure/measure.d.ts +103 -0
  162. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/measure/measureFlow.d.ts +36 -0
  163. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/measure/measureGizmo.d.ts +44 -0
  164. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/measure/measureHtml.d.ts +26 -0
  165. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/sectionBox/sectionBox.d.ts +70 -0
  166. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/sectionBox/sectionBoxGizmo.d.ts +47 -0
  167. package/dist/types/webgl-viewer/vim-webgl-viewer/gizmos/sectionBox/sectionBoxInputs.d.ts +39 -0
  168. package/dist/types/webgl-viewer/vim-webgl-viewer/inputs/input.d.ts +128 -0
  169. package/dist/types/webgl-viewer/vim-webgl-viewer/inputs/inputHandler.d.ts +29 -0
  170. package/dist/types/webgl-viewer/vim-webgl-viewer/inputs/keyboard.d.ts +113 -0
  171. package/dist/types/webgl-viewer/vim-webgl-viewer/inputs/mouse.d.ts +66 -0
  172. package/dist/types/webgl-viewer/vim-webgl-viewer/inputs/touch.d.ts +45 -0
  173. package/dist/types/webgl-viewer/vim-webgl-viewer/raycaster.d.ts +89 -0
  174. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/mergePass.d.ts +16 -0
  175. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/outlinePass.d.ts +19 -0
  176. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/renderScene.d.ts +49 -0
  177. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/renderer.d.ts +125 -0
  178. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/renderingComposer.d.ts +46 -0
  179. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/renderingSection.d.ts +36 -0
  180. package/dist/types/webgl-viewer/vim-webgl-viewer/rendering/transferPass.d.ts +15 -0
  181. package/dist/types/webgl-viewer/vim-webgl-viewer/selection.d.ts +90 -0
  182. package/dist/types/webgl-viewer/vim-webgl-viewer/settings/defaultViewerSettings.d.ts +5 -0
  183. package/dist/types/webgl-viewer/vim-webgl-viewer/settings/viewerSettings.d.ts +342 -0
  184. package/dist/types/webgl-viewer/vim-webgl-viewer/settings/viewerSettingsParsing.d.ts +9 -0
  185. package/dist/types/webgl-viewer/vim-webgl-viewer/viewer.d.ts +100 -0
  186. package/dist/types/webgl-viewer/vim-webgl-viewer/viewport.d.ts +73 -0
  187. package/dist/vim-web.css +2029 -0
  188. package/dist/vim-web.iife.js +72763 -0
  189. package/dist/vim-web.iife.js.map +1 -0
  190. package/dist/vim-web.mjs +72746 -0
  191. package/dist/vim-web.mjs.map +1 -0
  192. package/package.json +1 -1
@@ -0,0 +1,123 @@
1
+ import { IInputs } from './inputs/inputs';
2
+ import { ClientState } from './socketClient';
3
+ import { IDecoder } from './decoder';
4
+ import { Vim } from './vim';
5
+ import { ILoadRequest } from './loadRequest';
6
+ import { ILogger } from './logger';
7
+ import { IViewport } from './viewport';
8
+ import { ColorManager } from './colorManager';
9
+ import { ICamera } from './camera';
10
+ import { RpcSafeClient } from './rpcSafeClient';
11
+ import { ISimpleEvent } from 'ste-simple-events';
12
+ import { IReadonlyVimCollection } from './vimCollection';
13
+ import { IRenderer } from './renderer';
14
+ export declare const DEFAULT_LOCAL_ULTRA_SERVER_URL = "ws://localhost:8123";
15
+ export declare const INVALID_HANDLE = 4294967295;
16
+ /**
17
+ * The main Viewer class responsible for managing VIM files,
18
+ * handling connections, and coordinating various components like the camera, decoder, and inputs.
19
+ */
20
+ export declare class Viewer {
21
+ private readonly _decoder;
22
+ private readonly _socketClient;
23
+ private readonly _input;
24
+ private readonly _logger;
25
+ private readonly _canvas;
26
+ private readonly _renderer;
27
+ private readonly _viewport;
28
+ private readonly _camera;
29
+ private readonly _selection;
30
+ private readonly _vims;
31
+ private _disposed;
32
+ /**
33
+ * The camera API for controlling camera movements and settings.
34
+ */
35
+ get camera(): ICamera;
36
+ /**
37
+ * The RPC client for making remote procedure calls.
38
+ */
39
+ readonly rpc: RpcSafeClient;
40
+ /**
41
+ * The input API for handling user input events.
42
+ */
43
+ get inputs(): IInputs;
44
+ get vims(): IReadonlyVimCollection;
45
+ /**
46
+ * The viewport API for managing the rendering viewport.
47
+ */
48
+ get viewport(): IViewport;
49
+ get renderer(): IRenderer;
50
+ get decoder(): IDecoder;
51
+ /**
52
+ * API to create, manage, and destroy colors.
53
+ */
54
+ readonly colors: ColorManager;
55
+ /**
56
+ * Gets the current URL to which the viewer is connected.
57
+ * @returns The URL as a string, or undefined if not connected.
58
+ */
59
+ get serverUrl(): string | undefined;
60
+ /**
61
+ * Event that is triggered when the viewer's connection status changes.
62
+ * @returns An event that emits the current ClientStatus.
63
+ */
64
+ get onStateChanged(): ISimpleEvent<ClientState>;
65
+ /**
66
+ * Gets the current connection status of the viewer.
67
+ * @returns The current ClientStatus.
68
+ */
69
+ get state(): ClientState;
70
+ /**
71
+ * Creates a Viewer instance with a new canvas element appended to the given parent element.
72
+ * @param parent - The parent HTML element to which the canvas will be appended.
73
+ * @param logger - Optional logger for logging messages.
74
+ * @returns A new instance of the Viewer class.
75
+ */
76
+ static createWithCanvas(parent: HTMLElement, logger?: ILogger): Viewer;
77
+ /**
78
+ * Constructs a new Viewer instance.
79
+ * @param canvas - The HTML canvas element for rendering.
80
+ * @param logger - Optional logger for logging messages.
81
+ */
82
+ constructor(canvas: HTMLCanvasElement, logger?: ILogger);
83
+ /**
84
+ * Handles connection logic when the viewer connects to the server.
85
+ * Initializes components and checks for API version compatibility.
86
+ */
87
+ private onConnect;
88
+ private checkAPIVersion;
89
+ /**
90
+ * Handles disconnection logic when the viewer disconnects from the server.
91
+ * Cleans up resources and stops tracking.
92
+ */
93
+ private onDisconnect;
94
+ /**
95
+ * Connects to a VIM Ultra server.
96
+ * @param url - The server URL to connect to. Defaults to 'ws://localhost:8123'.
97
+ * @returns A promise that resolves when the connection is established.
98
+ */
99
+ connect(url?: string): Promise<void>;
100
+ /**
101
+ * Disconnects from the current VIM Ultra server.
102
+ */
103
+ disconnect(): void;
104
+ /**
105
+ * Requests the server to load the given URL or file path.
106
+ * @param path - The path or URL to the VIM file.
107
+ * @returns A load request object that can be used to wait for the load to complete.
108
+ */
109
+ loadVim(path: string): ILoadRequest;
110
+ /**
111
+ * Unloads the given VIM from the viewer.
112
+ * @param vim - The VIM instance to unload.
113
+ */
114
+ unloadVim(vim: Vim): void;
115
+ /**
116
+ * Clears all loaded VIMs from the viewer.
117
+ */
118
+ clearVims(): void;
119
+ /**
120
+ * Disposes all resources used by the viewer and disconnects from the server.
121
+ */
122
+ dispose(): void;
123
+ }
@@ -0,0 +1,39 @@
1
+ import { RpcSafeClient } from "./rpcSafeClient";
2
+ /**
3
+ * Interface defining viewport functionality
4
+ */
5
+ export interface IViewport {
6
+ /** The HTML canvas element used for rendering */
7
+ canvas: HTMLCanvasElement;
8
+ /** Updates the aspect ratio of the viewport on the server */
9
+ update(): void;
10
+ }
11
+ /**
12
+ * Class managing the viewport and canvas resizing functionality
13
+ */
14
+ export declare class Viewport {
15
+ /** The HTML canvas element used for rendering */
16
+ canvas: HTMLCanvasElement;
17
+ private _rpc;
18
+ private _observer;
19
+ private _clearTimeout;
20
+ /**
21
+ * Creates a new Viewport instance
22
+ * @param canvas - The HTML canvas element to observe and manage
23
+ * @param rpc - RPC client for viewport communication
24
+ */
25
+ constructor(canvas: HTMLCanvasElement, rpc: RpcSafeClient);
26
+ /**
27
+ * Handles resize events for the canvas
28
+ * @private
29
+ */
30
+ private onResize;
31
+ /**
32
+ * Updates the aspect ratio of the viewport on the server
33
+ */
34
+ update(): void;
35
+ /**
36
+ * Cleans up resources by removing resize observer and clearing timeouts
37
+ */
38
+ dispose(): void;
39
+ }
@@ -0,0 +1,111 @@
1
+ import { ColorHandle } from './color';
2
+ import { ColorManager } from './colorManager';
3
+ import { LoadRequest } from './loadRequest';
4
+ import { RpcSafeClient } from './rpcSafeClient';
5
+ import { ILogger } from './logger';
6
+ import { Box3 } from '../utils/math3d';
7
+ type NodeState = 'visible' | 'hidden' | 'ghosted' | 'highlighted';
8
+ export declare class Vim {
9
+ readonly source: string;
10
+ private _handle;
11
+ private _request;
12
+ private readonly _rpc;
13
+ private _colors;
14
+ private _logger;
15
+ private _nodeStates;
16
+ private _allNodeState;
17
+ private _nodeColors;
18
+ private _pendingNodeStateChanges;
19
+ private _updateScheduled;
20
+ /**
21
+ * Creates an instance of the Vim class.
22
+ * @param rpc - The RPC client used for communication.
23
+ * @param color - The color manager for handling colors.
24
+ * @param source - The source URL or file path of the Vim.
25
+ * @param logger - The logger for logging messages.
26
+ */
27
+ constructor(rpc: RpcSafeClient, color: ColorManager, source: string, logger: ILogger);
28
+ get handle(): number;
29
+ /**
30
+ * Indicates whether the Vim is connected.
31
+ * @returns True if connected; otherwise, false.
32
+ */
33
+ get connected(): boolean;
34
+ /**
35
+ * Connects to the Vim and initiates loading.
36
+ * @returns The load request associated with this operation.
37
+ */
38
+ connect(): LoadRequest;
39
+ private reapplyNodes;
40
+ private reapplyColors;
41
+ /**
42
+ * Disconnects the Vim and unloads it from the server.
43
+ */
44
+ disconnect(): void;
45
+ /**
46
+ * Requests for the server to load the given URL or file path.
47
+ * @param url - The URL or file path to load.
48
+ * @param result - The load request object to update.
49
+ * @returns The updated load request.
50
+ */
51
+ private _load;
52
+ private getErrorType;
53
+ private _getHandle;
54
+ /**
55
+ * Shows the given nodes.
56
+ * @param nodes - The nodes to show. If 'all' is passed, all nodes will be shown.
57
+ */
58
+ show(nodes: number[] | 'all'): void;
59
+ /**
60
+ * Hides the given nodes.
61
+ * @param nodes - The nodes to hide. If 'all' is passed, all nodes will be hidden.
62
+ */
63
+ hide(nodes: number[] | 'all'): void;
64
+ /**
65
+ * Ghosts the given nodes.
66
+ * @param nodes - The nodes to ghost. If 'all' is passed, all nodes will be ghosted.
67
+ */
68
+ ghost(nodes: number[] | 'all'): void;
69
+ /**
70
+ * Highlights the given nodes.
71
+ * @param nodes - The nodes to highlight. If 'all' is passed, all nodes will be highlighted.
72
+ */
73
+ highlight(nodes: number[] | 'all'): void;
74
+ /**
75
+ * Removes the highlight from the given nodes and reverts them to a fallback state.
76
+ * @param nodes - The nodes to remove the highlight from.
77
+ * @param fallback - The state to revert the nodes to.
78
+ */
79
+ removeHighlight(nodes: number[], fallback: NodeState): void;
80
+ /**
81
+ * Retrieves the bounding box of the given nodes.
82
+ * @param nodes - The nodes to get the bounding box for.
83
+ * @returns A Promise that resolves to the bounding box, or undefined if not connected or nodes are empty.
84
+ * @throws Error if 'all' is passed, as this feature is not supported yet.
85
+ */
86
+ getBoundingBox(nodes: number[] | 'all'): Promise<Box3 | undefined>;
87
+ /**
88
+ * Applies a color to the given nodes.
89
+ * @param color - The color to apply.
90
+ * @param nodes - The nodes to apply the color to.
91
+ */
92
+ applyColor(color: ColorHandle | undefined, nodes: number[]): void;
93
+ /**
94
+ * Applies an array of colors to the given nodes.
95
+ * @param color - An array of colors to apply, corresponding to each node.
96
+ * @param nodes - The nodes to apply the colors to.
97
+ * @throws Will throw an error if the lengths of the colors and nodes arrays do not match.
98
+ */
99
+ applyColors(color: (ColorHandle | undefined)[], nodes: number[]): void;
100
+ /**
101
+ * Clears the color from the given nodes.
102
+ * @param nodes - The nodes to clear the color from.
103
+ */
104
+ clearColor(nodes: number[] | 'all'): void;
105
+ private updateMap;
106
+ private scheduleNodeStateChange;
107
+ private scheduleUpdate;
108
+ private update;
109
+ private callRPCForState;
110
+ }
111
+ export {};
@@ -0,0 +1,43 @@
1
+ import { Vim } from "./vim";
2
+ export interface IReadonlyVimCollection {
3
+ getFromHandle(handle: number): Vim | undefined;
4
+ getAll(): ReadonlyArray<Vim>;
5
+ getAt(index: number): Vim | undefined;
6
+ count: number;
7
+ }
8
+ export declare class VimCollection implements IReadonlyVimCollection {
9
+ private _vims;
10
+ constructor();
11
+ get count(): number;
12
+ /**
13
+ * Adds a Vim instance to the collection.
14
+ * @param vim - The Vim instance to add.
15
+ */
16
+ add(vim: Vim): void;
17
+ /**
18
+ * Removes a Vim instance from the collection.
19
+ * @param vim - The Vim instance to remove.
20
+ */
21
+ remove(vim: Vim): void;
22
+ /**
23
+ * Gets a Vim instance by its handle.
24
+ * @param handle - The handle of the Vim instance.
25
+ * @returns The Vim instance or undefined if not found.
26
+ */
27
+ getFromHandle(handle: number): Vim | undefined;
28
+ /**
29
+ * Gets a Vim instance at a specific index.
30
+ * @param index - The index of the Vim instance.
31
+ * @returns The Vim instance or undefined if the index is out of bounds.
32
+ */
33
+ getAt(index: number): Vim | undefined;
34
+ /**
35
+ * Gets all Vim instances.
36
+ * @returns An array of Vim instances.
37
+ */
38
+ getAll(): ReadonlyArray<Vim>;
39
+ /**
40
+ * Clears all Vim instances from the collection.
41
+ */
42
+ clear(): void;
43
+ }
@@ -0,0 +1,4 @@
1
+ export * as WebglViewer from './webgl-viewer/index';
2
+ export * as WebglReact from './react-viewer/webgl/webglComponent';
3
+ export * as UltraViewer from './ultra-viewer/ultraViewerIndex';
4
+ export * as UltraReact from './react-viewer/ultra/ultraComponent';
@@ -0,0 +1,4 @@
1
+ /**
2
+ * A circular alpha gradient used as floor under model
3
+ */
4
+ export declare const floor = "\ndata:image/png;base64,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\n";
@@ -0,0 +1,26 @@
1
+ import './style.css';
2
+ import { BFastSource } from 'vim-format';
3
+ export * as THREE from 'three';
4
+ export type VimSource = BFastSource;
5
+ export { IProgressLogs } from 'vim-format';
6
+ export * from './vim-loader/progressive/open';
7
+ export * from './vim-loader/progressive/vimRequest';
8
+ export * from './vim-loader/progressive/vimx';
9
+ export * from './vim-webgl-viewer/viewer';
10
+ export * from './vim-loader/geometry';
11
+ export type { PointerMode, InputScheme } from './vim-webgl-viewer/inputs/input';
12
+ export { DefaultInputScheme, KEYS } from './vim-webgl-viewer/inputs/input';
13
+ export * from './vim-webgl-viewer/settings/viewerSettings';
14
+ export * from './vim-webgl-viewer/settings/viewerSettingsParsing';
15
+ export * from './vim-webgl-viewer/settings/defaultViewerSettings';
16
+ export { RaycastResult as HitTestResult, InputAction } from './vim-webgl-viewer/raycaster';
17
+ export { type SelectableObject } from './vim-webgl-viewer/selection';
18
+ export * from './vim-loader/progressive/insertableMesh';
19
+ export * from './vim-loader/progressive/g3dSubset';
20
+ export * from './vim-loader/geometry';
21
+ export * from './vim-loader/materials/viewerMaterials';
22
+ export * from './vim-loader/object3D';
23
+ export * from './vim-loader/scene';
24
+ export * from './vim-loader/vim';
25
+ export * from './vim-loader/vimSettings';
26
+ export * from './utils/boxes';
@@ -0,0 +1,5 @@
1
+ /**
2
+ * @module utils
3
+ */
4
+ import * as THREE from 'three';
5
+ export declare function createBoxes(boxes: THREE.Box3[]): THREE.InstancedMesh<THREE.BoxGeometry, THREE.MeshBasicMaterial>;
@@ -0,0 +1,8 @@
1
+ export declare class DeferredPromise<T> extends Promise<T> {
2
+ resolve: (value: T | PromiseLike<T>) => void;
3
+ reject: (reason: T | Error) => void;
4
+ initialCallStack: Error['stack'];
5
+ constructor(executor?: ConstructorParameters<typeof Promise<T>>[0]);
6
+ /** @throws error with amended call stack */
7
+ rejectWithError(error: Error): void;
8
+ }
@@ -0,0 +1,13 @@
1
+ export declare class SuccessResult<T> {
2
+ result: T;
3
+ constructor(result: T);
4
+ isSuccess(): this is SuccessResult<T>;
5
+ isError(): false;
6
+ }
7
+ export declare class ErrorResult {
8
+ error: string;
9
+ constructor(error: string);
10
+ isSuccess(): false;
11
+ isError(): this is ErrorResult;
12
+ }
13
+ export type RequestResult<T> = SuccessResult<T> | ErrorResult;
@@ -0,0 +1,6 @@
1
+ import * as THREE from 'three';
2
+ /**
3
+ * Returns the bounding box of the average center of all meshes.
4
+ * Less precise but is more stable against outliers.
5
+ */
6
+ export declare function getAverageBoundingBox(positions: THREE.Vector3[], thresholdSpan?: number, framingDistanceMultiplier?: number): THREE.Box3;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @module vim-loader
3
+ */
4
+ import * as THREE from 'three';
5
+ import { Vim } from './vim';
6
+ import { AttributeTarget } from './objectAttributes';
7
+ export declare class ColorAttribute {
8
+ readonly vim: Vim;
9
+ private _meshes;
10
+ private _value;
11
+ constructor(meshes: AttributeTarget[] | undefined, value: THREE.Color | undefined, vim: Vim | undefined);
12
+ updateMeshes(meshes: AttributeTarget[] | undefined): void;
13
+ get value(): THREE.Color;
14
+ apply(color: THREE.Color | undefined): void;
15
+ /**
16
+ * Writes new color to the appropriate section of merged mesh color buffer.
17
+ * @param index index of the merged mesh instance
18
+ * @param color rgb representation of the color to apply
19
+ */
20
+ private applyMergedColor;
21
+ /**
22
+ * Repopulates the color buffer of the merged mesh from original g3d data.
23
+ * @param index index of the merged mesh instance
24
+ */
25
+ private resetMergedColor;
26
+ private resetMergedInsertableColor;
27
+ /**
28
+ * Adds an instanceColor buffer to the instanced mesh and sets new color for given instance
29
+ * @param index index of the instanced instance
30
+ * @param color rgb representation of the color to apply
31
+ */
32
+ private applyInstancedColor;
33
+ private getOrAddInstanceColorAttribute;
34
+ }
@@ -0,0 +1,113 @@
1
+ /**
2
+ * @module vim-loader
3
+ */
4
+ import { G3d, G3dScene, VimDocument } from 'vim-format';
5
+ export declare class ElementNoMapping {
6
+ getElementsFromElementId(id: number): any;
7
+ hasElement(element: number): boolean;
8
+ getElements(): any[];
9
+ getInstancesFromElement(element: number): number[] | undefined;
10
+ getElementFromInstance(instance: number): any;
11
+ getElementId(element: number): bigint | undefined;
12
+ }
13
+ export declare class ElementMapping {
14
+ private _instanceToElement;
15
+ private _instanceMeshes;
16
+ private _elementToInstances;
17
+ private _elementIds;
18
+ private _elementIdToElements;
19
+ constructor(instances: number[], instanceToElement: number[], elementIds: BigInt64Array, instanceMeshes?: Int32Array);
20
+ static fromG3d(g3d: G3d, bim: VimDocument): Promise<ElementMapping>;
21
+ /**
22
+ * Returns element indices associated with element id
23
+ * @param id element id
24
+ */
25
+ getElementsFromElementId(id: number | bigint): number[];
26
+ /**
27
+ * Returns true if element exists in the vim.
28
+ */
29
+ hasElement(element: number): boolean;
30
+ hasMesh(element: number): boolean;
31
+ /**
32
+ * Returns all element indices of the vim
33
+ */
34
+ getElements(): ArrayIterator<number>;
35
+ /**
36
+ * Returns instance indices associated with vim element index
37
+ * @param element vim element index
38
+ */
39
+ getInstancesFromElement(element: number): number[] | undefined;
40
+ /**
41
+ * Returns the element index associated with the g3d instance index.
42
+ * @param instance g3d instance index
43
+ * @returns element index or undefined if not found
44
+ */
45
+ getElementFromInstance(instance: number): number;
46
+ /**
47
+ * Retrieves the element ID corresponding to the provided element index.
48
+ * @param {number} element The element index.
49
+ * @returns {bigint} The element ID associated with the given index.
50
+ */
51
+ getElementId(element: number): bigint;
52
+ /**
53
+ * Returns a map where data[i] -> i
54
+ */
55
+ private static invertArray;
56
+ /**
57
+ * Returns a map where data[i] -> i
58
+ */
59
+ private static invertMap;
60
+ }
61
+ export declare class ElementMapping2 {
62
+ private _instanceToElement;
63
+ private _elementToInstances;
64
+ private _instanceToElementId;
65
+ constructor(scene: G3dScene);
66
+ /**
67
+ * Retrieves element indices associated with the given element ID.
68
+ * @param {number | bigint} id The element ID.
69
+ * @returns {number[] | undefined} An array of element indices associated with the element ID,
70
+ * or undefined if no elements are associated with the ID.
71
+ */
72
+ getElementsFromElementId(id: number | bigint): any;
73
+ /**
74
+ * Checks if the element exists in the vim.
75
+ * @param {number} element The element to check for existence.
76
+ * @returns {boolean} True if the element exists in the vim, otherwise false.
77
+ */
78
+ hasElement(element: number): boolean;
79
+ /**
80
+ * Checks if the element has a mesh in the vim.
81
+ * @param {number} element The element to check for mesh existence.
82
+ * @returns {boolean} True if the element has a mesh in the vim, otherwise false.
83
+ */
84
+ hasMesh(element: number): boolean;
85
+ /**
86
+ * Retrieves all element indices of the vim.
87
+ * @returns {IterableIterator<number>} An iterator of all element indices in the vim.
88
+ */
89
+ getElements(): MapIterator<number>;
90
+ /**
91
+ * Retrieves instance indices associated with the specified vim element index.
92
+ * @param {number} element The vim element index.
93
+ * @returns {number[] | undefined} An array of instance indices associated with the vim element index,
94
+ * or undefined if the element does not exist in the vim.
95
+ */
96
+ getInstancesFromElement(element: number): number[] | undefined;
97
+ /**
98
+ * Retrieves the element index associated with the g3d instance index.
99
+ * @param {number} instance The g3d instance index.
100
+ * @returns {number | undefined} The element index associated with the instance, or undefined if not found.
101
+ */
102
+ getElementFromInstance(instance: number): number;
103
+ /**
104
+ * Retrieves the element ID associated with the specified element index.
105
+ * @param {number} element The element index.
106
+ * @returns {bigint | undefined} The element ID associated with the element index, or undefined if not found.
107
+ */
108
+ getElementId(element: number): bigint;
109
+ /**
110
+ * Returns a map where data[i] -> i
111
+ */
112
+ private static invertMap;
113
+ }