Skip to content

Commit 17ea21e

Browse files
authored
Merge pull request #679 from lchauvin/keyboard-change-slice
feat(Slice): Use keyboard to change slices of the active view
2 parents a76e8fb + a38efeb commit 17ea21e

File tree

4 files changed

+33
-1
lines changed

4 files changed

+33
-1
lines changed

src/components/vtk/VtkSliceViewSlicingManipulator.vue

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ import vtkMouseRangeManipulator, {
1111
} from '@kitware/vtk.js/Interaction/Manipulators/MouseRangeManipulator';
1212
import vtkInteractorStyleManipulator from '@kitware/vtk.js/Interaction/Style/InteractorStyleManipulator';
1313
import { syncRef } from '@vueuse/core';
14-
import { inject, toRefs, computed } from 'vue';
14+
import { inject, toRefs, unref, watch, computed } from 'vue';
15+
import { useViewStore } from '@/src/store/views';
1516
1617
interface Props {
1718
viewId: string;
@@ -58,6 +59,13 @@ const scroll = useMouseRangeManipulatorListener(
5859
sliceConfig.slice.value
5960
);
6061
62+
watch(scroll, () => {
63+
const viewStore = useViewStore();
64+
if (unref(viewId) !== viewStore.activeViewID) {
65+
viewStore.setActiveViewID(unref(viewId));
66+
}
67+
});
68+
6169
syncRef(scroll, sliceConfig.slice, { immediate: true });
6270
</script>
6371

src/composables/actions.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@ import { Tools } from '../store/tools/types';
33
import { useRectangleStore } from '../store/tools/rectangles';
44
import { useRulerStore } from '../store/tools/rulers';
55
import { usePolygonStore } from '../store/tools/polygons';
6+
import { useViewStore } from '../store/views';
67
import { Action } from '../constants';
78
import { useKeyboardShortcutsStore } from '../store/keyboard-shortcuts';
9+
import { useCurrentImage } from './useCurrentImage';
10+
import { useSliceConfig } from './useSliceConfig';
811

912
const applyLabelOffset = (offset: number) => () => {
1013
const toolToStore = {
@@ -36,6 +39,14 @@ const showKeyboardShortcuts = () => {
3639
keyboardStore.settingsOpen = !keyboardStore.settingsOpen;
3740
};
3841

42+
const changeSlice = (offset: number) => () => {
43+
const { currentImageID } = useCurrentImage();
44+
const { activeViewID } = useViewStore();
45+
46+
const { slice: currentSlice } = useSliceConfig(activeViewID, currentImageID);
47+
currentSlice.value += offset;
48+
};
49+
3950
export const ACTION_TO_FUNC = {
4051
windowLevel: setTool(Tools.WindowLevel),
4152
pan: setTool(Tools.Pan),
@@ -48,6 +59,9 @@ export const ACTION_TO_FUNC = {
4859
polygon: setTool(Tools.Polygon),
4960
select: setTool(Tools.Select),
5061

62+
nextSlice: changeSlice(1),
63+
previousSlice: changeSlice(-1),
64+
5165
decrementLabel: applyLabelOffset(-1),
5266
incrementLabel: applyLabelOffset(1),
5367

src/config.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,9 @@ export const ACTION_TO_KEY = {
281281
mergeNewPolygon: 'Shift',
282282
select: 's',
283283

284+
nextSlice: 'arrowdown',
285+
previousSlice: 'arrowup',
286+
284287
decrementLabel: 'q',
285288
incrementLabel: 'w',
286289

src/constants.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,13 @@ export const ACTIONS = {
5353
readable: 'Activate Select tool',
5454
},
5555

56+
nextSlice: {
57+
readable: 'Next Slice',
58+
},
59+
previousSlice: {
60+
readable: 'Previous Slice',
61+
},
62+
5663
decrementLabel: {
5764
readable: 'Activate previous Label',
5865
},

0 commit comments

Comments
 (0)