@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,60 @@
1
+ import { Box3, Material, Object3D, WebGLRenderer } from 'three';
2
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
3
+ import { type Batch, type BatchUpdateRange, type DrawGroup, GeometryType } from './Batch.js';
4
+ import KingSyInstancedMesh from '../objects/KingSyInstancedMesh.js';
5
+ import { DrawRanges } from './DrawRanges.js';
6
+ export declare class InstancedMeshBatch implements Batch {
7
+ id: string;
8
+ subtreeId: string;
9
+ renderViews: NodeRenderView[];
10
+ private geometry;
11
+ batchMaterial: Material;
12
+ mesh: KingSyInstancedMesh;
13
+ protected drawRanges: DrawRanges;
14
+ private instanceTransformBuffer0;
15
+ private instanceTransformBuffer1;
16
+ private transformBufferIndex;
17
+ private instanceGradientBuffer;
18
+ private instanceObjectIdBuffer;
19
+ private needsShuffle;
20
+ get bounds(): Box3;
21
+ get drawCalls(): number;
22
+ get minDrawCalls(): number;
23
+ get maxDrawCalls(): number;
24
+ get triCount(): number;
25
+ get vertCount(): number;
26
+ get pointCount(): number;
27
+ get lineCount(): number;
28
+ get geometryType(): GeometryType;
29
+ get renderObject(): Object3D;
30
+ getCount(): number;
31
+ get materials(): Material[];
32
+ get groups(): Array<DrawGroup>;
33
+ constructor(id: string, subtreeId: string, renderViews: NodeRenderView[], webGL2: boolean);
34
+ setBatchMaterial(material: Material): void;
35
+ onUpdate(deltaTime: number): void;
36
+ onRender(renderer: WebGLRenderer): void;
37
+ /** Note: You can only set visibility on ranges that exist as draw groups! */
38
+ setVisibleRange(ranges: BatchUpdateRange[]): void;
39
+ getVisibleRange(): BatchUpdateRange;
40
+ getOpaque(): BatchUpdateRange;
41
+ getDepth(): BatchUpdateRange;
42
+ getTransparent(): BatchUpdateRange;
43
+ getStencil(): BatchUpdateRange;
44
+ setBatchBuffers(ranges: BatchUpdateRange[]): void;
45
+ setDrawRanges(ranges: BatchUpdateRange[]): void;
46
+ private cleanMaterials;
47
+ private shuffleDrawGroups;
48
+ resetDrawRanges(): void;
49
+ private getCurrentTransformBuffer;
50
+ private getNextTransformBuffer;
51
+ private getCurrentGradientBuffer;
52
+ private getCurrentObjectIndexBuffer;
53
+ buildBatch(): Promise<void>;
54
+ getRenderView(index: number): NodeRenderView | null;
55
+ getMaterialAtIndex(index: number): Material | null;
56
+ getMaterial(rv: NodeRenderView): Material | null;
57
+ private makeInstancedMeshGeometry;
58
+ private updateGradientIndexBufferData;
59
+ purge(): void;
60
+ }
@@ -0,0 +1,52 @@
1
+ import { Box3, InstancedInterleavedBuffer, Material, Object3D, WebGLRenderer } from 'three';
2
+ import { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';
3
+ import { LineSegmentsGeometry } from 'three/examples/jsm/lines/LineSegmentsGeometry.js';
4
+ import KingSyLineMaterial from '../materials/KingSyLineMaterial.js';
5
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
6
+ import { type Batch, type BatchUpdateRange, type DrawGroup, GeometryType } from './Batch.js';
7
+ export default class LineBatch implements Batch {
8
+ id: string;
9
+ subtreeId: string;
10
+ renderViews: NodeRenderView[];
11
+ protected geometry: LineSegmentsGeometry;
12
+ batchMaterial: KingSyLineMaterial;
13
+ protected batchTransparent: boolean;
14
+ protected batchOpacity: number;
15
+ protected mesh: LineSegments2;
16
+ colorBuffer: InstancedInterleavedBuffer;
17
+ private static readonly vector4Buffer;
18
+ get bounds(): Box3;
19
+ get drawCalls(): number;
20
+ get minDrawCalls(): number;
21
+ get triCount(): number;
22
+ get vertCount(): number;
23
+ constructor(id: string, subtreeId: string, renderViews: NodeRenderView[]);
24
+ get pointCount(): number;
25
+ get lineCount(): number;
26
+ get renderObject(): Object3D;
27
+ get geometryType(): GeometryType;
28
+ get materials(): Material[];
29
+ get groups(): DrawGroup[];
30
+ getCount(): number;
31
+ setBatchMaterial(material: KingSyLineMaterial): void;
32
+ onUpdate(deltaTime: number): void;
33
+ onRender(renderer: WebGLRenderer): void;
34
+ setVisibleRange(ranges: BatchUpdateRange[]): void;
35
+ getVisibleRange(): BatchUpdateRange;
36
+ getOpaque(): BatchUpdateRange;
37
+ getDepth(): BatchUpdateRange;
38
+ getTransparent(): BatchUpdateRange;
39
+ getStencil(): BatchUpdateRange;
40
+ /** Reminder here that line batches do not really change materials, just the color buffer changes */
41
+ setBatchBuffers(ranges: BatchUpdateRange[]): void;
42
+ setDrawRanges(ranges: BatchUpdateRange[]): void;
43
+ resetDrawRanges(): void;
44
+ buildBatch(): Promise<void>;
45
+ getRenderView(index: number): NodeRenderView | null;
46
+ getMaterialAtIndex(index: number): Material;
47
+ /** TODO: I wish we wouldn't clone the material here... */
48
+ getMaterial(rv: NodeRenderView): Material;
49
+ private makeLineGeometry;
50
+ private updateColorBuffer;
51
+ purge(): void;
52
+ }
@@ -0,0 +1,35 @@
1
+ import { Material, BufferAttribute, Box3, BufferGeometry } from 'three';
2
+ import { PrimitiveBatch } from './PrimitiveBatch.js';
3
+ import KingSyMesh, { TransformStorage } from '../objects/KingSyMesh.js';
4
+ import { DrawRanges } from './DrawRanges.js';
5
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
6
+ import { type BatchUpdateRange, type DrawGroup, GeometryType } from './Batch.js';
7
+ export declare class MeshBatch extends PrimitiveBatch {
8
+ protected primitive: KingSyMesh;
9
+ protected transformStorage: TransformStorage;
10
+ private indexBuffer0;
11
+ private indexBuffer1;
12
+ private indexBufferIndex;
13
+ protected drawRanges: DrawRanges;
14
+ get bounds(): Box3;
15
+ get minDrawCalls(): number;
16
+ get triCount(): number;
17
+ get pointCount(): number;
18
+ get lineCount(): number;
19
+ get geometryType(): GeometryType;
20
+ get mesh(): KingSyMesh;
21
+ constructor(id: string, subtreeId: string, renderViews: NodeRenderView[], transformStorage: TransformStorage);
22
+ protected getCurrentIndexBuffer(): BufferAttribute;
23
+ protected getNextIndexBuffer(): BufferAttribute;
24
+ protected shuffleMaterialOrder(a: DrawGroup, b: DrawGroup): number;
25
+ protected updateGradientIndexBufferData(start: number, end: number, value: number): {
26
+ minIndex: number;
27
+ maxIndex: number;
28
+ };
29
+ setDrawRanges(ranges: BatchUpdateRange[]): void;
30
+ resetDrawRanges(): void;
31
+ buildBatch(): Promise<void>;
32
+ protected makeMeshGeometry(indices: Uint32Array | Uint16Array, position: Float64Array, normals: Float32Array, batchIndices: Float32Array, color?: Float32Array): BufferGeometry;
33
+ getRenderView(index: number): NodeRenderView | null;
34
+ getMaterialAtIndex(index: number): Material | null;
35
+ }
@@ -0,0 +1,29 @@
1
+ import { Material, Box3, BufferAttribute, Points, BufferGeometry } from 'three';
2
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
3
+ import { type BatchUpdateRange, type DrawGroup, GeometryType } from './Batch.js';
4
+ import { PrimitiveBatch } from './PrimitiveBatch.js';
5
+ import { DrawRanges } from './DrawRanges.js';
6
+ export declare class PointBatch extends PrimitiveBatch {
7
+ protected primitive: Points;
8
+ protected drawRanges: DrawRanges;
9
+ get geometryType(): GeometryType;
10
+ get bounds(): Box3;
11
+ get minDrawCalls(): number;
12
+ get triCount(): number;
13
+ get pointCount(): number;
14
+ get lineCount(): number;
15
+ constructor(id: string, subtreeId: string, renderViews: NodeRenderView[]);
16
+ setDrawRanges(ranges: BatchUpdateRange[]): void;
17
+ resetDrawRanges(): void;
18
+ protected getCurrentIndexBuffer(): BufferAttribute;
19
+ protected getNextIndexBuffer(): BufferAttribute;
20
+ protected shuffleMaterialOrder(a: DrawGroup, b: DrawGroup): number;
21
+ protected updateGradientIndexBufferData(start: number, end: number, value: number): {
22
+ minIndex: number;
23
+ maxIndex: number;
24
+ };
25
+ buildBatch(): Promise<void>;
26
+ protected makePointGeometry(index: Int32Array, position: Float64Array, color: Float32Array): BufferGeometry;
27
+ getRenderView(index: number): NodeRenderView | null;
28
+ getMaterialAtIndex(index: number): Material | null;
29
+ }
@@ -0,0 +1,57 @@
1
+ import { Material, Object3D, BufferGeometry, BufferAttribute, Box3 } from 'three';
2
+ import { NodeRenderView } from '../../index.js';
3
+ import { type Batch, type BatchUpdateRange, GeometryType } from './Batch.js';
4
+ import { type DrawGroup } from './Batch.js';
5
+ export declare abstract class Primitive<TGeometry extends BufferGeometry = BufferGeometry, TMaterial extends Material | Material[] = Material | Material[]> extends Object3D {
6
+ geometry: TGeometry;
7
+ material: TMaterial;
8
+ visible: boolean;
9
+ }
10
+ export declare abstract class PrimitiveBatch implements Batch {
11
+ id: string;
12
+ subtreeId: string;
13
+ renderViews: NodeRenderView[];
14
+ batchMaterial: Material;
15
+ protected abstract primitive: Primitive;
16
+ protected gradientIndexBuffer: BufferAttribute;
17
+ protected needsShuffle: boolean;
18
+ abstract get geometryType(): GeometryType;
19
+ abstract get bounds(): Box3;
20
+ abstract get minDrawCalls(): number;
21
+ abstract get triCount(): number;
22
+ abstract get pointCount(): number;
23
+ abstract get lineCount(): number;
24
+ get materials(): Material[];
25
+ get groups(): DrawGroup[];
26
+ set groups(value: DrawGroup[]);
27
+ get renderObject(): Object3D;
28
+ get drawCalls(): number;
29
+ get vertCount(): number;
30
+ getCount(): number;
31
+ setBatchMaterial(material: Material): void;
32
+ onUpdate(): void;
33
+ setVisibleRange(ranges: BatchUpdateRange[]): void;
34
+ getVisibleRange(): BatchUpdateRange;
35
+ getOpaque(): BatchUpdateRange;
36
+ getDepth(): BatchUpdateRange;
37
+ getTransparent(): BatchUpdateRange;
38
+ getStencil(): BatchUpdateRange;
39
+ setBatchBuffers(ranges: BatchUpdateRange[]): void;
40
+ protected cleanMaterials(): void;
41
+ protected abstract getCurrentIndexBuffer(): BufferAttribute;
42
+ protected abstract getNextIndexBuffer(): BufferAttribute;
43
+ protected abstract shuffleMaterialOrder(a: DrawGroup, b: DrawGroup): number;
44
+ private shuffleDrawGroups;
45
+ protected abstract updateGradientIndexBufferData(start: number, end: number, value: number): {
46
+ minIndex: number;
47
+ maxIndex: number;
48
+ };
49
+ protected updateGradientIndexBuffer(rangeMin?: number, rangeMax?: number): void;
50
+ abstract setDrawRanges(ranges: BatchUpdateRange[]): void;
51
+ resetDrawRanges(): void;
52
+ abstract buildBatch(): Promise<void>;
53
+ abstract getRenderView(index: number): NodeRenderView | null;
54
+ abstract getMaterialAtIndex(index: number): Material | null;
55
+ getMaterial(rv: NodeRenderView): Material | null;
56
+ purge(): void;
57
+ }
@@ -0,0 +1,41 @@
1
+ import { Box3, Material, Object3D, WebGLRenderer } from 'three';
2
+ import { NodeRenderView } from '../tree/NodeRenderView.js';
3
+ import { type Batch, type BatchUpdateRange, type DrawGroup, GeometryType } from './Batch.js';
4
+ import { KingSyText } from '../objects/KingSyText.js';
5
+ export default class TextBatch implements Batch {
6
+ id: string;
7
+ subtreeId: string;
8
+ renderViews: NodeRenderView[];
9
+ batchMaterial: Material;
10
+ mesh: KingSyText;
11
+ get bounds(): Box3;
12
+ get drawCalls(): number;
13
+ get minDrawCalls(): number;
14
+ get triCount(): number;
15
+ get vertCount(): number;
16
+ constructor(id: string, subtreeId: string, renderViews: NodeRenderView[]);
17
+ get pointCount(): number;
18
+ get lineCount(): number;
19
+ get geometryType(): GeometryType;
20
+ get renderObject(): Object3D;
21
+ getCount(): number;
22
+ get materials(): Material[];
23
+ get groups(): DrawGroup[];
24
+ setBatchMaterial(material: Material): void;
25
+ onUpdate(deltaTime: number): void;
26
+ onRender(renderer: WebGLRenderer): void;
27
+ setVisibleRange(ranges: BatchUpdateRange[]): void;
28
+ getVisibleRange(): BatchUpdateRange;
29
+ getOpaque(): BatchUpdateRange;
30
+ getDepth(): BatchUpdateRange;
31
+ getTransparent(): BatchUpdateRange;
32
+ getStencil(): BatchUpdateRange;
33
+ setBatchBuffers(range: BatchUpdateRange[]): void;
34
+ setDrawRanges(ranges: BatchUpdateRange[]): void;
35
+ resetDrawRanges(): void;
36
+ buildBatch(): Promise<void>;
37
+ getRenderView(index: number): NodeRenderView;
38
+ getMaterialAtIndex(index: number): Material;
39
+ getMaterial(rv: NodeRenderView): Material;
40
+ purge(): void;
41
+ }
@@ -0,0 +1,38 @@
1
+ import { Box3, BufferGeometry, Matrix4, Vector2, Vector3 } from 'three';
2
+ import { type KingSyObject } from '../../IViewer.js';
3
+ export declare enum GeometryAttributes {
4
+ POSITION = "POSITION",
5
+ COLOR = "COLOR",
6
+ NORMAL = "NORMAL",
7
+ UV = "UV",
8
+ TANGENT = "TANGENT",
9
+ INDEX = "INDEX"
10
+ }
11
+ export interface GeometryData {
12
+ attributes: ({
13
+ [GeometryAttributes.POSITION]: number[];
14
+ } & Partial<Record<Exclude<GeometryAttributes, GeometryAttributes.POSITION>, number[]>>) | null;
15
+ bakeTransform: Matrix4 | null;
16
+ transform: Matrix4 | null;
17
+ metaData?: KingSyObject;
18
+ instanced?: boolean;
19
+ }
20
+ export declare class Geometry {
21
+ static updateRTEGeometry(geometry: BufferGeometry, doublePositions: Float64Array | Float32Array): void;
22
+ static mergeGeometryAttribute(attributes: (number[] | undefined)[], target: Float32Array | Float64Array): ArrayLike<number>;
23
+ static mergeIndexAttribute(indexAttributes: (number[] | undefined)[], positionAttributes: (number[] | undefined)[]): number[];
24
+ static mergeGeometryData(geometries: GeometryData[]): GeometryData;
25
+ static transformGeometryData(geometryData: GeometryData, m: Matrix4 | null): void;
26
+ static unpackColors(int32Colors: number[]): number[];
27
+ /** Please see https://kingsy.systems/blog/improving-kingsys-rte-implementation/ for additional details
28
+ * regarding double -> <float low; float high> encoding.
29
+ */
30
+ static DoubleToHighLowVector(input: Vector3, low: Vector3, high: Vector3): void;
31
+ static DoubleToHighLowBuffer(input: ArrayLike<number>, position_low: number[] | Float32Array, position_high: number[] | Float32Array): void;
32
+ static needsRTE(bounds: Box3): boolean;
33
+ static getFP32ProjectionDelta(point: Vector3, projection: Matrix4, screenSize: Vector2, relativeOffset?: number): Vector2;
34
+ /** Only supports indexed geometry */
35
+ static computeVertexNormalsBuffer(buffer: number[], position: number[], index: number[]): void;
36
+ static computeVertexNormals(buffer: BufferGeometry, doublePositions: Float64Array): void;
37
+ static triangulatePolygon(points: Vector2[]): number[];
38
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Set of functions to triangulate n-gon faces (i.e. polygon faces with an arbitrary (n) number of vertices).
3
+ * This class is a JavaScript port of https://github.com/kingsysystems/kingsy-sharp/blob/main/Objects/Objects/Utils/MeshTriangulationHelper.cs
4
+ */
5
+ export default class MeshTriangulationHelper {
6
+ /**
7
+ * Calculates the triangulation of the face at given faceIndex.
8
+ * @remarks This implementation is based the ear clipping method proposed by "Christer Ericson (2005) <i>Real-Time Collision Detection</i>.
9
+ * @param {Number} faceIndex The index of the face's cardinality indicator `n`
10
+ * @param {Number[]} faces The list of faces in the mesh
11
+ * @param {Number[]} vertices The list of vertices in the mesh
12
+ * @return {Number[]} flat list of triangle faces (without cardinality indicators)
13
+ */
14
+ static triangulateFace(faceIndex: number, faces: number[], vertices: number[]): number[];
15
+ /**
16
+ * Tests if point v is within the triangle *abc*.
17
+ * @param {Vector3} v
18
+ * @param {Vector3} a
19
+ * @param {Vector3} b
20
+ * @param {Vector3} c
21
+ * @returns {boolean} true if v is within triangle.
22
+ */
23
+ static testPointTriangle(v: Vector3, a: Vector3, b: Vector3, c: Vector3): boolean;
24
+ /**
25
+ * Checks that triangle abc is clockwise with reference to referenceNormal.
26
+ * @param {Vector3} referenceNormal The normal direction of the face.
27
+ * @param {Vector3} a
28
+ * @param {Vector3} b
29
+ * @param {Vector3} c
30
+ * @returns {boolean} true if triangle is ccw
31
+ */
32
+ static triangleIsCCW(referenceNormal: Vector3, a: Vector3, b: Vector3, c: Vector3): boolean;
33
+ }
34
+ /**
35
+ * Encapsulates vector maths operations required for polygon triangulation
36
+ */
37
+ declare class Vector3 {
38
+ constructor(x: any, y: any, z: any);
39
+ x: any;
40
+ y: any;
41
+ z: any;
42
+ add(v: any): Vector3;
43
+ sub(v: any): Vector3;
44
+ mul(n: any): Vector3;
45
+ dot(v: any): number;
46
+ cross(v: any): Vector3;
47
+ squareSum(): number;
48
+ normalize(): void;
49
+ }
50
+ export {};
@@ -0,0 +1,12 @@
1
+ export function getConversionFactor(from: any, to?: string): 1 | 0.001 | 12 | 10 | 0.01 | 0.1 | 0.000001 | 0.0393701 | 0.00328084 | 0.00109361 | 6.21371e-7 | 0.00001 | 0.393701 | 0.0328084 | 0.0109361 | 0.00000621371 | 1000 | 100 | 39.3701 | 3.28084 | 1.09361 | 0.000621371 | 1000000 | 100000 | 39370.1 | 3280.84 | 1093.61 | 0.621371 | 25.4 | 2.54 | 0.0254 | 0.0000254 | 0.0833333 | 0.027777694 | 0.0000157828 | 304.8 | 30.48 | 0.3048 | 0.0003048 | 0.333332328 | 0.000189394 | 1609000 | 160934 | 1609.34 | 1.60934 | 63360 | 5280 | 1759.99469184;
2
+ export function normaliseName(unit: any): string;
3
+ export namespace Units {
4
+ let Millimeters: string;
5
+ let Centimeters: string;
6
+ let Meters: string;
7
+ let Kilometers: string;
8
+ let Inches: string;
9
+ let Feet: string;
10
+ let Yards: string;
11
+ let Miles: string;
12
+ }
@@ -0,0 +1,95 @@
1
+ import { Extension } from './Extension.js';
2
+ import { Box3, Camera, OrthographicCamera, PerspectiveCamera, Vector2, Vector3 } from 'three';
3
+ import { type CameraEventPayload } from '../objects/KingSyCamera.js';
4
+ import { CameraEvent, type KingSyCamera } from '../objects/KingSyCamera.js';
5
+ import { FlyControls, FlyControlsOptions } from './controls/FlyControls.js';
6
+ import { KingSyControls } from './controls/KingSyControls.js';
7
+ import { IViewer, KingSyView } from '../../IViewer.js';
8
+ import { SmoothOrbitControlsOptions, SmoothOrbitControls } from './controls/SmoothOrbitControls.js';
9
+ export declare enum NearPlaneCalculation {
10
+ EMPIRIC = 0,
11
+ ACCURATE = 1
12
+ }
13
+ export type CanonicalView = 'front' | 'back' | 'up' | 'top' | 'down' | 'bottom' | 'right' | 'left' | '3d' | '3D';
14
+ export type InlineView = {
15
+ position: Vector3;
16
+ target: Vector3;
17
+ };
18
+ export type PolarView = {
19
+ azimuth: number;
20
+ polar: number;
21
+ radius?: number;
22
+ origin?: Vector3;
23
+ };
24
+ export type CameraControllerOptions = SmoothOrbitControlsOptions & FlyControlsOptions & {
25
+ nearPlaneCalculation?: NearPlaneCalculation;
26
+ };
27
+ export declare function isPerspectiveCamera(camera: Camera): camera is PerspectiveCamera;
28
+ export declare function isOrthographicCamera(camera: Camera): camera is OrthographicCamera;
29
+ export declare function computeOrthographicSize(distance: number, fov: number, aspect: number): Vector2;
30
+ export declare const DefaultOrbitControlsOptions: Required<CameraControllerOptions>;
31
+ export declare class CameraController extends Extension implements KingSyCamera {
32
+ protected _renderingCamera: PerspectiveCamera | OrthographicCamera;
33
+ protected perspectiveCamera: PerspectiveCamera;
34
+ protected orthographicCamera: OrthographicCamera;
35
+ protected _lastCameraChanged: boolean;
36
+ protected _options: Required<CameraControllerOptions>;
37
+ protected _activeControls: KingSyControls;
38
+ protected _orbitControls: SmoothOrbitControls;
39
+ protected _flyControls: FlyControls;
40
+ get renderingCamera(): PerspectiveCamera | OrthographicCamera;
41
+ set renderingCamera(value: PerspectiveCamera | OrthographicCamera);
42
+ get enabled(): boolean;
43
+ set enabled(val: boolean);
44
+ get fieldOfView(): number;
45
+ set fieldOfView(value: number);
46
+ get aspect(): number;
47
+ get controls(): KingSyControls;
48
+ get options(): Required<CameraControllerOptions>;
49
+ set options(value: CameraControllerOptions);
50
+ constructor(viewer: IViewer);
51
+ default(): void;
52
+ on<T extends CameraEvent>(eventType: T, listener: (arg: CameraEventPayload[T]) => void): void;
53
+ getTarget(): Vector3;
54
+ getPosition(): Vector3;
55
+ toggleControls(): void;
56
+ setCameraView(objectIds: string[] | undefined, transition: boolean | undefined, fit?: number): void;
57
+ setCameraView(view: CanonicalView | KingSyView | InlineView | PolarView, transition: boolean | undefined, fit?: number): void;
58
+ setCameraView(bounds: Box3, transition: boolean | undefined, fit?: number): void;
59
+ onEarlyUpdate(_delta?: number): void;
60
+ onLateUpdate(): void;
61
+ onResize(): void;
62
+ setPerspectiveCameraOn(): void;
63
+ setOrthoCameraOn(): void;
64
+ toggleCameras(): void;
65
+ protected setupOrthoCamera(): void;
66
+ protected setupPerspectiveCamera(): void;
67
+ disableRotations(): void;
68
+ enableRotations(): void;
69
+ updateCameraPlanes(targetVolume?: Box3, offsetScale?: number): void;
70
+ protected computeNearCameraPlaneEmpiric(targetVolume?: Box3, offsetScale?: number): number | undefined;
71
+ protected computeNearCameraPlaneAccurate(targetVolume?: Box3, offsetScale?: number, fallback?: number): number | undefined;
72
+ protected updateFarCameraPlane(): void;
73
+ protected getClosestGeometryDistance(fallback?: number): number;
74
+ protected zoom(objectIds?: string[], fit?: number, transition?: boolean): void;
75
+ protected zoomExtents(fit?: number, transition?: boolean): void;
76
+ protected zoomToBox(box: Box3, fit?: number, transition?: boolean): void;
77
+ protected fitToRadius(radius: number): number;
78
+ protected isKingSyView(view: CanonicalView | KingSyView | InlineView | PolarView): view is KingSyView;
79
+ protected isCanonicalView(view: CanonicalView | KingSyView | InlineView | PolarView): view is CanonicalView;
80
+ protected isInlineView(view: CanonicalView | KingSyView | InlineView | PolarView): view is InlineView;
81
+ protected isPolarView(view: CanonicalView | KingSyView | InlineView | PolarView): view is PolarView;
82
+ protected isBox3(view: CanonicalView | KingSyView | InlineView | PolarView | Box3): view is Box3;
83
+ protected setView(view: CanonicalView | KingSyView | InlineView | PolarView, transition?: boolean): void;
84
+ protected setViewKingSy(view: KingSyView, transition?: boolean): void;
85
+ /**
86
+ * Rotates camera to some canonical views
87
+ * @param {string} side Can be any of front, back, up (top), down (bottom), right, left.
88
+ * @param {Number} fit [description]
89
+ * @param {Boolean} transition [description]
90
+ * @return {[type]} [description]
91
+ */
92
+ protected setViewCanonical(side: string, transition?: boolean): void;
93
+ protected setViewInline(view: InlineView, transition?: boolean): void;
94
+ private setViewPolar;
95
+ }
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Abstract base class for controls.
3
+ *
4
+ * @abstract
5
+ * @augments EventDispatcher
6
+ */
7
+ export class Controls extends EventDispatcher<import("three").Event> {
8
+ /**
9
+ * Constructs a new controls instance.
10
+ *
11
+ * @param {Object3D} object - The object that is managed by the controls.
12
+ * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
13
+ */
14
+ constructor(object: Object3D, domElement?: HTMLDOMElement | null);
15
+ /**
16
+ * The object that is managed by the controls.
17
+ *
18
+ * @type {Object3D}
19
+ */
20
+ object: Object3D;
21
+ /**
22
+ * The HTML element used for event listeners.
23
+ *
24
+ * @type {?HTMLDOMElement}
25
+ * @default null
26
+ */
27
+ domElement: HTMLDOMElement | null;
28
+ /**
29
+ * Whether the controls responds to user input or not.
30
+ *
31
+ * @type {boolean}
32
+ * @default true
33
+ */
34
+ enabled: boolean;
35
+ /**
36
+ * The internal state of the controls.
37
+ *
38
+ * @type {number}
39
+ * @default -1
40
+ */
41
+ state: number;
42
+ /**
43
+ * This object defines the keyboard input of the controls.
44
+ *
45
+ * @type {Object}
46
+ */
47
+ keys: Object;
48
+ /**
49
+ * This object defines what type of actions are assigned to the available mouse buttons.
50
+ * It depends on the control implementation what kind of mouse buttons and actions are supported.
51
+ *
52
+ * @type {{LEFT: ?number, MIDDLE: ?number, RIGHT: ?number}}
53
+ */
54
+ mouseButtons: {
55
+ LEFT: number | null;
56
+ MIDDLE: number | null;
57
+ RIGHT: number | null;
58
+ };
59
+ /**
60
+ * This object defines what type of actions are assigned to what kind of touch interaction.
61
+ * It depends on the control implementation what kind of touch interaction and actions are supported.
62
+ *
63
+ * @type {{ONE: ?number, TWO: ?number}}
64
+ */
65
+ touches: {
66
+ ONE: number | null;
67
+ TWO: number | null;
68
+ };
69
+ /**
70
+ * Connects the controls to the DOM. This method has so called "side effects" since
71
+ * it adds the module's event listeners to the DOM.
72
+ */
73
+ connect(): void;
74
+ /**
75
+ * Disconnects the controls from the DOM.
76
+ */
77
+ disconnect(): void;
78
+ /**
79
+ * Call this method if you no longer want use to the controls. It frees all internal
80
+ * resources and removes all event listeners.
81
+ */
82
+ dispose(): void;
83
+ /**
84
+ * Controls should implement this method if they have to update their internal state
85
+ * per simulation step.
86
+ *
87
+ * @param {number} [delta] - The time delta in seconds.
88
+ */
89
+ update(): void;
90
+ }
91
+ import { EventDispatcher } from 'three';
@@ -0,0 +1,50 @@
1
+ import { type TreeNode, WorldTree } from '../tree/WorldTree.js';
2
+ import { type IViewer } from '../../IViewer.js';
3
+ import { Extension } from './Extension.js';
4
+ export declare enum VisualDiffMode {
5
+ PLAIN = 0,
6
+ COLORED = 1
7
+ }
8
+ export interface DiffResult {
9
+ unchanged: Array<TreeNode>;
10
+ added: Array<TreeNode>;
11
+ removed: Array<TreeNode>;
12
+ modified: Array<Array<TreeNode>>;
13
+ }
14
+ export declare class DiffExtension extends Extension {
15
+ get enabled(): boolean;
16
+ set enabled(value: boolean);
17
+ protected tree: WorldTree;
18
+ private addedMaterialMesh;
19
+ private changedNewMaterialMesh;
20
+ private changedOldMaterialMesh;
21
+ private removedMaterialMesh;
22
+ private addedMaterialPoint;
23
+ private changedNewMaterialPoint;
24
+ private changedOldMaterialPoint;
25
+ private removedMaterialPoint;
26
+ private addedMaterials;
27
+ private changedOldMaterials;
28
+ private changedNewMaterials;
29
+ private removedMaterials;
30
+ private _materialGroups;
31
+ private _visualDiff;
32
+ private _diffTime;
33
+ private _diffMode;
34
+ constructor(viewer: IViewer);
35
+ private dynamicallyLoadedDiffResources;
36
+ diff(urlA: string, urlB: string, mode: VisualDiffMode, authToken?: string): Promise<DiffResult>;
37
+ /** Currently, the diff does not store the existing materials. We can do that if we need to */
38
+ undiff(): Promise<void>;
39
+ private buildIdMaps;
40
+ private getDiff;
41
+ private diffIterative;
42
+ updateVisualDiff(time?: number, mode?: VisualDiffMode): void;
43
+ private setDiffTime;
44
+ private buildMaterialGroups;
45
+ private resetMaterialGroups;
46
+ private getVisualDiffResult;
47
+ private getColoredMaterialGroups;
48
+ private getPlainMaterialGroups;
49
+ private getBatchesSubgroups;
50
+ }
@@ -0,0 +1,17 @@
1
+ import { Extension } from './Extension.js';
2
+ export declare enum ExplodeEvent {
3
+ Finshed = "explode-finished"
4
+ }
5
+ export interface ViewModeEventPayload {
6
+ [ExplodeEvent.Finshed]: void;
7
+ }
8
+ export declare class ExplodeExtension extends Extension {
9
+ protected _enabled: boolean;
10
+ get enabled(): boolean;
11
+ set enabled(value: boolean);
12
+ private explodeTime;
13
+ private explodeRange;
14
+ onEarlyUpdate(): void;
15
+ setExplode(time: number): void;
16
+ private explode;
17
+ }
@@ -0,0 +1,15 @@
1
+ import type { Constructor } from 'type-fest';
2
+ import { type IViewer } from '../../index.js';
3
+ import EventEmitter from '../EventEmitter.js';
4
+ export declare class Extension extends EventEmitter {
5
+ get inject(): Array<Constructor<Extension>>;
6
+ protected viewer: IViewer;
7
+ protected _enabled: boolean;
8
+ get enabled(): boolean;
9
+ set enabled(value: boolean);
10
+ constructor(viewer: IViewer, ...args: Extension[]);
11
+ onEarlyUpdate(deltaTime?: number): void;
12
+ onLateUpdate(deltaTime?: number): void;
13
+ onRender(): void;
14
+ onResize(): void;
15
+ }