@cornerstonejs/tools 0.50.1 → 0.51.0
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/dist/cjs/types/CINETypes.d.ts +9 -1
- package/dist/cjs/types/JumpToSliceOptions.d.ts +1 -0
- package/dist/cjs/utilities/cine/playClip.js +152 -44
- package/dist/cjs/utilities/cine/playClip.js.map +1 -1
- package/dist/cjs/utilities/scroll.js +5 -11
- package/dist/cjs/utilities/scroll.js.map +1 -1
- package/dist/cjs/utilities/viewport/jumpToSlice.js +2 -2
- package/dist/cjs/utilities/viewport/jumpToSlice.js.map +1 -1
- package/dist/esm/types/CINETypes.d.ts +9 -1
- package/dist/esm/types/JumpToSliceOptions.d.ts +1 -0
- package/dist/esm/utilities/cine/playClip.js +148 -40
- package/dist/esm/utilities/cine/playClip.js.map +1 -1
- package/dist/esm/utilities/scroll.js +5 -11
- package/dist/esm/utilities/scroll.js.map +1 -1
- package/dist/esm/utilities/viewport/jumpToSlice.js +2 -2
- package/dist/esm/utilities/viewport/jumpToSlice.js.map +1 -1
- package/dist/umd/index.js +1 -1
- package/dist/umd/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { glMatrix, vec3 } from 'gl-matrix';
|
|
2
|
+
import { utilities as csUtils, getEnabledElement, StackViewport, VolumeViewport, cache, } from '@cornerstonejs/core';
|
|
2
3
|
import CINE_EVENTS from './events';
|
|
3
4
|
import { addToolState, getToolState } from './state';
|
|
4
|
-
|
|
5
|
+
import scroll from '../scroll';
|
|
6
|
+
const { triggerEvent } = csUtils;
|
|
5
7
|
const debounced = true;
|
|
6
8
|
const loop = true;
|
|
9
|
+
const dynamicVolumesPlayingMap = new Map();
|
|
7
10
|
function playClip(element, playClipOptions) {
|
|
8
11
|
let playClipTimeouts;
|
|
9
12
|
let playClipIsTimeVarying;
|
|
@@ -14,15 +17,16 @@ function playClip(element, playClipOptions) {
|
|
|
14
17
|
if (!enabledElement) {
|
|
15
18
|
throw new Error('playClip: element must be a valid Cornerstone enabled element');
|
|
16
19
|
}
|
|
20
|
+
playClipOptions.dynamicCineEnabled =
|
|
21
|
+
playClipOptions.dynamicCineEnabled ?? true;
|
|
17
22
|
const { viewport } = enabledElement;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
const stackData = {
|
|
22
|
-
targetImageIdIndex: viewport.getTargetImageIdIndex(),
|
|
23
|
-
imageIds: viewport.getImageIds(),
|
|
24
|
-
};
|
|
23
|
+
const volume = _getVolumeFromViewport(viewport);
|
|
24
|
+
const playClipContext = _createCinePlayContext(viewport, playClipOptions);
|
|
25
25
|
let playClipData = getToolState(element);
|
|
26
|
+
const isDynamicCinePlaying = playClipOptions.dynamicCineEnabled && volume?.isDynamicVolume();
|
|
27
|
+
if (isDynamicCinePlaying) {
|
|
28
|
+
_stopDynamicVolumeCine(element);
|
|
29
|
+
}
|
|
26
30
|
if (!playClipData) {
|
|
27
31
|
playClipData = {
|
|
28
32
|
intervalId: undefined,
|
|
@@ -38,8 +42,9 @@ function playClip(element, playClipOptions) {
|
|
|
38
42
|
addToolState(element, playClipData);
|
|
39
43
|
}
|
|
40
44
|
else {
|
|
41
|
-
|
|
45
|
+
_stopClip(element, isDynamicCinePlaying);
|
|
42
46
|
}
|
|
47
|
+
playClipData.dynamicCineEnabled = playClipOptions.dynamicCineEnabled;
|
|
43
48
|
if (playClipOptions.framesPerSecond < 0 ||
|
|
44
49
|
playClipOptions.framesPerSecond > 0) {
|
|
45
50
|
playClipData.framesPerSecond = Number(playClipOptions.framesPerSecond);
|
|
@@ -48,50 +53,42 @@ function playClip(element, playClipOptions) {
|
|
|
48
53
|
}
|
|
49
54
|
if (playClipData.ignoreFrameTimeVector !== true &&
|
|
50
55
|
playClipData.frameTimeVector &&
|
|
51
|
-
playClipData.frameTimeVector.length ===
|
|
56
|
+
playClipData.frameTimeVector.length === playClipContext.numScrollSteps &&
|
|
57
|
+
playClipContext.frameTimeVectorEnabled) {
|
|
52
58
|
const { timeouts, isTimeVarying } = _getPlayClipTimeouts(playClipData.frameTimeVector, playClipData.speed);
|
|
53
59
|
playClipTimeouts = timeouts;
|
|
54
60
|
playClipIsTimeVarying = isTimeVarying;
|
|
55
61
|
}
|
|
56
62
|
const playClipAction = () => {
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
if (playClipData.reverse) {
|
|
64
|
-
newImageIdIndex--;
|
|
65
|
-
}
|
|
66
|
-
else {
|
|
67
|
-
newImageIdIndex++;
|
|
68
|
-
}
|
|
69
|
-
if (!playClipData.loop &&
|
|
70
|
-
(newImageIdIndex < 0 || newImageIdIndex >= imageCount)) {
|
|
71
|
-
_stopClipWithData(playClipData);
|
|
72
|
-
const eventDetail = {
|
|
73
|
-
element,
|
|
74
|
-
};
|
|
63
|
+
const { numScrollSteps, currentStepIndex } = playClipContext;
|
|
64
|
+
let newStepIndex = currentStepIndex + (playClipData.reverse ? -1 : 1);
|
|
65
|
+
const newStepIndexOutOfRange = newStepIndex < 0 || newStepIndex >= numScrollSteps;
|
|
66
|
+
if (!loop && newStepIndexOutOfRange) {
|
|
67
|
+
_stopClip(element, isDynamicCinePlaying);
|
|
68
|
+
const eventDetail = { element };
|
|
75
69
|
triggerEvent(element, CINE_EVENTS.CLIP_STOPPED, eventDetail);
|
|
76
70
|
return;
|
|
77
71
|
}
|
|
78
|
-
if (
|
|
79
|
-
|
|
72
|
+
if (newStepIndex >= numScrollSteps) {
|
|
73
|
+
newStepIndex = 0;
|
|
80
74
|
}
|
|
81
|
-
if (
|
|
82
|
-
|
|
75
|
+
else if (newStepIndex < 0) {
|
|
76
|
+
newStepIndex = numScrollSteps - 1;
|
|
83
77
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
78
|
+
const delta = newStepIndex - currentStepIndex;
|
|
79
|
+
if (delta) {
|
|
80
|
+
playClipContext.scroll(delta);
|
|
87
81
|
}
|
|
88
82
|
};
|
|
83
|
+
if (isDynamicCinePlaying) {
|
|
84
|
+
dynamicVolumesPlayingMap.set(volume.volumeId, element);
|
|
85
|
+
}
|
|
89
86
|
if (playClipTimeouts &&
|
|
90
87
|
playClipTimeouts.length > 0 &&
|
|
91
88
|
playClipIsTimeVarying) {
|
|
92
89
|
playClipData.usingFrameTimeVector = true;
|
|
93
90
|
playClipData.intervalId = window.setTimeout(function playClipTimeoutHandler() {
|
|
94
|
-
playClipData.intervalId = window.setTimeout(playClipTimeoutHandler, playClipTimeouts[
|
|
91
|
+
playClipData.intervalId = window.setTimeout(playClipTimeoutHandler, playClipTimeouts[playClipContext.currentStepIndex]);
|
|
95
92
|
playClipAction();
|
|
96
93
|
}, 0);
|
|
97
94
|
}
|
|
@@ -105,13 +102,31 @@ function playClip(element, playClipOptions) {
|
|
|
105
102
|
triggerEvent(element, CINE_EVENTS.CLIP_STARTED, eventDetail);
|
|
106
103
|
}
|
|
107
104
|
function stopClip(element) {
|
|
105
|
+
_stopClip(element, true);
|
|
106
|
+
}
|
|
107
|
+
function _stopClip(element, stopDynamicCine) {
|
|
108
108
|
const enabledElement = getEnabledElement(element);
|
|
109
|
+
if (!enabledElement)
|
|
110
|
+
return;
|
|
109
111
|
const { viewport } = enabledElement;
|
|
110
112
|
const cineToolData = getToolState(viewport.element);
|
|
111
|
-
if (
|
|
112
|
-
|
|
113
|
+
if (cineToolData) {
|
|
114
|
+
_stopClipWithData(cineToolData);
|
|
115
|
+
}
|
|
116
|
+
if (stopDynamicCine) {
|
|
117
|
+
_stopDynamicVolumeCine(element);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function _stopDynamicVolumeCine(element) {
|
|
121
|
+
const { viewport } = getEnabledElement(element);
|
|
122
|
+
const volume = _getVolumeFromViewport(viewport);
|
|
123
|
+
if (volume?.isDynamicVolume()) {
|
|
124
|
+
const dynamicCineElement = dynamicVolumesPlayingMap.get(volume.volumeId);
|
|
125
|
+
dynamicVolumesPlayingMap.delete(volume.volumeId);
|
|
126
|
+
if (dynamicCineElement && dynamicCineElement !== element) {
|
|
127
|
+
stopClip(dynamicCineElement);
|
|
128
|
+
}
|
|
113
129
|
}
|
|
114
|
-
_stopClipWithData(cineToolData);
|
|
115
130
|
}
|
|
116
131
|
function _getPlayClipTimeouts(vector, speed) {
|
|
117
132
|
let i;
|
|
@@ -158,5 +173,98 @@ function _stopClipWithData(playClipData) {
|
|
|
158
173
|
}
|
|
159
174
|
}
|
|
160
175
|
}
|
|
176
|
+
function _getVolumeFromViewport(viewport) {
|
|
177
|
+
const actorEntry = viewport.getDefaultActor();
|
|
178
|
+
if (!actorEntry) {
|
|
179
|
+
console.warn('No actor found');
|
|
180
|
+
return;
|
|
181
|
+
}
|
|
182
|
+
const volumeId = actorEntry.uid;
|
|
183
|
+
return cache.getVolume(volumeId);
|
|
184
|
+
}
|
|
185
|
+
function _createStackViewportCinePlayContext(viewport) {
|
|
186
|
+
const imageIds = viewport.getImageIds();
|
|
187
|
+
return {
|
|
188
|
+
get numScrollSteps() {
|
|
189
|
+
return imageIds.length;
|
|
190
|
+
},
|
|
191
|
+
get currentStepIndex() {
|
|
192
|
+
return viewport.getTargetImageIdIndex();
|
|
193
|
+
},
|
|
194
|
+
get frameTimeVectorEnabled() {
|
|
195
|
+
return true;
|
|
196
|
+
},
|
|
197
|
+
scroll(delta) {
|
|
198
|
+
scroll(viewport, { delta, debounceLoading: debounced });
|
|
199
|
+
},
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
function _createVolumeViewportCinePlayContext(viewport, volume) {
|
|
203
|
+
const { volumeId } = volume;
|
|
204
|
+
const cachedScrollInfo = {
|
|
205
|
+
viewPlaneNormal: vec3.create(),
|
|
206
|
+
scrollInfo: null,
|
|
207
|
+
};
|
|
208
|
+
const getScrollInfo = () => {
|
|
209
|
+
const camera = viewport.getCamera();
|
|
210
|
+
const updateCache = !cachedScrollInfo.scrollInfo ||
|
|
211
|
+
!vec3.equals(camera.viewPlaneNormal, cachedScrollInfo.viewPlaneNormal);
|
|
212
|
+
if (updateCache) {
|
|
213
|
+
const scrollInfo = csUtils.getVolumeViewportScrollInfo(viewport, volumeId);
|
|
214
|
+
cachedScrollInfo.viewPlaneNormal = camera.viewPlaneNormal;
|
|
215
|
+
cachedScrollInfo.scrollInfo = scrollInfo;
|
|
216
|
+
}
|
|
217
|
+
return cachedScrollInfo.scrollInfo;
|
|
218
|
+
};
|
|
219
|
+
return {
|
|
220
|
+
get numScrollSteps() {
|
|
221
|
+
return getScrollInfo().numScrollSteps;
|
|
222
|
+
},
|
|
223
|
+
get currentStepIndex() {
|
|
224
|
+
return getScrollInfo().currentStepIndex;
|
|
225
|
+
},
|
|
226
|
+
get frameTimeVectorEnabled() {
|
|
227
|
+
const camera = viewport.getCamera();
|
|
228
|
+
const volumeViewPlaneNormal = volume.direction
|
|
229
|
+
.slice(6, 9)
|
|
230
|
+
.map((x) => -x);
|
|
231
|
+
const dot = vec3.dot(volumeViewPlaneNormal, camera.viewPlaneNormal);
|
|
232
|
+
return glMatrix.equals(dot, 1);
|
|
233
|
+
},
|
|
234
|
+
scroll(delta) {
|
|
235
|
+
getScrollInfo().currentStepIndex += delta;
|
|
236
|
+
scroll(viewport, { delta });
|
|
237
|
+
},
|
|
238
|
+
};
|
|
239
|
+
}
|
|
240
|
+
function _createDynamicVolumeViewportCinePlayContext(volume) {
|
|
241
|
+
return {
|
|
242
|
+
get numScrollSteps() {
|
|
243
|
+
return volume.numTimePoints;
|
|
244
|
+
},
|
|
245
|
+
get currentStepIndex() {
|
|
246
|
+
return volume.timePointIndex;
|
|
247
|
+
},
|
|
248
|
+
get frameTimeVectorEnabled() {
|
|
249
|
+
return false;
|
|
250
|
+
},
|
|
251
|
+
scroll(delta) {
|
|
252
|
+
volume.timePointIndex += delta;
|
|
253
|
+
},
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
function _createCinePlayContext(viewport, playClipOptions) {
|
|
257
|
+
if (viewport instanceof StackViewport) {
|
|
258
|
+
return _createStackViewportCinePlayContext(viewport);
|
|
259
|
+
}
|
|
260
|
+
if (viewport instanceof VolumeViewport) {
|
|
261
|
+
const volume = _getVolumeFromViewport(viewport);
|
|
262
|
+
if (playClipOptions.dynamicCineEnabled && volume?.isDynamicVolume()) {
|
|
263
|
+
return _createDynamicVolumeViewportCinePlayContext(volume);
|
|
264
|
+
}
|
|
265
|
+
return _createVolumeViewportCinePlayContext(viewport, volume);
|
|
266
|
+
}
|
|
267
|
+
throw new Error('Unknown viewport type');
|
|
268
|
+
}
|
|
161
269
|
export { playClip, stopClip };
|
|
162
270
|
//# sourceMappingURL=playClip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playClip.js","sourceRoot":"","sources":["../../../../src/utilities/cine/playClip.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,
|
|
1
|
+
{"version":3,"file":"playClip.js","sourceRoot":"","sources":["../../../../src/utilities/cine/playClip.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EACL,SAAS,IAAI,OAAO,EACpB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,KAAK,GACN,MAAM,qBAAqB,CAAC;AAG7B,OAAO,WAAW,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAErD,OAAO,MAAM,MAAM,WAAW,CAAC;AAE/B,MAAM,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;AAEjC,MAAM,SAAS,GAAG,IAAI,CAAC;AACvB,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,wBAAwB,GAAG,IAAI,GAAG,EAAE,CAAC;AAS3C,SAAS,QAAQ,CACf,OAAuB,EACvB,eAA0C;IAE1C,IAAI,gBAAgB,CAAC;IACrB,IAAI,qBAAqB,CAAC;IAE1B,IAAI,OAAO,KAAK,SAAS,EAAE;QACzB,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;KAC5D;IAED,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,KAAK,CACb,+DAA+D,CAChE,CAAC;KACH;IAGD,eAAe,CAAC,kBAAkB;QAChC,eAAe,CAAC,kBAAkB,IAAI,IAAI,CAAC;IAE7C,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;IACpC,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,eAAe,GAAG,sBAAsB,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;IAC1E,IAAI,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAEzC,MAAM,oBAAoB,GACxB,eAAe,CAAC,kBAAkB,IAAI,MAAM,EAAE,eAAe,EAAE,CAAC;IAIlE,IAAI,oBAAoB,EAAE;QACxB,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACjC;IAED,IAAI,CAAC,YAAY,EAAE;QACjB,YAAY,GAAG;YACb,UAAU,EAAE,SAAS;YACrB,eAAe,EAAE,EAAE;YACnB,kBAAkB,EAAE,SAAS;YAC7B,qBAAqB,EAAE,KAAK;YAC5B,oBAAoB,EAAE,KAAK;YAC3B,eAAe,EAAE,eAAe,CAAC,eAAe,IAAI,SAAS;YAC7D,KAAK,EAAE,eAAe,CAAC,8BAA8B,IAAI,CAAC;YAC1D,OAAO,EAAE,eAAe,CAAC,OAAO,IAAI,KAAK;YACzC,IAAI,EAAE,eAAe,CAAC,IAAI,IAAI,IAAI;SACnC,CAAC;QACF,YAAY,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;KACrC;SAAM;QAIL,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;KAC1C;IAED,YAAY,CAAC,kBAAkB,GAAG,eAAe,CAAC,kBAAkB,CAAC;IAGrE,IACE,eAAe,CAAC,eAAe,GAAG,CAAC;QACnC,eAAe,CAAC,eAAe,GAAG,CAAC,EACnC;QACA,YAAY,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QACvE,YAAY,CAAC,OAAO,GAAG,YAAY,CAAC,eAAe,GAAG,CAAC,CAAC;QAExD,YAAY,CAAC,qBAAqB,GAAG,IAAI,CAAC;KAC3C;IAGD,IACE,YAAY,CAAC,qBAAqB,KAAK,IAAI;QAC3C,YAAY,CAAC,eAAe;QAC5B,YAAY,CAAC,eAAe,CAAC,MAAM,KAAK,eAAe,CAAC,cAAc;QACtE,eAAe,CAAC,sBAAsB,EACtC;QACA,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,oBAAoB,CACtD,YAAY,CAAC,eAAe,EAC5B,YAAY,CAAC,KAAK,CACnB,CAAC;QAEF,gBAAgB,GAAG,QAAQ,CAAC;QAC5B,qBAAqB,GAAG,aAAa,CAAC;KACvC;IAGD,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,MAAM,EAAE,cAAc,EAAE,gBAAgB,EAAE,GAAG,eAAe,CAAC;QAC7D,IAAI,YAAY,GAAG,gBAAgB,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,MAAM,sBAAsB,GAC1B,YAAY,GAAG,CAAC,IAAI,YAAY,IAAI,cAAc,CAAC;QAErD,IAAI,CAAC,IAAI,IAAI,sBAAsB,EAAE;YAGnC,SAAS,CAAC,OAAO,EAAE,oBAAoB,CAAC,CAAC;YAEzC,MAAM,WAAW,GAAG,EAAE,OAAO,EAAE,CAAC;YAEhC,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;YAC7D,OAAO;SACR;QAGD,IAAI,YAAY,IAAI,cAAc,EAAE;YAClC,YAAY,GAAG,CAAC,CAAC;SAClB;aAAM,IAAI,YAAY,GAAG,CAAC,EAAE;YAC3B,YAAY,GAAG,cAAc,GAAG,CAAC,CAAC;SACnC;QAED,MAAM,KAAK,GAAG,YAAY,GAAG,gBAAgB,CAAC;QAE9C,IAAI,KAAK,EAAE;YACT,eAAe,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC/B;IACH,CAAC,CAAC;IAEF,IAAI,oBAAoB,EAAE;QACxB,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;KACxD;IAID,IACE,gBAAgB;QAChB,gBAAgB,CAAC,MAAM,GAAG,CAAC;QAC3B,qBAAqB,EACrB;QACA,YAAY,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACzC,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CACzC,SAAS,sBAAsB;YAC7B,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CACzC,sBAAsB,EACtB,gBAAgB,CAAC,eAAe,CAAC,gBAAgB,CAAC,CACnD,CAAC;YACF,cAAc,EAAE,CAAC;QACnB,CAAC,EACD,CAAC,CACF,CAAC;KACH;SAAM;QAEL,YAAY,CAAC,oBAAoB,GAAG,KAAK,CAAC;QAC1C,YAAY,CAAC,UAAU,GAAG,MAAM,CAAC,WAAW,CAC1C,cAAc,EACd,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,eAAe,CAAC,CAC9C,CAAC;KACH;IAED,MAAM,WAAW,GAAG;QAClB,OAAO;KACR,CAAC;IAEF,YAAY,CAAC,OAAO,EAAE,WAAW,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAC/D,CAAC;AAMD,SAAS,QAAQ,CAAC,OAAuB;IACvC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS,CAAC,OAAuB,EAAE,eAAwB;IAClE,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,cAAc;QAAE,OAAO;IAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;IACpC,MAAM,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,YAAY,EAAE;QAChB,iBAAiB,CAAC,YAAY,CAAC,CAAC;KACjC;IAED,IAAI,eAAe,EAAE;QACnB,sBAAsB,CAAC,OAAO,CAAC,CAAC;KACjC;AACH,CAAC;AAMD,SAAS,sBAAsB,CAAC,OAAO;IACrC,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAKhD,IAAI,MAAM,EAAE,eAAe,EAAE,EAAE;QAC7B,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEzE,wBAAwB,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEjD,IAAI,kBAAkB,IAAI,kBAAkB,KAAK,OAAO,EAAE;YACxD,QAAQ,CAAiB,kBAAkB,CAAC,CAAC;SAC9C;KACF;AACH,CAAC;AASD,SAAS,oBAAoB,CAAC,MAAgB,EAAE,KAAa;IAC3D,IAAI,CAAC,CAAC;IACN,IAAI,MAAM,CAAC;IACX,IAAI,KAAK,CAAC;IACV,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5B,MAAM,QAAQ,GAAG,EAAE,CAAC;IAGpB,IAAI,aAAa,GAAG,KAAK,CAAC;IAE1B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,IAAI,CAAC,EAAE;QAC3C,KAAK,GAAG,CAAC,CAAC;KACX;IAGD,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE;QAE1B,KAAK,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,CAAC,EAAE;YAEX,MAAM,GAAG,KAAK,CAAC;SAChB;aAAM,IAAI,KAAK,KAAK,MAAM,EAAE;YAC3B,aAAa,GAAG,IAAI,CAAC;SACtB;QAED,GAAG,IAAI,KAAK,CAAC;KACd;IAED,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;QACvB,IAAI,aAAa,EAAE;YAGjB,KAAK,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;SACrC;aAAM;YACL,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;SACrB;QAED,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACtB;IAED,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;AACrC,CAAC;AAOD,SAAS,iBAAiB,CAAC,YAAY;IACrC,MAAM,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC;IAEnC,IAAI,OAAO,EAAE,KAAK,WAAW,EAAE;QAC7B,YAAY,CAAC,UAAU,GAAG,SAAS,CAAC;QACpC,IAAI,YAAY,CAAC,oBAAoB,EAAE;YACrC,YAAY,CAAC,EAAE,CAAC,CAAC;SAClB;aAAM;YACL,aAAa,CAAC,EAAE,CAAC,CAAC;SACnB;KACF;AACH,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAQ;IACtC,MAAM,UAAU,GAAG,QAAQ,CAAC,eAAe,EAAE,CAAC;IAE9C,IAAI,CAAC,UAAU,EAAE;QACf,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC/B,OAAO;KACR;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC;IAChC,OAAO,KAAK,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,mCAAmC,CAC1C,QAAuB;IAEvB,MAAM,QAAQ,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAExC,OAAO;QACL,IAAI,cAAc;YAChB,OAAO,QAAQ,CAAC,MAAM,CAAC;QACzB,CAAC;QACD,IAAI,gBAAgB;YAClB,OAAO,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAC1C,CAAC;QACD,IAAI,sBAAsB;YAExB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,CAAC,KAAa;YAClB,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1D,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,oCAAoC,CAC3C,QAAwB,EACxB,MAA0B;IAE1B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAC5B,MAAM,gBAAgB,GAAG;QACvB,eAAe,EAAE,IAAI,CAAC,MAAM,EAAE;QAC9B,UAAU,EAAE,IAAI;KACjB,CAAC;IAEF,MAAM,aAAa,GAAG,GAAG,EAAE;QACzB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,WAAW,GACf,CAAC,gBAAgB,CAAC,UAAU;YAC5B,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,gBAAgB,CAAC,eAAe,CAAC,CAAC;QAKzE,IAAI,WAAW,EAAE;YACf,MAAM,UAAU,GAAG,OAAO,CAAC,2BAA2B,CACpD,QAAQ,EACR,QAAQ,CACT,CAAC;YAEF,gBAAgB,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC;YAC1D,gBAAgB,CAAC,UAAU,GAAG,UAAU,CAAC;SAC1C;QAED,OAAO,gBAAgB,CAAC,UAAU,CAAC;IACrC,CAAC,CAAC;IAEF,OAAO;QACL,IAAI,cAAc;YAChB,OAAO,aAAa,EAAE,CAAC,cAAc,CAAC;QACxC,CAAC;QACD,IAAI,gBAAgB;YAClB,OAAO,aAAa,EAAE,CAAC,gBAAgB,CAAC;QAC1C,CAAC;QACD,IAAI,sBAAsB;YACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;YACpC,MAAM,qBAAqB,GAAG,MAAM,CAAC,SAAS;iBAC3C,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAiB,CAAC;YAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;YAIpE,OAAO,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,MAAM,CAAC,KAAa;YAClB,aAAa,EAAE,CAAC,gBAAgB,IAAI,KAAK,CAAC;YAC1C,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9B,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,2CAA2C,CAClD,MAAiC;IAEjC,OAAO;QACL,IAAI,cAAc;YAChB,OAAO,MAAM,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,IAAI,gBAAgB;YAClB,OAAO,MAAM,CAAC,cAAc,CAAC;QAC/B,CAAC;QACD,IAAI,sBAAsB;YAExB,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,CAAC,KAAa;YAElB,MAAM,CAAC,cAAc,IAAI,KAAK,CAAC;QACjC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAC7B,QAAQ,EACR,eAA0C;IAE1C,IAAI,QAAQ,YAAY,aAAa,EAAE;QACrC,OAAO,mCAAmC,CAAC,QAAQ,CAAC,CAAC;KACtD;IAED,IAAI,QAAQ,YAAY,cAAc,EAAE;QACtC,MAAM,MAAM,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;QAEhD,IAAI,eAAe,CAAC,kBAAkB,IAAI,MAAM,EAAE,eAAe,EAAE,EAAE;YACnE,OAAO,2CAA2C,CACrB,MAAM,CAClC,CAAC;SACH;QAED,OAAO,oCAAoC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;KAC/D;IAED,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;AAC3C,CAAC;AAED,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC"}
|
|
@@ -13,18 +13,12 @@ export default function scroll(viewport, options) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
export function scrollVolume(viewport, volumeId, delta) {
|
|
16
|
-
const
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
if (!imageVolume) {
|
|
20
|
-
throw new Error(`Could not find image volume with id ${volumeId} in the viewport`);
|
|
21
|
-
}
|
|
22
|
-
const actorEntry = viewport.getActor(imageVolume.volumeId);
|
|
23
|
-
if (!actorEntry) {
|
|
24
|
-
console.warn('No actor found for with actorUID of', imageVolume.volumeId);
|
|
16
|
+
const sliceRangeInfo = csUtils.getVolumeSliceRangeInfo(viewport, volumeId);
|
|
17
|
+
if (!sliceRangeInfo) {
|
|
18
|
+
return;
|
|
25
19
|
}
|
|
26
|
-
const
|
|
27
|
-
const
|
|
20
|
+
const { sliceRange, spacingInNormalDirection, camera } = sliceRangeInfo;
|
|
21
|
+
const { focalPoint, viewPlaneNormal, position } = camera;
|
|
28
22
|
const { newFocalPoint, newPosition } = csUtils.snapFocalPointToSlice(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, delta);
|
|
29
23
|
viewport.setCamera({
|
|
30
24
|
focalPoint: newFocalPoint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utilities/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,cAAc,EACd,SAAS,IAAI,OAAO,GACrB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAAsD,EACtD,OAAsB;IAEtB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,IAAI,QAAQ,YAAY,aAAa,EAAE;QACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;KACjD;SAAM,IAAI,QAAQ,YAAY,cAAc,EAAE;QAC7C,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KACzC;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;KACvE;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,QAAgB,EAChB,KAAa;IAEb,MAAM,
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utilities/scroll.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EAEb,cAAc,EACd,SAAS,IAAI,OAAO,GACrB,MAAM,qBAAqB,CAAC;AAY7B,MAAM,CAAC,OAAO,UAAU,MAAM,CAC5B,QAAsD,EACtD,OAAsB;IAEtB,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC;IACxC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpC,IAAI,QAAQ,YAAY,aAAa,EAAE;QACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;KACjD;SAAM,IAAI,QAAQ,YAAY,cAAc,EAAE;QAC7C,YAAY,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;KACzC;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,sCAAsC,YAAY,EAAE,CAAC,CAAC;KACvE;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,QAAgB,EAChB,KAAa;IAEb,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAE3E,IAAI,CAAC,cAAc,EAAE;QACnB,OAAO;KACR;IAED,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;IACxE,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;IAEzD,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAClE,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EACf,wBAAwB,EACxB,KAAK,CACN,CAAC;IAEF,QAAQ,CAAC,SAAS,CAAC;QACjB,UAAU,EAAE,aAAa;QACzB,QAAQ,EAAE,WAAW;KACtB,CAAC,CAAC;IACH,QAAQ,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -2,7 +2,7 @@ import { getEnabledElement, StackViewport, VolumeViewport, utilities as csUtils,
|
|
|
2
2
|
import clip from '../clip';
|
|
3
3
|
import scroll from '../scroll';
|
|
4
4
|
async function jumpToSlice(element, options = {}) {
|
|
5
|
-
const { imageIndex, debounceLoading } = options;
|
|
5
|
+
const { imageIndex, debounceLoading, volumeId } = options;
|
|
6
6
|
const enabledElement = getEnabledElement(element);
|
|
7
7
|
if (!enabledElement) {
|
|
8
8
|
throw new Error('Element has been disabled');
|
|
@@ -11,7 +11,7 @@ async function jumpToSlice(element, options = {}) {
|
|
|
11
11
|
const { imageIndex: currentImageIndex, numberOfSlices } = _getImageSliceData(viewport, debounceLoading);
|
|
12
12
|
const imageIndexToJump = _getImageIndexToJump(numberOfSlices, imageIndex);
|
|
13
13
|
const delta = imageIndexToJump - currentImageIndex;
|
|
14
|
-
scroll(viewport, { delta, debounceLoading });
|
|
14
|
+
scroll(viewport, { delta, debounceLoading, volumeId });
|
|
15
15
|
}
|
|
16
16
|
function _getImageSliceData(viewport, debounceLoading) {
|
|
17
17
|
if (viewport instanceof StackViewport) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jumpToSlice.js","sourceRoot":"","sources":["../../../../src/utilities/viewport/jumpToSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,SAAS,IAAI,OAAO,GAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,MAAM,MAAM,WAAW,CAAC;AAY/B,KAAK,UAAU,WAAW,CACxB,OAAuB,EACvB,UAAU,EAAwB;IAElC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"jumpToSlice.js","sourceRoot":"","sources":["../../../../src/utilities/viewport/jumpToSlice.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,SAAS,IAAI,OAAO,GAErB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,MAAM,MAAM,WAAW,CAAC;AAY/B,KAAK,UAAU,WAAW,CACxB,OAAuB,EACvB,UAAU,EAAwB;IAElC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IAC1D,MAAM,cAAc,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAElD,IAAI,CAAC,cAAc,EAAE;QACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;IAEpC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAC1E,QAAQ,EACR,eAAe,CAChB,CAAC;IAEF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;IAEnD,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,kBAAkB,CACzB,QAAsD,EACtD,eAAyB;IAEzB,IAAI,QAAQ,YAAY,aAAa,EAAE;QACrC,OAAO;YACL,cAAc,EAAE,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM;YAC7C,UAAU,EAAE,eAAe;gBACzB,CAAC,CAAC,QAAQ,CAAC,qBAAqB,EAAE;gBAClC,CAAC,CAAC,QAAQ,CAAC,sBAAsB,EAAE;SACtC,CAAC;KACH;SAAM,IAAI,QAAQ,YAAY,cAAc,EAAE;QAC7C,OAAO,OAAO,CAAC,kCAAkC,CAAC,QAAQ,CAAC,CAAC;KAC7D;SAAM;QACL,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;KAC9C;AACH,CAAC;AAED,SAAS,oBAAoB,CAC3B,cAAsB,EACtB,UAAkB;IAElB,MAAM,cAAc,GAAG,cAAc,GAAG,CAAC,CAAC;IAE1C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,eAAe,WAAW,CAAC"}
|