@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
|
@@ -3,6 +3,7 @@ declare type PlayClipOptions = {
|
|
|
3
3
|
frameTimeVector?: number[];
|
|
4
4
|
reverse?: boolean;
|
|
5
5
|
loop?: boolean;
|
|
6
|
+
dynamicCineEnabled?: boolean;
|
|
6
7
|
frameTimeVectorSpeedMultiplier?: number;
|
|
7
8
|
};
|
|
8
9
|
interface ToolData {
|
|
@@ -15,5 +16,12 @@ interface ToolData {
|
|
|
15
16
|
speed: number;
|
|
16
17
|
reverse: boolean;
|
|
17
18
|
loop: boolean;
|
|
19
|
+
dynamicCineEnabled?: boolean;
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
declare type CinePlayContext = {
|
|
22
|
+
get numScrollSteps(): number;
|
|
23
|
+
get currentStepIndex(): number;
|
|
24
|
+
get frameTimeVectorEnabled(): boolean;
|
|
25
|
+
scroll(delta: number): void;
|
|
26
|
+
};
|
|
27
|
+
export type { PlayClipOptions, ToolData, CinePlayContext };
|
|
@@ -4,14 +4,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.stopClip = exports.playClip = void 0;
|
|
7
|
+
const gl_matrix_1 = require("gl-matrix");
|
|
7
8
|
const core_1 = require("@cornerstonejs/core");
|
|
8
9
|
const events_1 = __importDefault(require("./events"));
|
|
9
10
|
const state_1 = require("./state");
|
|
11
|
+
const scroll_1 = __importDefault(require("../scroll"));
|
|
10
12
|
const { triggerEvent } = core_1.utilities;
|
|
11
13
|
const debounced = true;
|
|
12
14
|
const loop = true;
|
|
15
|
+
const dynamicVolumesPlayingMap = new Map();
|
|
13
16
|
function playClip(element, playClipOptions) {
|
|
14
|
-
var _a, _b, _c, _d;
|
|
17
|
+
var _a, _b, _c, _d, _e;
|
|
15
18
|
let playClipTimeouts;
|
|
16
19
|
let playClipIsTimeVarying;
|
|
17
20
|
if (element === undefined) {
|
|
@@ -21,15 +24,16 @@ function playClip(element, playClipOptions) {
|
|
|
21
24
|
if (!enabledElement) {
|
|
22
25
|
throw new Error('playClip: element must be a valid Cornerstone enabled element');
|
|
23
26
|
}
|
|
27
|
+
playClipOptions.dynamicCineEnabled =
|
|
28
|
+
(_a = playClipOptions.dynamicCineEnabled) !== null && _a !== void 0 ? _a : true;
|
|
24
29
|
const { viewport } = enabledElement;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
const stackData = {
|
|
29
|
-
targetImageIdIndex: viewport.getTargetImageIdIndex(),
|
|
30
|
-
imageIds: viewport.getImageIds(),
|
|
31
|
-
};
|
|
30
|
+
const volume = _getVolumeFromViewport(viewport);
|
|
31
|
+
const playClipContext = _createCinePlayContext(viewport, playClipOptions);
|
|
32
32
|
let playClipData = (0, state_1.getToolState)(element);
|
|
33
|
+
const isDynamicCinePlaying = playClipOptions.dynamicCineEnabled && (volume === null || volume === void 0 ? void 0 : volume.isDynamicVolume());
|
|
34
|
+
if (isDynamicCinePlaying) {
|
|
35
|
+
_stopDynamicVolumeCine(element);
|
|
36
|
+
}
|
|
33
37
|
if (!playClipData) {
|
|
34
38
|
playClipData = {
|
|
35
39
|
intervalId: undefined,
|
|
@@ -37,16 +41,17 @@ function playClip(element, playClipOptions) {
|
|
|
37
41
|
lastFrameTimeStamp: undefined,
|
|
38
42
|
ignoreFrameTimeVector: false,
|
|
39
43
|
usingFrameTimeVector: false,
|
|
40
|
-
frameTimeVector: (
|
|
41
|
-
speed: (
|
|
42
|
-
reverse: (
|
|
43
|
-
loop: (
|
|
44
|
+
frameTimeVector: (_b = playClipOptions.frameTimeVector) !== null && _b !== void 0 ? _b : undefined,
|
|
45
|
+
speed: (_c = playClipOptions.frameTimeVectorSpeedMultiplier) !== null && _c !== void 0 ? _c : 1,
|
|
46
|
+
reverse: (_d = playClipOptions.reverse) !== null && _d !== void 0 ? _d : false,
|
|
47
|
+
loop: (_e = playClipOptions.loop) !== null && _e !== void 0 ? _e : true,
|
|
44
48
|
};
|
|
45
49
|
(0, state_1.addToolState)(element, playClipData);
|
|
46
50
|
}
|
|
47
51
|
else {
|
|
48
|
-
|
|
52
|
+
_stopClip(element, isDynamicCinePlaying);
|
|
49
53
|
}
|
|
54
|
+
playClipData.dynamicCineEnabled = playClipOptions.dynamicCineEnabled;
|
|
50
55
|
if (playClipOptions.framesPerSecond < 0 ||
|
|
51
56
|
playClipOptions.framesPerSecond > 0) {
|
|
52
57
|
playClipData.framesPerSecond = Number(playClipOptions.framesPerSecond);
|
|
@@ -55,50 +60,42 @@ function playClip(element, playClipOptions) {
|
|
|
55
60
|
}
|
|
56
61
|
if (playClipData.ignoreFrameTimeVector !== true &&
|
|
57
62
|
playClipData.frameTimeVector &&
|
|
58
|
-
playClipData.frameTimeVector.length ===
|
|
63
|
+
playClipData.frameTimeVector.length === playClipContext.numScrollSteps &&
|
|
64
|
+
playClipContext.frameTimeVectorEnabled) {
|
|
59
65
|
const { timeouts, isTimeVarying } = _getPlayClipTimeouts(playClipData.frameTimeVector, playClipData.speed);
|
|
60
66
|
playClipTimeouts = timeouts;
|
|
61
67
|
playClipIsTimeVarying = isTimeVarying;
|
|
62
68
|
}
|
|
63
69
|
const playClipAction = () => {
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (playClipData.reverse) {
|
|
71
|
-
newImageIdIndex--;
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
newImageIdIndex++;
|
|
75
|
-
}
|
|
76
|
-
if (!playClipData.loop &&
|
|
77
|
-
(newImageIdIndex < 0 || newImageIdIndex >= imageCount)) {
|
|
78
|
-
_stopClipWithData(playClipData);
|
|
79
|
-
const eventDetail = {
|
|
80
|
-
element,
|
|
81
|
-
};
|
|
70
|
+
const { numScrollSteps, currentStepIndex } = playClipContext;
|
|
71
|
+
let newStepIndex = currentStepIndex + (playClipData.reverse ? -1 : 1);
|
|
72
|
+
const newStepIndexOutOfRange = newStepIndex < 0 || newStepIndex >= numScrollSteps;
|
|
73
|
+
if (!loop && newStepIndexOutOfRange) {
|
|
74
|
+
_stopClip(element, isDynamicCinePlaying);
|
|
75
|
+
const eventDetail = { element };
|
|
82
76
|
triggerEvent(element, events_1.default.CLIP_STOPPED, eventDetail);
|
|
83
77
|
return;
|
|
84
78
|
}
|
|
85
|
-
if (
|
|
86
|
-
|
|
79
|
+
if (newStepIndex >= numScrollSteps) {
|
|
80
|
+
newStepIndex = 0;
|
|
87
81
|
}
|
|
88
|
-
if (
|
|
89
|
-
|
|
82
|
+
else if (newStepIndex < 0) {
|
|
83
|
+
newStepIndex = numScrollSteps - 1;
|
|
90
84
|
}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
85
|
+
const delta = newStepIndex - currentStepIndex;
|
|
86
|
+
if (delta) {
|
|
87
|
+
playClipContext.scroll(delta);
|
|
94
88
|
}
|
|
95
89
|
};
|
|
90
|
+
if (isDynamicCinePlaying) {
|
|
91
|
+
dynamicVolumesPlayingMap.set(volume.volumeId, element);
|
|
92
|
+
}
|
|
96
93
|
if (playClipTimeouts &&
|
|
97
94
|
playClipTimeouts.length > 0 &&
|
|
98
95
|
playClipIsTimeVarying) {
|
|
99
96
|
playClipData.usingFrameTimeVector = true;
|
|
100
97
|
playClipData.intervalId = window.setTimeout(function playClipTimeoutHandler() {
|
|
101
|
-
playClipData.intervalId = window.setTimeout(playClipTimeoutHandler, playClipTimeouts[
|
|
98
|
+
playClipData.intervalId = window.setTimeout(playClipTimeoutHandler, playClipTimeouts[playClipContext.currentStepIndex]);
|
|
102
99
|
playClipAction();
|
|
103
100
|
}, 0);
|
|
104
101
|
}
|
|
@@ -113,15 +110,33 @@ function playClip(element, playClipOptions) {
|
|
|
113
110
|
}
|
|
114
111
|
exports.playClip = playClip;
|
|
115
112
|
function stopClip(element) {
|
|
113
|
+
_stopClip(element, true);
|
|
114
|
+
}
|
|
115
|
+
exports.stopClip = stopClip;
|
|
116
|
+
function _stopClip(element, stopDynamicCine) {
|
|
116
117
|
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
118
|
+
if (!enabledElement)
|
|
119
|
+
return;
|
|
117
120
|
const { viewport } = enabledElement;
|
|
118
121
|
const cineToolData = (0, state_1.getToolState)(viewport.element);
|
|
119
|
-
if (
|
|
120
|
-
|
|
122
|
+
if (cineToolData) {
|
|
123
|
+
_stopClipWithData(cineToolData);
|
|
124
|
+
}
|
|
125
|
+
if (stopDynamicCine) {
|
|
126
|
+
_stopDynamicVolumeCine(element);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function _stopDynamicVolumeCine(element) {
|
|
130
|
+
const { viewport } = (0, core_1.getEnabledElement)(element);
|
|
131
|
+
const volume = _getVolumeFromViewport(viewport);
|
|
132
|
+
if (volume === null || volume === void 0 ? void 0 : volume.isDynamicVolume()) {
|
|
133
|
+
const dynamicCineElement = dynamicVolumesPlayingMap.get(volume.volumeId);
|
|
134
|
+
dynamicVolumesPlayingMap.delete(volume.volumeId);
|
|
135
|
+
if (dynamicCineElement && dynamicCineElement !== element) {
|
|
136
|
+
stopClip(dynamicCineElement);
|
|
137
|
+
}
|
|
121
138
|
}
|
|
122
|
-
_stopClipWithData(cineToolData);
|
|
123
139
|
}
|
|
124
|
-
exports.stopClip = stopClip;
|
|
125
140
|
function _getPlayClipTimeouts(vector, speed) {
|
|
126
141
|
let i;
|
|
127
142
|
let sample;
|
|
@@ -167,4 +182,97 @@ function _stopClipWithData(playClipData) {
|
|
|
167
182
|
}
|
|
168
183
|
}
|
|
169
184
|
}
|
|
185
|
+
function _getVolumeFromViewport(viewport) {
|
|
186
|
+
const actorEntry = viewport.getDefaultActor();
|
|
187
|
+
if (!actorEntry) {
|
|
188
|
+
console.warn('No actor found');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
const volumeId = actorEntry.uid;
|
|
192
|
+
return core_1.cache.getVolume(volumeId);
|
|
193
|
+
}
|
|
194
|
+
function _createStackViewportCinePlayContext(viewport) {
|
|
195
|
+
const imageIds = viewport.getImageIds();
|
|
196
|
+
return {
|
|
197
|
+
get numScrollSteps() {
|
|
198
|
+
return imageIds.length;
|
|
199
|
+
},
|
|
200
|
+
get currentStepIndex() {
|
|
201
|
+
return viewport.getTargetImageIdIndex();
|
|
202
|
+
},
|
|
203
|
+
get frameTimeVectorEnabled() {
|
|
204
|
+
return true;
|
|
205
|
+
},
|
|
206
|
+
scroll(delta) {
|
|
207
|
+
(0, scroll_1.default)(viewport, { delta, debounceLoading: debounced });
|
|
208
|
+
},
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
function _createVolumeViewportCinePlayContext(viewport, volume) {
|
|
212
|
+
const { volumeId } = volume;
|
|
213
|
+
const cachedScrollInfo = {
|
|
214
|
+
viewPlaneNormal: gl_matrix_1.vec3.create(),
|
|
215
|
+
scrollInfo: null,
|
|
216
|
+
};
|
|
217
|
+
const getScrollInfo = () => {
|
|
218
|
+
const camera = viewport.getCamera();
|
|
219
|
+
const updateCache = !cachedScrollInfo.scrollInfo ||
|
|
220
|
+
!gl_matrix_1.vec3.equals(camera.viewPlaneNormal, cachedScrollInfo.viewPlaneNormal);
|
|
221
|
+
if (updateCache) {
|
|
222
|
+
const scrollInfo = core_1.utilities.getVolumeViewportScrollInfo(viewport, volumeId);
|
|
223
|
+
cachedScrollInfo.viewPlaneNormal = camera.viewPlaneNormal;
|
|
224
|
+
cachedScrollInfo.scrollInfo = scrollInfo;
|
|
225
|
+
}
|
|
226
|
+
return cachedScrollInfo.scrollInfo;
|
|
227
|
+
};
|
|
228
|
+
return {
|
|
229
|
+
get numScrollSteps() {
|
|
230
|
+
return getScrollInfo().numScrollSteps;
|
|
231
|
+
},
|
|
232
|
+
get currentStepIndex() {
|
|
233
|
+
return getScrollInfo().currentStepIndex;
|
|
234
|
+
},
|
|
235
|
+
get frameTimeVectorEnabled() {
|
|
236
|
+
const camera = viewport.getCamera();
|
|
237
|
+
const volumeViewPlaneNormal = volume.direction
|
|
238
|
+
.slice(6, 9)
|
|
239
|
+
.map((x) => -x);
|
|
240
|
+
const dot = gl_matrix_1.vec3.dot(volumeViewPlaneNormal, camera.viewPlaneNormal);
|
|
241
|
+
return gl_matrix_1.glMatrix.equals(dot, 1);
|
|
242
|
+
},
|
|
243
|
+
scroll(delta) {
|
|
244
|
+
getScrollInfo().currentStepIndex += delta;
|
|
245
|
+
(0, scroll_1.default)(viewport, { delta });
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
function _createDynamicVolumeViewportCinePlayContext(volume) {
|
|
250
|
+
return {
|
|
251
|
+
get numScrollSteps() {
|
|
252
|
+
return volume.numTimePoints;
|
|
253
|
+
},
|
|
254
|
+
get currentStepIndex() {
|
|
255
|
+
return volume.timePointIndex;
|
|
256
|
+
},
|
|
257
|
+
get frameTimeVectorEnabled() {
|
|
258
|
+
return false;
|
|
259
|
+
},
|
|
260
|
+
scroll(delta) {
|
|
261
|
+
volume.timePointIndex += delta;
|
|
262
|
+
},
|
|
263
|
+
};
|
|
264
|
+
}
|
|
265
|
+
function _createCinePlayContext(viewport, playClipOptions) {
|
|
266
|
+
if (viewport instanceof core_1.StackViewport) {
|
|
267
|
+
return _createStackViewportCinePlayContext(viewport);
|
|
268
|
+
}
|
|
269
|
+
if (viewport instanceof core_1.VolumeViewport) {
|
|
270
|
+
const volume = _getVolumeFromViewport(viewport);
|
|
271
|
+
if (playClipOptions.dynamicCineEnabled && (volume === null || volume === void 0 ? void 0 : volume.isDynamicVolume())) {
|
|
272
|
+
return _createDynamicVolumeViewportCinePlayContext(volume);
|
|
273
|
+
}
|
|
274
|
+
return _createVolumeViewportCinePlayContext(viewport, volume);
|
|
275
|
+
}
|
|
276
|
+
throw new Error('Unknown viewport type');
|
|
277
|
+
}
|
|
170
278
|
//# sourceMappingURL=playClip.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"playClip.js","sourceRoot":"","sources":["../../../../src/utilities/cine/playClip.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"playClip.js","sourceRoot":"","sources":["../../../../src/utilities/cine/playClip.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,18 +17,12 @@ function scroll(viewport, options) {
|
|
|
17
17
|
}
|
|
18
18
|
exports.default = scroll;
|
|
19
19
|
function scrollVolume(viewport, volumeId, delta) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (!imageVolume) {
|
|
24
|
-
throw new Error(`Could not find image volume with id ${volumeId} in the viewport`);
|
|
25
|
-
}
|
|
26
|
-
const actorEntry = viewport.getActor(imageVolume.volumeId);
|
|
27
|
-
if (!actorEntry) {
|
|
28
|
-
console.warn('No actor found for with actorUID of', imageVolume.volumeId);
|
|
20
|
+
const sliceRangeInfo = core_1.utilities.getVolumeSliceRangeInfo(viewport, volumeId);
|
|
21
|
+
if (!sliceRangeInfo) {
|
|
22
|
+
return;
|
|
29
23
|
}
|
|
30
|
-
const
|
|
31
|
-
const
|
|
24
|
+
const { sliceRange, spacingInNormalDirection, camera } = sliceRangeInfo;
|
|
25
|
+
const { focalPoint, viewPlaneNormal, position } = camera;
|
|
32
26
|
const { newFocalPoint, newPosition } = core_1.utilities.snapFocalPointToSlice(focalPoint, position, sliceRange, viewPlaneNormal, spacingInNormalDirection, delta);
|
|
33
27
|
viewport.setCamera({
|
|
34
28
|
focalPoint: newFocalPoint,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utilities/scroll.ts"],"names":[],"mappings":";;;AAAA,8CAK6B;AAY7B,SAAwB,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,oBAAa,EAAE;QACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;KACjD;SAAM,IAAI,QAAQ,YAAY,qBAAc,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;AAdD,yBAcC;AAED,SAAgB,YAAY,CAC1B,QAAwB,EACxB,QAAgB,EAChB,KAAa;IAEb,MAAM,
|
|
1
|
+
{"version":3,"file":"scroll.js","sourceRoot":"","sources":["../../../src/utilities/scroll.ts"],"names":[],"mappings":";;;AAAA,8CAK6B;AAY7B,SAAwB,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,oBAAa,EAAE;QACrC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;KACjD;SAAM,IAAI,QAAQ,YAAY,qBAAc,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;AAdD,yBAcC;AAED,SAAgB,YAAY,CAC1B,QAAwB,EACxB,QAAgB,EAChB,KAAa;IAEb,MAAM,cAAc,GAAG,gBAAO,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,gBAAO,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;AA5BD,oCA4BC"}
|
|
@@ -17,7 +17,7 @@ const clip_1 = __importDefault(require("../clip"));
|
|
|
17
17
|
const scroll_1 = __importDefault(require("../scroll"));
|
|
18
18
|
function jumpToSlice(element, options = {}) {
|
|
19
19
|
return __awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
const { imageIndex, debounceLoading } = options;
|
|
20
|
+
const { imageIndex, debounceLoading, volumeId } = options;
|
|
21
21
|
const enabledElement = (0, core_1.getEnabledElement)(element);
|
|
22
22
|
if (!enabledElement) {
|
|
23
23
|
throw new Error('Element has been disabled');
|
|
@@ -26,7 +26,7 @@ function jumpToSlice(element, options = {}) {
|
|
|
26
26
|
const { imageIndex: currentImageIndex, numberOfSlices } = _getImageSliceData(viewport, debounceLoading);
|
|
27
27
|
const imageIndexToJump = _getImageIndexToJump(numberOfSlices, imageIndex);
|
|
28
28
|
const delta = imageIndexToJump - currentImageIndex;
|
|
29
|
-
(0, scroll_1.default)(viewport, { delta, debounceLoading });
|
|
29
|
+
(0, scroll_1.default)(viewport, { delta, debounceLoading, volumeId });
|
|
30
30
|
});
|
|
31
31
|
}
|
|
32
32
|
function _getImageSliceData(viewport, debounceLoading) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jumpToSlice.js","sourceRoot":"","sources":["../../../../src/utilities/viewport/jumpToSlice.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8CAM6B;AAE7B,mDAA2B;AAC3B,uDAA+B;AAY/B,SAAe,WAAW,CACxB,OAAuB,EACvB,UAAU,EAAwB;;QAElC,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,8CAM6B;AAE7B,mDAA2B;AAC3B,uDAA+B;AAY/B,SAAe,WAAW,CACxB,OAAuB,EACvB,UAAU,EAAwB;;QAElC,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;QAC1D,MAAM,cAAc,GAAG,IAAA,wBAAiB,EAAC,OAAO,CAAC,CAAC;QAElD,IAAI,CAAC,cAAc,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;SAC9C;QAED,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,CAAC;QAEpC,MAAM,EAAE,UAAU,EAAE,iBAAiB,EAAE,cAAc,EAAE,GAAG,kBAAkB,CAC1E,QAAQ,EACR,eAAe,CAChB,CAAC;QAEF,MAAM,gBAAgB,GAAG,oBAAoB,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,gBAAgB,GAAG,iBAAiB,CAAC;QAEnD,IAAA,gBAAM,EAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAC,CAAC;IACzD,CAAC;CAAA;AAED,SAAS,kBAAkB,CACzB,QAAsD,EACtD,eAAyB;IAEzB,IAAI,QAAQ,YAAY,oBAAa,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,qBAAc,EAAE;QAC7C,OAAO,gBAAO,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,IAAA,cAAI,EAAC,UAAU,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;AAC7C,CAAC;AAED,kBAAe,WAAW,CAAC"}
|
|
@@ -3,6 +3,7 @@ declare type PlayClipOptions = {
|
|
|
3
3
|
frameTimeVector?: number[];
|
|
4
4
|
reverse?: boolean;
|
|
5
5
|
loop?: boolean;
|
|
6
|
+
dynamicCineEnabled?: boolean;
|
|
6
7
|
frameTimeVectorSpeedMultiplier?: number;
|
|
7
8
|
};
|
|
8
9
|
interface ToolData {
|
|
@@ -15,5 +16,12 @@ interface ToolData {
|
|
|
15
16
|
speed: number;
|
|
16
17
|
reverse: boolean;
|
|
17
18
|
loop: boolean;
|
|
19
|
+
dynamicCineEnabled?: boolean;
|
|
18
20
|
}
|
|
19
|
-
|
|
21
|
+
declare type CinePlayContext = {
|
|
22
|
+
get numScrollSteps(): number;
|
|
23
|
+
get currentStepIndex(): number;
|
|
24
|
+
get frameTimeVectorEnabled(): boolean;
|
|
25
|
+
scroll(delta: number): void;
|
|
26
|
+
};
|
|
27
|
+
export type { PlayClipOptions, ToolData, CinePlayContext };
|