@cornerstonejs/tools 1.69.0 → 1.70.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 (75) hide show
  1. package/dist/cjs/eventListeners/keyboard/keyDownListener.js +1 -1
  2. package/dist/cjs/eventListeners/keyboard/keyDownListener.js.map +1 -1
  3. package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.js +1 -1
  4. package/dist/cjs/stateManagement/segmentation/SegmentationStateManager.js.map +1 -1
  5. package/dist/cjs/stateManagement/segmentation/addSegmentations.js.map +1 -1
  6. package/dist/cjs/store/ToolGroupManager/ToolGroup.js +1 -1
  7. package/dist/cjs/store/ToolGroupManager/ToolGroup.js.map +1 -1
  8. package/dist/cjs/store/state.js +2 -2
  9. package/dist/cjs/store/state.js.map +1 -1
  10. package/dist/cjs/synchronizers/callbacks/presentationViewSyncCallback.d.ts +2 -0
  11. package/dist/cjs/synchronizers/callbacks/presentationViewSyncCallback.js +16 -0
  12. package/dist/cjs/synchronizers/callbacks/presentationViewSyncCallback.js.map +1 -0
  13. package/dist/cjs/synchronizers/index.d.ts +2 -1
  14. package/dist/cjs/synchronizers/index.js +3 -1
  15. package/dist/cjs/synchronizers/index.js.map +1 -1
  16. package/dist/cjs/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts +3 -0
  17. package/dist/cjs/synchronizers/synchronizers/createPresentationViewSynchronizer.js +15 -0
  18. package/dist/cjs/synchronizers/synchronizers/createPresentationViewSynchronizer.js.map +1 -0
  19. package/dist/cjs/synchronizers/synchronizers/index.d.ts +2 -1
  20. package/dist/cjs/synchronizers/synchronizers/index.js +3 -1
  21. package/dist/cjs/synchronizers/synchronizers/index.js.map +1 -1
  22. package/dist/cjs/utilities/segmentation/createLabelmapVolumeForViewport.d.ts +8 -8
  23. package/dist/cjs/utilities/segmentation/createLabelmapVolumeForViewport.js +5 -2
  24. package/dist/cjs/utilities/segmentation/createLabelmapVolumeForViewport.js.map +1 -1
  25. package/dist/cjs/utilities/triggerAnnotationRender.js +0 -1
  26. package/dist/cjs/utilities/triggerAnnotationRender.js.map +1 -1
  27. package/dist/esm/eventListeners/keyboard/keyDownListener.js +2 -2
  28. package/dist/esm/eventListeners/keyboard/keyDownListener.js.map +1 -1
  29. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js +1 -1
  30. package/dist/esm/stateManagement/segmentation/SegmentationStateManager.js.map +1 -1
  31. package/dist/esm/stateManagement/segmentation/addSegmentations.js +2 -2
  32. package/dist/esm/stateManagement/segmentation/addSegmentations.js.map +1 -1
  33. package/dist/esm/store/ToolGroupManager/ToolGroup.js +1 -1
  34. package/dist/esm/store/ToolGroupManager/ToolGroup.js.map +1 -1
  35. package/dist/esm/store/state.js +10 -2
  36. package/dist/esm/store/state.js.map +1 -1
  37. package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.js +13 -0
  38. package/dist/esm/synchronizers/callbacks/presentationViewSyncCallback.js.map +1 -0
  39. package/dist/esm/synchronizers/index.js +2 -1
  40. package/dist/esm/synchronizers/index.js.map +1 -1
  41. package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.js +9 -0
  42. package/dist/esm/synchronizers/synchronizers/createPresentationViewSynchronizer.js.map +1 -0
  43. package/dist/esm/synchronizers/synchronizers/index.js +2 -1
  44. package/dist/esm/synchronizers/synchronizers/index.js.map +1 -1
  45. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js +2 -2
  46. package/dist/esm/utilities/segmentation/createLabelmapVolumeForViewport.js.map +1 -1
  47. package/dist/esm/utilities/triggerAnnotationRender.js +0 -1
  48. package/dist/esm/utilities/triggerAnnotationRender.js.map +1 -1
  49. package/dist/types/store/state.d.ts.map +1 -1
  50. package/dist/types/synchronizers/callbacks/presentationViewSyncCallback.d.ts +3 -0
  51. package/dist/types/synchronizers/callbacks/presentationViewSyncCallback.d.ts.map +1 -0
  52. package/dist/types/synchronizers/index.d.ts +2 -1
  53. package/dist/types/synchronizers/index.d.ts.map +1 -1
  54. package/dist/types/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts +4 -0
  55. package/dist/types/synchronizers/synchronizers/createPresentationViewSynchronizer.d.ts.map +1 -0
  56. package/dist/types/synchronizers/synchronizers/index.d.ts +2 -1
  57. package/dist/types/synchronizers/synchronizers/index.d.ts.map +1 -1
  58. package/dist/types/utilities/segmentation/createLabelmapVolumeForViewport.d.ts +8 -8
  59. package/dist/types/utilities/segmentation/createLabelmapVolumeForViewport.d.ts.map +1 -1
  60. package/dist/types/utilities/triggerAnnotationRender.d.ts.map +1 -1
  61. package/dist/umd/index.js +1 -1
  62. package/dist/umd/index.js.map +1 -1
  63. package/package.json +3 -3
  64. package/src/eventListeners/keyboard/keyDownListener.ts +2 -2
  65. package/src/stateManagement/segmentation/SegmentationStateManager.ts +1 -1
  66. package/src/stateManagement/segmentation/addSegmentations.ts +2 -2
  67. package/src/store/ToolGroupManager/ToolGroup.ts +1 -1
  68. package/src/store/state.ts +10 -3
  69. package/src/synchronizers/callbacks/presentationViewSyncCallback.ts +36 -0
  70. package/src/synchronizers/callbacks/voiSyncCallback.ts +1 -1
  71. package/src/synchronizers/index.ts +2 -0
  72. package/src/synchronizers/synchronizers/createPresentationViewSynchronizer.ts +29 -0
  73. package/src/synchronizers/synchronizers/index.ts +2 -0
  74. package/src/utilities/segmentation/createLabelmapVolumeForViewport.ts +10 -10
  75. package/src/utilities/triggerAnnotationRender.ts +3 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/tools",
3
- "version": "1.69.0",
3
+ "version": "1.70.1",
4
4
  "description": "Cornerstone3D Tools",
5
5
  "main": "src/index.ts",
6
6
  "types": "dist/types/index.d.ts",
@@ -29,7 +29,7 @@
29
29
  "webpack:watch": "webpack --mode development --progress --watch --config ./.webpack/webpack.dev.js"
30
30
  },
31
31
  "dependencies": {
32
- "@cornerstonejs/core": "^1.69.0",
32
+ "@cornerstonejs/core": "^1.70.1",
33
33
  "@icr/polyseg-wasm": "0.4.0",
34
34
  "@types/offscreencanvas": "2019.7.3",
35
35
  "comlink": "^4.4.1",
@@ -59,5 +59,5 @@
59
59
  "type": "individual",
60
60
  "url": "https://ohif.org/donate"
61
61
  },
62
- "gitHead": "ac8dc9249f6c25fc8de8c1f716af606a9301dd54"
62
+ "gitHead": "374a9dd49081ea9f87c8af202ca07e2e10a63170"
63
63
  }
@@ -1,5 +1,5 @@
1
- import _cloneDeep from 'lodash.clonedeep';
2
1
  import { getEnabledElement, triggerEvent } from '@cornerstonejs/core';
2
+ import cloneDeep from 'lodash.clonedeep';
3
3
  import Events from '../../enums/Events';
4
4
  import { KeyDownEventDetail, KeyUpEventDetail } from '../../types/EventTypes';
5
5
 
@@ -97,7 +97,7 @@ function _onKeyUp(evt: KeyboardEvent): void {
97
97
  state.element.addEventListener('keydown', keyListener);
98
98
 
99
99
  // Restore `state` to `defaultState`
100
- state = _cloneDeep(defaultState);
100
+ state = cloneDeep(defaultState);
101
101
  triggerEvent(eventDetail.element, Events.KEY_UP, eventDetail);
102
102
  }
103
103
 
@@ -450,7 +450,7 @@ export default class SegmentationStateManager {
450
450
  console.warn('Color LUT table already exists, overwriting');
451
451
  }
452
452
 
453
- this.state.colorLUT[lutIndex] = structuredClone(colorLUT);
453
+ this.state.colorLUT[lutIndex] = cloneDeep(colorLUT);
454
454
  }
455
455
 
456
456
  /**
@@ -1,4 +1,4 @@
1
- import _cloneDeep from 'lodash.clonedeep';
1
+ import cloneDeep from 'lodash.clonedeep';
2
2
  import { SegmentationPublicInput } from '../../types/SegmentationStateTypes';
3
3
  import { validateSegmentationInput } from './helpers';
4
4
  import { addSegmentation as addSegmentationToState } from './segmentationState';
@@ -18,7 +18,7 @@ function addSegmentations(
18
18
  validateSegmentationInput(segmentationInputArray);
19
19
 
20
20
  segmentationInputArray.map((segInput) => {
21
- const segmentationInput = _cloneDeep(segInput);
21
+ const segmentationInput = cloneDeep(segInput);
22
22
 
23
23
  addSegmentationToState(segmentationInput);
24
24
  });
@@ -1,6 +1,6 @@
1
1
  import { MouseBindings, ToolModes } from '../../enums';
2
- import cloneDeep from 'lodash.clonedeep';
3
2
  import get from 'lodash.get';
3
+ import cloneDeep from 'lodash.clonedeep';
4
4
  import {
5
5
  triggerEvent,
6
6
  eventTarget,
@@ -1,8 +1,7 @@
1
- import _cloneDeep from 'lodash.clonedeep';
2
-
3
1
  import { IToolGroup, IToolClassReference } from '../types';
4
2
  import Synchronizer from './SynchronizerManager/Synchronizer';
5
3
  import svgNodeCache, { resetSvgNodeCache } from './svgNodeCache';
4
+ import cloneDeep from 'lodash.clonedeep';
6
5
 
7
6
  interface ICornerstoneTools3dState {
8
7
  isInteractingWithTool: boolean;
@@ -46,7 +45,15 @@ let state: ICornerstoneTools3dState = {
46
45
 
47
46
  function resetCornerstoneToolsState(): void {
48
47
  resetSvgNodeCache();
49
- state = _cloneDeep(defaultState);
48
+ state = {
49
+ ...cloneDeep({
50
+ ...defaultState,
51
+ svgNodeCache: {},
52
+ }),
53
+ svgNodeCache: {
54
+ ...defaultState.svgNodeCache,
55
+ },
56
+ };
50
57
  }
51
58
 
52
59
  export {
@@ -0,0 +1,36 @@
1
+ import { getRenderingEngine, Types } from '@cornerstonejs/core';
2
+
3
+ /**
4
+ * Synchronizer callback to synchronize the camera. Synchronization
5
+ *
6
+ * targetViewport.options.syncZoom set to false to not sync the zoom
7
+ * targetViewport.options.syncPan set to false to not sync the pan
8
+
9
+ * @param synchronizerInstance - The Instance of the Synchronizer
10
+ * @param sourceViewport - The list of IDs defining the source viewport.
11
+ * @param targetViewport - The list of IDs defining the target viewport, different
12
+ * from sourceViewport
13
+ */
14
+ export default function presentationViewSyncCallback(
15
+ _synchronizerInstance,
16
+ sourceViewport: Types.IViewportId,
17
+ targetViewport: Types.IViewportId,
18
+ _sourceEvent,
19
+ options?: Types.ViewPresentationSelector
20
+ ): void {
21
+ const renderingEngine = getRenderingEngine(targetViewport.renderingEngineId);
22
+ if (!renderingEngine) {
23
+ throw new Error(
24
+ `No RenderingEngine for Id: ${targetViewport.renderingEngineId}`
25
+ );
26
+ }
27
+
28
+ const tViewport = renderingEngine.getViewport(targetViewport.viewportId);
29
+ const sViewport = renderingEngine.getViewport(sourceViewport.viewportId);
30
+
31
+ const presentationView = sViewport.getViewPresentation(options);
32
+
33
+ tViewport.setView(null, presentationView);
34
+
35
+ tViewport.render();
36
+ }
@@ -60,4 +60,4 @@ export default function voiSyncCallback(
60
60
  }
61
61
 
62
62
  tViewport.render();
63
- }
63
+ }
@@ -1,4 +1,5 @@
1
1
  import createCameraPositionSynchronizer from './synchronizers/createCameraPositionSynchronizer';
2
+ import createPresentationViewSynchronizer from './synchronizers/createPresentationViewSynchronizer';
2
3
  import createVOISynchronizer from './synchronizers/createVOISynchronizer';
3
4
  import createZoomPanSynchronizer from './synchronizers/createZoomPanSynchronizer';
4
5
  import createImageSliceSynchronizer from './synchronizers/createImageSliceSynchronizer';
@@ -9,6 +10,7 @@ const createStackImageSynchronizer = createImageSliceSynchronizer;
9
10
 
10
11
  export {
11
12
  createCameraPositionSynchronizer,
13
+ createPresentationViewSynchronizer,
12
14
  createVOISynchronizer,
13
15
  createZoomPanSynchronizer,
14
16
  createImageSliceSynchronizer,
@@ -0,0 +1,29 @@
1
+ import { Enums } from '@cornerstonejs/core';
2
+ import type { Types } from '@cornerstonejs/core';
3
+ import { createSynchronizer } from '../../store/SynchronizerManager';
4
+ import presentationViewSyncCallback from '../callbacks/presentationViewSyncCallback';
5
+ import Synchronizer from '../../store/SynchronizerManager/Synchronizer';
6
+
7
+ const { CAMERA_MODIFIED } = Enums.Events;
8
+
9
+ /**
10
+ * A helper that creates a new `Synchronizer` which listens to the `CAMERA_MODIFIED`
11
+ * rendering event and calls the `cameraSyncCallback` based on presentation view
12
+ * values and not based on absolute camera positions.
13
+ *
14
+ * @param synchronizerName - The name of the synchronizer.
15
+ * @returns A new `Synchronizer` instance.
16
+ */
17
+ export default function createPresentationViewSynchronizer(
18
+ synchronizerName: string,
19
+ options?: Types.ViewPresentation
20
+ ): Synchronizer {
21
+ const presentationView = createSynchronizer(
22
+ synchronizerName,
23
+ CAMERA_MODIFIED,
24
+ presentationViewSyncCallback,
25
+ options
26
+ );
27
+
28
+ return presentationView;
29
+ }
@@ -1,4 +1,5 @@
1
1
  import createCameraPositionSynchronizer from './createCameraPositionSynchronizer';
2
+ import createPresentationViewSynchronizer from './createPresentationViewSynchronizer';
2
3
  import createVOISynchronizer from './createVOISynchronizer';
3
4
  import createZoomPanSynchronizer from './createZoomPanSynchronizer';
4
5
  import createImageSliceSynchronizer from './createImageSliceSynchronizer';
@@ -7,6 +8,7 @@ import createImageSliceSynchronizer from './createImageSliceSynchronizer';
7
8
  const createStackImageSynchronizer = createImageSliceSynchronizer;
8
9
  export {
9
10
  createCameraPositionSynchronizer,
11
+ createPresentationViewSynchronizer,
10
12
  createVOISynchronizer,
11
13
  createZoomPanSynchronizer,
12
14
  createImageSliceSynchronizer,
@@ -1,4 +1,4 @@
1
- import { _cloneDeep } from 'lodash.clonedeep';
1
+ import cloneDeep from 'lodash.clonedeep';
2
2
  import {
3
3
  getEnabledElementByIds,
4
4
  volumeLoader,
@@ -23,16 +23,16 @@ export default async function createLabelmapVolumeForViewport(input: {
23
23
  renderingEngineId: string;
24
24
  segmentationId?: string;
25
25
  options?: {
26
- volumeId?: string;
27
- scalarData?: Float32Array | Uint8Array | Uint16Array | Int16Array;
28
- targetBuffer?: {
26
+ volumeId: string;
27
+ scalarData: Float32Array | Uint8Array | Uint16Array | Int16Array;
28
+ targetBuffer: {
29
29
  type: 'Float32Array' | 'Uint8Array' | 'Uint16Array' | 'Int8Array';
30
30
  };
31
- metadata?: any;
32
- dimensions?: Types.Point3;
33
- spacing?: Types.Point3;
34
- origin?: Types.Point3;
35
- direction?: Float32Array;
31
+ metadata: Types.Metadata;
32
+ dimensions: Types.Point3;
33
+ spacing: Types.Point3;
34
+ origin: Types.Point3;
35
+ direction: Types.Mat3;
36
36
  };
37
37
  }): Promise<string> {
38
38
  const { viewportId, renderingEngineId, options } = input;
@@ -60,7 +60,7 @@ export default async function createLabelmapVolumeForViewport(input: {
60
60
  if (options) {
61
61
  // create a new labelmap with its own properties
62
62
  // This allows creation of a higher resolution labelmap vs reference volume
63
- const properties = _cloneDeep(options);
63
+ const properties = cloneDeep(options);
64
64
  await volumeLoader.createLocalVolume(properties, segmentationId);
65
65
  } else {
66
66
  // create a labelmap from a reference volume
@@ -159,7 +159,9 @@ class AnnotationRenderingEngine {
159
159
  const enabledElement = getEnabledElement(element);
160
160
 
161
161
  if (!enabledElement) {
162
- console.warn('Element has been disabled');
162
+ // Happens during testing, and isn't an issue as it just means there
163
+ // is overlap between shutdown and re-render
164
+ // console.warn('Element has been disabled');
163
165
  return;
164
166
  }
165
167