@cornerstonejs/tools 1.70.7 → 1.70.9

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cornerstonejs/tools",
3
- "version": "1.70.7",
3
+ "version": "1.70.9",
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.70.7",
32
+ "@cornerstonejs/core": "^1.70.9",
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": "4b6774d20ea66e2fa2815edc042b57565b816959"
62
+ "gitHead": "4f49d65aab6456412e49d88c99ab6d4d3f760e8f"
63
63
  }
@@ -1,11 +1,16 @@
1
1
  import vtkMath from '@kitware/vtk.js/Common/Core/Math';
2
2
  import { Events } from '../enums';
3
3
 
4
- import { getEnabledElement } from '@cornerstonejs/core';
4
+ import {
5
+ eventTarget,
6
+ getEnabledElement,
7
+ getEnabledElementByIds,
8
+ } from '@cornerstonejs/core';
5
9
  import type { Types } from '@cornerstonejs/core';
6
10
  import { mat4, vec3 } from 'gl-matrix';
7
11
  import { EventTypes, PublicToolProps, ToolProps } from '../types';
8
12
  import { BaseTool } from './base';
13
+ import { getToolGroup } from '../store/ToolGroupManager';
9
14
 
10
15
  /**
11
16
  * Tool that rotates the camera in the plane defined by the viewPlaneNormal and the viewUp.
@@ -15,6 +20,8 @@ class TrackballRotateTool extends BaseTool {
15
20
  touchDragCallback: (evt: EventTypes.InteractionEventType) => void;
16
21
  mouseDragCallback: (evt: EventTypes.InteractionEventType) => void;
17
22
  cleanUp: () => void;
23
+ _resizeObservers = new Map();
24
+ _viewportAddedListener: (evt: any) => void;
18
25
 
19
26
  constructor(
20
27
  toolProps: PublicToolProps = {},
@@ -58,6 +65,68 @@ class TrackballRotateTool extends BaseTool {
58
65
  return true;
59
66
  };
60
67
 
68
+ _getViewportsInfo = () => {
69
+ const viewports = getToolGroup(this.toolGroupId).viewportsInfo;
70
+
71
+ return viewports;
72
+ };
73
+
74
+ onSetToolActive = () => {
75
+ const subscribeToElementResize = () => {
76
+ const viewportsInfo = this._getViewportsInfo();
77
+ viewportsInfo.forEach(({ viewportId, renderingEngineId }) => {
78
+ if (!this._resizeObservers.has(viewportId)) {
79
+ const { viewport } = getEnabledElementByIds(
80
+ viewportId,
81
+ renderingEngineId
82
+ );
83
+ const { element } = viewport;
84
+
85
+ const resizeObserver = new ResizeObserver(() => {
86
+ const { viewport } = getEnabledElementByIds(
87
+ viewportId,
88
+ renderingEngineId
89
+ );
90
+ viewport.resetCamera();
91
+ viewport.render();
92
+ });
93
+
94
+ resizeObserver.observe(element);
95
+ this._resizeObservers.set(viewportId, resizeObserver);
96
+ }
97
+ });
98
+ };
99
+
100
+ subscribeToElementResize();
101
+
102
+ this._viewportAddedListener = (evt) => {
103
+ if (evt.detail.toolGroupId === this.toolGroupId) {
104
+ subscribeToElementResize();
105
+ }
106
+ };
107
+
108
+ eventTarget.addEventListener(
109
+ Events.TOOLGROUP_VIEWPORT_ADDED,
110
+ this._viewportAddedListener
111
+ );
112
+ };
113
+
114
+ onSetToolDisabled = () => {
115
+ // Disconnect all resize observers
116
+ this._resizeObservers.forEach((resizeObserver, viewportId) => {
117
+ resizeObserver.disconnect();
118
+ this._resizeObservers.delete(viewportId);
119
+ });
120
+
121
+ if (this._viewportAddedListener) {
122
+ eventTarget.removeEventListener(
123
+ Events.TOOLGROUP_VIEWPORT_ADDED,
124
+ this._viewportAddedListener
125
+ );
126
+ this._viewportAddedListener = null; // Clear the reference to the listener
127
+ }
128
+ };
129
+
61
130
  rotateCamera = (viewport, centerWorld, axis, angle) => {
62
131
  const vtkCamera = viewport.getVtkActiveCamera();
63
132
  const viewUp = vtkCamera.getViewUp();
@@ -217,7 +217,10 @@ function prefetch(element) {
217
217
  .loadAndCacheImage(imageId, options)
218
218
  .then(() => doneCallback(imageId));
219
219
 
220
- const { useNorm16Texture } = getCoreConfiguration().rendering;
220
+ const { useNorm16Texture, preferSizeOverAccuracy } =
221
+ getCoreConfiguration().rendering;
222
+
223
+ const useNativeDataType = useNorm16Texture || preferSizeOverAccuracy;
221
224
 
222
225
  indicesToRequestCopy.forEach((imageIdIndex) => {
223
226
  const imageId = stack.imageIds[imageIdIndex];
@@ -225,11 +228,12 @@ function prefetch(element) {
225
228
  // highest priority will be used for the request type in the imageRetrievalPool
226
229
  const options = {
227
230
  targetBuffer: {
228
- type: useNorm16Texture ? undefined : 'Float32Array',
231
+ type: useNativeDataType ? undefined : 'Float32Array',
229
232
  },
230
233
  preScale: {
231
234
  enabled: true,
232
235
  },
236
+ useNativeDataType,
233
237
  requestType,
234
238
  };
235
239
 
@@ -166,18 +166,22 @@ function prefetch(element) {
166
166
  const requestFn = (imageId, options) =>
167
167
  imageLoader.loadAndCacheImage(imageId, options);
168
168
 
169
- const { useNorm16Texture } = getCoreConfiguration().rendering;
169
+ const { useNorm16Texture, preferSizeOverAccuracy } =
170
+ getCoreConfiguration().rendering;
171
+
172
+ const useNativeDataType = useNorm16Texture || preferSizeOverAccuracy;
170
173
 
171
174
  imageIdsToPrefetch.forEach((imageId) => {
172
175
  // IMPORTANT: Request type should be passed if not the 'interaction'
173
176
  // highest priority will be used for the request type in the imageRetrievalPool
174
177
  const options = {
175
178
  targetBuffer: {
176
- type: useNorm16Texture ? undefined : 'Float32Array',
179
+ type: useNativeDataType ? undefined : 'Float32Array',
177
180
  },
178
181
  preScale: {
179
182
  enabled: true,
180
183
  },
184
+ useNativeDataType,
181
185
  requestType,
182
186
  };
183
187