@niivue/niivue 0.51.0 → 0.53.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.
package/build/index.d.ts CHANGED
@@ -208,7 +208,10 @@ declare enum ImageType {
208
208
  DCM_FOLDER = 16,
209
209
  SRC = 17,
210
210
  FIB = 18,
211
- BMP = 19
211
+ BMP = 19,
212
+ ZARR = 20,
213
+ NPY = 21,
214
+ NPZ = 22
212
215
  }
213
216
  type ImageFromUrlOptions = {
214
217
  url: string;
@@ -385,9 +388,9 @@ declare class NVImage {
385
388
  * @param colorbarVisible - TODO
386
389
  * @param colormapLabel - TODO
387
390
  */
388
- constructor(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number);
389
- init(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, _pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number, imgRaw?: ArrayBuffer | null): void;
390
- static new(dataBuffer?: ArrayBuffer | ArrayBuffer[] | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number): Promise<NVImage>;
391
+ constructor(dataBuffer?: ArrayBuffer | ArrayBuffer[] | ArrayBufferLike | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number);
392
+ init(dataBuffer?: ArrayBuffer | ArrayBuffer[] | ArrayBufferLike | null, name?: string, colormap?: string, opacity?: number, _pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number, imgRaw?: ArrayBuffer | ArrayBufferLike | null): void;
393
+ static new(dataBuffer?: ArrayBuffer | ArrayBuffer[] | ArrayBufferLike | null, name?: string, colormap?: string, opacity?: number, pairedImgData?: ArrayBuffer | null, cal_min?: number, cal_max?: number, trustCalMinMax?: boolean, percentileFrac?: number, ignoreZeroVoxels?: boolean, useQFormNotSForm?: boolean, colormapNegative?: string, frame4D?: number, imageType?: ImageType, cal_minNeg?: number, cal_maxNeg?: number, colorbarVisible?: boolean, colormapLabel?: LUT | null, colormapType?: number): Promise<NVImage>;
391
394
  computeObliqueAngle(mtx44: mat4): number;
392
395
  float32V1asRGBA(inImg: Float32Array): Uint8Array;
393
396
  loadImgV1(isFlipX?: boolean, isFlipY?: boolean, isFlipZ?: boolean): boolean;
@@ -396,16 +399,16 @@ declare class NVImage {
396
399
  SetPixDimFromSForm(): void;
397
400
  readECAT(buffer: ArrayBuffer): ArrayBuffer;
398
401
  readV16(buffer: ArrayBuffer): ArrayBuffer;
402
+ readNPY(buffer: ArrayBuffer): Promise<ArrayBuffer>;
403
+ readNPZ(buffer: ArrayBuffer): Promise<ArrayBuffer>;
399
404
  imageDataFromArrayBuffer(buffer: ArrayBuffer): Promise<ImageData>;
400
- readBMP(buffer: ArrayBuffer): Promise<Uint8Array>;
405
+ readBMP(buffer: ArrayBuffer): Promise<ArrayBuffer>;
401
406
  readVMR(buffer: ArrayBuffer): ArrayBuffer;
402
- readMGH(buffer: ArrayBuffer): Promise<ArrayBuffer>;
403
407
  readFIB(buffer: ArrayBuffer): Promise<[ArrayBuffer, Float32Array]>;
404
408
  readSRC(buffer: ArrayBuffer): Promise<ArrayBuffer>;
405
409
  readHEAD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
406
410
  readMHA(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
407
411
  readMIF(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
408
- readNRRD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): Promise<ArrayBuffer>;
409
412
  calculateRAS(): void;
410
413
  hdr2RAS(nVolumes?: number): Promise<NIFTI1 | NIFTI2>;
411
414
  img2RAS(nVolume?: number): TypedVoxelArray;
@@ -431,13 +434,30 @@ declare class NVImage {
431
434
  calMinMax(vol?: number, isBorder?: boolean): number[];
432
435
  intensityRaw2Scaled(raw: number): number;
433
436
  intensityScaled2Raw(scaled: number): number;
437
+ /**
438
+ * Converts NVImage to NIfTI compliant byte array, potentially compressed.
439
+ * Delegates to ImageWriter.saveToUint8Array.
440
+ * @param fnm - Filename (determines if compression is needed via .gz suffix)
441
+ * @param drawing8 - Optional Uint8Array drawing overlay
442
+ * @returns Promise<Uint8Array>
443
+ */
434
444
  saveToUint8Array(fnm: string, drawing8?: Uint8Array | null): Promise<Uint8Array>;
445
+ /**
446
+ * save image as NIfTI volume and trigger download.
447
+ * Delegates to ImageWriter.saveToDisk.
448
+ * @param fnm - Filename for download. If empty, returns data without download.
449
+ * @param drawing8 - Optional Uint8Array drawing overlay
450
+ * @returns Promise<Uint8Array>
451
+ */
435
452
  saveToDisk(fnm?: string, drawing8?: Uint8Array | null): Promise<Uint8Array>;
436
453
  static fetchDicomData(url: string, headers?: Record<string, string>): Promise<Array<{
437
454
  name: string;
438
455
  data: ArrayBuffer;
439
456
  }>>;
440
- static fetchPartial(url: string, bytesToLoad: number, headers?: Record<string, string>): Promise<Response>;
457
+ static readFirstDecompressedBytes(stream: ReadableStream<Uint8Array>, minBytes: number): Promise<Uint8Array>;
458
+ static extractFilenameFromUrl(url: string): string | null;
459
+ static loadInitialVolumesGz(url?: string, headers?: {}, limitFrames4D?: number): Promise<ArrayBuffer | null>;
460
+ static loadInitialVolumes(url?: string, headers?: {}, limitFrames4D?: number): Promise<ArrayBuffer | null>;
441
461
  /**
442
462
  * factory function to load and return a new NVImage instance from a given URL
443
463
  * @returns NVImage instance
@@ -452,15 +472,15 @@ declare class NVImage {
452
472
  static loadFromFile({ file, // file can be an array of file objects or a single file object
453
473
  name, colormap, opacity, urlImgData, cal_min, cal_max, trustCalMinMax, percentileFrac, ignoreZeroVoxels, useQFormNotSForm, colormapNegative, frame4D, limitFrames4D, imageType }: ImageFromFileOptions): Promise<NVImage>;
454
474
  /**
455
- * factory function to load and return a new NVImage instance from a base64 encoded string
456
- *
457
- * @returns NVImage instance
458
- * @example
459
- * myImage = NVImage.loadFromBase64('SomeBase64String')
475
+ * Creates a Uint8Array representing a NIFTI file (header + optional image data).
476
+ * Delegates to ImageWriter.createNiftiArray.
460
477
  */
461
- static createNiftiArray(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: number, // DT_UINT8
462
- img?: Uint8Array): Uint8Array;
463
- static createNiftiHeader(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: number): NIFTI1;
478
+ static createNiftiArray(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: NiiDataType, img?: TypedVoxelArray | Uint8Array): Uint8Array;
479
+ /**
480
+ * Creates a NIFTI1 header object with basic properties.
481
+ * Delegates to ImageWriter.createNiftiHeader.
482
+ */
483
+ static createNiftiHeader(dims?: number[], pixDims?: number[], affine?: number[], datatypeCode?: NiiDataType): NIFTI1;
464
484
  /**
465
485
  * read a 3D slab of voxels from a volume
466
486
  * @param voxStart - first row, column and slice (RAS order) for selection
@@ -469,6 +489,14 @@ declare class NVImage {
469
489
  * @returns the an array where ret[0] is the voxel values and ret[1] is dimension of selection
470
490
  * @see {@link https://niivue.github.io/niivue/features/slab_selection.html | live demo usage}
471
491
  */
492
+ /**
493
+ * read a 3D slab of voxels from a volume, specified in RAS coordinates.
494
+ * Delegates to VolumeUtils.getVolumeData.
495
+ * @param voxStart - first row, column and slice (RAS order) for selection
496
+ * @param voxEnd - final row, column and slice (RAS order) for selection
497
+ * @param dataType - array data type. Options: 'same' (default), 'uint8', 'float32', 'scaled', 'normalized', 'windowed'
498
+ * @returns the an array where ret[0] is the voxel values and ret[1] is dimension of selection
499
+ */
472
500
  getVolumeData(voxStart?: number[], voxEnd?: number[], dataType?: string): [TypedVoxelArray, number[]];
473
501
  /**
474
502
  * write a 3D slab of voxels from a volume
@@ -477,6 +505,14 @@ declare class NVImage {
477
505
  * @param img - array of voxel values to insert (RAS order)
478
506
  * @see {@link https://niivue.github.io/niivue/features/slab_selection.html | live demo usage}
479
507
  */
508
+ /**
509
+ * write a 3D slab of voxels from a volume, specified in RAS coordinates.
510
+ * Delegates to VolumeUtils.setVolumeData.
511
+ * Input slabData is assumed to be in the correct raw data type for the target image.
512
+ * @param voxStart - first row, column and slice (RAS order) for selection
513
+ * @param voxEnd - final row, column and slice (RAS order) for selection
514
+ * @param img - array of voxel values to insert (RAS order, raw data type)
515
+ */
480
516
  setVolumeData(voxStart?: number[], voxEnd?: number[], img?: TypedVoxelArray): void;
481
517
  /**
482
518
  * factory function to load and return a new NVImage instance from a base64 encoded string
@@ -515,20 +551,28 @@ declare class NVImage {
515
551
  * newZeroImage = NVImage.zerosLike(myImage)
516
552
  */
517
553
  static zerosLike(nvImage: NVImage, dataType?: string): NVImage;
518
- getValue(x: number, y: number, z: number, frame4D?: number, isReadImaginary?: boolean): number;
519
554
  /**
520
- * @param id - id of 3D Object (is this the base volume or an overlay?)
521
- * @param gl - WebGL rendering context
522
- * @returns new 3D object in model space
555
+ * Returns voxel intensity at specific native coordinates.
556
+ * Delegates to VolumeUtils.getValue.
557
+ * @param x - Native X coordinate (0-indexed)
558
+ * @param y - Native Y coordinate (0-indexed)
559
+ * @param z - Native Z coordinate (0-indexed)
560
+ * @param frame4D - 4D frame index (0-indexed)
561
+ * @param isReadImaginary - Flag to read from imaginary data array
562
+ * @returns Scaled voxel intensity
523
563
  */
524
- toNiivueObject3D(id: number, gl: WebGL2RenderingContext): NiivueObject3D;
564
+ getValue(x: number, y: number, z: number, frame4D?: number, isReadImaginary?: boolean): number;
525
565
  /**
526
566
  * Update options for image
527
567
  */
528
568
  applyOptionsUpdate(options: ImageFromUrlOptions): void;
529
569
  getImageOptions(): ImageFromUrlOptions;
530
570
  /**
531
- * Converts NVImage to NIfTI compliant byte array
571
+ * Converts NVImage to NIfTI compliant byte array.
572
+ * Handles potential re-orientation of drawing data.
573
+ * Delegates to ImageWriter.toUint8Array.
574
+ * @param drawingBytes - Optional Uint8Array drawing overlay
575
+ * @returns Uint8Array
532
576
  */
533
577
  toUint8Array(drawingBytes?: Uint8Array | null): Uint8Array;
534
578
  convertVox2Frac(vox: vec3): vec3;
@@ -682,7 +726,7 @@ type NVConfigOptions = {
682
726
  sagittalNoseLeft: boolean;
683
727
  isSliceMM: boolean;
684
728
  isV1SliceShader: boolean;
685
- isHighResolutionCapable: boolean;
729
+ forceDevicePixelRatio: number;
686
730
  logLevel: 'debug' | 'info' | 'warn' | 'error' | 'fatal' | 'silent';
687
731
  loadingText: string;
688
732
  isForceMouseClickToVoxelCenters: boolean;
@@ -726,6 +770,9 @@ type NVConfigOptions = {
726
770
  measureLineColor: number[];
727
771
  measureTextHeight: number;
728
772
  isAlphaClipDark: boolean;
773
+ gradientOrder: number;
774
+ gradientOpacity: number;
775
+ invertScrollDirection: boolean;
729
776
  };
730
777
  declare const DEFAULT_OPTIONS: NVConfigOptions;
731
778
  type SceneData = {
@@ -951,7 +998,7 @@ type Point = {
951
998
  };
952
999
  };
953
1000
  /**
954
- * Representes the vertices of a connectome
1001
+ * Represents the vertices of a connectome
955
1002
  * @ignore
956
1003
  */
957
1004
  type NVConnectomeNode = {
@@ -1286,7 +1333,7 @@ declare class NVMesh {
1286
1333
  decimateFaces(n: number, ntarget: number): void;
1287
1334
  decimateHierarchicalMesh(gl: WebGL2RenderingContext, order?: number): boolean;
1288
1335
  setLayerProperty(id: number, key: keyof NVMeshLayer, val: number | string | boolean, gl: WebGL2RenderingContext): Promise<void>;
1289
- setProperty(key: keyof this, val: unknown, gl: WebGL2RenderingContext): void;
1336
+ setProperty(key: keyof this, val: number | string | boolean, gl: WebGL2RenderingContext): void;
1290
1337
  generatePosNormClr(pts: Float32Array, tris: Uint32Array, rgba255: Uint8Array): Float32Array;
1291
1338
  static readMesh(buffer: ArrayBuffer, name: string, gl: WebGL2RenderingContext, opacity?: number, rgba255?: Uint8Array, visible?: boolean): Promise<NVMesh>;
1292
1339
  static loadLayer(layer: NVMeshLayer, nvmesh: NVMesh): Promise<void>;
@@ -1312,7 +1359,7 @@ declare class NVUtilities {
1312
1359
  static arrayBufferToBase64(arrayBuffer: ArrayBuffer): string;
1313
1360
  static decompress(data: Uint8Array): Promise<Uint8Array>;
1314
1361
  static decompressToBuffer(data: Uint8Array): Promise<ArrayBuffer>;
1315
- static readMatV4(buffer: ArrayBuffer): Promise<Record<string, TypedNumberArray>>;
1362
+ static readMatV4(buffer: ArrayBuffer, isReplaceDots?: boolean): Promise<Record<string, TypedNumberArray>>;
1316
1363
  static b64toUint8(base64: string): Uint8Array;
1317
1364
  static uint8tob64(bytes: Uint8Array): string;
1318
1365
  static download(content: string | ArrayBuffer, fileName: string, contentType: string): void;
@@ -1549,6 +1596,7 @@ declare class Niivue {
1549
1596
  volumeTexture: WebGLTexture | null;
1550
1597
  gradientTexture: WebGLTexture | null;
1551
1598
  gradientTextureAmount: number;
1599
+ renderGradientValues: boolean;
1552
1600
  drawTexture: WebGLTexture | null;
1553
1601
  drawUndoBitmaps: Uint8Array[];
1554
1602
  drawLut: LUT;
@@ -1575,6 +1623,7 @@ declare class Niivue {
1575
1623
  line3DShader?: Shader;
1576
1624
  passThroughShader?: Shader;
1577
1625
  renderGradientShader?: Shader;
1626
+ renderGradientValuesShader?: Shader;
1578
1627
  renderSliceShader?: Shader;
1579
1628
  renderVolumeShader?: Shader;
1580
1629
  pickingMeshShader?: Shader;
@@ -1598,7 +1647,9 @@ declare class Niivue {
1598
1647
  orientShaderRGBU: Shader | null;
1599
1648
  surfaceShader: Shader | null;
1600
1649
  blurShader: Shader | null;
1601
- sobelShader: Shader | null;
1650
+ sobelBlurShader: Shader | null;
1651
+ sobelFirstOrderShader: Shader | null;
1652
+ sobelSecondOrderShader: Shader | null;
1602
1653
  genericVAO: WebGLVertexArrayObject | null;
1603
1654
  unusedVAO: any;
1604
1655
  crosshairs3D: NiivueObject3D | null;
@@ -1613,6 +1664,8 @@ declare class Niivue {
1613
1664
  extentsMin?: vec3;
1614
1665
  extentsMax?: vec3;
1615
1666
  private resizeObserver;
1667
+ private resizeEventListener;
1668
+ private canvasObserver;
1616
1669
  syncOpts: SyncOpts;
1617
1670
  readyForSync: boolean;
1618
1671
  uiData: UIData;
@@ -1849,6 +1902,13 @@ declare class Niivue {
1849
1902
  * @param options - options object to set modifiable Niivue properties
1850
1903
  */
1851
1904
  constructor(options?: Partial<NVConfigOptions>);
1905
+ /**
1906
+ * Clean up event listeners and observers
1907
+ * Call this when the Niivue instance is no longer needed.
1908
+ * This will be called when the canvas is detached from the DOM
1909
+ * @example niivue.cleanup();
1910
+ */
1911
+ cleanup(): void;
1852
1912
  get volumes(): NVImage[];
1853
1913
  set volumes(volumes: NVImage[]);
1854
1914
  get meshes(): NVMesh[];
@@ -1869,7 +1929,7 @@ declare class Niivue {
1869
1929
  * @param id - the id of an html canvas element
1870
1930
  * @param isAntiAlias - determines if anti-aliasing is requested (if not specified, AA usage depends on hardware)
1871
1931
  * @example niivue = new Niivue().attachTo('gl')
1872
- * @example niivue.attachTo('gl')
1932
+ * @example await niivue.attachTo('gl')
1873
1933
  * @see {@link https://niivue.github.io/niivue/features/basic.multiplanar.html | live demo usage}
1874
1934
  */
1875
1935
  attachTo(id: string, isAntiAlias?: any): Promise<this>;
@@ -1878,7 +1938,7 @@ declare class Niivue {
1878
1938
  * @param canvas - the canvas element reference
1879
1939
  * @example
1880
1940
  * niivue = new Niivue()
1881
- * niivue.attachToCanvas(document.getElementById(id))
1941
+ * await niivue.attachToCanvas(document.getElementById(id))
1882
1942
  */
1883
1943
  attachToCanvas(canvas: HTMLCanvasElement, isAntiAlias?: boolean | null): Promise<this>;
1884
1944
  /**
@@ -1976,6 +2036,7 @@ declare class Niivue {
1976
2036
  touchStartListener(e: TouchEvent): void;
1977
2037
  touchEndListener(e: TouchEvent): void;
1978
2038
  windowingHandler(x: number, y: number, volIdx?: number): void;
2039
+ mouseLeaveListener(): void;
1979
2040
  mouseMoveListener(e: MouseEvent): void;
1980
2041
  resetBriCon(msg?: TouchEvent | MouseEvent | null): void;
1981
2042
  setDragStart(x: number, y: number): void;
@@ -2107,11 +2168,11 @@ declare class Niivue {
2107
2168
  getRadiologicalConvention(): boolean;
2108
2169
  /**
2109
2170
  * Force WebGL canvas to use high resolution display, regardless of browser defaults.
2110
- * @param isHighResolutionCapable - allow high-DPI display
2171
+ * @param forceDevicePixelRatio - -1: block high DPI; 0= allow high DPI: >0 use specified pixel ratio
2111
2172
  * @example niivue.setHighResolutionCapable(true);
2112
2173
  * @see {@link https://niivue.github.io/niivue/features/sync.mesh.html | live demo usage}
2113
2174
  */
2114
- setHighResolutionCapable(isHighResolutionCapable: boolean): void;
2175
+ setHighResolutionCapable(forceDevicePixelRatio: number | boolean): void;
2115
2176
  /**
2116
2177
  * add a new volume to the canvas
2117
2178
  * @param volume - the new volume to add to the canvas
@@ -2191,7 +2252,7 @@ declare class Niivue {
2191
2252
  * @example niivue.setMeshProperty(niivue.meshes[0].id, 'fiberLength', 42)
2192
2253
  * @see {@link https://niivue.github.io/niivue/features/meshes.html | live demo usage}
2193
2254
  */
2194
- setMeshProperty(id: number, key: keyof NVMesh, val: number): void;
2255
+ setMeshProperty(id: number, key: keyof NVMesh, val: number | string | boolean): void;
2195
2256
  /**
2196
2257
  * returns the index of the mesh vertex that is closest to the provided coordinates
2197
2258
  * @param id - identity of mesh to change
@@ -2280,7 +2341,7 @@ declare class Niivue {
2280
2341
  * @example
2281
2342
  * niivue = new Niivue()
2282
2343
  * niivue.removeMesh(this.meshes[3])
2283
- * @see {@link https://niivue.github.io/niivue/features/multiuser.meshes.html | live demo usage}
2344
+ * @see {@link https://niivue.github.io/niivue/features/connectome.html | live demo usage}
2284
2345
  */
2285
2346
  removeMesh(mesh: NVMesh): void;
2286
2347
  /**
@@ -2444,12 +2505,21 @@ declare class Niivue {
2444
2505
  setClipVolume(low: number[], high: number[]): void;
2445
2506
  /**
2446
2507
  * set proportion of volume rendering influenced by selected matcap.
2447
- * @param gradientAmount - amount of matcap (0..1), default 0 (matte, surface normal does not influence color)
2508
+ * @param gradientAmount - amount of matcap (NaN or 0..1), default 0 (matte, surface normal does not influence color). NaN renders the gradients.
2448
2509
  * @example
2449
2510
  * niivue.setVolumeRenderIllumination(0.6);
2450
2511
  * @see {@link https://niivue.github.io/niivue/features/shiny.volumes.html | live demo usage}
2512
+ * @see {@link https://niivue.github.io/niivue/features/gradient.order.html | live demo usage}
2451
2513
  */
2452
2514
  setVolumeRenderIllumination(gradientAmount?: number): Promise<void>;
2515
+ /**
2516
+ * set volume rendering opacity influence of the gradient magnitude
2517
+ * @param gradientOpacity - amount of gradient magnitude influence on opacity (0..1), default 0 (no-influence)
2518
+ * @example
2519
+ * niivue.setGradientOpacity(0.6);
2520
+ * @see {@link https://niivue.github.io/niivue/features/gradient.opacity.html | live demo usage}
2521
+ */
2522
+ setGradientOpacity(gradientOpacity?: number): Promise<void>;
2453
2523
  overlayRGBA(volume: NVImage): Uint8ClampedArray;
2454
2524
  vox2mm(XYZ: number[], mtx: mat4): vec3;
2455
2525
  /**
@@ -2527,12 +2597,10 @@ declare class Niivue {
2527
2597
  loadVolumes(volumeList: ImageFromUrlOptions[]): Promise<this>;
2528
2598
  /**
2529
2599
  * Add mesh and notify subscribers
2530
- * @see {@link https://niivue.github.io/niivue/features/multiuser.meshes.html | live demo usage}
2531
2600
  */
2532
2601
  addMeshFromUrl(meshOptions: LoadFromUrlParams): Promise<NVMesh>;
2533
2602
  /**
2534
2603
  * Add mesh and notify subscribers
2535
- * @see {@link https://niivue.github.io/niivue/features/multiuser.meshes.html | live demo usage}
2536
2604
  */
2537
2605
  addMeshesFromUrl(meshOptions: LoadFromUrlParams[]): Promise<NVMesh[]>;
2538
2606
  /**
@@ -2591,7 +2659,7 @@ declare class Niivue {
2591
2659
  * @see {@link https://niivue.github.io/niivue/features/draw2.html | live demo usage}
2592
2660
  */
2593
2661
  drawGrowCut(): void;
2594
- drawPt(x: number, y: number, z: number, penValue: number): void;
2662
+ drawPt(x: number, y: number, z: number, penValue: number, drawBitmap?: Uint8Array | null): void;
2595
2663
  drawPenLine(ptA: number[], ptB: number[], penValue: number): void;
2596
2664
  /**
2597
2665
  * Performs a 1-voxel binary dilation on a connected cluster within the drawing mask using the drawFloodFillCore function.
@@ -2602,8 +2670,7 @@ declare class Niivue {
2602
2670
  drawingBinaryDilationWithSeed(seedXYZ: number[], // seed voxel x,y,z
2603
2671
  neighbors?: 6 | 18 | 26): void;
2604
2672
  drawFloodFillCore(img: Uint8Array, seedVx: number, neighbors?: number): void;
2605
- drawFloodFill(seedXYZ: number[], newColor?: number, growSelectedCluster?: number, // if non-zero, growth based on background intensity POSITIVE_INFINITY for selected or bright, NEGATIVE_INFINITY for selected or darker
2606
- forceMin?: number, forceMax?: number, neighbors?: number, maxDistanceMM?: number, is2D?: boolean): void;
2673
+ drawFloodFill(seedXYZ: number[], newColor?: number, growSelectedCluster?: number, forceMin?: number, forceMax?: number, neighbors?: number, maxDistanceMM?: number, is2D?: boolean, targetBitmap?: Uint8Array | null, isGrowClusterTool?: boolean): void;
2607
2674
  drawPenFilled(): void;
2608
2675
  /**
2609
2676
  * close drawing: make sure you have saved any changes before calling this!
@@ -2620,6 +2687,7 @@ declare class Niivue {
2620
2687
  refreshDrawing(isForceRedraw?: boolean, useClickToSegmentBitmap?: boolean): void;
2621
2688
  r8Tex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
2622
2689
  rgbaTex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
2690
+ rgba16Tex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
2623
2691
  requestCORSIfNotSameOrigin(img: HTMLImageElement, url: string): void;
2624
2692
  loadPngAsTexture(pngUrl: string, textureNum: number): Promise<WebGLTexture | null>;
2625
2693
  loadFontTexture(fontUrl: string): Promise<WebGLTexture | null>;
@@ -2878,6 +2946,11 @@ declare class Niivue {
2878
2946
  inGraphTile(x: number, y: number): boolean;
2879
2947
  updateBitmapFromClickToSegment(): void;
2880
2948
  sumBitmap(img: Uint8Array): number;
2949
+ doClickToSegment(options: {
2950
+ x: number;
2951
+ y: number;
2952
+ tileIndex: number;
2953
+ }): void;
2881
2954
  mouseClick(x: number, y: number, posChange?: number, isDelta?: boolean): void;
2882
2955
  drawRuler(): void;
2883
2956
  drawRuler10cm(startXYendXY: number[], rulerColor: number[], rulerWidth?: number): void;