@niivue/niivue 0.44.1 → 0.44.2-dev.2

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/dist/index.d.ts CHANGED
@@ -107,6 +107,18 @@ declare enum LabelLineTerminator {
107
107
  CIRCLE = "circle",
108
108
  RING = "ring"
109
109
  }
110
+ declare enum LabelAnchorPoint {
111
+ NONE = 0,
112
+ TOPLEFT = 9,
113
+ TOPCENTER = 10,
114
+ TOPRIGHT = 12,
115
+ MIDDLELEFT = 17,
116
+ MIDDLECENTER = 18,
117
+ MIDDLERIGHT = 20,
118
+ BOTTOMLEFT = 33,
119
+ BOTTOMCENTER = 34,
120
+ BOTTOMRIGHT = 36
121
+ }
110
122
  /**
111
123
  * Class representing label style.
112
124
  * @ignore
@@ -140,12 +152,14 @@ declare class NVLabel3D {
140
152
  text: string;
141
153
  style: NVLabel3DStyle;
142
154
  points?: number[] | number[][];
155
+ anchor: LabelAnchorPoint;
156
+ onClick?: (label: NVLabel3D) => void;
143
157
  /**
144
158
  * @param text - The text of the label
145
159
  * @param style - The style of the label
146
160
  * @param points - An array of points label for label lines
147
161
  */
148
- constructor(text: string, style: NVLabel3DStyle, points?: number[] | number[][]);
162
+ constructor(text: string, style: NVLabel3DStyle, points?: number[] | number[][], anchor?: LabelAnchorPoint, onClick?: (label: NVLabel3D) => void);
149
163
  }
150
164
 
151
165
  /**
@@ -584,7 +598,8 @@ declare enum DRAG_MODE {
584
598
  measurement = 2,
585
599
  pan = 3,
586
600
  slicer3D = 4,
587
- callbackOnly = 5
601
+ callbackOnly = 5,
602
+ roiSelection = 6
588
603
  }
589
604
  /**
590
605
  * NVConfigOptions
@@ -619,6 +634,7 @@ type NVConfigOptions = {
619
634
  isOrientCube: boolean;
620
635
  multiplanarPadPixels: number;
621
636
  multiplanarForceRender: boolean;
637
+ multiplanarEqualSize: boolean;
622
638
  multiplanarShowRender: SHOW_RENDER;
623
639
  isRadiologicalConvention: boolean;
624
640
  meshThicknessOn2D: number | string;
@@ -653,13 +669,23 @@ type NVConfigOptions = {
653
669
  renderOverlayBlend: number;
654
670
  sliceMosaicString: string;
655
671
  centerMosaic: boolean;
672
+ penSize: number;
656
673
  clickToSegment: boolean;
657
674
  clickToSegmentRadius: number;
658
- clickToSegmentSteps: number;
659
675
  clickToSegmentBright: boolean;
676
+ clickToSegmentAutoIntensity: boolean;
677
+ clickToSegmentIntensityMax: number;
678
+ clickToSegmentIntensityMin: number;
679
+ clickToSegmentPercent: number;
680
+ clickToSegmentMaxDistanceMM: number;
681
+ clickToSegmentIs2D: boolean;
682
+ selectionBoxLineThickness: number;
683
+ selectionBoxIsOutline: boolean;
684
+ scrollRequiresFocus: boolean;
660
685
  };
661
686
  declare const DEFAULT_OPTIONS: NVConfigOptions;
662
687
  type SceneData = {
688
+ gamma: number;
663
689
  azimuth: number;
664
690
  elevation: number;
665
691
  crosshairPos: vec3;
@@ -672,6 +698,7 @@ type SceneData = {
672
698
  clipVolumeHigh: number[];
673
699
  };
674
700
  declare const INITIAL_SCENE_DATA: {
701
+ gamma: number;
675
702
  azimuth: number;
676
703
  elevation: number;
677
704
  crosshairPos: vec3;
@@ -696,6 +723,7 @@ type Scene = {
696
723
  pan2Dxyzmm: vec4;
697
724
  _elevation?: number;
698
725
  _azimuth?: number;
726
+ gamma?: number;
699
727
  };
700
728
  type DocumentData = {
701
729
  title: string;
@@ -958,6 +986,18 @@ type NiiVueLocation = {
958
986
  vox: vec3;
959
987
  xy: [number, number];
960
988
  };
989
+ type SyncOpts = {
990
+ '3d'?: boolean;
991
+ '2d'?: boolean;
992
+ zoomPan?: boolean;
993
+ cal_min?: boolean;
994
+ cal_max?: boolean;
995
+ gamma?: boolean;
996
+ useSliceOffset?: boolean;
997
+ sliceType?: boolean;
998
+ crosshair?: boolean;
999
+ clipPlane?: boolean;
1000
+ };
961
1001
 
962
1002
  type ValuesArray = Array<{
963
1003
  id: string;
@@ -1506,6 +1546,7 @@ declare class NVMeshLoaders {
1506
1546
  static readLayer(name: string, buffer: ArrayBuffer, nvmesh: NVMesh, opacity?: number, colormap?: string, colormapNegative?: string, useNegativeCmap?: boolean, cal_min?: number | null, cal_max?: number | null, outlineBorder?: number): NVMeshLayer | undefined;
1507
1547
  static readSMP(buffer: ArrayBuffer, n_vert: number): Float32Array;
1508
1548
  static readSTC(buffer: ArrayBuffer, n_vert: number): Float32Array;
1549
+ static isCurv(buffer: ArrayBuffer): boolean;
1509
1550
  static readCURV(buffer: ArrayBuffer, n_vert: number): Float32Array;
1510
1551
  static readANNOT(buffer: ArrayBuffer, n_vert: number, isReadColortables?: boolean): ANNOT;
1511
1552
  static readNV(buffer: ArrayBuffer): DefaultMeshType;
@@ -1593,6 +1634,7 @@ type Descriptive = {
1593
1634
  cal_max: number;
1594
1635
  robust_min: number;
1595
1636
  robust_max: number;
1637
+ area: number | null;
1596
1638
  };
1597
1639
  type SliceScale = {
1598
1640
  volScale: number[];
@@ -1664,6 +1706,9 @@ declare class Niivue {
1664
1706
  drawUndoBitmaps: Uint8Array[];
1665
1707
  drawLut: LUT;
1666
1708
  drawOpacity: number;
1709
+ clickToSegmentIsGrowing: boolean;
1710
+ clickToSegmentGrowingBitmap: Uint8Array | null;
1711
+ clickToSegmentXY: number[];
1667
1712
  renderDrawAmbientOcclusion: number;
1668
1713
  colorbarHeight: number;
1669
1714
  drawPenLocation: number[];
@@ -1677,6 +1722,7 @@ declare class Niivue {
1677
1722
  orientCubeShader?: Shader;
1678
1723
  orientCubeShaderVAO: WebGLVertexArrayObject | null;
1679
1724
  rectShader?: Shader;
1725
+ rectOutlineShader?: Shader;
1680
1726
  renderShader?: Shader;
1681
1727
  lineShader?: Shader;
1682
1728
  line3DShader?: Shader;
@@ -1721,7 +1767,7 @@ declare class Niivue {
1721
1767
  extentsMin?: vec3;
1722
1768
  extentsMax?: vec3;
1723
1769
  private resizeObserver;
1724
- syncOpts: Record<string, unknown>;
1770
+ syncOpts: SyncOpts;
1725
1771
  readyForSync: boolean;
1726
1772
  uiData: UIData;
1727
1773
  back: NVImage | null;
@@ -1742,7 +1788,7 @@ declare class Niivue {
1742
1788
  screen2frac?: number[];
1743
1789
  }>;
1744
1790
  cuboidVertexBuffer?: WebGLBuffer;
1745
- otherNV: Niivue | Niivue[] | null;
1791
+ otherNV: Niivue[] | null;
1746
1792
  volumeObject3D: NiivueObject3D | null;
1747
1793
  pivot3D: number[];
1748
1794
  furthestFromPivot: number;
@@ -1997,7 +2043,7 @@ declare class Niivue {
1997
2043
  * @deprecated use broadcastTo instead
1998
2044
  * @see {@link https://niivue.github.io/niivue/features/sync.mesh.html | live demo usage}
1999
2045
  */
2000
- syncWith(otherNV: Niivue, syncOpts?: {
2046
+ syncWith(otherNV: Niivue | Niivue[], syncOpts?: {
2001
2047
  '2d': boolean;
2002
2048
  '3d': boolean;
2003
2049
  }): void;
@@ -2016,6 +2062,15 @@ declare class Niivue {
2016
2062
  '2d': boolean;
2017
2063
  '3d': boolean;
2018
2064
  }): void;
2065
+ doSync3d(otherNV: Niivue): void;
2066
+ doSync2d(otherNV: Niivue): void;
2067
+ doSyncGamma(otherNV: Niivue): void;
2068
+ doSyncZoomPan(otherNV: Niivue): void;
2069
+ doSyncCrosshair(otherNV: Niivue): void;
2070
+ doSyncCalMin(otherNV: Niivue): void;
2071
+ doSyncCalMax(otherNV: Niivue): void;
2072
+ doSyncSliceType(otherNV: Niivue): void;
2073
+ doSyncClipPlane(otherNV: Niivue): void;
2019
2074
  /**
2020
2075
  * Sync the scene controls (orientation, crosshair location, etc.) from one Niivue instance to another. useful for using one canvas to drive another.
2021
2076
  * @internal
@@ -2676,9 +2731,17 @@ declare class Niivue {
2676
2731
  drawGrowCut(): void;
2677
2732
  drawPt(x: number, y: number, z: number, penValue: number): void;
2678
2733
  drawPenLine(ptA: number[], ptB: number[], penValue: number): void;
2734
+ /**
2735
+ * Performs a 1-voxel binary dilation on a connected cluster within the drawing mask using the drawFloodFillCore function.
2736
+ *
2737
+ * @param seedXYZ - voxel index of the seed voxel in the mask array.
2738
+ * @param neighbors - Number of neighbors to consider for connectivity and dilation (6, 18, or 26).
2739
+ */
2740
+ drawingBinaryDilationWithSeed(seedXYZ: number[], // seed voxel x,y,z
2741
+ neighbors?: 6 | 18 | 26): void;
2679
2742
  drawFloodFillCore(img: Uint8Array, seedVx: number, neighbors?: number): void;
2680
2743
  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
2681
- forceMin?: number, forceMax?: number, neighbors?: number): void;
2744
+ forceMin?: number, forceMax?: number, neighbors?: number, maxDistanceMM?: number, is2D?: boolean): void;
2682
2745
  drawPenFilled(): void;
2683
2746
  /**
2684
2747
  * close drawing: make sure you have saved any changes before calling this!
@@ -2692,7 +2755,7 @@ declare class Niivue {
2692
2755
  * @example niivue.refreshDrawing();
2693
2756
  * @see {@link https://niivue.github.io/niivue/features/cactus.html | live demo usage}
2694
2757
  */
2695
- refreshDrawing(isForceRedraw?: boolean): void;
2758
+ refreshDrawing(isForceRedraw?: boolean, useClickToSegmentBitmap?: boolean): void;
2696
2759
  r8Tex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
2697
2760
  rgbaTex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
2698
2761
  requestCORSIfNotSameOrigin(img: HTMLImageElement, url: string): void;
@@ -2807,13 +2870,33 @@ declare class Niivue {
2807
2870
  updateGLVolume(): void;
2808
2871
  /**
2809
2872
  * basic statistics for selected voxel-based image
2810
- * @param layer - selects image to describe
2811
- * @param masks - are optional binary images to filter voxles
2812
- * @returns numeric values to describe image
2813
- * @example niivue.getDescriptives(0);
2873
+ * @param options - an object containing the following properties:
2874
+ * - layer: selects image to describe
2875
+ * - masks: optional binary images to filter voxels
2876
+ * - drawingIsMask: a boolean indicating if the drawing is used as a mask
2877
+ * - roiIsMask: a boolean indicating if the ROI is used as a mask
2878
+ * - startVox: the starting voxel coordinates
2879
+ * - endVox: the ending voxel coordinates
2880
+ * @returns numeric values to describe image or regions of images
2881
+ * @example
2882
+ * niivue.getDescriptives({
2883
+ * layer: 0,
2884
+ * masks: [],
2885
+ * drawingIsMask: true, // drawingIsMask and roiIsMask are mutually exclusive
2886
+ * roiIsMask: false,
2887
+ * startVox: [10, 20, 30], // ignored if roiIsMask is false
2888
+ * endVox: [40, 50, 60] // ignored if roiIsMask is false
2889
+ * });
2814
2890
  * @see {@link https://niivue.github.io/niivue/features/draw2.html | live demo usage}
2815
2891
  */
2816
- getDescriptives(layer?: number, masks?: any[], drawingIsMask?: boolean): Descriptive;
2892
+ getDescriptives(options: {
2893
+ layer?: number;
2894
+ masks?: number[];
2895
+ drawingIsMask?: boolean;
2896
+ roiIsMask?: boolean;
2897
+ startVox?: number[];
2898
+ endVox?: number[];
2899
+ }): Descriptive;
2817
2900
  refreshLayers(overlayItem: NVImage, layer: number): void;
2818
2901
  /**
2819
2902
  * query all available color maps that can be applied to volumes
@@ -2931,6 +3014,8 @@ declare class Niivue {
2931
3014
  sliceScroll3D(posChange?: number): void;
2932
3015
  deleteThumbnail(): void;
2933
3016
  inGraphTile(x: number, y: number): boolean;
3017
+ updateBitmapFromClickToSegment(): void;
3018
+ sumBitmap(img: Uint8Array): number;
2934
3019
  mouseClick(x: number, y: number, posChange?: number, isDelta?: boolean): void;
2935
3020
  drawRuler(): void;
2936
3021
  drawRuler10cm(startXYendXY: number[]): void;
@@ -2945,6 +3030,7 @@ declare class Niivue {
2945
3030
  effectiveCanvasHeight(): number;
2946
3031
  effectiveCanvasWidth(): number;
2947
3032
  getAllLabels(): NVLabel3D[];
3033
+ getConnectomeLabels(): NVLabel3D[];
2948
3034
  getBulletMarginWidth(): number;
2949
3035
  getLegendPanelWidth(): number;
2950
3036
  getLegendPanelHeight(): number;
@@ -2976,9 +3062,10 @@ declare class Niivue {
2976
3062
  screenFieldOfViewMM(axCorSag?: number, forceSliceMM?: boolean): vec3;
2977
3063
  screenFieldOfViewExtendedVox(axCorSag?: number): MM;
2978
3064
  screenFieldOfViewExtendedMM(axCorSag?: number): MM;
2979
- drawSliceOrientationText(leftTopWidthHeight: number[], axCorSag: SLICE_TYPE): void;
3065
+ drawSliceOrientationText(leftTopWidthHeight: number[], axCorSag: SLICE_TYPE, padLeftTop?: number[]): void;
2980
3066
  xyMM2xyzMM(axCorSag: SLICE_TYPE, sliceFrac: number): number[];
2981
- draw2D(leftTopWidthHeight: number[], axCorSag: SLICE_TYPE, customMM?: number): void;
3067
+ draw2DMain(leftTopWidthHeight: number[], axCorSag: SLICE_TYPE, customMM?: number): void;
3068
+ draw2D(leftTopWidthHeight: number[], axCorSag: SLICE_TYPE, customMM?: number, imageWidthHeight?: number[]): void;
2982
3069
  calculateMvpMatrix(_unused: unknown, leftTopWidthHeight: number[], azimuth: number, elevation: number): mat4[];
2983
3070
  calculateModelMatrix(azimuth: number, elevation: number): mat4;
2984
3071
  calculateRayDirection(azimuth: number, elevation: number): vec3;
@@ -2997,12 +3084,13 @@ declare class Niivue {
2997
3084
  * @param style - label style
2998
3085
  * @param point - 3D point on the model
2999
3086
  */
3000
- addLabel(text: string, style: NVLabel3DStyle, points?: number[] | number[][]): NVLabel3D;
3087
+ addLabel(text: string, style: NVLabel3DStyle, points?: number[] | number[][], anchor?: LabelAnchorPoint, onClick?: (label: NVLabel3D) => void): NVLabel3D;
3001
3088
  calculateScreenPoint(point: [number, number, number], mvpMatrix: mat4, leftTopWidthHeight: number[]): vec4;
3002
3089
  getLabelAtPoint(screenPoint: [number, number]): NVLabel3D | null;
3003
3090
  drawLabelLine(label: NVLabel3D, pos: vec2, mvpMatrix: mat4, leftTopWidthHeight: number[], secondPass?: boolean): void;
3004
- draw3DLabel(label: NVLabel3D, pos: vec2, mvpMatrix: mat4, leftTopWidthHeight: number[], bulletMargin: number, legendWidth: number, secondPass?: boolean): void;
3091
+ draw3DLabel(label: NVLabel3D, pos: vec2, mvpMatrix?: mat4, leftTopWidthHeight?: number[], bulletMargin?: number, legendWidth?: number, secondPass?: boolean): void;
3005
3092
  draw3DLabels(mvpMatrix: mat4, leftTopWidthHeight: number[], secondPass?: boolean): void;
3093
+ drawAnchoredLabels(): void;
3006
3094
  draw3D(leftTopWidthHeight?: number[], mvpMatrix?: mat4 | null, modelMatrix?: mat4 | null, normalMatrix?: mat4 | null, azimuth?: number | null, elevation?: number): string | undefined;
3007
3095
  drawMesh3D(isDepthTest?: boolean, alpha?: number, m?: mat4, modelMtx?: mat4, normMtx?: mat4): void;
3008
3096
  drawCrosshairs3D(isDepthTest?: boolean, alpha?: number, mvpMtx?: mat4 | null, is2DView?: boolean, isSliceMM?: boolean): void;
@@ -3042,4 +3130,4 @@ declare class Niivue {
3042
3130
  set gl(gl: WebGL2RenderingContext | null);
3043
3131
  }
3044
3132
 
3045
- export { type Connectome, type ConnectomeOptions, DEFAULT_OPTIONS, DRAG_MODE, type DocumentData, type DragReleaseParams, type ExportDocumentData, INITIAL_SCENE_DATA, LabelLineTerminator, LabelTextAlignment, type LegacyConnectome, type LegacyNodes, MULTIPLANAR_TYPE, type NVConfigOptions, type NVConnectomeEdge, type NVConnectomeNode, NVController, NVDocument, NVImage, NVImageFromUrlOptions, NVLabel3D, NVLabel3DStyle, NVMesh, NVMeshFromUrlOptions, NVMeshLayerDefaults, NVMeshLoaders, NVMeshUtilities, NVUtilities, type NiftiHeader, type NiiVueLocation, type NiiVueLocationValue, Niivue, type Point, SHOW_RENDER, SLICE_TYPE, type Scene, type Volume, cmapper, ColorTables as colortables };
3133
+ export { type Connectome, type ConnectomeOptions, DEFAULT_OPTIONS, DRAG_MODE, type DocumentData, type DragReleaseParams, type ExportDocumentData, INITIAL_SCENE_DATA, LabelAnchorPoint, LabelLineTerminator, LabelTextAlignment, type LegacyConnectome, type LegacyNodes, MULTIPLANAR_TYPE, type NVConfigOptions, type NVConnectomeEdge, type NVConnectomeNode, NVController, NVDocument, NVImage, NVImageFromUrlOptions, NVLabel3D, NVLabel3DStyle, NVMesh, NVMeshFromUrlOptions, NVMeshLayerDefaults, NVMeshLoaders, NVMeshUtilities, NVUtilities, type NiftiHeader, type NiiVueLocation, type NiiVueLocationValue, Niivue, type Point, SHOW_RENDER, SLICE_TYPE, type Scene, type SyncOpts, type Volume, cmapper, ColorTables as colortables };