Skip to content

Commit

Permalink
Merge pull request Kitware#2014 from finetjul/fix-interactorstyleimag…
Browse files Browse the repository at this point in the history
…e-setcurrentimagenumber

fix(interactorstyleimage): fix vtkInteractorStyleImage.setCurrentImag…
  • Loading branch information
finetjul authored Sep 14, 2021
2 parents 0da5564 + 474e4eb commit c6f82ad
Show file tree
Hide file tree
Showing 3 changed files with 95 additions and 14 deletions.
23 changes: 9 additions & 14 deletions Sources/Interaction/Style/InteractorStyleImage/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -223,25 +223,19 @@ function vtkInteractorStyleImage(publicAPI, model) {
model.currentImageNumber = i;

function propMatch(j, prop, targetIndex) {
return (
prop.isA('vtkImageSlice') &&
j === targetIndex &&
prop.getNestedPickable()
);
return j === targetIndex && prop.getNestedPickable();
}

const props = renderer.getViewProps();
const props = renderer
.getViewProps()
.filter((prop) => prop.isA('vtkImageSlice'));
let targetIndex = i;
if (i < 0) {
targetIndex += props.length;
}
let imageProp = null;
for (let j = 0; j < props.length; ++j) {
if (propMatch(j, props[j], targetIndex)) {
imageProp = props[j];
break;
}
}
const imageProp = props.find((prop, index) =>
propMatch(index, prop, targetIndex)
);

if (imageProp) {
publicAPI.setCurrentImageProperty(imageProp.getProperty());
Expand All @@ -263,7 +257,7 @@ const DEFAULT_VALUES = {
windowLevelCurrentPosition: [0, 0],
lastSlicePosition: 0,
windowLevelInitial: [1.0, 0.5],
currentImageProperty: 0,
// currentImageProperty: null,
currentImageNumber: -1,
interactionMode: 'IMAGE2D',
xViewRightVector: [0, 1, 0],
Expand All @@ -284,6 +278,7 @@ export function extend(publicAPI, model, initialValues = {}) {

// Create get-set macros
macro.setGet(publicAPI, model, ['interactionMode']);
macro.get(publicAPI, model, ['currentImageProperty']);

// For more macro methods, see "Sources/macros.js"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import test from 'tape-catch';

import vtkActor from 'vtk.js/Sources/Rendering/Core/Actor';
import vtkGenericRenderWindow from 'vtk.js/Sources/Rendering/Misc/GenericRenderWindow';
import vtkImageMapper from 'vtk.js/Sources/Rendering/Core/ImageMapper';
import vtkImageSlice from 'vtk.js/Sources/Rendering/Core/ImageSlice';
import vtkInteractorStyleImage from 'vtk.js/Sources/Interaction/Style/InteractorStyleImage';
import vtkSplineWidget from 'vtk.js/Sources/Widgets/Widgets3D/SplineWidget';
import vtkWidgetManager from 'vtk.js/Sources/Widgets/Core/WidgetManager';

test('Test vtkInteractorStyleImage.setCurrentImageNumber', (t) => {
const container = document.querySelector('body');
const renderWindowContainer = document.createElement('div');
container.appendChild(renderWindowContainer);
const grw = vtkGenericRenderWindow.newInstance();
grw.setContainer(renderWindowContainer);
grw.resize();

const renderer = grw.getRenderer();
const interactor = grw.getInteractor();
interactor.setEnabled(false);

const interactorStyle = vtkInteractorStyleImage.newInstance();
interactor.setInteractorStyle(interactorStyle);

const imageSlices = [];
for (let i = 0; i < 5; ++i) {
const imageMapper = vtkImageMapper.newInstance();
const imageActor = vtkImageSlice.newInstance();
imageActor.setMapper(imageMapper);
imageSlices.push(imageActor);
}
const widgetManager = vtkWidgetManager.newInstance();
widgetManager.setRenderer(renderer);

// Populate renderer with props other than image slice.
renderer.addActor(vtkActor.newInstance());
const widgetFactory = vtkSplineWidget.newInstance();

widgetManager.addWidget(widgetFactory); // Adds a widget in the renderer

renderer.addActor(imageSlices[0]);
widgetManager.addWidget(widgetFactory);
renderer.addActor(vtkActor.newInstance());
renderer.addActor(imageSlices[1]);
widgetManager.addWidget(widgetFactory);
renderer.addActor(vtkActor.newInstance());
renderer.addActor(imageSlices[2]);
widgetManager.addWidget(widgetFactory);
renderer.addActor(vtkActor.newInstance());
renderer.addActor(imageSlices[3]);
widgetManager.addWidget(widgetFactory);
renderer.addActor(vtkActor.newInstance());
renderer.addActor(imageSlices[4]);
widgetManager.addWidget(widgetFactory);
renderer.addActor(vtkActor.newInstance());

// Test setCurrentImageNumber()
interactorStyle.setCurrentImageNumber(0);
t.equal(
interactorStyle.getCurrentImageProperty(),
imageSlices[0].getProperty()
);
interactorStyle.setCurrentImageNumber(1);
t.equal(
interactorStyle.getCurrentImageProperty(),
imageSlices[1].getProperty()
);
interactorStyle.setCurrentImageNumber(4);
t.equal(
interactorStyle.getCurrentImageProperty(),
imageSlices[4].getProperty()
);
interactorStyle.setCurrentImageNumber(-1);
t.equal(
interactorStyle.getCurrentImageProperty(),
imageSlices[4].getProperty()
);
interactorStyle.setCurrentImageNumber(-2);
t.equal(
interactorStyle.getCurrentImageProperty(),
imageSlices[3].getProperty()
);
t.end();
});
1 change: 1 addition & 0 deletions Sources/tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ import './Filters/Sources/PointSource/test/testPointSource';
import './Filters/Texture/TextureMapToPlane/test/testTextureMapToPlane';
import './Filters/Texture/TextureMapToSphere/test/testTextureMapToSphere';
import './Imaging/Core/ImageReslice/test/testImageReslice';
import './Interaction/Style/InteractorStyleImage/test/testInteractorStyleImage';
import './IO/Misc/PDBReader/test/testMolecule';
import './Proxy/Core/PiecewiseFunctionProxy/test/testPiecewiseFunctionProxy';
import './Rendering/Core/AbstractMapper/test/testAbstractMapper';
Expand Down

0 comments on commit c6f82ad

Please # to comment.