angular-three-soba 2.14.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (179) hide show
  1. package/abstractions/lib/catmull-rom-line.d.ts +117 -117
  2. package/abstractions/lib/edges.d.ts +126 -126
  3. package/abstractions/lib/grid.d.ts +15 -15
  4. package/abstractions/lib/line.d.ts +1 -1
  5. package/abstractions/lib/prism-geometry.d.ts +4 -4
  6. package/abstractions/lib/rounded-box.d.ts +1 -1
  7. package/abstractions/lib/text-3d.d.ts +22 -22
  8. package/abstractions/lib/text.d.ts +1 -1
  9. package/cameras/lib/cube-camera.d.ts +1 -1
  10. package/cameras/lib/orthographic-camera.d.ts +1 -1
  11. package/cameras/lib/perspective-camera.d.ts +1 -1
  12. package/controls/index.d.ts +0 -9
  13. package/controls/lib/camera-controls.d.ts +1 -1
  14. package/controls/lib/orbit-controls.d.ts +1 -1
  15. package/fesm2022/angular-three-soba-abstractions.mjs +41 -52
  16. package/fesm2022/angular-three-soba-abstractions.mjs.map +1 -1
  17. package/fesm2022/angular-three-soba-cameras.mjs +12 -15
  18. package/fesm2022/angular-three-soba-cameras.mjs.map +1 -1
  19. package/fesm2022/angular-three-soba-controls.mjs +16 -24
  20. package/fesm2022/angular-three-soba-controls.mjs.map +1 -1
  21. package/fesm2022/angular-three-soba-gizmos.mjs +59 -60
  22. package/fesm2022/angular-three-soba-gizmos.mjs.map +1 -1
  23. package/fesm2022/angular-three-soba-loaders.mjs +3 -3
  24. package/fesm2022/angular-three-soba-loaders.mjs.map +1 -1
  25. package/fesm2022/angular-three-soba-materials.mjs +27 -35
  26. package/fesm2022/angular-three-soba-materials.mjs.map +1 -1
  27. package/fesm2022/angular-three-soba-misc.mjs +27 -29
  28. package/fesm2022/angular-three-soba-misc.mjs.map +1 -1
  29. package/fesm2022/angular-three-soba-performances.mjs +31 -34
  30. package/fesm2022/angular-three-soba-performances.mjs.map +1 -1
  31. package/fesm2022/angular-three-soba-shaders.mjs.map +1 -1
  32. package/fesm2022/angular-three-soba-staging.mjs +91 -105
  33. package/fesm2022/angular-three-soba-staging.mjs.map +1 -1
  34. package/fesm2022/angular-three-soba-stats.mjs +3 -3
  35. package/fesm2022/angular-three-soba-stats.mjs.map +1 -1
  36. package/gizmos/lib/gizmo-helper/gizmo-viewport.d.ts +1 -1
  37. package/gizmos/lib/pivot-controls/axis-arrow.d.ts +1 -1
  38. package/gizmos/lib/pivot-controls/axis-rotator.d.ts +1 -1
  39. package/gizmos/lib/pivot-controls/pivot-controls.d.ts +1 -1
  40. package/gizmos/lib/pivot-controls/plane-slider.d.ts +1 -1
  41. package/gizmos/lib/pivot-controls/scaling-sphere.d.ts +1 -1
  42. package/gizmos/lib/transform-controls.d.ts +2 -2
  43. package/materials/lib/custom-shader-material.d.ts +2 -2
  44. package/materials/lib/mesh-portal-material.d.ts +9 -9
  45. package/materials/lib/mesh-refraction-material.d.ts +2 -2
  46. package/materials/lib/mesh-transmission-material.d.ts +1 -1
  47. package/misc/lib/computed-attribute.d.ts +6 -6
  48. package/misc/lib/decal.d.ts +1 -1
  49. package/misc/lib/html/html.d.ts +2 -2
  50. package/misc/lib/sampler.d.ts +1 -1
  51. package/package.json +11 -37
  52. package/performances/lib/instances/instances.d.ts +5 -5
  53. package/performances/lib/points/points.d.ts +10 -10
  54. package/performances/lib/segments/segments.d.ts +4 -4
  55. package/shaders/lib/mesh-refraction-material.d.ts +2 -2
  56. package/staging/lib/caustics.d.ts +1 -1
  57. package/staging/lib/center.d.ts +2 -2
  58. package/staging/lib/contact-shadows.d.ts +1 -1
  59. package/staging/lib/lightformer.d.ts +1 -1
  60. package/staging/lib/mask.d.ts +1 -1
  61. package/staging/lib/render-texture.d.ts +1 -1
  62. package/staging/lib/spot-light.d.ts +2 -2
  63. package/esm2022/abstractions/angular-three-soba-abstractions.mjs +0 -5
  64. package/esm2022/abstractions/index.mjs +0 -14
  65. package/esm2022/abstractions/lib/billboard.mjs +0 -69
  66. package/esm2022/abstractions/lib/catmull-rom-line.mjs +0 -76
  67. package/esm2022/abstractions/lib/cubic-bezier-line.mjs +0 -51
  68. package/esm2022/abstractions/lib/edges.mjs +0 -66
  69. package/esm2022/abstractions/lib/gradient-texture.mjs +0 -91
  70. package/esm2022/abstractions/lib/grid.mjs +0 -103
  71. package/esm2022/abstractions/lib/helper.mjs +0 -74
  72. package/esm2022/abstractions/lib/line.mjs +0 -123
  73. package/esm2022/abstractions/lib/prism-geometry.mjs +0 -46
  74. package/esm2022/abstractions/lib/quadratic-bezier-line.mjs +0 -73
  75. package/esm2022/abstractions/lib/rounded-box.mjs +0 -131
  76. package/esm2022/abstractions/lib/text-3d.mjs +0 -100
  77. package/esm2022/abstractions/lib/text.mjs +0 -86
  78. package/esm2022/angular-three-soba.mjs +0 -5
  79. package/esm2022/cameras/angular-three-soba-cameras.mjs +0 -5
  80. package/esm2022/cameras/index.mjs +0 -5
  81. package/esm2022/cameras/lib/camera-content.mjs +0 -14
  82. package/esm2022/cameras/lib/cube-camera.mjs +0 -102
  83. package/esm2022/cameras/lib/orthographic-camera.mjs +0 -131
  84. package/esm2022/cameras/lib/perspective-camera.mjs +0 -105
  85. package/esm2022/controls/angular-three-soba-controls.mjs +0 -5
  86. package/esm2022/controls/index.mjs +0 -9
  87. package/esm2022/controls/lib/camera-controls.mjs +0 -126
  88. package/esm2022/controls/lib/orbit-controls.mjs +0 -114
  89. package/esm2022/controls/lib/scroll-controls.mjs +0 -261
  90. package/esm2022/gizmos/angular-three-soba-gizmos.mjs +0 -5
  91. package/esm2022/gizmos/index.mjs +0 -6
  92. package/esm2022/gizmos/lib/gizmo-helper/gizmo-helper.mjs +0 -191
  93. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewcube.mjs +0 -304
  94. package/esm2022/gizmos/lib/gizmo-helper/gizmo-viewport.mjs +0 -348
  95. package/esm2022/gizmos/lib/pivot-controls/axis-arrow.mjs +0 -265
  96. package/esm2022/gizmos/lib/pivot-controls/axis-rotator.mjs +0 -264
  97. package/esm2022/gizmos/lib/pivot-controls/pivot-controls.mjs +0 -349
  98. package/esm2022/gizmos/lib/pivot-controls/plane-slider.mjs +0 -266
  99. package/esm2022/gizmos/lib/pivot-controls/scaling-sphere.mjs +0 -232
  100. package/esm2022/gizmos/lib/transform-controls.mjs +0 -177
  101. package/esm2022/index.mjs +0 -2
  102. package/esm2022/loaders/angular-three-soba-loaders.mjs +0 -5
  103. package/esm2022/loaders/index.mjs +0 -7
  104. package/esm2022/loaders/lib/fbx-loader.mjs +0 -13
  105. package/esm2022/loaders/lib/font-loader.mjs +0 -49
  106. package/esm2022/loaders/lib/gltf-loader.mjs +0 -51
  107. package/esm2022/loaders/lib/loader.mjs +0 -103
  108. package/esm2022/loaders/lib/progress.mjs +0 -51
  109. package/esm2022/loaders/lib/texture-loader.mjs +0 -32
  110. package/esm2022/materials/angular-three-soba-materials.mjs +0 -5
  111. package/esm2022/materials/index.mjs +0 -9
  112. package/esm2022/materials/lib/custom-shader-material.mjs +0 -67
  113. package/esm2022/materials/lib/mesh-distort-material.mjs +0 -43
  114. package/esm2022/materials/lib/mesh-portal-material.mjs +0 -294
  115. package/esm2022/materials/lib/mesh-reflector-material.mjs +0 -274
  116. package/esm2022/materials/lib/mesh-refraction-material.mjs +0 -140
  117. package/esm2022/materials/lib/mesh-transmission-material.mjs +0 -188
  118. package/esm2022/materials/lib/mesh-wobble-material.mjs +0 -43
  119. package/esm2022/materials/lib/point-material.mjs +0 -34
  120. package/esm2022/misc/angular-three-soba-misc.mjs +0 -5
  121. package/esm2022/misc/index.mjs +0 -15
  122. package/esm2022/misc/lib/animations.mjs +0 -71
  123. package/esm2022/misc/lib/bake-shadows.mjs +0 -24
  124. package/esm2022/misc/lib/computed-attribute.mjs +0 -51
  125. package/esm2022/misc/lib/constants.mjs +0 -5
  126. package/esm2022/misc/lib/decal.mjs +0 -142
  127. package/esm2022/misc/lib/deprecated.mjs +0 -15
  128. package/esm2022/misc/lib/depth-buffer.mjs +0 -35
  129. package/esm2022/misc/lib/fbo.mjs +0 -86
  130. package/esm2022/misc/lib/html/html-content.mjs +0 -322
  131. package/esm2022/misc/lib/html/html.mjs +0 -129
  132. package/esm2022/misc/lib/html/utils.mjs +0 -74
  133. package/esm2022/misc/lib/intersect.mjs +0 -49
  134. package/esm2022/misc/lib/preload.mjs +0 -58
  135. package/esm2022/misc/lib/sampler.mjs +0 -122
  136. package/esm2022/misc/lib/scale-factor.mjs +0 -29
  137. package/esm2022/performances/angular-three-soba-performances.mjs +0 -5
  138. package/esm2022/performances/index.mjs +0 -7
  139. package/esm2022/performances/lib/adaptive-dpr.mjs +0 -46
  140. package/esm2022/performances/lib/adaptive-events.mjs +0 -24
  141. package/esm2022/performances/lib/detailed.mjs +0 -53
  142. package/esm2022/performances/lib/instances/instances.mjs +0 -177
  143. package/esm2022/performances/lib/instances/position-mesh.mjs +0 -51
  144. package/esm2022/performances/lib/points/points.mjs +0 -272
  145. package/esm2022/performances/lib/points/position-point.mjs +0 -53
  146. package/esm2022/performances/lib/segments/segment-object.mjs +0 -9
  147. package/esm2022/performances/lib/segments/segments.mjs +0 -126
  148. package/esm2022/shaders/angular-three-soba-shaders.mjs +0 -5
  149. package/esm2022/shaders/index.mjs +0 -4
  150. package/esm2022/shaders/lib/grid-material.mjs +0 -81
  151. package/esm2022/shaders/lib/mesh-refraction-material.mjs +0 -163
  152. package/esm2022/shaders/lib/point-material.mjs +0 -24
  153. package/esm2022/staging/angular-three-soba-staging.mjs +0 -5
  154. package/esm2022/staging/index.mjs +0 -21
  155. package/esm2022/staging/lib/accumulative-shadows.mjs +0 -180
  156. package/esm2022/staging/lib/backdrop.mjs +0 -69
  157. package/esm2022/staging/lib/bb-anchor.mjs +0 -58
  158. package/esm2022/staging/lib/bounds.mjs +0 -282
  159. package/esm2022/staging/lib/camera-shake.mjs +0 -65
  160. package/esm2022/staging/lib/caustics.mjs +0 -184
  161. package/esm2022/staging/lib/center.mjs +0 -114
  162. package/esm2022/staging/lib/contact-shadows.mjs +0 -214
  163. package/esm2022/staging/lib/environment/environment.mjs +0 -344
  164. package/esm2022/staging/lib/environment/inject-environment.mjs +0 -184
  165. package/esm2022/staging/lib/float.mjs +0 -70
  166. package/esm2022/staging/lib/lightformer.mjs +0 -103
  167. package/esm2022/staging/lib/mask.mjs +0 -74
  168. package/esm2022/staging/lib/matcap-texture.mjs +0 -79
  169. package/esm2022/staging/lib/normal-texture.mjs +0 -79
  170. package/esm2022/staging/lib/randomized-lights.mjs +0 -100
  171. package/esm2022/staging/lib/render-texture.mjs +0 -202
  172. package/esm2022/staging/lib/sky.mjs +0 -86
  173. package/esm2022/staging/lib/spot-light.mjs +0 -445
  174. package/esm2022/staging/lib/stage.mjs +0 -232
  175. package/esm2022/stats/angular-three-soba-stats.mjs +0 -5
  176. package/esm2022/stats/index.mjs +0 -2
  177. package/esm2022/stats/lib/stats.mjs +0 -57
  178. package/esm2022/vanilla-exports/angular-three-soba-vanilla-exports.mjs +0 -5
  179. package/esm2022/vanilla-exports/index.mjs +0 -3
@@ -1,177 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, input, viewChild, } from '@angular/core';
2
- import { checkUpdate, extend, injectBeforeRender, NgtArgs, omit, pick, resolveRef, } from 'angular-three';
3
- import { setUpdateRange } from 'angular-three-soba/misc';
4
- import { mergeInputs } from 'ngxtension/inject-inputs';
5
- import { DynamicDrawUsage, InstancedBufferAttribute, InstancedMesh, Matrix4, Quaternion, Vector3 } from 'three';
6
- import { PositionMesh } from './position-mesh';
7
- import * as i0 from "@angular/core";
8
- const parentMatrix = new Matrix4();
9
- const instanceMatrix = new Matrix4();
10
- const tempMatrix = new Matrix4();
11
- const translation = new Vector3();
12
- const rotation = new Quaternion();
13
- const scale = new Vector3();
14
- export class NgtsInstance {
15
- constructor() {
16
- this.options = input({});
17
- this.instances = inject(NgtsInstances);
18
- this.positionMeshRef = viewChild.required('positionMesh');
19
- extend({ PositionMesh });
20
- effect((onCleanup) => {
21
- const cleanup = this.instances.subscribe(this.positionMeshRef().nativeElement);
22
- onCleanup(() => cleanup());
23
- });
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsInstance, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsInstance, isStandalone: true, selector: "ngts-instance", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionMeshRef", first: true, predicate: ["positionMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
27
- <ngt-position-mesh #positionMesh [instance]="instances.instancedMeshRef()" [parameters]="options()">
28
- <ng-content />
29
- </ngt-position-mesh>
30
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31
- }
32
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsInstance, decorators: [{
33
- type: Component,
34
- args: [{
35
- selector: 'ngts-instance',
36
- standalone: true,
37
- template: `
38
- <ngt-position-mesh #positionMesh [instance]="instances.instancedMeshRef()" [parameters]="options()">
39
- <ng-content />
40
- </ngt-position-mesh>
41
- `,
42
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
43
- changeDetection: ChangeDetectionStrategy.OnPush,
44
- }]
45
- }], ctorParameters: () => [] });
46
- const defaultOptions = {
47
- limit: 1000,
48
- frames: Infinity,
49
- };
50
- export class NgtsInstances {
51
- constructor() {
52
- this.DynamicDrawUsage = DynamicDrawUsage;
53
- this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
54
- this.parameters = omit(this.options, ['limit', 'frames', 'range']);
55
- this.instancedMeshRef = viewChild.required('instancedMesh');
56
- this.limit = pick(this.options, 'limit');
57
- this.buffers = computed(() => {
58
- const limit = this.limit();
59
- const matrices = new Float32Array(limit * 16);
60
- for (let i = 0; i < limit; i++) {
61
- tempMatrix.identity().toArray(matrices, i * 16);
62
- }
63
- const colors = new Float32Array([...Array.from({ length: limit * 3 }, () => 1)]);
64
- return { matrices, colors };
65
- });
66
- this.instances = [];
67
- extend({ InstancedMesh, InstancedBufferAttribute });
68
- effect(() => {
69
- const instancedMesh = this.instancedMeshRef()?.nativeElement;
70
- if (!instancedMesh)
71
- return;
72
- checkUpdate(instancedMesh.instanceMatrix);
73
- });
74
- let iterations = 0;
75
- let count = 0;
76
- injectBeforeRender(() => {
77
- const instancedMesh = this.instancedMeshRef()?.nativeElement;
78
- if (!instancedMesh)
79
- return;
80
- const { frames, limit, range } = this.options();
81
- const { matrices, colors } = this.buffers();
82
- if (frames === Infinity || iterations < frames) {
83
- instancedMesh.updateMatrix();
84
- instancedMesh.updateMatrixWorld();
85
- parentMatrix.copy(instancedMesh.matrixWorld).invert();
86
- count = Math.min(limit, range !== undefined ? range : limit, this.instances.length);
87
- instancedMesh.count = count;
88
- setUpdateRange(instancedMesh.instanceMatrix, { offset: 0, count: count * 16 });
89
- if (instancedMesh.instanceColor) {
90
- setUpdateRange(instancedMesh.instanceColor, { offset: 0, count: count * 3 });
91
- }
92
- for (let i = 0; i < this.instances.length; i++) {
93
- const instance = resolveRef(this.instances[i]);
94
- if (instance) {
95
- // Multiply the inverse of the InstancedMesh world matrix or else
96
- // Instances will be double-transformed if <Instances> isn't at identity
97
- instance.matrixWorld.decompose(translation, rotation, scale);
98
- instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);
99
- instanceMatrix.toArray(matrices, i * 16);
100
- checkUpdate(instancedMesh.instanceMatrix);
101
- instance.color.toArray(colors, i * 3);
102
- checkUpdate(instancedMesh.instanceColor);
103
- }
104
- }
105
- iterations++;
106
- }
107
- });
108
- }
109
- subscribe(ref) {
110
- this.instances.push(ref);
111
- return () => {
112
- this.instances = this.instances.filter((i) => i !== ref);
113
- };
114
- }
115
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
116
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsInstances, isStandalone: true, selector: "ngts-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "instancedMeshRef", first: true, predicate: ["instancedMesh"], descendants: true, isSignal: true }], ngImport: i0, template: `
117
- <ngt-instanced-mesh
118
- #instancedMesh
119
- [userData]="{ instances }"
120
- [matrixAutoUpdate]="false"
121
- [raycast]="null"
122
- [parameters]="parameters()"
123
- >
124
- <ngt-instanced-buffer-attribute
125
- attach="instanceMatrix"
126
- [usage]="DynamicDrawUsage"
127
- [count]="buffers().matrices.length / 16"
128
- [array]="buffers().matrices"
129
- [itemSize]="16"
130
- />
131
- <ngt-instanced-buffer-attribute
132
- attach="instanceColor"
133
- [usage]="DynamicDrawUsage"
134
- [count]="buffers().colors.length / 3"
135
- [array]="buffers().colors"
136
- [itemSize]="3"
137
- />
138
- <ng-content />
139
- </ngt-instanced-mesh>
140
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
141
- }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsInstances, decorators: [{
143
- type: Component,
144
- args: [{
145
- selector: 'ngts-instances',
146
- standalone: true,
147
- template: `
148
- <ngt-instanced-mesh
149
- #instancedMesh
150
- [userData]="{ instances }"
151
- [matrixAutoUpdate]="false"
152
- [raycast]="null"
153
- [parameters]="parameters()"
154
- >
155
- <ngt-instanced-buffer-attribute
156
- attach="instanceMatrix"
157
- [usage]="DynamicDrawUsage"
158
- [count]="buffers().matrices.length / 16"
159
- [array]="buffers().matrices"
160
- [itemSize]="16"
161
- />
162
- <ngt-instanced-buffer-attribute
163
- attach="instanceColor"
164
- [usage]="DynamicDrawUsage"
165
- [count]="buffers().colors.length / 3"
166
- [array]="buffers().colors"
167
- [itemSize]="3"
168
- />
169
- <ng-content />
170
- </ngt-instanced-mesh>
171
- `,
172
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
173
- changeDetection: ChangeDetectionStrategy.OnPush,
174
- imports: [NgtArgs],
175
- }]
176
- }], ctorParameters: () => [] });
177
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3BlcmZvcm1hbmNlcy9zcmMvbGliL2luc3RhbmNlcy9pbnN0YW5jZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixNQUFNLEVBRU4sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNOLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLE9BQU8sRUFFUCxJQUFJLEVBQ0osSUFBSSxFQUNKLFVBQVUsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSx3QkFBd0IsRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDaEgsT0FBTyxFQUFtQixZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUFFaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3JDLE1BQU0sVUFBVSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNsQyxNQUFNLFFBQVEsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBQ2xDLE1BQU0sS0FBSyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFhNUIsTUFBTSxPQUFPLFlBQVk7SUFPeEI7UUFOQSxZQUFPLEdBQUcsS0FB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QUFDLENBQUM7SUFDSCxDQUFDOytHQTVFVyxhQUFhO21HQUFiLGFBQWEsdVZBN0JmOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF3QlQ7OzRGQUtXLGFBQWE7a0JBaEN6QixTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXdCVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07b0JBQy9DLE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcblx0Y2hlY2tVcGRhdGUsXG5cdGV4dGVuZCxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHROZ3RBcmdzLFxuXHROZ3RJbnN0YW5jZWRNZXNoLFxuXHRvbWl0LFxuXHRwaWNrLFxuXHRyZXNvbHZlUmVmLFxufSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IHNldFVwZGF0ZVJhbmdlIH0gZnJvbSAnYW5ndWxhci10aHJlZS1zb2JhL21pc2MnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgRHluYW1pY0RyYXdVc2FnZSwgSW5zdGFuY2VkQnVmZmVyQXR0cmlidXRlLCBJbnN0YW5jZWRNZXNoLCBNYXRyaXg0LCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0UG9zaXRpb25NZXNoLCBQb3NpdGlvbk1lc2ggfSBmcm9tICcuL3Bvc2l0aW9uLW1lc2gnO1xuXG5jb25zdCBwYXJlbnRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgaW5zdGFuY2VNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgdGVtcE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCB0cmFuc2xhdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCByb3RhdGlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5jb25zdCBzY2FsZSA9IG5ldyBWZWN0b3IzKCk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHMtaW5zdGFuY2UnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcG9zaXRpb24tbWVzaCAjcG9zaXRpb25NZXNoIFtpbnN0YW5jZV09XCJpbnN0YW5jZXMuaW5zdGFuY2VkTWVzaFJlZigpXCIgW3BhcmFtZXRlcnNdPVwib3B0aW9ucygpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXBvc2l0aW9uLW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNJbnN0YW5jZSB7XG5cdG9wdGlvbnMgPSBpbnB1dCh7fSBhcyBQYXJ0aWFsPE5ndFBvc2l0aW9uTWVzaD4pO1xuXG5cdGluc3RhbmNlcyA9IGluamVjdChOZ3RzSW5zdGFuY2VzKTtcblxuXHRwb3NpdGlvbk1lc2hSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxQb3NpdGlvbk1lc2g+PigncG9zaXRpb25NZXNoJyk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgUG9zaXRpb25NZXNoIH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGNsZWFudXAgPSB0aGlzLmluc3RhbmNlcy5zdWJzY3JpYmUodGhpcy5wb3NpdGlvbk1lc2hSZWYoKS5uYXRpdmVFbGVtZW50KTtcblx0XHRcdG9uQ2xlYW51cCgoKSA9PiBjbGVhbnVwKCkpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0luc3RhbmNlc09wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndEluc3RhbmNlZE1lc2g+IHtcblx0cmFuZ2U/OiBudW1iZXI7XG5cdGxpbWl0OiBudW1iZXI7XG5cdGZyYW1lczogbnVtYmVyO1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9uczogTmd0c0luc3RhbmNlc09wdGlvbnMgPSB7XG5cdGxpbWl0OiAxMDAwLFxuXHRmcmFtZXM6IEluZmluaXR5LFxufTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1pbnN0YW5jZXMnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtaW5zdGFuY2VkLW1lc2hcblx0XHRcdCNpbnN0YW5jZWRNZXNoXG5cdFx0XHRbdXNlckRhdGFdPVwieyBpbnN0YW5jZXMgfVwiXG5cdFx0XHRbbWF0cml4QXV0b1VwZGF0ZV09XCJmYWxzZVwiXG5cdFx0XHRbcmF5Y2FzdF09XCJudWxsXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0PlxuXHRcdFx0PG5ndC1pbnN0YW5jZWQtYnVmZmVyLWF0dHJpYnV0ZVxuXHRcdFx0XHRhdHRhY2g9XCJpbnN0YW5jZU1hdHJpeFwiXG5cdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0W2NvdW50XT1cImJ1ZmZlcnMoKS5tYXRyaWNlcy5sZW5ndGggLyAxNlwiXG5cdFx0XHRcdFthcnJheV09XCJidWZmZXJzKCkubWF0cmljZXNcIlxuXHRcdFx0XHRbaXRlbVNpemVdPVwiMTZcIlxuXHRcdFx0Lz5cblx0XHRcdDxuZ3QtaW5zdGFuY2VkLWJ1ZmZlci1hdHRyaWJ1dGVcblx0XHRcdFx0YXR0YWNoPVwiaW5zdGFuY2VDb2xvclwiXG5cdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0W2NvdW50XT1cImJ1ZmZlcnMoKS5jb2xvcnMubGVuZ3RoIC8gM1wiXG5cdFx0XHRcdFthcnJheV09XCJidWZmZXJzKCkuY29sb3JzXCJcblx0XHRcdFx0W2l0ZW1TaXplXT1cIjNcIlxuXHRcdFx0Lz5cblx0XHRcdDxuZy1jb250ZW50IC8+XG5cdFx0PC9uZ3QtaW5zdGFuY2VkLW1lc2g+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGltcG9ydHM6IFtOZ3RBcmdzXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c0luc3RhbmNlcyB7XG5cdHByb3RlY3RlZCByZWFkb25seSBEeW5hbWljRHJhd1VzYWdlID0gRHluYW1pY0RyYXdVc2FnZTtcblxuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHByb3RlY3RlZCBwYXJhbWV0ZXJzID0gb21pdCh0aGlzLm9wdGlvbnMsIFsnbGltaXQnLCAnZnJhbWVzJywgJ3JhbmdlJ10pO1xuXG5cdGluc3RhbmNlZE1lc2hSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxJbnN0YW5jZWRNZXNoPj4oJ2luc3RhbmNlZE1lc2gnKTtcblxuXHRwcml2YXRlIGxpbWl0ID0gcGljayh0aGlzLm9wdGlvbnMsICdsaW1pdCcpO1xuXG5cdHByb3RlY3RlZCBidWZmZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGxpbWl0ID0gdGhpcy5saW1pdCgpO1xuXHRcdGNvbnN0IG1hdHJpY2VzID0gbmV3IEZsb2F0MzJBcnJheShsaW1pdCAqIDE2KTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGltaXQ7IGkrKykge1xuXHRcdFx0dGVtcE1hdHJpeC5pZGVudGl0eSgpLnRvQXJyYXkobWF0cmljZXMsIGkgKiAxNik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29sb3JzID0gbmV3IEZsb2F0MzJBcnJheShbLi4uQXJyYXkuZnJvbSh7IGxlbmd0aDogbGltaXQgKiAzIH0sICgpID0+IDEpXSk7XG5cdFx0cmV0dXJuIHsgbWF0cmljZXMsIGNvbG9ycyB9O1xuXHR9KTtcblxuXHRpbnN0YW5jZXM6IEFycmF5PEVsZW1lbnRSZWY8UG9zaXRpb25NZXNoPiB8IFBvc2l0aW9uTWVzaD4gPSBbXTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBJbnN0YW5jZWRNZXNoLCBJbnN0YW5jZWRCdWZmZXJBdHRyaWJ1dGUgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgaW5zdGFuY2VkTWVzaCA9IHRoaXMuaW5zdGFuY2VkTWVzaFJlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFpbnN0YW5jZWRNZXNoKSByZXR1cm47XG5cdFx0XHRjaGVja1VwZGF0ZShpbnN0YW5jZWRNZXNoLmluc3RhbmNlTWF0cml4KTtcblx0XHR9KTtcblxuXHRcdGxldCBpdGVyYXRpb25zID0gMDtcblx0XHRsZXQgY291bnQgPSAwO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IGluc3RhbmNlZE1lc2ggPSB0aGlzLmluc3RhbmNlZE1lc2hSZWYoKT8ubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghaW5zdGFuY2VkTWVzaCkgcmV0dXJuO1xuXHRcdFx0Y29uc3QgeyBmcmFtZXMsIGxpbWl0LCByYW5nZSB9ID0gdGhpcy5vcHRpb25zKCk7XG5cdFx0XHRjb25zdCB7IG1hdHJpY2VzLCBjb2xvcnMgfSA9IHRoaXMuYnVmZmVycygpO1xuXHRcdFx0aWYgKGZyYW1lcyA9PT0gSW5maW5pdHkgfHwgaXRlcmF0aW9ucyA8IGZyYW1lcykge1xuXHRcdFx0XHRpbnN0YW5jZWRNZXNoLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdFx0XHRpbnN0YW5jZWRNZXNoLnVwZGF0ZU1hdHJpeFdvcmxkKCk7XG5cdFx0XHRcdHBhcmVudE1hdHJpeC5jb3B5KGluc3RhbmNlZE1lc2gubWF0cml4V29ybGQpLmludmVydCgpO1xuXG5cdFx0XHRcdGNvdW50ID0gTWF0aC5taW4obGltaXQsIHJhbmdlICE9PSB1bmRlZmluZWQgPyByYW5nZSA6IGxpbWl0LCB0aGlzLmluc3RhbmNlcy5sZW5ndGgpO1xuXHRcdFx0XHRpbnN0YW5jZWRNZXNoLmNvdW50ID0gY291bnQ7XG5cdFx0XHRcdHNldFVwZGF0ZVJhbmdlKGluc3RhbmNlZE1lc2guaW5zdGFuY2VNYXRyaXgsIHsgb2Zmc2V0OiAwLCBjb3VudDogY291bnQgKiAxNiB9KTtcblx0XHRcdFx0aWYgKGluc3RhbmNlZE1lc2guaW5zdGFuY2VDb2xvcikge1xuXHRcdFx0XHRcdHNldFVwZGF0ZVJhbmdlKGluc3RhbmNlZE1lc2guaW5zdGFuY2VDb2xvciwgeyBvZmZzZXQ6IDAsIGNvdW50OiBjb3VudCAqIDMgfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuaW5zdGFuY2VzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0Y29uc3QgaW5zdGFuY2UgPSByZXNvbHZlUmVmKHRoaXMuaW5zdGFuY2VzW2ldKTtcblx0XHRcdFx0XHRpZiAoaW5zdGFuY2UpIHtcblx0XHRcdFx0XHRcdC8vIE11bHRpcGx5IHRoZSBpbnZlcnNlIG9mIHRoZSBJbnN0YW5jZWRNZXNoIHdvcmxkIG1hdHJpeCBvciBlbHNlXG5cdFx0XHRcdFx0XHQvLyBJbnN0YW5jZXMgd2lsbCBiZSBkb3VibGUtdHJhbnNmb3JtZWQgaWYgPEluc3RhbmNlcz4gaXNuJ3QgYXQgaWRlbnRpdHlcblx0XHRcdFx0XHRcdGluc3RhbmNlLm1hdHJpeFdvcmxkLmRlY29tcG9zZSh0cmFuc2xhdGlvbiwgcm90YXRpb24sIHNjYWxlKTtcblx0XHRcdFx0XHRcdGluc3RhbmNlTWF0cml4LmNvbXBvc2UodHJhbnNsYXRpb24sIHJvdGF0aW9uLCBzY2FsZSkucHJlbXVsdGlwbHkocGFyZW50TWF0cml4KTtcblx0XHRcdFx0XHRcdGluc3RhbmNlTWF0cml4LnRvQXJyYXkobWF0cmljZXMsIGkgKiAxNik7XG5cdFx0XHRcdFx0XHRjaGVja1VwZGF0ZShpbnN0YW5jZWRNZXNoLmluc3RhbmNlTWF0cml4KTtcblx0XHRcdFx0XHRcdGluc3RhbmNlLmNvbG9yLnRvQXJyYXkoY29sb3JzLCBpICogMyk7XG5cdFx0XHRcdFx0XHRjaGVja1VwZGF0ZShpbnN0YW5jZWRNZXNoLmluc3RhbmNlQ29sb3IpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpdGVyYXRpb25zKys7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRzdWJzY3JpYmUocmVmOiBFbGVtZW50UmVmPFBvc2l0aW9uTWVzaD4gfCBQb3NpdGlvbk1lc2gpIHtcblx0XHR0aGlzLmluc3RhbmNlcy5wdXNoKHJlZik7XG5cdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdHRoaXMuaW5zdGFuY2VzID0gdGhpcy5pbnN0YW5jZXMuZmlsdGVyKChpKSA9PiBpICE9PSByZWYpO1xuXHRcdH07XG5cdH1cbn1cbiJdfQ==
@@ -1,51 +0,0 @@
1
- import { resolveRef } from 'angular-three';
2
- import { Color, Group, Material, Matrix4, Mesh, } from 'three';
3
- const _instanceLocalMatrix = new Matrix4();
4
- const _instanceWorldMatrix = new Matrix4();
5
- const _instanceIntersects = [];
6
- const _mesh = new Mesh();
7
- export class PositionMesh extends Group {
8
- constructor() {
9
- super();
10
- this.color = new Color('white');
11
- this.instance = undefined;
12
- }
13
- // This will allow the virtual instance have bounds
14
- get geometry() {
15
- return resolveRef(this.instance)?.geometry;
16
- }
17
- // And this will allow the virtual instance to receive events
18
- raycast(raycaster, intersects) {
19
- const parent = resolveRef(this.instance);
20
- if (!parent)
21
- return;
22
- if (!parent.geometry || !parent.material)
23
- return;
24
- _mesh.geometry = parent.geometry;
25
- const matrixWorld = parent.matrixWorld;
26
- const instanceId = parent.userData['instances'].indexOf(this);
27
- // If the instance wasn't found or exceeds the parents draw range, bail out
28
- if (instanceId === -1 || instanceId > parent.count)
29
- return;
30
- // calculate the world matrix for each instance
31
- parent.getMatrixAt(instanceId, _instanceLocalMatrix);
32
- _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix);
33
- // the mesh represents this single instance
34
- _mesh.matrixWorld = _instanceWorldMatrix;
35
- // raycast side according to instance material
36
- if (parent.material instanceof Material)
37
- _mesh.material.side = parent.material.side;
38
- else
39
- _mesh.material.side = parent.material[0].side;
40
- _mesh.raycast(raycaster, _instanceIntersects);
41
- // process the result of raycast
42
- for (let i = 0, l = _instanceIntersects.length; i < l; i++) {
43
- const intersect = _instanceIntersects[i];
44
- intersect.instanceId = instanceId;
45
- intersect.object = this;
46
- intersects.push(intersect);
47
- }
48
- _instanceIntersects.length = 0;
49
- }
50
- }
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tbWVzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc29iYS9wZXJmb3JtYW5jZXMvc3JjL2xpYi9pbnN0YW5jZXMvcG9zaXRpb24tbWVzaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQW1CLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RCxPQUFPLEVBRU4sS0FBSyxFQUNMLEtBQUssRUFHTCxRQUFRLEVBQ1IsT0FBTyxFQUNQLElBQUksR0FHSixNQUFNLE9BQU8sQ0FBQztBQUlmLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUMzQyxNQUFNLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDM0MsTUFBTSxtQkFBbUIsR0FBbUIsRUFBRSxDQUFDO0FBQy9DLE1BQU0sS0FBSyxHQUFHLElBQUksSUFBSSxFQUFxQyxDQUFDO0FBRTVELE1BQU0sT0FBTyxZQUFhLFNBQVEsS0FBSztJQUl0QztRQUNDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksUUFBUTtRQUNYLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVELDZEQUE2RDtJQUNwRCxPQUFPLENBQUMsU0FBb0IsRUFBRSxVQUEwQjtRQUNoRSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTztRQUNwQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUNqRCxLQUFLLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCwyRUFBMkU7UUFDM0UsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLO1lBQUUsT0FBTztRQUMzRCwrQ0FBK0M7UUFDL0MsTUFBTSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUNyRCxvQkFBb0IsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsb0JBQW9CLENBQUMsQ0FBQztRQUN6RSwyQ0FBMkM7UUFDM0MsS0FBSyxDQUFDLFdBQVcsR0FBRyxvQkFBb0IsQ0FBQztRQUN6Qyw4Q0FBOEM7UUFDOUMsSUFBSSxNQUFNLENBQUMsUUFBUSxZQUFZLFFBQVE7WUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQzs7WUFDL0UsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDbkQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztRQUM5QyxnQ0FBZ0M7UUFDaEMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDNUQsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDekMsU0FBUyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7WUFDbEMsU0FBUyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDeEIsVUFBVSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1QixDQUFDO1FBQ0QsbUJBQW1CLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RPYmplY3QzRE5vZGUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7XG5cdEJ1ZmZlckdlb21ldHJ5LFxuXHRDb2xvcixcblx0R3JvdXAsXG5cdEluc3RhbmNlZE1lc2gsXG5cdEludGVyc2VjdGlvbixcblx0TWF0ZXJpYWwsXG5cdE1hdHJpeDQsXG5cdE1lc2gsXG5cdE1lc2hCYXNpY01hdGVyaWFsLFxuXHRSYXljYXN0ZXIsXG59IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0UG9zaXRpb25NZXNoID0gTmd0T2JqZWN0M0ROb2RlPFBvc2l0aW9uTWVzaCwgdHlwZW9mIFBvc2l0aW9uTWVzaD47XG5cbmNvbnN0IF9pbnN0YW5jZUxvY2FsTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9pbnN0YW5jZVdvcmxkTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcbmNvbnN0IF9pbnN0YW5jZUludGVyc2VjdHM6IEludGVyc2VjdGlvbltdID0gW107XG5jb25zdCBfbWVzaCA9IG5ldyBNZXNoPEJ1ZmZlckdlb21ldHJ5LCBNZXNoQmFzaWNNYXRlcmlhbD4oKTtcblxuZXhwb3J0IGNsYXNzIFBvc2l0aW9uTWVzaCBleHRlbmRzIEdyb3VwIHtcblx0Y29sb3I6IENvbG9yO1xuXHRpbnN0YW5jZTogRWxlbWVudFJlZjxJbnN0YW5jZWRNZXNoPiB8IEluc3RhbmNlZE1lc2ggfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcignd2hpdGUnKTtcblx0XHR0aGlzLmluc3RhbmNlID0gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gVGhpcyB3aWxsIGFsbG93IHRoZSB2aXJ0dWFsIGluc3RhbmNlIGhhdmUgYm91bmRzXG5cdGdldCBnZW9tZXRyeSgpIHtcblx0XHRyZXR1cm4gcmVzb2x2ZVJlZih0aGlzLmluc3RhbmNlKT8uZ2VvbWV0cnk7XG5cdH1cblxuXHQvLyBBbmQgdGhpcyB3aWxsIGFsbG93IHRoZSB2aXJ0dWFsIGluc3RhbmNlIHRvIHJlY2VpdmUgZXZlbnRzXG5cdG92ZXJyaWRlIHJheWNhc3QocmF5Y2FzdGVyOiBSYXljYXN0ZXIsIGludGVyc2VjdHM6IEludGVyc2VjdGlvbltdKSB7XG5cdFx0Y29uc3QgcGFyZW50ID0gcmVzb2x2ZVJlZih0aGlzLmluc3RhbmNlKTtcblx0XHRpZiAoIXBhcmVudCkgcmV0dXJuO1xuXHRcdGlmICghcGFyZW50Lmdlb21ldHJ5IHx8ICFwYXJlbnQubWF0ZXJpYWwpIHJldHVybjtcblx0XHRfbWVzaC5nZW9tZXRyeSA9IHBhcmVudC5nZW9tZXRyeTtcblx0XHRjb25zdCBtYXRyaXhXb3JsZCA9IHBhcmVudC5tYXRyaXhXb3JsZDtcblx0XHRjb25zdCBpbnN0YW5jZUlkID0gcGFyZW50LnVzZXJEYXRhWydpbnN0YW5jZXMnXS5pbmRleE9mKHRoaXMpO1xuXHRcdC8vIElmIHRoZSBpbnN0YW5jZSB3YXNuJ3QgZm91bmQgb3IgZXhjZWVkcyB0aGUgcGFyZW50cyBkcmF3IHJhbmdlLCBiYWlsIG91dFxuXHRcdGlmIChpbnN0YW5jZUlkID09PSAtMSB8fCBpbnN0YW5jZUlkID4gcGFyZW50LmNvdW50KSByZXR1cm47XG5cdFx0Ly8gY2FsY3VsYXRlIHRoZSB3b3JsZCBtYXRyaXggZm9yIGVhY2ggaW5zdGFuY2Vcblx0XHRwYXJlbnQuZ2V0TWF0cml4QXQoaW5zdGFuY2VJZCwgX2luc3RhbmNlTG9jYWxNYXRyaXgpO1xuXHRcdF9pbnN0YW5jZVdvcmxkTWF0cml4Lm11bHRpcGx5TWF0cmljZXMobWF0cml4V29ybGQsIF9pbnN0YW5jZUxvY2FsTWF0cml4KTtcblx0XHQvLyB0aGUgbWVzaCByZXByZXNlbnRzIHRoaXMgc2luZ2xlIGluc3RhbmNlXG5cdFx0X21lc2gubWF0cml4V29ybGQgPSBfaW5zdGFuY2VXb3JsZE1hdHJpeDtcblx0XHQvLyByYXljYXN0IHNpZGUgYWNjb3JkaW5nIHRvIGluc3RhbmNlIG1hdGVyaWFsXG5cdFx0aWYgKHBhcmVudC5tYXRlcmlhbCBpbnN0YW5jZW9mIE1hdGVyaWFsKSBfbWVzaC5tYXRlcmlhbC5zaWRlID0gcGFyZW50Lm1hdGVyaWFsLnNpZGU7XG5cdFx0ZWxzZSBfbWVzaC5tYXRlcmlhbC5zaWRlID0gcGFyZW50Lm1hdGVyaWFsWzBdLnNpZGU7XG5cdFx0X21lc2gucmF5Y2FzdChyYXljYXN0ZXIsIF9pbnN0YW5jZUludGVyc2VjdHMpO1xuXHRcdC8vIHByb2Nlc3MgdGhlIHJlc3VsdCBvZiByYXljYXN0XG5cdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSBfaW5zdGFuY2VJbnRlcnNlY3RzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0Y29uc3QgaW50ZXJzZWN0ID0gX2luc3RhbmNlSW50ZXJzZWN0c1tpXTtcblx0XHRcdGludGVyc2VjdC5pbnN0YW5jZUlkID0gaW5zdGFuY2VJZDtcblx0XHRcdGludGVyc2VjdC5vYmplY3QgPSB0aGlzO1xuXHRcdFx0aW50ZXJzZWN0cy5wdXNoKGludGVyc2VjdCk7XG5cdFx0fVxuXHRcdF9pbnN0YW5jZUludGVyc2VjdHMubGVuZ3RoID0gMDtcblx0fVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqIEByYXdPcHRpb25zIGluc3RhbmNlfGNvbG9yXG5cdFx0ICovXG5cdFx0J25ndC1wb3NpdGlvbi1tZXNoJzogTmd0UG9zaXRpb25NZXNoO1xuXHR9XG59XG4iXX0=
@@ -1,272 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, computed, CUSTOM_ELEMENTS_SCHEMA, effect, inject, input, viewChild, } from '@angular/core';
2
- import { checkUpdate, extend, injectBeforeRender, omit, pick, resolveRef } from 'angular-three';
3
- import { mergeInputs } from 'ngxtension/inject-inputs';
4
- import { BufferAttribute, BufferGeometry, DynamicDrawUsage, Matrix4, Points, Vector3 } from 'three';
5
- import { PositionPoint } from './position-point';
6
- import * as i0 from "@angular/core";
7
- export class NgtsPoint {
8
- constructor() {
9
- this.options = input({});
10
- this.positionPointRef = viewChild.required('positionPoint');
11
- this.points = inject(NgtsPointsInstances);
12
- extend({ PositionPoint });
13
- effect((onCleanup) => {
14
- const cleanUp = this.points.subscribe(this.positionPointRef().nativeElement);
15
- onCleanup(() => cleanUp());
16
- });
17
- }
18
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPoint, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
19
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsPoint, isStandalone: true, selector: "ngts-point", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "positionPointRef", first: true, predicate: ["positionPoint"], descendants: true, isSignal: true }], ngImport: i0, template: `
20
- <ngt-position-point #positionPoint [parameters]="options()" [instance]="points.pointsRef()">
21
- <ng-content />
22
- </ngt-position-point>
23
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24
- }
25
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPoint, decorators: [{
26
- type: Component,
27
- args: [{
28
- selector: 'ngts-point',
29
- standalone: true,
30
- template: `
31
- <ngt-position-point #positionPoint [parameters]="options()" [instance]="points.pointsRef()">
32
- <ng-content />
33
- </ngt-position-point>
34
- `,
35
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
36
- changeDetection: ChangeDetectionStrategy.OnPush,
37
- }]
38
- }], ctorParameters: () => [] });
39
- export class NgtsPointsBuffer {
40
- constructor() {
41
- this.positions = input.required();
42
- this.colors = input();
43
- this.sizes = input();
44
- this.stride = input(3);
45
- this.options = input({});
46
- this.pointsRef = viewChild.required('points');
47
- this.DynamicDrawUsage = DynamicDrawUsage;
48
- extend({ Points, BufferAttribute, BufferGeometry });
49
- injectBeforeRender(() => {
50
- const points = this.pointsRef()?.nativeElement;
51
- if (!points)
52
- return;
53
- const attributes = points.geometry.attributes;
54
- checkUpdate(attributes['position']);
55
- if (this.colors())
56
- checkUpdate(attributes['color']);
57
- if (this.sizes())
58
- checkUpdate(attributes['size']);
59
- });
60
- }
61
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPointsBuffer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
62
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.11", type: NgtsPointsBuffer, isStandalone: true, selector: "ngts-points-buffer", inputs: { positions: { classPropertyName: "positions", publicName: "positions", isSignal: true, isRequired: true, transformFunction: null }, colors: { classPropertyName: "colors", publicName: "colors", isSignal: true, isRequired: false, transformFunction: null }, sizes: { classPropertyName: "sizes", publicName: "sizes", isSignal: true, isRequired: false, transformFunction: null }, stride: { classPropertyName: "stride", publicName: "stride", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
63
- <ngt-points #points [parameters]="options()">
64
- <ngt-buffer-geometry>
65
- <ngt-buffer-attribute
66
- attach="attributes.position"
67
- [count]="positions().length / stride()"
68
- [array]="positions()"
69
- [itemSize]="stride()"
70
- [usage]="DynamicDrawUsage"
71
- />
72
- @if (colors(); as colors) {
73
- <ngt-buffer-attribute
74
- attach="attributes.color"
75
- [count]="colors.length / stride()"
76
- [array]="colors"
77
- [itemSize]="3"
78
- [usage]="DynamicDrawUsage"
79
- />
80
- }
81
- @if (sizes(); as sizes) {
82
- <ngt-buffer-attribute
83
- attach="attributes.size"
84
- [count]="sizes.length / stride()"
85
- [array]="sizes"
86
- [itemSize]="1"
87
- [usage]="DynamicDrawUsage"
88
- />
89
- }
90
- </ngt-buffer-geometry>
91
- <ng-content />
92
- </ngt-points>
93
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
94
- }
95
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPointsBuffer, decorators: [{
96
- type: Component,
97
- args: [{
98
- selector: 'ngts-points-buffer',
99
- standalone: true,
100
- template: `
101
- <ngt-points #points [parameters]="options()">
102
- <ngt-buffer-geometry>
103
- <ngt-buffer-attribute
104
- attach="attributes.position"
105
- [count]="positions().length / stride()"
106
- [array]="positions()"
107
- [itemSize]="stride()"
108
- [usage]="DynamicDrawUsage"
109
- />
110
- @if (colors(); as colors) {
111
- <ngt-buffer-attribute
112
- attach="attributes.color"
113
- [count]="colors.length / stride()"
114
- [array]="colors"
115
- [itemSize]="3"
116
- [usage]="DynamicDrawUsage"
117
- />
118
- }
119
- @if (sizes(); as sizes) {
120
- <ngt-buffer-attribute
121
- attach="attributes.size"
122
- [count]="sizes.length / stride()"
123
- [array]="sizes"
124
- [itemSize]="1"
125
- [usage]="DynamicDrawUsage"
126
- />
127
- }
128
- </ngt-buffer-geometry>
129
- <ng-content />
130
- </ngt-points>
131
- `,
132
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
133
- changeDetection: ChangeDetectionStrategy.OnPush,
134
- }]
135
- }], ctorParameters: () => [] });
136
- const parentMatrix = new Matrix4();
137
- const position = new Vector3();
138
- const defaultInstancesOptions = { limit: 1000 };
139
- export class NgtsPointsInstances {
140
- constructor() {
141
- this.options = input(defaultInstancesOptions, { transform: mergeInputs(defaultInstancesOptions) });
142
- this.parameters = omit(this.options, ['limit', 'range']);
143
- this.pointsRef = viewChild.required('points');
144
- this.limit = pick(this.options, 'limit');
145
- this.buffers = computed(() => {
146
- const limit = this.limit();
147
- return {
148
- positions: new Float32Array(limit * 3),
149
- colors: Float32Array.from({ length: limit * 3 }, () => 1),
150
- sizes: Float32Array.from({ length: limit }, () => 1),
151
- };
152
- });
153
- this.positionPoints = [];
154
- this.DynamicDrawUsage = DynamicDrawUsage;
155
- extend({ Points, BufferAttribute, BufferGeometry });
156
- effect(() => {
157
- const points = this.pointsRef()?.nativeElement;
158
- if (!points)
159
- return;
160
- checkUpdate(points.geometry.attributes['position']);
161
- });
162
- injectBeforeRender(() => {
163
- const points = this.pointsRef()?.nativeElement;
164
- if (!points)
165
- return;
166
- const { limit, range } = this.options();
167
- const { positions, sizes, colors } = this.buffers();
168
- points.updateMatrix();
169
- points.updateMatrixWorld();
170
- parentMatrix.copy(points.matrixWorld).invert();
171
- points.geometry.drawRange.count = Math.min(limit, range !== undefined ? range : limit, this.positionPoints.length);
172
- for (let i = 0; i < this.positionPoints.length; i++) {
173
- const positionPoint = resolveRef(this.positionPoints[i]);
174
- if (positionPoint) {
175
- positionPoint.getWorldPosition(position).applyMatrix4(parentMatrix);
176
- position.toArray(positions, i * 3);
177
- checkUpdate(points.geometry.attributes['position']);
178
- positionPoint.matrixWorldNeedsUpdate = true;
179
- positionPoint.color.toArray(colors, i * 3);
180
- checkUpdate(points.geometry.attributes['color']);
181
- sizes.set([positionPoint.size], i);
182
- checkUpdate(points.geometry.attributes['size']);
183
- }
184
- }
185
- });
186
- }
187
- subscribe(ref) {
188
- this.positionPoints.push(ref);
189
- return () => {
190
- this.positionPoints = this.positionPoints.filter((p) => p !== ref);
191
- };
192
- }
193
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPointsInstances, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
194
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsPointsInstances, isStandalone: true, selector: "ngts-points-instances", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "pointsRef", first: true, predicate: ["points"], descendants: true, isSignal: true }], ngImport: i0, template: `
195
- <ngt-points
196
- #points
197
- [userData]="{ instances: positionPoints }"
198
- [matrixAutoUpdate]="false"
199
- [raycast]="null"
200
- [parameters]="parameters()"
201
- >
202
- <ngt-buffer-geometry>
203
- <ngt-buffer-attribute
204
- attach="attributes.position"
205
- [count]="buffers().positions.length / 3"
206
- [array]="buffers().positions"
207
- [itemSize]="3"
208
- [usage]="DynamicDrawUsage"
209
- />
210
- <ngt-buffer-attribute
211
- attach="attributes.color"
212
- [count]="buffers().colors.length / 3"
213
- [array]="buffers().colors"
214
- [itemSize]="3"
215
- [usage]="DynamicDrawUsage"
216
- />
217
- <ngt-buffer-attribute
218
- attach="attributes.size"
219
- [count]="buffers().sizes.length"
220
- [array]="buffers().sizes"
221
- [itemSize]="1"
222
- [usage]="DynamicDrawUsage"
223
- />
224
- </ngt-buffer-geometry>
225
- <ng-content />
226
- </ngt-points>
227
- `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
228
- }
229
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsPointsInstances, decorators: [{
230
- type: Component,
231
- args: [{
232
- selector: 'ngts-points-instances',
233
- standalone: true,
234
- template: `
235
- <ngt-points
236
- #points
237
- [userData]="{ instances: positionPoints }"
238
- [matrixAutoUpdate]="false"
239
- [raycast]="null"
240
- [parameters]="parameters()"
241
- >
242
- <ngt-buffer-geometry>
243
- <ngt-buffer-attribute
244
- attach="attributes.position"
245
- [count]="buffers().positions.length / 3"
246
- [array]="buffers().positions"
247
- [itemSize]="3"
248
- [usage]="DynamicDrawUsage"
249
- />
250
- <ngt-buffer-attribute
251
- attach="attributes.color"
252
- [count]="buffers().colors.length / 3"
253
- [array]="buffers().colors"
254
- [itemSize]="3"
255
- [usage]="DynamicDrawUsage"
256
- />
257
- <ngt-buffer-attribute
258
- attach="attributes.size"
259
- [count]="buffers().sizes.length"
260
- [array]="buffers().sizes"
261
- [itemSize]="1"
262
- [usage]="DynamicDrawUsage"
263
- />
264
- </ngt-buffer-geometry>
265
- <ng-content />
266
- </ngt-points>
267
- `,
268
- schemas: [CUSTOM_ELEMENTS_SCHEMA],
269
- changeDetection: ChangeDetectionStrategy.OnPush,
270
- }]
271
- }], ctorParameters: () => [] });
272
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL3BlcmZvcm1hbmNlcy9zcmMvbGliL3BvaW50cy9wb2ludHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLHNCQUFzQixFQUN0QixNQUFNLEVBRU4sTUFBTSxFQUNOLEtBQUssRUFDTCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsa0JBQWtCLEVBQWEsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0csT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGdCQUFnQixFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3BHLE9BQU8sRUFBb0IsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBYW5FLE1BQU0sT0FBTyxTQUFTO0lBT3JCO1FBTkEsWUFBTyxHQUFHLEtBQUssQ0FBQyxFQUErQixDQUFDLENBQUM7UUFFakQscUJBQWdCLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBNEIsZUFBZSxDQUFDLENBQUM7UUFFbEYsV0FBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBR3BDLE1BQU0sQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFMUIsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDcEIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDN0UsU0FBUyxDQUFDLEdBQUcs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LENBQUMsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7b0JBQ25DLFdBQVcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDO1lBQ0YsQ0FBQztRQUNGLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVMsQ0FBQyxHQUE4QztRQUN2RCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixPQUFPLEdBQUcsRUFBRTtZQUNYLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNwRSxDQUFDLENBQUM7SUFDSCxDQUFDOytHQXJFVyxtQkFBbUI7bUdBQW5CLG1CQUFtQixnVkFyQ3JCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpQ1Q7OzRGQUlXLG1CQUFtQjtrQkF4Qy9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHVCQUF1QjtvQkFDakMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBaUNUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDL0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcblx0Q29tcG9uZW50LFxuXHRjb21wdXRlZCxcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR2aWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUsIGV4dGVuZCwgaW5qZWN0QmVmb3JlUmVuZGVyLCBOZ3RQb2ludHMsIG9taXQsIHBpY2ssIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7IEJ1ZmZlckF0dHJpYnV0ZSwgQnVmZmVyR2VvbWV0cnksIER5bmFtaWNEcmF3VXNhZ2UsIE1hdHJpeDQsIFBvaW50cywgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndFBvc2l0aW9uUG9pbnQsIFBvc2l0aW9uUG9pbnQgfSBmcm9tICcuL3Bvc2l0aW9uLXBvaW50JztcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1wb2ludCcsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1wb3NpdGlvbi1wb2ludCAjcG9zaXRpb25Qb2ludCBbcGFyYW1ldGVyc109XCJvcHRpb25zKClcIiBbaW5zdGFuY2VdPVwicG9pbnRzLnBvaW50c1JlZigpXCI+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXBvc2l0aW9uLXBvaW50PlxuXHRgLFxuXHRzY2hlbWFzOiBbQ1VTVE9NX0VMRU1FTlRTX1NDSEVNQV0sXG5cdGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RzUG9pbnQge1xuXHRvcHRpb25zID0gaW5wdXQoe30gYXMgUGFydGlhbDxOZ3RQb3NpdGlvblBvaW50Pik7XG5cblx0cG9zaXRpb25Qb2ludFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPFBvc2l0aW9uUG9pbnQ+PigncG9zaXRpb25Qb2ludCcpO1xuXG5cdHBvaW50cyA9IGluamVjdChOZ3RzUG9pbnRzSW5zdGFuY2VzKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRleHRlbmQoeyBQb3NpdGlvblBvaW50IH0pO1xuXG5cdFx0ZWZmZWN0KChvbkNsZWFudXApID0+IHtcblx0XHRcdGNvbnN0IGNsZWFuVXAgPSB0aGlzLnBvaW50cy5zdWJzY3JpYmUodGhpcy5wb3NpdGlvblBvaW50UmVmKCkubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRvbkNsZWFudXAoKCkgPT4gY2xlYW5VcCgpKTtcblx0XHR9KTtcblx0fVxufVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLXBvaW50cy1idWZmZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtcG9pbnRzICNwb2ludHMgW3BhcmFtZXRlcnNdPVwib3B0aW9ucygpXCI+XG5cdFx0XHQ8bmd0LWJ1ZmZlci1nZW9tZXRyeT5cblx0XHRcdFx0PG5ndC1idWZmZXItYXR0cmlidXRlXG5cdFx0XHRcdFx0YXR0YWNoPVwiYXR0cmlidXRlcy5wb3NpdGlvblwiXG5cdFx0XHRcdFx0W2NvdW50XT1cInBvc2l0aW9ucygpLmxlbmd0aCAvIHN0cmlkZSgpXCJcblx0XHRcdFx0XHRbYXJyYXldPVwicG9zaXRpb25zKClcIlxuXHRcdFx0XHRcdFtpdGVtU2l6ZV09XCJzdHJpZGUoKVwiXG5cdFx0XHRcdFx0W3VzYWdlXT1cIkR5bmFtaWNEcmF3VXNhZ2VcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHRAaWYgKGNvbG9ycygpOyBhcyBjb2xvcnMpIHtcblx0XHRcdFx0XHQ8bmd0LWJ1ZmZlci1hdHRyaWJ1dGVcblx0XHRcdFx0XHRcdGF0dGFjaD1cImF0dHJpYnV0ZXMuY29sb3JcIlxuXHRcdFx0XHRcdFx0W2NvdW50XT1cImNvbG9ycy5sZW5ndGggLyBzdHJpZGUoKVwiXG5cdFx0XHRcdFx0XHRbYXJyYXldPVwiY29sb3JzXCJcblx0XHRcdFx0XHRcdFtpdGVtU2l6ZV09XCIzXCJcblx0XHRcdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHR9XG5cdFx0XHRcdEBpZiAoc2l6ZXMoKTsgYXMgc2l6ZXMpIHtcblx0XHRcdFx0XHQ8bmd0LWJ1ZmZlci1hdHRyaWJ1dGVcblx0XHRcdFx0XHRcdGF0dGFjaD1cImF0dHJpYnV0ZXMuc2l6ZVwiXG5cdFx0XHRcdFx0XHRbY291bnRdPVwic2l6ZXMubGVuZ3RoIC8gc3RyaWRlKClcIlxuXHRcdFx0XHRcdFx0W2FycmF5XT1cInNpemVzXCJcblx0XHRcdFx0XHRcdFtpdGVtU2l6ZV09XCIxXCJcblx0XHRcdFx0XHRcdFt1c2FnZV09XCJEeW5hbWljRHJhd1VzYWdlXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L25ndC1idWZmZXItZ2VvbWV0cnk+XG5cdFx0XHQ8bmctY29udGVudCAvPlxuXHRcdDwvbmd0LXBvaW50cz5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c1BvaW50c0J1ZmZlciB7XG5cdHBvc2l0aW9ucyA9IGlucHV0LnJlcXVpcmVkPEZsb2F0MzJBcnJheT4oKTtcblx0Y29sb3JzID0gaW5wdXQ8RmxvYXQzMkFycmF5PigpO1xuXHRzaXplcyA9IGlucHV0PEZsb2F0MzJBcnJheT4oKTtcblx0c3RyaWRlID0gaW5wdXQ8MiB8IDM+KDMpO1xuXHRvcHRpb25zID0gaW5wdXQoe30gYXMgUGFydGlhbDxOZ3RQb3NpdGlvblBvaW50Pik7XG5cblx0cG9pbnRzUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8UG9pbnRzPj4oJ3BvaW50cycpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGV4dGVuZCh7IFBvaW50cywgQnVmZmVyQXR0cmlidXRlLCBCdWZmZXJHZW9tZXRyeSB9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBwb2ludHMgPSB0aGlzLnBvaW50c1JlZigpPy5uYXRpdmVFbGVtZW50O1xuXHRcdFx0aWYgKCFwb2ludHMpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgYXR0cmlidXRlcyA9IHBvaW50cy5nZW9tZXRyeS5hdHRyaWJ1dGVzO1xuXHRcdFx0Y2hlY2tVcGRhdGUoYXR0cmlidXRlc1sncG9zaXRpb24nXSk7XG5cdFx0XHRpZiAodGhpcy5jb2xvcnMoKSkgY2hlY2tVcGRhdGUoYXR0cmlidXRlc1snY29sb3InXSk7XG5cdFx0XHRpZiAodGhpcy5zaXplcygpKSBjaGVja1VwZGF0ZShhdHRyaWJ1dGVzWydzaXplJ10pO1xuXHRcdH0pO1xuXHR9XG5cblx0cHJvdGVjdGVkIHJlYWRvbmx5IER5bmFtaWNEcmF3VXNhZ2UgPSBEeW5hbWljRHJhd1VzYWdlO1xufVxuXG5jb25zdCBwYXJlbnRNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuY29uc3QgcG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndHNQb2ludHNJbnN0YW5jZXNPcHRpb25zIGV4dGVuZHMgUGFydGlhbDxOZ3RQb2ludHM+IHtcblx0cmFuZ2U/OiBudW1iZXI7XG5cdGxpbWl0OiBudW1iZXI7XG59XG5cbmNvbnN0IGRlZmF1bHRJbnN0YW5jZXNPcHRpb25zOiBOZ3RzUG9pbnRzSW5zdGFuY2VzT3B0aW9ucyA9IHsgbGltaXQ6IDEwMDAgfTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cy1wb2ludHMtaW5zdGFuY2VzJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LXBvaW50c1xuXHRcdFx0I3BvaW50c1xuXHRcdFx0W3VzZXJEYXRhXT1cInsgaW5zdGFuY2VzOiBwb3NpdGlvblBvaW50cyB9XCJcblx0XHRcdFttYXRyaXhBdXRvVXBkYXRlXT1cImZhbHNlXCJcblx0XHRcdFtyYXljYXN0XT1cIm51bGxcIlxuXHRcdFx0W3BhcmFtZXRlcnNdPVwicGFyYW1ldGVycygpXCJcblx0XHQ+XG5cdFx0XHQ8bmd0LWJ1ZmZlci1nZW9tZXRyeT5cblx0XHRcdFx0PG5ndC1idWZmZXItYXR0cmlidXRlXG5cdFx0XHRcdFx0YXR0YWNoPVwiYXR0cmlidXRlcy5wb3NpdGlvblwiXG5cdFx0XHRcdFx0W2NvdW50XT1cImJ1ZmZlcnMoKS5wb3NpdGlvbnMubGVuZ3RoIC8gM1wiXG5cdFx0XHRcdFx0W2FycmF5XT1cImJ1ZmZlcnMoKS5wb3NpdGlvbnNcIlxuXHRcdFx0XHRcdFtpdGVtU2l6ZV09XCIzXCJcblx0XHRcdFx0XHRbdXNhZ2VdPVwiRHluYW1pY0RyYXdVc2FnZVwiXG5cdFx0XHRcdC8+XG5cdFx0XHRcdDxuZ3QtYnVmZmVyLWF0dHJpYnV0ZVxuXHRcdFx0XHRcdGF0dGFjaD1cImF0dHJpYnV0ZXMuY29sb3JcIlxuXHRcdFx0XHRcdFtjb3VudF09XCJidWZmZXJzKCkuY29sb3JzLmxlbmd0aCAvIDNcIlxuXHRcdFx0XHRcdFthcnJheV09XCJidWZmZXJzKCkuY29sb3JzXCJcblx0XHRcdFx0XHRbaXRlbVNpemVdPVwiM1wiXG5cdFx0XHRcdFx0W3VzYWdlXT1cIkR5bmFtaWNEcmF3VXNhZ2VcIlxuXHRcdFx0XHQvPlxuXHRcdFx0XHQ8bmd0LWJ1ZmZlci1hdHRyaWJ1dGVcblx0XHRcdFx0XHRhdHRhY2g9XCJhdHRyaWJ1dGVzLnNpemVcIlxuXHRcdFx0XHRcdFtjb3VudF09XCJidWZmZXJzKCkuc2l6ZXMubGVuZ3RoXCJcblx0XHRcdFx0XHRbYXJyYXldPVwiYnVmZmVycygpLnNpemVzXCJcblx0XHRcdFx0XHRbaXRlbVNpemVdPVwiMVwiXG5cdFx0XHRcdFx0W3VzYWdlXT1cIkR5bmFtaWNEcmF3VXNhZ2VcIlxuXHRcdFx0XHQvPlxuXHRcdFx0PC9uZ3QtYnVmZmVyLWdlb21ldHJ5PlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1wb2ludHM+XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHNQb2ludHNJbnN0YW5jZXMge1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdEluc3RhbmNlc09wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0SW5zdGFuY2VzT3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydsaW1pdCcsICdyYW5nZSddKTtcblxuXHRwb2ludHNSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxQb2ludHM+PigncG9pbnRzJyk7XG5cblx0cHJpdmF0ZSBsaW1pdCA9IHBpY2sodGhpcy5vcHRpb25zLCAnbGltaXQnKTtcblxuXHRidWZmZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IGxpbWl0ID0gdGhpcy5saW1pdCgpO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBvc2l0aW9uczogbmV3IEZsb2F0MzJBcnJheShsaW1pdCAqIDMpLFxuXHRcdFx0Y29sb3JzOiBGbG9hdDMyQXJyYXkuZnJvbSh7IGxlbmd0aDogbGltaXQgKiAzIH0sICgpID0+IDEpLFxuXHRcdFx0c2l6ZXM6IEZsb2F0MzJBcnJheS5mcm9tKHsgbGVuZ3RoOiBsaW1pdCB9LCAoKSA9PiAxKSxcblx0XHR9O1xuXHR9KTtcblxuXHRwb3NpdGlvblBvaW50czogQXJyYXk8RWxlbWVudFJlZjxQb3NpdGlvblBvaW50PiB8IFBvc2l0aW9uUG9pbnQ+ID0gW107XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgUG9pbnRzLCBCdWZmZXJBdHRyaWJ1dGUsIEJ1ZmZlckdlb21ldHJ5IH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIXBvaW50cykgcmV0dXJuO1xuXHRcdFx0Y2hlY2tVcGRhdGUocG9pbnRzLmdlb21ldHJ5LmF0dHJpYnV0ZXNbJ3Bvc2l0aW9uJ10pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0QmVmb3JlUmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IHBvaW50cyA9IHRoaXMucG9pbnRzUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAoIXBvaW50cykgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCB7IGxpbWl0LCByYW5nZSB9ID0gdGhpcy5vcHRpb25zKCk7XG5cdFx0XHRjb25zdCB7IHBvc2l0aW9ucywgc2l6ZXMsIGNvbG9ycyB9ID0gdGhpcy5idWZmZXJzKCk7XG5cblx0XHRcdHBvaW50cy51cGRhdGVNYXRyaXgoKTtcblx0XHRcdHBvaW50cy51cGRhdGVNYXRyaXhXb3JsZCgpO1xuXHRcdFx0cGFyZW50TWF0cml4LmNvcHkocG9pbnRzLm1hdHJpeFdvcmxkKS5pbnZlcnQoKTtcblxuXHRcdFx0cG9pbnRzLmdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCA9IE1hdGgubWluKFxuXHRcdFx0XHRsaW1pdCxcblx0XHRcdFx0cmFuZ2UgIT09IHVuZGVmaW5lZCA/IHJhbmdlIDogbGltaXQsXG5cdFx0XHRcdHRoaXMucG9zaXRpb25Qb2ludHMubGVuZ3RoLFxuXHRcdFx0KTtcblxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnBvc2l0aW9uUG9pbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHBvc2l0aW9uUG9pbnQgPSByZXNvbHZlUmVmKHRoaXMucG9zaXRpb25Qb2ludHNbaV0pO1xuXHRcdFx0XHRpZiAocG9zaXRpb25Qb2ludCkge1xuXHRcdFx0XHRcdHBvc2l0aW9uUG9pbnQuZ2V0V29ybGRQb3NpdGlvbihwb3NpdGlvbikuYXBwbHlNYXRyaXg0KHBhcmVudE1hdHJpeCk7XG5cdFx0XHRcdFx0cG9zaXRpb24udG9BcnJheShwb3NpdGlvbnMsIGkgKiAzKTtcblx0XHRcdFx0XHRjaGVja1VwZGF0ZShwb2ludHMuZ2VvbWV0cnkuYXR0cmlidXRlc1sncG9zaXRpb24nXSk7XG5cblx0XHRcdFx0XHRwb3NpdGlvblBvaW50Lm1hdHJpeFdvcmxkTmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdHBvc2l0aW9uUG9pbnQuY29sb3IudG9BcnJheShjb2xvcnMsIGkgKiAzKTtcblx0XHRcdFx0XHRjaGVja1VwZGF0ZShwb2ludHMuZ2VvbWV0cnkuYXR0cmlidXRlc1snY29sb3InXSk7XG5cblx0XHRcdFx0XHRzaXplcy5zZXQoW3Bvc2l0aW9uUG9pbnQuc2l6ZV0sIGkpO1xuXHRcdFx0XHRcdGNoZWNrVXBkYXRlKHBvaW50cy5nZW9tZXRyeS5hdHRyaWJ1dGVzWydzaXplJ10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRzdWJzY3JpYmUocmVmOiBFbGVtZW50UmVmPFBvc2l0aW9uUG9pbnQ+IHwgUG9zaXRpb25Qb2ludCkge1xuXHRcdHRoaXMucG9zaXRpb25Qb2ludHMucHVzaChyZWYpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHR0aGlzLnBvc2l0aW9uUG9pbnRzID0gdGhpcy5wb3NpdGlvblBvaW50cy5maWx0ZXIoKHApID0+IHAgIT09IHJlZik7XG5cdFx0fTtcblx0fVxuXG5cdHByb3RlY3RlZCByZWFkb25seSBEeW5hbWljRHJhd1VzYWdlID0gRHluYW1pY0RyYXdVc2FnZTtcbn1cbiJdfQ==
@@ -1,53 +0,0 @@
1
- import { resolveRef } from 'angular-three';
2
- import { Color, Group, Matrix4, Ray, Sphere, Vector3 } from 'three';
3
- const _inverseMatrix = new Matrix4();
4
- const _ray = new Ray();
5
- const _sphere = new Sphere();
6
- const _position = new Vector3();
7
- export class PositionPoint extends Group {
8
- constructor() {
9
- super();
10
- this.size = 0;
11
- this.color = new Color('white');
12
- this.instance = undefined;
13
- }
14
- // This will allow the virtual instance have bounds
15
- get geometry() {
16
- return resolveRef(this.instance)?.geometry;
17
- }
18
- raycast(raycaster, intersects) {
19
- const parent = resolveRef(this.instance);
20
- if (!parent || !parent.geometry)
21
- return;
22
- const instanceId = parent.userData['instances'].indexOf(this);
23
- // If the instance wasn't found or exceeds the parents draw range, bail out
24
- if (instanceId === -1 || instanceId > parent.geometry.drawRange.count)
25
- return;
26
- const threshold = raycaster.params.Points?.threshold ?? 1;
27
- _sphere.set(this.getWorldPosition(_position), threshold);
28
- if (raycaster.ray.intersectsSphere(_sphere) === false)
29
- return;
30
- _inverseMatrix.copy(parent.matrixWorld).invert();
31
- _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);
32
- const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);
33
- const localThresholdSq = localThreshold * localThreshold;
34
- const rayPointDistanceSq = _ray.distanceSqToPoint(this.position);
35
- if (rayPointDistanceSq < localThresholdSq) {
36
- const intersectPoint = new Vector3();
37
- _ray.closestPointToPoint(this.position, intersectPoint);
38
- intersectPoint.applyMatrix4(this.matrixWorld);
39
- const distance = raycaster.ray.origin.distanceTo(intersectPoint);
40
- if (distance < raycaster.near || distance > raycaster.far)
41
- return;
42
- intersects.push({
43
- distance: distance,
44
- distanceToRay: Math.sqrt(rayPointDistanceSq),
45
- point: intersectPoint,
46
- index: instanceId,
47
- face: null,
48
- object: this,
49
- });
50
- }
51
- }
52
- }
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb24tcG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9saWIvcG9pbnRzL3Bvc2l0aW9uLXBvaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBbUIsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFnQixPQUFPLEVBQVUsR0FBRyxFQUFhLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFJckcsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNyQyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7QUFDN0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUVoQyxNQUFNLE9BQU8sYUFBYyxTQUFRLEtBQUs7SUFLdkM7UUFDQyxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsbURBQW1EO0lBQ25ELElBQUksUUFBUTtRQUNYLE9BQU8sVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUM7SUFDNUMsQ0FBQztJQUVRLE9BQU8sQ0FBQyxTQUFvQixFQUFFLFVBQTBCO1FBQ2hFLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUN4QyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5RCwyRUFBMkU7UUFDM0UsSUFBSSxVQUFVLEtBQUssQ0FBQyxDQUFDLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEtBQUs7WUFBRSxPQUFPO1FBRTlFLE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFNBQVMsSUFBSSxDQUFDLENBQUM7UUFDMUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDekQsSUFBSSxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxLQUFLLEtBQUs7WUFBRSxPQUFPO1FBRTlELGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV0RCxNQUFNLGNBQWMsR0FBRyxTQUFTLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdEYsTUFBTSxnQkFBZ0IsR0FBRyxjQUFjLEdBQUcsY0FBYyxDQUFDO1FBQ3pELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUVqRSxJQUFJLGtCQUFrQixHQUFHLGdCQUFnQixFQUFFLENBQUM7WUFDM0MsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNyQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxjQUFjLENBQUMsQ0FBQztZQUN4RCxjQUFjLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDakUsSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLElBQUksSUFBSSxRQUFRLEdBQUcsU0FBUyxDQUFDLEdBQUc7Z0JBQUUsT0FBTztZQUNsRSxVQUFVLENBQUMsSUFBSSxDQUFDO2dCQUNmLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixhQUFhLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztnQkFDNUMsS0FBSyxFQUFFLGNBQWM7Z0JBQ3JCLEtBQUssRUFBRSxVQUFVO2dCQUNqQixJQUFJLEVBQUUsSUFBSTtnQkFDVixNQUFNLEVBQUUsSUFBSTthQUNaLENBQUMsQ0FBQztRQUNKLENBQUM7SUFDRixDQUFDO0NBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RPYmplY3QzRE5vZGUsIHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IENvbG9yLCBHcm91cCwgSW50ZXJzZWN0aW9uLCBNYXRyaXg0LCBQb2ludHMsIFJheSwgUmF5Y2FzdGVyLCBTcGhlcmUsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIE5ndFBvc2l0aW9uUG9pbnQgPSBOZ3RPYmplY3QzRE5vZGU8UG9zaXRpb25Qb2ludCwgdHlwZW9mIFBvc2l0aW9uUG9pbnQ+O1xuXG5jb25zdCBfaW52ZXJzZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5jb25zdCBfcmF5ID0gbmV3IFJheSgpO1xuY29uc3QgX3NwaGVyZSA9IG5ldyBTcGhlcmUoKTtcbmNvbnN0IF9wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cbmV4cG9ydCBjbGFzcyBQb3NpdGlvblBvaW50IGV4dGVuZHMgR3JvdXAge1xuXHRzaXplOiBudW1iZXI7XG5cdGNvbG9yOiBDb2xvcjtcblx0aW5zdGFuY2U6IEVsZW1lbnRSZWY8UG9pbnRzPiB8IFBvaW50cyB8IG51bGwgfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnNpemUgPSAwO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoJ3doaXRlJyk7XG5cdFx0dGhpcy5pbnN0YW5jZSA9IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFRoaXMgd2lsbCBhbGxvdyB0aGUgdmlydHVhbCBpbnN0YW5jZSBoYXZlIGJvdW5kc1xuXHRnZXQgZ2VvbWV0cnkoKSB7XG5cdFx0cmV0dXJuIHJlc29sdmVSZWYodGhpcy5pbnN0YW5jZSk/Lmdlb21ldHJ5O1xuXHR9XG5cblx0b3ZlcnJpZGUgcmF5Y2FzdChyYXljYXN0ZXI6IFJheWNhc3RlciwgaW50ZXJzZWN0czogSW50ZXJzZWN0aW9uW10pIHtcblx0XHRjb25zdCBwYXJlbnQgPSByZXNvbHZlUmVmKHRoaXMuaW5zdGFuY2UpO1xuXHRcdGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2VvbWV0cnkpIHJldHVybjtcblx0XHRjb25zdCBpbnN0YW5jZUlkID0gcGFyZW50LnVzZXJEYXRhWydpbnN0YW5jZXMnXS5pbmRleE9mKHRoaXMpO1xuXHRcdC8vIElmIHRoZSBpbnN0YW5jZSB3YXNuJ3QgZm91bmQgb3IgZXhjZWVkcyB0aGUgcGFyZW50cyBkcmF3IHJhbmdlLCBiYWlsIG91dFxuXHRcdGlmIChpbnN0YW5jZUlkID09PSAtMSB8fCBpbnN0YW5jZUlkID4gcGFyZW50Lmdlb21ldHJ5LmRyYXdSYW5nZS5jb3VudCkgcmV0dXJuO1xuXG5cdFx0Y29uc3QgdGhyZXNob2xkID0gcmF5Y2FzdGVyLnBhcmFtcy5Qb2ludHM/LnRocmVzaG9sZCA/PyAxO1xuXHRcdF9zcGhlcmUuc2V0KHRoaXMuZ2V0V29ybGRQb3NpdGlvbihfcG9zaXRpb24pLCB0aHJlc2hvbGQpO1xuXHRcdGlmIChyYXljYXN0ZXIucmF5LmludGVyc2VjdHNTcGhlcmUoX3NwaGVyZSkgPT09IGZhbHNlKSByZXR1cm47XG5cblx0XHRfaW52ZXJzZU1hdHJpeC5jb3B5KHBhcmVudC5tYXRyaXhXb3JsZCkuaW52ZXJ0KCk7XG5cdFx0X3JheS5jb3B5KHJheWNhc3Rlci5yYXkpLmFwcGx5TWF0cml4NChfaW52ZXJzZU1hdHJpeCk7XG5cblx0XHRjb25zdCBsb2NhbFRocmVzaG9sZCA9IHRocmVzaG9sZCAvICgodGhpcy5zY2FsZS54ICsgdGhpcy5zY2FsZS55ICsgdGhpcy5zY2FsZS56KSAvIDMpO1xuXHRcdGNvbnN0IGxvY2FsVGhyZXNob2xkU3EgPSBsb2NhbFRocmVzaG9sZCAqIGxvY2FsVGhyZXNob2xkO1xuXHRcdGNvbnN0IHJheVBvaW50RGlzdGFuY2VTcSA9IF9yYXkuZGlzdGFuY2VTcVRvUG9pbnQodGhpcy5wb3NpdGlvbik7XG5cblx0XHRpZiAocmF5UG9pbnREaXN0YW5jZVNxIDwgbG9jYWxUaHJlc2hvbGRTcSkge1xuXHRcdFx0Y29uc3QgaW50ZXJzZWN0UG9pbnQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFx0X3JheS5jbG9zZXN0UG9pbnRUb1BvaW50KHRoaXMucG9zaXRpb24sIGludGVyc2VjdFBvaW50KTtcblx0XHRcdGludGVyc2VjdFBvaW50LmFwcGx5TWF0cml4NCh0aGlzLm1hdHJpeFdvcmxkKTtcblx0XHRcdGNvbnN0IGRpc3RhbmNlID0gcmF5Y2FzdGVyLnJheS5vcmlnaW4uZGlzdGFuY2VUbyhpbnRlcnNlY3RQb2ludCk7XG5cdFx0XHRpZiAoZGlzdGFuY2UgPCByYXljYXN0ZXIubmVhciB8fCBkaXN0YW5jZSA+IHJheWNhc3Rlci5mYXIpIHJldHVybjtcblx0XHRcdGludGVyc2VjdHMucHVzaCh7XG5cdFx0XHRcdGRpc3RhbmNlOiBkaXN0YW5jZSxcblx0XHRcdFx0ZGlzdGFuY2VUb1JheTogTWF0aC5zcXJ0KHJheVBvaW50RGlzdGFuY2VTcSksXG5cdFx0XHRcdHBvaW50OiBpbnRlcnNlY3RQb2ludCxcblx0XHRcdFx0aW5kZXg6IGluc3RhbmNlSWQsXG5cdFx0XHRcdGZhY2U6IG51bGwsXG5cdFx0XHRcdG9iamVjdDogdGhpcyxcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1ncm91cFxuXHRcdCAqIEByYXdPcHRpb25zIGluc3RhbmNlfGNvbG9yfHNpemVcblx0XHQgKi9cblx0XHQnbmd0LXBvc2l0aW9uLXBvaW50JzogTmd0UG9zaXRpb25Qb2ludDtcblx0fVxufVxuIl19
@@ -1,9 +0,0 @@
1
- import { Color, Vector3 } from 'three';
2
- export class SegmentObject {
3
- constructor() {
4
- this.color = new Color('white');
5
- this.start = new Vector3(0, 0, 0);
6
- this.end = new Vector3(0, 0, 0);
7
- }
8
- }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudC1vYmplY3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvcGVyZm9ybWFuY2VzL3NyYy9saWIvc2VnbWVudHMvc2VnbWVudC1vYmplY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFJdkMsTUFBTSxPQUFPLGFBQWE7SUFLekI7UUFDQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDakMsQ0FBQztDQUNEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd0Tm9kZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQ29sb3IsIFZlY3RvcjMgfSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCB0eXBlIE5ndFNlZ21lbnRPYmplY3QgPSBOZ3ROb2RlPFNlZ21lbnRPYmplY3QsIHR5cGVvZiBTZWdtZW50T2JqZWN0PjtcblxuZXhwb3J0IGNsYXNzIFNlZ21lbnRPYmplY3Qge1xuXHRjb2xvcjogQ29sb3I7XG5cdHN0YXJ0OiBWZWN0b3IzO1xuXHRlbmQ6IFZlY3RvcjM7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcignd2hpdGUnKTtcblx0XHR0aGlzLnN0YXJ0ID0gbmV3IFZlY3RvcjMoMCwgMCwgMCk7XG5cdFx0dGhpcy5lbmQgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcblx0fVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEByYXdPcHRpb25zIHN0YXJ0fGNvbG9yfGVuZFxuXHRcdCAqL1xuXHRcdCduZ3Qtc2VnbWVudC1vYmplY3QnOiBOZ3RTZWdtZW50T2JqZWN0O1xuXHR9XG59XG4iXX0=