@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,64 @@
1
+ import { Box3, Camera, Plane, Raycaster, Vector2, Vector3, type Intersection } from 'three';
2
+ import { Measurement } from './Measurement.js';
3
+ import { ExtendedMeshIntersection } from '../../objects/KingSyRaycaster.js';
4
+ export declare class AreaMeasurement extends Measurement {
5
+ /** We store all gizmos here */
6
+ private pointGizmos;
7
+ /** This stores the last touched point position and normal */
8
+ private surfacePoint;
9
+ private surfaceNormal;
10
+ /** The plane params defined by the first placed point */
11
+ private planeOrigin;
12
+ private planeNormal;
13
+ /** The location of the area text label */
14
+ private labelPoint;
15
+ /** Various point list. A bit exhaustive, but safer */
16
+ private pointIndex;
17
+ /** The selected points in 3D space */
18
+ private points;
19
+ /** The selected points projected on the measurement plane */
20
+ private measuredPoints;
21
+ /** The points defining the fill polygon. Also projected on the measurement plane */
22
+ private polygonPoints;
23
+ private fillPolygon;
24
+ private snapDistance;
25
+ set isVisible(value: boolean);
26
+ get bounds(): Box3;
27
+ constructor();
28
+ /** Frame */
29
+ frameUpdate(camera: Camera, size: Vector2, bounds: Box3): void;
30
+ /** Called whenver the last touched location updates */
31
+ locationUpdated(point: Vector3, normal: Vector3): void;
32
+ /** Called whenver a location is selected for measuring*/
33
+ locationSelected(): void;
34
+ /** Adds a point to the area measurement */
35
+ addPoint(): number;
36
+ /** Removes point from the measurement */
37
+ removePoint(): number;
38
+ /** Auto completes the measurement by joining with the first point */
39
+ autoFinish(): void;
40
+ /** Area measurement's custom snap function. We snap to the first point by design */
41
+ snap(ndcPoint: Vector2, _intersection: ExtendedMeshIntersection, outPoint: Vector3, outNormal: Vector3): boolean;
42
+ /** Updates the gizmo components based on it's state and values */
43
+ update(): Promise<void>;
44
+ /** Updates the area label location using the polyong's pole of innaccessibility
45
+ * We do this to avoid having the label outside of the polygin in case of concave polygons
46
+ * It works great for concave polygons, but not so great for convex regular ones
47
+ */
48
+ private updateLabelLocation;
49
+ /** Updates the measured polygon's geometry */
50
+ private updateFillPolygon;
51
+ /** Measurement's custom picking. We don't test the polygon when casting */
52
+ raycast(raycaster: Raycaster, intersects: Array<Intersection>): void;
53
+ highlight(value: boolean): void;
54
+ updateClippingPlanes(planes: Plane[]): void;
55
+ /** Had to make my own. Three's Hesse normal form trips me up */
56
+ private projectOnPlane;
57
+ /** Selects the vector components to use based on the measurement plane.
58
+ * Don't really like it, but it works
59
+ */
60
+ private chooseProjectionAxes;
61
+ /** Area calculation */
62
+ private shoelaceArea;
63
+ private shoelaceArea3D;
64
+ }
@@ -0,0 +1,34 @@
1
+ import { Box3, Camera, Object3D, Plane, Raycaster, Vector2, Vector3, type Intersection } from 'three';
2
+ import { ExtendedMeshIntersection } from '../../objects/KingSyRaycaster.js';
3
+ export declare enum MeasurementState {
4
+ HIDDEN = 0,
5
+ DANGLING_START = 1,
6
+ DANGLING_END = 2,
7
+ COMPLETE = 3
8
+ }
9
+ export declare abstract class Measurement extends Object3D {
10
+ startPoint: Vector3;
11
+ endPoint: Vector3;
12
+ startNormal: Vector3;
13
+ endNormal: Vector3;
14
+ startLineLength: number;
15
+ endLineLength: number;
16
+ value: number;
17
+ units: string;
18
+ precision: number;
19
+ protected _state: MeasurementState;
20
+ protected renderingCamera: Camera | null;
21
+ protected renderingSize: Vector2;
22
+ set state(value: MeasurementState);
23
+ get state(): MeasurementState;
24
+ abstract set isVisible(value: boolean);
25
+ get bounds(): Box3;
26
+ frameUpdate(camera: Camera | null, size: Vector2, _bounds?: Box3): void;
27
+ abstract update(): Promise<void>;
28
+ abstract raycast(_raycaster: Raycaster, _intersects: Array<Intersection>): void;
29
+ abstract highlight(_value: boolean): void;
30
+ abstract updateClippingPlanes(_planes: Plane[]): void;
31
+ abstract locationUpdated(point?: Vector3, normal?: Vector3, ndcScreen?: Vector2): void;
32
+ abstract locationSelected(point?: Vector3, normal?: Vector3, ndcScreen?: Vector2): void;
33
+ snap?(ndcPoint: Vector2, intersection: ExtendedMeshIntersection, outPoint: Vector3, outNormal: Vector3): boolean;
34
+ }
@@ -0,0 +1,42 @@
1
+ import { Camera, Group, Plane, Quaternion, Raycaster, Vector2, Vector3, type Intersection } from 'three';
2
+ export interface MeasurementPointGizmoStyle {
3
+ dashedLine?: boolean;
4
+ normalIndicatorPixelSize?: number;
5
+ normalIndicatorColor?: number;
6
+ normalIndicatorOpacity?: number;
7
+ lineColor?: number;
8
+ lineOpacity?: number;
9
+ pointColor?: number;
10
+ pointOpacity?: number;
11
+ textColor?: number;
12
+ textOpacity?: number;
13
+ textPixelHeight?: number;
14
+ pointPixelHeight?: number;
15
+ }
16
+ export declare class MeasurementPointGizmo extends Group {
17
+ private normalIndicator;
18
+ private normalIndicatorBuffer;
19
+ private normalIndicatorNormal;
20
+ private normalIndicatorTangent;
21
+ private normalIndicatorBitangent;
22
+ private line;
23
+ private point;
24
+ private text;
25
+ private _style;
26
+ set style(value: MeasurementPointGizmoStyle);
27
+ set highlight(value: boolean);
28
+ private getNormalIndicatorMaterial;
29
+ private getLineMaterial;
30
+ private getPointMaterial;
31
+ private getTextMaterial;
32
+ constructor(style?: MeasurementPointGizmoStyle);
33
+ enable(normalIndicator: boolean, line: boolean, point: boolean, text: boolean): void;
34
+ frameUpdate(camera: Camera, size: Vector2): void;
35
+ updateNormalIndicator(position: Vector3, normal: Vector3): void;
36
+ updatePoint(position: Vector3): void;
37
+ updateLine(points: Vector3[]): void;
38
+ updateText(value: string, position?: Vector3, quaternion?: Quaternion, scale?: Vector3): Promise<void>;
39
+ updateStyle(): void;
40
+ raycast(raycaster: Raycaster, intersects: Array<Intersection>): void;
41
+ updateClippingPlanes(planes: Plane[]): void;
42
+ }
@@ -0,0 +1,71 @@
1
+ import KingSyRenderer from '../../KingSyRenderer.js';
2
+ import { type IViewer } from '../../../IViewer.js';
3
+ import { Plane, Raycaster, Vector2, Vector3 } from 'three';
4
+ import { Measurement } from './Measurement.js';
5
+ import { ExtendedMeshIntersection } from '../../objects/KingSyRaycaster.js';
6
+ import { Extension } from '../Extension.js';
7
+ import { CameraController } from '../CameraController.js';
8
+ export declare enum MeasurementType {
9
+ PERPENDICULAR = 0,
10
+ POINTTOPOINT = 1,
11
+ AREA = 2,
12
+ POINT = 3
13
+ }
14
+ export interface MeasurementOptions {
15
+ visible: boolean;
16
+ type?: MeasurementType;
17
+ vertexSnap?: boolean;
18
+ units?: string;
19
+ precision?: number;
20
+ chain?: boolean;
21
+ }
22
+ export declare class MeasurementsExtension extends Extension {
23
+ protected cameraProvider: CameraController;
24
+ get inject(): (typeof CameraController)[];
25
+ protected renderer: KingSyRenderer;
26
+ protected measurements: Measurement[];
27
+ protected _activeMeasurement: Measurement | null;
28
+ protected _selectedMeasurement: Measurement | null;
29
+ protected raycaster: Raycaster;
30
+ protected _options: MeasurementOptions;
31
+ private _frameLock;
32
+ private _paused;
33
+ private _sceneHit;
34
+ private pointBuff;
35
+ private normalBuff;
36
+ private screenBuff0;
37
+ private screenBuff1;
38
+ get enabled(): boolean;
39
+ set enabled(value: boolean);
40
+ get options(): MeasurementOptions;
41
+ set options(options: MeasurementOptions);
42
+ get selectedMeasurement(): Measurement | null;
43
+ get activeMeasurement(): Measurement | null;
44
+ constructor(viewer: IViewer, cameraProvider: CameraController);
45
+ onLateUpdate(): void;
46
+ onResize(): void;
47
+ protected onPointerMove(data: Vector2 & {
48
+ event: Event;
49
+ }): void;
50
+ protected onPointerClick(data: {
51
+ event: PointerEvent;
52
+ multiSelect: boolean;
53
+ } & Vector2): void;
54
+ protected onPointerDoubleClick(data: Vector2 & {
55
+ event: PointerEvent;
56
+ multiSelect: boolean;
57
+ }): void;
58
+ protected autoLazerMeasure(data: Vector2): void;
59
+ protected startMeasurement(): Measurement;
60
+ protected cancelMeasurement(): void;
61
+ protected finishMeasurement(): void;
62
+ removeMeasurement(): void;
63
+ clearMeasurements(): void;
64
+ protected flashMeasurement(): void;
65
+ protected pickMeasurement(data: Vector2): Measurement | null;
66
+ protected selectMeasurement(measurement: Measurement, value: boolean): void;
67
+ protected snap(intersection: ExtendedMeshIntersection, outPoint: Vector3, outNormal: Vector3): void;
68
+ protected updateClippingPlanes(planes: Plane[]): void;
69
+ protected applyOptions(): void;
70
+ fromMeasurementData(startPoint: Vector3, endPoint: Vector3): Promise<void>;
71
+ }
@@ -0,0 +1,19 @@
1
+ import { Box3, Camera, Plane, Raycaster, Vector2, Vector3, type Intersection } from 'three';
2
+ import { Measurement } from './Measurement.js';
3
+ export declare class PerpendicularMeasurement extends Measurement {
4
+ private startGizmo;
5
+ private endGizmo;
6
+ private normalIndicatorPixelSize;
7
+ flipStartNormal: boolean;
8
+ midPoint: Vector3;
9
+ set isVisible(value: boolean);
10
+ get bounds(): Box3;
11
+ constructor();
12
+ frameUpdate(camera: Camera, size: Vector2, bounds: Box3): void;
13
+ locationUpdated(point: Vector3, normal: Vector3): void;
14
+ locationSelected(): void;
15
+ update(): Promise<void>;
16
+ raycast(raycaster: Raycaster, intersects: Array<Intersection>): void;
17
+ highlight(value: boolean): void;
18
+ updateClippingPlanes(planes: Plane[]): void;
19
+ }
@@ -0,0 +1,25 @@
1
+ import { Box3, Camera, Plane, Raycaster, Vector2, Vector3, type Intersection } from 'three';
2
+ import { Measurement } from './Measurement.js';
3
+ import { KingSyText } from '../../objects/KingSyText.js';
4
+ import { MeasurementPointGizmo } from './MeasurementPointGizmo.js';
5
+ export declare class PointMeasurement extends Measurement {
6
+ protected gizmo: MeasurementPointGizmo;
7
+ protected xLabel: KingSyText;
8
+ protected yLabel: KingSyText;
9
+ protected zLabel: KingSyText;
10
+ protected xLabelPosition: Vector3;
11
+ protected yLabelPosition: Vector3;
12
+ protected zLabelPosition: Vector3;
13
+ protected readonly pixelsOffX: number;
14
+ protected readonly pixelsOffY: number;
15
+ set isVisible(value: boolean);
16
+ constructor();
17
+ frameUpdate(camera: Camera, size: Vector2, bounds: Box3): void;
18
+ locationUpdated(point: Vector3, normal: Vector3): void;
19
+ locationSelected(): void;
20
+ protected updateLabelPositions(): void;
21
+ update(): Promise<void>;
22
+ raycast(raycaster: Raycaster, intersects: Array<Intersection>): void;
23
+ highlight(value: boolean): void;
24
+ updateClippingPlanes(planes: Plane[]): void;
25
+ }
@@ -0,0 +1,15 @@
1
+ import { Box3, Camera, Plane, Raycaster, Vector2, Vector3, type Intersection } from 'three';
2
+ import { Measurement } from './Measurement.js';
3
+ export declare class PointToPointMeasurement extends Measurement {
4
+ private startGizmo;
5
+ private endGizmo;
6
+ set isVisible(value: boolean);
7
+ constructor();
8
+ frameUpdate(camera: Camera, size: Vector2, bounds: Box3): void;
9
+ locationUpdated(point: Vector3, normal: Vector3): void;
10
+ locationSelected(): void;
11
+ update(): Promise<void>;
12
+ raycast(raycaster: Raycaster, intersects: Array<Intersection>): void;
13
+ highlight(value: boolean): void;
14
+ updateClippingPlanes(planes: Plane[]): void;
15
+ }
@@ -0,0 +1,45 @@
1
+ import { Plane } from 'three';
2
+ import { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';
3
+ import { Extension } from '../Extension.js';
4
+ import { SectionTool, type IViewer } from '../../../index.js';
5
+ export declare enum PlaneId {
6
+ POSITIVE_X = "POSITIVE_X",
7
+ POSITIVE_Y = "POSITIVE_Y",
8
+ POSITIVE_Z = "POSITIVE_Z",
9
+ NEGATIVE_X = "NEGATIVE_X",
10
+ NEGATIVE_Y = "NEGATIVE_Y",
11
+ NEGATIVE_Z = "NEGATIVE_Z"
12
+ }
13
+ export interface PlaneOutline {
14
+ renderable: LineSegments2;
15
+ }
16
+ export declare class SectionOutlines extends Extension {
17
+ protected sectionProvider: SectionTool;
18
+ get inject(): (typeof SectionTool)[];
19
+ private static readonly OUTLINE_Z_OFFSET;
20
+ private static readonly INITIAL_BUFFER_SIZE;
21
+ private tmpVec;
22
+ private up;
23
+ private down;
24
+ private left;
25
+ private right;
26
+ private forward;
27
+ private back;
28
+ private planeOutlines;
29
+ private lastSectionPlanes;
30
+ private sectionPlanesChanged;
31
+ constructor(viewer: IViewer, sectionProvider: SectionTool);
32
+ private getPlaneOutline;
33
+ get enabled(): boolean;
34
+ set enabled(value: boolean);
35
+ sectionUpdated(planes: Plane[]): void;
36
+ requestUpdate(force?: boolean): void;
37
+ private updatePlaneOutline;
38
+ private createPlaneOutline;
39
+ private onSectionBoxDragStart;
40
+ private onSectionBoxDragEnd;
41
+ private setSectionPlaneChanged;
42
+ private updateOutlines;
43
+ private resizeGeometryBuffer;
44
+ private getPlaneId;
45
+ }
@@ -0,0 +1,219 @@
1
+ import { Group, Box3, BufferGeometry, Mesh, Vector3, Plane, Raycaster, Object3D, Matrix4, Vector2, Face, PlaneGeometry } from 'three';
2
+ import { TransformControls } from '../TransformControls.js';
3
+ import { OBB } from 'three/examples/jsm/math/OBB.js';
4
+ import { type IViewer } from '../../../IViewer.js';
5
+ import { CameraController } from '../CameraController.js';
6
+ import { Vector3Like } from '../../batching/BatchObject.js';
7
+ import { LineSegments2 } from 'three/examples/jsm/lines/LineSegments2.js';
8
+ import KingSyStandardMaterial from '../../materials/KingSyStandardMaterial.js';
9
+ import { Extension } from '../Extension.js';
10
+ export declare enum SectionToolEvent {
11
+ DragStart = "section-box-drag-start",
12
+ DragEnd = "section-box-drag-end",
13
+ Updated = "section-box-changed"
14
+ }
15
+ export interface SectionToolEventPayload {
16
+ [SectionToolEvent.DragStart]: void;
17
+ [SectionToolEvent.DragEnd]: void;
18
+ [SectionToolEvent.Updated]: Plane[];
19
+ }
20
+ export declare class SectionTool extends Extension {
21
+ protected cameraProvider: CameraController;
22
+ get inject(): (typeof CameraController)[];
23
+ /** This is our data model. All we need is an OBB */
24
+ protected obb: OBB;
25
+ /** The planes that will send out as clipping planes */
26
+ protected planes: Plane[];
27
+ /** The six planes of the unit cube */
28
+ protected localPlanes: Plane[];
29
+ /** Convenience LUT for when clicking on the box faces */
30
+ protected cubeFaces: {
31
+ '256': {
32
+ verts: number[];
33
+ axis: string;
34
+ normal: Vector3;
35
+ };
36
+ '152': {
37
+ verts: number[];
38
+ axis: string;
39
+ normal: Vector3;
40
+ };
41
+ '407': {
42
+ verts: number[];
43
+ axis: string;
44
+ normal: Vector3;
45
+ };
46
+ '703': {
47
+ verts: number[];
48
+ axis: string;
49
+ normal: Vector3;
50
+ };
51
+ '327': {
52
+ verts: number[];
53
+ axis: string;
54
+ normal: Vector3;
55
+ };
56
+ '726': {
57
+ verts: number[];
58
+ axis: string;
59
+ normal: Vector3;
60
+ };
61
+ '450': {
62
+ verts: number[];
63
+ axis: string;
64
+ normal: Vector3;
65
+ };
66
+ '051': {
67
+ verts: number[];
68
+ axis: string;
69
+ normal: Vector3;
70
+ };
71
+ '312': {
72
+ verts: number[];
73
+ axis: string;
74
+ normal: Vector3;
75
+ };
76
+ '013': {
77
+ verts: number[];
78
+ axis: string;
79
+ normal: Vector3;
80
+ };
81
+ '546': {
82
+ verts: number[];
83
+ axis: string;
84
+ normal: Vector3;
85
+ };
86
+ '647': {
87
+ verts: number[];
88
+ axis: string;
89
+ normal: Vector3;
90
+ };
91
+ };
92
+ /** The root object */
93
+ protected display: Group;
94
+ /** We only use this for hit testing to select it's faces */
95
+ protected boxHitMesh: Mesh;
96
+ /** The displayed box as an outline */
97
+ protected boxOutline: LineSegments2;
98
+ /** Mesh that gets shown across a box face when it gets selected */
99
+ protected facePlane: Mesh;
100
+ /** Anchor objects for the controls. Not displayable */
101
+ protected translationRotationAnchor: Object3D;
102
+ protected scaleAnchor: Object3D;
103
+ /** Controls instances */
104
+ protected translateControls: TransformControls;
105
+ protected rotateControls: TransformControls;
106
+ protected scaleControls: TransformControls;
107
+ /** Sum state */
108
+ protected lastScale: Vector3 | null;
109
+ protected lastObbTransform: Matrix4;
110
+ protected draggingFace: Face | null;
111
+ /** Hit testing related */
112
+ protected raycaster: Raycaster;
113
+ protected dragging: boolean;
114
+ /** Manadatory property for all extensions */
115
+ get enabled(): boolean;
116
+ set enabled(value: boolean);
117
+ /** Hides all controls and the box outline but keeps the sections enabled */
118
+ get visible(): boolean;
119
+ set visible(value: boolean);
120
+ /** Gets the up to date section planes */
121
+ get sectionPlanes(): Plane[];
122
+ /**
123
+ *
124
+ */
125
+ constructor(viewer: IViewer, cameraProvider: CameraController);
126
+ /**
127
+ *
128
+ */
129
+ /** We use the viewer's frame update to enable/disable the translate and rotate controls
130
+ * The controls were not meant to be overlayed and working in multiple instance setups
131
+ * so their input events overlap. It's not the best solution in the world, but it's one
132
+ * that requires little to no source change
133
+ */
134
+ onEarlyUpdate(): void;
135
+ /** Explicit events for the selection tool */
136
+ on<T extends SectionToolEvent>(eventType: T, listener: (arg: SectionToolEventPayload[T]) => void): void;
137
+ /** Gets the OBB model */
138
+ getBox(): OBB;
139
+ /**
140
+ * Sets the OBB model and updates the tool gizmos and box
141
+ * @param targetBox The box to set. It accepts an aabb as well
142
+ * @param offset Optional offset
143
+ */
144
+ setBox(targetBox: OBB | Box3 | {
145
+ min: Vector3Like;
146
+ max: Vector3Like;
147
+ }, offset?: number): void;
148
+ /**
149
+ * Convenience method
150
+ */
151
+ toggle(): void;
152
+ /** Gets the transformation defined by the OBB */
153
+ getObbTransform(): Matrix4;
154
+ /**
155
+ * Creates the controls and all their gizmos
156
+ */
157
+ protected setupControls(): void;
158
+ /**
159
+ * Controls, outline and hitbox update based on the OBB model
160
+ */
161
+ protected updateVisual(): void;
162
+ /**
163
+ * Triggers when dragging starts/stops
164
+ * @param event Controls event
165
+ */
166
+ protected draggingHandler(event: any): void;
167
+ /** Triggers whenever there is a change in the controls and their gizmos
168
+ * This is where the model OBB gets updated according to controls changes.
169
+ * Each control type writes it's data in the anchor's matching property. So:
170
+ * - Translate control write to it's anchor 'position'
171
+ * - Rotate control writes to it's anchor 'quaternion'
172
+ * - Scale control writes to it's anchor 'scale
173
+ */
174
+ protected changeHandler(): void;
175
+ /**
176
+ * Handler used for detecting when we click on the box faces
177
+ * @param args NDC pointer coords + original event + multiselect
178
+ * @returns
179
+ */
180
+ protected clickHandler(args: Vector2 & {
181
+ event: PointerEvent;
182
+ multiSelect: boolean;
183
+ }): void;
184
+ /**
185
+ * Computes the final box planes from the unit cube planes
186
+ * transformed against the current OBB model
187
+ */
188
+ protected updatePlanes(): void;
189
+ /**
190
+ * Creates the plane mesh that will be shown when selecting a box face
191
+ * It's RTE enabled
192
+ */
193
+ protected createFacePlane(): Mesh<PlaneGeometry, KingSyStandardMaterial>;
194
+ /**
195
+ * Updates the scale control and plane mesh when a cube face is selected
196
+ * @param face The face we're pulling/pushing
197
+ * @returns void
198
+ */
199
+ protected updateFaceControls(face: Face | null): void;
200
+ /** Creates the geometry for the visible outline of the section tool */
201
+ protected createOutline(): LineSegments2;
202
+ /** Updates the section tool outline by updating it's vertices
203
+ * We chose to do it this way in order have RTE working
204
+ */
205
+ protected updateOutline(): void;
206
+ /** Creates a unit cube geometry instance*/
207
+ protected createCubeGeometry(): BufferGeometry;
208
+ /** Restes the gizmos. Honestly not sure if it does anything meaningfull */
209
+ protected reset(): void;
210
+ /** Type guards */
211
+ protected isAABB(box: Box3 | {
212
+ min: Vector3Like;
213
+ max: Vector3Like;
214
+ } | OBB): box is Box3;
215
+ protected isOBB(box: Box3 | {
216
+ min: Vector3Like;
217
+ max: Vector3Like;
218
+ } | OBB): box is OBB;
219
+ }
@@ -0,0 +1,55 @@
1
+ import { WorldTree } from '../tree/WorldTree.js';
2
+ export declare class PropertyManager {
3
+ private propCache;
4
+ /**
5
+ *
6
+ * @param resourceUrl The target resource's url. This must be an **object url** or null. If null, it will return the props for the whole scene.
7
+ * @param bypassCache Forces a full rescan if set to true.
8
+ * @returns a list of property infos containing basic information for filtering purposes.
9
+ */
10
+ getProperties(tree: WorldTree, resourceUrl?: string | null, bypassCache?: boolean): Promise<PropertyInfo[]>;
11
+ }
12
+ /**
13
+ * PropertyInfo types represent all of the properties that you can filter on in the viewer
14
+ */
15
+ export interface PropertyInfo {
16
+ /**
17
+ * Property identifier, flattened
18
+ */
19
+ key: string;
20
+ /**
21
+ * Total number of objects that have this property
22
+ */
23
+ objectCount: number;
24
+ type: 'number' | 'string';
25
+ }
26
+ export interface NumericPropertyInfo extends PropertyInfo {
27
+ type: 'number';
28
+ /**
29
+ * Absolute min/max values that are available for this property
30
+ */
31
+ min: number;
32
+ max: number;
33
+ /**
34
+ * An array of pairs of object IDs and their actual values for that property
35
+ */
36
+ valueGroups: {
37
+ value: number;
38
+ id: string;
39
+ }[];
40
+ /**
41
+ * User defined/filtered min/max that is bound within min/max above
42
+ */
43
+ passMin: number | null;
44
+ passMax: number | null;
45
+ }
46
+ export interface StringPropertyInfo extends PropertyInfo {
47
+ type: 'string';
48
+ /**
49
+ * An array of pairs of object IDs and their actual values for that property
50
+ */
51
+ valueGroups: {
52
+ value: string;
53
+ ids: string[];
54
+ }[];
55
+ }
@@ -0,0 +1,47 @@
1
+ import { Vector2 } from 'three';
2
+ import EventEmitter from '../EventEmitter.js';
3
+ export declare enum InputEvent {
4
+ PointerDown = "pointer-down",
5
+ PointerUp = "pointer-up",
6
+ PointerMove = "pointer-move",
7
+ PointerCancel = "pointer-cancel",
8
+ Wheel = "wheel",
9
+ Click = "click",
10
+ DoubleClick = "double-click",
11
+ KeyUp = "key-up"
12
+ }
13
+ export interface InputEventPayload {
14
+ [InputEvent.PointerDown]: Vector2 & {
15
+ event: PointerEvent;
16
+ };
17
+ [InputEvent.PointerUp]: Vector2 & {
18
+ event: PointerEvent;
19
+ };
20
+ [InputEvent.PointerMove]: Vector2 & {
21
+ event: PointerEvent;
22
+ };
23
+ [InputEvent.PointerCancel]: void;
24
+ [InputEvent.Wheel]: WheelEvent;
25
+ [InputEvent.Click]: Vector2 & {
26
+ event: PointerEvent;
27
+ multiSelect: boolean;
28
+ };
29
+ [InputEvent.DoubleClick]: Vector2 & {
30
+ event: PointerEvent;
31
+ multiSelect: boolean;
32
+ };
33
+ [InputEvent.KeyUp]: KeyboardEvent;
34
+ }
35
+ export default class Input extends EventEmitter {
36
+ private static readonly MAX_DOUBLE_CLICK_TIMING;
37
+ private static readonly MIN_CLICK_TIMING;
38
+ private tapTimeout;
39
+ private lastTap;
40
+ private lastClick;
41
+ private touchLocation;
42
+ private container;
43
+ constructor(container: HTMLElement);
44
+ on<T extends InputEvent>(eventType: T, listener: (arg: InputEventPayload[T]) => void): void;
45
+ _getNormalisedClickPosition(e: MouseEvent | Touch): Vector2;
46
+ dispose(): void;
47
+ }
@@ -0,0 +1,32 @@
1
+ import { type GeometryData } from '../converter/Geometry.js';
2
+ import type { NodeData } from '../tree/WorldTree.js';
3
+ export declare enum KingSyType {
4
+ View3D = "View3D",
5
+ BlockInstance = "BlockInstance",
6
+ Pointcloud = "Pointcloud",
7
+ Brep = "Brep",
8
+ Mesh = "Mesh",
9
+ Point = "Point",
10
+ Line = "Line",
11
+ Polyline = "Polyline",
12
+ Box = "Box",
13
+ Polycurve = "Polycurve",
14
+ Curve = "Curve",
15
+ Circle = "Circle",
16
+ Arc = "Arc",
17
+ Ellipse = "Ellipse",
18
+ RevitInstance = "RevitInstance",
19
+ Text = "Text",
20
+ Transform = "Transform",
21
+ InstanceProxy = "InstanceProxy",
22
+ RenderMaterialProxy = "RenderMaterialProxy",
23
+ ColorProxy = "ColorProxy",
24
+ Region = "Region",
25
+ Unknown = "Unknown"
26
+ }
27
+ export declare const KingSyTypeAllRenderables: KingSyType[];
28
+ export declare abstract class GeometryConverter {
29
+ abstract getKingSyType(node: NodeData): KingSyType;
30
+ abstract convertNodeToGeometryData(node: NodeData): GeometryData | null;
31
+ abstract disposeNodeGeometryData(node: NodeData): void;
32
+ }