@@ -74,6 +74,7 @@ function vtkInteractorStyleMPRSlice(publicAPI, model) {
74
74
const cache = {
75
75
sliceNormal : [ 0 , 0 , 0 ] ,
76
76
sliceRange : [ 0 , 0 ] ,
77
+ sliceCenter : [ ] ,
77
78
} ;
78
79
79
80
function updateScrollManipulator ( ) {
@@ -301,6 +302,12 @@ function vtkInteractorStyleMPRSlice(publicAPI, model) {
301
302
302
303
const clampedSlice = clamp ( slice , ...range ) ;
303
304
305
+ let cameraOffset = [ 0 , 0 , 0 ] ;
306
+ if ( cache . sliceCenter . length ) {
307
+ const oldPos = camera . getFocalPoint ( ) ;
308
+ vtkMath . subtract ( oldPos , cache . sliceCenter , cameraOffset ) ;
309
+ }
310
+
304
311
const center = [
305
312
( bounds [ 0 ] + bounds [ 1 ] ) / 2.0 ,
306
313
( bounds [ 2 ] + bounds [ 3 ] ) / 2.0 ,
@@ -323,12 +330,18 @@ function vtkInteractorStyleMPRSlice(publicAPI, model) {
323
330
zeroPoint [ 2 ] + dop [ 2 ] * clampedSlice ,
324
331
] ;
325
332
333
+ // Cache the center for comparison to calculate the next camera offset
334
+ cache . sliceCenter = [ ...slicePoint ] ;
335
+
326
336
const cameraPos = [
327
337
slicePoint [ 0 ] - dop [ 0 ] * distance ,
328
338
slicePoint [ 1 ] - dop [ 1 ] * distance ,
329
339
slicePoint [ 2 ] - dop [ 2 ] * distance ,
330
340
] ;
331
341
342
+ vtkMath . add ( slicePoint , cameraOffset , slicePoint ) ;
343
+ vtkMath . add ( cameraPos , cameraOffset , cameraPos ) ;
344
+
332
345
camera . setPosition ( ...cameraPos ) ;
333
346
camera . setFocalPoint ( ...slicePoint ) ;
334
347
return slicePoint ;
0 commit comments