@cornerstonejs/core 0.29.1 → 0.30.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.
Files changed (33) hide show
  1. package/dist/cjs/RenderingEngine/StackViewport.d.ts +3 -1
  2. package/dist/cjs/RenderingEngine/StackViewport.js +45 -26
  3. package/dist/cjs/RenderingEngine/StackViewport.js.map +1 -1
  4. package/dist/cjs/RenderingEngine/Viewport.d.ts +1 -1
  5. package/dist/cjs/RenderingEngine/Viewport.js +1 -2
  6. package/dist/cjs/RenderingEngine/Viewport.js.map +1 -1
  7. package/dist/cjs/RenderingEngine/VolumeViewport.d.ts +1 -0
  8. package/dist/cjs/RenderingEngine/VolumeViewport.js +1 -0
  9. package/dist/cjs/RenderingEngine/VolumeViewport.js.map +1 -1
  10. package/dist/cjs/RenderingEngine/VolumeViewport3D.d.ts +1 -0
  11. package/dist/cjs/RenderingEngine/VolumeViewport3D.js +1 -0
  12. package/dist/cjs/RenderingEngine/VolumeViewport3D.js.map +1 -1
  13. package/dist/cjs/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +2 -248
  14. package/dist/cjs/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js.map +1 -1
  15. package/dist/cjs/types/IViewport.d.ts +1 -0
  16. package/dist/esm/RenderingEngine/StackViewport.d.ts +3 -1
  17. package/dist/esm/RenderingEngine/StackViewport.js +45 -26
  18. package/dist/esm/RenderingEngine/StackViewport.js.map +1 -1
  19. package/dist/esm/RenderingEngine/Viewport.d.ts +1 -1
  20. package/dist/esm/RenderingEngine/Viewport.js +1 -2
  21. package/dist/esm/RenderingEngine/Viewport.js.map +1 -1
  22. package/dist/esm/RenderingEngine/VolumeViewport.d.ts +1 -0
  23. package/dist/esm/RenderingEngine/VolumeViewport.js +1 -0
  24. package/dist/esm/RenderingEngine/VolumeViewport.js.map +1 -1
  25. package/dist/esm/RenderingEngine/VolumeViewport3D.d.ts +1 -0
  26. package/dist/esm/RenderingEngine/VolumeViewport3D.js +1 -0
  27. package/dist/esm/RenderingEngine/VolumeViewport3D.js.map +1 -1
  28. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js +2 -248
  29. package/dist/esm/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js.map +1 -1
  30. package/dist/esm/types/IViewport.d.ts +1 -0
  31. package/dist/umd/index.js +1 -1
  32. package/dist/umd/index.js.map +1 -1
  33. package/package.json +4 -4
@@ -3,5 +3,6 @@ import BaseVolumeViewport from './BaseVolumeViewport';
3
3
  declare class VolumeViewport3D extends BaseVolumeViewport {
4
4
  constructor(props: ViewportInput);
5
5
  resetCamera(resetPan?: boolean, resetZoom?: boolean, resetToCenter?: boolean): boolean;
6
+ getRotation: () => number;
6
7
  }
7
8
  export default VolumeViewport3D;
@@ -7,6 +7,7 @@ const BaseVolumeViewport_1 = __importDefault(require("./BaseVolumeViewport"));
7
7
  class VolumeViewport3D extends BaseVolumeViewport_1.default {
8
8
  constructor(props) {
9
9
  super(props);
10
+ this.getRotation = () => 0;
10
11
  const { parallelProjection } = this.options;
11
12
  const activeCamera = this.getVtkActiveCamera();
12
13
  if (parallelProjection != null) {
@@ -1 +1 @@
1
- {"version":3,"file":"VolumeViewport3D.js","sourceRoot":"","sources":["../../../src/RenderingEngine/VolumeViewport3D.ts"],"names":[],"mappings":";;;;;AACA,8EAAsD;AAUtD,MAAM,gBAAiB,SAAQ,4BAAkB;IAC/C,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;QAEb,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5C,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE/C,IAAI,kBAAkB,IAAI,IAAI,EAAE;YAC9B,YAAY,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;SACxD;IACH,CAAC;IAEM,WAAW,CAChB,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,IAAI,EAChB,aAAa,GAAG,IAAI;QAEpB,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;CACF;AAED,kBAAe,gBAAgB,CAAC"}
1
+ {"version":3,"file":"VolumeViewport3D.js","sourceRoot":"","sources":["../../../src/RenderingEngine/VolumeViewport3D.ts"],"names":[],"mappings":";;;;;AACA,8EAAsD;AAUtD,MAAM,gBAAiB,SAAQ,4BAAkB;IAC/C,YAAY,KAAoB;QAC9B,KAAK,CAAC,KAAK,CAAC,CAAC;QAqBf,gBAAW,GAAG,GAAW,EAAE,CAAC,CAAC,CAAC;QAnB5B,MAAM,EAAE,kBAAkB,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC;QAE5C,MAAM,YAAY,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAE/C,IAAI,kBAAkB,IAAI,IAAI,EAAE;YAC9B,YAAY,CAAC,qBAAqB,CAAC,kBAAkB,CAAC,CAAC;SACxD;IACH,CAAC;IAEM,WAAW,CAChB,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,IAAI,EAChB,aAAa,GAAG,IAAI;QAEpB,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;QACtD,IAAI,CAAC,gCAAgC,EAAE,CAAC;QACxC,OAAO;IACT,CAAC;CAGF;AAED,kBAAe,gBAAgB,CAAC"}
@@ -4,7 +4,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.newInstance = exports.extend = void 0;
7
- const gl_matrix_1 = require("gl-matrix");
8
7
  const macros_1 = __importDefault(require("@kitware/vtk.js/macros"));
9
8
  const VolumeMapper_1 = __importDefault(require("@kitware/vtk.js/Rendering/OpenGL/VolumeMapper"));
10
9
  const Constants_1 = require("@kitware/vtk.js/Rendering/OpenGL/Texture/Constants");
@@ -152,260 +151,15 @@ function vtkStreamingOpenGLVolumeMapper(publicAPI, model) {
152
151
  }
153
152
  model.VBOBuildTime.modified();
154
153
  };
155
- publicAPI.setCameraShaderParameters = (cellBO, ren, actor) => {
156
- const program = cellBO.getProgram();
157
- const cam = model.openGLCamera.getRenderable();
158
- const crange = cam.getClippingRange();
159
- program.setUniformf('camThick', crange[1] - crange[0]);
160
- program.setUniformf('camNear', crange[0]);
161
- program.setUniformf('camFar', crange[1]);
162
- const keyMats = model.openGLCamera.getKeyMatrices(ren);
163
- const actMats = model.openGLVolume.getKeyMatrices();
164
- gl_matrix_1.mat4.multiply(model.modelToView, keyMats.wcvc, actMats.mcwc);
165
- const bounds = model.currentInput.getBounds();
166
- const spc = model.currentInput.getSpacing();
167
- const dims = model.currentInput.getDimensions();
168
- const pos = new Float64Array(3);
169
- const dir = new Float64Array(3);
170
- let dcxmin = 1.0;
171
- let dcxmax = -1.0;
172
- let dcymin = 1.0;
173
- let dcymax = -1.0;
174
- for (let i = 0; i < 8; ++i) {
175
- gl_matrix_1.vec3.set(pos, bounds[i % 2], bounds[2 + (Math.floor(i / 2) % 2)], bounds[4 + Math.floor(i / 4)]);
176
- gl_matrix_1.vec3.transformMat4(pos, pos, model.modelToView);
177
- if (!cam.getParallelProjection()) {
178
- gl_matrix_1.vec3.normalize(dir, pos);
179
- const t = -crange[0] / pos[2];
180
- gl_matrix_1.vec3.scale(pos, dir, t);
181
- }
182
- gl_matrix_1.vec3.transformMat4(pos, pos, keyMats.vcpc);
183
- dcxmin = Math.min(pos[0], dcxmin);
184
- dcxmax = Math.max(pos[0], dcxmax);
185
- dcymin = Math.min(pos[1], dcymin);
186
- dcymax = Math.max(pos[1], dcymax);
187
- }
188
- program.setUniformf('dcxmin', dcxmin);
189
- program.setUniformf('dcxmax', dcxmax);
190
- program.setUniformf('dcymin', dcymin);
191
- program.setUniformf('dcymax', dcymax);
192
- if (program.isUniformUsed('cameraParallel')) {
193
- program.setUniformi('cameraParallel', cam.getParallelProjection());
194
- }
195
- const ext = model.currentInput.getSpatialExtent();
196
- const vsize = new Float64Array(3);
197
- gl_matrix_1.vec3.set(vsize, (ext[1] - ext[0]) * spc[0], (ext[3] - ext[2]) * spc[1], (ext[5] - ext[4]) * spc[2]);
198
- program.setUniform3f('vSpacing', spc[0], spc[1], spc[2]);
199
- gl_matrix_1.vec3.set(pos, ext[0], ext[2], ext[4]);
200
- model.currentInput.indexToWorldVec3(pos, pos);
201
- gl_matrix_1.vec3.transformMat4(pos, pos, model.modelToView);
202
- program.setUniform3f('vOriginVC', pos[0], pos[1], pos[2]);
203
- const i2wmat4 = model.currentInput.getIndexToWorld();
204
- gl_matrix_1.mat4.multiply(model.idxToView, model.modelToView, i2wmat4);
205
- gl_matrix_1.mat3.multiply(model.idxNormalMatrix, keyMats.normalMatrix, actMats.normalMatrix);
206
- gl_matrix_1.mat3.multiply(model.idxNormalMatrix, model.idxNormalMatrix, model.currentInput.getDirection());
207
- const maxSamples = gl_matrix_1.vec3.length(vsize) / model.renderable.getSampleDistance();
208
- if (maxSamples > model.renderable.getMaximumSamplesPerRay()) {
209
- vtkWarningMacro(`The number of steps required ${Math.ceil(maxSamples)} is larger than the
210
- specified maximum number of steps ${model.renderable.getMaximumSamplesPerRay()}.
211
- Please either change the
212
- volumeMapper sampleDistance or its maximum number of samples.`);
213
- }
214
- const vctoijk = new Float64Array(3);
215
- gl_matrix_1.vec3.set(vctoijk, 1.0, 1.0, 1.0);
216
- gl_matrix_1.vec3.divide(vctoijk, vctoijk, vsize);
217
- program.setUniform3f('vVCToIJK', vctoijk[0], vctoijk[1], vctoijk[2]);
218
- program.setUniform3i('volumeDimensions', dims[0], dims[1], dims[2]);
219
- if (!model._openGLRenderWindow.getWebgl2()) {
220
- const volInfo = model.scalarTexture.getVolumeInfo();
221
- program.setUniformf('texWidth', model.scalarTexture.getWidth());
222
- program.setUniformf('texHeight', model.scalarTexture.getHeight());
223
- program.setUniformi('xreps', volInfo.xreps);
224
- program.setUniformi('xstride', volInfo.xstride);
225
- program.setUniformi('ystride', volInfo.ystride);
226
- }
227
- const normal = new Float64Array(3);
228
- const pos2 = new Float64Array(3);
229
- for (let i = 0; i < 6; ++i) {
230
- switch (i) {
231
- case 1:
232
- gl_matrix_1.vec3.set(normal, -1.0, 0.0, 0.0);
233
- gl_matrix_1.vec3.set(pos2, ext[0], ext[2], ext[4]);
234
- break;
235
- case 2:
236
- gl_matrix_1.vec3.set(normal, 0.0, 1.0, 0.0);
237
- gl_matrix_1.vec3.set(pos2, ext[1], ext[3], ext[5]);
238
- break;
239
- case 3:
240
- gl_matrix_1.vec3.set(normal, 0.0, -1.0, 0.0);
241
- gl_matrix_1.vec3.set(pos2, ext[0], ext[2], ext[4]);
242
- break;
243
- case 4:
244
- gl_matrix_1.vec3.set(normal, 0.0, 0.0, 1.0);
245
- gl_matrix_1.vec3.set(pos2, ext[1], ext[3], ext[5]);
246
- break;
247
- case 5:
248
- gl_matrix_1.vec3.set(normal, 0.0, 0.0, -1.0);
249
- gl_matrix_1.vec3.set(pos2, ext[0], ext[2], ext[4]);
250
- break;
251
- case 0:
252
- default:
253
- gl_matrix_1.vec3.set(normal, 1.0, 0.0, 0.0);
254
- gl_matrix_1.vec3.set(pos2, ext[1], ext[3], ext[5]);
255
- break;
256
- }
257
- gl_matrix_1.vec3.transformMat3(normal, normal, model.idxNormalMatrix);
258
- gl_matrix_1.vec3.transformMat4(pos2, pos2, model.idxToView);
259
- const dist = -1.0 * gl_matrix_1.vec3.dot(pos2, normal);
260
- program.setUniform3f(`vPlaneNormal${i}`, normal[0], normal[1], normal[2]);
261
- program.setUniformf(`vPlaneDistance${i}`, dist);
262
- if (actor.getProperty().getUseLabelOutline()) {
263
- const image = model.currentInput;
264
- const worldToIndex = image.getWorldToIndex();
265
- program.setUniformMatrix('vWCtoIDX', worldToIndex);
266
- const camera = ren.getActiveCamera();
267
- const [cRange0, cRange1] = camera.getClippingRange();
268
- const distance = camera.getDistance();
269
- camera.setClippingRange(distance, distance + 0.1);
270
- const labelOutlineKeyMats = model.openGLCamera.getKeyMatrices(ren);
271
- gl_matrix_1.mat4.invert(model.projectionToWorld, labelOutlineKeyMats.wcpc);
272
- camera.setClippingRange(cRange0, cRange1);
273
- model.openGLCamera.getKeyMatrices(ren);
274
- program.setUniformMatrix('PCWCMatrix', model.projectionToWorld);
275
- const size = publicAPI.getRenderTargetSize();
276
- program.setUniformf('vpWidth', size[0]);
277
- program.setUniformf('vpHeight', size[1]);
278
- const offset = publicAPI.getRenderTargetOffset();
279
- program.setUniformf('vpOffsetX', offset[0] / size[0]);
280
- program.setUniformf('vpOffsetY', offset[1] / size[1]);
281
- }
282
- }
283
- gl_matrix_1.mat4.invert(model.projectionToView, keyMats.vcpc);
284
- program.setUniformMatrix('PCVCMatrix', model.projectionToView);
285
- switch (model.lastLightComplexity) {
286
- default:
287
- case 0:
288
- break;
289
- case 1:
290
- case 2:
291
- case 3: {
292
- let lightNum = 0;
293
- const lightColor = [];
294
- ren.getLights().forEach((light) => {
295
- const status = light.getSwitch();
296
- if (status > 0) {
297
- const dColor = light.getColor();
298
- const intensity = light.getIntensity();
299
- lightColor[0] = dColor[0] * intensity;
300
- lightColor[1] = dColor[1] * intensity;
301
- lightColor[2] = dColor[2] * intensity;
302
- program.setUniform3fArray(`lightColor${lightNum}`, lightColor);
303
- const ldir = light.getDirection();
304
- gl_matrix_1.vec3.set(normal, ldir[0], ldir[1], ldir[2]);
305
- gl_matrix_1.vec3.transformMat3(normal, normal, keyMats.normalMatrix);
306
- program.setUniform3f(`lightDirectionVC${lightNum}`, normal[0], normal[1], normal[2]);
307
- const halfAngle = [
308
- -0.5 * normal[0],
309
- -0.5 * normal[1],
310
- -0.5 * (normal[2] - 1.0),
311
- ];
312
- program.setUniform3fArray(`lightHalfAngleVC${lightNum}`, halfAngle);
313
- lightNum++;
314
- }
315
- });
316
- }
317
- }
318
- let lightNum = 0;
319
- const lightColor = [];
320
- const lightDir = [];
321
- const halfAngle = [];
322
- ren.getLights().forEach((light) => {
323
- const status = light.getSwitch();
324
- if (status > 0) {
325
- const dColor = light.getColor();
326
- const intensity = light.getIntensity();
327
- lightColor[0 + lightNum * 3] = dColor[0] * intensity;
328
- lightColor[1 + lightNum * 3] = dColor[1] * intensity;
329
- lightColor[2 + lightNum * 3] = dColor[2] * intensity;
330
- const ldir = light.getDirection();
331
- gl_matrix_1.vec3.set(normal, ldir[0], ldir[1], ldir[2]);
332
- gl_matrix_1.vec3.transformMat3(normal, normal, keyMats.normalMatrix);
333
- gl_matrix_1.vec3.normalize(normal, normal);
334
- lightDir[0 + lightNum * 3] = normal[0];
335
- lightDir[1 + lightNum * 3] = normal[1];
336
- lightDir[2 + lightNum * 3] = normal[2];
337
- halfAngle[0 + lightNum * 3] = -0.5 * normal[0];
338
- halfAngle[1 + lightNum * 3] = -0.5 * normal[1];
339
- halfAngle[2 + lightNum * 3] = -0.5 * (normal[2] - 1.0);
340
- lightNum++;
341
- }
342
- });
343
- program.setUniformi('twoSidedLighting', ren.getTwoSidedLighting());
344
- program.setUniformi('lightNum', lightNum);
345
- program.setUniform3fv('lightColor', lightColor);
346
- program.setUniform3fv('lightDirectionVC', lightDir);
347
- program.setUniform3fv('lightHalfAngleVC', halfAngle);
348
- if (model.lastLightComplexity === 3) {
349
- lightNum = 0;
350
- const lightPositionVC = [];
351
- const lightAttenuation = [];
352
- const lightConeAngle = [];
353
- const lightExponent = [];
354
- const lightPositional = [];
355
- ren.getLights().forEach((light) => {
356
- const status = light.getSwitch();
357
- if (status > 0) {
358
- const attenuation = light.getAttenuationValues();
359
- lightAttenuation[0 + lightNum * 3] = attenuation[0];
360
- lightAttenuation[1 + lightNum * 3] = attenuation[1];
361
- lightAttenuation[2 + lightNum * 3] = attenuation[2];
362
- lightExponent[lightNum] = light.getExponent();
363
- lightConeAngle[lightNum] = light.getConeAngle();
364
- lightPositional[lightNum] = light.getPositional();
365
- const lp = light.getTransformedPosition();
366
- gl_matrix_1.vec3.transformMat4(lp, lp, model.modelToView);
367
- lightPositionVC[0 + lightNum * 3] = lp[0];
368
- lightPositionVC[1 + lightNum * 3] = lp[1];
369
- lightPositionVC[2 + lightNum * 3] = lp[2];
370
- lightNum += 1;
371
- }
372
- });
373
- program.setUniform3fv('lightPositionVC', lightPositionVC);
374
- program.setUniform3fv('lightAttenuation', lightAttenuation);
375
- program.setUniformfv('lightConeAngle', lightConeAngle);
376
- program.setUniformfv('lightExponent', lightExponent);
377
- program.setUniformiv('lightPositional', lightPositional);
378
- }
379
- if (model.renderable.getVolumetricScatteringBlending() > 0.0) {
380
- program.setUniformf('giReach', model.renderable.getGlobalIlluminationReach());
381
- program.setUniformf('volumetricScatteringBlending', model.renderable.getVolumetricScatteringBlending());
382
- program.setUniformf('volumeShadowSamplingDistFactor', model.renderable.getVolumeShadowSamplingDistFactor());
383
- program.setUniformf('anisotropy', model.renderable.getAnisotropy());
384
- program.setUniformf('anisotropy2', Math.pow(model.renderable.getAnisotropy(), 2.0));
385
- }
386
- if (model.renderable.getVolumetricScatteringBlending() === 0.0 &&
387
- model.renderable.getLocalAmbientOcclusion() &&
388
- actor.getProperty().getAmbient() > 0.0) {
389
- const ks = model.renderable.getLAOKernelSize();
390
- program.setUniformi('kernelSize', ks);
391
- const kernelSample = [];
392
- for (let i = 0; i < ks; i++) {
393
- kernelSample[i * 2] = Math.random() * 0.5;
394
- kernelSample[i * 2 + 1] = Math.random() * 0.5;
395
- }
396
- program.setUniform2fv('kernelSample', kernelSample);
397
- program.setUniformi('kernelRadius', model.renderable.getLAOKernelRadius());
398
- }
399
- };
400
154
  publicAPI.getRenderTargetSize = () => {
401
155
  if (model._useSmallViewport) {
402
156
  return [model._smallViewportWidth, model._smallViewportHeight];
403
157
  }
404
- const { usize, vsize } = model.openGLRenderer.getTiledSizeAndOrigin();
158
+ const { usize, vsize } = model._openGLRenderer.getTiledSizeAndOrigin();
405
159
  return [usize, vsize];
406
160
  };
407
161
  publicAPI.getRenderTargetOffset = () => {
408
- const { lowerLeftU, lowerLeftV } = model.openGLRenderer.getTiledSizeAndOrigin();
162
+ const { lowerLeftU, lowerLeftV } = model._openGLRenderer.getTiledSizeAndOrigin();
409
163
  return [lowerLeftU, lowerLeftV];
410
164
  };
411
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vtkStreamingOpenGLVolumeMapper.js","sourceRoot":"","sources":["../../../../src/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vtkStreamingOpenGLVolumeMapper.js","sourceRoot":"","sources":["../../../../src/RenderingEngine/vtkClasses/vtkStreamingOpenGLVolumeMapper.js"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ interface IViewport {
19
19
  options: ViewportInputOptions;
20
20
  suppressEvents: boolean;
21
21
  isDisabled: boolean;
22
+ getRotation: () => number;
22
23
  getFrameOfReferenceUID: () => string;
23
24
  canvasToWorld: (canvasPos: Point2) => Point3;
24
25
  worldToCanvas: (worldPos: Point3) => Point2;
@@ -14,7 +14,6 @@ declare class StackViewport extends Viewport implements IStackViewport {
14
14
  private cameraFocalPointOnRender;
15
15
  private stackInvalidated;
16
16
  private voiApplied;
17
- private rotationCache;
18
17
  private _publishCalibratedEvent;
19
18
  private _calibrationEvent;
20
19
  private _cpuFallbackEnabledElement?;
@@ -48,6 +47,9 @@ declare class StackViewport extends Viewport implements IStackViewport {
48
47
  private setCameraCPU;
49
48
  private setFlipCPU;
50
49
  private setVOI;
50
+ getRotation: () => number;
51
+ private getRotationCPU;
52
+ private getRotationGPU;
51
53
  private setRotation;
52
54
  private setInterpolationType;
53
55
  private setInvertColor;
@@ -35,7 +35,6 @@ class StackViewport extends Viewport {
35
35
  this.invert = false;
36
36
  this.stackInvalidated = false;
37
37
  this.voiApplied = false;
38
- this.rotationCache = 0;
39
38
  this._publishCalibratedEvent = false;
40
39
  this.resize = () => {
41
40
  if (this.useCPURendering) {
@@ -71,11 +70,35 @@ class StackViewport extends Viewport {
71
70
  this.getProperties = () => {
72
71
  return {
73
72
  voiRange: this.voiRange,
74
- rotation: this.rotationCache,
73
+ rotation: this.getRotation(),
75
74
  interpolationType: this.interpolationType,
76
75
  invert: this.invert,
77
76
  };
78
77
  };
78
+ this.getRotation = () => {
79
+ if (this.useCPURendering) {
80
+ return this.getRotationCPU();
81
+ }
82
+ else {
83
+ return this.getRotationGPU();
84
+ }
85
+ };
86
+ this.getRotationCPU = () => {
87
+ const { viewport } = this._cpuFallbackEnabledElement;
88
+ return viewport.rotation;
89
+ };
90
+ this.getRotationGPU = () => {
91
+ const { viewUp: currentViewUp, viewPlaneNormal, flipVertical, } = this.getCamera();
92
+ const initialViewUp = flipVertical
93
+ ? vec3.negate(vec3.create(), this.initialViewUp)
94
+ : this.initialViewUp;
95
+ const initialToCurrentViewUpAngle = (vec3.angle(initialViewUp, currentViewUp) * 180) / Math.PI;
96
+ const initialToCurrentViewUpCross = vec3.cross(vec3.create(), initialViewUp, currentViewUp);
97
+ const normalDot = vec3.dot(initialToCurrentViewUpCross, viewPlaneNormal);
98
+ return normalDot >= 0
99
+ ? initialToCurrentViewUpAngle
100
+ : (360 - initialToCurrentViewUpAngle) % 360;
101
+ };
79
102
  this.canvasToWorld = (canvasPos) => {
80
103
  if (this.useCPURendering) {
81
104
  return this.canvasToWorldCPU(canvasPos);
@@ -208,7 +231,7 @@ class StackViewport extends Viewport {
208
231
  canvas: this.canvas,
209
232
  renderingTools: {},
210
233
  transform: new Transform(),
211
- viewport: {},
234
+ viewport: { rotation: 0 },
212
235
  };
213
236
  }
214
237
  else {
@@ -399,8 +422,8 @@ class StackViewport extends Viewport {
399
422
  this.setInterpolationType(interpolationType);
400
423
  }
401
424
  if (typeof rotation !== 'undefined') {
402
- if (this.rotationCache !== rotation) {
403
- this.setRotation(this.rotationCache, rotation);
425
+ if (this.getRotation() !== rotation) {
426
+ this.setRotation(rotation);
404
427
  }
405
428
  }
406
429
  }
@@ -442,7 +465,6 @@ class StackViewport extends Viewport {
442
465
  const suppressEvents = true;
443
466
  this.setProperties({
444
467
  voiRange: this.voiRange,
445
- rotation: this.rotation,
446
468
  interpolationType: this.interpolationType,
447
469
  invert: this.invert,
448
470
  }, suppressEvents);
@@ -452,8 +474,8 @@ class StackViewport extends Viewport {
452
474
  const { direction } = metadata;
453
475
  const viewPlaneNormal = direction.slice(6, 9).map((x) => -x);
454
476
  let viewUp = direction.slice(3, 6).map((x) => -x);
455
- if (this.rotation) {
456
- const rotationMatrix = mat4.fromRotation(mat4.create(), (this.rotation * Math.PI) / 180, viewPlaneNormal);
477
+ if (viewport.rotation) {
478
+ const rotationMatrix = mat4.fromRotation(mat4.create(), (viewport.rotation * Math.PI) / 180, viewPlaneNormal);
457
479
  viewUp = vec3.transformMat4(vec3.create(), viewUp, rotationMatrix);
458
480
  }
459
481
  const canvasCenter = [
@@ -517,7 +539,7 @@ class StackViewport extends Viewport {
517
539
  element: this.element,
518
540
  viewportId: this.id,
519
541
  renderingEngineId: this.renderingEngineId,
520
- rotation: this.rotation,
542
+ rotation: this.getRotation(),
521
543
  };
522
544
  triggerEvent(this.element, Events.CAMERA_MODIFIED, eventDetail);
523
545
  }
@@ -539,13 +561,13 @@ class StackViewport extends Viewport {
539
561
  }
540
562
  this.setVOIGPU(voiRange, suppressEvents);
541
563
  }
542
- setRotation(rotationCache, rotation) {
564
+ setRotation(rotation) {
543
565
  const previousCamera = this.getCamera();
544
566
  if (this.useCPURendering) {
545
- this.setRotationCPU(rotationCache, rotation);
567
+ this.setRotationCPU(rotation);
546
568
  }
547
569
  else {
548
- this.setRotationGPU(rotationCache, rotation);
570
+ this.setRotationGPU(rotation);
549
571
  }
550
572
  const camera = this.getCamera();
551
573
  const eventDetail = {
@@ -554,7 +576,7 @@ class StackViewport extends Viewport {
554
576
  element: this.element,
555
577
  viewportId: this.id,
556
578
  renderingEngineId: this.renderingEngineId,
557
- rotation: this.rotation,
579
+ rotation,
558
580
  };
559
581
  triggerEvent(this.element, Events.CAMERA_MODIFIED, eventDetail);
560
582
  }
@@ -572,17 +594,19 @@ class StackViewport extends Viewport {
572
594
  }
573
595
  this.setInvertColorGPU(invert);
574
596
  }
575
- setRotationCPU(rotationCache, rotation) {
597
+ setRotationCPU(rotation) {
576
598
  const { viewport } = this._cpuFallbackEnabledElement;
577
599
  viewport.rotation = rotation;
578
- this.rotationCache = rotation;
579
- this.rotation = rotation;
580
600
  }
581
- setRotationGPU(rotationCache, rotation) {
582
- this.getVtkActiveCamera().roll(rotationCache);
601
+ setRotationGPU(rotation) {
602
+ const { flipVertical } = this.getCamera();
603
+ const initialViewUp = flipVertical
604
+ ? vec3.negate(vec3.create(), this.initialViewUp)
605
+ : this.initialViewUp;
606
+ this.setCamera({
607
+ viewUp: initialViewUp,
608
+ });
583
609
  this.getVtkActiveCamera().roll(-rotation);
584
- this.rotationCache = rotation;
585
- this.rotation = rotation;
586
610
  }
587
611
  setInterpolationTypeGPU(interpolationType) {
588
612
  const defaultActor = this.getDefaultActor();
@@ -810,7 +834,6 @@ class StackViewport extends Viewport {
810
834
  this.currentImageIdIndex = currentImageIdIndex;
811
835
  this.targetImageIdIndex = currentImageIdIndex;
812
836
  this.stackInvalidated = true;
813
- this.rotationCache = 0;
814
837
  this.flipVertical = false;
815
838
  this.flipHorizontal = false;
816
839
  this.voiApplied = false;
@@ -1026,18 +1049,16 @@ class StackViewport extends Viewport {
1026
1049
  this._updateVTKImageDataFromCornerstoneImage(image);
1027
1050
  const cameraProps = this.getCamera();
1028
1051
  const panCache = vec3.subtract(vec3.create(), this.cameraFocalPointOnRender, cameraProps.focalPoint);
1029
- const rotationCache = this.rotationCache;
1030
1052
  this.resetCameraNoEvent();
1031
- this.setRotation(rotationCache, rotationCache);
1032
1053
  this.setCameraNoEvent({
1033
1054
  flipHorizontal: previousCameraProps.flipHorizontal,
1034
1055
  flipVertical: previousCameraProps.flipVertical,
1056
+ viewUp: previousCameraProps.viewUp,
1035
1057
  });
1036
1058
  const { focalPoint } = this.getCamera();
1037
1059
  this.cameraFocalPointOnRender = focalPoint;
1038
1060
  activeCamera.setFreezeFocalPoint(true);
1039
1061
  this._restoreCameraProps(cameraProps, previousCameraProps, panCache);
1040
- this.rotationCache = 0;
1041
1062
  this._setPropertiesFromCache();
1042
1063
  return;
1043
1064
  }
@@ -1115,8 +1136,6 @@ class StackViewport extends Viewport {
1115
1136
  else {
1116
1137
  this.resetCameraGPU(resetPan, resetZoom);
1117
1138
  }
1118
- this.rotation = 0;
1119
- this.rotationCache = 0;
1120
1139
  return true;
1121
1140
  }
1122
1141
  resetCameraCPU(resetPan, resetZoom) {