@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 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.1";
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 vP;
1271
+ out vec4 vPc;
1275
1272
  void main(void) {
1276
1273
  vec3 lightPosition = vec3(0.0, 0.0, -10.0);
1277
- vP = vec4(pos, 1.0);
1278
- gl_Position = mvpMtx * vP;
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
- for (let i = 0; i < str.length; i++) {
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, hdr.littleEndian);
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], hdr.littleEndian);
18431
+ view.setUint16(40 + SHORT_SIZE * i, hdr.dims[i], isLittleEndian);
18389
18432
  }
18390
- view.setFloat32(56, hdr.intent_p1, hdr.littleEndian);
18391
- view.setFloat32(60, hdr.intent_p2, hdr.littleEndian);
18392
- view.setFloat32(64, hdr.intent_p3, hdr.littleEndian);
18393
- view.setInt16(68, hdr.intent_code, hdr.littleEndian);
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, hdr.littleEndian);
18396
- view.setInt16(72, 8, hdr.littleEndian);
18438
+ view.setInt16(70, 2, isLittleEndian);
18439
+ view.setInt16(72, 8, isLittleEndian);
18397
18440
  } else {
18398
- view.setInt16(70, hdr.datatypeCode, hdr.littleEndian);
18399
- view.setInt16(72, hdr.numBitsPerVoxel, hdr.littleEndian);
18441
+ view.setInt16(70, hdr.datatypeCode, isLittleEndian);
18442
+ view.setInt16(72, hdr.numBitsPerVoxel, isLittleEndian);
18400
18443
  }
18401
- view.setInt16(74, hdr.slice_start, hdr.littleEndian);
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], hdr.littleEndian);
18446
+ view.setFloat32(76 + FLOAT32_SIZE * i, hdr.pixDims[i], isLittleEndian);
18404
18447
  }
18405
18448
  if (isDrawing8) {
18406
- view.setFloat32(108, 352, hdr.littleEndian);
18407
- view.setFloat32(112, 1, hdr.littleEndian);
18408
- view.setFloat32(116, 0, hdr.littleEndian);
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, hdr.vox_offset, hdr.littleEndian);
18411
- view.setFloat32(112, hdr.scl_slope, hdr.littleEndian);
18412
- view.setFloat32(116, hdr.scl_inter, hdr.littleEndian);
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, hdr.littleEndian);
18457
+ view.setInt16(120, hdr.slice_end, isLittleEndian);
18415
18458
  view.setUint8(122, hdr.slice_code);
18416
- view.setUint8(123, hdr.xyzt_units);
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, hdr.littleEndian);
18419
- view.setFloat32(128, 0, hdr.littleEndian);
18465
+ view.setFloat32(124, 0, isLittleEndian);
18466
+ view.setFloat32(128, 0, isLittleEndian);
18420
18467
  } else {
18421
- view.setFloat32(124, hdr.cal_max, hdr.littleEndian);
18422
- view.setFloat32(128, hdr.cal_min, hdr.littleEndian);
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, hdr.littleEndian);
18425
- view.setFloat32(136, hdr.toffset, hdr.littleEndian);
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, hdr.littleEndian);
18429
- view.setInt16(254, hdr.sform_code, hdr.littleEndian);
18430
- view.setFloat32(256, hdr.quatern_b, hdr.littleEndian);
18431
- view.setFloat32(260, hdr.quatern_c, hdr.littleEndian);
18432
- view.setFloat32(264, hdr.quatern_d, hdr.littleEndian);
18433
- view.setFloat32(268, hdr.qoffset_x, hdr.littleEndian);
18434
- view.setFloat32(272, hdr.qoffset_y, hdr.littleEndian);
18435
- view.setFloat32(276, hdr.qoffset_z, hdr.littleEndian);
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], hdr.littleEndian);
18489
+ view.setFloat32(280 + FLOAT32_SIZE * i, flattened[i], isLittleEndian);
18439
18490
  }
18440
- byteArray.set(str2Buffer(hdr.intent_name), 328);
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;