@niivue/niivue 0.47.0 → 0.48.1
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 +2 -1
- package/build/index.js +60 -6
- package/build/index.js.map +1 -1
- package/build/index.min.js +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +60 -6
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/niivue.umd.js +5 -3
- package/package.json +1 -1
- package/src/index.html +165 -246
- package/src/indexOK.html +277 -0
- package/src/nvimage/index.ts +55 -3
- package/src/nvmesh.ts +6 -2
- package/src/shader-srcs.ts +2 -0
- package/src/shader.ts +8 -0
package/build/index.d.ts
CHANGED
|
@@ -404,7 +404,8 @@ declare class NVImage {
|
|
|
404
404
|
readMIF(buffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
|
|
405
405
|
readNRRD(dataBuffer: ArrayBuffer, pairedImgData: ArrayBuffer | null): ArrayBuffer;
|
|
406
406
|
calculateRAS(): void;
|
|
407
|
-
|
|
407
|
+
hdr2RAS(nVolumes?: number): nifti.NIFTI1 | nifti.NIFTI2;
|
|
408
|
+
img2RAS(nVolume?: number): TypedVoxelArray;
|
|
408
409
|
vox2mm(XYZ: number[], mtx: mat4): vec3;
|
|
409
410
|
mm2vox(mm: number[], frac?: boolean): Float32Array | vec3;
|
|
410
411
|
arrayEquals(a: unknown[], b: unknown[]): boolean;
|
package/build/index.js
CHANGED
|
@@ -10,7 +10,7 @@ var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "sy
|
|
|
10
10
|
import { mat4 as mat46, vec2, vec3 as vec311, vec4 as vec48 } from "gl-matrix";
|
|
11
11
|
|
|
12
12
|
// package.json
|
|
13
|
-
var version = "0.
|
|
13
|
+
var version = "0.48.1";
|
|
14
14
|
|
|
15
15
|
// src/logger.ts
|
|
16
16
|
var _Log = class _Log {
|
|
@@ -83,6 +83,13 @@ var compileShader = function(gl, vert, frag) {
|
|
|
83
83
|
gl.attachShader(program, fs);
|
|
84
84
|
gl.linkProgram(program);
|
|
85
85
|
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
|
86
|
+
console.log(gl.getProgramInfoLog(program));
|
|
87
|
+
if (!gl.getShaderParameter(vs, gl.COMPILE_STATUS)) {
|
|
88
|
+
console.log("Vertex shader compilation error:", gl.getShaderInfoLog(vs));
|
|
89
|
+
}
|
|
90
|
+
if (!gl.getShaderParameter(fs, gl.COMPILE_STATUS)) {
|
|
91
|
+
console.log("Fragment shader compilation error:", gl.getShaderInfoLog(fs));
|
|
92
|
+
}
|
|
86
93
|
log.error(gl.getProgramInfoLog(program));
|
|
87
94
|
throw new Error("Shader failed to link, see console for log");
|
|
88
95
|
}
|
|
@@ -1308,9 +1315,11 @@ uniform mat4 mvpMtx;
|
|
|
1308
1315
|
uniform mat4 normMtx;
|
|
1309
1316
|
out vec4 vClr;
|
|
1310
1317
|
out vec3 vN;
|
|
1318
|
+
out vec4 vP;
|
|
1311
1319
|
out vec4 vPc;
|
|
1312
1320
|
void main(void) {
|
|
1313
1321
|
vec3 lightPosition = vec3(0.0, 0.0, -10.0);
|
|
1322
|
+
vP = vec4(pos, 1.0);
|
|
1314
1323
|
vPc = mvpMtx * vec4(pos, 1.0);
|
|
1315
1324
|
gl_Position = vPc;
|
|
1316
1325
|
vN = normalize((normMtx * vec4(norm.xyz,1.0)).xyz);
|
|
@@ -15456,7 +15465,7 @@ var NVMesh2 = class _NVMesh {
|
|
|
15456
15465
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
|
|
15457
15466
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, Uint32Array.from(idxs), gl.STATIC_DRAW);
|
|
15458
15467
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
15459
|
-
gl.bufferData(gl.ARRAY_BUFFER,
|
|
15468
|
+
gl.bufferData(gl.ARRAY_BUFFER, u8, gl.STATIC_DRAW);
|
|
15460
15469
|
this.indexCount = nidx;
|
|
15461
15470
|
}
|
|
15462
15471
|
// linesToCylinders
|
|
@@ -16162,7 +16171,7 @@ var NVMesh2 = class _NVMesh {
|
|
|
16162
16171
|
gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, this.indexBuffer);
|
|
16163
16172
|
gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, Uint32Array.from(this.tris), gl.STATIC_DRAW);
|
|
16164
16173
|
gl.bindBuffer(gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
16165
|
-
gl.bufferData(gl.ARRAY_BUFFER,
|
|
16174
|
+
gl.bufferData(gl.ARRAY_BUFFER, u8, gl.STATIC_DRAW);
|
|
16166
16175
|
this.indexCount = this.tris.length;
|
|
16167
16176
|
this.vertexCount = this.pts.length;
|
|
16168
16177
|
}
|
|
@@ -20867,9 +20876,48 @@ var NVImage = class _NVImage {
|
|
|
20867
20876
|
this.img2RASstart = outStart;
|
|
20868
20877
|
this.calculateOblique();
|
|
20869
20878
|
}
|
|
20879
|
+
// Reorient raw header data to RAS
|
|
20880
|
+
// assume single volume, use nVolumes to specify, set nVolumes = 0 for same as input
|
|
20881
|
+
hdr2RAS(nVolumes = 1) {
|
|
20882
|
+
if (!this.permRAS) {
|
|
20883
|
+
throw new Error("permRAS undefined");
|
|
20884
|
+
}
|
|
20885
|
+
if (!this.hdr) {
|
|
20886
|
+
throw new Error("hdr undefined");
|
|
20887
|
+
}
|
|
20888
|
+
const hdrBytes = hdrToArrayBuffer({ ...this.hdr, vox_offset: 352 }, false);
|
|
20889
|
+
const hdr = nifti.readHeader(hdrBytes.buffer, true);
|
|
20890
|
+
if (nVolumes === 1) {
|
|
20891
|
+
hdr.dims[0] = 3;
|
|
20892
|
+
hdr.dims[4] = 1;
|
|
20893
|
+
} else if (nVolumes > 1) {
|
|
20894
|
+
hdr.dims[0] = 4;
|
|
20895
|
+
hdr.dims[4] = nVolumes;
|
|
20896
|
+
}
|
|
20897
|
+
const perm = this.permRAS.slice();
|
|
20898
|
+
if (perm[0] === 1 && perm[1] === 2 && perm[2] === 3) {
|
|
20899
|
+
return hdr;
|
|
20900
|
+
}
|
|
20901
|
+
hdr.qform_code = 0;
|
|
20902
|
+
for (let i = 1; i < 4; i++) {
|
|
20903
|
+
hdr.dims[i] = this.dimsRAS[i];
|
|
20904
|
+
}
|
|
20905
|
+
for (let i = 0; i < this.pixDimsRAS.length; i++) {
|
|
20906
|
+
hdr.pixDims[i] = this.pixDimsRAS[i];
|
|
20907
|
+
}
|
|
20908
|
+
let k = 0;
|
|
20909
|
+
for (let i = 0; i < 4; i++) {
|
|
20910
|
+
for (let j = 0; j < 4; j++) {
|
|
20911
|
+
hdr.affine[i][j] = this.matRAS[k];
|
|
20912
|
+
k++;
|
|
20913
|
+
}
|
|
20914
|
+
}
|
|
20915
|
+
return hdr;
|
|
20916
|
+
}
|
|
20870
20917
|
// Reorient raw image data to RAS
|
|
20871
20918
|
// note that GPU-based orient shader is much faster
|
|
20872
|
-
|
|
20919
|
+
// returns single 3D volume even for 4D input. Use nVolume to select volume (0 indexed)
|
|
20920
|
+
img2RAS(nVolume = 0) {
|
|
20873
20921
|
if (!this.permRAS) {
|
|
20874
20922
|
throw new Error("permRAS undefined");
|
|
20875
20923
|
}
|
|
@@ -20884,7 +20932,13 @@ var NVImage = class _NVImage {
|
|
|
20884
20932
|
return this.img;
|
|
20885
20933
|
}
|
|
20886
20934
|
const hdr = this.hdr;
|
|
20887
|
-
const
|
|
20935
|
+
const nVox = hdr.dims[1] * hdr.dims[2] * hdr.dims[3];
|
|
20936
|
+
let volSkip = nVolume * nVox;
|
|
20937
|
+
if (volSkip + nVox > this.img.length || volSkip < 0) {
|
|
20938
|
+
volSkip = 0;
|
|
20939
|
+
log.warn(`img2RAS nVolume (${nVolume}) out of bounds (${nVolume}+1)\xD7${nVox} > ${this.img.length}`);
|
|
20940
|
+
}
|
|
20941
|
+
const imgRAS = this.img.slice(0, nVox);
|
|
20888
20942
|
const aperm = [Math.abs(perm[0]), Math.abs(perm[1]), Math.abs(perm[2])];
|
|
20889
20943
|
const outdim = [hdr.dims[aperm[0]], hdr.dims[aperm[1]], hdr.dims[aperm[2]]];
|
|
20890
20944
|
const inStep = [1, hdr.dims[1], hdr.dims[1] * hdr.dims[2]];
|
|
@@ -20903,7 +20957,7 @@ var NVImage = class _NVImage {
|
|
|
20903
20957
|
const yi = outStart[1] + y * outStep[1];
|
|
20904
20958
|
for (let x = 0; x < outdim[0]; x++) {
|
|
20905
20959
|
const xi = outStart[0] + x * outStep[0];
|
|
20906
|
-
imgRAS[j] = this.img[xi + yi + zi];
|
|
20960
|
+
imgRAS[j] = this.img[xi + yi + zi + volSkip];
|
|
20907
20961
|
j++;
|
|
20908
20962
|
}
|
|
20909
20963
|
}
|