@kingsy/viewer 2.25.7

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 (177) hide show
  1. package/dist/IViewer.d.ts +157 -0
  2. package/dist/helpers/flatten.d.ts +11 -0
  3. package/dist/helpers/typeHelper.d.ts +2 -0
  4. package/dist/index.d.ts +89 -0
  5. package/dist/index.js +42 -0
  6. package/dist/modules/Assets.d.ts +15 -0
  7. package/dist/modules/EventEmitter.d.ts +7 -0
  8. package/dist/modules/Helpers.d.ts +3 -0
  9. package/dist/modules/Intersections.d.ts +20 -0
  10. package/dist/modules/KingSyRenderer.d.ts +168 -0
  11. package/dist/modules/LegacyViewer.d.ts +77 -0
  12. package/dist/modules/Shadowcatcher.d.ts +25 -0
  13. package/dist/modules/ShadowcatcherConfig.d.ts +14 -0
  14. package/dist/modules/UrlHelper.d.ts +1 -0
  15. package/dist/modules/Utils.d.ts +10 -0
  16. package/dist/modules/Viewer.d.ts +74 -0
  17. package/dist/modules/WebXrViewer.d.ts +10 -0
  18. package/dist/modules/World.d.ts +31 -0
  19. package/dist/modules/batching/Batch.d.ts +62 -0
  20. package/dist/modules/batching/BatchObject.d.ts +53 -0
  21. package/dist/modules/batching/Batcher.d.ts +60 -0
  22. package/dist/modules/batching/DrawRanges.d.ts +6 -0
  23. package/dist/modules/batching/InstancedBatchObject.d.ts +8 -0
  24. package/dist/modules/batching/InstancedMeshBatch.d.ts +60 -0
  25. package/dist/modules/batching/LineBatch.d.ts +52 -0
  26. package/dist/modules/batching/MeshBatch.d.ts +35 -0
  27. package/dist/modules/batching/PointBatch.d.ts +29 -0
  28. package/dist/modules/batching/PrimitiveBatch.d.ts +57 -0
  29. package/dist/modules/batching/TextBatch.d.ts +41 -0
  30. package/dist/modules/converter/Geometry.d.ts +38 -0
  31. package/dist/modules/converter/MeshTriangulationHelper.d.ts +50 -0
  32. package/dist/modules/converter/Units.d.ts +12 -0
  33. package/dist/modules/extensions/CameraController.d.ts +95 -0
  34. package/dist/modules/extensions/Controls.d.ts +91 -0
  35. package/dist/modules/extensions/DiffExtension.d.ts +50 -0
  36. package/dist/modules/extensions/ExplodeExtension.d.ts +17 -0
  37. package/dist/modules/extensions/Extension.d.ts +15 -0
  38. package/dist/modules/extensions/FilteringExtension.d.ts +55 -0
  39. package/dist/modules/extensions/HybridCameraController.d.ts +14 -0
  40. package/dist/modules/extensions/SelectionExtension.d.ts +53 -0
  41. package/dist/modules/extensions/TransformControls.d.ts +157 -0
  42. package/dist/modules/extensions/ViewModes.d.ts +32 -0
  43. package/dist/modules/extensions/controls/FlyControls.d.ts +82 -0
  44. package/dist/modules/extensions/controls/KingSyControls.d.ts +25 -0
  45. package/dist/modules/extensions/controls/SmoothOrbitControls.d.ts +222 -0
  46. package/dist/modules/extensions/measurements/AreaMeasurement.d.ts +64 -0
  47. package/dist/modules/extensions/measurements/Measurement.d.ts +34 -0
  48. package/dist/modules/extensions/measurements/MeasurementPointGizmo.d.ts +42 -0
  49. package/dist/modules/extensions/measurements/MeasurementsExtension.d.ts +71 -0
  50. package/dist/modules/extensions/measurements/PerpendicularMeasurement.d.ts +19 -0
  51. package/dist/modules/extensions/measurements/PointMeasurement.d.ts +25 -0
  52. package/dist/modules/extensions/measurements/PointToPointMeasurement.d.ts +15 -0
  53. package/dist/modules/extensions/sections/SectionOutlines.d.ts +45 -0
  54. package/dist/modules/extensions/sections/SectionTool.d.ts +219 -0
  55. package/dist/modules/filtering/PropertyManager.d.ts +55 -0
  56. package/dist/modules/input/Input.d.ts +47 -0
  57. package/dist/modules/loaders/GeometryConverter.d.ts +32 -0
  58. package/dist/modules/loaders/KingSy/KingSyConverter.d.ts +118 -0
  59. package/dist/modules/loaders/KingSy/KingSyGeometryConverter.d.ts +127 -0
  60. package/dist/modules/loaders/KingSy/KingSyLoader.d.ts +18 -0
  61. package/dist/modules/loaders/KingSy/KingSyOfflineLoader.d.ts +8 -0
  62. package/dist/modules/loaders/Loader.d.ts +35 -0
  63. package/dist/modules/loaders/OBJ/ObjConverter.d.ts +18 -0
  64. package/dist/modules/loaders/OBJ/ObjGeometryConverter.d.ts +14 -0
  65. package/dist/modules/loaders/OBJ/ObjLoader.d.ts +16 -0
  66. package/dist/modules/materials/KingSyBasicMaterial.d.ts +26 -0
  67. package/dist/modules/materials/KingSyDepthMaterial.d.ts +22 -0
  68. package/dist/modules/materials/KingSyDepthNormalIdMaterial.d.ts +11 -0
  69. package/dist/modules/materials/KingSyDepthNormalMaterial.d.ts +6 -0
  70. package/dist/modules/materials/KingSyDisplaceMaterial.d.ts +11 -0
  71. package/dist/modules/materials/KingSyGhostMaterial.d.ts +8 -0
  72. package/dist/modules/materials/KingSyLineMaterial.d.ts +20 -0
  73. package/dist/modules/materials/KingSyMatcapMaterial.d.ts +19 -0
  74. package/dist/modules/materials/KingSyMaterial.d.ts +65 -0
  75. package/dist/modules/materials/KingSyNormalMaterial.d.ts +18 -0
  76. package/dist/modules/materials/KingSyPointColouredMaterial.d.ts +12 -0
  77. package/dist/modules/materials/KingSyPointMaterial.d.ts +18 -0
  78. package/dist/modules/materials/KingSyShadowcatcherMaterial.d.ts +10 -0
  79. package/dist/modules/materials/KingSyStandardColoredMaterial.d.ts +11 -0
  80. package/dist/modules/materials/KingSyStandardMaterial.d.ts +22 -0
  81. package/dist/modules/materials/KingSyTextMaterial.d.ts +26 -0
  82. package/dist/modules/materials/KingSyViewportMaterial.d.ts +13 -0
  83. package/dist/modules/materials/MaterialOptions.d.ts +6 -0
  84. package/dist/modules/materials/Materials.d.ts +111 -0
  85. package/dist/modules/materials/shaders/kingsy-apply-ao-frag.d.ts +1 -0
  86. package/dist/modules/materials/shaders/kingsy-apply-ao-vert.d.ts +1 -0
  87. package/dist/modules/materials/shaders/kingsy-basic-frag.d.ts +1 -0
  88. package/dist/modules/materials/shaders/kingsy-basic-vert.d.ts +1 -0
  89. package/dist/modules/materials/shaders/kingsy-copy-output-frag.d.ts +1 -0
  90. package/dist/modules/materials/shaders/kingsy-copy-output-vert.d.ts +1 -0
  91. package/dist/modules/materials/shaders/kingsy-depth-frag.d.ts +1 -0
  92. package/dist/modules/materials/shaders/kingsy-depth-normal-frag.d.ts +1 -0
  93. package/dist/modules/materials/shaders/kingsy-depth-normal-id-frag.d.ts +1 -0
  94. package/dist/modules/materials/shaders/kingsy-depth-normal-id-vert.d.ts +1 -0
  95. package/dist/modules/materials/shaders/kingsy-depth-normal-vert.d.ts +1 -0
  96. package/dist/modules/materials/shaders/kingsy-depth-vert.d.ts +1 -0
  97. package/dist/modules/materials/shaders/kingsy-displace-frag.d.ts +1 -0
  98. package/dist/modules/materials/shaders/kingsy-displace.vert.d.ts +1 -0
  99. package/dist/modules/materials/shaders/kingsy-edges-generator-frag.d.ts +1 -0
  100. package/dist/modules/materials/shaders/kingsy-edges-generator-vert.d.ts +1 -0
  101. package/dist/modules/materials/shaders/kingsy-ghost-frag.d.ts +1 -0
  102. package/dist/modules/materials/shaders/kingsy-ghost-vert.d.ts +1 -0
  103. package/dist/modules/materials/shaders/kingsy-line-frag.d.ts +1 -0
  104. package/dist/modules/materials/shaders/kingsy-line-vert.d.ts +1 -0
  105. package/dist/modules/materials/shaders/kingsy-normal-frag.d.ts +1 -0
  106. package/dist/modules/materials/shaders/kingsy-normal-vert.d.ts +1 -0
  107. package/dist/modules/materials/shaders/kingsy-point-frag.d.ts +1 -0
  108. package/dist/modules/materials/shaders/kingsy-point-vert.d.ts +1 -0
  109. package/dist/modules/materials/shaders/kingsy-sao-frag.d.ts +1 -0
  110. package/dist/modules/materials/shaders/kingsy-sao-vert.d.ts +1 -0
  111. package/dist/modules/materials/shaders/kingsy-shadowcatche-frag.d.ts +1 -0
  112. package/dist/modules/materials/shaders/kingsy-shadowcatcher-vert.d.ts +1 -0
  113. package/dist/modules/materials/shaders/kingsy-standard-colored-frag.d.ts +1 -0
  114. package/dist/modules/materials/shaders/kingsy-standard-colored-vert.d.ts +1 -0
  115. package/dist/modules/materials/shaders/kingsy-standard-frag.d.ts +1 -0
  116. package/dist/modules/materials/shaders/kingsy-standard-vert.d.ts +1 -0
  117. package/dist/modules/materials/shaders/kingsy-static-ao-accumulate-frag.d.ts +1 -0
  118. package/dist/modules/materials/shaders/kingsy-static-ao-accumulate-vert.d.ts +1 -0
  119. package/dist/modules/materials/shaders/kingsy-static-ao-generate-frag.d.ts +1 -0
  120. package/dist/modules/materials/shaders/kingsy-static-ao-generate-vert.d.ts +1 -0
  121. package/dist/modules/materials/shaders/kingsy-temporal-supersampling-frag.d.ts +1 -0
  122. package/dist/modules/materials/shaders/kingsy-temporal-supersampling-vert.d.ts +1 -0
  123. package/dist/modules/materials/shaders/kingsy-text-frag.d.ts +1 -0
  124. package/dist/modules/materials/shaders/kingsy-text-vert.d.ts +1 -0
  125. package/dist/modules/materials/shaders/kingsy-viewport-frag.d.ts +1 -0
  126. package/dist/modules/materials/shaders/kingsy-viewport-vert.d.ts +1 -0
  127. package/dist/modules/objects/AccelerationStructure.d.ts +72 -0
  128. package/dist/modules/objects/ExtendedInstancedMesh.d.ts +6 -0
  129. package/dist/modules/objects/JitterQuad.d.ts +10 -0
  130. package/dist/modules/objects/KingSyCamera.d.ts +31 -0
  131. package/dist/modules/objects/KingSyInstancedMesh.d.ts +44 -0
  132. package/dist/modules/objects/KingSyMesh.d.ts +43 -0
  133. package/dist/modules/objects/KingSyRaycaster.d.ts +42 -0
  134. package/dist/modules/objects/KingSyText.d.ts +39 -0
  135. package/dist/modules/objects/KingSyWebGLRenderer.d.ts +24 -0
  136. package/dist/modules/objects/RotatablePMREMGenerator.d.ts +5 -0
  137. package/dist/modules/objects/TopLevelAccelerationStructure.d.ts +41 -0
  138. package/dist/modules/pipeline/Passes/BlendPass.d.ts +17 -0
  139. package/dist/modules/pipeline/Passes/DepthNormalIdPass.d.ts +12 -0
  140. package/dist/modules/pipeline/Passes/DepthNormalPass.d.ts +25 -0
  141. package/dist/modules/pipeline/Passes/DepthPass.d.ts +23 -0
  142. package/dist/modules/pipeline/Passes/EdgesPass.d.ts +25 -0
  143. package/dist/modules/pipeline/Passes/GPass.d.ts +88 -0
  144. package/dist/modules/pipeline/Passes/GeometryPass.d.ts +7 -0
  145. package/dist/modules/pipeline/Passes/NormalsPass.d.ts +8 -0
  146. package/dist/modules/pipeline/Passes/OutputPass.d.ts +23 -0
  147. package/dist/modules/pipeline/Passes/ProgressiveAOPass.d.ts +30 -0
  148. package/dist/modules/pipeline/Passes/ShadedPass.d.ts +26 -0
  149. package/dist/modules/pipeline/Passes/ShadowcatcherPass.d.ts +43 -0
  150. package/dist/modules/pipeline/Passes/StencilMaskPass.d.ts +9 -0
  151. package/dist/modules/pipeline/Passes/StencilPass.d.ts +9 -0
  152. package/dist/modules/pipeline/Passes/TAAPass.d.ts +15 -0
  153. package/dist/modules/pipeline/Passes/ViewportPass.d.ts +22 -0
  154. package/dist/modules/pipeline/Pipelines/ArcticViewPipeline.d.ts +7 -0
  155. package/dist/modules/pipeline/Pipelines/DefaultPipeline.d.ts +6 -0
  156. package/dist/modules/pipeline/Pipelines/EdgesPipeline.d.ts +28 -0
  157. package/dist/modules/pipeline/Pipelines/PenViewPipeline.d.ts +6 -0
  158. package/dist/modules/pipeline/Pipelines/Pipeline.d.ts +43 -0
  159. package/dist/modules/pipeline/Pipelines/ProgressivePipeline.d.ts +24 -0
  160. package/dist/modules/pipeline/Pipelines/ShadedViewPipeline.d.ts +7 -0
  161. package/dist/modules/pipeline/Pipelines/SolidViewPipeline.d.ts +6 -0
  162. package/dist/modules/pipeline/Pipelines/TAAPipeline.d.ts +7 -0
  163. package/dist/modules/queries/IntersectionQuerySolver.d.ts +11 -0
  164. package/dist/modules/queries/PointQuerySolver.d.ts +9 -0
  165. package/dist/modules/queries/Queries.d.ts +9 -0
  166. package/dist/modules/queries/Query.d.ts +51 -0
  167. package/dist/modules/three/stats.d.ts +4 -0
  168. package/dist/modules/tree/NodeMap.d.ts +20 -0
  169. package/dist/modules/tree/NodeRenderView.d.ts +51 -0
  170. package/dist/modules/tree/RenderTree.d.ts +36 -0
  171. package/dist/modules/tree/WorldTree.d.ts +52 -0
  172. package/dist/modules/utils/AngleDamper.d.ts +18 -0
  173. package/dist/modules/utils/Damper.d.ts +17 -0
  174. package/dist/modules/utils/Logger.d.ts +2 -0
  175. package/dist/type-augmentations/three-extensions.d.ts +1 -0
  176. package/package.json +99 -0
  177. package/readme.md +30 -0
@@ -0,0 +1,15 @@
1
+ import { Texture, WebGLRenderer } from 'three';
2
+ import { Font } from 'three/examples/jsm/loaders/FontLoader.js';
3
+ import { type Asset } from '../IViewer.js';
4
+ export declare class Assets {
5
+ private static _cache;
6
+ private static getLoader;
7
+ private static hdriToPMREM;
8
+ static getEnvironment(asset: Asset, renderer: WebGLRenderer): Promise<Texture>;
9
+ static getTexture(asset: Asset): Promise<Texture>;
10
+ static getFont(asset: Asset | string): Promise<Font>;
11
+ /** To be used wisely */
12
+ static getTextureData(asset: Asset): Promise<ImageData>;
13
+ static generateGradientRampTexture(fromColor: string, toColor: string, steps: number): void;
14
+ static generateDiscreetRampTexture(hexColors: number[]): Texture;
15
+ }
@@ -0,0 +1,7 @@
1
+ export default class EventEmitter {
2
+ _events: {};
3
+ on(name: any, listener: any): void;
4
+ removeListener(name: any, listenerToRemove: any): void;
5
+ emit(name: any, ...args: any[]): void;
6
+ dispose(): void;
7
+ }
@@ -0,0 +1,3 @@
1
+ import { Box3, Matrix4, Vector2 } from 'three';
2
+ export declare function getRelativeOffset(referenceBox: Box3, offsetAmount?: number): number;
3
+ export declare function makePerspectiveProjection(screenSize: Vector2, fov: number, near: number, far: number): Matrix4;
@@ -0,0 +1,20 @@
1
+ import { Box3, Camera, Object3D, Plane, Ray, Scene, Vector2, Vector3 } from 'three';
2
+ import { ExtendedIntersection, ExtendedMeshIntersection, KingSyRaycaster } from './objects/KingSyRaycaster.js';
3
+ import { ObjectLayers } from '../IViewer.js';
4
+ import { OBB } from 'three/examples/jsm/math/OBB.js';
5
+ export declare class Intersections {
6
+ protected raycaster: KingSyRaycaster;
7
+ private boxBuffer;
8
+ private vec0Buffer;
9
+ private vec1Buffer;
10
+ private boundsBuffer;
11
+ constructor();
12
+ protected onObjectIntersection(obj: Object3D): void;
13
+ intersect(scene: Scene, camera: Camera, point: Vector2, castLayers: ObjectLayers.STREAM_CONTENT_MESH, nearest?: boolean, bounds?: Box3 | OBB, firstOnly?: boolean, tasOnly?: boolean): Array<ExtendedMeshIntersection> | null;
14
+ intersect(scene: Scene, camera: Camera, point: Vector2, castLayers?: Array<ObjectLayers>, nearest?: boolean, bounds?: Box3 | OBB, firstOnly?: boolean, tasOnly?: boolean): Array<ExtendedIntersection> | null;
15
+ intersectRay(scene: Scene, camera: Camera, ray: Ray, castLayers: ObjectLayers.STREAM_CONTENT_MESH, nearest?: boolean, bounds?: Box3 | OBB, firstOnly?: boolean, tasOnly?: boolean): Array<ExtendedMeshIntersection> | null;
16
+ intersectRay(scene: Scene, camera: Camera, ray: Ray, castLayers?: Array<ObjectLayers>, nearest?: boolean, bounds?: Box3 | OBB, firstOnly?: boolean, tasOnly?: boolean): Array<ExtendedIntersection> | null;
17
+ private setRaycasterLayers;
18
+ private intersectInternal;
19
+ static aabbPlanePoints: (plane: Plane, aabb: Box3) => Vector3[];
20
+ }
@@ -0,0 +1,168 @@
1
+ import { Box3, DirectionalLight, Group, Material, Object3D, Plane, Scene, Sphere, Texture, Vector3, PerspectiveCamera, OrthographicCamera } from 'three';
2
+ import { type Batch } from './batching/Batch.js';
3
+ import Batcher from './batching/Batcher.js';
4
+ import Input from './input/Input.js';
5
+ import { Intersections } from './Intersections.js';
6
+ import { NodeRenderView } from './tree/NodeRenderView.js';
7
+ import { Viewer } from './Viewer.js';
8
+ import { WorldTree, type TreeNode } from './tree/WorldTree.js';
9
+ import { ObjectLayers, type SunLightConfiguration } from '../IViewer.js';
10
+ import { Shadowcatcher } from './Shadowcatcher.js';
11
+ import { type ExtendedIntersection } from './objects/KingSyRaycaster.js';
12
+ import { BatchObject } from './batching/BatchObject.js';
13
+ import { type KingSyCamera } from './objects/KingSyCamera.js';
14
+ import { type RenderMaterial, type DisplayStyle, type FilterMaterial } from './materials/Materials.js';
15
+ import { type MaterialOptions } from './materials/MaterialOptions.js';
16
+ import { KingSyWebGLRenderer } from './objects/KingSyWebGLRenderer.js';
17
+ import { RenderTree } from './tree/RenderTree.js';
18
+ import { Pipeline } from './pipeline/Pipelines/Pipeline.js';
19
+ import { OBB } from 'three/examples/jsm/math/OBB.js';
20
+ import '../type-augmentations/three-extensions.js';
21
+ export declare class RenderingStats {
22
+ private renderTimeAcc;
23
+ private renderTimeSamples;
24
+ private readonly renderTimeMaxSamples;
25
+ private renderTimeStart;
26
+ renderTime: number;
27
+ objects: number;
28
+ batchCount: number;
29
+ drawCalls: number;
30
+ trisCount: number;
31
+ vertCount: number;
32
+ batchDetails: Array<{
33
+ drawCalls: number;
34
+ minDrawCalls: number;
35
+ tris: number;
36
+ verts: number;
37
+ }>;
38
+ frameStart(): void;
39
+ frameEnd(): void;
40
+ }
41
+ export default class KingSyRenderer {
42
+ protected readonly SHOW_HELPERS = false;
43
+ protected readonly IGNORE_ZERO_OPACITY_OBJECTS = true;
44
+ SHOW_BVH: boolean;
45
+ protected _renderer: KingSyWebGLRenderer;
46
+ protected _renderinStats: RenderingStats;
47
+ protected _scene: Scene;
48
+ protected _needsRender: boolean;
49
+ protected _intersections: Intersections;
50
+ protected _shadowcatcher: Shadowcatcher;
51
+ protected _kingsyCamera: KingSyCamera | null;
52
+ protected container: HTMLElement;
53
+ protected rootGroup: Group;
54
+ protected _pipeline: Pipeline;
55
+ protected sun: DirectionalLight;
56
+ protected sunConfiguration: SunLightConfiguration;
57
+ protected sunTarget: Object3D;
58
+ protected tree: WorldTree;
59
+ protected cancel: {
60
+ [subtreeId: string]: boolean;
61
+ };
62
+ protected _clippingPlanes: Plane[];
63
+ protected _clippingVolume: OBB;
64
+ protected _renderOverride: (() => void) | null;
65
+ viewer: Viewer;
66
+ batcher: Batcher;
67
+ input: Input;
68
+ /********************************
69
+ * Renderer and rendering flags */
70
+ get renderer(): KingSyWebGLRenderer;
71
+ set needsRender(value: boolean);
72
+ set shadowMapNeedsUpdate(value: boolean);
73
+ /**********************
74
+ * Bounds and volumes */
75
+ get sceneBox(): Box3;
76
+ get sceneSphere(): Sphere;
77
+ get sceneCenter(): Vector3;
78
+ get clippingVolume(): OBB;
79
+ set clippingVolume(box: Box3 | OBB);
80
+ /*****************
81
+ * Clipping planes */
82
+ get clippingPlanes(): Plane[];
83
+ set clippingPlanes(value: Plane[]);
84
+ /****************
85
+ * Common Objects */
86
+ get allObjects(): Object3D;
87
+ get scene(): Scene;
88
+ /********
89
+ * Lights */
90
+ get sunLight(): DirectionalLight;
91
+ set indirectIBL(texture: Texture);
92
+ set indirectIBLIntensity(value: number);
93
+ /********
94
+ * Camera */
95
+ get kingsyCamera(): KingSyCamera | null;
96
+ set kingsyCamera(value: KingSyCamera);
97
+ get renderingCamera(): PerspectiveCamera | OrthographicCamera | null;
98
+ /**********
99
+ * Pipeline */
100
+ set pipeline(value: Pipeline);
101
+ get pipeline(): Pipeline;
102
+ get shadowcatcher(): Shadowcatcher | null;
103
+ /**************
104
+ * Intersections */
105
+ get intersections(): Intersections;
106
+ /*****************
107
+ * Rendering Stats */
108
+ get renderingStats(): RenderingStats;
109
+ constructor(tree: WorldTree, viewer: Viewer /** TEMPORARY */);
110
+ create(container: HTMLElement): void;
111
+ update(deltaTime: number): void;
112
+ private updateRTEShadowBuffers;
113
+ private updateRTEShadows;
114
+ private updateTransforms;
115
+ resetPipeline(): void;
116
+ render(): void;
117
+ resize(width?: number, height?: number): void;
118
+ addRenderTree(renderTree: RenderTree): AsyncGenerator<undefined, void, unknown>;
119
+ private addBatch;
120
+ removeRenderTree(subtreeId: string): void;
121
+ cancelRenderTree(subtreeId: string): void;
122
+ setMaterial(rvs: NodeRenderView[], material: Material): void;
123
+ setMaterial(rvs: NodeRenderView[], material: RenderMaterial & DisplayStyle & MaterialOptions): void;
124
+ setMaterial(rvs: NodeRenderView[], material: FilterMaterial): void;
125
+ private setMaterialInstance;
126
+ private setFilterMaterial;
127
+ private setDataMaterial;
128
+ /** TO DO!
129
+ * This can mess up materials if multiple materials exist in the ranges argument */
130
+ private flattenDrawRanges;
131
+ getMaterial(rv: NodeRenderView): Material | null;
132
+ getBatchMaterial(rv: NodeRenderView): Material | null;
133
+ resetMaterials(): void;
134
+ getBatch(id: string): Batch;
135
+ updateClippingPlanes(): void;
136
+ updateShadowCatcher(force?: boolean): void;
137
+ private addDirectLights;
138
+ private updateDirectLights;
139
+ setSunLightConfiguration(config: SunLightConfiguration): void;
140
+ private updateHelpers;
141
+ queryHits(results: Array<ExtendedIntersection>): Array<{
142
+ node: TreeNode;
143
+ point: Vector3;
144
+ }> | null;
145
+ queryHitIds(results: Array<ExtendedIntersection>): Array<{
146
+ nodeId: string;
147
+ point: Vector3;
148
+ }> | null;
149
+ renderViewFromIntersection(intersection: ExtendedIntersection): NodeRenderView | null;
150
+ private onClick;
151
+ private onDoubleClick;
152
+ boxFromObjects(objectIds: string[]): Box3;
153
+ screenToNDC(clientX: number, clientY: number, width?: number, height?: number): {
154
+ x: number;
155
+ y: number;
156
+ };
157
+ NDCToScreen(clientX: number, clientY: number, width?: number, height?: number): {
158
+ x: number;
159
+ y: number;
160
+ };
161
+ debugShowBatches(): void;
162
+ getBatchIds(): string[];
163
+ getBatchSize(batchId: string): number;
164
+ isolateBatch(batchId: string): void;
165
+ getObjects(): BatchObject[];
166
+ getObject(rv: NodeRenderView): BatchObject | null;
167
+ enableLayers(layers: ObjectLayers[], value: boolean): void;
168
+ }
@@ -0,0 +1,77 @@
1
+ import { type FilteringState } from './extensions/FilteringExtension.js';
2
+ import { type InlineView, type PolarView, type CanonicalView } from './extensions/CameraController.js';
3
+ import type { Query, QueryArgsResultMap, QueryResult } from './queries/Query.js';
4
+ import { type KingSyView, type SunLightConfiguration, type ViewerParams } from '../IViewer.js';
5
+ import { Viewer } from './Viewer.js';
6
+ import { WorldTree } from './tree/WorldTree.js';
7
+ import { type MeasurementOptions } from './extensions/measurements/MeasurementsExtension.js';
8
+ import { type DiffResult, VisualDiffMode } from './extensions/DiffExtension.js';
9
+ import { type PropertyInfo } from './filtering/PropertyManager.js';
10
+ import { BatchObject } from './batching/BatchObject.js';
11
+ import { KingSyViewer } from '@kingsy/shared';
12
+ export declare class LegacyViewer extends Viewer {
13
+ private cameraController;
14
+ private selection;
15
+ private sections;
16
+ private measurements;
17
+ private filtering;
18
+ private explodeExtension;
19
+ private diffExtension;
20
+ private highlightExtension;
21
+ constructor(container: HTMLElement, params?: ViewerParams);
22
+ init(): Promise<void>;
23
+ getRenderer(): import("./KingSyRenderer.js").default;
24
+ /** SECTION BOX */
25
+ setSectionBox(boxData?: KingSyViewer.ViewerState.SectionBoxData, offset?: number): void;
26
+ getCurrentSectionBox(): KingSyViewer.ViewerState.SectionBoxData;
27
+ toggleSectionBox(): void;
28
+ sectionBoxOff(): void;
29
+ sectionBoxOn(): void;
30
+ /** FILTERING */
31
+ selectObjects(objectIds: string[]): Promise<FilteringState>;
32
+ resetSelection(): Promise<FilteringState>;
33
+ hideObjects(objectIds: string[], stateKey?: string | undefined, includeDescendants?: boolean, ghost?: boolean): Promise<FilteringState>;
34
+ showObjects(objectIds: string[], stateKey?: string | undefined, includeDescendants?: boolean): Promise<FilteringState>;
35
+ isolateObjects(objectIds: string[], stateKey?: string | undefined, includeDescendants?: boolean, ghost?: boolean): Promise<FilteringState>;
36
+ unIsolateObjects(objectIds: string[], stateKey?: string | undefined, includeDescendants?: boolean): Promise<FilteringState>;
37
+ highlightObjects(objectIds: string[]): Promise<FilteringState>;
38
+ resetHighlight(): Promise<FilteringState>;
39
+ setColorFilter(property: PropertyInfo, ghost?: boolean): Promise<FilteringState>;
40
+ removeColorFilter(): Promise<FilteringState>;
41
+ setUserObjectColors(groups: {
42
+ objectIds: string[];
43
+ color: string;
44
+ }[]): Promise<FilteringState>;
45
+ resetFilters(): Promise<FilteringState | null>;
46
+ private preserveSelectionHighlightFilter;
47
+ /** TREE */
48
+ getDataTree(): void;
49
+ getWorldTree(): WorldTree;
50
+ /** QUERIES */
51
+ query<T extends Query>(query: T): QueryArgsResultMap[T['operation']];
52
+ queryAsync(query: Query): Promise<QueryResult> | null;
53
+ /** CAMERA */
54
+ zoom(objectIds?: string[], fit?: number, transition?: boolean): void;
55
+ setOrthoCameraOn(): void;
56
+ setPerspectiveCameraOn(): void;
57
+ toggleCameraProjection(): void;
58
+ setLightConfiguration(config: SunLightConfiguration): void;
59
+ getViews(): KingSyView[];
60
+ setView(view: CanonicalView | KingSyView | InlineView | PolarView, transition?: boolean): void;
61
+ /** MISC */
62
+ screenshot(): Promise<string>;
63
+ explode(time: number): void;
64
+ getObjects(id: string): BatchObject[];
65
+ /**
66
+ * OBJECT LOADING/UNLOADING
67
+ */
68
+ loadObjectAsync(url: string, token?: string | undefined, enableCaching?: boolean, zoomToObject?: boolean): Promise<void>;
69
+ diff(urlA: string, urlB: string, mode: VisualDiffMode, authToken?: string): Promise<DiffResult>;
70
+ undiff(): Promise<void>;
71
+ setDiffTime(_diffResult: DiffResult, time: number): void;
72
+ setVisualDiffMode(_diffResult: DiffResult, mode: VisualDiffMode): void;
73
+ enableMeasurements(value: boolean): void;
74
+ setMeasurementOptions(options: MeasurementOptions): void;
75
+ removeMeasurement(): void;
76
+ dispose(): void;
77
+ }
@@ -0,0 +1,25 @@
1
+ import { Box3, Mesh, Plane, Scene } from 'three';
2
+ import { ShadowcatcherPass } from './pipeline/Passes/ShadowcatcherPass.js';
3
+ import { ObjectLayers } from '../IViewer.js';
4
+ import { type ShadowcatcherConfig } from './ShadowcatcherConfig.js';
5
+ import type { KingSyWebGLRenderer } from './objects/KingSyWebGLRenderer.js';
6
+ export declare class Shadowcatcher {
7
+ static readonly MESH_NAME = "Shadowcatcher";
8
+ static readonly PLANE_SUBD = 2;
9
+ static readonly MAX_TEXTURE_SIZE_SCALE = 0.5;
10
+ private planeMesh;
11
+ private planeSize;
12
+ private displayMaterial;
13
+ shadowcatcherPass: ShadowcatcherPass;
14
+ private _config;
15
+ get shadowcatcherMesh(): Mesh<import("three").BufferGeometry, import("three").Material | import("three").Material[]>;
16
+ set configuration(config: ShadowcatcherConfig);
17
+ constructor(layer: ObjectLayers, renderlayers: Array<ObjectLayers>);
18
+ update(scene: Scene): void;
19
+ render(renderer: KingSyWebGLRenderer): void;
20
+ bake(worldBox: Box3, maxTexSize: number, force?: boolean): void;
21
+ updateClippingPlanes(planes: Plane[]): void;
22
+ private getTextureSize;
23
+ private updatePlaneMesh;
24
+ private updatePlaneMeshGeometry;
25
+ }
@@ -0,0 +1,14 @@
1
+ export interface ShadowcatcherConfig {
2
+ textureSize: number;
3
+ weights: {
4
+ x: number;
5
+ y: number;
6
+ z: number;
7
+ w: number;
8
+ };
9
+ blurRadius: number;
10
+ stdDeviation: number;
11
+ sigmoidRange: number;
12
+ sigmoidStrength: number;
13
+ }
14
+ export declare const DefaultShadowcatcherConfig: ShadowcatcherConfig;
@@ -0,0 +1 @@
1
+ export declare function getResourceUrls(url: string, authToken?: string): Promise<string[]>;
@@ -0,0 +1,10 @@
1
+ export interface Utils {
2
+ screenToNDC(x: number, y: number, width?: number, height?: number): {
3
+ x: number;
4
+ y: number;
5
+ };
6
+ NDCToScreen(x: number, y: number, width?: number, height?: number): {
7
+ x: number;
8
+ y: number;
9
+ };
10
+ }
@@ -0,0 +1,74 @@
1
+ import EventEmitter from './EventEmitter.js';
2
+ import { Clock } from 'three';
3
+ import { Assets } from './Assets.js';
4
+ import { type Optional } from '../helpers/typeHelper.js';
5
+ import { type IViewer, type KingSyView, type SunLightConfiguration, UpdateFlags, ViewerEvent, type ViewerParams, type ViewerEventPayload } from '../IViewer.js';
6
+ import { World } from './World.js';
7
+ import { WorldTree } from './tree/WorldTree.js';
8
+ import KingSyRenderer from './KingSyRenderer.js';
9
+ import { type PropertyInfo, PropertyManager } from './filtering/PropertyManager.js';
10
+ import type { Query, QueryArgsResultMap } from './queries/Query.js';
11
+ import { type Utils } from './Utils.js';
12
+ import { Extension } from './extensions/Extension.js';
13
+ import Input from './input/Input.js';
14
+ import { Loader } from './loaders/Loader.js';
15
+ import { type Constructor } from 'type-fest';
16
+ import Stats from './three/stats.js';
17
+ export declare class Viewer extends EventEmitter implements IViewer {
18
+ /** Container and optional stats element */
19
+ protected container: HTMLElement;
20
+ protected stats: Optional<ReturnType<typeof Stats>>;
21
+ /** Viewer params used at init time */
22
+ protected startupParams: ViewerParams;
23
+ /** Viewer components */
24
+ protected tree: WorldTree;
25
+ protected world: World;
26
+ static readonly theAssets: Assets;
27
+ kingsyRenderer: KingSyRenderer;
28
+ protected propertyManager: PropertyManager;
29
+ /** Misc members */
30
+ protected inProgressOperations: number;
31
+ protected clock: Clock;
32
+ protected loaders: {
33
+ [id: string]: Loader;
34
+ };
35
+ protected extensions: {
36
+ [id: string]: Extension;
37
+ };
38
+ /** various utils/helpers */
39
+ protected utils: Utils | undefined;
40
+ /** Gets the World object. Currently it's used for info mostly */
41
+ get World(): World;
42
+ get Utils(): Utils;
43
+ get input(): Input;
44
+ private getConstructorChain;
45
+ createExtension<T extends Extension>(type: Constructor<T>): T;
46
+ getExtension<T extends Extension>(type: Constructor<T>): T;
47
+ hasExtension<T extends Extension>(type: Constructor<T>): boolean;
48
+ private getExtensionInternal;
49
+ constructor(container: HTMLElement, params?: ViewerParams);
50
+ getContainer(): HTMLElement;
51
+ getRenderer(): KingSyRenderer;
52
+ resize(): void;
53
+ requestRender(flags?: UpdateFlags): void;
54
+ protected frame(): void;
55
+ protected update(): void;
56
+ protected render(): void;
57
+ init(): Promise<void>;
58
+ on<T extends ViewerEvent>(eventType: T, listener: (arg: ViewerEventPayload[T]) => void): void;
59
+ getObjectProperties(resourceURL?: string | null, bypassCache?: boolean): Promise<PropertyInfo[]>;
60
+ getDataTree(): void;
61
+ getWorldTree(): WorldTree;
62
+ query<T extends Query>(query: T): QueryArgsResultMap[T['operation']] | null;
63
+ setLightConfiguration(config: SunLightConfiguration): void;
64
+ getViews(): KingSyView[];
65
+ screenshot(): Promise<string>;
66
+ /**
67
+ * OBJECT LOADING/UNLOADING
68
+ */
69
+ loadObject(loader: Loader, zoomToObject?: boolean): Promise<void>;
70
+ cancelLoad(resource: string, unload?: boolean): Promise<void>;
71
+ unloadObject(resource: string): Promise<void>;
72
+ unloadAll(): Promise<void>;
73
+ dispose(): void;
74
+ }
@@ -0,0 +1,10 @@
1
+ import { Viewer } from './Viewer.js';
2
+ export declare class WebXrViewer extends Viewer {
3
+ init(): Promise<void>;
4
+ /** Override the render function an don't call KingSyRendere's render */
5
+ protected render(): void;
6
+ /** Rendering is now done on three's WebXr loop
7
+ * We also just render plainly, no pipelines, for simplicity
8
+ */
9
+ protected xrWrappedRender(): void;
10
+ }
@@ -0,0 +1,31 @@
1
+ import { Box3, Vector3 } from 'three';
2
+ import { OBB } from 'three/examples/jsm/math/OBB.js';
3
+ export declare class AsyncPause {
4
+ private lastPauseTime;
5
+ needsWait: boolean;
6
+ tick(maxDelta: number): void;
7
+ wait(waitTime: number): Promise<void>;
8
+ }
9
+ export declare class World {
10
+ private readonly boxes;
11
+ readonly worldBox: Box3;
12
+ private readonly VecBuff;
13
+ private readonly BoxBuff0;
14
+ private readonly BoxBuff1;
15
+ private _worldOrigin;
16
+ get worldSize(): {
17
+ x: number;
18
+ y: number;
19
+ z: number;
20
+ };
21
+ get worldOrigin(): Vector3;
22
+ expandWorld(box: Box3): void;
23
+ reduceWorld(box: Box3): void;
24
+ updateWorld(): void;
25
+ resetWorld(): void;
26
+ getRelativeOffset(offsetAmount?: number): number;
27
+ getRelativeOffsetBox(box: Box3, offsetAmount?: number): Box3;
28
+ static expandBoxRelative<T extends OBB | Box3>(box: T, offsetAmount?: number): T;
29
+ private static expandBox3Relative;
30
+ private static expandOBBRelative;
31
+ }
@@ -0,0 +1,62 @@
1
+ import { Box3, Material, Object3D, WebGLRenderer } from 'three';
2
+ import { type FilterMaterialOptions } from '../materials/Materials.js';
3
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
4
+ export declare enum GeometryType {
5
+ MESH = 0,
6
+ LINE = 1,
7
+ POINT = 2,
8
+ POINT_CLOUD = 3,
9
+ TEXT = 4
10
+ }
11
+ export interface DrawGroup {
12
+ start: number;
13
+ count: number;
14
+ materialIndex: number;
15
+ }
16
+ /** TO DO: Unify point and mesh batch implementations */
17
+ export interface Batch {
18
+ id: string;
19
+ subtreeId: string;
20
+ renderViews: NodeRenderView[];
21
+ batchMaterial: Material;
22
+ renderObject: Object3D;
23
+ geometryType: GeometryType;
24
+ get bounds(): Box3;
25
+ get drawCalls(): number;
26
+ get minDrawCalls(): number;
27
+ get materials(): Material[];
28
+ get groups(): DrawGroup[];
29
+ get triCount(): number;
30
+ get pointCount(): number;
31
+ get lineCount(): number;
32
+ get vertCount(): number;
33
+ getCount(): number;
34
+ setBatchMaterial(material: Material): void;
35
+ setBatchBuffers(range: BatchUpdateRange[]): void;
36
+ setVisibleRange(range: BatchUpdateRange[]): void;
37
+ getVisibleRange(): BatchUpdateRange;
38
+ setDrawRanges(ranges: BatchUpdateRange[]): void;
39
+ resetDrawRanges(): void;
40
+ buildBatch(): Promise<void>;
41
+ getRenderView(index: number): NodeRenderView | null;
42
+ getMaterialAtIndex(index: number): Material | null;
43
+ getMaterial(rv: NodeRenderView): Material | null;
44
+ getOpaque(): BatchUpdateRange;
45
+ getTransparent(): BatchUpdateRange;
46
+ getStencil(): BatchUpdateRange;
47
+ getDepth(): BatchUpdateRange;
48
+ onUpdate(deltaTime?: number): void;
49
+ onRender?(renderer: WebGLRenderer): void;
50
+ purge(): void;
51
+ }
52
+ export interface BatchUpdateRange {
53
+ offset: number;
54
+ count: number;
55
+ material?: Material;
56
+ materialOptions?: FilterMaterialOptions;
57
+ }
58
+ export declare const NoneBatchUpdateRange: BatchUpdateRange;
59
+ export declare const AllBatchUpdateRange: BatchUpdateRange;
60
+ export declare const INSTANCE_TRANSFORM_BUFFER_STRIDE = 16;
61
+ export declare const INSTANCE_GRADIENT_BUFFER_STRIDE = 1;
62
+ export declare const getNextBatchIndex: () => number;
@@ -0,0 +1,53 @@
1
+ import { Box3, Euler, Matrix4, Quaternion, Vector3 } from 'three';
2
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
3
+ import { AccelerationStructure } from '../objects/AccelerationStructure.js';
4
+ import { MeshBVH } from 'three-mesh-bvh';
5
+ export type VectorLike = {
6
+ x: number;
7
+ y: number;
8
+ z?: number;
9
+ w?: number;
10
+ } | undefined | null;
11
+ export type Vector3Like = VectorLike & {
12
+ z: number;
13
+ };
14
+ export type Vector4Like = Vector3Like & {
15
+ w: number;
16
+ };
17
+ export declare class BatchObject {
18
+ protected _renderView: NodeRenderView;
19
+ protected _accelerationStructure: AccelerationStructure;
20
+ protected _batchIndex: number;
21
+ protected _localOrigin: Vector3;
22
+ transform: Matrix4;
23
+ transformInv: Matrix4;
24
+ tasVertIndexStart: number;
25
+ tasVertIndexEnd: number;
26
+ quaternion: Quaternion;
27
+ eulerValue: Euler;
28
+ pivot_High: Vector3;
29
+ pivot_Low: Vector3;
30
+ translation: Vector3;
31
+ scaleValue: Vector3;
32
+ pivotValue: Vector3;
33
+ protected static matBuff0: Matrix4;
34
+ protected static matBuff1: Matrix4;
35
+ protected static matBuff2: Matrix4;
36
+ protected static eulerBuff: Euler;
37
+ protected static translationBuff: Vector3;
38
+ protected static scaleBuff: Vector3;
39
+ protected static pivotBuff: Vector3;
40
+ transformDirty: boolean;
41
+ get renderView(): NodeRenderView;
42
+ get accelerationStructure(): AccelerationStructure;
43
+ get batchIndex(): number;
44
+ get aabb(): Box3;
45
+ get localOrigin(): Vector3;
46
+ set pivot(value: Vector3 | null);
47
+ set position(value: Vector3);
48
+ set euler(euler: Euler);
49
+ set scale(scale: Vector3);
50
+ constructor(renderView: NodeRenderView, batchIndex: number);
51
+ buildAccelerationStructure(bvh?: MeshBVH): void;
52
+ transformTRS(translation: Vector3Like, euler?: Vector3Like, scale?: Vector3Like, pivot?: Vector3Like): void;
53
+ }
@@ -0,0 +1,60 @@
1
+ import { WebGLCapabilities } from 'three';
2
+ import LineBatch from './LineBatch.js';
3
+ import Materials from '../materials/Materials.js';
4
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
5
+ import { type Batch, type BatchUpdateRange, GeometryType } from './Batch.js';
6
+ import { Material, WebGLRenderer } from 'three';
7
+ import { RenderTree } from '../tree/RenderTree.js';
8
+ import TextBatch from './TextBatch.js';
9
+ import { KingSyType } from '../loaders/GeometryConverter.js';
10
+ import { WorldTree } from '../../index.js';
11
+ import { MeshBatch } from './MeshBatch.js';
12
+ import { PointBatch } from './PointBatch.js';
13
+ import { ObjectVisibility } from '../pipeline/Passes/GPass.js';
14
+ type BatchTypeMap = {
15
+ [GeometryType.MESH]: MeshBatch;
16
+ [GeometryType.LINE]: LineBatch;
17
+ [GeometryType.POINT]: PointBatch;
18
+ [GeometryType.POINT_CLOUD]: PointBatch;
19
+ [GeometryType.TEXT]: TextBatch;
20
+ };
21
+ export default class Batcher {
22
+ private caps;
23
+ private maxBatchObjects;
24
+ private maxBatchVertices;
25
+ private minInstancedBatchVertices;
26
+ materials: Materials;
27
+ batches: {
28
+ [id: string]: Batch;
29
+ };
30
+ constructor(caps: WebGLCapabilities);
31
+ makeBatches(worldTree: WorldTree, renderTree: RenderTree, kingsyType: KingSyType[], batchType?: GeometryType): AsyncGenerator<Batch, void, unknown>;
32
+ private splitBatch;
33
+ private buildInstancedBatch;
34
+ private buildBatch;
35
+ update(deltaTime: number): void;
36
+ render(renderer: WebGLRenderer): void;
37
+ saveVisiblity(): Record<string, BatchUpdateRange>;
38
+ applyVisibility(ranges: Record<string, BatchUpdateRange>): void;
39
+ getVisibility(objectVisibility: ObjectVisibility): Record<string, BatchUpdateRange>;
40
+ getTransparent(): Record<string, BatchUpdateRange>;
41
+ getStencil(): Record<string, BatchUpdateRange>;
42
+ getOpaque(): Record<string, BatchUpdateRange>;
43
+ getDepth(): Record<string, BatchUpdateRange>;
44
+ overrideMaterial(ranges: Record<string, BatchUpdateRange>, material: Material): void;
45
+ overrideBatchMaterial(ranges: Record<string, BatchUpdateRange>, material: Material): void;
46
+ restoreMaterial(ranges: Record<string, BatchUpdateRange>): void;
47
+ restoreBatchMaterial(ranges: Record<string, BatchUpdateRange>): void;
48
+ purgeBatches(subtreeId: string): void;
49
+ getBatches<K extends GeometryType>(subtreeId?: string, geometryType?: K): BatchTypeMap[K][];
50
+ private isBatchType;
51
+ getBatch(rv: NodeRenderView): Batch | undefined;
52
+ getRenderView(batchId: string, index: number): NodeRenderView | null;
53
+ getRenderViewMaterial(batchId: string, index: number): Material | null;
54
+ resetBatchesDrawRanges(): void;
55
+ /**
56
+ * Used for debuggin only
57
+ */
58
+ isolateBatch(batchId: string): void;
59
+ }
60
+ export {};
@@ -0,0 +1,6 @@
1
+ import { Material } from 'three';
2
+ import { type BatchUpdateRange } from './Batch.js';
3
+ import { type DrawGroup } from './Batch.js';
4
+ export declare class DrawRanges {
5
+ integrateRanges(groups: Array<DrawGroup>, materials: Array<Material>, ranges: BatchUpdateRange[]): Array<DrawGroup>;
6
+ }
@@ -0,0 +1,8 @@
1
+ import { BatchObject, type Vector3Like } from './BatchObject.js';
2
+ import { Matrix4 } from 'three';
3
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
4
+ export declare class InstancedBatchObject extends BatchObject {
5
+ protected instanceTransform: Matrix4;
6
+ constructor(renderView: NodeRenderView, batchIndex: number);
7
+ transformTRS(translation: Vector3Like, euler: Vector3Like, scale: Vector3Like, pivot: Vector3Like): void;
8
+ }