vtk.js 26.9.4 → 26.9.5

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.
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @project vtk.js
3
- * @build Wed, Mar 15, 2023 10:25 PM ET
3
+ * @build Wed, Mar 22, 2023 2:19 PM ET
4
4
  * @copyright Copyright (c) 2023 Kitware, Inc.
5
5
  *
6
6
  */
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @project vtk.js
3
- * @build Wed, Mar 15, 2023 10:25 PM ET
3
+ * @build Wed, Mar 22, 2023 2:19 PM ET
4
4
  * @copyright Copyright (c) 2023 Kitware, Inc.
5
5
  *
6
6
  */
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @project vtk.js
3
- * @build Wed, Mar 15, 2023 10:25 PM ET
3
+ * @build Wed, Mar 22, 2023 2:19 PM ET
4
4
  * @copyright Copyright (c) 2023 Kitware, Inc.
5
5
  *
6
6
  */
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @project vtk.js
3
- * @build Wed, Mar 15, 2023 10:25 PM ET
3
+ * @build Wed, Mar 22, 2023 2:19 PM ET
4
4
  * @copyright Copyright (c) 2023 Kitware, Inc.
5
5
  *
6
6
  */
@@ -0,0 +1,659 @@
1
+ import { mat4 } from 'gl-matrix';
2
+ import { Bounds, Vector2, Vector3 } from 'vtk.js/Sources/types';
3
+ import vtkPoints from 'vtk.js/Sources/Common/Core/Points';
4
+
5
+ /**
6
+ * Tests whether two bounds equal.
7
+ * @param {Bounds} a
8
+ * @param {Bounds} b
9
+ */
10
+ export function equals(a: Bounds, b: Bounds): boolean;
11
+
12
+ /**
13
+ * Tests whether a given bounds is valid.
14
+ * @param {Bounds} bounds
15
+ */
16
+ export function isValid(bounds: Bounds): boolean;
17
+
18
+ /**
19
+ * Sets a bounding box from another bounding box.
20
+ * @param {Bounds} bounds
21
+ * @param {Bounds} other
22
+ */
23
+ export function setBounds(bounds: Bounds, other: Bounds): Bounds;
24
+
25
+ /**
26
+ * Resets a bounds to infinity.
27
+ * @param {Bounds} bounds
28
+ */
29
+ export function reset(bounds: Bounds): Bounds;
30
+
31
+ /**
32
+ * Adds points to a bounding box.
33
+ * @param {Bounds} bounds
34
+ * @param {number} x
35
+ * @param {number} y
36
+ * @param {number} z
37
+ */
38
+ export function addPoint(
39
+ bounds: Bounds,
40
+ x: number,
41
+ y: number,
42
+ z: number
43
+ ): Bounds;
44
+
45
+ /**
46
+ * Adds points to a bounding box.
47
+ * @param {Bounds} bounds
48
+ * @param {number[]} points A flattened array of 3D coordinates.
49
+ */
50
+ export function addPoints(bounds: Bounds, points: number[]): Bounds;
51
+
52
+ /**
53
+ * Adds two bounding boxes together.
54
+ * @param {Bounds} bounds
55
+ * @param {number} xMin
56
+ * @param {number} xMax
57
+ * @param {number} yMin
58
+ * @param {number} yMax
59
+ * @param {number} zMin
60
+ * @param {number} zMax
61
+ */
62
+ export function addBounds(
63
+ bounds: Bounds,
64
+ xMin: number,
65
+ xMax: number,
66
+ yMin: number,
67
+ yMax: number,
68
+ zMin: number,
69
+ zMax: number
70
+ ): Bounds;
71
+
72
+ /**
73
+ * Sets the min point of a bounding box.
74
+ * @param {Bounds} bounds
75
+ * @param {number} x
76
+ * @param {number} y
77
+ * @param {number} z
78
+ */
79
+ export function setMinPoint(
80
+ bounds: Bounds,
81
+ x: number,
82
+ y: number,
83
+ z: number
84
+ ): boolean;
85
+
86
+ /**
87
+ * Sets the max point of a bounding box.
88
+ * @param {Bounds} bounds
89
+ * @param {number} x
90
+ * @param {number} y
91
+ * @param {number} z
92
+ */
93
+ export function setMaxPoint(
94
+ bounds: Bounds,
95
+ x: number,
96
+ y: number,
97
+ z: number
98
+ ): boolean;
99
+
100
+ /**
101
+ * Inflates a bounding box.
102
+ * @param {Bounds} bounds
103
+ * @param {number} delta
104
+ */
105
+ export function inflate(bounds: Bounds, delta: number): Bounds;
106
+
107
+ /**
108
+ * Scales a bounding box.
109
+ * @param {Bounds} bounds
110
+ * @param {number} sx
111
+ * @param {number} sy
112
+ * @param {number} sz
113
+ */
114
+ export function scale(
115
+ bounds: Bounds,
116
+ sx: number,
117
+ sy: number,
118
+ sz: number
119
+ ): boolean;
120
+
121
+ /**
122
+ * Gets the center of a bounding box.
123
+ * @param {Bounds} bounds
124
+ */
125
+ export function getCenter(bounds: Bounds): Vector3;
126
+
127
+ /**
128
+ * Scales a bounding box around its center.
129
+ * @param {Bounds} bounds
130
+ * @param {number} sx
131
+ * @param {number} sy
132
+ * @param {number} sz
133
+ */
134
+ export function scaleAboutCenter(
135
+ bounds: Bounds,
136
+ sx: number,
137
+ sy: number,
138
+ sz: number
139
+ ): boolean;
140
+
141
+ /**
142
+ * Gets the bounding box side length.
143
+ * @param {Bounds} bounds
144
+ * @param {number} index
145
+ */
146
+ export function getLength(bounds: Bounds, index: number): number;
147
+
148
+ /**
149
+ * Gets the lengths of all sides.
150
+ * @param {Bounds} bounds
151
+ */
152
+ export function getLengths(bounds: Bounds): Vector3;
153
+
154
+ /**
155
+ * Gets the x range of a bounding box.
156
+ * @param {Bounds} bounds
157
+ */
158
+ export function getXRange(bounds: Bounds): Vector2;
159
+
160
+ /**
161
+ * Gets the y range of a bounding box.
162
+ * @param {Bounds} bounds
163
+ */
164
+ export function getYRange(bounds: Bounds): Vector2;
165
+
166
+ /**
167
+ * Gets the z range of a bounding box.
168
+ * @param {Bounds} bounds
169
+ */
170
+ export function getZRange(bounds: Bounds): Vector2;
171
+
172
+ /**
173
+ * Gets the maximum side length of the bounding box.
174
+ * @param {Bounds} bounds
175
+ */
176
+ export function getMaxLength(bounds: Bounds): number;
177
+
178
+ /**
179
+ * Gets the diagonal of the bounding box.
180
+ * @param {Bounds} bounds
181
+ */
182
+ export function getDiagonalLength(bounds: Bounds): number;
183
+
184
+ /**
185
+ * Gets the min point.
186
+ * @param {Bounds} bounds
187
+ */
188
+
189
+ export function getMinPoint(bounds: Bounds): Vector3;
190
+
191
+ /**
192
+ * Gets the max point.
193
+ * @param {Bounds} bounds
194
+ */
195
+ export function getMaxPoint(bounds: Bounds): Vector3;
196
+
197
+ /**
198
+ * Gets the corners of a bounding box.
199
+ * @param {Bounds} bounds
200
+ * @param {Vector3[]} corners
201
+ */
202
+ export function getCorners(bounds: Bounds, corners: Vector3[]): Vector3[];
203
+
204
+ /**
205
+ * Computes the two corner poitns with min and max coords.
206
+ * @param {Bounds} bounds
207
+ * @param {Vector3} point1
208
+ * @param {Vector3} point2
209
+ */
210
+ export function computeCornerPoints(
211
+ bounds: Bounds,
212
+ point1: Vector3,
213
+ point2: Vector3
214
+ ): Vector3;
215
+
216
+ /**
217
+ * Transforms a bounding box.
218
+ * @param {Bounds} bounds
219
+ * @param {mat4} transform
220
+ * @param {Bounds} out
221
+ */
222
+ export function transformBounds(
223
+ bounds: Bounds,
224
+ transform: mat4,
225
+ out: Bounds
226
+ ): ReturnType<typeof addPoints>;
227
+
228
+ export function computeScale3(bounds: Bounds, scale3: Vector3): Vector3;
229
+
230
+ /**
231
+ * Compute local bounds.
232
+ * Not as fast as vtkPoints.getBounds() if u, v, w form a natural basis.
233
+ * @param {vtkPoints} points
234
+ * @param {array} u first vector
235
+ * @param {array} v second vector
236
+ * @param {array} w third vector
237
+ */
238
+
239
+ export function computeLocalBounds(
240
+ points: vtkPoints,
241
+ u: Vector3,
242
+ v: Vector3,
243
+ w: Vector3
244
+ ): Bounds;
245
+
246
+ /**
247
+ * The method returns a non-zero value if the bounding box is hit.
248
+ * Origin[3] starts the ray, dir[3] is the vector components of the ray in the x-y-z
249
+ * directions, coord[3] is the location of hit, and t is the parametric
250
+ * coordinate along line. (Notes: the intersection ray dir[3] is NOT
251
+ * normalized. Valid intersections will only occur between 0<=t<=1.)
252
+ * @param {Bounds} bounds
253
+ * @param {Vector3} origin
254
+ * @param {Vector3} dir
255
+ * @param {Vector3} coord
256
+ * @param {number} tolerance
257
+ */
258
+ export function intersectBox(
259
+ bounds: Bounds,
260
+ origin: Vector3,
261
+ dir: Vector3,
262
+ coord: Vector3,
263
+ tolerance: number
264
+ ): boolean;
265
+
266
+ /**
267
+ * Plane intersection with box
268
+ * The plane is infinite in extent and defined by an origin and normal.The function indicates
269
+ * whether the plane intersects, not the particulars of intersection points and such
270
+ * The function returns non-zero if the plane and box intersect; zero otherwise.
271
+ * @param {Bounds} bounds
272
+ * @param {Vector3} origin
273
+ * @param {Vector3} normal
274
+ */
275
+ export function intersectPlane(
276
+ bounds: Bounds,
277
+ origin: Vector3,
278
+ normal: Vector3
279
+ ): boolean;
280
+
281
+ /**
282
+ * Do two bounding boxes intersect.
283
+ * @param {Bounds} bounds
284
+ * @param bBounds
285
+ */
286
+ export function intersect(bounds: Bounds, bBounds: Bounds): boolean;
287
+
288
+ /**
289
+ * Do two bounding boxes intersect.
290
+ * @param {Bounds} bounds
291
+ * @param {Bounds} bBounds
292
+ */
293
+ export function intersects(bounds: Bounds, bBounds: Bounds): boolean;
294
+
295
+ /**
296
+ * Does the bbox contain a given point.
297
+ * @param {Bounds} bounds
298
+ * @param {number} x
299
+ * @param {number} y
300
+ * @param {number} z
301
+ */
302
+ export function containsPoint(
303
+ bounds: Bounds,
304
+ x: number,
305
+ y: number,
306
+ z: number
307
+ ): boolean;
308
+
309
+ /**
310
+ * Is a bbox contained in another bbox.
311
+ * @param {Bounds} bounds
312
+ * @param {Bounds} other
313
+ */
314
+ export function contains(bounds: Bounds, other: Bounds): boolean;
315
+
316
+ /**
317
+ * Does a plane intersect a boox.
318
+ * @param {Bounds} bounds
319
+ * @param {Vector3} origin
320
+ * @param {Vector3} normal
321
+ */
322
+ export function cutWithPlane(
323
+ bounds: Bounds,
324
+ origin: Vector3,
325
+ normal: Vector3
326
+ ): boolean;
327
+
328
+ declare class BoundingBox {
329
+ getBounds(): Bounds;
330
+ /**
331
+ * Tests whether two bounds equal.
332
+ * @param {Bounds} a
333
+ * @param {Bounds} b
334
+ */
335
+ equals(a: Bounds, b: Bounds): boolean;
336
+
337
+ /**
338
+ * Tests whether a given bounds is valid.
339
+ * @param {Bounds} bounds
340
+ */
341
+ isValid(bounds: Bounds): boolean;
342
+
343
+ /**
344
+ * Sets a bounding box from another bounding box.
345
+ * @param {Bounds} bounds
346
+ * @param {Bounds} other
347
+ */
348
+ setBounds(bounds: Bounds, other: Bounds): Bounds;
349
+
350
+ /**
351
+ * Resets a bounds to infinity.
352
+ * @param {Bounds} bounds
353
+ */
354
+ reset(bounds: Bounds): Bounds;
355
+
356
+ /**
357
+ * Adds points to a bounding box.
358
+ * @param {Bounds} bounds
359
+ * @param {number} x
360
+ * @param {number} y
361
+ * @param {number} z
362
+ */
363
+ addPoint(bounds: Bounds, x: number, y: number, z: number): Bounds;
364
+
365
+ /**
366
+ * Adds points to a bounding box.
367
+ * @param {Bounds} bounds
368
+ * @param {number[]} points A flattened array of 3D coordinates.
369
+ */
370
+ addPoints(bounds: Bounds, points: number[]): Bounds;
371
+
372
+ /**
373
+ * Adds two bounding boxes together.
374
+ * @param {Bounds} bounds
375
+ * @param {number} xMin
376
+ * @param {number} xMax
377
+ * @param {number} yMin
378
+ * @param {number} yMax
379
+ * @param {number} zMin
380
+ * @param {number} zMax
381
+ */
382
+ addBounds(
383
+ bounds: Bounds,
384
+ xMin: number,
385
+ xMax: number,
386
+ yMin: number,
387
+ yMax: number,
388
+ zMin: number,
389
+ zMax: number
390
+ ): Bounds;
391
+
392
+ /**
393
+ * Sets the min point of a bounding box.
394
+ * @param {Bounds} bounds
395
+ * @param {number} x
396
+ * @param {number} y
397
+ * @param {number} z
398
+ */
399
+ setMinPoint(bounds: Bounds, x: number, y: number, z: number): boolean;
400
+
401
+ /**
402
+ * Sets the max point of a bounding box.
403
+ * @param {Bounds} bounds
404
+ * @param {number} x
405
+ * @param {number} y
406
+ * @param {number} z
407
+ */
408
+ setMaxPoint(bounds: Bounds, x: number, y: number, z: number): boolean;
409
+
410
+ /**
411
+ * Inflates a bounding box.
412
+ * @param {Bounds} bounds
413
+ * @param {number} delta
414
+ */
415
+ inflate(bounds: Bounds, delta: number): Bounds;
416
+
417
+ /**
418
+ * Scales a bounding box.
419
+ * @param {Bounds} bounds
420
+ * @param {number} sx
421
+ * @param {number} sy
422
+ * @param {number} sz
423
+ */
424
+ scale(bounds: Bounds, sx: number, sy: number, sz: number): boolean;
425
+
426
+ /**
427
+ * Gets the center of a bounding box.
428
+ * @param {Bounds} bounds
429
+ */
430
+ getCenter(bounds: Bounds): Vector3;
431
+
432
+ /**
433
+ * Scales a bounding box around its center.
434
+ * @param {Bounds} bounds
435
+ * @param {number} sx
436
+ * @param {number} sy
437
+ * @param {number} sz
438
+ */
439
+ scaleAboutCenter(bounds: Bounds, sx: number, sy: number, sz: number): boolean;
440
+
441
+ /**
442
+ * Gets the bounding box side length.
443
+ * @param {Bounds} bounds
444
+ * @param {number} index
445
+ */
446
+ getLength(bounds: Bounds, index: number): number;
447
+
448
+ /**
449
+ * Gets the lengths of all sides.
450
+ * @param {Bounds} bounds
451
+ */
452
+ getLengths(bounds: Bounds): Vector3;
453
+
454
+ /**
455
+ * Gets the x range of a bounding box.
456
+ * @param {Bounds} bounds
457
+ */
458
+ getXRange(bounds: Bounds): Vector2;
459
+
460
+ /**
461
+ * Gets the y range of a bounding box.
462
+ * @param {Bounds} bounds
463
+ */
464
+ getYRange(bounds: Bounds): Vector2;
465
+
466
+ /**
467
+ * Gets the z range of a bounding box.
468
+ * @param {Bounds} bounds
469
+ */
470
+ getZRange(bounds: Bounds): Vector2;
471
+
472
+ /**
473
+ * Gets the maximum side length of the bounding box.
474
+ * @param {Bounds} bounds
475
+ */
476
+ getMaxLength(bounds: Bounds): number;
477
+
478
+ /**
479
+ * Gets the diagonal of the bounding box.
480
+ * @param {Bounds} bounds
481
+ */
482
+ getDiagonalLength(bounds: Bounds): number;
483
+
484
+ /**
485
+ * Gets the min point.
486
+ * @param {Bounds} bounds
487
+ */
488
+
489
+ getMinPoint(bounds: Bounds): Vector3;
490
+
491
+ /**
492
+ * Gets the max point.
493
+ * @param {Bounds} bounds
494
+ */
495
+ getMaxPoint(bounds: Bounds): Vector3;
496
+
497
+ /**
498
+ * Gets the corners of a bounding box.
499
+ * @param {Bounds} bounds
500
+ * @param {Vector3[]} corners
501
+ */
502
+ getCorners(bounds: Bounds, corners: Vector3[]): Vector3[];
503
+
504
+ /**
505
+ * Computes the two corner poitns with min and max coords.
506
+ * @param {Bounds} bounds
507
+ * @param {Vector3} point1
508
+ * @param {Vector3} point2
509
+ */
510
+ computeCornerPoints(
511
+ bounds: Bounds,
512
+ point1: Vector3,
513
+ point2: Vector3
514
+ ): Vector3;
515
+
516
+ /**
517
+ * Transforms a bounding box.
518
+ * @param {Bounds} bounds
519
+ * @param {mat4} transform
520
+ * @param {Bounds} out
521
+ */
522
+ transformBounds(
523
+ bounds: Bounds,
524
+ transform: mat4,
525
+ out: Bounds
526
+ ): ReturnType<typeof addPoints>;
527
+
528
+ computeScale3(bounds: Bounds, scale3: Vector3): Vector3;
529
+
530
+ /**
531
+ * Compute local bounds.
532
+ * Not as fast as vtkPoints.getBounds() if u, v, w form a natural basis.
533
+ * @param {vtkPoints} points
534
+ * @param {array} u first vector
535
+ * @param {array} v second vector
536
+ * @param {array} w third vector
537
+ */
538
+
539
+ computeLocalBounds(
540
+ points: vtkPoints,
541
+ u: Vector3,
542
+ v: Vector3,
543
+ w: Vector3
544
+ ): Bounds;
545
+
546
+ /**
547
+ * The method returns a non-zero value if the bounding box is hit.
548
+ * Origin[3] starts the ray, dir[3] is the vector components of the ray in the x-y-z
549
+ * directions, coord[3] is the location of hit, and t is the parametric
550
+ * coordinate along line. (Notes: the intersection ray dir[3] is NOT
551
+ * normalized. Valid intersections will only occur between 0<=t<=1.)
552
+ * @param {Bounds} bounds
553
+ * @param {Vector3} origin
554
+ * @param {Vector3} dir
555
+ * @param {Vector3} coord
556
+ * @param {number} tolerance
557
+ */
558
+ intersectBox(
559
+ bounds: Bounds,
560
+ origin: Vector3,
561
+ dir: Vector3,
562
+ coord: Vector3,
563
+ tolerance: number
564
+ ): boolean;
565
+
566
+ /**
567
+ * Plane intersection with box
568
+ * The plane is infinite in extent and defined by an origin and normal.The function indicates
569
+ * whether the plane intersects, not the particulars of intersection points and such
570
+ * The function returns non-zero if the plane and box intersect; zero otherwise.
571
+ * @param {Bounds} bounds
572
+ * @param {Vector3} origin
573
+ * @param {Vector3} normal
574
+ */
575
+ intersectPlane(bounds: Bounds, origin: Vector3, normal: Vector3): boolean;
576
+
577
+ /**
578
+ * Do two bounding boxes intersect.
579
+ * @param {Bounds} bounds
580
+ * @param bBounds
581
+ */
582
+ intersect(bounds: Bounds, bBounds: Bounds): boolean;
583
+
584
+ /**
585
+ * Do two bounding boxes intersect.
586
+ * @param {Bounds} bounds
587
+ * @param {Bounds} bBounds
588
+ */
589
+ intersects(bounds: Bounds, bBounds: Bounds): boolean;
590
+
591
+ /**
592
+ * Does the bbox contain a given point.
593
+ * @param {Bounds} bounds
594
+ * @param {number} x
595
+ * @param {number} y
596
+ * @param {number} z
597
+ */
598
+ containsPoint(bounds: Bounds, x: number, y: number, z: number): boolean;
599
+
600
+ /**
601
+ * Is a bbox contained in another bbox.
602
+ * @param {Bounds} bounds
603
+ * @param {Bounds} other
604
+ */
605
+ contains(bounds: Bounds, other: Bounds): boolean;
606
+
607
+ /**
608
+ * Does a plane intersect a boox.
609
+ * @param {Bounds} bounds
610
+ * @param {Vector3} origin
611
+ * @param {Vector3} normal
612
+ */
613
+ cutWithPlane(bounds: Bounds, origin: Vector3, normal: Vector3): boolean;
614
+ }
615
+
616
+ export interface IBoundingBoxInitialValues {
617
+ bounds?: Bounds;
618
+ }
619
+
620
+ declare const vtkBoundingBox: {
621
+ newInstance: (initialValues: IBoundingBoxInitialValues) => BoundingBox;
622
+ equals: typeof equals;
623
+ isValid: typeof isValid;
624
+ setBounds: typeof setBounds;
625
+ reset: typeof reset;
626
+ addPoint: typeof addPoint;
627
+ addPoints: typeof addPoints;
628
+ addBounds: typeof addBounds;
629
+ setMinPoint: typeof setMinPoint;
630
+ setMaxPoint: typeof setMaxPoint;
631
+ inflate: typeof inflate;
632
+ scale: typeof scale;
633
+ scaleAboutCenter: typeof scaleAboutCenter;
634
+ getCenter: typeof getCenter;
635
+ getLength: typeof getLength;
636
+ getLengths: typeof getLengths;
637
+ getMaxLength: typeof getMaxLength;
638
+ getDiagonalLength: typeof getDiagonalLength;
639
+ getMinPoint: typeof getMinPoint;
640
+ getMaxPoint: typeof getMaxPoint;
641
+ getXRange: typeof getXRange;
642
+ getYRange: typeof getYRange;
643
+ getZRange: typeof getZRange;
644
+ getCorners: typeof getCorners;
645
+ computeCornerPoints: typeof computeCornerPoints;
646
+ computeLocalBounds: typeof computeLocalBounds;
647
+ transformBounds: typeof transformBounds;
648
+ computeScale3: typeof computeScale3;
649
+ cutWithPlane: typeof cutWithPlane;
650
+ intersectBox: typeof intersectBox;
651
+ intersectPlane: typeof intersectPlane;
652
+ intersect: typeof intersect;
653
+ intersects: typeof intersects;
654
+ containsPoint: typeof containsPoint;
655
+ contains: typeof contains;
656
+ INIT_BOUNDS: Bounds;
657
+ };
658
+
659
+ export default vtkBoundingBox;
@@ -0,0 +1,84 @@
1
+ import { FieldAssociations } from 'vtk.js/Sources/Common/DataModel/DataSet/Constants';
2
+ import vtkSelectionNode from 'vtk.js/Sources/Common/DataModel/SelectionNode';
3
+ import { vtkObject } from 'vtk.js/Sources/interfaces';
4
+ import vtkRenderer from 'vtk.js/Sources/Rendering/Core/Renderer';
5
+
6
+ export interface vtkHardwareSelector extends vtkObject {
7
+ /**
8
+ * Get the picking source data.
9
+ *
10
+ * @param {vtkRenderer} renderer
11
+ * @param {number} fx1 top left x coord
12
+ * @param {number} fy1 top left y coord
13
+ * @param {number} fx2 bottom right x coord
14
+ * @param {number} fy2 bottom right y coord
15
+ */
16
+ getSourceDataAsync(
17
+ renderer: vtkRenderer,
18
+ fx1: number,
19
+ fy1: number,
20
+ fx2: number,
21
+ fy2: number
22
+ ): Promise<unknown>;
23
+
24
+ /**
25
+ * Generates a selection.
26
+ *
27
+ * @param {vtkRenderer} renderer
28
+ * @param {number} fx1 top left x coord
29
+ * @param {number} fy1 top left y coord
30
+ * @param {number} fx2 bottom right x coord
31
+ * @param {number} fy2 bottom right y coord
32
+ */
33
+ selectAsync(
34
+ renderer: vtkRenderer,
35
+ fx1: number,
36
+ fy1: number,
37
+ fx2: number,
38
+ fy2: number
39
+ ): Promise<vtkSelectionNode[]>;
40
+
41
+ /**
42
+ * Sets the field association.
43
+ * @param {FieldAssociations} assoc
44
+ */
45
+ setFieldAssociation(assoc: FieldAssociations): boolean;
46
+
47
+ /**
48
+ * Gets the field association.
49
+ */
50
+ getFieldAssociation(): FieldAssociations;
51
+
52
+ /**
53
+ * Sets whether to capture Z values.
54
+ * @param {boolean} capture
55
+ */
56
+ setCaptureZValues(capture: boolean): boolean;
57
+
58
+ /**
59
+ * Gets whether to capture Z values.
60
+ */
61
+ getCaptureZValues(): boolean;
62
+ }
63
+
64
+ export interface IHardwareSelectorInitialValues {
65
+ fieldAssociation?: FieldAssociations;
66
+ captureZValues?: boolean;
67
+ }
68
+
69
+ export function newInstance(
70
+ initialValues?: IHardwareSelectorInitialValues
71
+ ): vtkHardwareSelector;
72
+
73
+ export function extend(
74
+ publicAPI: object,
75
+ model: object,
76
+ initialValues?: IHardwareSelectorInitialValues
77
+ ): void;
78
+
79
+ export const vtkHardwareSelector: {
80
+ newInstance: typeof newInstance;
81
+ extend: typeof extend;
82
+ };
83
+
84
+ export default vtkHardwareSelector;
@@ -1,5 +1,5 @@
1
1
  import vtkCamera from 'vtk.js/Sources/Rendering/Core/Camera';
2
- import vtkAbstractMapper, { IAbstractMapperInitialValues } from 'vtk.js/Sources/Rendering/Core/AbstractMapper';
2
+ import vtkAbstractImageMapper, { IAbstractImageMapperInitialValues } from 'vtk.js/Sources/Rendering/Core/AbstractImageMapper';
3
3
  import { Bounds, Nullable, Vector3 } from 'vtk.js/Sources/types';
4
4
  import { SlicingMode } from 'vtk.js/Sources/Rendering/Core/ImageMapper/Constants';
5
5
  import vtkImageData from 'vtk.js/Sources/Common/DataModel/ImageData';
@@ -15,13 +15,13 @@ interface ICoincidentTopology {
15
15
  offset: number;
16
16
  }
17
17
 
18
- export interface IImageMapperInitialValues extends IAbstractMapperInitialValues {
18
+ export interface IImageMapperInitialValues extends IAbstractImageMapperInitialValues {
19
19
  closestIJKAxis?: IClosestIJKAxis;
20
20
  renderToRectangle?: boolean;
21
21
  sliceAtFocalPoint?: boolean;
22
22
  }
23
23
 
24
- export interface vtkImageMapper extends vtkAbstractMapper {
24
+ export interface vtkImageMapper extends vtkAbstractImageMapper {
25
25
 
26
26
  /**
27
27
  * Returns the IJK slice value from a world position or XYZ slice value
@@ -984,6 +984,12 @@ export interface vtkRenderWindowInteractor extends vtkObject {
984
984
  */
985
985
  getCurrentRenderer(): void;
986
986
 
987
+ /**
988
+ * Manually sets the current renderer.
989
+ * @param {vtkRenderer} ren
990
+ */
991
+ setCurrentRenderer(ren: vtkRenderer): void;
992
+
987
993
  /**
988
994
  *
989
995
  * @param container
@@ -7,6 +7,7 @@ import vtkProp from 'vtk.js/Sources/Rendering/Core/Prop';
7
7
  import vtkViewport, { IViewportInitialValues } from 'vtk.js/Sources/Rendering/Core/Viewport';
8
8
  import vtkVolume from 'vtk.js/Sources/Rendering/Core/Volume';
9
9
  import vtkTexture from 'vtk.js/Sources/Rendering/Core/Texture';
10
+ import { EventHandler, vtkSubscription } from 'vtk.js/Sources/interfaces';
10
11
 
11
12
 
12
13
  export interface IRendererInitialValues extends IViewportInitialValues {
@@ -42,6 +43,13 @@ export interface IRendererInitialValues extends IViewportInitialValues {
42
43
  pass?: number;
43
44
  }
44
45
 
46
+ export type VtkRendererEvent =
47
+ | { type: 'CreateCameraEvent', camera: vtkCamera }
48
+ | { type: 'ActiveCameraEvent', camera: vtkCamera }
49
+ | { type: 'ComputeVisiblePropBoundsEvent', renderer: vtkRenderer }
50
+ | { type: 'ResetCameraClippingRangeEvent', renderer: vtkRenderer }
51
+ | { type: 'ResetCameraEvent', renderer: vtkRenderer };
52
+
45
53
  export interface vtkRenderer extends vtkViewport {
46
54
 
47
55
  /**
@@ -654,6 +662,11 @@ export interface vtkRenderer extends vtkViewport {
654
662
  * @param {Number[]} background The RGB color array.
655
663
  */
656
664
  setBackground(background: number[]): boolean;
665
+
666
+ /**
667
+ * Adds an event listener.
668
+ */
669
+ onEvent(cb: EventHandler, priority?: number): Readonly<vtkSubscription>;
657
670
  }
658
671
 
659
672
  /**
@@ -0,0 +1,8 @@
1
+ export declare enum PassTypes {
2
+ MIN_KNOWN_PASS = 0,
3
+ ACTOR_PASS = 0,
4
+ COMPOSITE_INDEX_PASS = 1,
5
+ ID_LOW24 = 2,
6
+ ID_HIGH24 = 3,
7
+ MAX_KNOWN_PASS = 3,
8
+ }
@@ -0,0 +1,339 @@
1
+ import vtkSelectionNode from 'vtk.js/Sources/Common/DataModel/SelectionNode';
2
+ import {
3
+ IHardwareSelectorInitialValues,
4
+ vtkHardwareSelector,
5
+ } from 'vtk.js/Sources/Rendering/Core/HardwareSelector';
6
+ import vtkProp from 'vtk.js/Sources/Rendering/Core/Prop';
7
+ import vtkRenderer from 'vtk.js/Sources/Rendering/Core/Renderer';
8
+ import vtkOpenGLRenderWindow from 'vtk.js/Sources/Rendering/OpenGL/RenderWindow';
9
+ import { FieldAssociations } from 'vtk.js/Sources/Common/DataModel/DataSet/Constants';
10
+ import { EventHandler, vtkSubscription } from 'vtk.js/Sources/interfaces';
11
+ import { Nullable, Vector2, Vector3 } from 'vtk.js/Sources/types';
12
+ import { PassTypes } from 'vtk.js/Sources/Rendering/OpenGL/HardwareSelector/Constants';
13
+
14
+ type Area = [number, number, number, number];
15
+
16
+ export interface BufferData {
17
+ area: Area;
18
+ pixBuffer: Uint8Array[];
19
+ }
20
+
21
+ export interface SourceData {
22
+ area: Area;
23
+ pixBuffer: Uint8Array[];
24
+ captureZValues: boolean;
25
+ zBuffer: Uint8Array;
26
+ props: vtkProp[];
27
+ fieldAssociation: FieldAssociations;
28
+ renderer: vtkRenderer;
29
+ openGLRenderWindow: vtkOpenGLRenderWindow;
30
+ generateSelection(
31
+ buffdata: BufferData,
32
+ fx1: number,
33
+ fy1: number,
34
+ fx2: number,
35
+ fy2: number
36
+ ): vtkSelectionNode[];
37
+ }
38
+
39
+ export interface PixelInformation {
40
+ valid: boolean;
41
+ prop: vtkProp;
42
+ propID: number;
43
+ compositeID: number;
44
+ zValue: number;
45
+ displayPosition: Vector2;
46
+ attributeID?: number;
47
+ }
48
+
49
+ // TODO extends vtkHardwareSelector
50
+ export interface vtkOpenGLHardwareSelector extends vtkHardwareSelector {
51
+ /**
52
+ * Releases internal pixel buffer memory.
53
+ */
54
+ releasePixBuffers(): void;
55
+
56
+ /**
57
+ * Preps for picking the scene.
58
+ *
59
+ * Call endSelection() afterwards.
60
+ */
61
+ beginSelection(): void;
62
+
63
+ /**
64
+ * Cleans up picking state.
65
+ *
66
+ * Should be after a call to beginSelection();
67
+ */
68
+ endSelection(): void;
69
+
70
+ /**
71
+ * Runs a pre-capture pass.
72
+ */
73
+ preCapturePass(): void;
74
+
75
+ /**
76
+ * Runs a post-capture pass.
77
+ */
78
+ postCapturePass(): void;
79
+
80
+ /**
81
+ * Generates a selection.
82
+ */
83
+ select(): Nullable<vtkSelectionNode[]>;
84
+
85
+ /**
86
+ * Get the picking source data.
87
+ *
88
+ * @param {vtkRenderer} renderer
89
+ * @param {number} fx1 top left x coord
90
+ * @param {number} fy1 top left y coord
91
+ * @param {number} fx2 bottom right x coord
92
+ * @param {number} fy2 bottom right y coord
93
+ */
94
+ getSourceDataAsync(
95
+ renderer: vtkRenderer,
96
+ fx1: number,
97
+ fy1: number,
98
+ fx2: number,
99
+ fy2: number
100
+ ): Promise<SourceData>;
101
+
102
+ /**
103
+ * Captures the scene for picking.
104
+ * @returns whether the capture succeeded.
105
+ */
106
+ captureBuffers(): boolean;
107
+
108
+ /**
109
+ * Processes the pixel buffers for actors.
110
+ */
111
+ processPixelBuffers(): void;
112
+
113
+ /**
114
+ * Determines if a pass is required.
115
+ * @param {PassTypes} pass
116
+ */
117
+ passRequired(pass: PassTypes): boolean;
118
+
119
+ /**
120
+ * Saves the pixel buffer from the view.
121
+ * @param {PassTypes} pass
122
+ */
123
+ savePixelBuffer(pass: PassTypes): void;
124
+
125
+ /**
126
+ * Builds the prop hit list.
127
+ * @param {Uint8Array} pixelBuffer
128
+ */
129
+ buildPropHitList(pixelBuffer: Uint8Array): void;
130
+
131
+ /**
132
+ * Renders a prop for picking.
133
+ * @param {vtkProp} prop
134
+ */
135
+ renderProp(prop: vtkProp): void;
136
+
137
+ /**
138
+ * Sets the current prop's color value for the composite index.
139
+ * @param {number} index
140
+ */
141
+ renderCompositeIndex(index: number): void;
142
+
143
+ /**
144
+ * Renders an attribute ID.
145
+ * @param {number} attribId
146
+ */
147
+ renderAttributeId(attribId: number): void;
148
+
149
+ /**
150
+ * Returns the pass type name as a string.
151
+ * @param {PassTypes} type
152
+ */
153
+ passTypeToString(type: PassTypes): string;
154
+
155
+ /**
156
+ * Has the prop with the given internal ID been hit.
157
+ * @param {number} id
158
+ */
159
+ isPropHit(id: number): boolean;
160
+
161
+ /**
162
+ * Sets the internal color used for coloring the current prop.
163
+ * @param {number} val
164
+ */
165
+ setPropColorValueFromInt(val: number): void;
166
+
167
+ /**
168
+ * Gets the selection information for a given pixel.
169
+ *
170
+ * @param inDispPos The input diplay position.
171
+ * @param maxDistance The max distance to consider from the input position.
172
+ * @param outDispPos The output display position.
173
+ */
174
+ getPixelInformation(
175
+ inDispPos: Vector2,
176
+ maxDistance: number,
177
+ outDispPos: Vector2
178
+ ): Nullable<PixelInformation>;
179
+
180
+ /**
181
+ * Generates selections in a given area.
182
+ *
183
+ * @param {number} fx1 top left x coord
184
+ * @param {number} fy1 top left y coord
185
+ * @param {number} fx2 bottom right x coord
186
+ * @param {number} fy2 bottom right y coord
187
+ */
188
+ generateSelection(
189
+ fx1: number,
190
+ fy1: number,
191
+ fx2: number,
192
+ fy2: number
193
+ ): vtkSelectionNode[];
194
+
195
+ /**
196
+ * Get the raw pixel buffer for a pass type.
197
+ * @param {PassTypes} passNo
198
+ */
199
+ getRawPixelBuffer(passNo: PassTypes): Uint8Array;
200
+
201
+ /**
202
+ * Get the pixel buffer for a pass type.
203
+ * @param {PassTypes} passNo
204
+ */
205
+ getPixelBuffer(passNo: PassTypes): Uint8Array;
206
+
207
+ /**
208
+ * Attaches a render window + renderer to this hardware selector.
209
+ * @param {Nullable<vtkOpenGLRenderWindow>} openglRenderWindow
210
+ * @param {Nullable<vtkRenderer>} renderer
211
+ */
212
+ attach(
213
+ openglRenderWindow: Nullable<vtkOpenGLRenderWindow>,
214
+ renderer: Nullable<vtkRenderer>
215
+ ): void;
216
+
217
+ /**
218
+ * Sets the current renderer.
219
+ * @param {vtkRenderer} ren
220
+ */
221
+ setRenderer(ren: vtkRenderer): boolean;
222
+
223
+ /**
224
+ * Gets the current renderer.
225
+ */
226
+ getRenderer(): vtkRenderer;
227
+
228
+ /**
229
+ * Sets the current pass type.
230
+ * @param {PassTypes} pass
231
+ */
232
+ setCurrentPass(pass: PassTypes): boolean;
233
+
234
+ /**
235
+ * Gets the current pass type.
236
+ */
237
+ getCurrentPass(): PassTypes;
238
+
239
+ /**
240
+ * Sets the current opengl render window.
241
+ * @param {vtkOpenGLRenderWindow} oglrw
242
+ */
243
+ setOpenGLRenderWindow(oglrw: vtkOpenGLRenderWindow): boolean;
244
+
245
+ getOpenGLRenderWindow(): vtkOpenGLRenderWindow;
246
+
247
+ /**
248
+ * Sets the maximum point ID.
249
+ * @param {number} id
250
+ */
251
+ setMaximumPointId(id: number): boolean;
252
+
253
+ /**
254
+ * Gets the maximum point ID.
255
+ */
256
+ getMaximumPointId(): number;
257
+
258
+ /**
259
+ * Sets the maximum cell ID.
260
+ * @param {number} id
261
+ */
262
+ setMaximumCellId(id: number): boolean;
263
+
264
+ /**
265
+ * Gets the maximum cell ID.
266
+ */
267
+ getMaximumCellId(): number;
268
+
269
+ /**
270
+ * Sets the prop's color value.
271
+ * @param {Vector3} color
272
+ */
273
+ setPropColorValue(color: Vector3): boolean;
274
+
275
+ /**
276
+ * Sets the prop's color value.
277
+ * @param {number} r
278
+ * @param {number} g
279
+ * @param {number} b
280
+ */
281
+ setPropColorValue(r: number, g: number, b: number): boolean;
282
+
283
+ /**
284
+ * Gets the prop color value.
285
+ */
286
+ getPropColorValue(): Vector3;
287
+
288
+ /**
289
+ * Sets the selection area.
290
+ *
291
+ * @param area An area bounding box
292
+ */
293
+ setArea(area: Area): boolean;
294
+
295
+ /**
296
+ * Sets the selection area.
297
+ * @param {number} fx1 top left x coord
298
+ * @param {number} fy1 top left y coord
299
+ * @param {number} fx2 bottom right x coord
300
+ * @param {number} fy2 bottom right y coord
301
+ */
302
+ setArea(fx1: number, fy1: number, fx2: number, fy2: number): boolean;
303
+
304
+ /**
305
+ * Gets the selection area.
306
+ */
307
+ getArea(): Area;
308
+
309
+ /**
310
+ * Listen to the start/stop events.
311
+ * @param cb
312
+ * @param priority
313
+ */
314
+ onEvent(cb: EventHandler, priority?: number): Readonly<vtkSubscription>;
315
+ }
316
+
317
+ export interface IOpenGLHardwareSelectorInitialValues
318
+ extends IHardwareSelectorInitialValues {
319
+ maximumPointId?: number;
320
+ maximumCellId?: number;
321
+ idOffset?: number;
322
+ }
323
+
324
+ export function newInstance(
325
+ initialValues?: IOpenGLHardwareSelectorInitialValues
326
+ ): vtkOpenGLHardwareSelector;
327
+
328
+ export function extend(
329
+ publicAPI: object,
330
+ model: object,
331
+ initialValues?: IOpenGLHardwareSelectorInitialValues
332
+ ): void;
333
+
334
+ export const vtkOpenGLHardwareSelector: {
335
+ newInstance: typeof newInstance;
336
+ extend: typeof extend;
337
+ };
338
+
339
+ export default vtkOpenGLHardwareSelector;
@@ -0,0 +1,13 @@
1
+ /**
2
+ * The purpose of this file is to bundle all testing
3
+ * entrypoints into one chunk. This cuts down on extraneous
4
+ * code generation and addresses a race issue with the
5
+ * timer task queue.
6
+ */
7
+
8
+ import './setupTestEnv';
9
+
10
+ // webpack will include files that match the regex
11
+ // '..' refers to the Sources/ dir
12
+ const testsContext = require.context('..', true, /test[^/]*\.js$/);
13
+ testsContext.keys().forEach(testsContext);
@@ -43,6 +43,7 @@ function BufferedObjectPipe() {
43
43
  };
44
44
 
45
45
  const end = () => {
46
+ if (closed) return;
46
47
  closed = true;
47
48
  scheduleFlush();
48
49
  };
@@ -53,6 +54,7 @@ function BufferedObjectPipe() {
53
54
  */
54
55
  const setReader = (r) => {
55
56
  reader = r;
57
+ scheduleFlush();
56
58
  };
57
59
 
58
60
  return {
package/Sources/vtk.d.ts CHANGED
@@ -1,20 +1,19 @@
1
- interface IvtkObject {
2
- vtkClass: string;
3
- [attrName: string]: unknown;
1
+ import { vtkObject } from 'vtk.js/Sources/interfaces';
2
+
3
+ interface ISerializedVtkObject {
4
+ vtkClass: string;
5
+ [attrName: string]: unknown;
4
6
  }
5
7
 
6
- /**
7
- *
8
- * @param obj
9
- * @return
10
- */
11
- declare function vtk(obj: IvtkObject): unknown;
8
+ interface Ivtk {
9
+ /**
10
+ * Deserializes a serialized VTK.js object.
11
+ */
12
+ (obj: ISerializedVtkObject): vtkObject;
13
+
14
+ register(vtkClassName: string, constructor: <T>(model: unknown) => T): void;
15
+ }
12
16
 
13
- /**
14
- * Nest register method under the vtk function
15
- * @param vtkClassName
16
- * @param constructor
17
- */
18
- declare function register(vtkClassName: string, constructor: unknown): void;
17
+ declare const vtk: Ivtk;
19
18
 
20
19
  export default vtk;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vtk.js",
3
- "version": "26.9.4",
3
+ "version": "26.9.5",
4
4
  "description": "Visualization Toolkit for the Web",
5
5
  "keywords": [
6
6
  "3d",
package/vtk-bundle.html CHANGED
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>vtk.js [15 Mar 2023 at 22:26]</title>
6
+ <title>vtk.js [22 Mar 2023 at 14:20]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8"/>
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
6
- <title>vtk.js [15 Mar 2023 at 22:26]</title>
6
+ <title>vtk.js [22 Mar 2023 at 14:20]</title>
7
7
  <link rel="shortcut icon" href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABrVBMVEUAAAD///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////+O1foceMD///+J0/qK1Pr7/v8Xdr/9///W8P4UdL7L7P0Scr2r4Pyj3vwad8D5/f/2/f+55f3E6f34+/2H0/ojfMKpzOd0rNgQcb3F3O/j9f7c8v6g3Pz0/P/w+v/q+P7n9v6T1/uQ1vuE0vqLut/y+v+Z2fvt+f+15Pzv9fuc2/vR7v2V2Pvd6/bg9P7I6/285/2y4/yp3/zp8vk8i8kqgMT7/P31+fyv4vxGkcz6/P6/6P3j7vfS5PNnpNUxhcbO7f7F6v3O4vHK3/DA2u631Ouy0eqXweKJud5wqthfoNMMbLvY8f73+v2dxeR8sNtTmdDx9/zX6PSjyeaCtd1YnNGX2PuQveCGt95Nls42h8dLlM3F4vBtAAAAM3RSTlMAAyOx0/sKBvik8opWGBMOAe3l1snDm2E9LSb06eHcu5JpHbarfHZCN9CBb08zzkdNS0kYaptYAAAFV0lEQVRYw92X51/aYBDHHS2O2qqttVbrqNq9m+TJIAYIShBkWwqIiCgoWvfeq7Z2/s29hyQNyUcR7LveGwVyXy6XH8/9rqxglLfUPLxVduUor3h0rfp2TYvpivk37929TkG037hffoX0+peVtZQc1589rigVUdXS/ABSAyEmGIO/1XfvldSK8vs3OqB6u3m0nxmIrvgB0dj7rr7Y9IbuF68hnfFaiHA/sxqm0wciIG43P60qKv9WXWc1RXGh/mFESFABTSBi0sNAKzqet17eCtOb3kZIDwxEEU0oAIJGYxNBDhBND29e0rtXXbcpuPmED9IhEAAQ/AXEaF8EPmnrrKsv0LvWR3fg5sWDNAFZOgAgaKvZDogHNU9MFwnnYROkc56RD5CjAbQX9Ow4g7upCsvYu55aSI/Nj0H1akgKQEUM94dwK65hYRmFU9MIcH/fqJYOZYcnuJSU/waKDgTOEVaVKhwrTRP5XzgSpAITYzom7UvkhFX5VutmxeNnWDjjswTKTyfgluNDGbUpWissXhF3s7mlSml+czWkg3D0l1nNjGNjz3myOQOa1KM/jOS6ebdbAVTCi4gljHSFrviza7tOgRWcS0MOUX9zdNgag5w7rRqA44Lzw0hr1WqES36dFliSJFlh2rXIae3FFcDDgKdxrUIDePr8jGcSClV1u7A9xeN0ModY/pHMxmR1EzRh8TJiwqsHmKW0l4FCEZI+jHio+JdPPE9qwQtTRxku2D8sIeRL2LnxWSllANCQGOIiqVHAz2ye2JR0DcH+HoxDkaADLjgxjKQ+AwCX/g0+DNgdG0ukYCONAe+dbc2IAc6fwt1ARoDSezNHxV2Cmzwv3O6lDMV55edBGwGK9n1+x2F8EDfAGCxug8MhpsMEcTEAWf3rx2vZhe/LAmtIn/6apE6PN0ULKgywD9mmdxbmFl3OvD5AS5fW5zLbv/YHmcsBTjf/afDz3MaZTVCfAP9z6/Bw6ycv8EUBWJIn9zYcoAWWlW9+OzO3vkTy8H+RANLmdrpOuYWdZYEXpo+TlCJrW5EARb7fF+bWdqf3hhyZI1nWJQHgznErZhbjoEsWqi8dQNoE294aldzFurwSABL2XXMf9+H1VQGke9exw5P/AnA5Pv5ngMul7LOvO922iwACu8WkCwLCafvM4CeWPxfA8lNHcWZSoi8EwMAIciKX2Z4SWCMAa3snCZ/G4EA8D6CMLNFsGQhkkz/gQNEBbPCbWsxGUpYVu3z8IyNAknwJkfPMEhLyrdi5RTyUVACkw4GSFRNWJNEW+fgPGwHD8/JxnRuLabN4CGNRkAE23na2+VmEAUmrYymSGjMAYqH84YUIyzgzs3XC7gNgH36Vcc4zKY9o9fgPBXUAiHHwVboBHGLiX6Zcjp1f2wu4tvzZKo0ecPnDtQYDQvJXaBeNzce45Fp28ZQLrEZVuFqgBwOalArKXnW1UzlnSusQKJqKYNuz4tOnI6sZG4zanpemv+7ySU2jbA9h6uhcgpfy6G2PahirDZ6zvq6zDduMVFTKvzw8wgyEdelwY9in3XkEPs3osJuwRQ4qTkfzifndg9Gfc4pdsu82+tTnHZTBa2EAMrqr2t43pguc8tNm7JQVQ2S0ukj2d22dhXYP0/veWtwKrCkNoNimAN5+Xr/oLrxswKbVJjteWrX7eR63o4j9q0GxnaBdWgGA5VStpanIjQmEhV0/nVt5VOFUvix6awJhPcAaTEShgrG+iGyvb5a0Ndb1YGHFPEwoqAinoaykaID1o1pdPNu7XsnCKQ3R+hwWIIhGvORcJUBYXe3Xa3vq/mF/N9V13ugufMkfXn+KHsRD0B8AAAAASUVORK5CYII=" type="image/x-icon" />
8
8
 
9
9
  <script>
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @project vtk.js
3
- * @build Wed, Mar 15, 2023 10:25 PM ET
3
+ * @build Wed, Mar 22, 2023 2:19 PM ET
4
4
  * @copyright Copyright (c) 2023 Kitware, Inc.
5
5
  *
6
6
  */
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * @project vtk.js
3
- * @build Wed, Mar 15, 2023 10:25 PM ET
3
+ * @build Wed, Mar 22, 2023 2:19 PM ET
4
4
  * @copyright Copyright (c) 2023 Kitware, Inc.
5
5
  *
6
6
  */