@niivue/niivue 0.45.1 → 0.47.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 +105 -16
- package/build/index.js +909 -184
- package/build/index.js.map +1 -1
- package/build/index.min.js +1 -1
- package/dist/index.d.ts +105 -16
- package/dist/index.js +1140 -361
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/niivue.umd.js +66 -27
- package/package.json +2 -2
- package/src/index.html +85 -4
- package/src/niivue/index.ts +955 -156
- package/src/niivue.css +0 -1
- package/src/nvconnectome.ts +81 -39
- package/src/nvdocument.ts +50 -7
- package/src/nvimage/index.ts +27 -13
- package/src/nvmesh-loaders.ts +1 -1
- package/src/shader-srcs.ts +41 -0
- package/src/types.ts +13 -0
- package/LICENSE +0 -25
- package/README.md +0 -72
- package/src/cow.iwm.cbor +0 -0
- package/src/fslmean.iwi.cbor +0 -0
package/build/index.d.ts
CHANGED
|
@@ -417,7 +417,13 @@ declare class NVImage {
|
|
|
417
417
|
set colorMap(cm: string);
|
|
418
418
|
get opacity(): number;
|
|
419
419
|
set opacity(opacity: number);
|
|
420
|
-
|
|
420
|
+
/**
|
|
421
|
+
* set contrast/brightness to robust range (2%..98%)
|
|
422
|
+
* @param vol - volume for estimate (use -1 to use estimate on all loaded volumes; use INFINITY for current volume)
|
|
423
|
+
* @sets volume brightness and returns array [pct2, pct98, mnScale, mxScale]
|
|
424
|
+
* @see {@link https://niivue.github.io/niivue/features/timeseries2.html | live demo usage}
|
|
425
|
+
*/
|
|
426
|
+
calMinMax(vol?: number): number[];
|
|
421
427
|
intensityRaw2Scaled(raw: number): number;
|
|
422
428
|
intensityScaled2Raw(scaled: number): number;
|
|
423
429
|
saveToUint8Array(fnm: string, drawing8?: Uint8Array | null): Uint8Array;
|
|
@@ -598,7 +604,8 @@ declare enum DRAG_MODE {
|
|
|
598
604
|
measurement = 2,
|
|
599
605
|
pan = 3,
|
|
600
606
|
slicer3D = 4,
|
|
601
|
-
callbackOnly = 5
|
|
607
|
+
callbackOnly = 5,
|
|
608
|
+
roiSelection = 6
|
|
602
609
|
}
|
|
603
610
|
/**
|
|
604
611
|
* NVConfigOptions
|
|
@@ -607,6 +614,7 @@ type NVConfigOptions = {
|
|
|
607
614
|
textHeight: number;
|
|
608
615
|
colorbarHeight: number;
|
|
609
616
|
crosshairWidth: number;
|
|
617
|
+
crosshairWidthUnit: 'voxels' | 'mm' | 'percent';
|
|
610
618
|
crosshairGap: number;
|
|
611
619
|
rulerWidth: number;
|
|
612
620
|
show3Dcrosshair: boolean;
|
|
@@ -631,6 +639,7 @@ type NVConfigOptions = {
|
|
|
631
639
|
isRuler: boolean;
|
|
632
640
|
isColorbar: boolean;
|
|
633
641
|
isOrientCube: boolean;
|
|
642
|
+
tileMargin: number;
|
|
634
643
|
multiplanarPadPixels: number;
|
|
635
644
|
multiplanarForceRender: boolean;
|
|
636
645
|
multiplanarEqualSize: boolean;
|
|
@@ -641,6 +650,8 @@ type NVConfigOptions = {
|
|
|
641
650
|
yoke3Dto2DZoom: boolean;
|
|
642
651
|
isDepthPickMesh: boolean;
|
|
643
652
|
isCornerOrientationText: boolean;
|
|
653
|
+
heroImageFraction: number;
|
|
654
|
+
heroSliceType: SLICE_TYPE;
|
|
644
655
|
sagittalNoseLeft: boolean;
|
|
645
656
|
isSliceMM: boolean;
|
|
646
657
|
isV1SliceShader: boolean;
|
|
@@ -668,10 +679,24 @@ type NVConfigOptions = {
|
|
|
668
679
|
renderOverlayBlend: number;
|
|
669
680
|
sliceMosaicString: string;
|
|
670
681
|
centerMosaic: boolean;
|
|
682
|
+
penSize: number;
|
|
671
683
|
clickToSegment: boolean;
|
|
672
684
|
clickToSegmentRadius: number;
|
|
673
|
-
clickToSegmentSteps: number;
|
|
674
685
|
clickToSegmentBright: boolean;
|
|
686
|
+
clickToSegmentAutoIntensity: boolean;
|
|
687
|
+
clickToSegmentIntensityMax: number;
|
|
688
|
+
clickToSegmentIntensityMin: number;
|
|
689
|
+
clickToSegmentPercent: number;
|
|
690
|
+
clickToSegmentMaxDistanceMM: number;
|
|
691
|
+
clickToSegmentIs2D: boolean;
|
|
692
|
+
selectionBoxLineThickness: number;
|
|
693
|
+
selectionBoxIsOutline: boolean;
|
|
694
|
+
scrollRequiresFocus: boolean;
|
|
695
|
+
showMeasureUnits: boolean;
|
|
696
|
+
measureTextJustify: 'start' | 'center' | 'end';
|
|
697
|
+
measureTextColor: number[];
|
|
698
|
+
measureLineColor: number[];
|
|
699
|
+
measureTextHeight: number;
|
|
675
700
|
};
|
|
676
701
|
declare const DEFAULT_OPTIONS: NVConfigOptions;
|
|
677
702
|
type SceneData = {
|
|
@@ -976,6 +1001,18 @@ type NiiVueLocation = {
|
|
|
976
1001
|
vox: vec3;
|
|
977
1002
|
xy: [number, number];
|
|
978
1003
|
};
|
|
1004
|
+
type SyncOpts = {
|
|
1005
|
+
'3d'?: boolean;
|
|
1006
|
+
'2d'?: boolean;
|
|
1007
|
+
zoomPan?: boolean;
|
|
1008
|
+
cal_min?: boolean;
|
|
1009
|
+
cal_max?: boolean;
|
|
1010
|
+
gamma?: boolean;
|
|
1011
|
+
useSliceOffset?: boolean;
|
|
1012
|
+
sliceType?: boolean;
|
|
1013
|
+
crosshair?: boolean;
|
|
1014
|
+
clipPlane?: boolean;
|
|
1015
|
+
};
|
|
979
1016
|
|
|
980
1017
|
type ValuesArray = Array<{
|
|
981
1018
|
id: string;
|
|
@@ -1586,6 +1623,7 @@ type Graph = {
|
|
|
1586
1623
|
vols: number[];
|
|
1587
1624
|
autoSizeMultiplanar: boolean;
|
|
1588
1625
|
normalizeValues: boolean;
|
|
1626
|
+
isRangeCalMinMax: boolean;
|
|
1589
1627
|
backColor?: number[];
|
|
1590
1628
|
lineColor?: number[];
|
|
1591
1629
|
textColor?: number[];
|
|
@@ -1612,6 +1650,7 @@ type Descriptive = {
|
|
|
1612
1650
|
cal_max: number;
|
|
1613
1651
|
robust_min: number;
|
|
1614
1652
|
robust_max: number;
|
|
1653
|
+
area: number | null;
|
|
1615
1654
|
};
|
|
1616
1655
|
type SliceScale = {
|
|
1617
1656
|
volScale: number[];
|
|
@@ -1684,6 +1723,9 @@ declare class Niivue {
|
|
|
1684
1723
|
drawUndoBitmaps: Uint8Array[];
|
|
1685
1724
|
drawLut: LUT;
|
|
1686
1725
|
drawOpacity: number;
|
|
1726
|
+
clickToSegmentIsGrowing: boolean;
|
|
1727
|
+
clickToSegmentGrowingBitmap: Uint8Array | null;
|
|
1728
|
+
clickToSegmentXY: number[];
|
|
1687
1729
|
renderDrawAmbientOcclusion: number;
|
|
1688
1730
|
colorbarHeight: number;
|
|
1689
1731
|
drawPenLocation: number[];
|
|
@@ -1697,6 +1739,7 @@ declare class Niivue {
|
|
|
1697
1739
|
orientCubeShader?: Shader;
|
|
1698
1740
|
orientCubeShaderVAO: WebGLVertexArrayObject | null;
|
|
1699
1741
|
rectShader?: Shader;
|
|
1742
|
+
rectOutlineShader?: Shader;
|
|
1700
1743
|
renderShader?: Shader;
|
|
1701
1744
|
lineShader?: Shader;
|
|
1702
1745
|
line3DShader?: Shader;
|
|
@@ -1741,7 +1784,7 @@ declare class Niivue {
|
|
|
1741
1784
|
extentsMin?: vec3;
|
|
1742
1785
|
extentsMax?: vec3;
|
|
1743
1786
|
private resizeObserver;
|
|
1744
|
-
syncOpts:
|
|
1787
|
+
syncOpts: SyncOpts;
|
|
1745
1788
|
readyForSync: boolean;
|
|
1746
1789
|
uiData: UIData;
|
|
1747
1790
|
back: NVImage | null;
|
|
@@ -1762,7 +1805,7 @@ declare class Niivue {
|
|
|
1762
1805
|
screen2frac?: number[];
|
|
1763
1806
|
}>;
|
|
1764
1807
|
cuboidVertexBuffer?: WebGLBuffer;
|
|
1765
|
-
otherNV: Niivue
|
|
1808
|
+
otherNV: Niivue[] | null;
|
|
1766
1809
|
volumeObject3D: NiivueObject3D | null;
|
|
1767
1810
|
pivot3D: number[];
|
|
1768
1811
|
furthestFromPivot: number;
|
|
@@ -2017,7 +2060,7 @@ declare class Niivue {
|
|
|
2017
2060
|
* @deprecated use broadcastTo instead
|
|
2018
2061
|
* @see {@link https://niivue.github.io/niivue/features/sync.mesh.html | live demo usage}
|
|
2019
2062
|
*/
|
|
2020
|
-
syncWith(otherNV: Niivue, syncOpts?: {
|
|
2063
|
+
syncWith(otherNV: Niivue | Niivue[], syncOpts?: {
|
|
2021
2064
|
'2d': boolean;
|
|
2022
2065
|
'3d': boolean;
|
|
2023
2066
|
}): void;
|
|
@@ -2036,6 +2079,15 @@ declare class Niivue {
|
|
|
2036
2079
|
'2d': boolean;
|
|
2037
2080
|
'3d': boolean;
|
|
2038
2081
|
}): void;
|
|
2082
|
+
doSync3d(otherNV: Niivue): void;
|
|
2083
|
+
doSync2d(otherNV: Niivue): void;
|
|
2084
|
+
doSyncGamma(otherNV: Niivue): void;
|
|
2085
|
+
doSyncZoomPan(otherNV: Niivue): void;
|
|
2086
|
+
doSyncCrosshair(otherNV: Niivue): void;
|
|
2087
|
+
doSyncCalMin(otherNV: Niivue): void;
|
|
2088
|
+
doSyncCalMax(otherNV: Niivue): void;
|
|
2089
|
+
doSyncSliceType(otherNV: Niivue): void;
|
|
2090
|
+
doSyncClipPlane(otherNV: Niivue): void;
|
|
2039
2091
|
/**
|
|
2040
2092
|
* Sync the scene controls (orientation, crosshair location, etc.) from one Niivue instance to another. useful for using one canvas to drive another.
|
|
2041
2093
|
* @internal
|
|
@@ -2162,6 +2214,13 @@ declare class Niivue {
|
|
|
2162
2214
|
* @see {@link https://niivue.github.io/niivue/features/worldspace2.html | live demo usage}
|
|
2163
2215
|
*/
|
|
2164
2216
|
setCornerOrientationText(isCornerOrientationText: boolean): void;
|
|
2217
|
+
/**
|
|
2218
|
+
* determine proportion of screen real estate devoted to rendering in multiplanar view.
|
|
2219
|
+
* @param fraction - proportion of screen devoted to primary (hero) image (0 to disable)
|
|
2220
|
+
* @example niivue.setHeroImage(0.5)
|
|
2221
|
+
* @see {@link https://niivue.github.io/niivue/features/layout.html | live demo usage}
|
|
2222
|
+
*/
|
|
2223
|
+
setHeroImage(fraction: number): void;
|
|
2165
2224
|
/**
|
|
2166
2225
|
* control whether 2D slices use radiological or neurological convention.
|
|
2167
2226
|
* @param isRadiologicalConvention - new display convention
|
|
@@ -2698,9 +2757,17 @@ declare class Niivue {
|
|
|
2698
2757
|
drawGrowCut(): void;
|
|
2699
2758
|
drawPt(x: number, y: number, z: number, penValue: number): void;
|
|
2700
2759
|
drawPenLine(ptA: number[], ptB: number[], penValue: number): void;
|
|
2760
|
+
/**
|
|
2761
|
+
* Performs a 1-voxel binary dilation on a connected cluster within the drawing mask using the drawFloodFillCore function.
|
|
2762
|
+
*
|
|
2763
|
+
* @param seedXYZ - voxel index of the seed voxel in the mask array.
|
|
2764
|
+
* @param neighbors - Number of neighbors to consider for connectivity and dilation (6, 18, or 26).
|
|
2765
|
+
*/
|
|
2766
|
+
drawingBinaryDilationWithSeed(seedXYZ: number[], // seed voxel x,y,z
|
|
2767
|
+
neighbors?: 6 | 18 | 26): void;
|
|
2701
2768
|
drawFloodFillCore(img: Uint8Array, seedVx: number, neighbors?: number): void;
|
|
2702
2769
|
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
|
|
2703
|
-
forceMin?: number, forceMax?: number, neighbors?: number): void;
|
|
2770
|
+
forceMin?: number, forceMax?: number, neighbors?: number, maxDistanceMM?: number, is2D?: boolean): void;
|
|
2704
2771
|
drawPenFilled(): void;
|
|
2705
2772
|
/**
|
|
2706
2773
|
* close drawing: make sure you have saved any changes before calling this!
|
|
@@ -2714,7 +2781,7 @@ declare class Niivue {
|
|
|
2714
2781
|
* @example niivue.refreshDrawing();
|
|
2715
2782
|
* @see {@link https://niivue.github.io/niivue/features/cactus.html | live demo usage}
|
|
2716
2783
|
*/
|
|
2717
|
-
refreshDrawing(isForceRedraw?: boolean): void;
|
|
2784
|
+
refreshDrawing(isForceRedraw?: boolean, useClickToSegmentBitmap?: boolean): void;
|
|
2718
2785
|
r8Tex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
|
|
2719
2786
|
rgbaTex(texID: WebGLTexture | null, activeID: number, dims: number[], isInit?: boolean): WebGLTexture | null;
|
|
2720
2787
|
requestCORSIfNotSameOrigin(img: HTMLImageElement, url: string): void;
|
|
@@ -2829,13 +2896,33 @@ declare class Niivue {
|
|
|
2829
2896
|
updateGLVolume(): void;
|
|
2830
2897
|
/**
|
|
2831
2898
|
* basic statistics for selected voxel-based image
|
|
2832
|
-
* @param
|
|
2833
|
-
*
|
|
2834
|
-
*
|
|
2835
|
-
*
|
|
2899
|
+
* @param options - an object containing the following properties:
|
|
2900
|
+
* - layer: selects image to describe
|
|
2901
|
+
* - masks: optional binary images to filter voxels
|
|
2902
|
+
* - drawingIsMask: a boolean indicating if the drawing is used as a mask
|
|
2903
|
+
* - roiIsMask: a boolean indicating if the ROI is used as a mask
|
|
2904
|
+
* - startVox: the starting voxel coordinates
|
|
2905
|
+
* - endVox: the ending voxel coordinates
|
|
2906
|
+
* @returns numeric values to describe image or regions of images
|
|
2907
|
+
* @example
|
|
2908
|
+
* niivue.getDescriptives({
|
|
2909
|
+
* layer: 0,
|
|
2910
|
+
* masks: [],
|
|
2911
|
+
* drawingIsMask: true, // drawingIsMask and roiIsMask are mutually exclusive
|
|
2912
|
+
* roiIsMask: false,
|
|
2913
|
+
* startVox: [10, 20, 30], // ignored if roiIsMask is false
|
|
2914
|
+
* endVox: [40, 50, 60] // ignored if roiIsMask is false
|
|
2915
|
+
* });
|
|
2836
2916
|
* @see {@link https://niivue.github.io/niivue/features/draw2.html | live demo usage}
|
|
2837
2917
|
*/
|
|
2838
|
-
getDescriptives(
|
|
2918
|
+
getDescriptives(options: {
|
|
2919
|
+
layer?: number;
|
|
2920
|
+
masks?: number[];
|
|
2921
|
+
drawingIsMask?: boolean;
|
|
2922
|
+
roiIsMask?: boolean;
|
|
2923
|
+
startVox?: number[];
|
|
2924
|
+
endVox?: number[];
|
|
2925
|
+
}): Descriptive;
|
|
2839
2926
|
refreshLayers(overlayItem: NVImage, layer: number): void;
|
|
2840
2927
|
/**
|
|
2841
2928
|
* query all available color maps that can be applied to volumes
|
|
@@ -2953,9 +3040,11 @@ declare class Niivue {
|
|
|
2953
3040
|
sliceScroll3D(posChange?: number): void;
|
|
2954
3041
|
deleteThumbnail(): void;
|
|
2955
3042
|
inGraphTile(x: number, y: number): boolean;
|
|
3043
|
+
updateBitmapFromClickToSegment(): void;
|
|
3044
|
+
sumBitmap(img: Uint8Array): number;
|
|
2956
3045
|
mouseClick(x: number, y: number, posChange?: number, isDelta?: boolean): void;
|
|
2957
3046
|
drawRuler(): void;
|
|
2958
|
-
drawRuler10cm(startXYendXY: number[]): void;
|
|
3047
|
+
drawRuler10cm(startXYendXY: number[], rulerColor: number[], rulerWidth?: number): void;
|
|
2959
3048
|
screenXY2mm(x: number, y: number, forceSlice?: number): vec4;
|
|
2960
3049
|
dragForPanZoom(startXYendXY: number[]): void;
|
|
2961
3050
|
dragForCenterButton(startXYendXY: number[]): void;
|
|
@@ -3046,7 +3135,7 @@ declare class Niivue {
|
|
|
3046
3135
|
frac2mm(frac: vec3, volIdx?: number, isForceSliceMM?: boolean): vec4;
|
|
3047
3136
|
screenXY2TextureFrac(x: number, y: number, i: number, restrict0to1?: boolean): vec3;
|
|
3048
3137
|
canvasPos2frac(canvasPos: number[]): vec3;
|
|
3049
|
-
scaleSlice(w: number, h: number,
|
|
3138
|
+
scaleSlice(w: number, h: number, padPixelsWH?: [number, number], canvasWH?: [number, number]): number[];
|
|
3050
3139
|
drawThumbnail(): void;
|
|
3051
3140
|
drawLine(startXYendXY: number[], thickness?: number, lineColor?: number[]): void;
|
|
3052
3141
|
draw3DLine(startXY: vec2, endXYZ: vec3, thickness?: number, lineColor?: number[]): void;
|
|
@@ -3067,4 +3156,4 @@ declare class Niivue {
|
|
|
3067
3156
|
set gl(gl: WebGL2RenderingContext | null);
|
|
3068
3157
|
}
|
|
3069
3158
|
|
|
3070
|
-
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 Volume, cmapper, ColorTables as colortables };
|
|
3159
|
+
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 };
|