@niivue/niivue 0.44.1 → 0.44.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/build/index.js +102 -49
- package/build/index.js.map +1 -1
- package/build/index.min.js +1 -1
- package/dist/index.js +25483 -30564
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/niivue.umd.js +47 -9
- package/package.json +18 -17
- package/src/niivue/index.ts +6 -1
- package/src/nvimage/utils.ts +61 -42
- package/src/shader-srcs.ts +43 -3
package/build/index.js
CHANGED
|
@@ -4,16 +4,13 @@ var __export = (target, all) => {
|
|
|
4
4
|
for (var name in all)
|
|
5
5
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
6
6
|
};
|
|
7
|
-
var __publicField = (obj, key, value) =>
|
|
8
|
-
__defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
9
|
-
return value;
|
|
10
|
-
};
|
|
7
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
11
8
|
|
|
12
9
|
// src/niivue/index.ts
|
|
13
10
|
import { mat4 as mat46, vec2, vec3 as vec311, vec4 as vec48 } from "gl-matrix";
|
|
14
11
|
|
|
15
12
|
// package.json
|
|
16
|
-
var version = "0.44.
|
|
13
|
+
var version = "0.44.2";
|
|
17
14
|
|
|
18
15
|
// src/logger.ts
|
|
19
16
|
var _Log = class _Log {
|
|
@@ -1271,11 +1268,11 @@ uniform mat4 mvpMtx;
|
|
|
1271
1268
|
uniform mat4 normMtx;
|
|
1272
1269
|
out vec4 vClr;
|
|
1273
1270
|
out vec3 vN;
|
|
1274
|
-
out vec4
|
|
1271
|
+
out vec4 vPc;
|
|
1275
1272
|
void main(void) {
|
|
1276
1273
|
vec3 lightPosition = vec3(0.0, 0.0, -10.0);
|
|
1277
|
-
|
|
1278
|
-
gl_Position =
|
|
1274
|
+
vPc = mvpMtx * vec4(pos, 1.0);
|
|
1275
|
+
gl_Position = vPc;
|
|
1279
1276
|
vN = normalize((normMtx * vec4(norm.xyz,1.0)).xyz);
|
|
1280
1277
|
//vV = -vec3(modelMtx*vec4(pos,1.0));
|
|
1281
1278
|
vClr = clr;
|
|
@@ -1420,6 +1417,45 @@ void main() {
|
|
|
1420
1417
|
s *= specularWhite;
|
|
1421
1418
|
color = vec4(d3 + s3 + s, opacity);
|
|
1422
1419
|
}`;
|
|
1420
|
+
var fragMeshShaderCrevice = `#version 300 es
|
|
1421
|
+
precision highp int;
|
|
1422
|
+
precision highp float;
|
|
1423
|
+
uniform float opacity;
|
|
1424
|
+
in vec4 vClr;
|
|
1425
|
+
in vec3 vN;
|
|
1426
|
+
in vec4 vPc;
|
|
1427
|
+
out vec4 color;
|
|
1428
|
+
void main() {
|
|
1429
|
+
vec3 n = normalize(vN);
|
|
1430
|
+
// Compute curvature
|
|
1431
|
+
vec3 dx = dFdx(n);
|
|
1432
|
+
vec3 dy = dFdy(n);
|
|
1433
|
+
vec3 xneg = n - dx;
|
|
1434
|
+
vec3 xpos = n + dx;
|
|
1435
|
+
vec3 yneg = n - dy;
|
|
1436
|
+
vec3 ypos = n + dy;
|
|
1437
|
+
float depth = length(vPc.xyz);
|
|
1438
|
+
float curv = (cross(xneg, xpos).y - cross(yneg, ypos).x) / depth;
|
|
1439
|
+
//at this stage 0.5 for flat, with valleys dark and ridges bright
|
|
1440
|
+
curv = 1.0 - (curv + 0.5);
|
|
1441
|
+
//clamp
|
|
1442
|
+
curv = min(max(curv, 0.0), 1.0);
|
|
1443
|
+
// easing function
|
|
1444
|
+
curv = pow(curv, 0.5);
|
|
1445
|
+
//modulate ambient and diffuse with curvature
|
|
1446
|
+
vec3 r = vec3(0.0, 0.0, 1.0); //rayDir: for orthographic projections moving in Z direction (no need for normal matrix)
|
|
1447
|
+
float ambient = 0.6;
|
|
1448
|
+
float diffuse = 0.6;
|
|
1449
|
+
float specular = 0.2;
|
|
1450
|
+
float shininess = 10.0;
|
|
1451
|
+
vec3 lightPosition = vec3(0.0, 10.0, -2.0);
|
|
1452
|
+
vec3 l = normalize(lightPosition);
|
|
1453
|
+
float lightNormDot = dot(n, l);
|
|
1454
|
+
vec3 a = vClr.rgb * ambient * curv;
|
|
1455
|
+
vec3 d = max(lightNormDot, 0.0) * vClr.rgb * diffuse;
|
|
1456
|
+
float s = specular * pow(max(dot(reflect(l, n), r), 0.0), shininess);
|
|
1457
|
+
color = vec4(a + d + s, opacity);
|
|
1458
|
+
}`;
|
|
1423
1459
|
var fragMeshShader = `#version 300 es
|
|
1424
1460
|
precision highp int;
|
|
1425
1461
|
precision highp float;
|
|
@@ -18369,76 +18405,90 @@ function getBestTransform(imageDirections, voxelDimensions, imagePosition) {
|
|
|
18369
18405
|
}
|
|
18370
18406
|
return m;
|
|
18371
18407
|
}
|
|
18372
|
-
function str2Buffer(str) {
|
|
18408
|
+
function str2Buffer(str, maxLen = 80) {
|
|
18409
|
+
str = str.replace(/[`$]/g, "");
|
|
18373
18410
|
const bytes = [];
|
|
18374
|
-
|
|
18411
|
+
const len = Math.min(maxLen, str.length);
|
|
18412
|
+
for (let i = 0; i < len; i++) {
|
|
18375
18413
|
const char = str.charCodeAt(i);
|
|
18376
18414
|
bytes.push(char & 255);
|
|
18377
18415
|
}
|
|
18378
18416
|
return bytes;
|
|
18379
18417
|
}
|
|
18380
|
-
function hdrToArrayBuffer(hdr, isDrawing8 = false) {
|
|
18418
|
+
function hdrToArrayBuffer(hdr, isDrawing8 = false, isInputEndian = false) {
|
|
18381
18419
|
const SHORT_SIZE = 2;
|
|
18382
18420
|
const FLOAT32_SIZE = 4;
|
|
18421
|
+
let isLittleEndian = true;
|
|
18422
|
+
if (isInputEndian) {
|
|
18423
|
+
isLittleEndian = hdr.littleEndian;
|
|
18424
|
+
}
|
|
18383
18425
|
const byteArray = new Uint8Array(348);
|
|
18384
18426
|
const view = new DataView(byteArray.buffer);
|
|
18385
|
-
view.setInt32(0, 348,
|
|
18427
|
+
view.setInt32(0, 348, isLittleEndian);
|
|
18428
|
+
view.setUint8(38, 114);
|
|
18386
18429
|
view.setUint8(39, hdr.dim_info);
|
|
18387
18430
|
for (let i = 0; i < 8; i++) {
|
|
18388
|
-
view.setUint16(40 + SHORT_SIZE * i, hdr.dims[i],
|
|
18431
|
+
view.setUint16(40 + SHORT_SIZE * i, hdr.dims[i], isLittleEndian);
|
|
18389
18432
|
}
|
|
18390
|
-
view.setFloat32(56, hdr.intent_p1,
|
|
18391
|
-
view.setFloat32(60, hdr.intent_p2,
|
|
18392
|
-
view.setFloat32(64, hdr.intent_p3,
|
|
18393
|
-
view.setInt16(68, hdr.intent_code,
|
|
18433
|
+
view.setFloat32(56, hdr.intent_p1, isLittleEndian);
|
|
18434
|
+
view.setFloat32(60, hdr.intent_p2, isLittleEndian);
|
|
18435
|
+
view.setFloat32(64, hdr.intent_p3, isLittleEndian);
|
|
18436
|
+
view.setInt16(68, hdr.intent_code, isLittleEndian);
|
|
18394
18437
|
if (isDrawing8) {
|
|
18395
|
-
view.setInt16(70, 2,
|
|
18396
|
-
view.setInt16(72, 8,
|
|
18438
|
+
view.setInt16(70, 2, isLittleEndian);
|
|
18439
|
+
view.setInt16(72, 8, isLittleEndian);
|
|
18397
18440
|
} else {
|
|
18398
|
-
view.setInt16(70, hdr.datatypeCode,
|
|
18399
|
-
view.setInt16(72, hdr.numBitsPerVoxel,
|
|
18441
|
+
view.setInt16(70, hdr.datatypeCode, isLittleEndian);
|
|
18442
|
+
view.setInt16(72, hdr.numBitsPerVoxel, isLittleEndian);
|
|
18400
18443
|
}
|
|
18401
|
-
view.setInt16(74, hdr.slice_start,
|
|
18444
|
+
view.setInt16(74, hdr.slice_start, isLittleEndian);
|
|
18402
18445
|
for (let i = 0; i < 8; i++) {
|
|
18403
|
-
view.setFloat32(76 + FLOAT32_SIZE * i, hdr.pixDims[i],
|
|
18446
|
+
view.setFloat32(76 + FLOAT32_SIZE * i, hdr.pixDims[i], isLittleEndian);
|
|
18404
18447
|
}
|
|
18405
18448
|
if (isDrawing8) {
|
|
18406
|
-
view.setFloat32(108, 352,
|
|
18407
|
-
view.setFloat32(112, 1,
|
|
18408
|
-
view.setFloat32(116, 0,
|
|
18449
|
+
view.setFloat32(108, 352, isLittleEndian);
|
|
18450
|
+
view.setFloat32(112, 1, isLittleEndian);
|
|
18451
|
+
view.setFloat32(116, 0, isLittleEndian);
|
|
18409
18452
|
} else {
|
|
18410
|
-
view.setFloat32(108,
|
|
18411
|
-
view.setFloat32(112, hdr.scl_slope,
|
|
18412
|
-
view.setFloat32(116, hdr.scl_inter,
|
|
18453
|
+
view.setFloat32(108, 352, isLittleEndian);
|
|
18454
|
+
view.setFloat32(112, hdr.scl_slope, isLittleEndian);
|
|
18455
|
+
view.setFloat32(116, hdr.scl_inter, isLittleEndian);
|
|
18413
18456
|
}
|
|
18414
|
-
view.setInt16(120, hdr.slice_end,
|
|
18457
|
+
view.setInt16(120, hdr.slice_end, isLittleEndian);
|
|
18415
18458
|
view.setUint8(122, hdr.slice_code);
|
|
18416
|
-
|
|
18459
|
+
if (hdr.xyzt_units === 0) {
|
|
18460
|
+
view.setUint8(123, 10);
|
|
18461
|
+
} else {
|
|
18462
|
+
view.setUint8(123, hdr.xyzt_units);
|
|
18463
|
+
}
|
|
18417
18464
|
if (isDrawing8) {
|
|
18418
|
-
view.setFloat32(124, 0,
|
|
18419
|
-
view.setFloat32(128, 0,
|
|
18465
|
+
view.setFloat32(124, 0, isLittleEndian);
|
|
18466
|
+
view.setFloat32(128, 0, isLittleEndian);
|
|
18420
18467
|
} else {
|
|
18421
|
-
view.setFloat32(124, hdr.cal_max,
|
|
18422
|
-
view.setFloat32(128, hdr.cal_min,
|
|
18468
|
+
view.setFloat32(124, hdr.cal_max, isLittleEndian);
|
|
18469
|
+
view.setFloat32(128, hdr.cal_min, isLittleEndian);
|
|
18423
18470
|
}
|
|
18424
|
-
view.setFloat32(132, hdr.slice_duration,
|
|
18425
|
-
view.setFloat32(136, hdr.toffset,
|
|
18471
|
+
view.setFloat32(132, hdr.slice_duration, isLittleEndian);
|
|
18472
|
+
view.setFloat32(136, hdr.toffset, isLittleEndian);
|
|
18426
18473
|
byteArray.set(str2Buffer(hdr.description), 148);
|
|
18427
18474
|
byteArray.set(str2Buffer(hdr.aux_file), 228);
|
|
18428
|
-
view.setInt16(252, hdr.qform_code,
|
|
18429
|
-
|
|
18430
|
-
|
|
18431
|
-
|
|
18432
|
-
|
|
18433
|
-
|
|
18434
|
-
view.setFloat32(
|
|
18435
|
-
view.setFloat32(
|
|
18475
|
+
view.setInt16(252, hdr.qform_code, isLittleEndian);
|
|
18476
|
+
if (hdr.sform_code < 1 || hdr.sform_code < 1) {
|
|
18477
|
+
view.setInt16(254, 1, isLittleEndian);
|
|
18478
|
+
} else {
|
|
18479
|
+
view.setInt16(254, hdr.sform_code, isLittleEndian);
|
|
18480
|
+
}
|
|
18481
|
+
view.setFloat32(256, hdr.quatern_b, isLittleEndian);
|
|
18482
|
+
view.setFloat32(260, hdr.quatern_c, isLittleEndian);
|
|
18483
|
+
view.setFloat32(264, hdr.quatern_d, isLittleEndian);
|
|
18484
|
+
view.setFloat32(268, hdr.qoffset_x, isLittleEndian);
|
|
18485
|
+
view.setFloat32(272, hdr.qoffset_y, isLittleEndian);
|
|
18486
|
+
view.setFloat32(276, hdr.qoffset_z, isLittleEndian);
|
|
18436
18487
|
const flattened = hdr.affine.flat();
|
|
18437
18488
|
for (let i = 0; i < 12; i++) {
|
|
18438
|
-
view.setFloat32(280 + FLOAT32_SIZE * i, flattened[i],
|
|
18489
|
+
view.setFloat32(280 + FLOAT32_SIZE * i, flattened[i], isLittleEndian);
|
|
18439
18490
|
}
|
|
18440
|
-
|
|
18441
|
-
byteArray.set(str2Buffer(hdr.magic), 344);
|
|
18491
|
+
view.setInt32(344, 3222382, true);
|
|
18442
18492
|
return byteArray;
|
|
18443
18493
|
}
|
|
18444
18494
|
function getExtents(positions, forceOriginInVolume = true) {
|
|
@@ -24101,6 +24151,10 @@ var Niivue = class _Niivue {
|
|
|
24101
24151
|
Name: "Hemispheric",
|
|
24102
24152
|
Frag: fragMeshHemiShader
|
|
24103
24153
|
},
|
|
24154
|
+
{
|
|
24155
|
+
Name: "Crevice",
|
|
24156
|
+
Frag: fragMeshShaderCrevice
|
|
24157
|
+
},
|
|
24104
24158
|
{
|
|
24105
24159
|
Name: "Edge",
|
|
24106
24160
|
Frag: fragMeshEdgeShader
|
|
@@ -25503,7 +25557,6 @@ var Niivue = class _Niivue {
|
|
|
25503
25557
|
this.loadDrawing(volume);
|
|
25504
25558
|
} else {
|
|
25505
25559
|
this.addVolume(volume);
|
|
25506
|
-
this.setDrawingEnabled(true);
|
|
25507
25560
|
}
|
|
25508
25561
|
}).catch((e2) => {
|
|
25509
25562
|
throw e2;
|